From 6ae98c06f6cc4d8adaf2df6de6ac8deca5ab091d Mon Sep 17 00:00:00 2001 From: MadReza Date: Tue, 31 Dec 2024 15:56:46 +0330 Subject: [PATCH 01/97] feat: divide Pryzm Protocol into two protocols --- .../{pryzm => pryzm-liquid-staking}/index.js | 27 -------------- projects/pryzm-protocol/index.js | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 27 deletions(-) rename projects/{pryzm => pryzm-liquid-staking}/index.js (62%) create mode 100644 projects/pryzm-protocol/index.js diff --git a/projects/pryzm/index.js b/projects/pryzm-liquid-staking/index.js similarity index 62% rename from projects/pryzm/index.js rename to projects/pryzm-liquid-staking/index.js index 22f541c9f681..f758f6b2c7cb 100644 --- a/projects/pryzm/index.js +++ b/projects/pryzm-liquid-staking/index.js @@ -34,7 +34,6 @@ const host_chains = { }; const endpoint = endPoints["pryzm"] -const amm_vault_address = "pryzm1y7d08j5uy7kgurnv4pwag8h34m2cgptcwe75wn"; function tvlOnChain(chain) { return async (api) => { @@ -49,32 +48,6 @@ function tvlOnChain(chain) { }; } -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 - } - if (denom === 'ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395') - api.addCGToken('terra-luna-2', amount/1e6) - else - 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 diff --git a/projects/pryzm-protocol/index.js b/projects/pryzm-protocol/index.js new file mode 100644 index 000000000000..4408583e6657 --- /dev/null +++ b/projects/pryzm-protocol/index.js @@ -0,0 +1,36 @@ +const { get } = require('../helper/http') +const { endPoints, } = require('../helper/chain/cosmos'); +const { concat } = require("ethers"); + +const endpoint = endPoints["pryzm"] +const amm_vault_address = "pryzm1y7d08j5uy7kgurnv4pwag8h34m2cgptcwe75wn"; +const refractor_vault_address = "pryzm1xtnrr4e6553hap0zuveautjstc3w2sxmf2zph3"; + +async function tvl(api) { + const [{ balances: amm_balances }, { balances: refractor_balances }] = + await Promise.all([ + await get(`${endpoint}/cosmos/bank/v1beta1/balances/${amm_vault_address}?pagination.limit=1000`), + await get(`${endpoint}/cosmos/bank/v1beta1/balances/${refractor_vault_address}?pagination.limit=1000`) + ]); + + let all_balances = amm_balances.concat(refractor_balances); + for (const { denom, amount } of all_balances) { + if (denom.startsWith("p:") || + denom.startsWith("y:") || + denom.startsWith("lp:") + ) { + continue + } + if (denom === 'ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395') + api.addCGToken('terra-luna-2', amount/1e6) + else + api.add(denom, amount); + } +} + +module.exports = { + methodology: "Counts the liquidity on the refractor module and all AMM pools", + pryzm: { + tvl + }, +}; From e968b2d47d6dbe31c6268e573fd1bd1bc8668f40 Mon Sep 17 00:00:00 2001 From: sniffy Date: Wed, 1 Jan 2025 08:49:52 +0530 Subject: [PATCH 02/97] 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 000000000000..c43a7ce74300 --- /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 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 03/97] 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 c73c96410055..e105101bb596 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 bf52b2432175..bb4b8474888b 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 04/97] 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 a1e60a0d5431..b04e5093e016 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 05/97] 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 6d3d10120082..8515dc487cff 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 06/97] 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 000000000000..72f7c7146b59 --- /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 07/97] 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 72f7c7146b59..8ec0d728c6ab 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 08/97] fix --- projects/helper/env.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/helper/env.js b/projects/helper/env.js index bb4b8474888b..5b576c1a376f 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 09/97] 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 b0bc1d48760a..cc0a93c39257 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 10/97] 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 924a420ba0b3..7a6b5611b798 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 119d797cb1de..c3c371fb1d6b 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 332ac4ca58a5..626d8109518d 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 11/97] 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 000000000000..f02bf5326b96 --- /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 90749bcd6fad..92ea8bcc2e8b 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 5b576c1a376f..6d8ae9d7df7f 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 d05350f395d0..c36d7e61c691 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 12/97] 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 000000000000..30200dbf2c99 --- /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 000000000000..64523d8dc889 --- /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 13/97] 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 f6c616da259e..6abfdf1e42ef 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 14/97] 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 119f8af69126..93e6d65a027f 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 15/97] 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 16a0dbca56c7..4d6d92c336a5 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 50b4ad6e8160..aea053b9712f 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 92ea8bcc2e8b..4c340460868b 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 c36d7e61c691..a3c555ca8fc2 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 000000000000..8ab368def4a6 --- /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 16/97] 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 000000000000..944881bdd80b --- /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 000000000000..ec82246f11f3 --- /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 000000000000..75e4c926e2c4 --- /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 c525e7cc96f5..fbc591600b45 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 041e5deb2244..93990ef65d65 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 17/97] 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 daeafe765028..86474d309a83 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 18/97] 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 914f8e123518..a3943238dce8 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 19/97] 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 c8ab89f2f693..caf3334767f7 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 000000000000..7c44ac071925 --- /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 20/97] 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 000000000000..0cfc17c3c934 --- /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 21/97] 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 000000000000..ca0cc26075b0 --- /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 000000000000..f8ebd1ff8804 --- /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 22/97] 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 0087bc801a10..2fc07724cbc5 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 23/97] 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 a48c01035dcc..80359a8a1d71 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 24/97] 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 000000000000..5511d341e544 --- /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 25/97] 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 982cb10fab32..8bec8eecc567 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 26/97] 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 000000000000..6f52f46f15b5 --- /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 27/97] 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 93e6d65a027f..4317e4b75afd 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 28/97] 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 e105101bb596..794800f1dd65 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 687f1e8d1c23..50bf77972e51 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 29/97] 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 000000000000..3a3a2b77a527 --- /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 000000000000..2f36a918f972 --- /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 30/97] 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 000000000000..849813e57b48 --- /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 4540d2a5aabb..5b00a45bf49c 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 9bdf133e7470..c909ffcc895f 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 31/97] 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 8ec0d728c6ab..2aab05309fe4 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 32/97] 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 000000000000..f9e391148685 --- /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 33/97] 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 000000000000..63c4d30eb978 --- /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 34/97] 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 4499b8885c3a..528f2cfd69e3 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 059c5c5a78e8..dbb53dc722d3 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 000000000000..f63d8d148e33 --- /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 000000000000..a7c44bfe19c6 --- /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 000000000000..a6e70584ad35 --- /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 d1ff69bdb911..b7320e9fb91e 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 000000000000..8598f8e2e88f --- /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 000000000000..2977c8e20045 --- /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 000000000000..a06165c3a760 --- /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 aea053b9712f..8786dc487b47 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 c376231260eb..9db72db6a348 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 a3c555ca8fc2..1324599fc783 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 35/97] 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 c87bc5636ac6..374fb2e88fd2 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 36/97] 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 30ae9353b302..38414a3ec48e 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 37/97] 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 80f40d495ce1..3d667aa5c349 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 38/97] 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 3591023d4b28..42804a463de7 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 39/97] 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 3b8100dcc0c5..1cd38ee3866c 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 40/97] 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 528f2cfd69e3..4ead38599bac 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 a6e70584ad35..1ca93d824b1b 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 41/97] 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 712030b7204a..ef90f0643218 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 42/97] 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 0d1d0bac445b..04d7290f0532 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 43/97] 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 590012a459f4..557bcd413a23 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 44/97] 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 fc22664beac7..dd5fae54c2d0 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 45/97] 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 000000000000..570a986902f2 --- /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 46/97] 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 000000000000..28fe21edc3f2 --- /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 e494f6871c4d..eb7b1e90a083 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 47/97] 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 6a613cf7eeba..4d798dcc63b6 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 48/97] 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 5b9d05f38a5d..d23640a24e38 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 49/97] 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 4c340460868b..e850239e9685 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 1324599fc783..2a72fef26107 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 000000000000..a1f3921794d0 --- /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 50/97] 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 f3d9acdf980d..c8f8aff25d24 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 f904f2c2686b..73cbe4349d9a 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 a06165c3a760..2278ee65473c 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 8786dc487b47..9fa4cb73c28a 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 9db72db6a348..f1cc24816778 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 2a72fef26107..207ee2db7d98 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 1eaac5923554..2b8e8580ed8b 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 86474d309a83..ce9c466c5bb0 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 a1f3921794d0..6b08dad2ff9c 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 51/97] 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 adc4a2f6c0a7..cbf99a443df1 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 52/97] 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 f9790d294b95..00d34d51fdd0 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 53/97] 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 000000000000..ecfcc41879f8 --- /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 54/97] 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 2fc07724cbc5..9b499ba97881 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 55/97] 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 8de3a066146f..a0e11b966bb5 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 bdb3b6df1dae..a58abcc44ad2 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 000000000000..bbff27fda1d7 --- /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 56/97] 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 000000000000..8f0e6562d9a8 --- /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 57/97] 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 14c6cc39e75c..9441ff0d0e71 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 58/97] 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 da3d724db566..6715c16c2930 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 59/97] 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 79522802e0a2..65d76621ae9c 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 60/97] 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 20f177d9e6ca..3ad5498ed0fb 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 0d7b871d2746..eb3247ee676d 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 61/97] 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 90d31b0c9511..e2f29e7fc5eb 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 62/97] 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 6715c16c2930..d5c622f22930 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 63/97] 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 1d2e0a465712..f4ccf119a486 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 e4d27a2d890b..1626095e85b5 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 000000000000..982eac7c964c --- /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 000000000000..f4d3a66990ca --- /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 000000000000..9a590b32940e --- /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 64/97] 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 cd8f232c71fe..3c67b92f00c2 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 65/97] 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 4f6f7dc694a3..ec358d77c248 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 66/97] 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 a8cb5deee960..291dfbf3e756 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 67/97] 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 207ee2db7d98..88f1164ad111 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 000000000000..38353161f68a --- /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 68/97] 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 1b0c925d00f4..b7cd2d799ad8 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 69/97] 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 fb8b241eba18..a1862e92b31d 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 70/97] bugfix --- projects/curve/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/curve/index.js b/projects/curve/index.js index eb3247ee676d..85295f3fdb5e 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 71/97] 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 4da89a31c946..aa21ddd727b2 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 72/97] 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 000000000000..50ca1cc02351 --- /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 73/97] 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 000000000000..a01dbabaea44 --- /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) + } +} From 2047f364827e87354d00d2e264934e41cd136eec Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 9 Jan 2025 12:57:48 +0000 Subject: [PATCH 74/97] sophon --- projects/sophon-bridge/index.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 projects/sophon-bridge/index.js diff --git a/projects/sophon-bridge/index.js b/projects/sophon-bridge/index.js new file mode 100644 index 000000000000..8e73b8c5b7c1 --- /dev/null +++ b/projects/sophon-bridge/index.js @@ -0,0 +1,31 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" +const gasQuery = '0x0000000000000000000000000000000000000001' +const gasAddress = '0x0000000000000000000000000000000000000000' +const chainId = 50104 + +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) + }) + } + }, +}; From 67703565fdff5c54e1c0f117119a547d0ba68be8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:15:34 +0100 Subject: [PATCH 75/97] fix popcorn --- projects/popcorn/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index 8bc74146b8dc..29eefa6808e1 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -29,6 +29,9 @@ async function tvl(api) { await addFraxVaultToTVL(balances, api); } + if (api.chain === 'ethereum') + vaultAddresses = vaultAddresses.filter(i => !['0xcF9273BA04b875F94E4A9D8914bbD6b3C1f08EDb'].includes(i)) + const assets = await api.multiCall({ abi: getAssetAbi, calls: vaultAddresses, }); const totalAssets = await api.multiCall({ abi: getTotalAssets, calls: vaultAddresses, }); From d19ea70bfdd4c16a22f1b3cf8b03d308d75559d8 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:21:46 +0100 Subject: [PATCH 76/97] track sophon bridge --- projects/sophon/index.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects/sophon/index.js diff --git a/projects/sophon/index.js b/projects/sophon/index.js new file mode 100644 index 000000000000..7c557c4be885 --- /dev/null +++ b/projects/sophon/index.js @@ -0,0 +1,7 @@ +const getTvl = require("../txBridge/util") + +module.exports = { + ethereum: { + tvl: async (api) => getTvl(api, { chainId: 50104, }), + }, +} From 60691b0eee6ce039e52e9ba684527fefce732568 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:50:06 +0100 Subject: [PATCH 77/97] update blacksail --- projects/blacksail/index.js | 19 ++++++++++++------- projects/helper/env.js | 3 ++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/projects/blacksail/index.js b/projects/blacksail/index.js index 28fe21edc3f2..0e87fe4cd269 100644 --- a/projects/blacksail/index.js +++ b/projects/blacksail/index.js @@ -1,17 +1,22 @@ +const { getConfig } = require('../helper/cache'); const { get } = require('../helper/http') +const { getEnv } = require('../helper/env') const { sumUnknownTokens } = require('../helper/unknownTokens') async function fetcher() { - const response = await get('https://api.blacksail.finance/stats'); - return response; + const { data: { yield }} = await get('https://api.blacksail.finance/stats', { + headers: { + 'x-api-key': getEnv('BLACKSAIL_API_KEY'), + 'Content-Type': 'application/json' + } + }); + return Object.values(yield).map((i) => i.strat_address).filter(i => i) } -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 }) + let strats = await getConfig('blacksail/strats', undefined, { fetcher }) + strats = (await api.multiCall({ abi: 'address:staking_token', calls: strats, permitFailure: true })).map((v, i) => v ? strats[i] : null).filter(i => i) + 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 = [] diff --git a/projects/helper/env.js b/projects/helper/env.js index 6d8ae9d7df7f..71192fcd5c93 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -34,7 +34,8 @@ const ENV_KEYS = [ 'SUMMER_CONFIRMED_VAULTS_ENDPOINT', 'ETHEREUM_TOKENS_ENDPOINT', 'FBTC_ACCESS_TOKEN', - 'UNISAT_AUTH' + 'UNISAT_AUTH', + 'BLACKSAIL_API_KEY', ] Object.keys(DEFAULTS).forEach(i => { From 867719b6c8f2112dfac7875386b02d519d5ad93c Mon Sep 17 00:00:00 2001 From: mo Date: Thu, 9 Jan 2025 16:24:25 +0100 Subject: [PATCH 78/97] curve: track ink (#13039) --- projects/curve/contracts.json | 7 +++++++ projects/curve/index.js | 1 + 2 files changed, 8 insertions(+) diff --git a/projects/curve/contracts.json b/projects/curve/contracts.json index 3ad5498ed0fb..5473e3bbdd36 100644 --- a/projects/curve/contracts.json +++ b/projects/curve/contracts.json @@ -221,5 +221,12 @@ "CurveStableswapFactoryNG": "0x7C2085419BE6a04f4ad88ea91bC9F5C6E6C463D8", "CurveTwocryptoFactoryNG": "0x1A83348F9cCFD3Fe1A8C0adBa580Ac4e267Fe495", "CurveTricryptoFactoryNG": "0x635742dCC8313DCf8c904206037d962c042EAfBd" + }, + "ink": { + "gasTokenDummy": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "wrapped": "0x4200000000000000000000000000000000000006", + "CurveStableswapFactoryNG": "0x046207cB759F527b6c10C2D61DBaca45513685CC", + "CurveTwocryptoFactoryNG": "0xd125E7a0cEddF89c6473412d85835450897be6Dc", + "CurveTricryptoFactoryNG": "0x5Ea9DD3b6f042A34Df818C6c1324BC5A7c61427a" } } \ No newline at end of file diff --git a/projects/curve/index.js b/projects/curve/index.js index 85295f3fdb5e..1a3488fc5b82 100644 --- a/projects/curve/index.js +++ b/projects/curve/index.js @@ -30,6 +30,7 @@ const chains = [ "taiko", "corn", "sonic", + "ink" ]; const registryIds = { stableswap: 0, From 0d2ce8ddca5756985dfa9b6c1c7b2face927f383 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:40:11 +0100 Subject: [PATCH 79/97] update drop #13038 --- projects/drop/index.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/projects/drop/index.js b/projects/drop/index.js index 7cf5f94515f8..7373983a81fb 100644 --- a/projects/drop/index.js +++ b/projects/drop/index.js @@ -3,13 +3,17 @@ const { queryContract } = require('../helper/chain/cosmos') const config = { neutron: [{ coinGeckoId: "cosmos", - contract: "neutron16m3hjh7l04kap086jgwthduma0r5l0wh8kc6kaqk92ge9n5aqvys9q6lxr" + dropContract: "neutron16m3hjh7l04kap086jgwthduma0r5l0wh8kc6kaqk92ge9n5aqvys9q6lxr" + }, + { + coinGeckoId: "celestia", + dropContract: "neutron1fp649j8djj676kfvh0qj8nt90ne86a8f033w9q7p9vkcqk9mmeeqxc9955" }], }; 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": {} } }) + for (const { coinGeckoId, dropContract, decimals = 6 } of config[api.chain]) { + const bonded = await queryContract({ contract: dropContract, chain: api.chain, data: { "total_bonded": {} } }) api.addCGToken(coinGeckoId, bonded / 10 ** decimals) } } From 4a546fd262aa18fdbdf0828cb7ad1ad3d36f94a3 Mon Sep 17 00:00:00 2001 From: imfeng Date: Thu, 9 Jan 2025 23:40:57 +0800 Subject: [PATCH 80/97] =?UTF-8?q?Updated=20TVL=20For=20Satoshi=20Protocol?= =?UTF-8?q?=20on=20B=C2=B2=20Network=20chain=20(#13040)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- projects/satoshi-protocol/index.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/projects/satoshi-protocol/index.js b/projects/satoshi-protocol/index.js index f5300078d66d..8a7f01752305 100644 --- a/projects/satoshi-protocol/index.js +++ b/projects/satoshi-protocol/index.js @@ -1,6 +1,7 @@ const { sumTokens2 } = require("../helper/unwrapLPs") const { getLogs } = require("../helper/cache/getLogs"); const AssetConfigSettingEventABI = "event AssetConfigSetting(address asset,uint256 feeIn,uint256 feeOut,uint256 debtTokenMintCap,uint256 dailyMintCap,address oracle,bool isUsingOracle,uint256 swapWaitingPeriod,uint256 maxPrice,uint256 minPrice)"; +const VaultTokenStrategySetEventABI = "event TokenStrategySet(address token, address strategy)"; function createExports({ @@ -8,6 +9,7 @@ function createExports({ nymInformation, // { address, fromBlock } aaveStrategyVaults, // { address, asset, aToken }[] pellStrategyVaults, // { address, asset }[] + pellStrategyVaultsV2, // { address, fromBlock }[] }) { return { tvl: async (api) => { @@ -48,6 +50,17 @@ function createExports({ api.add(tokens, bals) } + if (pellStrategyVaultsV2) { + for(let i = 0; i < pellStrategyVaultsV2.length; i++) { + const { address: vaultAddress, fromBlock } = pellStrategyVaultsV2[i]; + const logs = await getLogs({ api, target: vaultAddress, fromBlock, eventAbi: VaultTokenStrategySetEventABI, onlyArgs: true }); + const assets = logs.map(item => item.token); + const calls = assets.map((asset) => ({ target: vaultAddress, params: asset })) + const assetAmounts = await api.multiCall({ abi: "function getPosition(address) external view returns (uint256)", calls: calls }) + api.add(assets, assetAmounts) + } + } + return sumTokens2({ api, tokensAndOwners2: [tokens, owners] }) }, } @@ -114,5 +127,11 @@ module.exports = { '0xa79241206c3008bE4EB4B62A48A4F98303060D4f', // BSquare WBTC Collateral '0xc6F361db5eC432E95D0A08A9Fbe0d7412971cE6c', // BSquare uBTC Collateral ], + pellStrategyVaultsV2: [ + { + address: '0x1F745AEC91A7349E4F846Ae1D94915ec4f6cF053', + fromBlock: 11581100, + } + ] }), -} +} \ No newline at end of file From f275e702146c8ea049b33cf66925d829a56e840e Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:52:05 +0100 Subject: [PATCH 81/97] update spiko --- projects/helper/tokenMapping.js | 4 +++ projects/spiko/index.js | 60 ++++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index 88f1164ad111..e519aad2332b 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -122,6 +122,10 @@ const fixBalancesTokens = { '0x1B100DE3F13E3f8Bb2f66FE58c1949c32E71248B': { coingeckoId: 'ethereum', decimals: 18 }, '0x9CE808657ba90C65a2700b1cA5D943eC72834B52': { coingeckoId: 'wrapped-bitcoin', decimals: 8 }, }, + starknet: { + '0x20ff2f6021ada9edbceaf31b96f9f67b746662a6e6b2bc9d30c0d3e290a71f6': { coingeckoId: 'spiko-us-t-bills-money-market-fund', decimals: 5 }, + '0x4f5e0de717daa6aa8de63b1bf2e8d7823ec5b21a88461b1519d9dbc956fb7f2': { coingeckoId: 'eutbl', decimals: 5 }, + } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/spiko/index.js b/projects/spiko/index.js index 969fbee11a08..648318b20f0c 100644 --- a/projects/spiko/index.js +++ b/projects/spiko/index.js @@ -1,21 +1,49 @@ -const assets = { - polygon: [ - '0xe4880249745eAc5F1eD9d8F7DF844792D560e750', - '0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80' - ], - ethereum: [ - '0xe4880249745eAc5F1eD9d8F7DF844792D560e750', - '0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80' - ] +const { multiCall } = require('../helper/chain/starknet') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + polygon: [ + '0xe4880249745eAc5F1eD9d8F7DF844792D560e750', + '0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80' + ], + ethereum: [ + '0xe4880249745eAc5F1eD9d8F7DF844792D560e750', + '0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80' + ], + arbitrum: [ + '0x021289588cd81dC1AC87ea91e91607eEF68303F5', + '0xcbeb19549054cc0a6257a77736fc78c367216ce7' + ], + starknet: [ + '0x20ff2f6021ada9edbceaf31b96f9f67b746662a6e6b2bc9d30c0d3e290a71f6', + '0x4f5e0de717daa6aa8de63b1bf2e8d7823ec5b21a88461b1519d9dbc956fb7f2' + ] } -module.exports = {} +const totalSupplyAbi = { + "name": "totalSupply", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "totalSupply", + "type": "uint256" + } + ], + "stateMutability": "view", +} -Object.keys(assets).forEach(chain => { - module.exports[chain] = { - tvl: (api) => api.multiCall({ - abi: 'erc20:totalSupply', - calls: assets[api.chain].map(target => ({ target })) - }).then(supplies => api.add(assets[api.chain], supplies)) +Object.keys(config).forEach(chain => { + const assets = config[chain] + module.exports[chain] = { + tvl: async (api) => { + let supplies + if (chain === 'starknet') + supplies = await multiCall({ abi: totalSupplyAbi, calls: assets }) + else + supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: assets }) + api.add(assets, supplies) + return sumTokens2({ api }) } + } }) \ No newline at end of file From 62d6480ee43caaadb15c320c296b55e077f8508f Mon Sep 17 00:00:00 2001 From: 0xpeluche <110820448+0xpeluche@users.noreply.github.com> Date: Thu, 9 Jan 2025 17:35:07 +0100 Subject: [PATCH 82/97] Update: BUIDL (#13044) --- projects/securitize/index.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/projects/securitize/index.js b/projects/securitize/index.js index 7f0cbae78c00..3a8e1b807e06 100644 --- a/projects/securitize/index.js +++ b/projects/securitize/index.js @@ -1,13 +1,23 @@ -const ADDRESSES = require('../helper/coreAssets.json') +const CONFIG = { + ethereum: [ + '0x7712c34205737192402172409a8f7ccef8aa2aec', // BUIDL + '0x6a9DA2D710BB9B700acde7Cb81F10F1fF8C89041' // BUIDL-I + ], + polygon: ['0x2893ef551b6dd69f661ac00f11d93e5dc5dc0e99'], // BUIDL + avax: ['0x53fc82f14f009009b440a706e31c9021e1196a2f'], // BUIDL + optimism: ['0xa1cdab15bba75a80df4089cafba013e376957cf5'], // BUIDL + arbitrum: ['0xa6525ae43edcd03dc08e775774dcabd3bb925872'], // BUIDL +} + +const tvl = async (api) => { + const tokens = CONFIG[api.chain] + const supplies = await api.multiCall({ calls: tokens, abi: 'erc20:totalSupply' }) -const BUIDL = { - ethereum: '0x7712c34205737192402172409a8f7ccef8aa2aec', - polygon: '0x2893ef551b6dd69f661ac00f11d93e5dc5dc0e99', - avax: '0x53fc82f14f009009b440a706e31c9021e1196a2f', - optimism: '0xa1cdab15bba75a80df4089cafba013e376957cf5', - arbitrum: '0xa6525ae43edcd03dc08e775774dcabd3bb925872', + supplies.forEach((supply) => { + api.addUSDValue(supply / 1e6) + }) } -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 }) } } -}) +Object.keys(CONFIG).forEach((chain) => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From 2869133ffc35c08f584349fb9485bc25ca1661a1 Mon Sep 17 00:00:00 2001 From: dunglv-smartosc <108668260+dunglv-smartosc@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:47:49 +0700 Subject: [PATCH 83/97] Update: D2Finance (#13043) Co-authored-by: dunglv-smartosc --- projects/d2finance/index.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/projects/d2finance/index.js b/projects/d2finance/index.js index 03e52d4bfd1a..36496a21f111 100644 --- a/projects/d2finance/index.js +++ b/projects/d2finance/index.js @@ -20,18 +20,23 @@ const vaultTvlOnArbitrum = sumERC4626VaultsExport({ "0x195a9e0f29f96d4ab2139ee1272380a4aa352890", '0x75288264FDFEA8ce68e6D852696aB1cE2f3E5004', '0xaB2743a3A2e06d457368E901F5f927F271fa1374', - '0x91aCd32dA9beA6DA3751dc12Ee0fBe47169349C1' + '0x91aCd32dA9beA6DA3751dc12Ee0fBe47169349C1', + '0xc027EC28F76d92D4124fCbffCF6b25137a84968C', + '0x999a57ae7694298126a5db2E44F778CA486b14FC', + '0xaC75f0c46723432a2303f2a7c7769535A179Ed56', + '0x907A9f69061736AD82811CccD6ADD9dC4A2352A9', + '0x1176c3760Af6a1dbAa5BBd0Cc6cdA8A2Ed6B785E' ], isOG4626: true, }); -const vaultTvlOnAvalanche = sumERC4626VaultsExport({ - vaults: ["0x17Fd8C3d1e0379Cf6B1Dace21750E624EB9573C2"], +const vaultTvlOnBase = sumERC4626VaultsExport({ + vaults: ['0x6c05A7d2c24B48fC3C615D294fEc2eB068548897'], isOG4626: true, }) -const vaultTvlOnBase = sumERC4626VaultsExport({ - vaults: ['0x6c05A7d2c24B48fC3C615D294fEc2eB068548897'], +const vaultTvlOnEthereum = sumERC4626VaultsExport({ + vaults: ['0x07Dff4087b43c4A759f4Fc69511c26d51929dAF4'], isOG4626: true, }) @@ -39,10 +44,10 @@ module.exports = { arbitrum: { tvl: vaultTvlOnArbitrum, }, - avax: { - tvl: vaultTvlOnAvalanche, - }, base: { tvl: vaultTvlOnBase, - } + }, + ethereum: { + tvl: vaultTvlOnEthereum, + }, }; From 1230a5938c47d5a877e3e702dba1ec000a700fae Mon Sep 17 00:00:00 2001 From: vladjito <95035799+vladjito@users.noreply.github.com> Date: Thu, 9 Jan 2025 22:31:02 +0100 Subject: [PATCH 84/97] Crypto Valley Exchange (CVEX) listing (#13046) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/cvex/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 projects/cvex/index.js diff --git a/projects/cvex/index.js b/projects/cvex/index.js new file mode 100644 index 000000000000..1ed039878632 --- /dev/null +++ b/projects/cvex/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +const MAIN_CONTRACT = '0xBe14D34ce8737614331cE1904AA659E26657eE85'; // Main Contract Address (Proxy) + +module.exports = { + methodology: 'counts the USDC balance in the main contract on Arbitrum.', + arbitrum: { + tvl: sumTokensExport({ owner: MAIN_CONTRACT, tokens: [ADDRESSES.arbitrum.USDC_CIRCLE] }), + }, +} \ No newline at end of file From 31465ad42e54e20786eb635dca98a03cc77f9c13 Mon Sep 17 00:00:00 2001 From: Jay Welsh Date: Fri, 10 Jan 2025 01:28:51 +0200 Subject: [PATCH 85/97] feat(projects/silo): add support for Silo V2 on Sonic & Arbitrum (#13034) --- projects/silo-v2/index.js | 110 ++++++++++++++++++++++++++++++++++++++ projects/silo/index.js | 66 +++++++++++++---------- 2 files changed, 147 insertions(+), 29 deletions(-) create mode 100644 projects/silo-v2/index.js diff --git a/projects/silo-v2/index.js b/projects/silo-v2/index.js new file mode 100644 index 000000000000..14659c27db1a --- /dev/null +++ b/projects/silo-v2/index.js @@ -0,0 +1,110 @@ +const sdk = require('@defillama/sdk') +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +const XAI = '0xd7c9f0e536dc865ae858b0c0453fe76d13c3beac' +const blacklistedSilos = ["0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa",]; + +const getAssetAbiV2 = "address:asset"; +const getAssetStateAbiV2 = 'function getTotalAssetsStorage(uint8 _assetType) external view returns (uint256 totalAssetsByType)'; + +const configV2 = { + sonic: { + factories: [ + { + START_BLOCK: 2672166, + SILO_FACTORY: '0xa42001d6d2237d2c74108fe360403c4b796b7170', // Silo V2 Sonic (Main) + } + ] + }, + arbitrum: { + factories: [ + { + START_BLOCK: 291201890, + SILO_FACTORY: '0xf7dc975C96B434D436b9bF45E7a45c95F0521442', // Silo V2 Arbitrum (Main) + } + ] + } +} + +async function tvl(api) { + // Handle V2 silos + let toaV2 = []; + if(configV2[api.chain]) { + const siloArrayV2 = await getSilosV2(api); + const assetsV2 = await api.multiCall({ + abi: getAssetAbiV2, + calls: siloArrayV2.map(i => ({ target: i })), + }); + toaV2 = assetsV2.map((asset, i) => [[asset], siloArrayV2[i]]); + } + + return sumTokens2({ api, ownerTokens: toaV2, blacklistedTokens: [XAI], }); +} + +async function borrowed(api) { + if(configV2[api.chain]) { + // Handle V2 silos + const siloArrayV2 = await getSilosV2(api); + + // Get asset address for each silo + const siloAssets = await api.multiCall({ + abi: getAssetAbiV2, + calls: siloArrayV2.map(i => ({ target: i })), + }); + + // Get total borrow amount for each silo (AssetType.DEBT = 2) + const borrowAmounts = await api.multiCall({ + abi: getAssetStateAbiV2, + calls: siloArrayV2.map(i => ({ target: i, params: [2] })), + }); + + // Add borrow amounts for V2 silos + siloAssets.forEach((asset, index) => { + if (asset.toLowerCase() === XAI) return; + return api.add(asset, borrowAmounts[index]) + }); + } +} + +async function getSilosV2(api) { + const chain = api.chain; + let logs = []; + let siloAddresses = []; + if(configV2[chain]) { + for(let factory of configV2[chain].factories) { + const { SILO_FACTORY, START_BLOCK } = factory; + let logChunk = await getLogs({ + api, + target: SILO_FACTORY, + fromBlock: START_BLOCK, + eventAbi: 'event NewSilo(address indexed implementation, address indexed token0, address indexed token1, address silo0, address silo1, address siloConfig)', + }); + logs = [...logs, ...logChunk]; + } + + siloAddresses = logs.flatMap((log) => { + + let silo0 = log.args[3]; + let silo1 = log.args[4]; + + return [silo0, silo1].filter( + (address) => blacklistedSilos.indexOf(address.toLowerCase()) === -1 + ); + }); + + } + + return siloAddresses; +} + + +module.exports = { + methodology: `We calculate TVL by interacting with Silo Factory smart contracts on Ethereum, Arbitrum, Base & Optimism. For Ethereum, it queries Silo(Main-V2)(0xa42001d6d2237d2c74108fe360403c4b796b7170). On Arbitrum, we query the Silo Arbitrum factory (Main-V2)(0xf7dc975C96B434D436b9bF45E7a45c95F0521442), we query the factories to obtain the addresses of Silos, retrieve the assets of each Silo, and then calculate the sum of the deposited tokens, borrowed amounts are calculated separately from TVL.`, + // ethereum: { tvl, borrowed, }, + arbitrum: { tvl, borrowed, }, + // optimism: { tvl, borrowed, }, + // base: { tvl, borrowed, }, + sonic: { tvl, borrowed, }, + hallmarks: [] +} \ No newline at end of file diff --git a/projects/silo/index.js b/projects/silo/index.js index c2659f15db43..31ddacc41833 100644 --- a/projects/silo/index.js +++ b/projects/silo/index.js @@ -1,11 +1,14 @@ const sdk = require('@defillama/sdk') const { sumTokens2 } = require('../helper/unwrapLPs') const { getLogs } = require('../helper/cache/getLogs') -const getAssetsAbi = "address[]:getAssets" -const getAssetStateAbi = 'function getAssetsWithState() view returns (address[] assets, tuple(address collateralToken, address collateralOnlyToken, address debtToken, uint256 totalDeposits, uint256 collateralOnlyDeposits, uint256 totalBorrowAmount)[] assetsStorage)' +const XAI = '0xd7c9f0e536dc865ae858b0c0453fe76d13c3beac' +const blacklistedSilos = ["0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa",]; + +const getAssetsAbiV1 = "address[]:getAssets" +const getAssetStateAbiV1 = 'function getAssetsWithState() view returns (address[] assets, tuple(address collateralToken, address collateralOnlyToken, address debtToken, uint256 totalDeposits, uint256 collateralOnlyDeposits, uint256 totalBorrowAmount)[] assetsStorage)' -const config = { +const configV1 = { ethereum: { factories: [ { @@ -52,39 +55,43 @@ const config = { }, } -const XAI = '0xd7c9f0e536dc865ae858b0c0453fe76d13c3beac' -const fallbackBlacklist = ["0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa",]; - async function tvl(api) { - const siloArray = await getSilos(api) - const assets = await api.multiCall({ - abi: getAssetsAbi, - calls: siloArray, - }) + // Handle V1 silos + let toaV1 = []; + if(configV1[api.chain]) { + const siloArray = await getSilosV1(api); + const assets = await api.multiCall({ + abi: getAssetsAbiV1, + calls: siloArray, + }); + toaV1 = assets.map((v, i) => ([v, siloArray[i]])); + } - const toa = assets.map((v, i) => ([v, siloArray[i]])) - return sumTokens2({ api, ownerTokens: toa, blacklistedTokens: [XAI], }) + return sumTokens2({ api, ownerTokens: toaV1, blacklistedTokens: [XAI], }); } async function borrowed(api) { - const siloArray = await getSilos(api) - const assetStates = await api.multiCall({ - abi: getAssetStateAbi, - calls: siloArray.map(i => ({ target: i })), - }); - assetStates.forEach(({ assets, assetsStorage }) => { - assetsStorage - .forEach((i, j) => { - if (assets[j].toLowerCase() === XAI) return; - return api.add(assets[j], i.totalBorrowAmount) - }) - }) + // Handle V1 silos + if(configV1[api.chain]) { + const siloArray = await getSilosV1(api); + const assetStates = await api.multiCall({ + abi: getAssetStateAbiV1, + calls: siloArray.map(i => ({ target: i })), + }); + assetStates.forEach(({ assets, assetsStorage }) => { + assetsStorage + .forEach((i, j) => { + if (assets[j].toLowerCase() === XAI) return; + return api.add(assets[j], i.totalBorrowAmount) + }) + }) + } } -async function getSilos(api) { +async function getSilosV1(api) { const chain = api.chain let logs = []; - for(let factory of config[chain].factories) { + for(let factory of configV1[chain].factories) { const { SILO_FACTORY, START_BLOCK, } = factory; let logChunk = await getLogs({ api, @@ -95,16 +102,17 @@ async function getSilos(api) { logs = [...logs, ...logChunk]; } - return logs.map((log) => `0x${log.topics[1].substring(26)}`).filter((address) => fallbackBlacklist.indexOf(address.toLowerCase()) === -1); + return logs.map((log) => `0x${log.topics[1].substring(26)}`).filter((address) => blacklistedSilos.indexOf(address.toLowerCase()) === -1); } module.exports = { - 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`, + methodology: `We calculate TVL by interacting with Silo Factory smart contracts on Ethereum, Arbitrum, Base & Optimism. For Ethereum, it queries (Main-V1)(0xB7d391192080674281bAAB8B3083154a5f64cd0a), (Legacy-V1)(0x4D919CEcfD4793c0D47866C8d0a02a0950737589), (Convex Factory-V1)(0x6d4A256695586F61b77B09bc3D28333A91114d5a), and (LLAMA Edition-V1)(0x2c0fA05281730EFd3ef71172d8992500B36b56eA). On Arbitrum, we query the Silo Arbitrum factory (Main-V1)(0x4166487056A922D784b073d4d928a516B074b719), On Optimism, we query the Silo Optimism factory (Main-V1)(0x6B14c4450a29Dd9562c20259eBFF67a577b540b9), On Base, we query the Silo Base factory (Main-V1)(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, }, + sonic: { tvl, borrowed, }, hallmarks: [ [1692968400, "Launch CRV market"] ] From 007159c0d5cd2c5efef5a77c53a18833b9a364cb Mon Sep 17 00:00:00 2001 From: 0xradishmz <165091631+0xradishmz@users.noreply.github.com> Date: Fri, 10 Jan 2025 06:33:25 +0700 Subject: [PATCH 86/97] feat: margin zero (#12971) Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> --- projects/margin-zero/index.js | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 projects/margin-zero/index.js diff --git a/projects/margin-zero/index.js b/projects/margin-zero/index.js new file mode 100644 index 000000000000..49de756f0849 --- /dev/null +++ b/projects/margin-zero/index.js @@ -0,0 +1,47 @@ +const { cachedGraphQuery } = require("../helper/cache"); +const { addUniV3LikePosition } = require('../helper/unwrapLPs'); + +const chainConfigs = +{ + sonic: { + subgraphUrl: "https://api.goldsky.com/api/public/project_cm58q8wq01kbk01ts09lc52kp/subgraphs/mz-subgraph/main/gn", + }, +} + +const LiquidityRangesQuery = `{ liquidityRanges(where: { liquidity_gt: "100" }) { pool hook liquidity tickLower tickUpper }}` + +const slot0Abi = + "function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)"; + +async function tvl(api) { + const config = chainConfigs[api.chain] + + const liquidityRanges = await cachedGraphQuery('marign-zero/tvl', config.subgraphUrl, LiquidityRangesQuery, { + api, + fetchById: true, + useBlock: true, + }) + + let poolsDataMap = {} + const pools = Array.from(new Set(liquidityRanges.map(({ pool }) => pool.toLowerCase()))) + const poolIndexMap = {} + pools.forEach((pool, index) => poolIndexMap[pool] = index) + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) + const slots = await api.multiCall({ abi: slot0Abi, calls: pools }) + + for (const { liquidity, tickLower, tickUpper, pool } of liquidityRanges) { + const idx = poolIndexMap[pool.toLowerCase()] + + addUniV3LikePosition({ api, token0: token0s[idx], token1: token1s[idx], tick: slots[idx].tick, liquidity, tickUpper, tickLower, }) + } + +} + +module.exports = { + methodology: "TVL is calculated by summing the value of all tokens in Margin Zero liquidity positions across supported chains", + doublecounted: true, + sonic: { + tvl, + } +}; From 4e40e97cc2c24e2831c4157aadae06e118ac5df0 Mon Sep 17 00:00:00 2001 From: LpcAries <291482574@qq.com> Date: Fri, 10 Jan 2025 11:03:50 +0800 Subject: [PATCH 87/97] add kava 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 49088c8938fa..c0d5d3c3170f 100644 --- a/projects/izumi-iziswap/index.js +++ b/projects/izumi-iziswap/index.js @@ -38,6 +38,7 @@ const poolHelpers = { 'gravity': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], 'iotex': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], 'morph': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], + 'kava': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], } // iziswap liquidityManager contracts const blacklistedTokens = [ From 733ff102a95776b00e3a66262fcd4bfc4c5e44aa Mon Sep 17 00:00:00 2001 From: backgroundjun <93336448+backgroundjun@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:44:14 +0900 Subject: [PATCH 88/97] Add Gracy Staking Season 7 --- projects/gracy-staking/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/gracy-staking/index.js b/projects/gracy-staking/index.js index 74ab5df19869..acb350d348aa 100644 --- a/projects/gracy-staking/index.js +++ b/projects/gracy-staking/index.js @@ -7,6 +7,7 @@ const STAKING_CONTRACT_SEASON_3 = "0xAb6aD663b42c7031b52737cbcBF9f70cb88fD9FC"; const STAKING_CONTRACT_SEASON_4 = "0x4f1043ABb51648E817b8e62EcABc157F91E61c52"; const STAKING_CONTRACT_SEASON_5 = "0x6e05d3a61f5026EEa67d0a82843d5E82eb3E2608"; const STAKING_CONTRACT_SEASON_6 = "0xE5ff1432DC7BE35CC73216A8cc468608398AD433"; +const STAKING_CONTRACT_SEASON_7 = "0x908c41C339DAAaC0be4440ba2CFbA4fFb0093a4A"; module.exports = { ethereum: { From 6919b78a340dac2988d636e4995570dbcd234a30 Mon Sep 17 00:00:00 2001 From: backgroundjun <93336448+backgroundjun@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:48:24 +0900 Subject: [PATCH 89/97] Add Gracy Staking Season 7 --- projects/gracy-staking/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/gracy-staking/index.js b/projects/gracy-staking/index.js index acb350d348aa..cc8003751cfc 100644 --- a/projects/gracy-staking/index.js +++ b/projects/gracy-staking/index.js @@ -12,7 +12,7 @@ const STAKING_CONTRACT_SEASON_7 = "0x908c41C339DAAaC0be4440ba2CFbA4fFb0093a4A"; 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, STAKING_CONTRACT_SEASON_6, + 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, STAKING_CONTRACT_SEASON_7, ], GRACY_TOKEN), }, }; From 4b03690a2c06cb34f8406840df6403e2578493c2 Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:47:15 +0800 Subject: [PATCH 90/97] add new vault to TVL calculation --- projects/vectis/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index 6db624249a69..e85ad0d78583 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -25,7 +25,9 @@ const vaultUserAddresses = [ new PublicKey("CnaXXuzc2S5UFSGoBRuKVNnzXBvxbaMwq6hZu5m91CAV"),//LST Yield Compass new PublicKey("Fwfu73gfD5KzqtSAVKqmW414rshmYpoHY4nJ8LWqPyHB"), //Prime standard new PublicKey("6NaF3EpArzHJ4x5GeTzjcUcdic29Rt4sy4pn6LP7iJ4r"), //Prime A - new PublicKey("2XnEYxNovTmYDXkDb7zninKttt3j9i67sj96H7CV5wZw") // JLP Navigator II + new PublicKey("3CTgSqfQPWsFCjQmJx45JgVWgqEWau5ec55tsQDxW8gM"), // Prime B + new PublicKey("2XnEYxNovTmYDXkDb7zninKttt3j9i67sj96H7CV5wZw"), // JLP Navigator II + new PublicKey("2XnEYxNovTmYDXkDb7zninKttt3j9i67sj96H7CV5wZw"), // JLP Navigator II From 418ff10bb9c5ea017bc5635f75d09e40cb955065 Mon Sep 17 00:00:00 2001 From: Winson Cheng <83229800+0xKMG@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:49:25 +0800 Subject: [PATCH 91/97] delete duplicated vault --- projects/vectis/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/vectis/index.js b/projects/vectis/index.js index e85ad0d78583..f50d1371bf9b 100644 --- a/projects/vectis/index.js +++ b/projects/vectis/index.js @@ -27,7 +27,6 @@ const vaultUserAddresses = [ new PublicKey("6NaF3EpArzHJ4x5GeTzjcUcdic29Rt4sy4pn6LP7iJ4r"), //Prime A new PublicKey("3CTgSqfQPWsFCjQmJx45JgVWgqEWau5ec55tsQDxW8gM"), // Prime B new PublicKey("2XnEYxNovTmYDXkDb7zninKttt3j9i67sj96H7CV5wZw"), // JLP Navigator II - new PublicKey("2XnEYxNovTmYDXkDb7zninKttt3j9i67sj96H7CV5wZw"), // JLP Navigator II From 2159984a694d463971f500bd19eb8fb72d3c83cd Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 10 Jan 2025 08:17:53 +0000 Subject: [PATCH 92/97] swapx --- projects/SwapX-v2/index.js | 44 +++----------------------------------- 1 file changed, 3 insertions(+), 41 deletions(-) diff --git a/projects/SwapX-v2/index.js b/projects/SwapX-v2/index.js index a01635704a0e..54438ef29503 100644 --- a/projects/SwapX-v2/index.js +++ b/projects/SwapX-v2/index.js @@ -1,47 +1,9 @@ -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], - })) - }) -} +const { uniTvlExport } = require("../helper/calculateUniTvl"); module.exports = { misrepresentedTokens: true, sonic: { - tvl + tvl: uniTvlExport("0x05c1be79d3aC21Cc4B727eeD58C9B2fF757F5663", undefined, undefined, { + }, { useDefaultCoreAssets: true, hasStablePools: true, }), } }; From 96b527d72742e8d5c023e57f956d0c141007c943 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Fri, 10 Jan 2025 08:18:34 +0000 Subject: [PATCH 93/97] revert sophon --- projects/sophon-bridge/index.js | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 projects/sophon-bridge/index.js diff --git a/projects/sophon-bridge/index.js b/projects/sophon-bridge/index.js deleted file mode 100644 index 8e73b8c5b7c1..000000000000 --- a/projects/sophon-bridge/index.js +++ /dev/null @@ -1,31 +0,0 @@ -const { sumTokens2 } = require("../helper/unwrapLPs"); - -const target = "0xD7f9f54194C633F36CCD5F3da84ad4a1c38cB2cB" -const gasQuery = '0x0000000000000000000000000000000000000001' -const gasAddress = '0x0000000000000000000000000000000000000000' -const chainId = 50104 - -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) - }) - } - }, -}; From 86bc0a994139629c2f41da5644dab1ce33d93200 Mon Sep 17 00:00:00 2001 From: Nguyen Phu Cuong Date: Fri, 10 Jan 2025 17:33:12 +0700 Subject: [PATCH 94/97] Update Nodo TVL (#13052) --- projects/nodo/index.js | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/projects/nodo/index.js b/projects/nodo/index.js index ecfcc41879f8..072549e7c470 100644 --- a/projects/nodo/index.js +++ b/projects/nodo/index.js @@ -2,40 +2,57 @@ const { sumTokensExport } = require('../helper/unwrapLPs') const config = { avax: { - chaingeAddress: "0xB4623b02A0D9bCf0282600C08E4383c04A0E0AfC", + owners: [ + "0xB4623b02A0D9bCf0282600C08E4383c04A0E0AfC", + "0x29Ff7d778890F40ccE8E74de67D082c0e2DCc1Bc" + ], tokens: [ "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7" ] }, polygon: { - chaingeAddress: "0x1e579a1AE5DA042C925902F3Efec1035C9329283", + owners: [ + "0x1e579a1AE5DA042C925902F3Efec1035C9329283", + "0x29Ff7d778890F40ccE8E74de67D082c0e2DCc1Bc", + "0xA4F335B528a24eBDeA10e5CcE14E9750929BBE34" + ], tokens: [ "0xc2132D05D31c914a87C6611C10748AEb04B58e8F" ] }, base: { - chaingeAddress: "0xEcc253aeAeC63bcB2b8eC6A739A0972A817219A3", + owners: [ + "0xEcc253aeAeC63bcB2b8eC6A739A0972A817219A3", + "0x29Ff7d778890F40ccE8E74de67D082c0e2DCc1Bc" + ], tokens: [ "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" ] }, bsc: { - chaingeAddress: "0x916A6314e9d8E51BEB18b355ad52b4506262620f", + owners: [ + "0x916A6314e9d8E51BEB18b355ad52b4506262620f", + "0x29Ff7d778890F40ccE8E74de67D082c0e2DCc1Bc" + ], tokens: [ "0x55d398326f99059fF775485246999027B3197955" ] }, celo: { - chaingeAddress: "0x65583D94d848E398dE3ef8382e5827000eb99961", + owners: [ + "0x65583D94d848E398dE3ef8382e5827000eb99961", + "0x29Ff7d778890F40ccE8E74de67D082c0e2DCc1Bc" + ], tokens: [ "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e" ] } } -Object.keys(config).forEach(chain => { - const { chaingeAddress, tokens } = config[chain] +Object.keys(config).forEach(async (chain) => { + const { owners, tokens } = config[chain] + module.exports[chain] = { - tvl: sumTokensExport({ owner: chaingeAddress, tokens }) + tvl: sumTokensExport({ owners: owners, tokens }) } -}) +}); \ No newline at end of file From d8c17427c59406958feedcf2c3eaac17225bd8b3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:59:42 +0100 Subject: [PATCH 95/97] update bitlayer --- projects/helper/bitcoin-book/bitlayer-bridge.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/helper/bitcoin-book/bitlayer-bridge.js b/projects/helper/bitcoin-book/bitlayer-bridge.js index 6a92535a38a4..0cafb079093d 100644 --- a/projects/helper/bitcoin-book/bitlayer-bridge.js +++ b/projects/helper/bitcoin-book/bitlayer-bridge.js @@ -6,5 +6,7 @@ module.exports = [ "bc1pxpp82hc4t4flkyqtjdnzr3q72qh9st78gfge50vzlrjtp9c6yn4s5zq5vk", "bc1p7agkadaau66jtva9n8k5pg3lsctuyqur8a2l5y9hzwqkh5nlmd0skuhws3", "bc1q6are922g2ltnmdll0mesrmdzn5w2xguu7czred", - "bc1qcpw6j7j72peplt0j34cd8uu5a886t6kkm57zgn" + "bc1qcpw6j7j72peplt0j34cd8uu5a886t6kkm57zgn", + "bc1qx4xrfsu4ddzu5uglepdef6t4yrtsn9cwqx3csp", + "1BKFipgZT2EwiPxKXhiYib82C5tXkTS9GU", ] \ No newline at end of file From 1b9b2b5b755fa885a754d711e59648f48bcfbca2 Mon Sep 17 00:00:00 2001 From: sgmntp <146187995+sgmntp@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:52:34 +0100 Subject: [PATCH 96/97] update (Segment Finance) adding bsquared chain; sunsetting staking --- projects/segment-finance/index.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/projects/segment-finance/index.js b/projects/segment-finance/index.js index 0675098f7329..69aa565b7d8e 100644 --- a/projects/segment-finance/index.js +++ b/projects/segment-finance/index.js @@ -1,5 +1,4 @@ const { compoundExports2 } = require("../helper/compound"); -const { staking } = require("../helper/staking"); module.exports = { methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", @@ -8,16 +7,10 @@ module.exports = { ...compoundExports2({ comptroller: "0x57E09c96DAEE58B77dc771B017de015C38060173", cether: "0x5fcea94b96858048433359bb5278a402363328c3", - }), - staking: staking( - [ - "0xC6BcBe182b0F85dBfF6b49DC81CecEe02A16fE57", - ], - "0x5de40c1152c990492eaeaeecc4ecaab788bbc4fd", - "bsc", - ), + }) }, bob: compoundExports2({ comptroller: "0xcD7C4F508652f33295F0aEd075936Cd95A4D2911", cether: '0xd7c6cc5aef7396182c5d7ebdac66ff674f3ddcf4' }), rsk: compoundExports2({ comptroller: "0x2eea8fbA494d5008ba72f80E0091Cc74dB5f9926", cether: '0x8F9958ec0FeeccCf0feC871B7bBB3D8d0B7A4D3c' }), core: compoundExports2({ comptroller: "0xaba65b87eBEdB2D753b37AeCECD1E168341eE0DD", cether: '0xb57A4b3ccE8d999A1e6B0357c0a31C3808401B42' }), + bsquared: compoundExports2({ comptroller: "0x69a6B3B96b26a15A588081Df17F46d61f625741c", cether: '0xEff5cD04B461247F5008b35074F45Ba0f0b11eFf' }), }; From cffdf1f703888287d927111d581b954c633bac3d Mon Sep 17 00:00:00 2001 From: lee Date: Sat, 11 Jan 2025 14:58:14 -0500 Subject: [PATCH 97/97] added base factory (#13060) --- projects/euler-v2/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/euler-v2/index.js b/projects/euler-v2/index.js index b68875c0ab81..9157a3628d23 100644 --- a/projects/euler-v2/index.js +++ b/projects/euler-v2/index.js @@ -5,7 +5,8 @@ module.exports = { } const config = { - ethereum: { factory: '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e', } + ethereum: { factory: '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e', }, + base: { factory: '0x7F321498A801A191a93C840750ed637149dDf8D0', } } Object.keys(config).forEach(chain => {