From a58fb9251acb859bb2d789f3edec6cf68b427961 Mon Sep 17 00:00:00 2001 From: brightiron Date: Sun, 23 Apr 2023 08:51:52 -0500 Subject: [PATCH 01/20] import treasury calcs from the olympus project --- projects/treasury/olympus-dao.js | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/projects/treasury/olympus-dao.js b/projects/treasury/olympus-dao.js index 116f925402..309c6c8065 100644 --- a/projects/treasury/olympus-dao.js +++ b/projects/treasury/olympus-dao.js @@ -1,30 +1,3 @@ -const { nullAddress,treasuryExports } = require("../helper/treasury"); +const olympus = require("../olympus/index"); -const ohmTreasury = "0x9A315BdF513367C0377FB36545857d12e85813Ef"; -const ohmTreasury1 = "0x31F8Cc382c9898b273eff4e0b7626a6987C846E8"; - -const OHM = "0x64aa3364F17a4D01c6f1751Fd97C2BD3D7e7f1D5"; - - -module.exports = treasuryExports({ - ethereum: { - tokens: [ - nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0x028171bCA77440897B824Ca71D1c56caC55b68A3',//aDAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0x853d955aCEf822Db058eb8505911ED77F175b99e',//FRAX - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',//WBTC - '0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF',//ALCX - '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0',//FXS - '0x0f2D719407FdBeFF09D87557AbB7232601FD9F29',//SYN - '0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8',//agEUR - '0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68',//INV - - ], - owners: [ohmTreasury, ohmTreasury1], - ownTokens: [OHM], - }, -}) \ No newline at end of file +module.exports = olympus; From 31f8b39548f72381be7337afc127daf7418a97a5 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Sun, 23 Apr 2023 19:32:23 +0200 Subject: [PATCH 02/20] ohm: split own tokens in treasury --- projects/olympus/api.js | 8 ++++++ projects/olympus/index.js | 49 ++++++++++++++------------------ projects/treasury/olympus-dao.js | 2 ++ 3 files changed, 32 insertions(+), 27 deletions(-) create mode 100644 projects/olympus/api.js diff --git a/projects/olympus/api.js b/projects/olympus/api.js new file mode 100644 index 0000000000..b83e37f250 --- /dev/null +++ b/projects/olympus/api.js @@ -0,0 +1,8 @@ +const index = require('./index') + +module.exports = { + ethereum: { + tvl: () => 0, + staking: index.ethereum.staking, + } +} \ No newline at end of file diff --git a/projects/olympus/index.js b/projects/olympus/index.js index 27a0db8f89..69faf7fc69 100644 --- a/projects/olympus/index.js +++ b/projects/olympus/index.js @@ -1,6 +1,6 @@ const sdk = require("@defillama/sdk"); const { blockQuery } = require("../helper/http"); -const env= require("../helper/env"); +const env = require("../helper/env"); const BigNumber = require("bignumber.js"); const OlympusStakings = [ @@ -10,7 +10,7 @@ const OlympusStakings = [ "0xFd31c7d00Ca47653c6Ce64Af53c1571f9C36566a", ]; -const OHM = "0x383518188c0c6d7730d91b2c03a03c837814a899"; +const OHM = "0x383518188c0c6d7730d91b2c03a03c837814a899" // this is OHM v1 /** Map any staked assets without price feeds to those with price feeds. * All balances are 1: 1 to their unstaked counterpart that has the price feed. @@ -112,7 +112,7 @@ function sumBalancesByTokenAddress(arr) { * #2. Call tokenRecords with block num from prev query * #3. Sum values returned ***/ -async function tvl(timestamp, block, _, { api }, poolsOnly = false) { +async function tvl(timestamp, block, _, { api }, isOwnTokensMode = false) { const indexedBlockForEndpoint = await blockQuery( subgraphUrls[api.chain], getLatestBlockIndexed, @@ -130,16 +130,16 @@ async function tvl(timestamp, block, _, { api }, poolsOnly = false) { if (now - blockNum[0].timestamp > 3 * aDay) { throw new Error("outdated"); } - const filteredTokenRecords = poolsOnly - ? tokenRecords.filter((t) => t.category === "Protocol-Owned Liquidity") - : tokenRecords; + // const filteredTokenRecords = poolsOnly + // ? tokenRecords.filter((t) => t.category === "Protocol-Owned Liquidity") + // : tokenRecords; /** * iterates over filtered list from subgraph and returns any addresses * that need to be normalized for pricing . * See addressMap above **/ - const normalizedFilteredTokenRecords = filteredTokenRecords.map((token) => { + const normalizedFilteredTokenRecords = tokenRecords.map((token) => { const normalizedAddress = addressMap[token.tokenAddress] ? addressMap[token.tokenAddress] : token.tokenAddress; @@ -149,27 +149,22 @@ async function tvl(timestamp, block, _, { api }, poolsOnly = false) { const tokensToBalances = sumBalancesByTokenAddress( normalizedFilteredTokenRecords ); - const balances = await Promise.all( - tokensToBalances.map(async (token, index) => { - const decimals = await sdk.api.abi.call({ - abi: "erc20:decimals", - target: token.tokenAddress, - chain: api.chain, - }); - return [ - `${api.chain}:${token.tokenAddress}`, - Number( - BigNumber(token.balance) - .times(10 ** decimals.output) - .toFixed(0) - ), - ]; - }) - ); - return Object.fromEntries(balances); + const tokens = tokensToBalances.map(i => i.tokenAddress) + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) + const ownTokens = new Set([ + '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', // GOHM + '0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5', // OHM + ].map(i => i.toLowerCase())) + tokensToBalances.map(async (token, i) => { + if (ownTokens.has(token.tokenAddress.toLowerCase())) { + if (!isOwnTokensMode) return; + } else if (isOwnTokensMode) return; + api.add(token.tokenAddress, token.balance * 10 ** decimals[i]) + }) + return api.getBalances() } -async function pool2(timestamp, block, _, { api }) { +async function ownTokens(timestamp, block, _, { api }) { return tvl(timestamp, block, _, { api }, true); } @@ -181,7 +176,7 @@ module.exports = { ethereum: { staking, tvl, - // pool2, + ownTokens, }, arbitrum: { tvl, diff --git a/projects/treasury/olympus-dao.js b/projects/treasury/olympus-dao.js index 309c6c8065..cb0bfc9455 100644 --- a/projects/treasury/olympus-dao.js +++ b/projects/treasury/olympus-dao.js @@ -1,3 +1,5 @@ const olympus = require("../olympus/index"); module.exports = olympus; + +delete module.exports.ethereum.staking \ No newline at end of file From 7bac8d68fb0891e8d1bfc4f9567a825f92079484 Mon Sep 17 00:00:00 2001 From: AmirJ Date: Tue, 25 Apr 2023 14:56:55 +0200 Subject: [PATCH 03/20] update to include vault TVL --- projects/popcorn/constants.js | 9 ++++- projects/popcorn/index.js | 7 ++++ projects/popcorn/vault.js | 70 +++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 projects/popcorn/vault.js diff --git a/projects/popcorn/constants.js b/projects/popcorn/constants.js index 44d0a09ec8..2b0fdd1b72 100644 --- a/projects/popcorn/constants.js +++ b/projects/popcorn/constants.js @@ -37,7 +37,10 @@ const ADDRESSES = { crv3EurMetapool: "0xb9446c4Ef5EBE66268dA6700D26f96273DE3d571", crvSUSDMetapool: "0xA5407eAE9Ba41422680e2e00537571bcC53efBfD", crvSUSD: "0xC25a3A3b969415c80451098fa907EC722572917F", - threeX: "0x8b97ADE5843c9BE7a1e8c95F32EC192E31A46cf3" + threeX: "0x8b97ADE5843c9BE7a1e8c95F32EC192E31A46cf3", + + vaultRegistry: '0x007318Dc89B314b47609C684260CfbfbcD412864', + }, arbitrum: { rewardsEscrow: "0x0c0991cb6e1c8456660a49aa200b71de6158b85c", @@ -53,7 +56,9 @@ const ADDRESSES = { popUsdcGelatoLp: "0xe8654f2b0a038a01bc273a2a7b7c48a76c0e58c5", arrakisPool: "0x6dE0500211bc3140409B345Fa1a5289cb77Af1e4", - arrakisPoolStaking: "0xd3836EF639A74EA7398d34c66aa171b1564BE4bc" + arrakisPoolStaking: "0xd3836EF639A74EA7398d34c66aa171b1564BE4bc", + + vaultRegistry: '0x2246c4c469735bCE95C120939b0C078EC37A08D0' }, bsc: { rewardsEscrow: "0x0C0991CB6e1c8456660A49aa200B71de6158b85C", diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index 955e161c05..d74303c54a 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -3,6 +3,9 @@ const { staking } = require('./staking') const { ADDRESSES } = require("./constants"); const { addButterV2TVL, addThreeXTVL } = require("./butter") const { addStakingPoolsTVL } = require("./stakingPools") +const { addVaultToTVL } = require("./vaults"); + +const vaultChains = Object.keys(ADDRESSES).filter(chain => Object.keys(ADDRESSES[chain]).includes('vaultRegistry')); function getTVL(chain = undefined) { return async (timestamp, block, chainBlocks) => { @@ -11,6 +14,10 @@ function getTVL(chain = undefined) { await addButterV2TVL(balances, timestamp, chainBlocks, chain); await addThreeXTVL(balances, timestamp, chainBlocks, chain); } + + if (chain && vaultChains.includes(chain)) { + await addVaultToTVL(balances, timestamp, chainBlocks, chain, ADDRESSES[chain].vaultRegistry); + } return balances; } } diff --git a/projects/popcorn/vault.js b/projects/popcorn/vault.js new file mode 100644 index 0000000000..771077ad9d --- /dev/null +++ b/projects/popcorn/vault.js @@ -0,0 +1,70 @@ +const sdk = require('@defillama/sdk'); +const { BigNumber, constants, utils: ethersutils } = require("ethers"); +const utils = require('../helper/utils'); + +const getVaultsAbi = 'address[]:getRegisteredAddresses'; +const getAssetAbi = 'address:asset'; +const getTotalAssets = 'uint256:totalAssets'; + +async function fetch(url) { + return await utils.fetchURL(url) + .catch(err => console.log(err, 'err')) +} + +async function getTokenPrice(chain, address) { + const queryString = `${chain}:${address}`; + const url = `https://coins.llama.fi/prices/current/${queryString}`; + const result = await fetch(url); + const parsed = await result.data; + const token = parsed.coins[`${chain}:${address}`]; + + + return token?.price && token?.decimals + ? { + value: BigNumber.from(Number(token?.price * (10 ** token?.decimals)).toFixed(0)), + decimals: token.decimals, + } + : { value: constants.Zero, decimals: 0 }; +} + +async function addVaultToTVL(balances, timestamp, chainBlocks, chain = "ethereum", vaultRegistryAddress) { + const block = chainBlocks[chain]; + const {output: vaultAddresses} = await sdk.api.abi.call({ + target: vaultRegistryAddress, + params: [], + chain, + block, + abi: getVaultsAbi + }); + + const { output: assets } = await sdk.api.abi.multiCall({ + abi: getAssetAbi, + calls: vaultAddresses.map(i => ({ target: i})), + chain, + block, + }); + + const { output: totalAssets } = await sdk.api.abi.multiCall({ + abi: getTotalAssets, + calls: vaultAddresses.map(i => ({ target: i})), + chain, + block, + }); + + const tokenPrices = await Promise.all( + assets.map(async asset => await getTokenPrice(chain, asset.output)) + ); + + + assets.forEach((asset, index) => { + const totalAssetsTransformed = totalAssets[index].output; + const priceOfAsset = tokenPrices[index].value; + const vaultTVL = (priceOfAsset.mul(totalAssetsTransformed)).div(ethersutils.parseUnits('1', tokenPrices[index].decimals)); + sdk.util.sumSingleBalance(balances, asset.output, vaultTVL, chain); + }) + +} + +module.exports = { + addVaultToTVL +} \ No newline at end of file From 0d93648b72361e5e1642ebad70004f262120de3a Mon Sep 17 00:00:00 2001 From: AmirJ Date: Wed, 26 Apr 2023 18:15:43 +0100 Subject: [PATCH 04/20] fix vault import error --- projects/popcorn/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index d74303c54a..3646ce7389 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -3,7 +3,7 @@ const { staking } = require('./staking') const { ADDRESSES } = require("./constants"); const { addButterV2TVL, addThreeXTVL } = require("./butter") const { addStakingPoolsTVL } = require("./stakingPools") -const { addVaultToTVL } = require("./vaults"); +const { addVaultToTVL } = require("./vault"); const vaultChains = Object.keys(ADDRESSES).filter(chain => Object.keys(ADDRESSES[chain]).includes('vaultRegistry')); From 40c4782249e05af0b6ad46c2038b026f8a3fb17e Mon Sep 17 00:00:00 2001 From: ravirasadiya Date: Thu, 27 Apr 2023 11:31:07 +0530 Subject: [PATCH 05/20] add zkdefi tvl --- projects/zkdefi/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 projects/zkdefi/index.js diff --git a/projects/zkdefi/index.js b/projects/zkdefi/index.js new file mode 100644 index 0000000000..eaae02a1dc --- /dev/null +++ b/projects/zkdefi/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + polygon_zkevm: { + tvl: getUniTVL({ + chain: "polygon_zkevm", + useDefaultCoreAssets: true, + factory: "0xfDC8ec444F482Fe8aFe0a00114548DC9ff729568", + }), + }, +}; From 62b5bdf5e2bc0b6597af808b69a631e4328a6de3 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 27 Apr 2023 09:21:28 +0200 Subject: [PATCH 06/20] popcorn: refactor code --- projects/popcorn/index.js | 4 +-- projects/popcorn/vault.js | 63 ++++----------------------------------- 2 files changed, 7 insertions(+), 60 deletions(-) diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index 3646ce7389..f058e3b3bf 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -8,7 +8,7 @@ const { addVaultToTVL } = require("./vault"); const vaultChains = Object.keys(ADDRESSES).filter(chain => Object.keys(ADDRESSES[chain]).includes('vaultRegistry')); function getTVL(chain = undefined) { - return async (timestamp, block, chainBlocks) => { + return async (timestamp, block, chainBlocks, { api }) => { let balances = {}; if (chain && chain === 'ethereum') { await addButterV2TVL(balances, timestamp, chainBlocks, chain); @@ -16,7 +16,7 @@ function getTVL(chain = undefined) { } if (chain && vaultChains.includes(chain)) { - await addVaultToTVL(balances, timestamp, chainBlocks, chain, ADDRESSES[chain].vaultRegistry); + await addVaultToTVL(balances, api, ADDRESSES[chain].vaultRegistry); } return balances; } diff --git a/projects/popcorn/vault.js b/projects/popcorn/vault.js index 771077ad9d..ee61dfb0a8 100644 --- a/projects/popcorn/vault.js +++ b/projects/popcorn/vault.js @@ -1,68 +1,15 @@ const sdk = require('@defillama/sdk'); -const { BigNumber, constants, utils: ethersutils } = require("ethers"); -const utils = require('../helper/utils'); const getVaultsAbi = 'address[]:getRegisteredAddresses'; const getAssetAbi = 'address:asset'; const getTotalAssets = 'uint256:totalAssets'; -async function fetch(url) { - return await utils.fetchURL(url) - .catch(err => console.log(err, 'err')) -} - -async function getTokenPrice(chain, address) { - const queryString = `${chain}:${address}`; - const url = `https://coins.llama.fi/prices/current/${queryString}`; - const result = await fetch(url); - const parsed = await result.data; - const token = parsed.coins[`${chain}:${address}`]; - - - return token?.price && token?.decimals - ? { - value: BigNumber.from(Number(token?.price * (10 ** token?.decimals)).toFixed(0)), - decimals: token.decimals, - } - : { value: constants.Zero, decimals: 0 }; -} - -async function addVaultToTVL(balances, timestamp, chainBlocks, chain = "ethereum", vaultRegistryAddress) { - const block = chainBlocks[chain]; - const {output: vaultAddresses} = await sdk.api.abi.call({ - target: vaultRegistryAddress, - params: [], - chain, - block, - abi: getVaultsAbi - }); - - const { output: assets } = await sdk.api.abi.multiCall({ - abi: getAssetAbi, - calls: vaultAddresses.map(i => ({ target: i})), - chain, - block, - }); - - const { output: totalAssets } = await sdk.api.abi.multiCall({ - abi: getTotalAssets, - calls: vaultAddresses.map(i => ({ target: i})), - chain, - block, - }); - - const tokenPrices = await Promise.all( - assets.map(async asset => await getTokenPrice(chain, asset.output)) - ); - - - assets.forEach((asset, index) => { - const totalAssetsTransformed = totalAssets[index].output; - const priceOfAsset = tokenPrices[index].value; - const vaultTVL = (priceOfAsset.mul(totalAssetsTransformed)).div(ethersutils.parseUnits('1', tokenPrices[index].decimals)); - sdk.util.sumSingleBalance(balances, asset.output, vaultTVL, chain); - }) +async function addVaultToTVL(balances, api, vaultRegistryAddress) { + const vaultAddresses = await api.call({ target: vaultRegistryAddress, abi: getVaultsAbi }); + const assets = await api.multiCall({ abi: getAssetAbi, calls: vaultAddresses, }); + const totalAssets = await api.multiCall({ abi: getTotalAssets, calls: vaultAddresses, }); + assets.forEach((v, i) => sdk.util.sumSingleBalance(balances, v, totalAssets[i], api.chain)) } module.exports = { From f73939c26387345fcb386bfcd4f129b889ee63af Mon Sep 17 00:00:00 2001 From: Ivaylo Petrov Date: Thu, 27 Apr 2023 12:55:57 +0300 Subject: [PATCH 07/20] Add hydradex-v3 --- projects/helper/getHydraV3SubgraphTvl.js | 71 +++++++++++++++++++++++ projects/{hydradex => hydradex-v2}/api.js | 0 projects/hydradex-v3/index.js | 17 ++++++ 3 files changed, 88 insertions(+) create mode 100644 projects/helper/getHydraV3SubgraphTvl.js rename projects/{hydradex => hydradex-v2}/api.js (100%) create mode 100644 projects/hydradex-v3/index.js diff --git a/projects/helper/getHydraV3SubgraphTvl.js b/projects/helper/getHydraV3SubgraphTvl.js new file mode 100644 index 0000000000..2a0ba290dd --- /dev/null +++ b/projects/helper/getHydraV3SubgraphTvl.js @@ -0,0 +1,71 @@ +const { request, gql } = require("graphql-request"); +const { toUSDTBalances } = require("../helper/balances"); +const { blockQuery } = require("./http"); + +function getChainTvl( + graphUrls, + factoriesName = "factories", + tvlName = "totalValueLockedUSD", + blockCatchupLimit = 500 +) { + const graphQuery = gql` + query get_tvl($block: Int!) { + ${factoriesName}( + block: { number: $block } + ) { + ${tvlName} + } + } + `; + + const blockGraphQuery = gql` + query get_block { + blocks(orderBy: "number", first: 1, orderDirection: "desc") { + number + } + } + `; + + return (chain) => { + return async (_, _b, _cb, { api }) => { + api.getBlock = async function () { + try { + const blocks = ( + await request( + "https://graph.hydradex.org/subgraphs/name/blocklytics/ethereum-blocks", + blockGraphQuery + ) + ).blocks; + + this.block = Number(blocks[0].number) || undefined; + } catch { + this.block = undefined; + } + }; + await api.getBlock(); + const block = api.block; + + let uniswapFactories; + + if (!blockCatchupLimit) { + uniswapFactories = ( + await request(graphUrls[chain], graphQuery, { block }) + )[factoriesName]; + } else { + uniswapFactories = ( + await blockQuery(graphUrls[chain], graphQuery, { + api, + blockCatchupLimit, + }) + )[factoriesName]; + } + + const usdTvl = Number(uniswapFactories[0][tvlName]); + return toUSDTBalances(usdTvl); + }; + }; +} + +module.exports = { + getChainTvl, +}; diff --git a/projects/hydradex/api.js b/projects/hydradex-v2/api.js similarity index 100% rename from projects/hydradex/api.js rename to projects/hydradex-v2/api.js diff --git a/projects/hydradex-v3/index.js b/projects/hydradex-v3/index.js new file mode 100644 index 0000000000..2bcdca26c7 --- /dev/null +++ b/projects/hydradex-v3/index.js @@ -0,0 +1,17 @@ +const { getChainTvl } = require("../helper/getHydraV3SubgraphTvl"); + +const v3graph = getChainTvl( + { + hydra: "https://graph.hydradex.org/subgraphs/name/v3-subgraph", + }, + "factories", + "totalValueLockedUSD" +); + +module.exports = { + timetravel: false, + methodology: `Counts the tokens locked on AMM pools, pulling the data from https://graph.hydradex.org/subgraphs/name/v3-subgraph`, + hydra: { + tvl: v3graph("hydra"), + }, +}; From 81d1f6b8795aec2c651a23e3fa98e41fc8912d61 Mon Sep 17 00:00:00 2001 From: saehrimnir Date: Thu, 27 Apr 2023 17:14:58 +0300 Subject: [PATCH 08/20] add BSC network integration --- projects/pepe-bridge/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/pepe-bridge/index.js b/projects/pepe-bridge/index.js index fa146f4678..134fddbef2 100644 --- a/projects/pepe-bridge/index.js +++ b/projects/pepe-bridge/index.js @@ -11,6 +11,9 @@ const config = { ], '0x0de7b091A21BD439bdB2DfbB63146D9cEa21Ea83' ] + ], + bsc: [ + [[nullAddress], '0xF1632012f6679Fcf464721433AFAAe9c11ad9e03'] // BNB ] } module.exports = {}; From aab9b2698356b24de663d80ac719a4477dae034c Mon Sep 17 00:00:00 2001 From: define Date: Thu, 27 Apr 2023 17:11:45 +0100 Subject: [PATCH 09/20] mt gox and silkroad addresses --- projects/mt-gox/index.js | 89 +++++++++++++++++++++++++++++ projects/silkroad-fbifunds/index.js | 14 +++++ 2 files changed, 103 insertions(+) create mode 100644 projects/mt-gox/index.js create mode 100644 projects/silkroad-fbifunds/index.js diff --git a/projects/mt-gox/index.js b/projects/mt-gox/index.js new file mode 100644 index 0000000000..9034364802 --- /dev/null +++ b/projects/mt-gox/index.js @@ -0,0 +1,89 @@ +const { cexExports } = require('../helper/cex') + +const config = { + bitcoin: { + owners: [ + "17Tf4bVQaCzwWrDWGRPC97RLCHnU4LY8Qr", + "1BzK87zuqidZn489Wb2oLSktrjKrX7TLKe", + "1Drshi4RAuvxk4T6Bkq959ZvLbvy7b1wvD", + "1EiiKCCnFgHjEvPZdu29qqgdBm8zTvpU3U", + "14p4w3TRCd6NMRSnzTmgdvQhNnbrAmzXmy", + "12KkeeRkiNS13GMbg7zos9KRn9ggvZtZgx", + "12T4oSNd4t9ty9fodgNd47TWhK35pAxDYN", + "15kNZcrhxeFZgVVLK2Yjzd69tRidbFdJEZ", + "1LS5EFRRMDgMQusW6zokQUHjzNUfy6HHCQ", + "1FrV9hv1AW34BGJvobJatyzUWYDWB9epRW", + "1HdKXsNQtzDcfB6PGM7DWTgX9vhBWsz1ak", + "1Fu4YgM3Y9CxvioGPqkSzkydAC8MVaPN1D", + "1G23Uzwj55k2A9TRwaTknqGav66oDTkWCu", + "1GkZQcDy8V6pmHFZqUBUBCnN9dc2hoWasD", + "1Hm6XDmhKCHz68wDEYTapN9MEanke8iwUk", + "15SeCwVCFx5cWyrcdD1Zp1D1zxjH2SELPg", + "15U4VsmWG1cdXAtizvQsW4r7iMxzp64Tgu", + "16jZZkMYqjUWUtQ9DfDvHdH5ko5BcnH9XQ", + "16w6sZBDP58yyeyZAcvnxcEGJpwR9amM6g", + "19Cr4zXpKw43xLJhFZW9iv4DDNtQk2TDeB", + "1GyDutntMuYyA2vQGW5HFcKLfx4cbDdbJq", + "17etv2L3nhk6SCcWSNW4eoZkBy84izAm17", + "18ok25NTkdrUzdByFJCNVsqVYkujZ8aP45", + "199Yxz2TJGtND3QKsHTptTJivqSaUZBvku", + "1AZu7TQmKBAes2duNDctYwjAB9nhHczUnA", + "17KcBp8g76Ue8pywgjta4q8Ds6wK4bEKp7", + "1LLc8aA9C9LLULGbYCYSFKXgxKP2DXdCqP", + "1CZsoJfkknbnW5fKrt1oR7N1ALE5WmDGP1", + "1DedUxzgwErg4ipNi988wPgLk5thwciKcc", + "1H4K3dGfNbAN4AUfyUrpkGpjrd83sntDpV", + "13sXfpp2V16nnxYvW9FHHoBdMa3k98uJw8", + "13Wv5hGhubAWgSPWtXYh6s1s7HX2N1psYg", + "14mP6caC5dFhHdVAPCjPKM8Nm36MBDR5pM", + "155FsTtEFq4eGCcBxDseuwLKPbmtWbyHJR", + "156HpsWfgkWYLT63uhTAGUSUF3ZMnB9WWj", + "15QcKCa84ZCHxbsqXDoKhi5XbmQB8jPEAd", + "1EK8vW7UYaYHKiW4TZmYJKtwcZLM14VjvP", + "1Hb8DmmvvtTYv5RBLuGtDxznkZwVpd5Vjy", + "1HuPVqz2xvf1rdNFUqd62vRTyxP3jeX9Ch", + "13xGCc4TPSYY9GYxBGVNox82KxyjkFnxMX", + "13ahgw8sM95EDbugT3tdb8TYoMU46Uw7PX", + "1439q4Na8v88kPBqoyg8F4ueL9SYr8ANWj", + "13dXFMyG22EsUsvaWhCqUo7SXuX7rBPog6", + "14USZ558Rr28AZwdJQyciSQkN4JT1cEoj2", + "1FhRuUkk8Bfx8FJDemtxhKAR4F8GCNKrXG", + "1Mm9brripN4RPTzkGnRrbt5uDWdqbfk2iX", + "1LueUjEuBgc7cQhsWT8zAfTjcWmrNBZXaR", + "1LXi3x7hyt17cxncscGE887WCrC6XDNZ4P", + "19KiFrafXEyJCUDYFEv3B6tBUwyfFo7kNU", + "18YDgRhxsomuBZ1g9d8Y1JuRmxDhF8Bvff", + "18hcZVFPqDNAovJmb9vA6hEJrDz6uWXNGh", + "1BDZBTb4KE5oq6wAgA6EvAe3uCFRrAbPao", + "195HvmjXgoF3M5vFaBC8swZPhwrE7VhxRD", + "18KDS3q6a4YV9Nn8jcyMvNoVPfcrfemeag", + "19c8sUa54yQuRTVDfJa3iDkkCaFkzBJLPB", + "1B6kJM75iu5ty1HAHMMz6tT1HhjoGNTCa9", + "18M1Z337NqLtK9V69bssnQUYsvb7hmfSFS", + "19eihBKk6e5YD2QXAe4SVUsxRLLnTDKsfv", + "1C5aU4Xnpd3txbxehk46UZgiuNB8QdpHCH", + "1BXyJc6BVuTFnHQCcjiWX2xmCPNVfaSZeb", + "1Ar6meJQCkNoC9wnPcyRNNpzX5fBDaGcKd", + "1CRjKZJu8LvTutnSKq4zTJ4yiqrzMAArYW", + "1HweN9p41BY2RBunsPqyVuheEq7gVoxA9u", + "1HX4s3JeFU3x1eQgPNQVAdx6FoCtbb1hr8", + "1HzEPuenagLEWj68igDXBBXrzc293RuR5V", + "1JtgU6Uo1RAt5eiMf34EehyatUezBQP36C", + "1JVmoJT3471FjsX5H4hAeR1RyrDgpkHbpm", + "1JVU43LNKXqa9W5fCh8tppxDDEWgfeNg46", + "1JztCg7eKSkb1vi7NzGJynXpLZmoaFtYud", + "1KFDUSZuapMv7YaDmL6cyrHTQhma1MtFYs", + "1MkyfwJf7uhWTmVGGQXfcT5ip31DoHMxsz", + "1LzwbLgdKd4eFLkpRdeajkH1YJkVCip2zj", + "1MPJJzRaT8vLhowNB4dVyWRxxu79dq7WkB", + "1MvpYtqgBH7CXbTutrSVCTNHPzm9vakuRy", + "1N5X4kcZ56uRh24XrZoztS9Vb8G7j1Joop", + "1Pq7hooZbEAz5y3QMnqFY8C5xqTdrjUwcA", + "1PRXQEoL8vzEzoJJ9hbtAP6NaV2daccAUn", + "1PxGTuJzDx1ceFHx4Z5CHaWuhiPBNovmZD", + "1NA3Tj4b1jtx9eGELe31Jw4DrzTqKP3ayH" //https://www.cryptoground.com/mtgox-cold-wallet-monitor/ + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/silkroad-fbifunds/index.js b/projects/silkroad-fbifunds/index.js new file mode 100644 index 0000000000..3adb8f9224 --- /dev/null +++ b/projects/silkroad-fbifunds/index.js @@ -0,0 +1,14 @@ +const { cexExports } = require('../helper/cex') + +const config = { + bitcoin: { + owners: [ + "bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6", //https://www.reddit.com/r/CryptoCurrency/comments/li1fw7/btc_silkroad_stash_seized_nov_2020_by_the_feds/ + 'bc1qmxjefnuy06v345v6vhwpwt05dztztmx4g3y7wp', + 'bc1qf2yvj48mzkj7uf8lc2a9sa7w983qe256l5c8fs', + 'bc1qe7nk2nlnjewghgw4sgm0r89zkjzsurda7z4rdg' + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file From 2ff5e2d3359e459a1a3deb88a5834a82b4d8762b Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Thu, 27 Apr 2023 19:05:29 +0200 Subject: [PATCH 10/20] add traderjoe v2.1 --- projects/traderjoe-lb-v2-1/index.js | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 projects/traderjoe-lb-v2-1/index.js diff --git a/projects/traderjoe-lb-v2-1/index.js b/projects/traderjoe-lb-v2-1/index.js new file mode 100644 index 0000000000..c9521d2101 --- /dev/null +++ b/projects/traderjoe-lb-v2-1/index.js @@ -0,0 +1,36 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const factories = { + avax: '0x8e42f2F4101563bF679975178e880FD87d3eFd4e', + arbitrum: '0x8e42f2F4101563bF679975178e880FD87d3eFd4e', + bsc: '0x8e42f2F4101563bF679975178e880FD87d3eFd4e', +} +async function tvl(_, _b, _cb, { api, }) { + const pools = await api.fetchList({ + target: factories[api.chain], + itemAbi: 'function getLBPairAtIndex(uint256) view returns (address)', + lengthAbi: 'uint256:getNumberOfLBPairs', + }) + const tokenA = await api.multiCall({ + abi: 'address:getTokenX', + calls: pools, + }) + const tokenB = await api.multiCall({ + abi: 'address:getTokenY', + calls: pools, + }) + const toa = [] + tokenA.map((_, i) => { + toa.push([tokenA[i], pools[i]]) + toa.push([tokenB[i], pools[i]]) + }) + return sumTokens2({ api, tokensAndOwners: toa, }) +} + +module.exports = { + methodology: 'We count the token balances in in different liquidity book contracts', +} + +Object.keys(factories).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file From b4c62941e9e687ca893e1124fd623775ce56c26f Mon Sep 17 00:00:00 2001 From: drcpu Date: Thu, 27 Apr 2023 21:15:31 +0200 Subject: [PATCH 11/20] add steth.win tvl --- projects/steth-win/abi.json | 3 +++ projects/steth-win/index.js | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 projects/steth-win/abi.json create mode 100644 projects/steth-win/index.js diff --git a/projects/steth-win/abi.json b/projects/steth-win/abi.json new file mode 100644 index 0000000000..8ff2b38d43 --- /dev/null +++ b/projects/steth-win/abi.json @@ -0,0 +1,3 @@ +{ + "accountedBalance": "uint256:accountedBalance" +} \ No newline at end of file diff --git a/projects/steth-win/index.js b/projects/steth-win/index.js new file mode 100644 index 0000000000..10f3072763 --- /dev/null +++ b/projects/steth-win/index.js @@ -0,0 +1,25 @@ +const sdk = require('@defillama/sdk'); +const abi = require('./abi.json') + +const POOL_CONTRACT = '0x2758b8d894b08342f0d00ac5f9466fdc795e4618'; +const STETH_CONTRACT = '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'; + +async function tvl(_, _1, _2, { api }) { + const balances = {}; + + const poolBalance = await api.call({ + abi: abi['accountedBalance'], + target: POOL_CONTRACT, + }); + + await sdk.util.sumSingleBalance(balances, STETH_CONTRACT, poolBalance, api.chain) + + return balances; +} + +module.exports = { + methodology: 'Counts the number of stETH tokens in the pool and calculates its TVL', + ethereum: { + tvl, + } +}; From 87bc82d21bc5586086dd6ee291433385bfd77beb Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 27 Apr 2023 21:52:24 +0100 Subject: [PATCH 12/20] change solana rpc --- projects/helper/solana.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/helper/solana.js b/projects/helper/solana.js index ee2edf1866..90614de900 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -18,7 +18,7 @@ const blacklistedTokens = [ let connection, provider -const endpoint = env.SOLANA_RPC || "https://api.mainnet-beta.solana.com/" +const endpoint = env.SOLANA_RPC || "https://try-rpc.mainnet.solana.blockdaemon.tech" function getConnection() { if (!connection) connection = new Connection(endpoint) From 4587d3a01c395c4ba2f0ca270d5e809775465f8a Mon Sep 17 00:00:00 2001 From: 0xngmi <0xngmi@protonmail.com> Date: Thu, 27 Apr 2023 22:46:31 +0100 Subject: [PATCH 13/20] add chronos --- projects/chronos/index.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 projects/chronos/index.js diff --git a/projects/chronos/index.js b/projects/chronos/index.js new file mode 100644 index 0000000000..3a39e3fd36 --- /dev/null +++ b/projects/chronos/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require('../helper/unknownTokens') + + +module.exports = { + misrepresentedTokens: true, + methodology: `Uses factory(0xCe9240869391928253Ed9cc9Bcb8cb98CB5B0722) address to count liquidity in pools as TVL.`, + arbitrum: { + tvl: getUniTVL({ factory: '0xCe9240869391928253Ed9cc9Bcb8cb98CB5B0722', useDefaultCoreAssets: true }), + } +}; From 59fa5e0667cb0dbb5506a5919aae917fdc00c8f1 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 28 Apr 2023 01:09:54 +0200 Subject: [PATCH 14/20] minor refactor --- projects/steth-win/abi.json | 3 --- projects/steth-win/index.js | 18 ++---------------- 2 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 projects/steth-win/abi.json diff --git a/projects/steth-win/abi.json b/projects/steth-win/abi.json deleted file mode 100644 index 8ff2b38d43..0000000000 --- a/projects/steth-win/abi.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "accountedBalance": "uint256:accountedBalance" -} \ No newline at end of file diff --git a/projects/steth-win/index.js b/projects/steth-win/index.js index 10f3072763..08bc9848f8 100644 --- a/projects/steth-win/index.js +++ b/projects/steth-win/index.js @@ -1,25 +1,11 @@ -const sdk = require('@defillama/sdk'); -const abi = require('./abi.json') +const { sumTokensExport } = require('../helper/unwrapLPs'); const POOL_CONTRACT = '0x2758b8d894b08342f0d00ac5f9466fdc795e4618'; const STETH_CONTRACT = '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84'; -async function tvl(_, _1, _2, { api }) { - const balances = {}; - - const poolBalance = await api.call({ - abi: abi['accountedBalance'], - target: POOL_CONTRACT, - }); - - await sdk.util.sumSingleBalance(balances, STETH_CONTRACT, poolBalance, api.chain) - - return balances; -} - module.exports = { methodology: 'Counts the number of stETH tokens in the pool and calculates its TVL', ethereum: { - tvl, + tvl: sumTokensExport({ owner: POOL_CONTRACT, tokens: [STETH_CONTRACT] }), } }; From c25e995ac27c8fd6ac0683c293025173eead20d3 Mon Sep 17 00:00:00 2001 From: kevin <126134017+sixkevin878@users.noreply.github.com> Date: Fri, 28 Apr 2023 12:24:27 +0800 Subject: [PATCH 15/20] fix: upData FACTORY_CONTRACT --- projects/avatr/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/avatr/index.js b/projects/avatr/index.js index 8f71001c51..27547dd378 100644 --- a/projects/avatr/index.js +++ b/projects/avatr/index.js @@ -2,7 +2,7 @@ const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); const { getLogs } = require("../helper/cache/getLogs"); const { staking } = require("../helper/staking"); -const FACTORY_CONTRACT = "0x9CAc6c4fDb0fCbbB1cA3064f7f6C3FAD22B0B92D"; +const FACTORY_CONTRACT = "0x498B8f1E767E2A32ab68C1301F1e98b59a34dA94"; const WETH_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; async function tvl(timestamp, block, chainBlocks, { api }) { From d7cfe4fe189dfe43b9c01f2f78a5a47a9a5d4997 Mon Sep 17 00:00:00 2001 From: ytrobert <91405156+ytrobert@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:50:04 +0800 Subject: [PATCH 16/20] add Aboard Exchange tvl --- projects/aboard-exchange/index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 projects/aboard-exchange/index.js diff --git a/projects/aboard-exchange/index.js b/projects/aboard-exchange/index.js new file mode 100644 index 0000000000..95b84bafe0 --- /dev/null +++ b/projects/aboard-exchange/index.js @@ -0,0 +1,30 @@ +//20230428 initial release: simple and clear +const { sumTokensExport } = require('../helper/unwrapLPs'); + +const ownerArbitrum = '0x7a08b29A7Ad4A19A5ECa0c82F5F082872488D135'; // contract address +const tokensArbitrum = [ + '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC + '0x0000000000000000000000000000000000000000', // ETH + '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', // USDT + '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', // WBTC +]; + +const ownerAvalanche = '0xd8b0D18faE7eA29F2AD95d01FFb479E0021a9A5e'; // contract address +const tokensAvalanche = [ + '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC + '0x0000000000000000000000000000000000000000', // AVAX + '0x152b9d0FdC40C096757F570A51E494bd4b943E50', // BTC.b + '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', // WETH.e + '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7', // USDt +]; + +module.exports = { + methodology: "TVL is equal to users' deposits minus withdrawals", + start: 1641625200, // Jan-08-2022 07:00:00 AM +UTC + arbitrum: { + tvl: sumTokensExport({ owner:ownerArbitrum, tokens:tokensArbitrum }) + }, + avax: { + tvl: sumTokensExport({ owner:ownerAvalanche, tokens:tokensAvalanche }) + }, +}; From 122819319cc15c4ad99846b98ec0148e9d16fefb Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:59:26 +0200 Subject: [PATCH 17/20] hydradex: refactor code --- projects/helper/getHydraV3SubgraphTvl.js | 71 ---------------------- projects/hydradex-v3/index.js | 32 ++++++---- projects/hydradex.js | 30 +++++---- projects/{hydradex-v2 => hydradex}/api.js | 0 projects/hydradex/getHydraV3SubgraphTvl.js | 23 +++++++ 5 files changed, 62 insertions(+), 94 deletions(-) delete mode 100644 projects/helper/getHydraV3SubgraphTvl.js rename projects/{hydradex-v2 => hydradex}/api.js (100%) create mode 100644 projects/hydradex/getHydraV3SubgraphTvl.js diff --git a/projects/helper/getHydraV3SubgraphTvl.js b/projects/helper/getHydraV3SubgraphTvl.js deleted file mode 100644 index 2a0ba290dd..0000000000 --- a/projects/helper/getHydraV3SubgraphTvl.js +++ /dev/null @@ -1,71 +0,0 @@ -const { request, gql } = require("graphql-request"); -const { toUSDTBalances } = require("../helper/balances"); -const { blockQuery } = require("./http"); - -function getChainTvl( - graphUrls, - factoriesName = "factories", - tvlName = "totalValueLockedUSD", - blockCatchupLimit = 500 -) { - const graphQuery = gql` - query get_tvl($block: Int!) { - ${factoriesName}( - block: { number: $block } - ) { - ${tvlName} - } - } - `; - - const blockGraphQuery = gql` - query get_block { - blocks(orderBy: "number", first: 1, orderDirection: "desc") { - number - } - } - `; - - return (chain) => { - return async (_, _b, _cb, { api }) => { - api.getBlock = async function () { - try { - const blocks = ( - await request( - "https://graph.hydradex.org/subgraphs/name/blocklytics/ethereum-blocks", - blockGraphQuery - ) - ).blocks; - - this.block = Number(blocks[0].number) || undefined; - } catch { - this.block = undefined; - } - }; - await api.getBlock(); - const block = api.block; - - let uniswapFactories; - - if (!blockCatchupLimit) { - uniswapFactories = ( - await request(graphUrls[chain], graphQuery, { block }) - )[factoriesName]; - } else { - uniswapFactories = ( - await blockQuery(graphUrls[chain], graphQuery, { - api, - blockCatchupLimit, - }) - )[factoriesName]; - } - - const usdTvl = Number(uniswapFactories[0][tvlName]); - return toUSDTBalances(usdTvl); - }; - }; -} - -module.exports = { - getChainTvl, -}; diff --git a/projects/hydradex-v3/index.js b/projects/hydradex-v3/index.js index 2bcdca26c7..164e7814a4 100644 --- a/projects/hydradex-v3/index.js +++ b/projects/hydradex-v3/index.js @@ -1,17 +1,27 @@ -const { getChainTvl } = require("../helper/getHydraV3SubgraphTvl"); +const { blockQuery } = require('../helper/http') +const { getBlock } = require('../hydradex/getHydraV3SubgraphTvl') -const v3graph = getChainTvl( - { - hydra: "https://graph.hydradex.org/subgraphs/name/v3-subgraph", - }, - "factories", - "totalValueLockedUSD" -); +async function tvl(timestamp) { + const endpoint = 'https://graph.hydradex.org/subgraphs/name/v3-subgraph' + const block = +(await getBlock('https://graph.hydradex.org/subgraphs/name/blocklytics/ethereum-blocks', timestamp)) + const query = `query ($block: Int){ + factories (block: { number: $block }) { + totalValueLockedUSD + } + }` + const { factories: [{ totalValueLockedUSD }] } = await blockQuery(endpoint, query, { + api: { + getBlock: () => block, + block + } + }) + return { tether: totalValueLockedUSD } +} module.exports = { - timetravel: false, - methodology: `Counts the tokens locked on AMM pools, pulling the data from https://graph.hydradex.org/subgraphs/name/v3-subgraph`, + misrepresentedTokens: true, + methodology: "We count liquidity on the dex, pulling data from subgraph", hydra: { - tvl: v3graph("hydra"), + tvl, }, }; diff --git a/projects/hydradex.js b/projects/hydradex.js index 11a0880538..4e1a289325 100644 --- a/projects/hydradex.js +++ b/projects/hydradex.js @@ -1,21 +1,27 @@ -const cloudscraper = require('cloudscraper') +const { blockQuery } = require('./helper/http') +const { getBlock } = require('./hydradex/getHydraV3SubgraphTvl') -async function fetch() { - const uri = 'https://info.hydradex.org/graphql' - const body = { "operationName": "Query", "variables": {}, "query": "query Query {\n hydraswapFactories(where: {id: \"5a2a927bea6c5f4a48d4e0116049c1e36d52a528\"}) {\n totalLiquidityUSD\n }\n}\n" } - const reserves = ( - await cloudscraper.post(uri, { - json: body - }) - ) - return { tether: +reserves.data.hydraswapFactories[0].totalLiquidityUSD } +async function tvl(timestamp) { + const endpoint = 'https://info.hydradex.org/graphql' + const block = await getBlock(endpoint, timestamp) + const query = `query ($block: Float!){ + hydraswapFactories (block: { number: $block }) { + totalLiquidityUSD + } + }` + const { hydraswapFactories: [{ totalLiquidityUSD }] } = await blockQuery(endpoint, query, { + api: { + getBlock: () => block, + block + } + }) + return { tether: totalLiquidityUSD } } module.exports = { misrepresentedTokens: true, - timetravel: false, methodology: "We count liquidity on the dex, pulling data from subgraph", hydra: { - tvl: fetch, + tvl, }, }; \ No newline at end of file diff --git a/projects/hydradex-v2/api.js b/projects/hydradex/api.js similarity index 100% rename from projects/hydradex-v2/api.js rename to projects/hydradex/api.js diff --git a/projects/hydradex/getHydraV3SubgraphTvl.js b/projects/hydradex/getHydraV3SubgraphTvl.js new file mode 100644 index 0000000000..90b75db167 --- /dev/null +++ b/projects/hydradex/getHydraV3SubgraphTvl.js @@ -0,0 +1,23 @@ +const { graphQuery, } = require("../helper/http"); + +const HOURS_12 = 12 * 3600 + +async function getBlock(endpoint, timestamp) { + const params = { + timestamp_from: timestamp - HOURS_12, + timestamp_to: timestamp + HOURS_12, + } + const query = `query ($timestamp_to: Int, $timestamp_from: Int){ + blocks (orderBy: "timestamp" first:1 orderDirection: "desc" where: { timestamp_lte: $timestamp_to timestamp_gte: $timestamp_from}) { + timestamp + number + } + }` + const { blocks } = await graphQuery(endpoint, query, params) + return blocks[0].number +} + +module.exports = { + getChainTvl, + getBlock, +}; From 8d3b1377ac5d452804345e73d0041d1a577586fd Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 28 Apr 2023 11:40:56 +0200 Subject: [PATCH 18/20] fix bug --- projects/hydradex/api.js | 8 +------- projects/hydradex/getHydraV3SubgraphTvl.js | 1 - 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/projects/hydradex/api.js b/projects/hydradex/api.js index 9b31da47f1..a36cb65a85 100644 --- a/projects/hydradex/api.js +++ b/projects/hydradex/api.js @@ -1,7 +1 @@ -const { getExports } = require('../helper/heroku-api') - -module.exports = { - timetravel: false, - misrepresentedTokens: true, - ...getExports("hydradex", ['hydra']), -} +module.exports = require('../hydradex') \ No newline at end of file diff --git a/projects/hydradex/getHydraV3SubgraphTvl.js b/projects/hydradex/getHydraV3SubgraphTvl.js index 90b75db167..e0fd25b396 100644 --- a/projects/hydradex/getHydraV3SubgraphTvl.js +++ b/projects/hydradex/getHydraV3SubgraphTvl.js @@ -18,6 +18,5 @@ async function getBlock(endpoint, timestamp) { } module.exports = { - getChainTvl, getBlock, }; From fa422d1253325e80a04835ab5770cced2e335aaf Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 28 Apr 2023 11:42:37 +0200 Subject: [PATCH 19/20] zkdefi: minor fix --- projects/zkdefi/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/zkdefi/index.js b/projects/zkdefi/index.js index eaae02a1dc..e560c45f13 100644 --- a/projects/zkdefi/index.js +++ b/projects/zkdefi/index.js @@ -4,7 +4,7 @@ module.exports = { misrepresentedTokens: true, polygon_zkevm: { tvl: getUniTVL({ - chain: "polygon_zkevm", + fetchBalances: true, useDefaultCoreAssets: true, factory: "0xfDC8ec444F482Fe8aFe0a00114548DC9ff729568", }), From e938bb1250d44ab70256eeeec4cbcbaa909d8a84 Mon Sep 17 00:00:00 2001 From: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 28 Apr 2023 13:38:06 +0200 Subject: [PATCH 20/20] 0vix was hacked --- projects/0vix/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/projects/0vix/index.js b/projects/0vix/index.js index 0c735c47ce..47597b9089 100644 --- a/projects/0vix/index.js +++ b/projects/0vix/index.js @@ -6,6 +6,11 @@ const matic = "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"; const chain = "polygon"; module.exports = { + hallmarks: [ + [Math.floor(new Date('2023-04-28')/1e3), 'Protocol was hacked!'], + ], polygon: compoundExports(master0vix, chain, oMATIC, matic), polygon_zkevm: compoundExports("0x6EA32f626e3A5c41547235ebBdf861526e11f482", "polygon_zkevm", "0xee1727f5074e747716637e1776b7f7c7133f16b1", "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9"), -}; \ No newline at end of file +}; + +delete module.exports.polygon.borrowed \ No newline at end of file