diff --git a/.github/workflows/getFileList.js b/.github/workflows/getFileList.js index 57a58c82c4..8a3070869b 100644 --- a/.github/workflows/getFileList.js +++ b/.github/workflows/getFileList.js @@ -4,7 +4,7 @@ const fileSet = new Set(); [...MODIFIED, ...ADDED].forEach(file => { const [root, dir] = file.split('/') - if (dir === 'treasury') fileSet.add(file) + if (dir === 'treasury' || dir === 'entities') fileSet.add(file) else if (root === 'projects' && dir !=='helper' && dir !== 'config') fileSet.add(root + '/' + dir) }) @@ -12,4 +12,4 @@ console.log(JSON.stringify([...fileSet])) function parse(data) { return data.replace('[', '').replace(']', '').split(',') -} \ No newline at end of file +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 31e6d30731..328af5536a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,6 +15,7 @@ jobs: - name: Run changes files through test script env: LLAMA_DEBUG_MODE: "true" + BSC_RPC: https://rpc.ankr.com/bsc,https://bsc-dataseed4.binance.org run: | RUN_FILES=$( MODIFIED=${{ steps.file_changes.outputs.files_modified}} \ diff --git a/README.md b/README.md index 2d04c27e87..a4b9dc7340 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,15 @@ Follow [this guide](https://docs.llama.fi/submit-a-project) to create an adapter Also, don't hesitate to send a message on [our discord](https://discord.defillama.com/) if we're late to merge your PR. -> If you would like to add a `volume` adapter please submit the PR [here](https://github.com/DefiLlama/adapters). +> If you would like to add a `volume` adapter please submit the PR [here](https://github.com/DefiLlama/adapters) +> - If you would like to add a `liquidations` adapter, please refer to [this readme document](https://github.com/DefiLlama/DefiLlama-Adapters/tree/main/liquidations) for details. + +1. Once your adapter has been merged, it takes time to show on the UI. If more than 24 hours have passed, please let us know in Discord. +2. Please enable "Allow edits by maintainers" while putting up the PR. +3. Sorry, We no longer accept fetch adapter for new projects, we prefer the tvl to computed from blockchain data, if you have trouble with creating a the adapter, please hop onto our discord, we are happy to assist you. +4. **For updating listing info** It is a different repo, you can find your listing in this file: https://github.com/DefiLlama/defillama-server/blob/master/defi/src/protocols/data2.ts, you can edit it there and put up a PR +5. Do not edit/push `package-lock.json` file as part of your changes, we use lockfileVersion 2, and most use v1 and using that messes up our CI +6. No need to go to our discord and announce that you've created a PR, we monitor all PRs and will review it asap ## Getting listed @@ -27,11 +35,6 @@ If you want to change RPC providers because you need archive node access or beca ETHEREUM_RPC="..." BSC_RPC="..." POLYGON_RPC="..." -FANTOM_RPC="..." -ARBITRUM_RPC="..." -OPTIMISM_RPC="..." -XDAI_RPC="..." -HARMONY_RPC="..." ``` The name of each rpc is `{CHAIN-NAME}_RPC`, and the name we use for each chain can be found [here](https://github.com/DefiLlama/defillama-sdk/blob/master/src/providers.json) diff --git a/liquidations/gravita-protocol/index.ts b/liquidations/gravita-protocol/index.ts new file mode 100644 index 0000000000..e681aeb183 --- /dev/null +++ b/liquidations/gravita-protocol/index.ts @@ -0,0 +1,174 @@ +import axios from "axios"; +import BigNumber from "bignumber.js"; +import { Liq } from "../utils/types"; +const sdk = require("@defillama/sdk"); + +type MulticallResponse = { + output: { + input: any; + success: boolean; + output: T; + }[]; +}; + +const ADMIN_CONTRACT_ADDRESS = "0xf7Cc67326F9A1D057c1e4b110eF6c680B13a1f53"; +const VESSEL_MANAGER_CONTRACT_ADDRESS = "0xdB5DAcB1DFbe16326C3656a88017f0cB4ece0977"; +const BLUSD_CONTRACT_ADDRESS = "0xB9D7DdDca9a4AC480991865EfEf82E01273F79C3"; +const WETH_CONTRACT_ADDRESS = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; + +const EXPLORER_BASE_URL = "https://etherscan.io/address/"; + +const getTokenInfo = async (tokenId: string) => { + const info = (await axios.get("https://coins.llama.fi/prices/current/" + tokenId)).data.coins as { + [tokenId: string]: { + decimals: number; + price: number; + symbol: string; + timestamp: number; + confidence: number; + }; + }; + const price = info[tokenId]; + return price; +}; + +// cr * debt / collateral = price +const calculateLiquidationPrice = (debt: string, collateral: string, cr: string) => { + const price = new BigNumber(cr).times(debt).div(collateral).toString(); + return price; +}; + +const tokenToCollateralAddress = (token: string) => { + if (token === WETH_CONTRACT_ADDRESS) { + return "ethereum:0x0000000000000000000000000000000000000000" + } + return "ethereum:" + token +} + +const positions = async () => { + let collAddresses = (await sdk.api.abi.call({ + abi: "function getValidCollateral() external view returns (address[])", + target: ADMIN_CONTRACT_ADDRESS, + })).output; + + collAddresses = collAddresses.filter(i => i !== BLUSD_CONTRACT_ADDRESS) // BLUSD is not liquidatable + + // get prices for calculating recovery mode + const prices = {} + for (const c of collAddresses) { + const info = await getTokenInfo(`ethereum:${c}`) + prices[c] = BigNumber(info.price).times(10e18).toFixed() + } + + const vesselCounts = ( + (await sdk.api.abi.multiCall({ + calls: collAddresses.map((i) => ({ target: VESSEL_MANAGER_CONTRACT_ADDRESS, params: [i] })), + abi: "function getVesselOwnersCount(address) external view returns (uint256)", + requery: true, + })) as MulticallResponse + ).output.map((x, i) => { + return { + asset: collAddresses[i], + count: x.output + } + }); + + const vesselOwnerQueries = ([] as any[]).concat(...vesselCounts.map(({ asset, count }) => { + return Array.from(Array(Number(count))).map((_, i) => { + return { + target: VESSEL_MANAGER_CONTRACT_ADDRESS, + params: [asset, i] + } + }) + })); + + const vesselAddresses = ( + (await sdk.api.abi.multiCall({ + calls: vesselOwnerQueries, + abi: "function getVesselFromVesselOwnersArray(address,uint256) external view returns (address)", + requery: true, + })) as MulticallResponse + ).output.map((x, i) => { + return { + asset: vesselOwnerQueries[i].params[0], + vessel: x.output + } + }); + + const vesselDebtsAndCollaterals = ( + (await sdk.api.abi.multiCall({ + calls: vesselAddresses.map((i) => ({ target: VESSEL_MANAGER_CONTRACT_ADDRESS, params: [i.asset, i.vessel] })), + abi: "function getEntireDebtAndColl(address,address) external view returns (uint256,uint256,uint256,uint256)", + requery: true, + })) as MulticallResponse + ).output.map((x, i) => { + return { + asset: vesselAddresses[i].asset, + owner: vesselAddresses[i].vessel, + coll: x.output[1], + debt: x.output[0] + } + }); + + const recoveryModeCRs = ( + (await sdk.api.abi.multiCall({ + calls: collAddresses.map((i) => ({ target: ADMIN_CONTRACT_ADDRESS, params: [i] })), + abi: "function getCcr(address) external view returns (uint256)", + requery: true, + })) as MulticallResponse + ).output.map((x, i) => { + return { + asset: collAddresses[i], + recoveryCR: BigNumber(x.output).div(10e17).toFixed(3) + } + }); + + const minimumCRs = ( + (await sdk.api.abi.multiCall({ + calls: collAddresses.map((i) => ({ target: ADMIN_CONTRACT_ADDRESS, params: [i] })), + abi: "function getMcr(address) external view returns (uint256)", + requery: true, + })) as MulticallResponse + ).output.map((x, i) => { + return { + asset: collAddresses[i], + minCR: BigNumber(x.output).div(10e17).toFixed(3) + } + }); + + const recoveryModes = ( + (await sdk.api.abi.multiCall({ + calls: collAddresses.map((i) => ({ target: VESSEL_MANAGER_CONTRACT_ADDRESS, params: [i, prices[i]] })), + abi: "function checkRecoveryMode(address,uint256) external view returns (bool)", + requery: true, + })) as MulticallResponse + ).output.map((x, i) => { + return { + asset: collAddresses[i], + isRecoveryMode: x.output + } + }); + + const vessels = vesselDebtsAndCollaterals.map(({ asset, coll, debt, owner }) => { + const cr = recoveryModes.find(i => i.asset === asset).isRecoveryMode ? + recoveryModeCRs.find(i => i.asset === asset).recoveryCR : + minimumCRs.find(i => i.asset === asset).minCR; + return { + owner, + liqPrice: Number(calculateLiquidationPrice(debt, coll, cr)), + collateral: tokenToCollateralAddress(asset), // ETH + collateralAmount: coll, + extra: { + url: EXPLORER_BASE_URL + owner, + }, + } as Liq; + }); + + return vessels; +}; + +module.exports = { + ethereum: { + liquidations: positions, + }, +}; diff --git a/liquidations/kolibri/index.ts b/liquidations/kolibri/index.ts deleted file mode 100644 index e827bc0acf..0000000000 --- a/liquidations/kolibri/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { CONTRACTS, HarbingerClient } from "@hover-labs/kolibri-js"; -import { OVEN_DATA_BASE_URL, TEZOS_RPC, getOvens, mapOven } from "./utils"; - -import { Liq } from "../utils/types"; - -const harbingerClient = new HarbingerClient( - TEZOS_RPC, - CONTRACTS.MAIN.HARBINGER_NORMALIZER -); - -const positions = async (): Promise => { - const [ovens, { price }] = await Promise.all([ - getOvens(OVEN_DATA_BASE_URL), - harbingerClient.getPriceData(), - ]); - - return Promise.all(ovens.map((oven) => mapOven(oven, price))); -}; - -module.exports = { - tezos: { - liquidations: positions, - }, -}; diff --git a/liquidations/kolibri/utils.ts b/liquidations/kolibri/utils.ts deleted file mode 100644 index d3027212f6..0000000000 --- a/liquidations/kolibri/utils.ts +++ /dev/null @@ -1,96 +0,0 @@ -import BigNumber from "bignumber.js"; -import { ConversionUtils } from "@hover-labs/kolibri-js"; -import { Liq } from "../utils/types"; -import axios from "axios"; - -/* -Credits goes to: https://github.com/Hover-Labs/kolibri-js/blob/master/src/oven-client.ts -As the vast majority of helpers from here were either took, modified or inspired from kolibri-js module -*/ - -export const TEZOS_RPC = process.env.TEZOS_RPC || "https://rpc.tzkt.io/mainnet"; -export const OVEN_DATA_BASE_URL = - "https://kolibri-data.s3.amazonaws.com/mainnet/oven-data.json"; - -const MUTEZ_DIGITS = 6; -const SHARD_DIGITS = 18; - -export const MUTEZ_TO_SHARD = new BigNumber( - Math.pow(10, SHARD_DIGITS - MUTEZ_DIGITS) -); - -export const SHARD_PRECISION = new BigNumber(Math.pow(10, SHARD_DIGITS)); - -export interface KolibriOven { - ovenAddress: string; - ovenOwner: string; - baker: string; - balance: string; - borrowedTokens: string; - stabilityFees: string; - isLiquidated: boolean; - outstandingTokens: string; -} - -const liquidatablePrice = (rate: BigNumber, price: BigNumber) => { - const t = 1 - rate.toNumber(); - const a = price.dividedBy(Math.pow(10, 6)); - return a.minus(a.times(t)); -}; - -export const customGetCollateralUtilization = ( - price: BigNumber, - balance: BigNumber, - outstandingTokens: BigNumber -) => { - const priceShard = price.multipliedBy(MUTEZ_TO_SHARD); - const collateralValue = balance - .multipliedBy(MUTEZ_TO_SHARD) - .multipliedBy(priceShard) - .dividedBy(SHARD_PRECISION); - - return new BigNumber( - outstandingTokens - .times(Math.pow(10, SHARD_DIGITS)) - .dividedBy(collateralValue) - .toFixed(0) - ); -}; - -export const getOvens = async (ovenBaseUrl) => { - const { - data: { allOvenData }, - } = await axios.get(ovenBaseUrl); - - //remvoving liquidated + empty ovens - return (allOvenData as KolibriOven[]).filter( - (oven) => oven.isLiquidated === false && parseInt(oven.balance, 10) > 0 - ); -}; - -export const mapOven = async ( - { balance, ovenAddress, ovenOwner, outstandingTokens }: KolibriOven, - price: BigNumber -) => { - const ovenBalance = new BigNumber(balance); - const collateralUtilization = customGetCollateralUtilization( - price, - ovenBalance, - new BigNumber(outstandingTokens) - ); - const rate = collateralUtilization.multipliedBy(2); - const liquidatablePriceValue = liquidatablePrice(rate, price); - - return { - owner: ovenOwner, - liqPrice: parseFloat( - ConversionUtils.shardToHumanReadableNumber(liquidatablePriceValue) - ), - collateral: `coingecko:tezos`, - collateralAmount: ovenBalance.toString(), - extra: { - url: `https://tzkt.io/${ovenAddress}/operations/`, - owner: `https://tzkt.io/${ovenOwner}/operations/`, - }, - } as Liq; -}; diff --git a/liquidations/mimo-protocol/index.ts b/liquidations/mimo-protocol/index.ts index 40071814f1..9d0bc72c79 100644 --- a/liquidations/mimo-protocol/index.ts +++ b/liquidations/mimo-protocol/index.ts @@ -24,14 +24,14 @@ const latestRoundDataABI = { enum Chain { ethereum = "ethereum", polygon = "polygon", - fantom = "fantom", + // fantom = "fantom", } const getEURUSD = async (chain: Chain) => { const oracleAddresses = { [Chain.ethereum]: "0xb49f677943bc038e9857d61e7d053caa2c1734c1", [Chain.polygon]: "0x73366fe0aa0ded304479862808e02506fe556a98", - [Chain.fantom]: "0x3e68e68ea2c3698400465e3104843597690ae0f7", + // [Chain.fantom]: "0x3e68e68ea2c3698400465e3104843597690ae0f7", }; const eurUSDRoundData = await sdk.api.abi.call({ @@ -56,11 +56,11 @@ const getSubgraphUrl = (chain: Chain) => { subgraphUrl = "https://api.thegraph.com/subgraphs/name/m19/titanpolygon"; break; } - case Chain.fantom: { - subgraphUrl = - "https://api.thegraph.com/subgraphs/name/rayxpub/titanfantom"; - break; - } + // case Chain.fantom: { + // subgraphUrl = + // "https://api.thegraph.com/subgraphs/name/rayxpub/titanfantom"; + // break; + // } } return subgraphUrl; @@ -194,7 +194,7 @@ module.exports = { polygon: { liquidations: positions(Chain.polygon), }, - fantom: { - liquidations: positions(Chain.fantom), - }, + // fantom: { + // liquidations: positions(Chain.fantom), + // }, }; diff --git a/package-lock.json b/package-lock.json index eafdccfce3..155721c37f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "license": "ISC", "dependencies": { "@defillama/sdk": "latest", - "@hover-labs/kolibri-js": "^4.1.3", "@project-serum/anchor": "^0.25.0", "@solana/web3.js": "^1.36.0", "@solendprotocol/solend-sdk": "^0.6.2", @@ -24,6 +23,7 @@ "borsh": "^0.7.0", "dotenv": "^8.6.0", "ethers": "^5.6.5", + "graphql": "^16.6.0", "graphql-request": "^4.0.0", "hi-base32": "^0.5.1", "js-sha512": "^0.8.0", @@ -39,112 +39,6 @@ "ts-node": "^10.8.1" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/runtime": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", @@ -169,13 +63,14 @@ } }, "node_modules/@defillama/sdk": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-4.0.5.tgz", - "integrity": "sha512-cUe5IODz78vapSnS96XX988xSONkV8fA2mgcRE3bkQrmZjkx7surP6/afKVEnTLLumQz+uShZEx78CNeDHVY+w==", + "version": "4.0.42", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-4.0.42.tgz", + "integrity": "sha512-eP9eo82vmWUqnw6Xjz9rvoNDH/5QTQp7cXdZyQa6cYV/JGRZ4Yq05BuHtnIt0ngH7BJJ4UsjDN66nMFA3uN2vA==", "dependencies": { "@supercharge/promise-pool": "^2.1.0", "ethers": "^5.4.5", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.7", + "tron-format-address": "^0.1.11" } }, "node_modules/@eslint/eslintrc": { @@ -872,103 +767,6 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@hover-labs/kolibri-js": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@hover-labs/kolibri-js/-/kolibri-js-4.1.3.tgz", - "integrity": "sha512-ZmW4x+7XptaQnE5nw3AJU7L5AHxHE/E0Qy0rWKjd23MM/V6vd2CODbR9UC0Rh1dVmWioprj0KbTEqg499OM7ow==", - "dependencies": { - "@taquito/signer": "^12.0.2", - "@taquito/taquito": "^12.0.2", - "@temple-wallet/dapp": "^5.0.2", - "axios": "^0.21.0", - "bignumber.js": "^9.0.1", - "blakejs": "^1.1.1", - "bs58check": "^2.1.2", - "decimal.js": "^10.3.1", - "lodash": "^4.17.21" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/@taquito/http-utils": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-12.1.1.tgz", - "integrity": "sha512-Zlp/eTRVjFs0XEIiAhgxkh6s9npF4dO+e/Sm2XWsDmNPoGI2jdXNH0L+NiKJIOkYcu0CXlcgriTeEaYnbeTvcA==", - "dependencies": { - "axios": "^0.26.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/@taquito/http-utils/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/@taquito/michel-codec": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-12.1.1.tgz", - "integrity": "sha512-BAig8YyLyRW5kxV/r0S191W+SvYuiTRJpgSp5IsgCDLAOh+d4/xq6IgU3PuGJgokQDstZdTbjpkrgRCnufR8lw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/@taquito/michelson-encoder": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-12.1.1.tgz", - "integrity": "sha512-mWcA1DHHlFj7UswJpEmml853x9e0IYHyeiKZYAo7DtizHz0jiUWtptCuEWiPQ4fMOreFbYZ6KVYenoVfQVNrqA==", - "dependencies": { - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "fast-json-stable-stringify": "^2.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/@taquito/rpc": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-12.1.1.tgz", - "integrity": "sha512-CgAF9kdmKLa/UbmiqApDtncCQGiG7kEOIYis8IIa0JUT9JD1H8WBbSNF/oNh4e0soWUK9BL2qU369RFnxIW+iA==", - "dependencies": { - "@taquito/http-utils": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/@taquito/taquito": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-12.1.1.tgz", - "integrity": "sha512-HvbtClQ7isrDd17X/LEKkPzzeVYA8EMUem3qrkl9qvDO6FpJx/QLbUpYfT2PC0pLUkSrzdLGzmESHAOZhcksaw==", - "hasInstallScript": true, - "dependencies": { - "@taquito/http-utils": "^12.1.1", - "@taquito/local-forging": "^12.1.1", - "@taquito/michel-codec": "^12.1.1", - "@taquito/michelson-encoder": "^12.1.1", - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "rxjs": "^6.6.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@hover-labs/kolibri-js/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -1002,22 +800,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -1660,695 +1442,152 @@ "node": ">=4.2.0" } }, - "node_modules/@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "dependencies": { - "@stablelib/int": "^1.0.1" - } - }, - "node_modules/@stablelib/blake2b": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/blake2b/-/blake2b-1.0.1.tgz", - "integrity": "sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "node_modules/@supercharge/promise-pool": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.3.2.tgz", + "integrity": "sha512-f5+C7zv+QQivcUO1FH5lXi7GcuJ3CFuJF3Eg06iArhUs5ma0szCLEQwIY4+VQyh7m/RLVZdzvr4E4ZDnLe9MNg==", + "engines": { + "node": ">=8" } }, - "node_modules/@stablelib/bytes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", - "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, - "node_modules/@stablelib/constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", - "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, - "node_modules/@stablelib/ed25519": { + "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", - "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", - "dependencies": { - "@stablelib/random": "^1.0.2", - "@stablelib/sha512": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/hash": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", - "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, - "node_modules/@stablelib/keyagreement": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", - "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "node_modules/@types/async-retry": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.5.tgz", + "integrity": "sha512-YrdjSD+yQv7h6d5Ip+PMxh3H6ZxKyQk0Ts+PvaNRInxneG9PFVZjFg77ILAN+N6qYf7g4giSJ1l+ZjQ1zeegvA==", + "dev": true, "dependencies": { - "@stablelib/bytes": "^1.0.1" + "@types/retry": "*" } }, - "node_modules/@stablelib/nacl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stablelib/nacl/-/nacl-1.0.4.tgz", - "integrity": "sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw==", + "node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dev": true, "dependencies": { - "@stablelib/poly1305": "^1.0.1", - "@stablelib/random": "^1.0.2", - "@stablelib/wipe": "^1.0.1", - "@stablelib/x25519": "^1.0.3", - "@stablelib/xsalsa20": "^1.0.2" + "@types/node": "*" } }, - "node_modules/@stablelib/poly1305": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", - "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dependencies": { - "@stablelib/constant-time": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@types/node": "*" } }, - "node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, - "node_modules/@stablelib/salsa20": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/salsa20/-/salsa20-1.0.2.tgz", - "integrity": "sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/constant-time": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true }, - "node_modules/@stablelib/sha512": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", - "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" + "@types/node": "*" } }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" - }, - "node_modules/@stablelib/x25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", - "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", - "dependencies": { - "@stablelib/keyagreement": "^1.0.1", - "@stablelib/random": "^1.0.2", - "@stablelib/wipe": "^1.0.1" + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@stablelib/xsalsa20": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/xsalsa20/-/xsalsa20-1.0.2.tgz", - "integrity": "sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/salsa20": "^1.0.2", - "@stablelib/wipe": "^1.0.1" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@supercharge/promise-pool": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.3.2.tgz", - "integrity": "sha512-f5+C7zv+QQivcUO1FH5lXi7GcuJ3CFuJF3Eg06iArhUs5ma0szCLEQwIY4+VQyh7m/RLVZdzvr4E4ZDnLe9MNg==", + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/@taquito/http-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-10.2.1.tgz", - "integrity": "sha512-RZmGxJFllTHC5LuxrPcVQoH/MpDvQehLjE1czSmL2Dz1VZlzI4Q6Ie+pG5nHQODRPqE8ABi/2aHAGGYMQWqKZg==", - "peer": true, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dependencies": { - "xhr2-cookies": "^1.1.0" + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 8.0.0" } }, - "node_modules/@taquito/local-forging": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/local-forging/-/local-forging-12.1.1.tgz", - "integrity": "sha512-SUA1YYRIpEGsTy5OfUIgIem0k/QsAzGjDCvf/wl5XV/fVBkP/+GN7uvYoqgJblCmsgtsMBhJFtXgs+D6bjGexg==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@taquito/michel-codec": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-10.2.1.tgz", - "integrity": "sha512-VSHELyuiwso1qCpAEZkH7JdDlZdHxTjyvZcBsfnfpbdpCrAUpCB48P4NZOnvZ58SYt9VS1bNAa5GRvQyOnNvMQ==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/michelson-encoder": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-10.2.1.tgz", - "integrity": "sha512-HYCtDGCWtyCgOQjmxYLYw5ftejG0FUfAW1FzZWIW6w2ars1TInSbLNeVRZs+EmbD3L8wOaxaOlgdsMoDnGqM/g==", - "peer": true, - "dependencies": { - "@taquito/rpc": "^10.2.1", - "@taquito/utils": "^10.2.1", - "bignumber.js": "^9.0.1", - "fast-json-stable-stringify": "^2.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/michelson-encoder/node_modules/@taquito/utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-10.2.1.tgz", - "integrity": "sha512-oW/D9irojwjorIV/0yO32Gyr+zSnITkVkOwVmnxge6DYHWC7aqPbdwiDwc4/GewKXNngBDqDEjEEPhkp0ZnvJw==", - "peer": true, - "dependencies": { - "blakejs": "^1.1.0", - "bs58check": "^2.1.2", - "buffer": "^6.0.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/michelson-encoder/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@taquito/michelson-encoder/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/@taquito/rpc": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-10.2.1.tgz", - "integrity": "sha512-Vg80sGLICkEKGls+7YEd0uFpsp8dwx2kNeGgCbpNROIs0S6Slsd0UfDlaZGlllWeUAKr5r6baexYrTKFuWs/UA==", - "peer": true, - "dependencies": { - "@taquito/http-utils": "^10.2.1", - "bignumber.js": "^9.0.1", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/signer/-/signer-12.1.1.tgz", - "integrity": "sha512-TONxIbLs7bgmB3TTzcTOYzL8pFLZFBujHDHjB5QHJY5DT+lpByjYZHk2Frqjcy3NDvENVLU6uXeCeba2LK8kwA==", - "dependencies": { - "@stablelib/blake2b": "^1.0.1", - "@stablelib/ed25519": "^1.0.2", - "@stablelib/nacl": "^1.0.3", - "@taquito/taquito": "^12.1.1", - "@taquito/utils": "^12.1.1", - "elliptic": "^6.5.4", - "pbkdf2": "^3.1.2", - "typedarray-to-buffer": "^4.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer/node_modules/@taquito/http-utils": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-12.1.1.tgz", - "integrity": "sha512-Zlp/eTRVjFs0XEIiAhgxkh6s9npF4dO+e/Sm2XWsDmNPoGI2jdXNH0L+NiKJIOkYcu0CXlcgriTeEaYnbeTvcA==", - "dependencies": { - "axios": "^0.26.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer/node_modules/@taquito/michel-codec": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-12.1.1.tgz", - "integrity": "sha512-BAig8YyLyRW5kxV/r0S191W+SvYuiTRJpgSp5IsgCDLAOh+d4/xq6IgU3PuGJgokQDstZdTbjpkrgRCnufR8lw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer/node_modules/@taquito/michelson-encoder": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-12.1.1.tgz", - "integrity": "sha512-mWcA1DHHlFj7UswJpEmml853x9e0IYHyeiKZYAo7DtizHz0jiUWtptCuEWiPQ4fMOreFbYZ6KVYenoVfQVNrqA==", - "dependencies": { - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "fast-json-stable-stringify": "^2.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer/node_modules/@taquito/rpc": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-12.1.1.tgz", - "integrity": "sha512-CgAF9kdmKLa/UbmiqApDtncCQGiG7kEOIYis8IIa0JUT9JD1H8WBbSNF/oNh4e0soWUK9BL2qU369RFnxIW+iA==", - "dependencies": { - "@taquito/http-utils": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer/node_modules/@taquito/taquito": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-12.1.1.tgz", - "integrity": "sha512-HvbtClQ7isrDd17X/LEKkPzzeVYA8EMUem3qrkl9qvDO6FpJx/QLbUpYfT2PC0pLUkSrzdLGzmESHAOZhcksaw==", - "hasInstallScript": true, - "dependencies": { - "@taquito/http-utils": "^12.1.1", - "@taquito/local-forging": "^12.1.1", - "@taquito/michel-codec": "^12.1.1", - "@taquito/michelson-encoder": "^12.1.1", - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "rxjs": "^6.6.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/signer/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, - "node_modules/@taquito/taquito": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-10.2.1.tgz", - "integrity": "sha512-ay61aKhFQPnYGu5d9jqEvaZE0EzE6tO9MD+5vOu6/NFVThBd7ysOQS1PB0VprL9SupM1NVDFnEJ8GtE8SYgk8g==", - "hasInstallScript": true, - "peer": true, - "dependencies": { - "@taquito/http-utils": "^10.2.1", - "@taquito/michel-codec": "^10.2.1", - "@taquito/michelson-encoder": "^10.2.1", - "@taquito/rpc": "^10.2.1", - "@taquito/utils": "^10.2.1", - "bignumber.js": "^9.0.1", - "rx-sandbox": "^1.0.4", - "rxjs": "^6.6.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/taquito/node_modules/@taquito/utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-10.2.1.tgz", - "integrity": "sha512-oW/D9irojwjorIV/0yO32Gyr+zSnITkVkOwVmnxge6DYHWC7aqPbdwiDwc4/GewKXNngBDqDEjEEPhkp0ZnvJw==", - "peer": true, - "dependencies": { - "blakejs": "^1.1.0", - "bs58check": "^2.1.2", - "buffer": "^6.0.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/taquito/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@taquito/taquito/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/@taquito/utils": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-12.1.1.tgz", - "integrity": "sha512-GxNSBrA02vwhy56ayWB49VZficB+j2oyhPdlsRb2CguephmyEYnlUaNV27ILa6dPDW+zv6+QWQj6GyqLBRpIlA==", - "dependencies": { - "@stablelib/blake2b": "^1.0.1", - "@stablelib/ed25519": "^1.0.2", - "@types/bs58check": "^2.1.0", - "blakejs": "^1.1.1", - "bs58check": "^2.1.2", - "buffer": "^6.0.3", - "elliptic": "^6.5.4", - "typedarray-to-buffer": "^4.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@taquito/utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@taquito/utils/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/@temple-wallet/dapp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@temple-wallet/dapp/-/dapp-5.0.2.tgz", - "integrity": "sha512-IIeHTowHXOp7/JnttfzMyCJjFWwhqOauDN7S2vU0GzHkpT5gH6FBXqB3kvZUyPfoxY0PXuXg+HKh++qABx+g9A==", - "dependencies": { - "nanoid": "^3.1.25" - }, - "peerDependencies": { - "@taquito/taquito": "^10.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "node_modules/@types/async-retry": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.5.tgz", - "integrity": "sha512-YrdjSD+yQv7h6d5Ip+PMxh3H6ZxKyQk0Ts+PvaNRInxneG9PFVZjFg77ILAN+N6qYf7g4giSJ1l+ZjQ1zeegvA==", - "dev": true, - "dependencies": { - "@types/retry": "*" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/bs58check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/bs58check/-/bs58check-2.1.0.tgz", - "integrity": "sha512-OxsysnJQh82vy9DRbOcw9m2j/WiyqZLn0YBhKxdQ+aCwoHj+tWzyCgpwAkr79IfDXZKxc6h7k89T9pwS78CqTQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "peer": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "peer": true - }, - "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "peer": true - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -2357,6 +1596,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2537,18 +1777,6 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "peer": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -2562,16 +1790,6 @@ "base-x": "^3.0.2" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, "node_modules/buffer": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", @@ -2668,6 +1886,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2679,19 +1898,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2702,7 +1913,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colors": { "version": "1.4.0", @@ -2734,37 +1946,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -2820,11 +2001,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2867,15 +2043,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "peer": true, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3206,23 +2373,6 @@ "node": ">=0.4.x" } }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/extract-files": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", @@ -3251,7 +2401,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -3290,18 +2441,6 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "peer": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/find": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", @@ -3496,7 +2635,6 @@ "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -3563,6 +2701,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3592,19 +2731,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -3783,15 +2909,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "peer": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -3886,74 +3003,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "peer": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "peer": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "peer": true, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/jmespath": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", @@ -3987,12 +3036,6 @@ "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -4160,29 +3203,6 @@ "node": ">= 8.16.2" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "peer": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -4243,17 +3263,6 @@ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4409,33 +3418,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "peer": true }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "peer": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4445,21 +3427,6 @@ "node": ">= 0.8.0" } }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -4503,25 +3470,6 @@ } ] }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "peer": true - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -4602,15 +3550,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "node_modules/rpc-websockets": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz", @@ -4681,39 +3620,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rx-sandbox": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rx-sandbox/-/rx-sandbox-1.0.4.tgz", - "integrity": "sha512-+/9MHDYNoF9ca/2RR+L2LloXXeQyIR3k/wjK03IicrxxlbkhmKF4ejPiWeafMWDg7otF+pnX5NE/8v/rX6ICJA==", - "peer": true, - "dependencies": { - "expect": "^26.6.1", - "jest-matcher-utils": "^26.6.1" - }, - "engines": { - "node": ">=4.2.4", - "npm": ">=3.0.0" - }, - "peerDependencies": { - "rxjs": "6.x" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -4743,18 +3649,6 @@ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4804,15 +3698,6 @@ "vscode-textmate": "5.2.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -4831,27 +3716,6 @@ "node": ">=0.10.0" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "peer": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/starknet": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/starknet/-/starknet-4.17.1.tgz", @@ -4870,14 +3734,6 @@ "url-join": "^4.0.1" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4911,6 +3767,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4946,18 +3803,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "peer": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/toml": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", @@ -4974,9 +3819,9 @@ "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==" }, "node_modules/tron-format-address": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.8.tgz", - "integrity": "sha512-oTtzUM43OZhQiv1p2aOVqbnev6mmJHXQrMpS3nn7zVAI/+ffA/aF+Y/vugHtYotckkromRLPEl/SR1HfJjAYQA==" + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.11.tgz", + "integrity": "sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw==" }, "node_modules/ts-custom-error": { "version": "3.3.1", @@ -5055,27 +3900,8 @@ "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", - "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/typedoc-default-themes": { "version": "0.12.10", @@ -5191,11 +4017,6 @@ "which-typed-array": "^1.1.2" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, "node_modules/uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", @@ -5315,15 +4136,6 @@ } } }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "peer": true, - "dependencies": { - "cookiejar": "^2.1.1" - } - }, "node_modules/xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -5364,90 +4176,6 @@ } }, "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "peer": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "peer": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "@babel/runtime": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", @@ -5466,13 +4194,14 @@ } }, "@defillama/sdk": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-4.0.5.tgz", - "integrity": "sha512-cUe5IODz78vapSnS96XX988xSONkV8fA2mgcRE3bkQrmZjkx7surP6/afKVEnTLLumQz+uShZEx78CNeDHVY+w==", + "version": "4.0.42", + "resolved": "https://registry.npmjs.org/@defillama/sdk/-/sdk-4.0.42.tgz", + "integrity": "sha512-eP9eo82vmWUqnw6Xjz9rvoNDH/5QTQp7cXdZyQa6cYV/JGRZ4Yq05BuHtnIt0ngH7BJJ4UsjDN66nMFA3uN2vA==", "requires": { "@supercharge/promise-pool": "^2.1.0", "ethers": "^5.4.5", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.7", + "tron-format-address": "^0.1.11" } }, "@eslint/eslintrc": { @@ -5863,91 +4592,6 @@ "@ethersproject/strings": "^5.7.0" } }, - "@hover-labs/kolibri-js": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@hover-labs/kolibri-js/-/kolibri-js-4.1.3.tgz", - "integrity": "sha512-ZmW4x+7XptaQnE5nw3AJU7L5AHxHE/E0Qy0rWKjd23MM/V6vd2CODbR9UC0Rh1dVmWioprj0KbTEqg499OM7ow==", - "requires": { - "@taquito/signer": "^12.0.2", - "@taquito/taquito": "^12.0.2", - "@temple-wallet/dapp": "^5.0.2", - "axios": "^0.21.0", - "bignumber.js": "^9.0.1", - "blakejs": "^1.1.1", - "bs58check": "^2.1.2", - "decimal.js": "^10.3.1", - "lodash": "^4.17.21" - }, - "dependencies": { - "@taquito/http-utils": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-12.1.1.tgz", - "integrity": "sha512-Zlp/eTRVjFs0XEIiAhgxkh6s9npF4dO+e/Sm2XWsDmNPoGI2jdXNH0L+NiKJIOkYcu0CXlcgriTeEaYnbeTvcA==", - "requires": { - "axios": "^0.26.0" - }, - "dependencies": { - "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "requires": { - "follow-redirects": "^1.14.8" - } - } - } - }, - "@taquito/michel-codec": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-12.1.1.tgz", - "integrity": "sha512-BAig8YyLyRW5kxV/r0S191W+SvYuiTRJpgSp5IsgCDLAOh+d4/xq6IgU3PuGJgokQDstZdTbjpkrgRCnufR8lw==" - }, - "@taquito/michelson-encoder": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-12.1.1.tgz", - "integrity": "sha512-mWcA1DHHlFj7UswJpEmml853x9e0IYHyeiKZYAo7DtizHz0jiUWtptCuEWiPQ4fMOreFbYZ6KVYenoVfQVNrqA==", - "requires": { - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "fast-json-stable-stringify": "^2.1.0" - } - }, - "@taquito/rpc": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-12.1.1.tgz", - "integrity": "sha512-CgAF9kdmKLa/UbmiqApDtncCQGiG7kEOIYis8IIa0JUT9JD1H8WBbSNF/oNh4e0soWUK9BL2qU369RFnxIW+iA==", - "requires": { - "@taquito/http-utils": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2" - } - }, - "@taquito/taquito": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-12.1.1.tgz", - "integrity": "sha512-HvbtClQ7isrDd17X/LEKkPzzeVYA8EMUem3qrkl9qvDO6FpJx/QLbUpYfT2PC0pLUkSrzdLGzmESHAOZhcksaw==", - "requires": { - "@taquito/http-utils": "^12.1.1", - "@taquito/local-forging": "^12.1.1", - "@taquito/michel-codec": "^12.1.1", - "@taquito/michelson-encoder": "^12.1.1", - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "rxjs": "^6.6.3" - } - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - } - } - }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -5971,19 +4615,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", @@ -6389,388 +5020,27 @@ "bs58": "^4.0.1", "buffer-layout": "^1.2.2", "camelcase": "^5.3.1", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "toml": "^3.0.0" - } - }, - "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "requires": { - "follow-redirects": "^1.14.4" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "typedoc": { - "version": "0.20.37", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.37.tgz", - "integrity": "sha512-9+qDhdc4X00qTNOtii6QX2z7ndAeWVOso7w3MPSoSJdXlVhpwPfm1yEp4ooKuWA9fiQILR8FKkyjmeqa13hBbw==", - "peer": true, - "requires": { - "colors": "^1.4.0", - "fs-extra": "^9.1.0", - "handlebars": "^4.7.7", - "lodash": "^4.17.21", - "lunr": "^2.3.9", - "marked": "~2.0.3", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shelljs": "^0.8.4", - "shiki": "^0.9.3", - "typedoc-default-themes": "^0.12.10" - } - }, - "typedoc-plugin-cname": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-cname/-/typedoc-plugin-cname-1.0.1.tgz", - "integrity": "sha512-f97SS5RzDCVBa7Frg1VketIMAkEl3OTvBs9wM8lLEkJVWCIG2yXnszglA82on39gFwQ1tyq8tiuxRgb4569GpA==", - "requires": {} - }, - "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "peer": true - } - } - }, - "@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "requires": { - "@stablelib/int": "^1.0.1" - } - }, - "@stablelib/blake2b": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/blake2b/-/blake2b-1.0.1.tgz", - "integrity": "sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==", - "requires": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/bytes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", - "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" - }, - "@stablelib/constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", - "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" - }, - "@stablelib/ed25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", - "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", - "requires": { - "@stablelib/random": "^1.0.2", - "@stablelib/sha512": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/hash": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", - "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" - }, - "@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" - }, - "@stablelib/keyagreement": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", - "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", - "requires": { - "@stablelib/bytes": "^1.0.1" - } - }, - "@stablelib/nacl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stablelib/nacl/-/nacl-1.0.4.tgz", - "integrity": "sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw==", - "requires": { - "@stablelib/poly1305": "^1.0.1", - "@stablelib/random": "^1.0.2", - "@stablelib/wipe": "^1.0.1", - "@stablelib/x25519": "^1.0.3", - "@stablelib/xsalsa20": "^1.0.2" - } - }, - "@stablelib/poly1305": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", - "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", - "requires": { - "@stablelib/constant-time": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "requires": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/salsa20": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/salsa20/-/salsa20-1.0.2.tgz", - "integrity": "sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA==", - "requires": { - "@stablelib/binary": "^1.0.1", - "@stablelib/constant-time": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/sha512": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", - "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", - "requires": { - "@stablelib/binary": "^1.0.1", - "@stablelib/hash": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" - }, - "@stablelib/x25519": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", - "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", - "requires": { - "@stablelib/keyagreement": "^1.0.1", - "@stablelib/random": "^1.0.2", - "@stablelib/wipe": "^1.0.1" - } - }, - "@stablelib/xsalsa20": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/xsalsa20/-/xsalsa20-1.0.2.tgz", - "integrity": "sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog==", - "requires": { - "@stablelib/binary": "^1.0.1", - "@stablelib/salsa20": "^1.0.2", - "@stablelib/wipe": "^1.0.1" - } - }, - "@supercharge/promise-pool": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.3.2.tgz", - "integrity": "sha512-f5+C7zv+QQivcUO1FH5lXi7GcuJ3CFuJF3Eg06iArhUs5ma0szCLEQwIY4+VQyh7m/RLVZdzvr4E4ZDnLe9MNg==" - }, - "@taquito/http-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-10.2.1.tgz", - "integrity": "sha512-RZmGxJFllTHC5LuxrPcVQoH/MpDvQehLjE1czSmL2Dz1VZlzI4Q6Ie+pG5nHQODRPqE8ABi/2aHAGGYMQWqKZg==", - "peer": true, - "requires": { - "xhr2-cookies": "^1.1.0" - } - }, - "@taquito/local-forging": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/local-forging/-/local-forging-12.1.1.tgz", - "integrity": "sha512-SUA1YYRIpEGsTy5OfUIgIem0k/QsAzGjDCvf/wl5XV/fVBkP/+GN7uvYoqgJblCmsgtsMBhJFtXgs+D6bjGexg==", - "requires": { - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2" - } - }, - "@taquito/michel-codec": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-10.2.1.tgz", - "integrity": "sha512-VSHELyuiwso1qCpAEZkH7JdDlZdHxTjyvZcBsfnfpbdpCrAUpCB48P4NZOnvZ58SYt9VS1bNAa5GRvQyOnNvMQ==", - "peer": true - }, - "@taquito/michelson-encoder": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-10.2.1.tgz", - "integrity": "sha512-HYCtDGCWtyCgOQjmxYLYw5ftejG0FUfAW1FzZWIW6w2ars1TInSbLNeVRZs+EmbD3L8wOaxaOlgdsMoDnGqM/g==", - "peer": true, - "requires": { - "@taquito/rpc": "^10.2.1", - "@taquito/utils": "^10.2.1", - "bignumber.js": "^9.0.1", - "fast-json-stable-stringify": "^2.1.0" - }, - "dependencies": { - "@taquito/utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-10.2.1.tgz", - "integrity": "sha512-oW/D9irojwjorIV/0yO32Gyr+zSnITkVkOwVmnxge6DYHWC7aqPbdwiDwc4/GewKXNngBDqDEjEEPhkp0ZnvJw==", - "peer": true, - "requires": { - "blakejs": "^1.1.0", - "bs58check": "^2.1.2", - "buffer": "^6.0.3" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "peer": true - } - } - }, - "@taquito/rpc": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-10.2.1.tgz", - "integrity": "sha512-Vg80sGLICkEKGls+7YEd0uFpsp8dwx2kNeGgCbpNROIs0S6Slsd0UfDlaZGlllWeUAKr5r6baexYrTKFuWs/UA==", - "peer": true, - "requires": { - "@taquito/http-utils": "^10.2.1", - "bignumber.js": "^9.0.1", - "lodash": "^4.17.21" - } - }, - "@taquito/signer": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/signer/-/signer-12.1.1.tgz", - "integrity": "sha512-TONxIbLs7bgmB3TTzcTOYzL8pFLZFBujHDHjB5QHJY5DT+lpByjYZHk2Frqjcy3NDvENVLU6uXeCeba2LK8kwA==", - "requires": { - "@stablelib/blake2b": "^1.0.1", - "@stablelib/ed25519": "^1.0.2", - "@stablelib/nacl": "^1.0.3", - "@taquito/taquito": "^12.1.1", - "@taquito/utils": "^12.1.1", - "elliptic": "^6.5.4", - "pbkdf2": "^3.1.2", - "typedarray-to-buffer": "^4.0.0" - }, - "dependencies": { - "@taquito/http-utils": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-12.1.1.tgz", - "integrity": "sha512-Zlp/eTRVjFs0XEIiAhgxkh6s9npF4dO+e/Sm2XWsDmNPoGI2jdXNH0L+NiKJIOkYcu0CXlcgriTeEaYnbeTvcA==", - "requires": { - "axios": "^0.26.0" - } - }, - "@taquito/michel-codec": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-12.1.1.tgz", - "integrity": "sha512-BAig8YyLyRW5kxV/r0S191W+SvYuiTRJpgSp5IsgCDLAOh+d4/xq6IgU3PuGJgokQDstZdTbjpkrgRCnufR8lw==" - }, - "@taquito/michelson-encoder": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-12.1.1.tgz", - "integrity": "sha512-mWcA1DHHlFj7UswJpEmml853x9e0IYHyeiKZYAo7DtizHz0jiUWtptCuEWiPQ4fMOreFbYZ6KVYenoVfQVNrqA==", - "requires": { - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "fast-json-stable-stringify": "^2.1.0" - } - }, - "@taquito/rpc": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-12.1.1.tgz", - "integrity": "sha512-CgAF9kdmKLa/UbmiqApDtncCQGiG7kEOIYis8IIa0JUT9JD1H8WBbSNF/oNh4e0soWUK9BL2qU369RFnxIW+iA==", - "requires": { - "@taquito/http-utils": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2" - } - }, - "@taquito/taquito": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-12.1.1.tgz", - "integrity": "sha512-HvbtClQ7isrDd17X/LEKkPzzeVYA8EMUem3qrkl9qvDO6FpJx/QLbUpYfT2PC0pLUkSrzdLGzmESHAOZhcksaw==", - "requires": { - "@taquito/http-utils": "^12.1.1", - "@taquito/local-forging": "^12.1.1", - "@taquito/michel-codec": "^12.1.1", - "@taquito/michelson-encoder": "^12.1.1", - "@taquito/rpc": "^12.1.1", - "@taquito/utils": "^12.1.1", - "bignumber.js": "^9.0.2", - "rxjs": "^6.6.3" + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" } }, "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "requires": { - "follow-redirects": "^1.14.8" - } - } - } - }, - "@taquito/taquito": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-10.2.1.tgz", - "integrity": "sha512-ay61aKhFQPnYGu5d9jqEvaZE0EzE6tO9MD+5vOu6/NFVThBd7ysOQS1PB0VprL9SupM1NVDFnEJ8GtE8SYgk8g==", - "peer": true, - "requires": { - "@taquito/http-utils": "^10.2.1", - "@taquito/michel-codec": "^10.2.1", - "@taquito/michelson-encoder": "^10.2.1", - "@taquito/rpc": "^10.2.1", - "@taquito/utils": "^10.2.1", - "bignumber.js": "^9.0.1", - "rx-sandbox": "^1.0.4", - "rxjs": "^6.6.3" - }, - "dependencies": { - "@taquito/utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-10.2.1.tgz", - "integrity": "sha512-oW/D9irojwjorIV/0yO32Gyr+zSnITkVkOwVmnxge6DYHWC7aqPbdwiDwc4/GewKXNngBDqDEjEEPhkp0ZnvJw==", - "peer": true, + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", "requires": { - "blakejs": "^1.1.0", - "bs58check": "^2.1.2", - "buffer": "^6.0.3" + "follow-redirects": "^1.14.4" } }, "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "peer": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -6779,49 +5049,45 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "peer": true - } - } - }, - "@taquito/utils": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-12.1.1.tgz", - "integrity": "sha512-GxNSBrA02vwhy56ayWB49VZficB+j2oyhPdlsRb2CguephmyEYnlUaNV27ILa6dPDW+zv6+QWQj6GyqLBRpIlA==", - "requires": { - "@stablelib/blake2b": "^1.0.1", - "@stablelib/ed25519": "^1.0.2", - "@types/bs58check": "^2.1.0", - "blakejs": "^1.1.1", - "bs58check": "^2.1.2", - "buffer": "^6.0.3", - "elliptic": "^6.5.4", - "typedarray-to-buffer": "^4.0.0" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "typedoc": { + "version": "0.20.37", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.20.37.tgz", + "integrity": "sha512-9+qDhdc4X00qTNOtii6QX2z7ndAeWVOso7w3MPSoSJdXlVhpwPfm1yEp4ooKuWA9fiQILR8FKkyjmeqa13hBbw==", + "peer": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "colors": "^1.4.0", + "fs-extra": "^9.1.0", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "lunr": "^2.3.9", + "marked": "~2.0.3", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shelljs": "^0.8.4", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "typedoc-plugin-cname": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-cname/-/typedoc-plugin-cname-1.0.1.tgz", + "integrity": "sha512-f97SS5RzDCVBa7Frg1VketIMAkEl3OTvBs9wM8lLEkJVWCIG2yXnszglA82on39gFwQ1tyq8tiuxRgb4569GpA==", + "requires": {} + }, + "typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "peer": true } } }, - "@temple-wallet/dapp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@temple-wallet/dapp/-/dapp-5.0.2.tgz", - "integrity": "sha512-IIeHTowHXOp7/JnttfzMyCJjFWwhqOauDN7S2vU0GzHkpT5gH6FBXqB3kvZUyPfoxY0PXuXg+HKh++qABx+g9A==", - "requires": { - "nanoid": "^3.1.25" - } + "@supercharge/promise-pool": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.3.2.tgz", + "integrity": "sha512-f5+C7zv+QQivcUO1FH5lXi7GcuJ3CFuJF3Eg06iArhUs5ma0szCLEQwIY4+VQyh7m/RLVZdzvr4E4ZDnLe9MNg==" }, "@tsconfig/node10": { "version": "1.0.9", @@ -6865,14 +5131,6 @@ "@types/node": "*" } }, - "@types/bs58check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/bs58check/-/bs58check-2.1.0.tgz", - "integrity": "sha512-OxsysnJQh82vy9DRbOcw9m2j/WiyqZLn0YBhKxdQ+aCwoHj+tWzyCgpwAkr79IfDXZKxc6h7k89T9pwS78CqTQ==", - "requires": { - "@types/node": "*" - } - }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -6881,30 +5139,6 @@ "@types/node": "*" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "peer": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "peer": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, "@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -6916,12 +5150,6 @@ "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "peer": true - }, "@types/ws": { "version": "7.4.7", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", @@ -6930,21 +5158,6 @@ "@types/node": "*" } }, - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "peer": true - }, "acorn": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", @@ -6994,12 +5207,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -7143,15 +5358,6 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "peer": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -7165,16 +5371,6 @@ "base-x": "^3.0.2" } }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, "buffer": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", @@ -7229,24 +5425,17 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -7254,7 +5443,8 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "colors": { "version": "1.4.0", @@ -7280,37 +5470,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "peer": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7349,11 +5508,6 @@ "ms": "2.1.2" } }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -7381,12 +5535,6 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "peer": true - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -7641,20 +5789,6 @@ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - } - }, "extract-files": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", @@ -7674,7 +5808,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -7710,15 +5845,6 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "peer": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, "find": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", @@ -7862,8 +5988,7 @@ "graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", - "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", - "peer": true + "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==" }, "graphql-request": { "version": "4.3.0", @@ -7911,7 +6036,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-symbols": { "version": "1.0.3", @@ -7926,16 +6052,6 @@ "has-symbols": "^1.0.2" } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -8069,12 +6185,6 @@ "is-extglob": "^2.1.1" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "peer": true - }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -8151,59 +6261,6 @@ } } }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "peer": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "peer": true - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "peer": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "peer": true - }, "jmespath": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", @@ -8230,12 +6287,6 @@ "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==" }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -8374,26 +6425,6 @@ "integrity": "sha512-BJXxkuIfJchcXOJWTT2DOL+yFWifFv2yGYOUzvXg8Qz610QKw+sHCvTMYwA+qWGhlA2uivBezChZ/pBy1tWdkQ==", "peer": true }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "peer": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -8442,11 +6473,6 @@ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8559,42 +6585,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "peer": true }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "peer": true - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "5.0.1", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -8617,22 +6613,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "peer": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -8685,15 +6665,6 @@ "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "rpc-websockets": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz", @@ -8729,31 +6700,6 @@ "queue-microtask": "^1.2.2" } }, - "rx-sandbox": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rx-sandbox/-/rx-sandbox-1.0.4.tgz", - "integrity": "sha512-+/9MHDYNoF9ca/2RR+L2LloXXeQyIR3k/wjK03IicrxxlbkhmKF4ejPiWeafMWDg7otF+pnX5NE/8v/rX6ICJA==", - "peer": true, - "requires": { - "expect": "^26.6.1", - "jest-matcher-utils": "^26.6.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -8769,15 +6715,6 @@ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8815,12 +6752,6 @@ "vscode-textmate": "5.2.0" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "peer": true - }, "snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -8836,23 +6767,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "peer": true }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "peer": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "peer": true - } - } - }, "starknet": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/starknet/-/starknet-4.17.1.tgz", @@ -8871,14 +6785,6 @@ "url-join": "^4.0.1" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8903,6 +6809,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -8929,15 +6836,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "peer": true, - "requires": { - "is-number": "^7.0.0" - } - }, "toml": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", @@ -8954,9 +6852,9 @@ "integrity": "sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==" }, "tron-format-address": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.8.tgz", - "integrity": "sha512-oTtzUM43OZhQiv1p2aOVqbnev6mmJHXQrMpS3nn7zVAI/+ffA/aF+Y/vugHtYotckkromRLPEl/SR1HfJjAYQA==" + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/tron-format-address/-/tron-format-address-0.1.11.tgz", + "integrity": "sha512-Jx2i3R1yXrEMQsfc2jueAI71ivnySzdeva6SiSM/pddwj8TK7PVABSP6s/iYcTRI63GxJEgGMmOJXNNKoBmbQw==" }, "ts-custom-error": { "version": "3.3.1", @@ -9004,11 +6902,6 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "typedarray-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", - "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==" - }, "typedoc-default-themes": { "version": "0.12.10", "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", @@ -9095,11 +6988,6 @@ "which-typed-array": "^1.1.2" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, "uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", @@ -9187,15 +7075,6 @@ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "peer": true, - "requires": { - "cookiejar": "^2.1.1" - } - }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/package.json b/package.json index 2a0cd29dde..20f3e82230 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "license": "ISC", "dependencies": { "@defillama/sdk": "latest", - "@hover-labs/kolibri-js": "^4.1.3", "@project-serum/anchor": "^0.25.0", "@solana/web3.js": "^1.36.0", "@solendprotocol/solend-sdk": "^0.6.2", @@ -29,6 +28,7 @@ "borsh": "^0.7.0", "dotenv": "^8.6.0", "ethers": "^5.6.5", + "graphql": "^16.6.0", "graphql-request": "^4.0.0", "hi-base32": "^0.5.1", "js-sha512": "^0.8.0", diff --git a/projects/01/index.js b/projects/01/index.js index f209a3bc4c..d7c4101cef 100644 --- a/projects/01/index.js +++ b/projects/01/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/solana') async function tvl() { const tokens = [ - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "So11111111111111111111111111111111111111112", - "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + ADDRESSES.solana.USDC, + ADDRESSES.solana.SOL, + ADDRESSES.solana.USDT, "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs", "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", diff --git a/projects/0vix/index.js b/projects/0vix/index.js index 0c735c47ce..a7e7b202d3 100644 --- a/projects/0vix/index.js +++ b/projects/0vix/index.js @@ -1,11 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {compoundExports} = require('../helper/compound') const master0vix = "0x8849f1a0cB6b5D6076aB150546EddEe193754F1C"; const oMATIC = "0xE554E874c9c60E45F1Debd479389C76230ae25A8"; -const matic = "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"; +const matic = ADDRESSES.polygon.WMATIC_2; 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 + polygon_zkevm: compoundExports("0x6EA32f626e3A5c41547235ebBdf861526e11f482", "polygon_zkevm", "0xee1727f5074e747716637e1776b7f7c7133f16b1", ADDRESSES.polygon_zkevm.WETH), +}; + +delete module.exports.polygon.borrowed \ No newline at end of file diff --git a/projects/0x0dex/index.js b/projects/0x0dex/index.js new file mode 100644 index 0000000000..54d77d54b0 --- /dev/null +++ b/projects/0x0dex/index.js @@ -0,0 +1,7 @@ +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs'); +const ETH_POOL_ADDRESS = "0x3d18AD735f949fEbD59BBfcB5864ee0157607616"; + +module.exports = { + start: 1685386800, // 19/05/2023 @ 07:00pm UTC + ethereum: { tvl: sumTokensExport({ owner: ETH_POOL_ADDRESS, tokens: [nullAddress]}) }, +}; \ No newline at end of file diff --git a/projects/0xDAO/index.js b/projects/0xDAO/index.js index 09ba500316..b1b9238de2 100644 --- a/projects/0xDAO/index.js +++ b/projects/0xDAO/index.js @@ -11,7 +11,7 @@ const veAddress = "0xcBd8fEa77c2452255f59743f55A3Ea9d83b3c72b"; const oxSolidAddress = "0xDA0053F0bEfCbcaC208A3f867BB243716734D809"; const sanitize = require("./sanitizeWeb3Response.js"); -const { masterChefExports, standardPoolInfoAbi, addFundsInMasterChef } = require('../helper/masterchef') +const { standardPoolInfoAbi, addFundsInMasterChef } = require('../helper/masterchef') const sdk = require('@defillama/sdk') const { default: BigNumber } = require('bignumber.js') @@ -85,7 +85,7 @@ async function tvl(time, ethBlock, chainBlocks) { // Add pools const addPools = (pools, reservesData) => { - pools.forEach((pool, index) => { + pools.forEach((pool) => { const solidlyPoolAddress = pool.poolData.id; const reserveData = reservesData.find( (data) => data.id === solidlyPoolAddress diff --git a/projects/0x_nodes/index.js b/projects/0x_nodes/index.js index f72096642a..3184233400 100644 --- a/projects/0x_nodes/index.js +++ b/projects/0x_nodes/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { GraphQLClient, gql } = require('graphql-request') const { getBlock } = require('../helper/http') const { staking } = require('../helper/staking') @@ -6,7 +7,7 @@ const sdk = require('@defillama/sdk') const CONFIG = { ethereum: { uri: 'https://api.thegraph.com/subgraphs/name/0xnodes/system11', - strategy_token: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', //wETH + strategy_token: ADDRESSES.ethereum.WETH, //wETH bios_token: '0xAACa86B876ca011844b5798ECA7a67591A9743C8', kernel_addr: '0xcfcff4eb4799cda732e5b27c3a36a9ce82dbabe0' }, @@ -18,13 +19,13 @@ const CONFIG = { }, polygon: { uri: 'https://api.thegraph.com/subgraphs/name/0xnodes/system11-polygon', - strategy_token: '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', //wMATIC + strategy_token: ADDRESSES.ethereum.MATIC, //wMATIC bios_token: '0xe20d2df5041f8ed06976846470f727295cdd4d23', kernel_addr: '0x267720b5d8dcbdb847fc333ccc68cb284648b816' }, fantom: { uri: 'https://api.thegraph.com/subgraphs/name/0xnodes/system11-fantom', - strategy_token: '0x4e15361fd6b4bb609fa63c81a2be19d873717870', //wFTM + strategy_token: ADDRESSES.ethereum.FTM, //wFTM bios_token: '0x75e0eb8e6d92ab832bb11e46c041d06a89ac5f0d', kernel_addr: '0x9db0e84ea53c5a3c000a721bb4295a6053b3de78' }, diff --git a/projects/0xacid/index.js b/projects/0xacid/index.js index b0b314e1f8..ed924429df 100644 --- a/projects/0xacid/index.js +++ b/projects/0xacid/index.js @@ -1,4 +1,4 @@ -const { staking, stakingUnknownPricedLP } = require("../helper/staking"); +const { stakingUnknownPricedLP } = require("../helper/staking"); const ACID_STAKING = "0x00a842038a674616f6a97e62f80111a536778282"; const ACID_TOKEN = "0x29C1EA5ED7af53094b1a79eF60d20641987c867e"; diff --git a/projects/1bch/index.js b/projects/1bch/index.js index adae18cd02..fb161a5bc0 100644 --- a/projects/1bch/index.js +++ b/projects/1bch/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getUniTVL } = require('../helper/unknownTokens') const { stakingPricedLP } = require('../helper/staking') -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; +const WBCH = ADDRESSES.smartbch.WBCH; const rBCH = "0xb4602588E5F1F9653B6F234206c91552E457fAcB"; const FACTORY = "0x3dC4e6aC26df957a908cfE1C0E6019545D08319b"; const MASTERBREEDER = "0xeC0A7496e66a206181034F86B261DDDC1A2c406E"; diff --git a/projects/1beam/utils.js b/projects/1beam/utils.js index 51c15add81..47d6cbbeef 100644 --- a/projects/1beam/utils.js +++ b/projects/1beam/utils.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const TokenMaps = { - '0x765277eebeca2e31912c9946eae1021199b39c61': ['dai', 18], - '0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b': ['usd-coin', 6], - '0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73': ['tether', 6], + [ADDRESSES.shiden.ETH]: ['dai', 18], + [ADDRESSES.telos.USDC]: ['usd-coin', 6], + [ADDRESSES.telos.USDT]: ['tether', 6], '0xa649325aa7c5093d12d6f98eb4378deae68ce23f': ['binance-usd', 18] } diff --git a/projects/1inch.js b/projects/1inch.js index 6abbb5eb1d..a50296c51d 100644 --- a/projects/1inch.js +++ b/projects/1inch.js @@ -1,57 +1,27 @@ const { sumTokens2, } = require('./helper/unwrapLPs') -const sdk = require('@defillama/sdk') -const { createIncrementArray } = require('./helper/utils') +const { getLogs } = require('./helper/cache/getLogs') -const abi = require("./mooniswap/abi.json"); const config = require("./1inch/config"); module.exports = {} -const minIndexes = { - ethereum: 30, - bsc: 136, -} Object.keys(config).forEach(chain => { - const { MooniswapFactory, blacklistedTokens } = config[chain] + const { blacklistedTokens = [], factories } = config[chain] module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => { - const toa = [] - const pools = [] - const length = 10 - let i = minIndexes[chain] - - const { output: data1 } = await sdk.api.abi.multiCall({ - target: MooniswapFactory, - abi: abi.getPool, - calls: createIncrementArray(i * length).map(j => ({ params: j})), - chain, block, - }) - pools.push(...data1.map(i => i.output)) - let currentPools - do { - - const { output: data } = await sdk.api.abi.multiCall({ + tvl: async (_, _b, _2, { api }) => { + const ownerTokens = [] + for (const { MooniswapFactory, fromBlock} of factories) { + const logs = await getLogs({ + api, target: MooniswapFactory, - abi: abi.getPool, - calls: createIncrementArray(length).map(j => ({ params: j + i*length})), - chain, block, + topic: 'Deployed(address,address,address)', + eventAbi: 'event Deployed(address indexed mooniswap, address indexed token1, address indexed token2)', + onlyArgs: true, + fromBlock, }) - currentPools = data.map(i => i.output).filter(i => i) - pools.push(...currentPools) - i++ - } while(currentPools.length === length) - - const calls = pools.map(i => ({ target: i })) - const { output: tokensAll } = await sdk.api.abi.multiCall({ - abi: abi.getTokens, - calls, chain, block, - }) - - tokensAll.forEach(({ output: tokens, input: { target: pool } }) => { - tokens.forEach(i => toa.push([i, pool])) - }) - - return sumTokens2({ chain, block, tokensAndOwners: toa, blacklistedTokens, }) + logs.forEach(i => ownerTokens.push([[i.token1, i.token2], i.mooniswap])) + } + return sumTokens2({ api, ownerTokens, blacklistedTokens, }) } } }) \ No newline at end of file diff --git a/projects/1inch/api.js b/projects/1inch/api.js index 3d708e3675..cb3db3d5ba 100644 --- a/projects/1inch/api.js +++ b/projects/1inch/api.js @@ -1,7 +1 @@ -const { getExports } = require('../helper/heroku-api') - -module.exports = { - timetravel: false, - misrepresentedTokens: true, - ...getExports("1inch", ['bsc', 'ethereum']), -} +module.exports = require('../1inch.js') \ No newline at end of file diff --git a/projects/1inch/apiCache.js b/projects/1inch/apiCache.js index 1f1047fdb2..cb3db3d5ba 100644 --- a/projects/1inch/apiCache.js +++ b/projects/1inch/apiCache.js @@ -1,53 +1 @@ -const abi = require("../mooniswap/abi.json"); -const config = require("./config") -const { sumTokens2, } = require('../helper/unwrapLPs') -const sdk = require('@defillama/sdk') -const { createIncrementArray } = require('../helper/utils') -const { getCache, setCache, } = require("../helper/cache"); - -const project = 'bulky/1inch' - -module.exports = {} -Object.keys(config).forEach(chain => { - const { MooniswapFactory, blacklistedTokens } = config[chain] - module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => { - const cache = await getCache(project, chain) || { pools: {} } - if (!cache.pools) cache.pools = {} - const toa = [] - const pools = [] - const length = 5 - - let i = cache.lastI || Math.floor(Object.keys(cache.pools).length / length) - let currentPools - do { - const { output: data } = await sdk.api.abi.multiCall({ - target: MooniswapFactory, - abi: abi.getPool, - calls: createIncrementArray(length).map(j => ({ params: j + i * length })), - chain, block, - }) - currentPools = data.map(i => i.output).filter(i => i) - pools.push(...currentPools) - i++ - } while (currentPools.length === length) - - cache.lastI = i-1 - const calls = pools.map(i => ({ target: i })) - const { output: tokensAll } = await sdk.api.abi.multiCall({ - abi: abi.getTokens, - calls, chain, block, - }) - - tokensAll.forEach(({ output: tokens, input: { target: pool } }) => { - cache.pools[pool.toLowerCase()] = tokens - }) - - for (const [pool, tokens] of Object.entries(cache.pools)) - tokens.forEach(i => toa.push([i, pool])) - - await setCache(project, chain, cache) - return sumTokens2({ chain, block, tokensAndOwners: toa, blacklistedTokens, }) - } - } -}) \ No newline at end of file +module.exports = require('../1inch.js') \ No newline at end of file diff --git a/projects/1inch/config.js b/projects/1inch/config.js index d8027e2a11..119b5b3a29 100644 --- a/projects/1inch/config.js +++ b/projects/1inch/config.js @@ -1,27 +1,43 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { ethereum: { - MooniswapFactory: '0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643', blacklistedTokens: ['0x58730ae0faa10d73b0cddb5e7b87c3594f7a20cb', '0x77777feddddffc19ff86db637967013e6c6a116c',], + factories: [{ + MooniswapFactory: '0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643', + fromBlock: 11607841, + }] }, + // polygon: { + // factories: [{ + // MooniswapFactory: '0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643', + // fromBlock: 36040621, + // }] + // }, bsc: { - MooniswapFactory: '0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd64', + factories: [{ + MooniswapFactory: '0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd64', + fromBlock: 4994614, + }, { + MooniswapFactory: '0xbaf9a5d4b0052359326a6cdab54babaa3a3a9643', + fromBlock: 10588911, + }], blacklistedTokens: [ - '0x6b175474e89094c44da98b954eedeac495271d0f', - '0xae7ab96520de3a18e5e111b5eaab095312d7fe84', - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.WETH, '0x220b71671b649c03714da9c621285943f3cbcdc6', '0x875773784af8135ea0ef43b5a374aad105c5d39e', '0x1b40183efb4dd766f11bda7a7c3ad8982e998421', '0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f', - '0xdac17f958d2ee523a2206206994597c13d831ec7', + ADDRESSES.ethereum.USDT, '0xaea46a60368a7bd060eec7df8cba43b7ef41ad85', '0x888888888889c00c67689029d7856aac1065ec11', '0xe796d6ca1ceb1b022ece5296226bf784110031cd', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + ADDRESSES.ethereum.USDC, '0xbb9284484cb9a2bc7950a1276edba2f6358ea677', - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', + ADDRESSES.ethereum.AAVE, '0x9dcae4a9e65bf7925eb7809142f848d3cf8e96ac', '0x3fa729b4548becbad4eab6ef18413470e6d5324c', '0xcd62b1c403fa761baadfc74c525ce2b51780b184', diff --git a/projects/1pulse/index.js b/projects/1pulse/index.js new file mode 100644 index 0000000000..11948494ac --- /dev/null +++ b/projects/1pulse/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + pulse: { + tvl: getUniTVL({ + fetchBalances: true, + useDefaultCoreAssets: true, + factory: "0x17C335D22456c798D5A3D021583eDAcbD4Ef6444", + }), + }, +}; diff --git a/projects/1swap/index.js b/projects/1swap/index.js index 22d711250f..83a9a0a020 100644 --- a/projects/1swap/index.js +++ b/projects/1swap/index.js @@ -1,6 +1,5 @@ -const sdk = require('@defillama/sdk'); -const { default: BigNumber } = require('bignumber.js'); const abiMoonriver = require('./abi-moonriver.json'); +const { sumTokens2 } = require('../helper/unwrapLPs') const Contracts = { moonriver: { @@ -12,95 +11,23 @@ const Contracts = { '1s3pavaxusd': '0x7179F2C31763f395082489588534F4abb3Dd4Be6', '1s3pwanusd': '0x02A105939Dc0C47cb6bD04f320dAa77Bd9E3Bb0D', }, - ignoredLps: ['0x17da5445f3cd02b3f1cd820e6de55983fe80cf85'] , + ignoredLps: ['0x17da5445f3cd02b3f1cd820e6de55983fe80cf85'], } }; -const poolTvl = async (chain, poolAddress, block) => { - const [balances, tokens] = await Promise.all([ - sdk.api.abi.call({ - target: poolAddress, - abi: abiMoonriver.getTokenBalances, - chain: chain, - block, - }), - sdk.api.abi.call({ - target: poolAddress, - abi: abiMoonriver.getTokens, - chain: chain, - block, - }), - ]); - const sum = {}; - - tokens.output.forEach((token, i) => { - if ( - Contracts[chain].ignoredLps && - Contracts[chain].ignoredLps.includes(token.toLowerCase()) - ) { - return; - } - const [symbol, decimals] = getTokenId(token.toLowerCase()); - sum[symbol] = new BigNumber(balances.output[i]).div(new BigNumber(10).pow(decimals)).toNumber() - }); - - return sum; +const tvl = async (timestamp, ethBlock, chainBlocks, { api }) => { + const ownerTokens = [] + const poolTvl = async (pool) => { + ownerTokens.push([await api.call({ target: pool, abi: abiMoonriver.getTokens, }), pool]) + }; + const pools = Object.values(Contracts.moonriver.pools) + await Promise.all(pools.map(poolTvl)) + return sumTokens2({ api, ownerTokens, blacklistedTokens: pools}) }; -const moonriverTvl = async (timestamp, ethBlock, chainBlocks) => { - let block = chainBlocks['moonriver']; - const tvl = {}; - - for (let address of Object.values(Contracts.moonriver.pools)) { - const balances = await poolTvl( - 'moonriver', - address, - block, - ); - - Object.entries(balances).forEach(([token, value]) => { - sdk.util.sumSingleBalance(tvl, token, value); - }); - } - - return tvl; -}; - - -function getTokenId(address) { - switch(address) { - case '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d': - return ['usd-coin', 6] - case '0xb44a9b6905af7c801311e8f4e76932ee959c663c': - return ['tether', 6] - case '0x80a16016cc4a2e6a2caca8a4a498b1699ff0f844': - return ['dai', 18] - case '0x5d9ab5522c64e1f6ef5e3627eccc093f56167818': - return ['binance-usd', 18] - case '0x0cae51e1032e8461f4806e26332c030e34de3adb': - return ['magic-internet-money', 18] - case '0x965f84d915a9efa2dd81b653e3ae736555d945f4': - return ['frax', 18]; - case '0xd8b99eae34afdf1a9bfa5770066404ee4468d0f2': // AVAX bridge - return ['usd-coin', 6]; - case '0xf97c8556af29089d5d1627096958187b11f1915c': // AVAX bridge - return ['tether', 6]; - case '0x26dfff76d9123a1c79279abc29b676c48a8bd77e': // AVAX bridge - return ['dai', 18]; - case '0x748134b5f553f2bcbd78c6826de99a70274bdeb3': // WANCHAIN bridge - return ['usd-coin', 6]; - case '0xe936caa7f6d9f5c9e907111fcaf7c351c184cda7': // WANCHAIN bridge - return ['tether', 6]; - default: - return false; - } -} - - - module.exports = { moonriver: { - tvl: moonriverTvl, + tvl, }, }; diff --git a/projects/2doge/index.js b/projects/2doge/index.js index 84a90fd344..10470022eb 100644 --- a/projects/2doge/index.js +++ b/projects/2doge/index.js @@ -1,6 +1,6 @@ const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); -const { staking, stakingPricedLP } = require("../helper/staking"); +const { stakingPricedLP } = require("../helper/staking"); const tombTokenAddress = "0xDD057bCcB72982753266A903Feda154608e54468"; const tshareTokenAddress = "0x0c55339a139acd3a8ba07a9abad345b05c4bf804"; @@ -65,4 +65,7 @@ module.exports = { staking: stakingPricedLP(masonryAddress, tshareTokenAddress, "fantom", "0xB254973e067AF44eB4D506e7117A33C4F3F77783", "fantom"), treasury }, + hallmarks: [ + [1646179200, "Rug Pull"] + ] }; diff --git a/projects/ABCDEFX/index.js b/projects/ABCDEFX/index.js index c73ee2eb5c..6e31454c9d 100644 --- a/projects/ABCDEFX/index.js +++ b/projects/ABCDEFX/index.js @@ -7,5 +7,6 @@ module.exports = { }; chains.forEach(chain => { - module.exports[chain] = { tvl: getUniTVL({ factory: '0x01F43D2A7F4554468f77e06757e707150e39130c', useDefaultCoreAssets: true, }) } + module.exports[chain] = { tvl: getUniTVL({ factory: '0x01F43D2A7F4554468f77e06757e707150e39130c', useDefaultCoreAssets: true, hasStablePools: true, stablePoolSymbol: 'ABcDeFx.LP' }) } }) +module.exports.echelon.tvl = () => ({}) \ No newline at end of file diff --git a/projects/ArchimedesFinance/index.js b/projects/ArchimedesFinance/index.js index 2fc7fc61c1..04e532b281 100644 --- a/projects/ArchimedesFinance/index.js +++ b/projects/ArchimedesFinance/index.js @@ -1,4 +1,3 @@ -const sdk = require('@defillama/sdk'); const curvePoolAbi = require('./curvePoolAbi.json'); const archimedesVaultAbi = require('./archimedesVaultAbi.json') const ERC20_TOKEN_3CRV = "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490"; @@ -8,26 +7,14 @@ const ARCHIMEDES_VAULT_OUSD = "0x4c12c57C37Ff008450A2597e810B51B2BbA0383A"; const ERC20_TOKEN_OUSD = "0x2A8e1E676Ec238d8A992307B495b45B3fEAa5e86"; async function tvl(_, _1, _2, { api }) { - const balances = {}; - // 3CRV liquidity in LVUSD-3CRV curve pool - const { output: poolLiquidity3CRV } = await sdk.api.abi.call({ - target: POOL_CONTRACT_LVUSD_3CRV, - abi: curvePoolAbi.balances, - params: POOL_INDEX_3CRV - }); - - await sdk.util.sumSingleBalance(balances, ERC20_TOKEN_3CRV, poolLiquidity3CRV); + const poolLiquidity3CRV = await api.call({ target: POOL_CONTRACT_LVUSD_3CRV, abi: curvePoolAbi.balances, params: POOL_INDEX_3CRV }); // Total OUSD held in vault - const { output: totalAssetsOUSD } = await sdk.api.abi.call({ - target: ARCHIMEDES_VAULT_OUSD, - abi: archimedesVaultAbi.totalAssets - }); - - await sdk.util.sumSingleBalance(balances, ERC20_TOKEN_OUSD, totalAssetsOUSD); + const totalAssetsOUSD = await api.call({ target: ARCHIMEDES_VAULT_OUSD, abi: archimedesVaultAbi.totalAssets }); - return balances; + api.add(ERC20_TOKEN_3CRV, poolLiquidity3CRV) + api.add(ERC20_TOKEN_OUSD, totalAssetsOUSD) } module.exports = { diff --git a/projects/AxiaProtocol/index.js b/projects/AxiaProtocol/index.js index bdbf64279b..92d392856b 100644 --- a/projects/AxiaProtocol/index.js +++ b/projects/AxiaProtocol/index.js @@ -17,10 +17,10 @@ const oracleFundLPEth = '0xbf11db4e63c72c5dffde0f5831d667817c9e9ad5' async function tvl(_, _b, _cb, { api, }) { const balances = {} - + await Promise.all([ - unwrapBalancerToken({ ...api, owner: defiFundEth, balancerToken: defiFundLPEth, balances, isBPool: true, }), - unwrapBalancerToken({ ...api, owner: oracleFundEth, balancerToken: oracleFundLPEth, balances, isBPool: true, }), + unwrapBalancerToken({ api, owner: defiFundEth, balancerToken: defiFundLPEth, balances, isBPool: true, isV2: false, }), + unwrapBalancerToken({ api, owner: oracleFundEth, balancerToken: oracleFundLPEth, balances, isBPool: true, isV2: false, }), ]) return balances diff --git a/projects/BankOfCronos/index.js b/projects/BankOfCronos/index.js index 9359ab82dc..59704192af 100644 --- a/projects/BankOfCronos/index.js +++ b/projects/BankOfCronos/index.js @@ -1,13 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const BOC_TREASURY_ADDRESS = "0xBacF28BF21B374459C738289559EF89978D08102"; const CUSD_ADDRESS = "0x26043Aaa4D982BeEd7750e2D424547F5D76951d4"; -const USDC_ADDRESS = "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59"; +const USDC_ADDRESS = ADDRESSES.cronos.USDC; module.exports = { start: 6949784, cronos: { - tvl: sumTokensExport({ owner: BOC_TREASURY_ADDRESS, tokens: [CUSD_ADDRESS, USDC_ADDRESS]}), + // tvl: sumTokensExport({ owner: BOC_TREASURY_ADDRESS, tokens: [CUSD_ADDRESS, USDC_ADDRESS]}), + tvl: () => 0 }, methodology: "CDP collateral value + treasury mv", diff --git a/projects/Caketomb/index.js b/projects/Caketomb/index.js index a52b60e15b..d95217c0cc 100644 --- a/projects/Caketomb/index.js +++ b/projects/Caketomb/index.js @@ -1,8 +1,6 @@ -const sdk = require("@defillama/sdk"); const {pool2Exports} = require("../helper/pool2"); const { staking } = require("../helper/staking"); -const token = "0xAB4F3fC9831dBC77424269B9255fC1A082AC9840"; const shares = "0x9f8349C33B942b6CBb15426E02b5Bbb77fAeB64f"; const shareRewardPool = "0x02361bAd5b50AfDDea2d8c4359a8C9595445a90D"; const boardroom = "0xcE2912101EF05034Eb2FA818dd6e57Ab09c8Ca73"; diff --git a/projects/ChirpFinance/index.js b/projects/ChirpFinance/index.js new file mode 100644 index 0000000000..9b14b8cc4a --- /dev/null +++ b/projects/ChirpFinance/index.js @@ -0,0 +1,10 @@ +const { masterchefExports } = require("../helper/unknownTokens"); + +module.exports = masterchefExports({ + chain: "pulse", + masterchef: "0x8d1e3458dA9E8a685732322D435178E790486651", + nativeTokens: ["0xCa66B54a8A4AD9a231DD70d3605D1ff6aE95d427"], + useDefaultCoreAssets: true, + poolInfoABI: "function poolInfo(uint256) view returns (address)", + getToken: (i) => i, +}); diff --git a/projects/ColaFactory/index.js b/projects/ColaFactory/index.js new file mode 100644 index 0000000000..e34b1fc206 --- /dev/null +++ b/projects/ColaFactory/index.js @@ -0,0 +1,11 @@ +const { masterchefExports } = require("../helper/unknownTokens"); + +module.exports = masterchefExports({ + chain: "pulse", + masterchef: "0x5Fe423A22d4bFD1caFd6044042f4269Fc930F8dC", + nativeTokens: ["0x02Dff78fDeDaF86D9dfbe9B3132aA3Ea72Ed1680"], + useDefaultCoreAssets: true, + poolInfoABI: "function poolInfo(uint256) view returns (address)", + getToken: (i) => i, + blacklistedTokens: ['0x9bd778df9b803a2df1fbe94ca9b5765cdb299a23'], +}); diff --git a/projects/CollectifDAO/index.js b/projects/CollectifDAO/index.js new file mode 100644 index 0000000000..c54761837e --- /dev/null +++ b/projects/CollectifDAO/index.js @@ -0,0 +1,18 @@ +const { nullAddress } = require("../helper/tokenMapping"); + +const COLLECTIF_LIQUID_STAKING_POOL_CONTRACT = "0xd0437765D1Dc0e2fA14E97d290F135eFdf1a8a9A"; // pool address +const totalAssetsABI = "function totalAssets() public view returns (uint256)"; + +module.exports = { + methodology: + "Collectif DAO is a non-custodial liquid staking protocol on Filecoin. It allows users stake FIL tokens to the pool and get back clFIL token, which is a native yield bearing liquid staking asset on Filecoin. This TVL calculation returns total amount of assets backing clFIL, that includes buffered capital in the pool and pledged capital to the Filecoin Storage Providers (miners)", + filecoin: { + tvl: async (_, _1, _2, { api }) => { + const totalAssets = await api.call({ abi: totalAssetsABI, target: COLLECTIF_LIQUID_STAKING_POOL_CONTRACT }); + + const tvl = totalAssets.toString(); + + api.add(nullAddress, tvl) + }, + }, +}; diff --git a/projects/CthulhuFinance/index.js b/projects/CthulhuFinance/index.js index 4ca6bb5802..7d293df098 100644 --- a/projects/CthulhuFinance/index.js +++ b/projects/CthulhuFinance/index.js @@ -12,6 +12,9 @@ function vaultTvl(vaults) { } module.exports = { + hallmarks: [ + [1679788800, "Rug Pull"] + ], optimism: { tvl: vaultTvl([ "0xF6a6C4573099E6F6b9D8E1186a2C089B4d0fDf91", diff --git a/projects/DerpDEX/index.js b/projects/DerpDEX/index.js new file mode 100644 index 0000000000..7c09f1f6ab --- /dev/null +++ b/projects/DerpDEX/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + era: { + factory: "0x52a1865eb6903bc777a02ae93159105015ca1517", + fromBlock: 7790768, + }, +}); diff --git a/projects/E3/index.js b/projects/E3/index.js new file mode 100644 index 0000000000..473dc90087 --- /dev/null +++ b/projects/E3/index.js @@ -0,0 +1,36 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const factories = { + fantom: '0x8597dB3ba8dE6BAAdEDa8cBa4dAC653E24a0e57B', + arbitrum: '0x8597dB3ba8dE6BAAdEDa8cBa4dAC653E24a0e57B' + ///zkevm: tbd +} +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: 'Only the tokens inside E3 Liquidity Pools are counted in our TVL.', +} + +Object.keys(factories).forEach(chain => { + module.exports[chain] = { tvl } +}) diff --git a/projects/El-Dorado-Exchange/index.js b/projects/El-Dorado-Exchange/index.js index 64754e97ea..6ed3b8f509 100644 --- a/projects/El-Dorado-Exchange/index.js +++ b/projects/El-Dorado-Exchange/index.js @@ -7,13 +7,28 @@ module.exports = { tvl: sdk.util.sumChainTvls([ gmxExports({ vault: '0x7f90C8De425e2E21F6d152e881713DE5Fe37dEAB', }), gmxExports({ vault: '0x2c7077cF9bd07C3BC45B4E5b8C27f8B95c6550B3', }), + async (_, _1, _2, { api }) => { + const vault = '0xF1D7e3f06aF6EE68E22baFd37E6a67b1757c35a9' + const tokens = await api.call({ abi: 'address[]:fundingTokenList', target: vault}) + return sumTokens2({ api, owner: vault, tokens, }) + } ]) }, arbitrum: { - tvl: async (_, _1, _2, { api }) => { - const vault = '0xfc36be177868b05f966e57bfc01617501b1f6926' - const tokens = await api.call({ abi: 'address[]:fundingTokenList', target: vault}) - return sumTokens2({ api, owner: vault, tokens, }) - } + tvl: sdk.util.sumChainTvls([ + async (_, _1, _2, { api }) => { + const vault = '0xfc36be177868b05f966e57bfc01617501b1f6926' + const tokens = await api.call({ abi: 'address[]:fundingTokenList', target: vault}) + return sumTokens2({ api, owner: vault, tokens, }) + }, + async (_, _1, _2, { api }) => { + const vault = '0x24b6137A5fe9d058baf654bb73aB857F57DF8BB4' + const tokens = await api.call({ abi: 'address[]:fundingTokenList', target: vault}) + return sumTokens2({ api, owner: vault, tokens, }) + }, + ]) }, + hallmarks: [ + [Math.floor(new Date('2023-05-30')/1e3), 'Protocol was hacked!'], + ], } diff --git a/projects/FlashLiquidity/index.js b/projects/FlashLiquidity/index.js new file mode 100644 index 0000000000..d503e336d9 --- /dev/null +++ b/projects/FlashLiquidity/index.js @@ -0,0 +1,23 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +const factory = "0x6e553d5f028bD747a27E138FA3109570081A23aE" + +module.exports = { + misrepresentedTokens: true, + polygon: { + tvl: getUniTVL({ + factory: factory, + useDefaultCoreAssets: true, + fetchBalances: true, + }), + }, + polygon_zkevm: { + tvl: getUniTVL({ + factory: factory, + useDefaultCoreAssets: true, + fetchBalances: true, + }), + }, + methodology: + "TVL comes from the DEX liquidity pools" +}; \ No newline at end of file diff --git a/projects/Guru/index.js b/projects/Guru/index.js index d668d75d0e..3391dc8a2c 100644 --- a/projects/Guru/index.js +++ b/projects/Guru/index.js @@ -28,3 +28,5 @@ Object.entries(tvlGuru).forEach(([chain, target]) => { tvl: async (_, _b, _c, { api, }) => ({ tether: ((await api.call({ target, abi: ITVL.tvl }))) / 1e18 }), } }) + +module.exports.echelon.tvl = () => ({}) \ No newline at end of file diff --git a/projects/KungFuu-Finance/index.js b/projects/KungFuu-Finance/index.js index f28f58110d..87f256fc68 100644 --- a/projects/KungFuu-Finance/index.js +++ b/projects/KungFuu-Finance/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/unwrapLPs') const { getChainTransform } = require('../helper/portedTokens') const sdk = require("@defillama/sdk") -const wFTM = '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83' +const wFTM = ADDRESSES.fantom.WFTM const kngfuu_token = "0x89b61Ab033584918103698953870F07D6db412A3".toLowerCase() async function tvl(ts, _block, { fantom: block }) { @@ -12,7 +13,7 @@ async function tvl(ts, _block, { fantom: block }) { const owners = ["0x29187b10a04B269Cf067AE013B3ab58d4affaC03", "0xaaef45e31e2d2865a4722c1591ba4cd8f6e83bad", "0xfeAFAF0610fe2c73bB6345080056066aE109B31F"] const treasuryTokens = [ wFTM, // WFTM - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", // USDC + ADDRESSES.fantom.USDC, // USDC "0xf704f5ac5edf152168e07e6f5f108366911250ac", // WFTM/KNGFUU, needs to account only half of it ] diff --git a/projects/KyborgExchange/index.js b/projects/KyborgExchange/index.js new file mode 100644 index 0000000000..bf26c8fa31 --- /dev/null +++ b/projects/KyborgExchange/index.js @@ -0,0 +1,23 @@ +const { getLogs } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const config = { + arbitrum: { factory: '0x25620d76654caC426229C85bE8eAEB010Ea25c8F', fromBlock: 89067435 }, +} + +module.exports = { + hallmarks: [ + [1684108800, "Rug Pull"] + ], + methodology: `Counts the tokens balances of the KyborgHub contract`, +}; + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ api, target: factory, onlyArgs: true, eventAbi: 'event PoolCreated (address indexed token0, address indexed token1, bytes32 indexed poolId)', topics: ['0xec5dc6309c83a50f60f4a1fae9422b2c406da78c579b9b12b92d033db37c7194'], fromBlock, }) + return sumTokens2({ api, owner: factory, tokens: logs.map(i => [i.token0, i.token1]).flat()}) + } + } +}) \ No newline at end of file diff --git a/projects/Lockless/index.js b/projects/Lockless/index.js index 1fccefa0b2..1640ef60f0 100644 --- a/projects/Lockless/index.js +++ b/projects/Lockless/index.js @@ -1,19 +1,19 @@ -const swkava = '0x9d9682577CA889c882412056669bd936894663fd' -const swech = '0x86e4D91800c03e803d4c8FA3293d1C7d612A7300' +const swkava = '0x9d9682577CA889c882412056669bd936894663fd' +const swech = '0x86e4D91800c03e803d4c8FA3293d1C7d612A7300' -async function tvl(timestamp, ethBlock, {kava: block}, { api }) { +async function tvl(timestamp, ethBlock, { kava: block }, { api }) { const pooledCoin = await api.call({ - target: api.chain === 'kava' ? swkava: swech, + target: api.chain === 'kava' ? swkava : swech, abi: "uint256:totalSupply", }) return { - [api.chain === 'kava' ? 'kava' : 'echelon']: pooledCoin/1e18, + [api.chain === 'kava' ? 'kava' : 'echelon']: pooledCoin / 1e18, } } module.exports = { kava: { tvl }, - echelon: { tvl }, + echelon: { tvl: () => ({}), }, methodology: "Any & Each 1 SW-Token can only ever be minted by permanent locking of 1 Native token. Hence, the totalSupply() method is used to aggregate the amounts of underlying assets, with their prices fed by the DefiLlama SDK.", } diff --git a/projects/MFIL/index.js b/projects/MFIL/index.js new file mode 100644 index 0000000000..c071cd8ff0 --- /dev/null +++ b/projects/MFIL/index.js @@ -0,0 +1,18 @@ +const MFILPOOLCONTRACT = '0x8aF827CDa3b7Eee9720496A30595D7Ee89A27ee2'; +const MFILREGULARPOOLCONTRACT = '0xD4f7c1A09ed5f50a3eC2F1e9fcF8B1bc2d1d3d70' +const ADDRESSES = require('../helper/coreAssets.json') + +async function mfilTvl(_, _1, _2, { api }) { + const mfilPoolStakeMfil = await api.call({ + target: MFILPOOLCONTRACT, + abi: "erc20:totalSupply", + }) + + api.add(ADDRESSES.null, mfilPoolStakeMfil) +} + +module.exports = { + filecoin: { + tvl: mfilTvl + }, +} diff --git a/projects/MantisSwap/index.js b/projects/MantisSwap/index.js index 0af6523226..439b3c14a5 100644 --- a/projects/MantisSwap/index.js +++ b/projects/MantisSwap/index.js @@ -1,32 +1,26 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); -const tokenDict = { - "0x62Ba5e1AB1fa304687f132f67E35bFC5247166aD": [ - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - ], -}; - -async function getTotalAssets(pool, api) { - const tokens = tokenDict[pool]; - const owners = await api.multiCall({ - abi: "function tokenLPs(address) view returns (address)", - calls: tokens, - target: pool, - }); - return tokens.map((val, i) => [val, owners[i]]); +const config = { + polygon: { vaults: ['0x62Ba5e1AB1fa304687f132f67E35bFC5247166aD'] }, + polygon_zkevm: { vaults: ['0x12d41b6DF938C739F00c392575e3FD9292d98215'] }, } -async function tvl(timestamp, ethereumBlock, chainBlocks, { api }) { - const totalAssets = ( - await Promise.all(Object.keys(tokenDict).map((i) => getTotalAssets(i, api))) - ).flat(); - return sumTokens2({ api, tokensAndOwners: totalAssets }); -} +const MAX_LP_TOKENS = 3 -module.exports = { - polygon: { - tvl, - }, -}; +Object.keys(config).forEach(chain => { + const { vaults } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const calls = vaults.map(vault => { + let res = [] + for (let i = 0; i < MAX_LP_TOKENS; i++) + res.push({ target: vault, params: i }) + return res + }).flat() + let lpVaults = await api.multiCall({ abi: 'function lpList(uint256) view returns (address)', calls, permitFailure: true }) + lpVaults = lpVaults.filter(v => v) + const tokens = await api.multiCall({ abi: 'address:underlier', calls: lpVaults }) + return sumTokens2({ api, tokensAndOwners2: [tokens, lpVaults] }) + } + } +}) diff --git a/projects/MellowProtocol/index.js b/projects/MellowProtocol/index.js index 26ba2a429c..fced703a11 100644 --- a/projects/MellowProtocol/index.js +++ b/projects/MellowProtocol/index.js @@ -16,10 +16,6 @@ module.exports = { doublecounted: true, }; -const ignored = [ - '0x728fD7ec3cBB50D809735879318d04D8CbEb7157' -] - Object.keys(config).forEach(chain => { const { registry, fromBlock, } = config[chain] module.exports[chain] = { @@ -46,9 +42,9 @@ Object.keys(config).forEach(chain => { extraKey: 'TokenLocked' }) tokenLockedLogs.forEach(i => delete vaultKeys[i.nft]) - let vaults = Object.values(vaultKeys).filter(i => !ignored.includes(i)) + let vaults = Object.values(vaultKeys) const tokens = await api.multiCall({ abi: 'function vaultTokens() view returns (address[])', calls: vaults }) - const bals = await api.multiCall({ abi: 'function tvl() view returns (uint256[] minTokenAmounts, uint256[] maxTokenAmounts)', calls: vaults }) + const bals = await api.multiCall({ abi: 'function tvl() view returns (uint256[] minTokenAmounts, uint256[] maxTokenAmounts)', calls: vaults, permitFailure: true }) tokens.forEach((tokens, i) => { if (!bals[i]) return; let balsInner = bals[i].minTokenAmounts diff --git a/projects/MineFi/index.js b/projects/MineFi/index.js new file mode 100644 index 0000000000..d853f5d55e --- /dev/null +++ b/projects/MineFi/index.js @@ -0,0 +1,24 @@ +const sdk = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json') +const MINEFI_CONTRACT = "0xeCa50369cb0cDBaE173C9c81c1B48212adc4b501"; + +async function tvl(_, _1, _2, { api }) { + + const collateralBalance = await api.call({ + abi: 'function getTvl() external view returns (uint256)', + target: MINEFI_CONTRACT, + }); + + api.add(ADDRESSES.null,collateralBalance) +} + + + +module.exports = { + timetravel: false, + misrepresentedTokens: false, + methodology: 'counts the number of pledge filecoins in the minefi contract', + filecoin: { + tvl + } +}; \ No newline at end of file diff --git a/projects/OCTOplace/index.js b/projects/OCTOplace/index.js index 31d7080edf..dd09f3c7b9 100644 --- a/projects/OCTOplace/index.js +++ b/projects/OCTOplace/index.js @@ -1,10 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokensExport } = require("../helper/unwrapLPs"); -const contract = "0x61F91266F6abEA61447E00EB781A3c38a3D1b925"; -const KAVA = "0x0000000000000000000000000000000000000000"; -const USDC = "0xfa9343c3897324496a05fc75abed6bac29f8a40f"; +const contractKAVA = "0x61F91266F6abEA61447E00EB781A3c38a3D1b925"; +const contractTHETA = "0x6e4c614da85DD861e08f84706742239dBA892Df1"; +const KAVA_TFUEL = ADDRESSES.null; // Native coin +const USDC = ADDRESSES.telos.ETH; module.exports = { - kava: { tvl: sumTokensExport({ owner: contract, tokens: [KAVA, USDC] }) }, + kava: { tvl: sumTokensExport({ owner: contractKAVA, tokens: [KAVA_TFUEL, USDC] }) }, + theta: { tvl: sumTokensExport({ owner: contractTHETA, tokens: [KAVA_TFUEL] }) } }; diff --git a/projects/OT/index.js b/projects/OT/index.js index e33c8e4984..5cb3735351 100644 --- a/projects/OT/index.js +++ b/projects/OT/index.js @@ -1,9 +1,11 @@ -const swapContract = '0x84c18204c30da662562b7a2c79397C9E05f942f0'; +const swapContractV1 = '0x84c18204c30da662562b7a2c79397C9E05f942f0'; +const swapContractV2 = '0x2a98158166BE71D21Dd97e248ba670211Df9a73C'; const { sumTokens2 } = require('../helper/unwrapLPs') async function tvl(timestamp, ethBlock, chainBlocks, { api }) { - const tokens = await api.call({ target: swapContract, abi: 'function getPoolTokenList() external view returns (address[])', }); - return sumTokens2({ api, tokens, owner: swapContract, }) + const v1tokens = await api.call({ target: swapContractV1, abi: 'function getPoolTokenList() external view returns (address[])', }); + const v2tokens = await api.call({ target: swapContractV2, abi: 'function getPoolTokenList() external view returns (address[])', }); + return sumTokens2({ api,tokens:[...v1tokens,...v2tokens],owners:[swapContractV1,swapContractV2]}) } module.exports = { diff --git a/projects/Paraluni/index.js b/projects/Paraluni/index.js index 8bd2c7f962..fabadc573d 100644 --- a/projects/Paraluni/index.js +++ b/projects/Paraluni/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const paraChef = "0x77341bF31472E9c896f36F4a448fdf573A0D9B60"; const prehackChef = '0x633fa755a83b015cccdc451f82c57ea0bd32b4b4' @@ -7,11 +8,11 @@ module.exports = { tvl: sumTokensExport({ owner: paraChef, tokens: [ - '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', - '0x2170ed0880ac9a755fd29b2688956bd959f933f8', - '0x55d398326f99059ff775485246999027b3197955', - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', - '0xe9e7cea3dedca5984780bafc599bd69add087d56', + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.BUSD, '0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd', '0x965f527d9159dce6288a2219db51fc6eef120dd1', '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82', diff --git a/projects/PlsPrint/index.js b/projects/PlsPrint/index.js new file mode 100644 index 0000000000..f703f28ade --- /dev/null +++ b/projects/PlsPrint/index.js @@ -0,0 +1,18 @@ +const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); + +const contract = "0x750684313510d680D172FD5734e49De3cE91925D"; + +async function tvl(time, ethBlock, { bsc: block }) { + return sumTokens2({ + tokens: [nullAddress], + owner: contract, + block, + chain: "pulse", + }); +} + +module.exports = { + pulse: { + tvl, + }, +}; diff --git a/projects/SharpeLabs/index.js b/projects/SharpeLabs/index.js index 6f829f46b0..43097a1a4a 100644 --- a/projects/SharpeLabs/index.js +++ b/projects/SharpeLabs/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const StEthVaultContract = '0xfc85db895e070017ab9c84cb65b911d56b729ee9'; @@ -12,7 +13,7 @@ async function tvl(_, _1, _2, { api }) { }); return { - 'ethereum:0x0000000000000000000000000000000000000000': EthBalance + ['ethereum:' + ADDRESSES.null]: EthBalance }; } diff --git a/projects/SmarDex/index.js b/projects/SmarDex/index.js index b357f3895f..e7b845dd07 100644 --- a/projects/SmarDex/index.js +++ b/projects/SmarDex/index.js @@ -1,9 +1,18 @@ -const { getUniTVL, } = require('../helper/unknownTokens'); -const { staking } = require('../helper/staking') +const { getUniTVL } = require("../helper/unknownTokens"); +const { stakings } = require("../helper/staking"); -module.exports = { - ethereum: { - tvl: getUniTVL({ factory: '0x7753F36E711B66a0350a753aba9F5651BAE76A1D', abis: { getReserves: 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)'} }), - staking: staking('0xB940D63c2deD1184BbdE059AcC7fEE93654F02bf', '0x5de8ab7e27f6e7a1fff3e5b337584aa43961beef') - }, +const config = { + ethereum: '0x7753F36E711B66a0350a753aba9F5651BAE76A1D', + bsc: '0xA8EF6FEa013034E62E2C4A9Ec1CDb059fE23Af33', + polygon: '0x9A1e1681f6D59Ca051776410465AfAda6384398f', + arbitrum: '0x41A00e3FbE7F479A99bA6822704d9c5dEB611F22', } + +Object.keys(config).forEach(chain => { + const factory = config[chain] + module.exports[chain] = { + tvl: getUniTVL({ factory, fetchBalances: true, }) + } +}) + +module.exports.ethereum.staking = stakings(["0xB940D63c2deD1184BbdE059AcC7fEE93654F02bf", "0x80497049b005Fd236591c3CD431DBD6E06eB1A31",], "0x5de8ab7e27f6e7a1fff3e5b337584aa43961beef") \ No newline at end of file diff --git a/projects/Solily/index.js b/projects/Solily/index.js index 809ae8c77b..d72e86d38b 100644 --- a/projects/Solily/index.js +++ b/projects/Solily/index.js @@ -1,6 +1,9 @@ module.exports = { + hallmarks: [ + [1655251200, "Rug Pull"] + ], timetravel: false, solana: { tvl: () => 0, diff --git a/projects/TokenPocket/index.js b/projects/TokenPocket/index.js index 40ea911aec..97225d8b1d 100644 --- a/projects/TokenPocket/index.js +++ b/projects/TokenPocket/index.js @@ -1,17 +1,8 @@ const axios = require("axios"); async function tvl() { - const tvlData = ( - await axios.get( - "https://preserver.mytokenpocket.vip/v1/pledge/method_any_v2", - { - headers: { - api: "/eth2/v2/partner/dashboard", - }, - } - ) - ) - return { ethereum: tvlData.data.data.staking.total_amount} + const tvlData = await axios.get("https://preserver.mytokenpocket.vip/v1/pledge/global") + return { ethereum: tvlData.data.data.data.staking_total} } module.exports = { diff --git a/projects/YieldPulseFinance/index.js b/projects/YieldPulseFinance/index.js new file mode 100644 index 0000000000..98946809a2 --- /dev/null +++ b/projects/YieldPulseFinance/index.js @@ -0,0 +1,10 @@ +const { masterchefExports } = require("../helper/unknownTokens"); + +module.exports = masterchefExports({ + chain: "pulse", + masterchef: "0xc9649cd27cFe8D74a47D711e04fEF3AbC4B56bae", + nativeTokens: ["0xDd40a166b43c0b95F1248c9A5AFFD7A166f1526a"], + useDefaultCoreAssets: true, + poolInfoABI: "function poolInfo(uint256) view returns (address)", + getToken: (i) => i, +}); diff --git a/projects/YogurtFinance/index.js b/projects/YogurtFinance/index.js new file mode 100644 index 0000000000..6f2b74dba3 --- /dev/null +++ b/projects/YogurtFinance/index.js @@ -0,0 +1,10 @@ +const { masterchefExports } = require("../helper/unknownTokens"); + +module.exports = masterchefExports({ + chain: "pulse", + masterchef: "0xca3E704Bd09B979170D76d34880c7A72fda51B63", + nativeTokens: ["0xece11C704F38FF38520667AeCDd7f53eA82F60F5"], + useDefaultCoreAssets: true, + poolInfoABI: "function poolInfo(uint256) view returns (address)", + getToken: (i) => i, +}); diff --git a/projects/Zolidly/index.js b/projects/Zolidly/index.js new file mode 100644 index 0000000000..ebb6c6a558 --- /dev/null +++ b/projects/Zolidly/index.js @@ -0,0 +1,16 @@ +const { getUniTVL } = require('../helper/unknownTokens'); + +module.exports = { + misrepresentedTokens: true, + hallmarks: [ + [1684713600, "Rug Pull"] + ], + era: { + tvl: getUniTVL({ + factory: '0x6E1315819908Eaa036405f405c033cC2BfFBFc75', + useDefaultCoreAssets: true, + hasStablePools: true, + }) + }, + methodology: "Counts liquidity in pools", +}; \ No newline at end of file diff --git a/projects/ZukeSwap/index.js b/projects/ZukeSwap/index.js index af95e1bd6f..6d16f07a58 100644 --- a/projects/ZukeSwap/index.js +++ b/projects/ZukeSwap/index.js @@ -1,6 +1,9 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + hallmarks: [ + [1680307200, "Rug Pull"] + ], misrepresentedTokens: true, loop: { tvl: getUniTVL({ diff --git a/projects/aave/index.js b/projects/aave/index.js index ee279d600d..98f526686b 100644 --- a/projects/aave/index.js +++ b/projects/aave/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getV2Reserves, getTvl, getBorrowed, aaveChainTvl } = require('../helper/aave'); const { staking } = require('../helper/staking'); @@ -28,10 +29,10 @@ function ethereum(borrowed) { } } -const aaveTokenAddress = "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9"; +const aaveTokenAddress = ADDRESSES.ethereum.AAVE; -async function stakingBalancerTvl(timestamp, block) { - return unwrapBalancerToken({ block, owner: '0xa1116930326d21fb917d5a27f1e9943a9595fb47', balancerToken: '0x41a08648c3766f9f9d85598ff102a08f4ef84f84' }) +async function stakingBalancerTvl(timestamp, block, _, { api }) { + return unwrapBalancerToken({ api, owner: '0xa1116930326d21fb917d5a27f1e9943a9595fb47', balancerToken: '0x41a08648c3766f9f9d85598ff102a08f4ef84f84', isV2: false, }) } const aaveStakingContract = "0x4da27a545c0c5b758a6ba100e3a049001de870f5"; diff --git a/projects/aave/v1.js b/projects/aave/v1.js index a22a65cfd6..1c00170dcc 100644 --- a/projects/aave/v1.js +++ b/projects/aave/v1.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require("bignumber.js"); const abi = require('../helper/abis/aave.json'); @@ -57,7 +58,7 @@ async function depositMultiMarketV1Tvl(balances, lendingPoolCore, block, chain, return balances; } -function multiMarketV1Tvl(balances, lendingPoolCore, block, borrowed, chain="ethereum", eth = "0x0000000000000000000000000000000000000000") { +function multiMarketV1Tvl(balances, lendingPoolCore, block, borrowed, chain="ethereum", eth = ADDRESSES.null) { return (borrowed?multiMarketV1TvlBorrowed:depositMultiMarketV1Tvl)(balances, lendingPoolCore, block, chain, eth) } @@ -65,7 +66,7 @@ async function singleAssetV1Market(balances, lendingPoolCore, block, borrowed, c return multiMarketV1Tvl(balances, lendingPoolCore, block, borrowed, chain, eth); } -async function uniswapV1Market(balances, uniswapLendingPoolCore, block, borrowed, eth = "0x0000000000000000000000000000000000000000"){ +async function uniswapV1Market(balances, uniswapLendingPoolCore, block, borrowed, eth = ADDRESSES.null){ const uniswapMarketTvlBalances = {} await multiMarketV1Tvl( uniswapMarketTvlBalances, @@ -97,7 +98,7 @@ async function uniswapV1Market(balances, uniswapLendingPoolCore, block, borrowed const uniswapV1TokenBalance = await sdk.api.abi.multiCall({ abi: 'erc20:balanceOf', calls: uniswapV1Tokens.output.map(t => ({ - target: t.output || nullAddress, + target: t.output, params: t.input.target })), permitFailure: true, diff --git a/projects/aave/v3.js b/projects/aave/v3.js index c0f9c5f277..ec94b29bcd 100644 --- a/projects/aave/v3.js +++ b/projects/aave/v3.js @@ -6,6 +6,8 @@ function v3(chain) { let params = v3params if (chain === 'ethereum') params = ['0xbaA999AC55EAce41CcAE355c77809e68Bb345170', undefined, ['0x7B4EB56E7CD4b454BA8ff71E4518426369a138a3']] + else if (chain === 'metis') + params = ['0x9E7B73ffD9D2026F3ff4212c29E209E09C8A91F5', undefined, ['0x99411FC17Ad1B56f49719E3850B2CDcc0f9bBFd8']] const section = borrowed => aaveChainTvl(chain, ...params, borrowed, true); return { tvl: section(false), @@ -16,7 +18,7 @@ function v3(chain) { module.exports = { methodology: `Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending`, avax: v3("avax"), - ...["optimism", "fantom", "harmony", "arbitrum", "polygon", "ethereum", ].reduce((t, c) => ({ ...t, [c]: v3(c) }), {}), + ...["optimism", "fantom", "harmony", "arbitrum", "polygon", "ethereum", "metis"].reduce((t, c) => ({ ...t, [c]: v3(c) }), {}), hallmarks: [ [1659630089, "Start OP Rewards"], [1650471689, "Start AVAX Rewards"] diff --git a/projects/aavegotchi/index.js b/projects/aavegotchi/index.js index 38847ace3c..8b7b6879ea 100644 --- a/projects/aavegotchi/index.js +++ b/projects/aavegotchi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { transformPolygonAddress } = require("../helper/portedTokens"); @@ -8,7 +9,7 @@ const { getBlock } = require('../helper/http') const vaultContractETH = "0xFFE6280ae4E864D9aF836B562359FD828EcE8020"; const tokensETH = [ "0x3F382DbD960E3a9bbCeaE22651E88158d2791550", // GHST - "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI + ADDRESSES.ethereum.DAI, // DAI ]; const vaultContractsPolygon = [ diff --git a/projects/aboard-exchange/index.js b/projects/aboard-exchange/index.js new file mode 100644 index 0000000000..21472aee31 --- /dev/null +++ b/projects/aboard-exchange/index.js @@ -0,0 +1,42 @@ +//20230428 initial release: simple and clear +//20230606 update: add chain: zkSync Era +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs'); + +//arbitrum +const ownerArbitrum = '0x7a08b29A7Ad4A19A5ECa0c82F5F082872488D135'; // contract address +const tokensArbitrum = [ + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.null, // ETH + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.arbitrum.WBTC, // WBTC +]; +//avalanche +const ownerAvalanche = '0xd8b0D18faE7eA29F2AD95d01FFb479E0021a9A5e'; // contract address +const tokensAvalanche = [ + ADDRESSES.avax.USDC, // USDC + ADDRESSES.null, // AVAX + ADDRESSES.avax.BTC_b, // BTC.b + ADDRESSES.avax.WETH_e, // WETH.e + ADDRESSES.avax.USDt, // USDt +]; +//zkSync Era +const ownerEra = '0xa1795B95C543428AFf866dA613e43895457bf1C1'; // contract address +const tokensEra = [ + ADDRESSES.era.USDC, // USDC + ADDRESSES.null, // ETH +]; + +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 }) + }, + era: { + tvl: sumTokensExport({ owner:ownerEra, tokens:tokensEra }) + } +}; diff --git a/projects/acoconut/index.js b/projects/acoconut/index.js index 0e8584094e..65fdc8aeac 100644 --- a/projects/acoconut/index.js +++ b/projects/acoconut/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const singlePlusAbi = require('./abis/singlePlus'); const { sumTokens2 } = require('../helper/unwrapLPs') const tokensInacBTC = [ - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + ADDRESSES.ethereum.WBTC, '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D' ] @@ -16,7 +17,7 @@ const bscSingleTokens = [ '0x02827D495B2bBe37e1C021eB91BCdCc92cD3b604', //autoBTC+ ] -const btcb = 'bsc:0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c' +const btcb = 'bsc:' + ADDRESSES.bsc.BTCB async function eth(timestamp, block) { return sumTokens2({ block, owner: acBTCTokenHolder, tokens: tokensInacBTC}) diff --git a/projects/across/index.js b/projects/across/index.js index 91bb773e81..0544de93ad 100644 --- a/projects/across/index.js +++ b/projects/across/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getLogs } = require('../helper/cache/getLogs') @@ -6,13 +7,13 @@ const hubPoolAddress = "0xc186fA914353c44b2E33eBE05f21846F1048bEda" let pools = [ // bridge pools - ["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "0x256c8919ce1ab0e33974cf6aa9c71561ef3017b6"], - ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x7355efc63ae731f584380a9838292c7046c1e433"], + [ADDRESSES.ethereum.USDC, "0x256c8919ce1ab0e33974cf6aa9c71561ef3017b6"], + [ADDRESSES.ethereum.WETH, "0x7355efc63ae731f584380a9838292c7046c1e433"], ["0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", "0xdfe0ec39291e3b60aca122908f86809c9ee64e90"], ["0x3472A5A71965499acd81997a54BBA8D852C6E53d", "0x43298f9f91a4545df64748e78a2c777c580573d6"], - ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", "0x02fbb64517e1c6ed69a6faa3abf37db0482f1152"], + [ADDRESSES.ethereum.WBTC, "0x02fbb64517e1c6ed69a6faa3abf37db0482f1152"], ["0x42bBFa2e77757C645eeaAd1655E0911a7553Efbc", "0x4841572daa1f8e4ce0f62570877c2d0cc18c9535"], - ["0x6B175474E89094C44Da98b954EedeAC495271d0F", "0x43f133fe6fdfa17c417695c476447dc2a449ba5b"], + [ADDRESSES.ethereum.DAI, "0x43f133fe6fdfa17c417695c476447dc2a449ba5b"], ] async function tvl(_, block, _1, { api }) { diff --git a/projects/ad-astra/index.js b/projects/ad-astra/index.js index 44aea610e9..5eb4b8e040 100644 --- a/projects/ad-astra/index.js +++ b/projects/ad-astra/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/sumTokens') module.exports={ ethereum:{ tvl: sumTokensExport({ owner: '0x92a26975433a61cf1134802586aa669bab8b69f3', - tokens: ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '0xdac17f958d2ee523a2206206994597c13d831ec7', '0x4fabb145d64652a948d72533023f6e7a623c7c53', '0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c', ], + tokens: [ADDRESSES.ethereum.USDC, ADDRESSES.ethereum.USDT, ADDRESSES.ethereum.BUSD, '0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c', ], }) } } \ No newline at end of file diff --git a/projects/adamantfinance/index.js b/projects/adamantfinance/index.js index 5dcdfc3f4d..20226bf624 100644 --- a/projects/adamantfinance/index.js +++ b/projects/adamantfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { stakings } = require("../helper/staking"); @@ -38,7 +39,7 @@ const stakingContracts_Arbitrum = [ ]; const lpAddresses_arbitrum = []; -const ARBY = "0x09ad12552ec45f82bE90B38dFE7b06332A680864" +const ARBY = ADDRESSES.arbitrum.ARBY /*** Cronos Addresses ***/ const stakingContracts_cronos = [ @@ -46,7 +47,7 @@ const stakingContracts_cronos = [ "0xD4bcCf04a7CA546D3cfC46205AA7C58EB98c7495", "0x323663B759567BAf744C182634585F7164c3c442", ]; -const CADDY = "0x09ad12552ec45f82be90b38dfe7b06332a680864"; +const CADDY = ADDRESSES.arbitrum.ARBY; const vaultAddresses_cronos = [ "0x3a9645ee664DCE6529Af678aaB4fE3AD9d68323f", diff --git a/projects/adenafinance/index.js b/projects/adenafinance/index.js index a8ce5a34a9..a7080d6579 100644 --- a/projects/adenafinance/index.js +++ b/projects/adenafinance/index.js @@ -3,6 +3,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, harmony: { - tvl: getUniTVL({ factory: '0x44485473431fAF6EFA11D346d1057182d2A0A290', chain: 'harmony', useDefaultCoreAssets: true }), + tvl: getUniTVL({ factory: '0x44485473431fAF6EFA11D346d1057182d2A0A290', useDefaultCoreAssets: true }), } } diff --git a/projects/aerie/index.js b/projects/aerie/index.js new file mode 100644 index 0000000000..2740ae3083 --- /dev/null +++ b/projects/aerie/index.js @@ -0,0 +1,27 @@ +const { sumUnknownTokens } = require('../helper/unknownTokens') + +async function tvl(_, _b, _cb, { api, }) { + const Indexer = '0x0336dfb02ba66ce75f5cc7898c3eafeddc493daf' + let pools = await api.call({ abi: abi.getAllSaaSPools, target: Indexer }) + const isEnabled = await api.multiCall({ abi: abi.poolEnabled, calls: pools }) + pools = pools.filter((_, i) => isEnabled[i]) + const tokens = await api.multiCall({ abi: abi.stakedTokenAddress, calls: pools}) + const poolInfo = await api.multiCall({ abi: abi.pool, calls: pools}) + const bals = poolInfo.map(i => i.totalTokensStaked) + api.addTokens(tokens, bals) + return sumUnknownTokens({ api, useDefaultCoreAssets: true, lps: ['0x412cb411be14ec0ee87c2823f830d33dd37aa8f8']}) +} + +module.exports = { + ethereum: { + tvl: () => ({}), + staking: tvl, + }, +} + +const abi = { + "getAllSaaSPools": "address[]:getAllSaaSPools", + "stakedTokenAddress": "address:stakedTokenAddress", + "pool": "function pool() view returns (address creator, address tokenOwner, uint256 poolTotalSupply, uint256 poolRemainingSupply, uint256 totalTokensStaked, uint256 creationBlock, uint256 perBlockNum, uint256 lockedUntilDate, uint256 lastRewardBlock, uint256 accERC20PerShare, uint256 stakeTimeLockSec, bool isStakedNft, bytes32 website)", + "poolEnabled": "bool:poolEnabled", +} \ No newline at end of file diff --git a/projects/aevo-xyz/index.js b/projects/aevo-xyz/index.js index ea0807498c..3d2e14f5a6 100644 --- a/projects/aevo-xyz/index.js +++ b/projects/aevo-xyz/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); module.exports = { ethereum: { - tvl: sumTokensExport({ owner: '0x4082C9647c098a6493fb499EaE63b5ce3259c574', tokens: ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48']}) + tvl: sumTokensExport({ owner: '0x4082C9647c098a6493fb499EaE63b5ce3259c574', tokens: [ADDRESSES.ethereum.USDC]}) } } \ No newline at end of file diff --git a/projects/affine-defi/index.js b/projects/affine-defi/index.js new file mode 100644 index 0000000000..605963845c --- /dev/null +++ b/projects/affine-defi/index.js @@ -0,0 +1,29 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(_, _b, _cb, { api, }) { + const vaults = ['0x829363736a5A9080e05549Db6d1271f070a7e224'] + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) + api.addTokens(tokens, bals) + const ownerTokens = [ + [[ADDRESSES.polygon.WETH_1, ADDRESSES.polygon.WBTC], '0x1F9b1057cd93fb2d07d18810903B791b56acc2E1'] + ] + return sumTokens2({ api, ownerTokens }) +} + +async function ethTvl(_, _b, _cb, { api, }) { + const ethBaskets = [ + '0x61A18EE9d6d51F838c7e50dFD750629Fd141E944', '0x78Bb94Feab383ccEd39766a7d6CF31dED177Ad0c', '0x72D51B2233c5feA8a702FDd0E51B0adE95638f2c' + ] + const tokens = await api.multiCall({ abi: 'address:asset', calls: ethBaskets }) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: ethBaskets }) + api.addTokens(tokens, bals) +} + +module.exports = { + doublecounted: true, + methodology: 'Counts the tokens in the Affine baskets', + polygon: { tvl }, + ethereum: { tvl: ethTvl } +} diff --git a/projects/aftermath-fi/index.js b/projects/aftermath-fi/index.js new file mode 100644 index 0000000000..e2b4bbb4dc --- /dev/null +++ b/projects/aftermath-fi/index.js @@ -0,0 +1,23 @@ +const sui = require("../helper/chain/sui"); + +const MAINNET_PROTOCOL_ID = + "0x0625dc2cd40aee3998a1d6620de8892964c15066e0a285d8b573910ed4c75d50"; + +async function tvl(_, _1, _2, { api }) { + const pools = await sui.queryEvents({ eventType: '0xefe170ec0be4d762196bedecd7a065816576198a6527c99282a2551aaa7da38c::events::CreatedPoolEvent', transform: i => i.pool_id}) + const poolData = await sui.getObjects(pools) + + for (const { fields: { type_names: tokens, normalized_balances: bals, decimal_scalars } } of poolData) { + bals.forEach((v, i) => { + if (/af_lp::AF_LP/.test(tokens[i])) return; + api.add('0x' + tokens[i], v / decimal_scalars[i]) + }) + } +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, +}; diff --git a/projects/agarthadao/index.js b/projects/agarthadao/index.js index 113b72a73e..011f735822 100644 --- a/projects/agarthadao/index.js +++ b/projects/agarthadao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {ohmTvl} = require("../helper/ohm"); const clavis = "0xa5b0f5ef809fd04c9d4320211c711cb34ef812dd"; @@ -6,7 +7,7 @@ const stakingContract = "0x7e4939ca7847ae3ff9501b27470dcd0a69f54fa6"; const treasury = "0x2c5bb99df3d43efd98ff1d7aa34d4207c83638e4" const treasuryTokens = [ ["0x130966628846bfd36ff31a822705796e8cb8c18d", false],// MIM - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], // WAVAX + [ADDRESSES.avax.WAVAX, false], // WAVAX ["0x72f95Da8d7a9b405191cAE0Fc31711d575044eFb", true], // CLAVIS-MIM JLP ["0x7d5b42704bb34c5bbbcd3be4f5762a663b38a2df", true] // CLAVIS-WAVAX JLP ] diff --git a/projects/agilitylsd/index.js b/projects/agilitylsd/index.js index 94ad5733c1..55392b9089 100644 --- a/projects/agilitylsd/index.js +++ b/projects/agilitylsd/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); const { getLogs } = require("../helper/cache/getLogs"); const { staking } = require("../helper/staking"); const FACTORY_CONTRACT = "0xe4a51ec59233ba1f62b71f84554622a532b584ed"; -const WETH_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH_ADDRESS = ADDRESSES.ethereum.WETH; const AGI_ETH_LP_ADDRESS = "0x498c00E1ccC2AFFf80F6Cc6144EAEB95c46cc3B5"; const AGI_ETH_STAKING_POOL = "0xC8187048f7Ab0db0774b674fEf3f4F4285A01bF4"; diff --git a/projects/agni-fi/index.js b/projects/agni-fi/index.js new file mode 100644 index 0000000000..8a4a44049a --- /dev/null +++ b/projects/agni-fi/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + mantle: { factory: "0x25780dc8Fc3cfBD75F33bFDAB65e969b603b2035", fromBlock: 35714, }, +}); \ No newline at end of file diff --git a/projects/agora/index.js b/projects/agora/index.js index 45e49512c4..540a04f77c 100644 --- a/projects/agora/index.js +++ b/projects/agora/index.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { compoundExports } = require("../helper/compound"); const { getUniTVL } = require('../helper/unknownTokens') const factory = '0x3c4063B964B1b3bF229315fCc4df61a694B0aE84' -const metis = '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000' +const metis = ADDRESSES.metis.Metis const agora = '0x0Ed0Ca6872073E02cd3aE005BaF04bA43BE947fA' const whitelist = [ agora, // AGORA - '0xEA32A96608495e54156Ae48931A7c20f0dcc1a21', // USDC - '0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC', // USDT - '0x420000000000000000000000000000000000000A', // WETH + ADDRESSES.metis.m_USDC, // USDC + ADDRESSES.metis.m_USDT, // USDT + ADDRESSES.metis.WETH, // WETH '0x94e56c0c59433599ba857a9a7243b2826745cf91', //kWBTC '0x6d11f074131e3fc61c983cce538f5d0ca3553c0f', //kUSDC '0xcfd482dce13ca1d27834d381af1b570e9e6c6810', //kmetis @@ -60,6 +61,6 @@ module.exports = { methodology: `As in Compound Finance, TVL counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are counted as "Borrowed" TVL and can be toggled towards the regular TVL.`, metis: { tvl: sdk.util.sumChainTvls([chainTvl, agoraTvl, agoraPlusTvl, agoraFarmTvl, agoraStakeTvl]), - borrowed: sdk.util.sumChainTvls([agoraBorrowed, agoraPlusBorrowed, agoraFarmBorrowed, agoraStakeBorrowed]), + borrowed: ()=>({}), }, }; diff --git a/projects/ajira-pay-finance/index.js b/projects/ajira-pay-finance/index.js new file mode 100644 index 0000000000..6d7674cb81 --- /dev/null +++ b/projects/ajira-pay-finance/index.js @@ -0,0 +1,35 @@ +const { staking } = require("../helper/staking"); + +const AJP_CONTRACT_ADDRESS = "0x9DBC0Ad09184226313FbDe094E7c3DD75c94f997" +const KAVA_STAKING_CONTRACT = "0xD1cAf204721A02016993796663EDb00E6Ad9dac4" +const BSC_STAKING_CONTRACT = '0xEbD5a0bAED48747ea10feEB61a09a93550Fddcef' + +const ammLpData = { + arbitrum: { + poolAddress: '0x0C36cB133CFF5D36313eFF3FF1761F9d391DF8Fc', + }, + bsc: { + poolAddress: '0x808A234665c7684A5e0Ed5e6BB551dBA1cc9d3e4', + }, + polygon: { + poolAddress: '0x2aDA82d11f6bC2bd357E7F3A6674983C372a50A3', + } +} + +module.exports = { + methodology: "Ajira Pay Finance TVL Calculations are based on AJP Staking pool and Liquidity pool balances respectively on the AMMs", + kava: { + staking: staking(KAVA_STAKING_CONTRACT, AJP_CONTRACT_ADDRESS), + tvl: () => ({}) + }, + bsc: { + staking: staking(BSC_STAKING_CONTRACT, AJP_CONTRACT_ADDRESS), + tvl: () => ({}) + }, + polygon: { + tvl: () => ({}), + }, + arbitrum: { + tvl: () => ({}), + } +}; diff --git a/projects/ajna/index.js b/projects/ajna/index.js new file mode 100644 index 0000000000..70070aee1f --- /dev/null +++ b/projects/ajna/index.js @@ -0,0 +1,25 @@ +const sdk = require("@defillama/sdk") +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(_, _b, _cb, { api, }) { + const pools = await api.call({ abi: 'address[]:getDeployedPoolsList', target: '0xe6f4d9711121e5304b30ac2aae57e3b085ad3c4d'}) + const collaterals = await api.multiCall({ abi: 'address:collateralAddress', calls: pools}) + const borrows = await api.multiCall({ abi: 'address:quoteTokenAddress', calls: pools}) + const ownerTokens = pools.map((v, i) => [[collaterals[i], borrows[i]], v]) + return sumTokens2({ ownerTokens, api}) +} + +async function borrowed(_, _b, _cb, { api, }) { + const pools = await api.call({ abi: 'address[]:getDeployedPoolsList', target: '0xe6f4d9711121e5304b30ac2aae57e3b085ad3c4d'}) + const debts = await api.multiCall({ abi: 'function debtInfo() external view returns (uint256, uint256, uint256, uint256)', calls: pools}) + const borrows = await api.multiCall({ abi: 'address:quoteTokenAddress', calls: pools}) + const borrowScale = await api.multiCall({ abi: 'uint:quoteTokenScale', calls: pools}) + const balances = {} + pools.map((v, i) => sdk.util.sumSingleBalance(balances, borrows[i], debts[i][0]/borrowScale[i])) + return balances + } + +module.exports = { + misrepresentedTokens: true, + ethereum: { tvl, borrowed } +} \ No newline at end of file diff --git a/projects/akiba/index.js b/projects/akiba/index.js index 545d902a94..64aaf634f8 100644 --- a/projects/akiba/index.js +++ b/projects/akiba/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unknownTokens') const Contracts = { kava: { - wkava: "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b", + wkava: ADDRESSES.kava.WKAVA, akiba: "0x8f5af8d2E06c976970752b5596BE05Cd518Adcdd", bank: "0x0CA1088C075E5C9447D5C07984aCCc48c816D01D", // Pool multiFeeDistribution: "0xa41045953C7fa32CCea9132997b2E7460db5ae3F", // Staking diff --git a/projects/alchemix/contracts.json b/projects/alchemix/contracts.json index ca657b6644..2ae2252739 100644 --- a/projects/alchemix/contracts.json +++ b/projects/alchemix/contracts.json @@ -69,5 +69,25 @@ "token": "0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF", "holder": "0xAB8e74017a8Cc7c15FFcCd726603790d26d7DeCa" } + }, + "cvxLPpools": { + "alUSD​+FRAXBP": { + "poolAddress": "0x26598e3E511ADFadefD70ab2C3475Ff741741104", + "holder": "0x06378717d86b8cd2dba58c87383da1eda92d3495", + "tokenAddress": "0xb30da2376f63de30b42dc055c93fa474f31330a5", + "alToken": "0xBC6DA0FE9aD5f3b0d58160288917AA56653660E9" + }, + "alUSD-3CRV": { + "poolAddress": "0x02E2151D4F351881017ABdF2DD2b51150841d5B3", + "holder": "0x9735f7d3ea56b454b24ffd74c58e9bd85cfad31b", + "tokenAddress": "0x43b4fdfd4ff969587185cdb6f0bd875c5fc83f8c", + "alToken": "0xBC6DA0FE9aD5f3b0d58160288917AA56653660E9" + }, + "alETH-ETH": { + "poolAddress": "0x48Bc302d8295FeA1f8c3e7F57D4dDC9981FEE410", + "holder": "0xe761bf731a06fe8259fee05897b2687d56933110", + "tokenAddress": "0xc4c319e2d4d66cca4464c0c2b32c9bd23ebe784e", + "alToken": "0x0100546F2cD4C9D97f798fFC9755E47865FF7Ee6" + } } } \ No newline at end of file diff --git a/projects/alchemix/index.js b/projects/alchemix/index.js index 4ba3d89acf..9b6c096de2 100644 --- a/projects/alchemix/index.js +++ b/projects/alchemix/index.js @@ -1,36 +1,45 @@ -const { getChainTransform } = require('../helper/portedTokens.js'); -const { sumTokensSharedOwners } = require('../helper/unwrapLPs'); +const { sumTokens2 } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking.js"); -const contracts = require('./contracts'); +const contracts = require("./contracts"); function tvl(chain) { - return async (timestamp, block, chainBlocks) => { - const balances = {}; - const transform = await getChainTransform(chain); + return async (timestamp, block, chainBlocks, { api }) => { + const tokens = Object.values(contracts[chain].underlyingTokens).concat(Object.values(contracts[chain].yvTokens)) + await sumTokens2({ tokens, api, owners: Object.values(contracts[chain].tokenHolders) }) + if (api.chain !== 'ethereum') return - await sumTokensSharedOwners( - balances, - Object.values(contracts[chain].underlyingTokens) - .concat(Object.values(contracts[chain].yvTokens)), - Object.values(contracts[chain].tokenHolders), - chainBlocks[chain], - chain, - transform - ); - - return balances; + await Promise.all( + Object.values(contracts.cvxLPpools).map(async ({ poolAddress, holder, tokenAddress, alToken }) => { + const lpTokenBalance = await api.call({ target: poolAddress, abi: "erc20:balanceOf", params: holder, }) + const supply = await api.call({ target: tokenAddress, abi: "erc20:totalSupply", }) + const ratio = lpTokenBalance / supply + if (+ratio === 0) return; + const tokenBalances = await api.multiCall({ target: tokenAddress, abi: 'function balances(uint256) view returns (uint256)', calls: [0, 1] }) + const tokens = await api.multiCall({ target: tokenAddress, abi: 'function coins(uint256) view returns (address)', calls: [0, 1] }) + alToken = alToken.toLowerCase() + tokens.forEach((token, i) => { + if (token.toLowerCase() !== alToken) { + api.add(token, tokenBalances[i] * ratio) + } + }) + }) + ); }; } module.exports = { + doublecounted: true, ethereum: { - tvl: tvl('ethereum'), - staking: staking(contracts.ethereum.staking.holder, contracts.ethereum.staking.token) + tvl: tvl("ethereum"), + staking: staking( + contracts.ethereum.staking.holder, + contracts.ethereum.staking.token + ), }, fantom: { - tvl: tvl('fantom') + tvl: tvl("fantom"), }, optimism: { - tvl: tvl('optimism') - } -}; \ No newline at end of file + tvl: tvl("optimism"), + }, +}; diff --git a/projects/algomint/index.js b/projects/algomint/index.js index c9e8041442..b38256a915 100644 --- a/projects/algomint/index.js +++ b/projects/algomint/index.js @@ -1,15 +1,62 @@ +const { tokens } = require("../helper/chain/algorand"); + +const { lpTokenPostion } = require("./utils"); + +//Algomint Basket contracts where the liquidty is held const goUsdBasketAddress = "B7GJK5XWIYRM7Y5ZBSLHYGQFOWMBRNCITBL37U6HMXETTA37BRJVLF7XRM"; -const { sumTokens, tokens } = require("../helper/chain/algorand"); +const goBtcBasketAddress = + "OYJM6HVQESRPVFMMGPXA6AL6T4JP5U25J6IQ7UKA6I3NC7VRSH6H3F7KDI"; +const goEthBasketAddress = + "72BMR3TYPOLPNUEUL6FTY5ZE4SQQ7KZ2PE5QRTA4Z2M76IEFA72A24NXGQ"; + +//The following pool ID's are the PACT LP pool contracts +const usdcPoolId = 885102197; +const usdtPoolId = 1081978547; +const wBtcPoolId = 1058934586; +const wEthPoolId = 1058935016; async function tvl() { - const balances = await sumTokens({ - owner: goUsdBasketAddress, - blacklistedTokens: [tokens.goUsd], - blacklistOnLpAsWell: true, - tinymanLps: [[tokens.usdcGoUsdLp]], - }); - return balances; + //Returns the position of the LP token. + const usdcPostion = await lpTokenPostion( + tokens.usdcGoUsdLp, + usdcPoolId, + goUsdBasketAddress + ); + + const usdtPosition = await lpTokenPostion( + tokens.usdtGoUsdLp, + usdtPoolId, + goUsdBasketAddress + ); + + const wBtcPosition = await lpTokenPostion( + tokens.wBtcGoBtcLp, + wBtcPoolId, + goBtcBasketAddress + ); + + const wEthPosition = await lpTokenPostion( + tokens.wEthGoEthLp, + wEthPoolId, + goEthBasketAddress + ); + + //positionA is USDC in the LP + const usdcTvlvalue = usdcPostion.positionA / 10 ** 6; + //positionA is USDT in the LP + const usdtTvlValue = usdtPosition.positionA / 10 ** 6; + //positionB is wBTC in the LP + + const wBtcTvlValue = wBtcPosition.positionB / 10 ** 8; + //positionB is wEth in the LP + const wEthTvlValue = wEthPosition.positionB / 10 ** 8; + return { + bitcoin: wBtcTvlValue, + ethereum: wEthTvlValue, + tether: usdtTvlValue, + usd: usdcTvlvalue, + }; } module.exports = { diff --git a/projects/algomint/utils.js b/projects/algomint/utils.js new file mode 100644 index 0000000000..a5e01cb650 --- /dev/null +++ b/projects/algomint/utils.js @@ -0,0 +1,37 @@ +const { + getAppGlobalState, + getAccountInfo, +} = require("../helper/chain/algorand"); + +async function lpTokenPostion(asaId, appId, basketAddress) { + const poolGlobalState = await getAppGlobalState(appId); + + //A & B represent the two tokens in the LP pool, Token A is always the ASA with the lowest ID + + const balanceA = poolGlobalState.A; + const balanceB = poolGlobalState.B; + const lpCirculatingSupply = poolGlobalState.L; + + const ratioA = balanceA / lpCirculatingSupply; + const ratioB = balanceB / lpCirculatingSupply; + + //get basket balance of lp token + const basketBalance = await getAccountInfo(basketAddress); + + const basketLpBalanceObject = basketBalance.assets; + let basketLpBalance; + + for (let lpAsset of basketLpBalanceObject) { + if (lpAsset["asset-id"] === asaId) { + basketLpBalance = lpAsset.amount; + } + } + const positionA = basketLpBalance * ratioA; + const positionB = basketLpBalance * ratioB; + + return { positionA: positionA, positionB: positionB }; +} + +module.exports = { + lpTokenPostion, +}; diff --git a/projects/algorai-finance/constants.js b/projects/algorai-finance/constants.js index f1d92d18fc..975079ea9a 100644 --- a/projects/algorai-finance/constants.js +++ b/projects/algorai-finance/constants.js @@ -6,63 +6,53 @@ const vaults = [ // v1.0 { vaultID: 878144513, - depositAssetID: 0, assetDecimals: 6, coingecko: 'algorand', - stable: false }, { vaultID: 878140320, - depositAssetID: 31566704, assetDecimals: 6, coingecko: 'usd-coin', - stable: true }, // v1.1 { vaultID: 919531421, - depositAssetID: 0, assetDecimals: 6, coingecko: 'algorand', - stable: false }, { vaultID: 919539218, - depositAssetID: 31566704, assetDecimals: 6, coingecko: 'usd-coin', - stable: true, }, { vaultID: 1004309470, - depositAssetID: 386192725, assetDecimals: 8, coingecko: 'bitcoin', - stable: false, }, { vaultID: 1004325987, - depositAssetID: 31566704, assetDecimals: 6, coingecko: 'usd-coin', - stable: true, }, { vaultID: 1004326861, - depositAssetID: 386195940, assetDecimals: 8, coingecko: 'ethereum', - stable: false, }, { vaultID: 1004374058, - depositAssetID: 31566704, assetDecimals: 6, coingecko: 'usd-coin', - stable: true, + }, + { + vaultID: 1097368119, + assetDecimals: 4, + coingecko: 'pepe', }, ]; + module.exports = { vaults, }; diff --git a/projects/algorai-finance/index.js b/projects/algorai-finance/index.js index 7165a306cc..7e9ee64588 100644 --- a/projects/algorai-finance/index.js +++ b/projects/algorai-finance/index.js @@ -22,10 +22,9 @@ async function tvl() { return balances } - module.exports = { timetravel: false, algorand: { tvl, }, -}; +}; \ No newline at end of file diff --git a/projects/alkemi/index.js b/projects/alkemi/index.js index c8100328c7..dda8ab3dd4 100644 --- a/projects/alkemi/index.js +++ b/projects/alkemi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -12,7 +13,7 @@ const BigNumber = require('bignumber.js'); ==================================================*/ -const etherAddress = '0x0000000000000000000000000000000000000000'; +const etherAddress = ADDRESSES.null; const alkPools = [ '0x397c315d64D74d82A731d656f9C4D586D200F90A', // Alkemi Earn '0x4822D9172e5b76b9Db37B75f5552F9988F98a888', // Alkemi Earn Open @@ -20,9 +21,9 @@ const alkPools = [ const alkTokens = [ '0x8125afd067094cD573255f82795339b9fe2A40ab', // WETH, Alkemi Earn Open '0x1f52453B32BFab737247114D56d756A6c37dd9Ef', // WETH, Alkemi Earn - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI + ADDRESSES.ethereum.WBTC, // WBTC + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.DAI, // DAI ]; async function tvl(timestamp, block) { diff --git a/projects/allbridge/index.js b/projects/allbridge/index.js index a5f56d0e0b..50f5395bef 100644 --- a/projects/allbridge/index.js +++ b/projects/allbridge/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const solana = require('../helper/solana') -const terra = require('../helper/chain/terra') +const cosmos = require('../helper/chain/cosmos') const { staking } = require('../helper/staking'); const near = require('../helper/chain/near'); const { default: BigNumber } = require('bignumber.js'); @@ -17,8 +18,8 @@ const data = { decimals: 18 }, tokens: [ - {name: "celo-dollar", address: "0x765DE816845861e75A25fCA122bb6898B8B1282a", decimals: 18}, - {name: "usd-coin", address: "0x2A3684e9Dc20B857375EA04235F2F7edBe818FA7", decimals: 6}, + {name: "celo-dollar", address: ADDRESSES.celo.cUSD, decimals: 18}, + {name: "usd-coin", address: ADDRESSES.celo.USDC, decimals: 6}, {name: "poofcash", address: "0x00400FcbF0816bebB94654259de7273f4A05c762", decimals: 18}, {name: "celo-euro", address: "0xD8763CBa276a3738E6DE85b4b3bF5FDed6D6cA73", decimals: 18}, {name: "celo", address: NATIVE_ADDRESS, decimals: 18}, @@ -33,10 +34,10 @@ const data = { }, tokens: [ {name: "avalanche-2", address: NATIVE_ADDRESS, decimals: 18}, - {name: "usd-coin", address: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", decimals: 6}, - {name: "tether", address: "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", decimals: 6}, + {name: "usd-coin", address: ADDRESSES.avax.USDC_e, decimals: 6}, + {name: "tether", address: ADDRESSES.avax.USDT_e, decimals: 6}, {name: "bitcoin", address: "0x50b7545627a5162F82A992c33b87aDc75187B218", decimals: 8}, - {name: "dai", address: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", decimals: 18} + {name: "dai", address: ADDRESSES.avax.DAI, decimals: 18} ] }, fantom: { @@ -49,8 +50,8 @@ const data = { tokens: [ {name: "bitcoin", address: "0x321162Cd933E2Be498Cd2267a90534A804051b11", decimals: 8}, {name: "ethereum", address: "0x74b23882a30290451A17c44f4F05243b6b58C76d", decimals: 18}, - {name: "usd-coin", address: "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", decimals: 6}, - {name: "dai", address: "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", decimals: 18}, + {name: "usd-coin", address: ADDRESSES.fantom.USDC, decimals: 6}, + {name: "dai", address: ADDRESSES.fantom.DAI, decimals: 18}, {name: "chainlink", address: "0xb3654dc3D10Ea7645f8319668E8F54d2574FBdC8", decimals: 18}, {name: "fantom", address: NATIVE_ADDRESS, decimals: 18}, ] @@ -64,7 +65,7 @@ const data = { }, tokens: [ {name: "bitcoin", address: "0x66a79D23E58475D2738179Ca52cd0b41d73f0BEa", decimals: 18}, - {name: "tether", address: "0xa71EdC38d189767582C38A3145b5873052c3e47a", decimals: 18}, + {name: "tether", address: ADDRESSES.heco.USDT, decimals: 18}, {name: "apyswap", address: "0x90e8896b12a92D51CD213b681C2CaD83A9a6bD49", decimals: 18}, ] @@ -78,12 +79,12 @@ const data = { }, tokens: [ {name: "mimatic", address: "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1", decimals: 18}, - {name: "usd-coin", address: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", decimals: 6}, - {name: "tether", address: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", decimals: 6}, + {name: "usd-coin", address: ADDRESSES.polygon.USDC, decimals: 6}, + {name: "tether", address: ADDRESSES.polygon.USDT, decimals: 6}, {name: "matic-network", address: NATIVE_ADDRESS, decimals: 18}, - {name: "ethereum", address: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", decimals: 18}, - {name: "bitcoin", address: "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6", decimals: 8}, - {name: "dai", address: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", decimals: 18}, + {name: "ethereum", address: ADDRESSES.polygon.WETH_1, decimals: 18}, + {name: "bitcoin", address: ADDRESSES.polygon.WBTC, decimals: 8}, + {name: "dai", address: ADDRESSES.polygon.DAI, decimals: 18}, {name: "apyswap", address: "0x14743E1c6f812154F7ecc980D890F0F5234103e7", decimals: 18}, ] }, @@ -97,12 +98,12 @@ const data = { tokens: [ {name: "impossible-finance", address: "0xB0e1fc65C1a741b4662B813eB787d369b8614Af1", decimals: 18}, {name: "krown", address: "0x1446f3CEdf4d86a9399E49f7937766E6De2A3AAB", decimals: 18}, - {name: "binance-usd", address: "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", decimals: 18}, - {name: "investin", address: "0x6A46d878401F46B4C7f665f065E0667580e031ec", decimals: 18}, - {name: "tether", address: "0x55d398326f99059fF775485246999027B3197955", decimals: 18}, - {name: "usd-coin", address: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", decimals: 18}, - {name: "bitcoin", address: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", decimals: 18}, - {name: "ethereum", address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", decimals: 18}, + {name: "binance-usd", address: ADDRESSES.bsc.BUSD, decimals: 18}, + {name: "investin", address: ADDRESSES.bsc.IVN, decimals: 18}, + {name: "tether", address: ADDRESSES.bsc.USDT, decimals: 18}, + {name: "usd-coin", address: ADDRESSES.bsc.USDC, decimals: 18}, + {name: "bitcoin", address: ADDRESSES.bsc.BTCB, decimals: 18}, + {name: "ethereum", address: ADDRESSES.bsc.ETH, decimals: 18}, {name: "binancecoin", address: NATIVE_ADDRESS, decimals: 18}, {name: "uniswap", address: "0xBf5140A22578168FD562DCcF235E5D43A02ce9B1", decimals: 18}, {name: "chainlink", address: "0xF8A0BF9cF54Bb92F17374d9e9A321E6a111a51bD", decimals: 18}, @@ -124,16 +125,16 @@ const data = { {name: "ariadne", address: "0xb1c9bc94aCd2fAE6aABf4ffae4429B93512a81D2", decimals: 18}, {name: "cyberfi", address: "0x63b4f3e3fa4e438698CE330e365E831F7cCD1eF4", decimals: 18}, {name: "ethereum", address: NATIVE_ADDRESS, decimals: 18}, - {name: "usd-coin", address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", decimals: 6}, - {name: "tether", address: "0xdAC17F958D2ee523a2206206994597C13D831ec7", decimals: 6}, + {name: "usd-coin", address: ADDRESSES.ethereum.USDC, decimals: 6}, + {name: "tether", address: ADDRESSES.ethereum.USDT, decimals: 6}, {name: "ftx-token", address: "0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9", decimals: 18}, - {name: "dai", address: "0x6B175474E89094C44Da98b954EedeAC495271d0F", decimals: 18}, - {name: "bitcoin", address: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", decimals: 8}, + {name: "dai", address: ADDRESSES.ethereum.DAI, decimals: 18}, + {name: "bitcoin", address: ADDRESSES.ethereum.WBTC, decimals: 8}, {name: "magic-internet-money", address: "0x99D8a9C45b2ecA8864373A26D1459e3Dff1e17F3", decimals: 18}, {name: "fei-usd", address: "0x956F47F50A910163D8BF957Cf5846D573E7f87CA", decimals: 18}, {name: "thorstarter", address: "0x69fa0feE221AD11012BAb0FdB45d444D3D2Ce71c", decimals: 18}, - {name: "uniswap", address: "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", decimals: 18}, - {name: "chainlink", address: "0x514910771AF9Ca656af840dff83E8264EcF986CA", decimals: 18}, + {name: "uniswap", address: ADDRESSES.ethereum.UNI, decimals: 18}, + {name: "chainlink", address: ADDRESSES.ethereum.LINK, decimals: 18}, {name: "smartpad", address: "0x5067006f830224960fb419d7f25a3a53e9919bb0", decimals: 18}, ] }, @@ -230,19 +231,13 @@ async function solanaStaking() { } async function terraTvl() { - const balances = {} - for (const token of terraData.tokens) { - const balance = token.address.length > 5 - ? await terra.getBalance(token.address, terraData.contractAddress) - : await terra.getDenomBalance(token.address, terraData.contractAddress); - sdk.util.sumSingleBalance(balances, token.name, toNumber(token.decimals, balance)); - } - return balances + return cosmos.sumTokens({ chain: "terra", owner: terraData.contractAddress }) } + async function terraStaking() { - const balance = await terra.getBalance(terraData.staking.abrAddress, terraData.staking.contractAddress); + const balance = await cosmos.getBalance({ token: terraData.staking.abrAddress, owner: terraData.staking.contractAddress, chain: "terra"}); return { allbridge: toNumber(terraData.staking.decimals, balance) } } diff --git a/projects/allchainbridge/index.js b/projects/allchainbridge/index.js index aa9053200a..dfa855d151 100644 --- a/projects/allchainbridge/index.js +++ b/projects/allchainbridge/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require('../helper/unwrapLPs') const getBridgeContract = (chain) => { @@ -29,53 +30,53 @@ const getBridgeContract = (chain) => { const tokensConf = { ethereum: { ETH: nullAddress, - BUSD: "0x4Fabb145d64652a948d72533023f6E7A623C7C53", - USDC: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - USDT: "0xdac17f958d2ee523a2206206994597c13d831ec7", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", + BUSD: ADDRESSES.ethereum.BUSD, + USDC: ADDRESSES.ethereum.USDC, + USDT: ADDRESSES.ethereum.USDT, + DAI: ADDRESSES.ethereum.DAI, HBTC: "0x0316EB71485b0Ab14103307bf65a021042c6d380", - WETH: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + WETH: ADDRESSES.ethereum.WETH, SWFTC: "0x0bb217e40f8a5cb79adf04e1aab60e5abd0dfc1e", HT: "0x6f259637dcd74c767781e37bc6133cd6a68aa161", }, bsc: { BNB: nullAddress, - BUSD: "0xe9e7cea3dedca5984780bafc599bd69add087d56", - USDC: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - USDT: "0x55d398326f99059fF775485246999027B3197955", + BUSD: ADDRESSES.bsc.BUSD, + USDC: ADDRESSES.bsc.USDC, + USDT: ADDRESSES.bsc.USDT, DAI: "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", - WBNB: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", - BTCB: "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", - ETH: "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + WBNB: ADDRESSES.bsc.WBNB, + BTCB: ADDRESSES.bsc.BTCB, + ETH: ADDRESSES.bsc.ETH, SWFTC: "0xe64e30276c2f826febd3784958d6da7b55dfbad3", DOGE: "0xba2ae424d960c26247dd6c32edc70b295c744c43", }, heco: { HT: nullAddress, - USDC: "0x9362bbef4b8313a8aa9f0c9808b80577aa26b73b", - USDT: "0xa71edc38d189767582c38a3145b5873052c3e47a", + USDC: ADDRESSES.heco.USDC_HECO, + USDT: ADDRESSES.heco.USDT, HUSD: "0x0298c2b32eae4da002a15f36fdf7615bea3da047", ETH: "0x64ff637fb478863b7468bc97d30a5bf3a428a1fd", SWFTC: "0x329dda64Cbc4DFD5FA5072b447B3941CE054ebb3", }, okexchain: { OKT: nullAddress, - USDC: "0xc946daf81b08146b1c7a8da2a851ddf2b3eaaf85", - USDT: "0x382bb369d343125bfb2117af9c149795c6c65c50", - ETH: "0xef71ca2ee68f45b9ad6f72fbdb33d707b872315c", - OKB: "0xdf54b6c6195ea4d948d03bfd818d365cf175cfc2", + USDC: ADDRESSES.okexchain.USDC, + USDT: ADDRESSES.okexchain.USDT, + ETH: ADDRESSES.okexchain.ETHK, + OKB: ADDRESSES.okexchain.OKB, }, polygon: { MATIC: nullAddress, - USDC: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - USDT: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - WMATIC: "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + USDC: ADDRESSES.polygon.USDC, + USDT: ADDRESSES.polygon.USDT, + WMATIC: ADDRESSES.polygon.WMATIC_2, }, fantom: { FTM: nullAddress, - USDC: "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", - USDT: "0x049d68029688eabf473097a2fc38ef61633a3c7a", - DAI: "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", + USDC: ADDRESSES.fantom.USDC, + USDT: ADDRESSES.fantom.fUSDT, + DAI: ADDRESSES.fantom.DAI, WETH: "0x74b23882a30290451A17c44f4F05243b6b58C76d", }, kava: { diff --git a/projects/alpaca-finance-v2/abi.json b/projects/alpaca-finance-v2/abi.json new file mode 100644 index 0000000000..8650c709ef --- /dev/null +++ b/projects/alpaca-finance-v2/abi.json @@ -0,0 +1,4 @@ +{ + "getFloatingBalance": "function getFloatingBalance(address _token) external view returns (uint256 _floating)", + "getGlobalDebtValueWithPendingInterest": "function getGlobalDebtValueWithPendingInterest(address _token) external view returns (uint256)" +} \ No newline at end of file diff --git a/projects/alpaca-finance-v2/index.js b/projects/alpaca-finance-v2/index.js new file mode 100644 index 0000000000..546dabaa96 --- /dev/null +++ b/projects/alpaca-finance-v2/index.js @@ -0,0 +1,10 @@ +const { lendingTvl, borrowTvl } = require("./moneyMarket"); + +module.exports = { + start: 1602054167, + methodology: "Sum floating balance and borrow for each token", + bsc: { + tvl: lendingTvl, + borrowed: borrowTvl + }, +}; \ No newline at end of file diff --git a/projects/alpaca-finance-v2/moneyMarket.js b/projects/alpaca-finance-v2/moneyMarket.js new file mode 100644 index 0000000000..d469aacc7e --- /dev/null +++ b/projects/alpaca-finance-v2/moneyMarket.js @@ -0,0 +1,30 @@ +const sdk = require("@defillama/sdk"); +const abi = require("./abi.json"); +const { getConfig } = require("../helper/cache"); +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function getMoneyMarketData() { + return (await getConfig("alpaca-finance-2.0", "https://raw.githubusercontent.com/alpaca-finance/alpaca-v2-money-market/main/.mainnet.json")).moneyMarket; +} + +async function lendingTvl(ts, _, _1, {api}) { + const { moneyMarketDiamond, markets } = await getMoneyMarketData(); + return sumTokens2({ api, owner: moneyMarketDiamond, tokens: markets.map(i => i.token)}) +} + +async function borrowTvl(ts, _, _1, {api}) { + const { moneyMarketDiamond, markets } = await getMoneyMarketData(); + const tokens = markets.map(i => i.token) + + const borrows = (await api.multiCall({ + abi: abi.getGlobalDebtValueWithPendingInterest, + target: moneyMarketDiamond, + calls: tokens + })) + api.addTokens(tokens, borrows) +} + +module.exports = { + lendingTvl, + borrowTvl +} \ No newline at end of file diff --git a/projects/alpaca-finance/index.js b/projects/alpaca-finance/index.js index 034347ce7f..81ee4eeb26 100644 --- a/projects/alpaca-finance/index.js +++ b/projects/alpaca-finance/index.js @@ -1,6 +1,8 @@ +const sdk = require('@defillama/sdk') const { calLyfTvl } = require("./lyf"); const { calAusdTvl } = require('./ausd'); const { calxALPACAtvl } = require('./xalpaca'); +const aExports = require('../alpaca-finance-lend'); async function bscTvl(timestamp, ethBlock, chainBlocks) { const lyfTvl = await calLyfTvl('bsc', chainBlocks.bsc); @@ -25,11 +27,11 @@ async function ftmStaking(timestamp, ethBlock, chainBlocks) { module.exports = { start: 1602054167, bsc: { - tvl: bscTvl, + tvl: sdk.util.sumChainTvls([bscTvl, aExports.bsc.tvl]), staking: bscStaking, }, fantom: { - tvl: fantomTvl, + tvl: sdk.util.sumChainTvls([fantomTvl, aExports.fantom.tvl]), staking: ftmStaking, } }; diff --git a/projects/alpaca-finance/lyf.js b/projects/alpaca-finance/lyf.js index c5e82dd58d..d448335c57 100644 --- a/projects/alpaca-finance/lyf.js +++ b/projects/alpaca-finance/lyf.js @@ -139,6 +139,7 @@ async function calLyfTvl(chain, block) { } module.exports = { - calLyfTvl, getProcolAddresses, + calLyfTvl, + getProcolAddresses } \ No newline at end of file diff --git a/projects/alpacafinance-gmx/index.js b/projects/alpacafinance-gmx/index.js index 2156f16c16..94cbf1351f 100644 --- a/projects/alpacafinance-gmx/index.js +++ b/projects/alpacafinance-gmx/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { gmxExports } = require('../helper/gmx') const { sumTokensExport } = require('../helper/unwrapLPs') @@ -6,11 +7,11 @@ module.exports = { tvl: sumTokensExport({ owner: '0x18A15bF2Aa1E514dc660Cc4B08d05f9f6f0FdC4e', tokens: [ - '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', - '0x55d398326f99059ff775485246999027b3197955', - '0x2170ed0880ac9a755fd29b2688956bd959f933f8', - '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.WBNB, ], }) } diff --git a/projects/alpha-homora/index.js b/projects/alpha-homora/index.js index 90295747e5..d512fa9997 100644 --- a/projects/alpha-homora/index.js +++ b/projects/alpha-homora/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const BigNumber = require("bignumber.js"); const {tvlV1Eth, tvlV1Bsc} = require('./v1.js') const {tvlV2, tvlV2Onchain} = require('./v2.js') async function ethTvl(timestamp, block) { - const ethAddress = "0x0000000000000000000000000000000000000000"; + const ethAddress = ADDRESSES.null; const balances = {}; const tvls = await Promise.all([ diff --git a/projects/alpha-homora/v1.js b/projects/alpha-homora/v1.js index 3c89e8e9ab..0715bfe4d1 100644 --- a/projects/alpha-homora/v1.js +++ b/projects/alpha-homora/v1.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { getConfig } = require('../helper/cache') @@ -18,7 +19,7 @@ async function tvlV1Eth(timestamp, block) { return tvlV1("ethereum", block, "https://homora.alphafinance.io/static/contracts.json", "WETHAddress", "totalETH") } -const wBNB = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' +const wBNB = ADDRESSES.bsc.WBNB async function tvlV1Bsc(timestamp, block, chainBlocks) { const tvlBNB = await tvlV1("bsc", chainBlocks.bsc, "https://homora-bsc.alphafinance.io/static/contracts.json", "WBNBAddress", "totalBNB") return { diff --git a/projects/alpha-homora/v2.js b/projects/alpha-homora/v2.js index 3014158d5e..7b42a6d8cf 100644 --- a/projects/alpha-homora/v2.js +++ b/projects/alpha-homora/v2.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const BigNumber = require("bignumber.js"); @@ -121,7 +122,7 @@ async function tvlV2Onchain(block, chain) { const balances = {} const transform = addr => { if (addr.toLowerCase() === '0x260bbf5698121eb85e7a74f2e45e16ce762ebe11') - return 'avax:0xc7198437980c041c805a1edcba50c1ce5db95118' // Axelar wrapped UST -> USDT + return 'avax:' + ADDRESSES.avax.USDT_e // Axelar wrapped UST -> USDT if (addr.toLowerCase() === '0x2147efff675e4a4ee1c2f918d181cdbd7a8e208f') return '0xa1faa113cbe53436df28ff0aee54275c13b40975' // Wrapped Alpha Finance -> ALPHA (erc20) return `${chain}:${addr}` @@ -271,12 +272,13 @@ async function getTokenPrices(tokens, block, chain, coreOracleAddress) { chain, abi: abi["getETHPx"], block, + permitFailure: true, }); const tokenPrices = {}; for (let i = 0; i < _ethPrices.length; i++) { - const price = BigNumber(_ethPrices[i].output).div(BigNumber(2).pow(112)); - if (price.gte(0)) { + const price = _ethPrices[i].output / 2 ** 112; + if (price > 0) { tokenPrices[tokens[i]] = price; } } diff --git a/projects/amaterasu.js b/projects/amaterasu.js index 6309cd74f2..da23a1807c 100644 --- a/projects/amaterasu.js +++ b/projects/amaterasu.js @@ -5,7 +5,6 @@ module.exports = { aurora: { tvl: getUniTVL({ factory: "0x34696b6cE48051048f07f4cAfa39e3381242c3eD", - chain: 'aurora', useDefaultCoreAssets: true, }) } diff --git a/projects/ambient-finance/index.js b/projects/ambient-finance/index.js new file mode 100644 index 0000000000..d1bfef5330 --- /dev/null +++ b/projects/ambient-finance/index.js @@ -0,0 +1,22 @@ +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { covalentGetTokens } = require("../helper/http"); +const { cachedGraphQuery } = require("../helper/cache"); + +const vault = "0xAaAaAAAaA24eEeb8d57D431224f73832bC34f688" +const tvlV1 = async (_, _1, _2, { api }) => { + const tokens = await covalentGetTokens(vault, api.chain) + return sumTokens2({ api, owner: vault, tokens, }) +} + +async function tvl(_, _b, _cb, { api, }) { + + const { pools } = await cachedGraphQuery(`ambient-finance/${api.chain}`, `https://api.thegraph.com/subgraphs/name/crocswap/croc-mainnet`, "{ pools { base quote }}") + const tokens = pools.map(i => [i.base, i.quote]).flat() + return sumTokens2({ api, owner: vault, tokens, }) +} + +module.exports = { + ethereum: { + tvl, + } +} \ No newline at end of file diff --git a/projects/ammos-fi/index.js b/projects/ammos-fi/index.js new file mode 100644 index 0000000000..82f5938c37 --- /dev/null +++ b/projects/ammos-fi/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + mantle: { factory: "0x636eA278699A300d3A849aB2cE36c891C4eE3Da0", fromBlock: 20634, }, +}); \ No newline at end of file diff --git a/projects/ampere/index.js b/projects/ampere/index.js index c66b7646cf..cda18f15d6 100644 --- a/projects/ampere/index.js +++ b/projects/ampere/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { tombTvl } = require("../helper/tomb"); const FUSE_ON_ETH = "0x970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d"; -const FUSE_ON_FUSE = "0x0be9e53fd7edac9f859882afdda116645287c629"; +const FUSE_ON_FUSE = ADDRESSES.fuse.WFUSE; const AMP = "0x2b09179D26FdDB27a24ee25328890791c7A984c2".toLowerCase(); const CURRENT = "0x3B1292FEf70C3F9Fb933DD2e2F4B734DcB35648d".toLowerCase(); diff --git a/projects/amyfinance/index.js b/projects/amyfinance/index.js index 5c4db3a81b..421728d03d 100644 --- a/projects/amyfinance/index.js +++ b/projects/amyfinance/index.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs'); const { transformArbitrumAddress } = require('../helper/portedTokens'); const tokens = [ - ["0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", false], //USDC - ["0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", false], //USDT - ["0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", false], //DAI - ["0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", false], //WBTC - ["0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", false], //WETH + [ADDRESSES.arbitrum.USDC, false], //USDC + [ADDRESSES.arbitrum.USDT, false], //USDT + [ADDRESSES.optimism.DAI, false], //DAI + [ADDRESSES.arbitrum.WBTC, false], //WBTC + [ADDRESSES.arbitrum.WETH, false], //WETH ["0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0", false], //UNI - ["0xf97f4df75117a78c1A5a0DBb814Af92458539FB4", false], //LINK - ["0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A", false], //MIM + [ADDRESSES.arbitrum.LINK, false], //LINK + [ADDRESSES.arbitrum.MIM, false], //MIM ["0xd4d42F0b6DEF4CE0383636770eF773390d85c61A", false], //SUSHI ]; const aibContracts = [ diff --git a/projects/anchor/index.js b/projects/anchor/index.js index 19b64dbc82..2ac5d58349 100644 --- a/projects/anchor/index.js +++ b/projects/anchor/index.js @@ -1,45 +1,12 @@ -const { fetchURL } = require("../helper/utils"); -const sdk = require("@defillama/sdk"); -const { getBalance, sumSingleBalance, getDenomBalance, } = require('../helper/chain/terra') -const { default: BigNumber } = require("bignumber.js"); - -async function borrowed() { - const data = await fetchURL("https://api.anchorprotocol.com/api/v1/borrow") - return { - "terrausd": Number(data.data.total_borrowed) / 1e6 - } -} - -async function avalancheTVL(timestamp, ethBlock, chainBlocks) { - const chain = "avax" - const wormholeAnchorUST = "0xaB9A04808167C170A9EC4f8a87a0cD781ebcd55e" - const block = chainBlocks[chain] - const { output: aUSTBalance } = await sdk.api.erc20.totalSupply({ target: wormholeAnchorUST, block, chain }) - return { - "anchorust": BigNumber(aUSTBalance).dividedBy(10 ** 6) - } -} - module.exports = { timetravel: false, methodology: `We use the Anchor subgraph to get the amount of bLUNA and bETH used as collateral on anchor and the UST that is on anchor but has not been lent, we then use Coingecko to price the tokens in USD.`, terra: { - tvl: async () => { - const balances = {} - const [eth, bLuna, uusd] = await Promise.all([ - getBalance('terra1dzhzukyezv0etz22ud940z7adyv7xgcjkahuun', 'terra10cxuzggyvvv44magvrh3thpdnk9cmlgk93gmx2'), - getBalance('terra1kc87mu460fwkqte29rquh4hc20m54fxwtsx7gp', 'terra1ptjp2vfjrwh0j0faj9r6katm640kgjxnwwq9kn'), - // getDenomBalance('uusd', 'terra1sepfj7s0aeg5967uxnfk4thzlerrsktkpelm5s'), - ]) - sumSingleBalance(balances, 'terra1dzhzukyezv0etz22ud940z7adyv7xgcjkahuun', eth,) - sumSingleBalance(balances, 'terra1kc87mu460fwkqte29rquh4hc20m54fxwtsx7gp', bLuna,) - // sumSingleBalance(balances, 'uusd', uusd,) - return balances - }, - borrowed + tvl: () => ({}), + // borrowed }, avax: { - tvl: avalancheTVL + tvl: () => ({}), }, hallmarks: [ [1651881600, "UST depeg"], diff --git a/projects/anetabtc/index.js b/projects/anetabtc/index.js index 597139bf53..c635356d98 100644 --- a/projects/anetabtc/index.js +++ b/projects/anetabtc/index.js @@ -1,21 +1,4 @@ -const { get } = require('../helper/http') -const { sumTokensExport } = require('../helper/chain/cardano') - -let tokenPrice -const DAY = 24 * 60 * 60 * 1000 -const aDayAgo = new Date() - DAY - -async function getTokenPrice() { - if (!tokenPrice) tokenPrice = _getTokenPrice() - return tokenPrice - - async function _getTokenPrice() { - const data = await get('https://api.ergodex.io/v1/amm/markets?from='+aDayAgo) - const priceObj = data.find(i => i.quoteSymbol === 'NETA' && i.baseSymbol === 'ERG') - if (!priceObj) return 0 - return 1/(priceObj.lastPrice) - } -} +const { sumTokensExport } = require('../helper/sumTokens') module.exports = { timetravel: false, @@ -24,14 +7,6 @@ module.exports = { staking: sumTokensExport({ tokens: ['b34b3ea80060ace9427bda98690a73d33840e27aaa8d6edb7f0c757a634e455441'], owner: 'addr1w8p79rekquuw5kmdg4z36y9gpnm88k5huddwqluk9mjjeqgc3xmss'}) }, ergo: { - staking: async () => { - const api = 'https://api.ergoplatform.com/api/v1/addresses/5ASYVJ2w8tH3bDQx5ZLz6rZUdokD1kmTXSRZ8GfrsAUW4vqy9eg5omtTYVzY22ibHANf7GgSc2E5FiThgo8qXzWpU3RDLohN277hksbAf9yykajXbYPUaXUeMPfSXbS1GdE4y2GoYKaXHR3H57MV5CDZE58YteqWe3XVXzmMvj1192AD7UZ1N6nguRfjgijxEWTrLq2ZrykjRAut2JBGYHanAKn46tYWW3chpxNosXG7ZW2ShDzKju2ttHhfxeZVMBydryuoEya5E9KVagjsfa9E2qPUdLpbh8enppVWcwoQ4GF1ktgzSX32QbfKhfpD23iWQixThUbcCca14FjXDt94GVFPuhAT5tQyiKen863Cq5eRAEgsQ7otX6pWa32Q28sxSF9Az4abwiJKNbFhbhb3cDCs6A45ZnW6aB6AkfwTJSAZ2ZzqqG7LXT4HdxNpdmiwno9sJWxPf2PC4vRhVqBPdxxyCgoodjyutf4UuinSCibhfqdhUJLc1JM8zX9UcD699mChgUZoKE8kXD4soVGSgQD3qfGXC6RP7n8dtowArNLm3H5QJ3EobDCbEgECLHFaHN2BPwwWscAt5eejKeFvkp3CuQ3mqFW7vfQG4n9tTLnshj8cjxnpkBdfFKC83sW8A3AoZAX4K1UrhndfLSFh4w/balance/confirmed' - const data = await get(api) - const tokenData = data.tokens.find(i => i.tokenId === '472c3d4ecaa08fb7392ff041ee2e6af75f4a558810a74b28600549d5392810e8') - return { - // cneta: tokenData.amount * (await getTokenPrice())/(10 ** tokenData.decimals) - cneta: tokenData.amount /(10 ** tokenData.decimals) - } - } + staking: sumTokensExport({ tokens: ['472c3d4ecaa08fb7392ff041ee2e6af75f4a558810a74b28600549d5392810e8'], owner: '5ASYVJ2w8tH3bDQx5ZLz6rZUdokD1kmTXSRZ8GfrsAUW4vqy9eg5omtTYVzY22ibHANf7GgSc2E5FiThgo8qXzWpU3RDLohN277hksbAf9yykajXbYPUaXUeMPfSXbS1GdE4y2GoYKaXHR3H57MV5CDZE58YteqWe3XVXzmMvj1192AD7UZ1N6nguRfjgijxEWTrLq2ZrykjRAut2JBGYHanAKn46tYWW3chpxNosXG7ZW2ShDzKju2ttHhfxeZVMBydryuoEya5E9KVagjsfa9E2qPUdLpbh8enppVWcwoQ4GF1ktgzSX32QbfKhfpD23iWQixThUbcCca14FjXDt94GVFPuhAT5tQyiKen863Cq5eRAEgsQ7otX6pWa32Q28sxSF9Az4abwiJKNbFhbhb3cDCs6A45ZnW6aB6AkfwTJSAZ2ZzqqG7LXT4HdxNpdmiwno9sJWxPf2PC4vRhVqBPdxxyCgoodjyutf4UuinSCibhfqdhUJLc1JM8zX9UcD699mChgUZoKE8kXD4soVGSgQD3qfGXC6RP7n8dtowArNLm3H5QJ3EobDCbEgECLHFaHN2BPwwWscAt5eejKeFvkp3CuQ3mqFW7vfQG4n9tTLnshj8cjxnpkBdfFKC83sW8A3AoZAX4K1UrhndfLSFh4w'}) } } \ No newline at end of file diff --git a/projects/angel-protocol/index.js b/projects/angel-protocol/index.js index b4ab60736d..379e9a2c50 100644 --- a/projects/angel-protocol/index.js +++ b/projects/angel-protocol/index.js @@ -1,20 +1,8 @@ - -const { fetchURL } = require('../helper/utils') -const BigNumber = require('bignumber.js'); - - -async function tvl() { - const res = await fetchURL(`https://fcd.terra.dev/wasm/contracts/terra172ue5d0zm7jlsj2d9af4vdff6wua7mnv6dq5vp/store?query_msg=%7B%22token_info%22:%7B%22sid%22:0%7D%7D`) - return { - 'anchorust': BigNumber(res.data.result.total_supply) / 1e6, - } -} - module.exports = { timetravel: false, methodology: 'TVL takes total apANC in the contract and returns AnchorUST value', terra: { - tvl, + tvl: () => ({}), }, hallmarks:[ [1651881600, "UST depeg"], diff --git a/projects/angle/index.js b/projects/angle/index.js index 9dc6442b12..d22e94718a 100644 --- a/projects/angle/index.js +++ b/projects/angle/index.js @@ -1,7 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { getConfig } = require("../helper/cache"); const { sumTokens2 } = require("../helper/unwrapLPs"); +const { getUniqueAddresses } = require("../helper/tokenMapping"); const ANGLE = "0x31429d1856ad1377a8a0079410b297e1a9e214c2"; const veANGLE = "0x0C462Dbb9EC8cD1630f1728B2CFD2769d09f0dd5"; @@ -35,60 +37,63 @@ async function getVaultManagersFromAPI(chain) { return calls; } -async function tvl(chain, block) { +async function tvl(_, _1, _2, { api }) { + const chain = api.chain const balances = {}; const tokensAndOwners = []; if (chain === "ethereum") { // Registry will be released in next sdk of Angle + graphql endpoint to come - const collaterals = { - dai: "0x6b175474e89094c44da98b954eedeac495271d0f", - usdc: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - frax: "0x853d955acef822db058eb8505911ed77f175b99e", - fei: "0x956F47F50A910163D8BF957Cf5846D573E7f87CA", - weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - }; - const agEUR = { contract: "0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", stableMasterFront: "0x5adDc89785D75C86aB939E9e15bfBBb7Fc086A87", poolManagers: { dai: "0xc9daabC677F3d1301006e723bD21C60be57a5915", // DAI - usdc: "0xe9f183FC656656f1F17af1F2b0dF79b8fF9ad8eD", // USDC + // usdc: "0xe9f183FC656656f1F17af1F2b0dF79b8fF9ad8eD", // USDC disabled because of EULER hack fei: "0x53b981389Cfc5dCDA2DC2e903147B5DD0E985F44", // FEI frax: "0x6b4eE7352406707003bC6f6b96595FD35925af48", // FRAX weth: "0x3f66867b4b6eCeBA0dBb6776be15619F73BC30A2", // WETH }, }; - const agTokens = [agEUR]; - const tokenMapping = {}; - agTokens.map((t) => { - return Object.entries(t.poolManagers).forEach(([key, value]) => { - tokenMapping[value] = collaterals[key]; - }); - }); + // count the USDC in pool manager contract + tokensAndOwners.push([ADDRESSES.ethereum.USDC, '0xe9f183FC656656f1F17af1F2b0dF79b8fF9ad8eD']) // add USDC in USDC manager + const poolManagers = getUniqueAddresses([agEUR].map(i => Object.values(i.poolManagers)).flat()) - let { output: assets } = await sdk.api.abi.multiCall({ - calls: Object.keys(tokenMapping).map((i) => ({ target: i })), + let assets = await api.multiCall({ + calls: poolManagers, abi: poolManagers_abi["getTotalAsset"], - chain, - block, }); - let { output: tokens } = await sdk.api.abi.multiCall({ - calls: Object.keys(tokenMapping).map((i) => ({ target: i })), + let tokens = await api.multiCall({ + calls: poolManagers, abi: poolManagers_abi["token"], - chain, - block, }); - assets.forEach(({ output }, i) => - sdk.util.sumSingleBalance(balances, tokens[i].output, output) + assets.forEach((output, i) => + sdk.util.sumSingleBalance(balances, tokens[i], output) ); + + // AMOs + const EUROC = "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c"; + const curvePool = "0xBa3436Fd341F2C8A928452Db3C5A3670d1d5Cc73"; + const sdagEUREUROC = "0x63f222079608EEc2DDC7a9acdCD9344a21428Ce7"; + const cvxagEUREUROCstaker = "0xA91fccC1ec9d4A2271B7A86a7509Ca05057C1A98"; + const AngleagEUREUROCStaker = "0xC1e8Dba1cbF29f1CaA8343CAe96d5AdFD9bca736"; + // pool TVL + const [agEurBal, eurocBal, totPoolTokenSupply, sdagEUREUROCTVL, cvxagEUREUROCstakerTVL] = await Promise.all([ + api.call({ abi: 'erc20:balanceOf', target: agEUR.contract, params: curvePool }), + api.call({ abi: 'erc20:balanceOf', target: EUROC, params: curvePool }), + api.call({ abi: 'erc20:totalSupply', target: curvePool }), + // Angle holdings of Curve agEUREUROC LP tokens (staked on Stake DAO and Convex) + api.call({ abi: 'erc20:balanceOf', target: sdagEUREUROC, params: AngleagEUREUROCStaker }), + api.call({ abi: 'erc20:balanceOf', target: cvxagEUREUROCstaker, params: AngleagEUREUROCStaker }), + ]) + const eurocBalance = eurocBal * (+sdagEUREUROCTVL + +cvxagEUREUROCstakerTVL) / totPoolTokenSupply + sdk.util.sumSingleBalance(balances, EUROC, eurocBalance); } // Borrowing module tokensAndOwners.push(...(await getVaultManagersFromAPI(chain))); - return sumTokens2({ balances, chain, block, tokensAndOwners }); + return sumTokens2({ balances, api, tokensAndOwners }); } /* @@ -97,16 +102,16 @@ If not, the API call defaults to mainnet and the blockchain calls fail and retur */ module.exports = { + hallmarks: [ + [Math.floor(new Date('2023-03-13') / 1e3), 'Euler was hacked'], + ], ethereum: { staking: staking(veANGLE, ANGLE, "ethereum"), }, methodology: `TVL is retrieved on-chain by querying the total assets managed by the Core module, and the balances of the vaultManagers of the Borrowing module.`, }; -["ethereum", "polygon", "optimism", "arbitrum", "avax"].forEach( - (chain) => { - if (!module.exports[chain]) module.exports[chain] = {}; - module.exports[chain].tvl = async (_, _b, { [chain]: block }) => - tvl(chain, block); - } -); +["ethereum", "polygon", "optimism", "arbitrum", "avax"].forEach((chain) => { + if (!module.exports[chain]) module.exports[chain] = {}; + module.exports[chain].tvl = tvl +}); diff --git a/projects/animeswap/index.js b/projects/animeswap/index.js index fe49f857ae..c489a3df57 100644 --- a/projects/animeswap/index.js +++ b/projects/animeswap/index.js @@ -1,6 +1,15 @@ const { dexExport } = require('../helper/chain/aptos') +const { dexExport: dexExportSUI } = require('../helper/chain/sui') +const { mergeExports } = require('../helper/utils') -module.exports = dexExport({ +const aptosExports = dexExport({ account: '0x796900ebe1a1a54ff9e932f19c548f5c1af5c6e7d34965857ac2f7b1d1ab2cbf', poolStr: 'AnimeSwapPoolV1::LiquidityPool', }) + +const suiExprots = dexExportSUI({ + account: '0xdd7e3a071c6a090a157eccc3c9bbc4d2b3fb5ac9a4687b1c300bf74be6a58945', + poolStr: 'animeswap::LiquidityPool', +}) + +module.exports = mergeExports([suiExprots, aptosExports]) diff --git a/projects/annex.js b/projects/annex.js index b582d16f47..140683c71b 100644 --- a/projects/annex.js +++ b/projects/annex.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { compoundExports } = require('./helper/compound') -const wBNB = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"; +const wBNB = ADDRESSES.bsc.WBNB; const cBNB = "0xC5a83aD9f3586e143D2C718E8999206887eF9dDc"; const wCRO = "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"; const cCRO = "0x61FCA31c51aCc4CC683291Be936E6799AeAAFe41"; -const wKAVA = "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b"; +const wKAVA = ADDRESSES.kava.WKAVA; const cKAVA = "0x5642Aa2fC7028a203C689Bf21c1a92861D8C449B"; module.exports = { diff --git a/projects/ante/index.js b/projects/ante/index.js index 27687dca1a..27f4b2a483 100644 --- a/projects/ante/index.js +++ b/projects/ante/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { sumTokens2, nullAddress } = require('../helper/unwrapLPs'); const { createIncrementArray } = require('../helper/utils'); @@ -15,7 +16,7 @@ const CONFIG = { }, ], startBlock: 13234803, - gasToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', + gasToken: ADDRESSES.ethereum.WETH, }, avax: { factories: [ @@ -25,7 +26,7 @@ const CONFIG = { }, ], startBlock: 16037331, - gasToken: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', + gasToken: ADDRESSES.avax.WAVAX, }, polygon: { factories: [ @@ -35,7 +36,7 @@ const CONFIG = { }, ], startBlock: 32245577, - gasToken: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + gasToken: ADDRESSES.polygon.WMATIC_2, }, bsc: { factories: [ @@ -45,7 +46,7 @@ const CONFIG = { }, ], startBlock: 20928838, - gasToken: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', + gasToken: ADDRESSES.bsc.WBNB, }, fantom: { factories: [ @@ -55,7 +56,7 @@ const CONFIG = { }, ], startBlock: 46604874, - gasToken: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', + gasToken: ADDRESSES.fantom.WFTM, }, optimism: { factories: [ @@ -69,7 +70,7 @@ const CONFIG = { }, ], startBlock: 39240199, - gasToken: '0x4200000000000000000000000000000000000006', + gasToken: ADDRESSES.tombchain.FTM, }, arbitrum: { factories: [ @@ -79,7 +80,7 @@ const CONFIG = { }, ], startBlock: 33495774, - gasToken: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + gasToken: ADDRESSES.arbitrum.WETH, }, aurora: { factories: [ @@ -130,6 +131,7 @@ Object.keys(CONFIG).forEach((chain) => { calls, chain, block, + permitFailure: true, }); currentRes = res.map((i) => i.output).filter((i) => i); diff --git a/projects/antfarm-finance/index.js b/projects/antfarm-finance/index.js index 935e8033e2..cbcef8f0b5 100644 --- a/projects/antfarm-finance/index.js +++ b/projects/antfarm-finance/index.js @@ -11,6 +11,7 @@ const ethereum_staking = "0x6142b36B3dD1812993C2ecaa300b962A7Da0A900"; module.exports = { misrepresentedTokens: true, + doublecounted: true, }; Object.keys(config).forEach((chain) => { diff --git a/projects/antimatter/abi.json b/projects/antimatter/abi.json deleted file mode 100644 index 42451edeb5..0000000000 --- a/projects/antimatter/abi.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "allCalls": "function allCalls(uint256) view returns (address)", - "allPuts": "function allPuts(uint256) view returns (address)", - "underlying": "address:underlying", - "length": "uint256:length" -} \ No newline at end of file diff --git a/projects/antimatter/index.js b/projects/antimatter/index.js deleted file mode 100644 index b635a79007..0000000000 --- a/projects/antimatter/index.js +++ /dev/null @@ -1,60 +0,0 @@ -const sdk = require("@defillama/sdk"); -const abi = require('./abi.json') - -const factory = "0x60d0769c4940cA58648C0AA34ecdf390a10F272e" -const usdt = "0xdac17f958d2ee523a2206206994597c13d831ec7" -async function tvl(timestamp, ethBlock) { - const balances = {}; - const contractsLength = await sdk.api.abi.call({ - target:factory, - abi: abi.length, - block:ethBlock - }) - const calls = []; - for(let i=0; iresult.output) - const underlying = await sdk.api.abi.multiCall({ - calls: contracts.map(contract=>({ - target: contract - })), - block: ethBlock, - abi: abi.underlying - }); - const underlyingBalances = await sdk.api.abi.multiCall({ - calls: underlying.output.map(call=>[{ - target: call.output, - params: [call.input.target] - },{ - target: usdt, - params: [call.input.target] - }]).flat(), - block: ethBlock, - abi: "erc20:balanceOf" - }); - sdk.util.sumMultiBalanceOf(balances, underlyingBalances, true) - - return balances -} - -module.exports = { - ethereum: { - tvl - }, -} \ No newline at end of file diff --git a/projects/antimatterDAO/index.js b/projects/antimatterDAO/index.js index 97b6bade80..62468dc7f7 100644 --- a/projects/antimatterDAO/index.js +++ b/projects/antimatterDAO/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json"); const { sumTokens2 } = require('../helper/unwrapLPs') const { staking } = require('../helper/staking') @@ -5,20 +6,20 @@ const { staking } = require('../helper/staking') const antimatterStakingContract = "0xCB8429f22541E8F5cd8ea6c20BFFdcE7cDA65227"; const dualInvestContract = "0x7E45149820Fa33B66DCD3fd57158A0E755A67a16"; const dualInvestManagerAddress = "0x32275702f5A47Dcd89705c1ea4d47E99517b0e1a"; -const bscBTCContract = "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"; -const bscUSDTContract = "0x55d398326f99059fF775485246999027B3197955"; -const bscETHContract = "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"; -const kavaUSDTContract = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; -const kavaBTCContract = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; +const bscBTCContract = ADDRESSES.bsc.BTCB; +const bscUSDTContract = ADDRESSES.bsc.USDT; +const bscETHContract = ADDRESSES.bsc.ETH; +const kavaUSDTContract = ADDRESSES.moonriver.USDT; +const kavaBTCContract = ADDRESSES.moonriver.USDT; const kavaDualinvertContract = "0x626B5c394542960faa9495e64E812d17D5B605F9"; const factory = "0x90183C741CC13195884B6E332Aa0ac1F7c1E67Fa"; const usdTokens = { - bsc: '0xe9e7cea3dedca5984780bafc599bd69add087d56', - ethereum: '0xdac17f958d2ee523a2206206994597c13d831ec7', - arbitrum: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - avax: '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', + bsc: ADDRESSES.bsc.BUSD, + ethereum: ADDRESSES.ethereum.USDT, + arbitrum: ADDRESSES.arbitrum.USDT, + avax: ADDRESSES.avax.USDC_e, } const dualInvest = { diff --git a/projects/anyswap/index.js b/projects/anyswap/index.js index decb28c57a..583a4d470b 100644 --- a/projects/anyswap/index.js +++ b/projects/anyswap/index.js @@ -1,4 +1,8 @@ -const { get } = require('../helper/http') +const sdk = require('@defillama/sdk') +const { sumTokens } = require('../helper/sumTokens') +const { getConfig } = require('../helper/cache') +const ADDRESSES = require('../helper/coreAssets.json') + const chains = { '1': 'ethereum', @@ -58,67 +62,45 @@ const chains = { '32520': 'bitgert' } - - -const sleep = ms => new Promise(r => setTimeout(r, ms)); - -let coingeckoMcapsPromise - -async function getCgMcaps() { - if (!coingeckoMcapsPromise) coingeckoMcapsPromise = _getData() - return coingeckoMcapsPromise - - async function _getData() { - const protocolsInChain = await getChainData() - const protocolsWithRouters = Array.from(new Set(protocolsInChain.filter(p => p.type === "router" && p.label !== null).map(p => p.label.toLowerCase()))); - - const coingeckoMcaps = {} - const step = 200; - for (let i = 0; i < protocolsWithRouters.length; i += step) { - console.log(i / step) - const cgUrl = `https://api.coingecko.com/api/v3/simple/price?vs_currencies=usd&include_market_cap=true&ids=${protocolsWithRouters.slice(i, i + step).join(',') - }` - await sleep(1e3) - const partMcaps = await get(cgUrl) - Object.assign(coingeckoMcaps, partMcaps) - } - return coingeckoMcaps - } -} - let chainData async function getChainData() { - if (!chainData) chainData = get('https://netapi.anyswap.net/bridge/v2/info').then(i => i.bridgeList.filter(j => j.amount > 0)) + if (!chainData) chainData = getConfig('anyswap-config', 'https://netapi.anyswap.net/bridge/v2/info').then(i => i.bridgeList.filter(j => j.amount > 0)) return chainData } +const blacklistedTokens = [ + '0xc342774492b54ce5f8ac662113ed702fc1b34972' // BGEO +] + +const EXECUTOR = '0x2A038e100F8B85DF21e4d44121bdBfE0c288A869' +const NEW_ADDR = '0x1eed63efba5f81d95bfe37d82c8e736b974f477b' + function fetchChain(chain) { - return async () => { + return async (_, _1, _2, { api }) => { const data = await getChainData() const protocolsInChain = chain === null ? data : data.filter(p => p.srcChainId.toString() === chain.toString()) - - const coingeckoMcaps = await getCgMcaps(); - const counted = {} - let total = 0 + const tokensAndOwners = [] protocolsInChain.forEach((item) => { - const tvl = Number(item.tvl || 0) - if (item.type === "bridge") { - total += tvl - } else if (item.type === "router") { - const label = item.label - const mcap = coingeckoMcaps[label]?.usd_market_cap - if (counted[label] === undefined) { - counted[label] = 0 + let token = item.srcToken + let owner = item.depositAddr + if (owner.startsWith("0x") && !token.startsWith("0x")) { + sdk.log(chain, 'replace', token, 'with null') + token = ADDRESSES.null } - if (mcap !== undefined && mcap > counted[label]) { - const tvlToAdd = Math.min(tvl, mcap - counted[label]) - total += tvlToAdd - counted[label] += tvlToAdd + tokensAndOwners.push([token, owner]) + tokensAndOwners.push([token, EXECUTOR]) + // tokensAndOwners.push([token, NEW_ADDR]) + } else if (item.type === "router") { + if (item.token === item.srcToken && item.underlying) { + tokensAndOwners.push([item.underlying, item.token]) + tokensAndOwners.push([item.underlying, EXECUTOR]) + // tokensAndOwners.push([item.underlying, NEW_ADDR]) } } }) - return total + + return sumTokens({ api, tokensAndOwners, blacklistedTokens, }) } } @@ -127,7 +109,7 @@ const chainTvls = {} Object.keys(chains).forEach((chain) => { const chainName = chains[chain] chainTvls[chainName] = { - fetch: fetchChain(chain) + tvl: fetchChain(chain) } }) @@ -135,8 +117,9 @@ module.exports = { misrepresentedTokens: true, timetravel: false, ...chainTvls, - fetch: fetchChain(null), - hallmarks:[ + // fetch: fetchChain(null), + hallmarks: [ [1651881600, "UST depeg"], + [1689202800,"Access to Wallets Lost"] ], } diff --git a/projects/aperture/index.js b/projects/aperture/index.js index 52e46a9b58..d7f269fc48 100644 --- a/projects/aperture/index.js +++ b/projects/aperture/index.js @@ -1,69 +1,3 @@ -const { queryContractStore } = require("../helper/chain/terra"); -const { log, sleep } = require("../helper/utils"); -// const fs = require('fs') - - -const TERRA_MANAGER = "terra1ajkmy2c0g84seh66apv9x6xt6kd3ag80jmcvtz"; -const APERTURE_CONTRACT = "terra1jvehz6d9gk3gl4tldrzd8qzj8zfkurfvtcg99x"; -let openPositions = require("./openPositions.json"); -// let data = require("./data.json"); - -const currentQueriedCount = 11190; - -async function terra_tvl() { - let sumTvl = 0; - const { next_position_id } = await queryContractStore({ - contract: TERRA_MANAGER, - queryParam: { get_next_position_id: {} }, - }); - for (let i = currentQueriedCount; i < +next_position_id; i++) - openPositions.push(i); - - log(next_position_id, currentQueriedCount, openPositions.length); - const positions = openPositions.map((_value) => ({ - chain_id: 3, - position_id: `${_value}`, - })); - - const chunkSize = 50; - for (let i = 0; i < positions.length; i += chunkSize) { - log("fetching %s of %s", i, positions.length); - await Promise.all( - positions.slice(i, i + chunkSize).map(async (position) => { - const { - items: [ - { - info: { position_close_info, detailed_info }, - }, - ], - } = await queryContractStore({ - contract: APERTURE_CONTRACT, - queryParam: getQuery(position), - }); - - // if (position_close_info) console.log('closed:', position) - // data[position.position_id] = { position_close_info, detailed_info } - - if (!position_close_info) - // position is closed no need to add it to tvl - sumTvl += +detailed_info.uusd_value; - }) - ); - // fs.writeFileSync(__dirname+'/data.json', JSON.stringify(data, null, 2)) - // if (i < positions.length) sleep(7000) - } - - log("Final UST sum: %s", sumTvl); - - return { - terrausd: sumTvl / 1e6, - }; - - function getQuery(postion) { - return { batch_get_position_info: { positions: [postion] } }; - } -} - const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { default: BigNumber } = require("bignumber.js"); @@ -110,7 +44,7 @@ module.exports = { tvl: avax_tvl, }, terra: { - tvl: terra_tvl, + tvl: () => ({}), }, hallmarks: [[1651881600, "UST depeg"]], }; diff --git a/projects/aperture/openPositions.json b/projects/aperture/openPositions.json deleted file mode 100644 index fcf1602de1..0000000000 --- a/projects/aperture/openPositions.json +++ /dev/null @@ -1 +0,0 @@ -[34,65,79,106,180,182,189,228,235,239,404,429,595,639,658,768,774,793,841,843,845,866,936,1026,1027,1039,1046,1047,1231,1238,1292,1399,1404,1579,1588,1667,1761,1777,1786,1788,1802,1846,1847,1858,1902,1998,2022,2099,2100,2102,2137,2158,2160,2241,2335,2443,2476,2524,2535,2547,2628,2653,2659,2665,2677,2702,2704,2712,2714,2831,2834,2835,2884,2919,2973,2988,3005,3016,3037,3048,3113,3199,3204,3208,3221,3259,3267,3270,3277,3290,3293,3306,3310,3327,3351,3386,3702,3716,3744,3782,3805,3806,3864,3971,3985,4020,4021,4025,4030,4074,4075,4086,4126,4128,4129,4141,4151,4155,4169,4228,4322,4354,4415,4462,4464,4474,4581,4644,4666,4698,4737,4740,4741,4754,4780,4783,4786,4798,4829,4836,4840,4849,4850,4853,4888,4905,4916,4943,5028,5071,5080,5101,5128,5157,5159,5188,5194,5207,5217,5223,5225,5226,5263,5357,5389,5459,5535,5613,5638,5678,5680,5711,5712,5714,5718,5720,5721,5733,5756,5760,5802,6000,6090,6108,6131,6141,6155,6165,6280,6329,6332,6337,6352,6378,6401,6435,6440,6519,6528,6600,6610,6624,6632,6663,6665,6691,6705,6712,6748,6759,6811,6819,6820,6848,6849,6851,6853,6865,6884,6913,6914,6922,6924,6934,6953,6955,6956,6968,6991,7022,7050,7062,7108,7124,7134,7137,7184,7189,7192,7213,7228,7255,7265,7267,7268,7271,7279,7285,7293,7294,7295,7336,7337,7390,7394,7400,7451,7454,7478,7493,7496,7499,7509,7510,7511,7514,7544,7546,7548,7553,7571,7573,7575,7620,7653,7673,7682,7711,7724,7759,7763,7792,7794,7807,7808,7809,7811,7812,7836,7888,7894,7900,7924,7960,7976,7979,8001,8004,8007,8053,8083,8087,8092,8094,8102,8103,8107,8116,8117,8118,8133,8136,8155,8159,8163,8166,8168,8188,8194,8209,8213,8237,8258,8259,8260,8263,8264,8281,8294,8300,8319,8323,8332,8355,8356,8397,8453,8460,8473,8478,8479,8480,8489,8490,8522,8523,8535,8545,8547,8561,8574,8577,8578,8587,8606,8609,8653,8668,8691,8693,8696,8697,8701,8712,8713,8714,8719,8752,8761,8766,8769,8793,8798,8809,8838,8843,8850,8853,8855,8856,8894,8899,8909,8934,8949,8951,8994,8995,9002,9005,9013,9033,9034,9035,9046,9055,9061,9063,9072,9121,9174,9179,9196,9208,9213,9241,9363,9370,9400,9433,9455,9462,9479,9484,9504,9543,9553,9624,9625,9674,9685,9694,9721,9722,9723,9743,9864,9881,9883,9898,9921,9936,9937,9958,9987,9988,10012,10013,10031,10033,10058,10059,10060,10067,10078,10089,10101,10102,10103,10106,10122,10162,10193,10204,10211,10263,10272,10299,10313,10338,10366,10370,10372,10373,10374,10380,10392,10395,10401,10415,10441,10471,10481,10483,10549,10553,10555,10556,10557,10559,10563,10566,10583,10624,10655,10696,10697,10711,10724,10731,10750,10778,10822,10862,10910,10949,10952,10954,10959,11003,11017,11019,11021,11022,11042,11048,11063,11066,11090,11148,11151,11152,11155,11165,11177,11182] \ No newline at end of file diff --git a/projects/aperture/updateScript.js b/projects/aperture/updateScript.js deleted file mode 100644 index 5954152702..0000000000 --- a/projects/aperture/updateScript.js +++ /dev/null @@ -1,16 +0,0 @@ - -const fs = require('fs') -let openPositions = require("./openPositions.json"); -let data = require("./data.json"); - -console.log(openPositions.length) -openPositions = openPositions.filter(i => { - const key = i+'' - const val = data[key] - if (!val) return true - if (val.position_close_info) return false - const usdVal = val.detailed_info.uusd_value / 1e6 - return usdVal > 1e3 * 3 -}) -console.log(openPositions.length) -console.log(JSON.stringify(openPositions)) \ No newline at end of file diff --git a/projects/apex/index.js b/projects/apex/index.js index c4985994bb..b07ea7615c 100644 --- a/projects/apex/index.js +++ b/projects/apex/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const tokens = [ - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + ADDRESSES.ethereum.USDC, ]; const owners = [ diff --git a/projects/apexswap/index.js b/projects/apexswap/index.js index f7b34fe421..cbadf3ab1e 100644 --- a/projects/apexswap/index.js +++ b/projects/apexswap/index.js @@ -2,6 +2,9 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, + hallmarks: [ + [1665532800, "Rug Pull"] + ], avax: { tvl: getUniTVL({ factory: '0x21cadeb92c8bbfbef98c3098846f0999209c3a97', diff --git a/projects/api3/index.js b/projects/api3/index.js index 38bd86490f..c94505487d 100644 --- a/projects/api3/index.js +++ b/projects/api3/index.js @@ -3,7 +3,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const api3_token = '0x0b38210ea11411557c13457d4da7dc6ea731b88a' const api3_dao_pool = '0x6dd655f10d4b9e242ae186d9050b68f725c76d76' -const api3CirculatingSupply = "cD34bC5B03C954268d27c9Bc165a623c318bD0a8" +const api3CirculatingSupply = "0xcD34bC5B03C954268d27c9Bc165a623c318bD0a8" const stakingTVL = async (timestamp, ethBlock, chainBlocks, { api }) => { const balances = {} diff --git a/projects/apollodao/index.js b/projects/apollodao/index.js index 49a7d2097a..6ef923eeab 100644 --- a/projects/apollodao/index.js +++ b/projects/apollodao/index.js @@ -1,13 +1,97 @@ // vaults are closed: https://articles.apollo.farm/apollo-dao-will-be-closing-vaults-on-terra-classic/ +const axios = require("axios"); +const { endPoints, queryContract } = require('../helper/chain/cosmos') + +const chain = 'osmosis' + +const contractAddresses = { + atom_statom: "osmo1a6tcf60pyz8qq2n532dzcs7s7sj8klcmra04tvaqympzcvxqg9esn7xz7l", + atom_osmo: "osmo1g3kmqpp8608szfp0pdag3r6z85npph7wmccat8lgl3mp407kv73qlj7qwp", + usdc_osmo: "osmo1jfmwayj8jqp9tfy4v4eks5c2jpnqdumn8x8xvfllng0wfes770qqp7jl4j", + st_osmo_osmo: "osmo1p4zqs5y2w5srzd2vesznzu5ql8wfq9tpz3e7mf2j3y07nxrtkdes5r5g0t", + wbtc_osmo: "osmo185gqewrlde8vrqw7j8lpad67v8jfrx9u7770k9q87tqqecctp5tq50wt2c", + strd_osmo: "osmo1e3qjfcg9adrauz6jg030ptfy35r6zzplsgaavnn6xrh6686udhfqq7muwy", + evmos_osmo: "osmo1rkv6vcmty4rpypuxp2a6a0y5ze4ztm3y6d6xwy5a7cye85f7reqsm85c5s", + juno_osmo: "osmo1ceku0zks6y43r9l35n7wnv5pf82s6l4k5jhlrhkurakeemey9n4snz3x6z", + weth_osmo: "osmo1r235f4tdkwrsnj3mdm9hf647l754y6g6xsmz0nas5r4vr5tda3qsgtftef", + ist_osmo: "osmo1qajgwrcce9srkq370pa9ew96dyk4hajyyk6rfpuexrktm8862xnst443kp", + ion_osmo: "osmo1869zena97sctemj78sgjmu737p2g94905hsf3hhkrfgummrfz4tsxj2k6r", + cro_osmo: "osmo1gmd2vc4crmv7urlfn3j5avhplfncjf5mg649dkgsu5a0zvd6cgrsn9dq4l", + axl_osmo: "osmo1m9e4cks405tvzlppkw64znr35vkvujvptrdqtgu5q6luk4ccw9qqeuenwd", + dai_osmo: "osmo1lhs6kyuxytu4suua0qf88z5057wzpxs77tyrlgztw2uctcy75hcqf2ajrt", + akt_osmo: "osmo122ryl7pez7yjprtvjckltu2uvjxrq3kqt4nvclax2la7maj6757qg054ga", +}; + +async function tvl(_, _1, _2, { api }) { + if (api.chain != "osmosis") return {} + for (const contractName in contractAddresses) { + let contractAddress = contractAddresses[contractName]; + let vaultInfo = await queryContract({ + contract: contractAddress, + chain: 'osmosis', + data: { 'info': {} } + }); + const gammToken = vaultInfo.base_token; + const poolID = gammToken.split('gamm/pool/')[1]; + let totalAssets = await queryContract({ + contract: contractAddress, + chain: 'osmosis', + data: { 'total_assets': {} } + }); + + let poolEndpoint = `${endPoints[chain]}/osmosis/gamm/v1beta1/pools/${poolID}`; + const poolData = (await axios.get(poolEndpoint)).data.pool; + + let amount = calculateTokenAmounts(poolData, totalAssets) + for (const denom in amount) { + api.add(denom, amount[denom]) + } + } +} + +function calculateTokenAmounts(poolData, gammAmount) { + // Extract the total pool shares. + let totalShares = poolData.total_shares.amount; + + // Initialize an object to hold the amounts of each token. + let tokenAmounts = {}; + + // For each token in the pool... + if (typeof poolData.pool_assets !== "undefined") { + for (let asset of poolData.pool_assets) { + // Extract the token's denom and amount. + let denom = asset.token.denom; + let assetAmount = asset.token.amount; + + // Calculate the amount of this token that corresponds to the given amount of pool shares. + tokenAmounts[denom] = (gammAmount * assetAmount) / totalShares; + } + } else { + for (let asset of poolData.pool_liquidity) { + // Extract the token's denom and amount. + let denom = asset.denom; + let assetAmount = asset.amount; + + // Calculate the amount of this token that corresponds to the given amount of pool shares. + tokenAmounts[denom] = (gammAmount * assetAmount) / totalShares; + } + } + + return tokenAmounts; +} module.exports = { timetravel: false, methodology: "Total TVL on vaults", terra: { - tvl: () => ({}) + tvl: () => 0 + }, + osmosis: { + tvl, }, -}, - module.exports.hallmarks = [ + hallmarks: [ [1651881600, "UST depeg"], [Math.floor(new Date('2022-09-13') / 1e3), 'Stop supporting Terra Classic'], - ] + [Math.floor(new Date('2023-02-16') / 1e3), 'Relaunch on Osmosis '], + ], +} diff --git a/projects/apollox/index.js b/projects/apollox/index.js index 9caa8a31d1..85e0e24846 100644 --- a/projects/apollox/index.js +++ b/projects/apollox/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { pool2s } = require("../helper/pool2"); const { stakings } = require("../helper/staking"); const { sumTokens, sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); @@ -12,17 +13,20 @@ const daoContract = "0x7f878994507F5B0588cF0EBEE07128d9A742ad9d"; const ALPContract = "0x1b6F2d3844C6ae7D56ceb3C3643b9060ba28FEb0"; const TOKEN_APX = "0x78f5d389f5cdccfc41594abab4b0ed02f31398b3"; -const TOKEN_BSC_USD = "0x55d398326f99059fF775485246999027B3197955"; -const TOKEN_BUSD = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const TOKEN_BSC_USD = ADDRESSES.bsc.USDT; +const TOKEN_BUSD = ADDRESSES.bsc.BUSD; const TOKEN_CAKE = "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82"; const TOKEN_BABY = "0x53e562b9b7e5e94b81f10e96ee70ad06df3d2657"; const TOKEN_LEOS = "0x2c8368f8f474ed9af49b87eac77061beb986c2f1"; -const TOKEN_USDC = "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"; +const TOKEN_USDC = ADDRESSES.bsc.USDC; const TOKEN_VUSDT = "0xfD5840Cd36d94D7229439859C0112a4185BC0255"; const TOKEN_BANANA = "0x603c7f932ED1fc6575303D8Fb018fDCBb0f39a95"; const TOKEN_MDX = "0x9c65ab58d8d978db963e63f2bfb7121627e3a739"; const TOKEN_HAY = "0x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5"; +const TOKEN_BTC = "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"; +const TOKEN_BNB = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; + const TreasureTokens = [ // TOKEN_APX, nullAddress, @@ -38,11 +42,21 @@ const TreasureTokens = [ TOKEN_HAY, ]; +const ALPTokens = [ + nullAddress, + TOKEN_BSC_USD, + TOKEN_BUSD, + TOKEN_USDC, + TOKEN_BTC, + TOKEN_BNB, + TOKEN_HAY, +] + async function tvl(timestamp, _block, { bsc: block }) { - const toa = TreasureTokens.map((t) => [t, treasureContract]); - toa.push([TOKEN_BSC_USD, ALPContract]); - toa.push([TOKEN_BUSD, ALPContract]); - toa.push([TOKEN_USDC, ALPContract]); + const toa = [ + ...TreasureTokens.map((t) => [t, treasureContract]), + ...ALPTokens.map((t) => [t, ALPContract]), + ] return sumTokens({}, toa, block, "bsc"); } @@ -56,17 +70,23 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owner: '0xb40EEd68d7d6B3b6d6f4E93DE6239B7C53EFc786', tokens: [ nullAddress, - '0xdac17f958d2ee523a2206206994597c13d831ec7', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - '0x4fabb145d64652a948d72533023f6e7a623c7c53', + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.BUSD, '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', ]}) }, arbitrum: { tvl: sumTokensExport({ owner: '0xbad4ccc91ef0dfffbcab1402c519601fbaf244ef', tokens: [ nullAddress, - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDT, + ]}) + }, + era: { + tvl: sumTokensExport({ owner: '0xD6f4e33063C881cE9a98e07E13673B92a637D908', tokens: [ + nullAddress, + ADDRESSES.era.USDC, ]}) }, }; diff --git a/projects/apricot.js b/projects/apricot.js index c999ac7641..af44d6dcff 100644 --- a/projects/apricot.js +++ b/projects/apricot.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens2, sumOrcaLPs } = require('./helper/solana') async function tvl() { @@ -28,13 +29,13 @@ async function tvl() { } const owner = '7Ne6h2w3LpTNTa7CNYcUs7UkjeJT3oW7jcrXWfVScTXW' const tokens = [ - 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + ADDRESSES.solana.USDC, '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E', '2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk', 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', - 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', + ADDRESSES.solana.USDT, '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R', - 'So11111111111111111111111111111111111111112', + ADDRESSES.solana.SOL, '9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i', 'orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE', ] diff --git a/projects/apwine/index.js b/projects/apwine/index.js index 425343c45a..5b46bc7518 100644 --- a/projects/apwine/index.js +++ b/projects/apwine/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const abi = require("./abi.json") const {sumTokens} = require("../helper/unwrapLPs.js") @@ -12,8 +13,8 @@ const AMMregistry = '0x6646A35e74e35585B0B02e5190445A324E5D4D01' const transformMapping_ethereum = { '0xaC14864ce5A98aF3248Ffbf549441b04421247D3': '0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f', // xSDT -> SDT '0x6b1D394Ca67fDB9C90BBd26FE692DdA4F4f53ECD': '0xcafe001067cdef266afb7eb5a286dcfd277f3de5', // sPSP_PP4 -> PSP - '0xA991356d261fbaF194463aF6DF8f0464F8f1c742': '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // tfUSDC -> USDC - '0x24E79e946dEa5482212c38aaB2D0782F04cdB0E0': '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', // palStkAave -> AAVE + '0xA991356d261fbaF194463aF6DF8f0464F8f1c742': ADDRESSES.ethereum.USDC, // tfUSDC -> USDC + '0x24E79e946dEa5482212c38aaB2D0782F04cdB0E0': ADDRESSES.ethereum.AAVE, // palStkAave -> AAVE } const transformMapping_polygon = { } @@ -85,7 +86,7 @@ const tvl_from_registry = (chain) => { })), block, chain, - })).output.filter(v=>v.output !== "0x0000000000000000000000000000000000000000") + })).output.filter(v=>v.output !== ADDRESSES.null) const {output: underlyingOfIBTAddresses} = await sdk.api.abi.multiCall({ abi: abi['ammPool_getUnderlyingOfIBTAddress'], calls: ammPools.map((vault) => ({ diff --git a/projects/aquarius/index.js b/projects/aquarius/index.js index 0fcc342ec3..9b6d3c1935 100644 --- a/projects/aquarius/index.js +++ b/projects/aquarius/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {getLiquityTvl} = require('../helper/liquity') -const FTM_ADDRESS = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83'; +const FTM_ADDRESS = ADDRESSES.fantom.WFTM; const TROVE_MANAGER_ADDRESS = "0xC87D230B3239d1A90463463d8adDFD70709D391b"; module.exports = { diff --git a/projects/arbicheems/index.js b/projects/arbicheems/index.js index bded1bd93a..b1e6962476 100644 --- a/projects/arbicheems/index.js +++ b/projects/arbicheems/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakingUnknownPricedLP } = require("../helper/staking"); const { pool2Exports } = require("../helper/pool2"); @@ -5,7 +6,7 @@ const { pool2Exports } = require("../helper/pool2"); const cheems = "0x75a2f30929C539E7d4eE033c9331b89F879c0cf7"; const stakingContract = "0xaaCcB989FE1084c6935f09aE4BBD49AfF58Bdb94"; -const mim = "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a"; +const mim = ADDRESSES.arbitrum.MIM; const mimPool = "0x79F12596B78F9E982bDaB6e2d83D4bc155672372"; const ethPool = "0xd495Beb0011e3DFEC0C93376f5216C1C3dD01C23"; @@ -24,7 +25,7 @@ async function tvl(timestamp, block, chainBlocks) { ).output; sdk.util.sumSingleBalance( balances, - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + ADDRESSES.ethereum.WETH, ethBal ); diff --git a/projects/arbidragon/index.js b/projects/arbidragon/index.js deleted file mode 100644 index a6ffc5a2e0..0000000000 --- a/projects/arbidragon/index.js +++ /dev/null @@ -1,17 +0,0 @@ -const { getUniTVL, sumTokensExport } = require('../helper/unknownTokens') -const ARBID = "0xf3f45fA22c374c82Ca8573FFCb8D529B9e1A27A1"; - -const dexTVL = getUniTVL({ factory: '0xC9E7aC651Bc55EcF554f53bB4B6e17b9A1A22A84', useDefaultCoreAssets: true }) - - -module.exports = { - misrepresentedTokens: true, - methodology: `Uses factory(0xC9E7aC651Bc55EcF554f53bB4B6e17b9A1A22A84) address and whitelisted tokens address to find and price Liquidity Pool pairs. We also have our native token $ARBID staking.`, - arbitrum: { - tvl: dexTVL, - staking: sumTokensExport({ - owners: ['0x121ce0D6974e7aF53D9158178AE3A404B45cF7ad', '0xA73e49336e8c256017A00428b250Cd095b25555E'], - tokens: [ARBID], - }) - } -}; diff --git a/projects/arbinyan/index.js b/projects/arbinyan/index.js index 3ae47dfde2..f977cef403 100644 --- a/projects/arbinyan/index.js +++ b/projects/arbinyan/index.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const BigNumber = require("bignumber.js"); const stakingETHContract = "0x9F7968de728aC7A6769141F63dCA03FD8b03A76F"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH = ADDRESSES.ethereum.WETH; const stakingNYANContract = "0x32e5594F14de658b0d577D6560fA0d9C6F1aa724"; const NYAN = "0xed3fb761414da74b74f33e5c5a1f78104b188dfc"; const stakingPool2Contract = "0x62FF5Be795262999fc1EbaC29277575031d2dA2C"; const NYAN_WETH_SLP = "0x70Df9Dd83be2a9F9Fcc58Dd7C00d032d007b7859"; -const WETH_arb = "0x82af49447d8a07e3bd95bd0d56f35241523fbab1"; +const WETH_arb = ADDRESSES.arbitrum.WETH; async function pool2(time, ethBlock, chainBlocks) { const balances = {}; diff --git a/projects/arbitrove/index.js b/projects/arbitrove/index.js new file mode 100644 index 0000000000..08ae691e02 --- /dev/null +++ b/projects/arbitrove/index.js @@ -0,0 +1,21 @@ +const { getLogs } = require('../helper/cache/getLogs'); +const { nullAddress, } = require('../helper/unwrapLPs'); +const ALP_TOKEN = '0xb49B6A3Fd1F4bB510Ef776de7A88A9e65904478A'; + +async function tvl(_, _b, _cb, { api }) { + const logs = await getLogs({ + api, + target: ALP_TOKEN, + topic: 'SetCoinCap(address,uint256)', + eventAbi: 'event SetCoinCap(address indexed coin, uint256 indexed cap)', + onlyArgs: true, + fromBlock: 67635825, + }) + return api.sumTokens({ owners: [ALP_TOKEN], tokens: [nullAddress, ...logs.map(l => l.coin)]}) +} + +module.exports = { + arbitrum: { + tvl, + } +} \ No newline at end of file diff --git a/projects/arbitrumexchange-v3/index.js b/projects/arbitrumexchange-v3/index.js new file mode 100644 index 0000000000..e357728820 --- /dev/null +++ b/projects/arbitrumexchange-v3/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + arbitrum: { + factory: "0x855f2c70cf5cb1d56c15ed309a4dfefb88ed909e", + fromBlock: 86863305, + }, +}); \ No newline at end of file diff --git a/projects/arcadia-finance/helper/abi.json b/projects/arcadia-finance/helper/abi.json new file mode 100644 index 0000000000..f12130f7db --- /dev/null +++ b/projects/arcadia-finance/helper/abi.json @@ -0,0 +1,8 @@ +{ + "totalRealisedLiquidity": "uint128:totalRealisedLiquidity", + "totalUnrealisedLiquidity": "uint256:calcUnrealisedDebt", + "vaultLength": "uint256:allVaultsLength", + "vaultAddress": "function allVaults(uint256) view returns (address)", + "assetData": "function generateAssetData() view returns (address[], uint256[], uint256[])", + "assetsInPricingModule": "function assetsInPricingModule(uint256) view returns (address)" +} \ No newline at end of file diff --git a/projects/arcadia-finance/helper/index.js b/projects/arcadia-finance/helper/index.js new file mode 100644 index 0000000000..cc4aaaf409 --- /dev/null +++ b/projects/arcadia-finance/helper/index.js @@ -0,0 +1,38 @@ +const { sumTokens2 } = require('../../helper/unwrapLPs') +const abi = require("./abi.json") + +const config = { + optimism: { + factory: "0x00CB53780Ea58503D3059FC02dDd596D0Be926cB", + pools: { + wethPool: "0xD417c28aF20884088F600e724441a3baB38b22cc", + usdcPool: "0x9aa024D3fd962701ED17F76c17CaB22d3dc9D92d" + } + }, + ethereum: { + factory: "0x00CB53780Ea58503D3059FC02dDd596D0Be926cB", + pools: { + wethPool: "0xD417c28aF20884088F600e724441a3baB38b22cc", + usdcPool: "0x9aa024D3fd962701ED17F76c17CaB22d3dc9D92d", + } + } +} + + +async function tvl(_, _b, _cb, { api, }) { + const { chain } = api + let { factory, pools } = config[chain] + pools = Object.values(pools) + const poolAssets = await api.multiCall({ abi: 'address:asset', calls: pools }) + + const vaults = await api.fetchList({ lengthAbi: abi.vaultLength, itemAbi: abi.vaultAddress, target: factory, }) + const assetData = await api.multiCall({ abi: abi.assetData, calls: vaults, }) + + assetData.forEach((assetsInVaults) => api.addTokens(assetsInVaults[0], assetsInVaults[2])) + + return sumTokens2({ api, tokensAndOwners2: [poolAssets, pools, ]}) +} + +module.exports = { + tvl, +}; \ No newline at end of file diff --git a/projects/arcadia-finance/index.js b/projects/arcadia-finance/index.js new file mode 100644 index 0000000000..a9d10c7b41 --- /dev/null +++ b/projects/arcadia-finance/index.js @@ -0,0 +1,12 @@ +const { tvl, } = require("./helper"); + +module.exports = { + methodology: + "TVL includes ERC-20 tokens that have been supplied as collateral as well as ERC-20 tokens that are supplied by liquidity providers.", + optimism: { tvl }, + ethereum: { tvl }, + start: 1686391200, // Jun 10 2023 10:00:00 GMT+0000 + hallmarks: [ + [Math.floor(new Date('2023-07-10')/1e3), 'Protocol was exploited.'], + ], +} \ No newline at end of file diff --git a/projects/archi-finance/abi.json b/projects/archi-finance/abi.json new file mode 100644 index 0000000000..b2575606de --- /dev/null +++ b/projects/archi-finance/abi.json @@ -0,0 +1,10 @@ +{ + "getTokenPrice": "function getTokenPrice(address _token) view returns (uint256)", + "getGlpPrice": "function getGlpPrice(bool _isBuying) view returns (uint256 price)", + "borrowedRewardPool": "address:borrowedRewardPool", + "supplyRewardPool": "address:supplyRewardPool", + "workingBalance": "function workingBalance(address[] _vaults) view returns (address[], uint256[])", + "borrowedBalance": "function borrowedBalance(address[] _vaults) view returns (address[], uint256[])", + "lockedBalance": "function lockedBalance(address[] _vaults) view returns (address[], uint256[])", + "debtBalance": "function debtBalance(address[] _vaults) view returns (address[], uint256[])" + } \ No newline at end of file diff --git a/projects/archi-finance/index.js b/projects/archi-finance/index.js new file mode 100644 index 0000000000..d3fe496136 --- /dev/null +++ b/projects/archi-finance/index.js @@ -0,0 +1,51 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require("../helper/unwrapLPs"); +const ABI = require("./abi.json"); + +const addresses = { + vaultInfo: "0x73956FF7375476EBFD5e82d80Ea9065a5bCc3d2b", + collateralPoolAddress: "0xbd198617aD1dc75B0f7A0A67BbE31993919Cd716", + fsGlpAddress: ADDRESSES.arbitrum.fsGLP, + fsGlpHolders: ["0x65C59eE732BD249224718607Ee0EC0e293309923", "0x49EE14e37Cb47bff8c512B3A0d672302A3446eb1"], + vaults: [ + // weth pool + "0x7674Ccf6cAE51F20d376644C42cd69EC7d4324f4", + // usdt pool + "0x179bD8d1d654DB8aa1603f232E284FF8d53a0688", + // usdc pool + "0xa7490e0828Ed39DF886b9032ebBF98851193D79c", + // wbtc pool + "0xee54A31e9759B0F7FDbF48221b72CD9F3aEA00AB", + // dai pool + "0x4262BA30d5c1bba98e9E9fc3c40602a7E09Ca49F", + // link pool + "0xB86a783C329d5D0CE84093757586F5Fd5364cd71", + // uni pool + "0xAf2a336AE86eF90a3958F4bFC6EFc23cD6190951", + // frax pool + "0x2032998a5312B88f6b4d2b86638Be31B20d1B573", + // mim pool + "0xbd70E8712264D6A62a7A6BD255A59992068adCAd" + ] +} + +async function tvl(timestamp, block, chainBlocks, { api }) { + const tokens = await api.multiCall({ abi: 'address:underlyingToken', calls: addresses.vaults }) + const tokensAndOwners = tokens.map((v, i) => [v, addresses.vaults[i]]) + addresses.fsGlpHolders.forEach(i => tokensAndOwners.push([addresses.fsGlpAddress, i])) + + return sumTokens2({ api, tokensAndOwners}) +} + +async function borrowed(timestamp, block, chainBlocks, { api }) { + const borrowedBalance = await api.call({ target: addresses.vaultInfo, abi: ABI.borrowedBalance, params: [addresses.vaults] }); + api.addTokens(borrowedBalance[0], borrowedBalance[1]); +} + +module.exports = { + methodology: "The TVL (Total Value Locked) of ArchiFinance is calculated by adding the total liquidity and borrowing amount.", + arbitrum: { + tvl, + borrowed, + }, +}; \ No newline at end of file diff --git a/projects/archly-finance/index.js b/projects/archly-finance/index.js index 070bfe879c..916d76bc29 100644 --- a/projects/archly-finance/index.js +++ b/projects/archly-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, sumTokensExport } = require('../helper/unknownTokens') const ARCHLY_FACTORY_OTHER = "0xBa06043a777652BAF540CcC785EDaFd94eE05b37" @@ -11,7 +12,7 @@ module.exports = { owner: '0x5680b3059b860d07A33B7A43d03D2E4dEdb226BB', tokens: ['0xa84df7aFbcbCC1106834a5feD9453bd1219B1fb5'], lps: ['0x34480A4C917caDbE41cb805f3e3baDb93bD9068C'], - coreAssets: ['0xD102cE6A4dB07D247fcc28F366A623Df0938CA9E'], + coreAssets: [ADDRESSES.telos.WTLOS], restrictTokenRatio: 100, }) }, @@ -21,7 +22,7 @@ module.exports = { owner: '0x4c01dF6B9be381BA2a687D0ED5c40039dEEaf0a9', tokens: ['0x9435Ffb33Ce0180F55E08490C606eC3BD07da929'], lps: ['0x6083E6F4c0f9826e60D0180A00203F7A70C1aC25'], - coreAssets: ['0x82af49447d8a07e3bd95bd0d56f35241523fbab1'], + coreAssets: [ADDRESSES.arbitrum.WETH], restrictTokenRatio: 100, }) }, @@ -31,7 +32,7 @@ module.exports = { owner: ARCHLY_VE_TOKEN_OTHER, tokens: [ARCHLY_ARC_TOKEN_OTHER], lps: ['0xC8Cb0012BBBEFE6E04d9A58fFb5b9A623f4EC40c'], - coreAssets: ['0x722e8bdd2ce80a4422e880164f2079488e115365'], + coreAssets: [ADDRESSES.arbitrum_nova.WETH], restrictTokenRatio: 100, }) }, @@ -41,7 +42,7 @@ module.exports = { owner: ARCHLY_VE_TOKEN_OTHER, tokens: [ARCHLY_ARC_TOKEN_OTHER], lps: ['0x3a1c6C7Ced1c14e07385582c5bB82eFBA4df4f19'], - coreAssets: ['0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'], + coreAssets: [ADDRESSES.bsc.WBNB], restrictTokenRatio: 100, }) }, @@ -51,7 +52,7 @@ module.exports = { owner: ARCHLY_VE_TOKEN_OTHER, tokens: [ARCHLY_ARC_TOKEN_OTHER], lps: ['0xe962fEF0e7cE6D666359Dab6127f6f8d814aC1a9'], - coreAssets: ['0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83'], + coreAssets: [ADDRESSES.fantom.WFTM], restrictTokenRatio: 100, }) }, @@ -61,7 +62,7 @@ module.exports = { owner: ARCHLY_VE_TOKEN_OTHER, tokens: [ARCHLY_ARC_TOKEN_OTHER], lps: ['0x008C71505A2e110d1FFAA402B01aeb202fb107dB'], - coreAssets: ['0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b'], + coreAssets: [ADDRESSES.kava.WKAVA], restrictTokenRatio: 100, }) }, @@ -71,7 +72,7 @@ module.exports = { owner: ARCHLY_VE_TOKEN_OTHER, tokens: [ARCHLY_ARC_TOKEN_OTHER], lps: ['0xc492BCa6777818256C2e2e5FC8e180BC8697DfF5'], - coreAssets: ['0x4200000000000000000000000000000000000006'], + coreAssets: [ADDRESSES.tombchain.FTM], restrictTokenRatio: 100, }) }, @@ -81,7 +82,7 @@ module.exports = { owner: ARCHLY_VE_TOKEN_OTHER, tokens: [ARCHLY_ARC_TOKEN_OTHER], lps: ['0x2651D7B53BaF1925D28A3b5A3ef371274e630C4C'], - coreAssets: ['0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270'], + coreAssets: [ADDRESSES.polygon.WMATIC_2], restrictTokenRatio: 100, }) } diff --git a/projects/arctic/index.js b/projects/arctic/index.js index 37df6a205f..7fa52d14ea 100644 --- a/projects/arctic/index.js +++ b/projects/arctic/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') let abi = require('./abi') const { sumTokens2, } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null const poolHelper = '0xE78e7447223aaED59301b44513D1d3A892ECF212' module.exports = { diff --git a/projects/argano/index.js b/projects/argano/index.js index d1ed996050..05a6acc78f 100644 --- a/projects/argano/index.js +++ b/projects/argano/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { sumTokensExport } = require('../helper/unwrapLPs') const { getUniTVL } = require('../helper/unknownTokens') @@ -5,9 +6,9 @@ const { getUniTVL } = require('../helper/unknownTokens') const contracts = { factory: '0xdAc31E70c2C4Fea0629e85e7B67222127A8672d8', usdtPool: '0x250EFcd45D9f83036f2D403223c7cCb2E1e9D00b', - usdt: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', + usdt: ADDRESSES.polygon.USDT, wbtcPool: '0x610094adF401626D6B62df62bF6E67A7A6E22043', - wbtc: '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6' + wbtc: ADDRESSES.polygon.WBTC }; module.exports = { diff --git a/projects/arkadiko.js b/projects/arkadiko.js index 3961e42504..681d706a4c 100644 --- a/projects/arkadiko.js +++ b/projects/arkadiko.js @@ -1,39 +1,27 @@ -const { get } = require('./helper/http') -// node test.js projects/arkadiko.js -async function tvl() { - let balances = {}; - const dikoPrice = (await get("https://arkadiko-api.herokuapp.com/api/v1/tokens/diko"))["price_in_cents"]; - const response = (await get("https://arkadiko-api.herokuapp.com/api/v1/pools")); - - for (let pool of response.pools) { - balances[pool.token_y_name] = - pool.token_y_name in balances - ? Number(balances[pool.token_y_name]) + Number(pool.tvl_token_y) - : Number(pool.tvl_token_y); - balances[pool.token_x_name] = - pool.token_x_name in balances - ? Number(balances[pool.token_x_name]) + Number(pool.tvl_token_x) - : Number(pool.tvl_token_x); - } +const { sumTokens } = require('./helper/chain/stacks') - balances["blockstack"] = balances["wrapped-stx-token"] / 10 ** 6; - delete balances["wrapped-stx-token"]; - balances["usd-coin"] = balances["usda-token"] / 10 ** 6; - delete balances["usda-token"]; - balances["usd-coin"] = - Number(balances["usd-coin"]) + - Number(balances["arkadiko-token"] / 10 ** 8) * dikoPrice; - delete balances["arkadiko-token"]; - balances["wrapped-bitcoin"] = balances["Wrapped-Bitcoin"] / 10 ** 8; - delete balances["Wrapped-Bitcoin"] - - return balances; +async function tvl() { + // https://info.arkadiko.finance/balances + return sumTokens({ + owners: [ + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stx-reserve-v1-1', // stacks reserve + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-sip10-reserve-v2-1', // other vaults + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stacker-v3-1', // PoX stackers + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stacker-2-v3-1', + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stacker-3-v3-1', + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stacker-4-v3-1', + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-swap-v2-1', // swap tokens + ], + blacklistedTokens: [ + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.wrapped-stx-token::wstx', + 'stacks:SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-token::diko', + 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.usda-token::usda', + ] + }) } module.exports = { - misrepresentedTokens: true, stacks: { tvl, }, }; -// node test.js projects/arkadiko.js diff --git a/projects/armorfinance/index.js b/projects/armorfinance/index.js index f559dc1577..d30679b7ed 100644 --- a/projects/armorfinance/index.js +++ b/projects/armorfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens2, nullAddress, } = require("../helper/unwrapLPs"); @@ -6,9 +7,9 @@ const { staking } = require("../helper/staking"); const POOL_BUYCOVER_ACTION = "0xcafea35cE5a2fc4CED4464DA4349f81A122fd12b"; const NXM_VAULT = "0x1337DEF1FC06783D4b03CB8C1Bf3EBf7D0593FC4"; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; +const DAI = ADDRESSES.ethereum.DAI; const NXM = "0xd7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b"; -const stETH = "0xae7ab96520de3a18e5e111b5eaab095312d7fe84"; +const stETH = ADDRESSES.ethereum.STETH; const ethTvl = async (timestamp, block) => { let balances = {}; diff --git a/projects/arpa-staking/index.js b/projects/arpa-staking/index.js new file mode 100644 index 0000000000..e079e77122 --- /dev/null +++ b/projects/arpa-staking/index.js @@ -0,0 +1,16 @@ +const STAKING_CONTRACT = "0xee710f79aa85099e200be4d40cdf1bfb2b467a01"; +const ARPA = "0xBA50933C268F567BDC86E1aC131BE072C6B0b71a"; + +const staking = async (_, _1, _2, { api }) => { + const val = await api.call({ target: STAKING_CONTRACT, abi: 'uint256:getTotalCommunityStakedAmount', }); + api.add(ARPA, val) + return api.getBalances() +}; + +module.exports = { + methodology: "TVL is the total amount of ARPA staked by the community", + ethereum: { + tvl: () => ({}), + staking, + }, +}; diff --git a/projects/array-capital/index.js b/projects/array-capital/index.js index 7e2cdbc13e..c878cc4a74 100644 --- a/projects/array-capital/index.js +++ b/projects/array-capital/index.js @@ -1,7 +1,7 @@ const { staking } = require('../helper/staking'); -const token = "0x53Fd70B568e5C8DACe2cE3c38E650F5924BeB1c1"; -const masterchef = "0xA55Cb77E8CeBc3fe517044d0AaA923d541a69e71"; +const token = "0x164731cd270daa4a94bc70761e53320e48367b8b"; +const masterchef = "0x1b91b24d12C934383f25aa07C2c9C9666accf39e"; module.exports = { arbitrum: { diff --git a/projects/artemis/index.js b/projects/artemis/index.js index 54d33d28a0..1d598524d1 100644 --- a/projects/artemis/index.js +++ b/projects/artemis/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { masterchefExports, } = require("../helper/unknownTokens") -const token = "0xd74433b187cf0ba998ad9be3486b929c76815215"; +const token = ADDRESSES.harmony.MIS; const masterchef = "0x59c777cd749b307be910f15c54a3116ff88f9706"; module.exports = masterchefExports({ diff --git a/projects/arthswap/index.js b/projects/arthswap/index.js index 4b4d3fd40c..c490dbbd60 100644 --- a/projects/arthswap/index.js +++ b/projects/arthswap/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require("../helper/unknownTokens"); const { stakingPricedLP } = require("../helper/staking"); const FACTORIES = "0xA9473608514457b4bF083f9045fA63ae5810A03E"; const TOKENS = { - ARSW: "0xDe2578Edec4669BA7F41c5d5D2386300bcEA4678", + ARSW: ADDRESSES.astar.ARSW, }; const STAKING_CONTRACTS = { diff --git a/projects/asgard-dao/index.js b/projects/asgard-dao/index.js index f4269fa8c9..797b36f78b 100644 --- a/projects/asgard-dao/index.js +++ b/projects/asgard-dao/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {ohmTvl} = require("../helper/ohm"); const treasury = "0xFb445ce1CFE11B86505dD293f1bE438fFaa4fF8c"; const treasuryTokens = [ ["0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", false], // DAI - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], // WBNB + [ADDRESSES.bsc.BUSD, false], // BUSD + [ADDRESSES.bsc.WBNB, false], // WBNB ["0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", false], // CAKE - ["0x55d398326f99059ff775485246999027b3197955", false], // USDT + [ADDRESSES.bsc.USDT, false], // USDT ["0xE119c951b68555d50eB6Aa54b5Cf0b854715CB2c", true], // ASGARD-WBNB CAKE LP ["0x11ceddd7a64ec79212d8ae9c8b46d23b8b750db0", true], // ASGARD-BUSD CAKE LP ["0xE5E926c8Ca7A44F7FFD900F5a88eA33E2B07162D", true] // ASGARD-DAI CAKE LP diff --git a/projects/asgardfinance/index.js b/projects/asgardfinance/index.js index af74f4378b..bf5323aaa8 100644 --- a/projects/asgardfinance/index.js +++ b/projects/asgardfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -6,9 +7,9 @@ const ASG = "0x0DC5189Ec8CDe5732a01F0F592e927B304370551"; const AsgardTreasury = "0x9D5818af130705F95444d78A55B4F3d85cBfCC13"; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; +const DAI = ADDRESSES.ethereum.DAI; const ASG_DAI_SLP = "0x024cc95611d478dd367240e72c82662d9e390a6a"; -const FRAX = "0x853d955acef822db058eb8505911ed77f175b99e"; +const FRAX = ADDRESSES.ethereum.FRAX; const ASG_FRAX_SLP = "0x5696cd9054ce11625141f5ee2c65fc4d57c2a5ca"; const WUST = "0xa47c8bf37f92abed4a126bda807a7b7498661acd"; const ASG_UST_SLP = "0x5a1abc007f031aa58238f45941d965ce6892fdff"; @@ -55,6 +56,9 @@ async function ethTvl(timestamp, block) { } module.exports = { + hallmarks: [ + [1643155200, "Token mint exploit"] + ], ethereum: { staking, tvl: ethTvl, diff --git a/projects/ashswap/index.js b/projects/ashswap/index.js index 4a8b3ea71b..7159c2e13d 100644 --- a/projects/ashswap/index.js +++ b/projects/ashswap/index.js @@ -1,32 +1,21 @@ -const { request } = require("graphql-request"); -const { toUSDTBalances } = require('../helper/balances') +const { cachedGraphQuery } = require('../helper/cache') +const { sumTokens, sumTokensExport } = require('../helper/sumTokens') const API_URL = 'https://api-v2.ashswap.io/graphql'; -const TVLQuery = ` -{ - defillama { - totalValueLockedUSD +const TVLQuery = `query ashBaseStateQuery { + pools { + address } -} -` - -const StakingQuery = ` -{ - defillama { - totalValueStakedUSD + poolsV2 { + address } -} -` +}` async function tvl() { - const results = await request(API_URL, TVLQuery) - return toUSDTBalances(results.defillama.totalValueLockedUSD) -} - -async function staking() { - const results = await request(API_URL, StakingQuery) - return toUSDTBalances(results.defillama.totalValueStakedUSD) + const data = await cachedGraphQuery('ashswap', API_URL, TVLQuery) + const owners = Object.values(data).flat().map(i => i.address) + return sumTokens({ owners, chain: 'elrond'}) } module.exports = { @@ -34,6 +23,6 @@ module.exports = { timetravel: false, elrond: { tvl, - staking, + staking: sumTokensExport({ owner: 'erd1qqqqqqqqqqqqqpgq58elfqng8edp0z83pywy3825vzhawfqp4fvsaldek8'}), }, } \ No newline at end of file diff --git a/projects/astarexchangev3/index.js b/projects/astarexchangev3/index.js new file mode 100644 index 0000000000..3f71bb8a07 --- /dev/null +++ b/projects/astarexchangev3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + astar: { factory: '0x0bA242809B5b8AC2C362372807bc616fc620DB97', fromBlock: 3333333, }, +}) diff --git a/projects/astaria/index.js b/projects/astaria/index.js new file mode 100644 index 0000000000..9d9fd4c051 --- /dev/null +++ b/projects/astaria/index.js @@ -0,0 +1,67 @@ +const { getLogs } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const config = { + ethereum: { factory: '0x197Bb6Cd6cC9E9ABBFdaBff23DE7435c51d1B7BE', fromBlock: 16935232 , ACT: '0x455ad0f677628ed40e7397fb41818f474e0e5afe' }, +} + +/* +Object.keys(config).forEach(chain => { + const { factory, fromBlock, ACT } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x9aa6282003aa425f2bb942f91daaf7080de24835fc4fa8f3f4dc52c7d014ea97'], + eventAbi: 'event NewVault (address strategist, address delegate, address vault, uint8 vaultType)', + onlyArgs: true, + fromBlock, + }) + const actLogs = await getLogs({ + api, + target: ACT, + topics: ['0xd6b6bfb15fe5be5c1a8af879e26df8c0e2470c4ad95a47a1397868b45910e853'], + eventAbi: 'event Deposit721 (address indexed tokenContract, uint256 indexed tokenId, uint256 indexed collateralId, address depositedFor)', + onlyArgs: true, + fromBlock, + }) + const vaults = logs.map(l => l.vault) + const nfts = actLogs.map(l => l.tokenContract) + const collIds = actLogs.map(l => l.collateralId) + const clearingHouses = await api.multiCall({ abi: "function getClearingHouse(uint256 collateralId) view returns (address)", calls: collIds.map(i => i.toString()), target:ACT}) + const tokensAndOwners = nfts.map((v, i) => [v, clearingHouses[i]]) + + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults}) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults}) + tokens.forEach((t, i) => tokensAndOwners.push([t, vaults[i]])) + return sumTokens2({ api, tokensAndOwners }) + }, + borrowed: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x9aa6282003aa425f2bb942f91daaf7080de24835fc4fa8f3f4dc52c7d014ea97'], + eventAbi: 'event NewVault (address strategist, address delegate, address vault, uint8 vaultType)', + onlyArgs: true, + fromBlock, + }) + const vaults = logs.map(l => l.vault) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults}) + const deposited = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults}) + const liquidity = await api.multiCall({ abi: 'erc20:balanceOf', calls: vaults.map((v, i) => ({ target: tokens[i], params: v }))}) + tokens.forEach((token, i) => api.add(token, deposited[i] - liquidity[i])) + }, + } +}) +*/ + +module.exports={ + ethereum:{ + tvl: ()=>({}), + borrowed: ()=>({}), + }, + hallmarks:[ + [1687301106, "White hack"] + ] +} diff --git a/projects/astra-dao/index.js b/projects/astra-dao/index.js new file mode 100644 index 0000000000..e22a9a49d5 --- /dev/null +++ b/projects/astra-dao/index.js @@ -0,0 +1,31 @@ +const { sumTokensExport, sumTokens2 } = require('../helper/unwrapLPs') +const ASTRA_TOKEN_CONTRACT = '0x7E9c15C43f0D6C4a12E6bdfF7c7D55D0f80e3E23'; +const ASTRA_STAKING_CONTRACT = '0xDFE672C671943411fc16197fb8E328662B57CE2C'; + +async function tvl(_, _b, _cb, { api, }) { + let gotError = false + const indexAddr = '0x17b9B197E422820b3e28629a2BB101949EE7D12B' + const stableCoin = await api.call({ abi: 'address:baseStableCoin', target: indexAddr}) + let i = 0 + const tokens = [stableCoin] + do { + try { + const _tokens = await api.call({ abi: 'function getIndexTokenDetails(uint256) view returns (address[])', target: indexAddr, params: i}) + tokens.push(..._tokens) + i++ + } catch(e) { + if (i === 0) throw e + gotError = true + } + } while(!gotError) + return sumTokens2({ api, owner: indexAddr, tokens}) +} + +module.exports = { + start: 17243078, + ethereum: { + tvl, + pool2: sumTokensExport({ owner: ASTRA_STAKING_CONTRACT, resolveUniV3: true, }), + staking: sumTokensExport({ owner: ASTRA_STAKING_CONTRACT, tokens: [ASTRA_TOKEN_CONTRACT], }) + } +}; \ No newline at end of file diff --git a/projects/astriddao/index.js b/projects/astriddao/index.js index 7c1b8c9dfe..6e1bb69e27 100644 --- a/projects/astriddao/index.js +++ b/projects/astriddao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/unwrapLPs') const { getFixBalances } = require('../helper/portedTokens') @@ -12,54 +13,54 @@ const COLLATERALS = { } }, BUSD: { - tokenAddress: "0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E", - bridgeTokenMapping: "0x4fabb145d64652a948d72533023f6e7a623c7c53", + tokenAddress: ADDRESSES.oasis.ceUSDT, + bridgeTokenMapping: ADDRESSES.ethereum.BUSD, contracts: { activePool: "0x892af684Afd5fCee1023f7811C35fd695Bf0cd6f", defaultPool: "0xe487b9066A8fFde840b29892f1052CBEdccc3073", } }, DAI: { - tokenAddress: "0x6De33698e9e9b787e09d3Bd7771ef63557E148bb", - bridgeTokenMapping: "0x6b175474e89094c44da98b954eedeac495271d0f", + tokenAddress: ADDRESSES.astar.DAI, + bridgeTokenMapping: ADDRESSES.ethereum.DAI, contracts: { activePool: "0xCE90059FbCEc696634981945600d642A79e262aD", defaultPool: "0x3aD8FE12674B4c9481d5C7585ed5bDC4E35025b9", } }, DOT: { - tokenAddress: "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF", + tokenAddress: ADDRESSES.astar.DOT, contracts: { activePool: "0x8cd0b101838b082133e25eEb76C916Ae2AC56f36", defaultPool: "0x4e8B4867899A69bB05EFa6A16e68363C2BBeB02f", } }, USDC: { - tokenAddress: "0x6a2d262d56735dba19dd70682b39f6be9a931d98", - bridgeTokenMapping: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + tokenAddress: ADDRESSES.moonbeam.USDC, + bridgeTokenMapping: ADDRESSES.ethereum.USDC, contracts: { activePool: "0x5070d543654D866964C44E610a3b7f85fcAf2859", defaultPool: "0xEb80f1a9ede36412cF26E1e35ae74dbA30cCfF02", } }, WETH: { - tokenAddress: "0x81ECac0D6Be0550A00FF064a4f9dd2400585FE9c", + tokenAddress: ADDRESSES.moonbeam.USDT, contracts: { activePool: "0x5Ec419F08602caE5e4C591dE65bD640d66673035", defaultPool: "0x2eE0F3daa042af6Fdd56f0194d5aBfdA0A723D95", } }, WBTC: { - tokenAddress: "0xad543f18cFf85c77E140E3E5E3c3392f6Ba9d5CA", - bridgeTokenMapping: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + tokenAddress: ADDRESSES.astar.WBTC, + bridgeTokenMapping: ADDRESSES.ethereum.WBTC, contracts: { activePool: "0x1685E4f68FD9A50246ce92F0eb07a977591F5Ba2", defaultPool: "0xD69eB04d9ff456A31Da6D2a20538512C433ac1Ca", } }, USDT: { - tokenAddress: "0x3795c36e7d12a8c252a20c5a7b455f7c57b60283", - bridgeTokenMapping: "0xdAC17F958D2ee523a2206206994597C13D831ec7", + tokenAddress: ADDRESSES.astar.USDT, + bridgeTokenMapping: ADDRESSES.ethereum.USDT, contracts: { activePool: "0x74dFF63491B39E5fFE0Be44Ee3B23F674C27DB7c", defaultPool: "0x8EE2f5403246b86d7493ddCeED19f9347bc4DF1D", @@ -67,7 +68,7 @@ const COLLATERALS = { }, } -const BAI_TOKEN_ADDRESS = "0x733ebcC6DF85f8266349DEFD0980f8Ced9B45f35" +const BAI_TOKEN_ADDRESS = ADDRESSES.astar.BAI const STAKES = { WASTAR: { contracts: { @@ -111,7 +112,7 @@ const STAKES = { }, } -const ATID_TOKEN_ADDRESS = "0x5271D85CE4241b310C0B34b7C2f1f036686A6d7C"; +const ATID_TOKEN_ADDRESS = ADDRESSES.astar.ATID; const ATID_STAKES = { WASTAR: { contracts: { diff --git a/projects/astroport-classic/index.js b/projects/astroport-classic/index.js new file mode 100644 index 0000000000..b15e40f8b5 --- /dev/null +++ b/projects/astroport-classic/index.js @@ -0,0 +1,13 @@ +const { getFactoryTvl } = require('../terraswap/factoryTvl') + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + methodology: "Liquidity on the DEX", + terra: { + tvl: getFactoryTvl("terra1fnywlw4edny3vw44x04xd67uzkdqluymgreu7g",) + }, + hallmarks: [ + [1651881600, "UST depeg"], + ] +} // node test.js projects/astroport/index.js diff --git a/projects/astroport/index.js b/projects/astroport/index.js index eea9fb28fe..981dfb0ace 100644 --- a/projects/astroport/index.js +++ b/projects/astroport/index.js @@ -4,17 +4,13 @@ module.exports = { timetravel: false, misrepresentedTokens: true, methodology: "Liquidity on the DEX", - terra: { - tvl: getFactoryTvl("terra1fnywlw4edny3vw44x04xd67uzkdqluymgreu7g",) - }, injective: { tvl: getFactoryTvl("inj19aenkaj6qhymmt746av8ck4r8euthq3zmxr2r6",) }, terra2: { tvl: getFactoryTvl("terra14x9fr055x5hvr48hzy2t4q7kvjvfttsvxusa4xsdcy702mnzsvuqprer8r") }, - hallmarks: [ - [1651881600, "UST depeg"], - ] - + neutron: { + tvl: getFactoryTvl("neutron1hptk0k5kng7hjy35vmh009qd5m6l33609nypgf2yc6nqnewduqasxplt4e") + }, } // node test.js projects/astroport/index.js \ No newline at end of file diff --git a/projects/astroswap.js b/projects/astroswap.js index a2b605a6d0..d892c95850 100644 --- a/projects/astroswap.js +++ b/projects/astroswap.js @@ -4,7 +4,7 @@ module.exports = { misrepresentedTokens: true, velas: { tvl: getUniTVL({ - factory: '0xe82d721A6CdeC2f86e9Fca074Ff671c8621F8459', chain: 'velas', useDefaultCoreAssets: true, + factory: '0xe82d721A6CdeC2f86e9Fca074Ff671c8621F8459', useDefaultCoreAssets: true, blacklist: ['0xcd7509b76281223f5b7d3ad5d47f8d7aa5c2b9bf', '0xd12f7a98c0d740e7ec82e8caf94eb79c56d1b623',], }) }, diff --git a/projects/astrowar-finance/index.js b/projects/astrowar-finance/index.js index d658c54c83..c8d4f032ea 100644 --- a/projects/astrowar-finance/index.js +++ b/projects/astrowar-finance/index.js @@ -14,6 +14,9 @@ async function tvl(timestamp, _block, { harmony: block }) { module.exports = { deadFrom: 1650564340, + hallmarks: [ + [1650412800, "Rug Pull"] + ], harmony: { tvl } diff --git a/projects/asymetrix/index.js b/projects/asymetrix/index.js new file mode 100644 index 0000000000..fb3e87041b --- /dev/null +++ b/projects/asymetrix/index.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const STAKE_PRIZE_POOL_CONTRACT = "0x82D24dD5041A3Eb942ccA68B319F1fDa9EB0c604"; +const ST_ETH_TOKEN_CONTRACT = ADDRESSES.ethereum.STETH; + +module.exports = { + methodology: + "TVL is counted as the amount of all stETH on the StakePrizePool contract. stETH that is not distributed yet are also counting because they will be distributed in the end of the current draw.", + ethereum: { + tvl: sumTokensExport({ owners: [STAKE_PRIZE_POOL_CONTRACT], tokens: [ST_ETH_TOKEN_CONTRACT]}), + }, +}; diff --git a/projects/asymmetry-fi/index.js b/projects/asymmetry-fi/index.js new file mode 100644 index 0000000000..8d669b28e3 --- /dev/null +++ b/projects/asymmetry-fi/index.js @@ -0,0 +1,14 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + tokensAndOwners: [ + [ADDRESSES.ethereum.WSTETH, '0x972a53e3a9114f61b98921fb5b86c517e8f23fad'], + [ADDRESSES.ethereum.RETH, '0x7b6633c0cd81dc338688a528c0a3f346561f5ca3'], + [ADDRESSES.ethereum.sfrxETH, '0x36ce17a5c81e74dc111547f5dffbf40b8bf6b20a'], + ] + }) + } +} \ No newline at end of file diff --git a/projects/ate/index.js b/projects/ate/index.js new file mode 100644 index 0000000000..2ee6b6969a --- /dev/null +++ b/projects/ate/index.js @@ -0,0 +1,29 @@ +const { mergeExports } = require("../helper/utils") +const { yieldHelper, } = require("../helper/yieldHelper") + +const farm_arbi = '0x9373da81F82Aba62605a8A03950B9Aa188a02bF7' +const ate_arbi = '0xd5DA32Ad4C7510457C0e46Fa4332F75f6C4C4dC0' +const abis ={ + poolInfo: 'function poolInfo(uint256) view returns (address want, uint256 allocPoint, uint256 lastRewardBlock, uint256 accSushiPerShare, uint256 accAQUAPerShare, uint256 depositFee, uint256 withdrawFee, uint256 amount, uint256 reserve, address strat, address strat1)', +} + +const arbi_helper = yieldHelper({ + project: 'autoearn-finance', + chain: 'arbitrum', + masterchef: farm_arbi, + nativeToken: ate_arbi, + abis, +}) + +const farm_zk = '0x6d90D891A03C32d4082126D0CEe145f3bE62444A' +const ate_zk = '0x8E6D4473031f4B81E19B13C632933a913d4B4F8e' + +const zk_helper = yieldHelper({ + project: 'autoearn-finance-era', + chain: 'era', + masterchef: farm_zk, + nativeToken: ate_zk, + abis, +}) + +module.exports = mergeExports([arbi_helper, zk_helper]) \ No newline at end of file diff --git a/projects/athenafinance-io/index.js b/projects/athenafinance-io/index.js new file mode 100644 index 0000000000..b5b66e3400 --- /dev/null +++ b/projects/athenafinance-io/index.js @@ -0,0 +1,39 @@ +const { unwrapLPsAuto, nullAddress, sumTokensExport } = require('../helper/unwrapLPs') + +const masterchef = '0x652a63c4df14e29080Ab058d6f151aBa61F86c10' + +async function tvl(_, _b, _cb, { api, }) { + const pools = await api.fetchList({ lengthAbi: 'uint256:poolLength', itemAbi: 'function registeredToken(uint256) view returns (address)', target: masterchef }) + const poolInfo = await api.multiCall({ abi: 'function getPoolInfo(address) view returns ( uint256 emission, uint256 allocpoint, uint256 sizeOfPool, uint256 totalPoint)', calls: pools, target: masterchef }) + const poolInfo2 = await api.multiCall({ abi: 'function addressToPoolInfo(address) view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardTimestamp, uint256 accATHPerShare, address rewarder, address helper, address locker)', calls: pools, target: masterchef }) + + const poolHelperData = [] + poolInfo2.forEach((data, index) => { + if (pools[index].toLowerCase() === '0xfc56eac0d0e53105f7a45a669baf662c0ee292ed') return; // ignore ATH token + if (pools[index].toLowerCase() === '0x724ccdcf3f77096963b8e0849dab3eb142b167a4') return; // ignore ATH LP token + if (data.helper === '0xeB27E1C356b173277bb75ACA3a3f8a0164Fa0ABa') { + api.add('0x724CcDcf3F77096963B8e0849dab3Eb142b167a4', poolInfo[index].sizeOfPool) + } else if (data.helper === nullAddress) { + api.add(pools[index], poolInfo[index].sizeOfPool) + } else { + poolHelperData.push({ + helper: data.helper, + balance: poolInfo[index].sizeOfPool + }) + } + }) + const depositToken = await api.multiCall({ abi: 'address:depositToken', calls: poolHelperData.map(i => i.helper) }) + depositToken.forEach((data, index) => api.add(data, poolHelperData[index].balance)) + + return unwrapLPsAuto({ api, }) +} + + +module.exports = { + doublecounted: true, + metis: { + tvl, + staking: sumTokensExport({ owner: '0xD481eD22a20708839aeB7f1d07E1d01cbc526184', tokens: ['0xA4eE142e34d0676Edc2b760DD0016003D99a4ceC'] }), + pool2: sumTokensExport({ owner: masterchef, tokens: ['0x724CcDcf3F77096963B8e0849dab3Eb142b167a4'], resolveLP: true, }), + } +} \ No newline at end of file diff --git a/projects/atlantisloans/index.js b/projects/atlantisloans/index.js index d0c09348d3..59bdac93ff 100644 --- a/projects/atlantisloans/index.js +++ b/projects/atlantisloans/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); const { compoundExports } = require("../helper/compound"); @@ -20,27 +21,35 @@ module.exports = { bsc: { pool2: pool2(lpVaultStakingContract_BNB, ALT_BUSD_CakeLP_BNB, "bsc"), staking: staking(vaultStakingContract_BNB, ATL, "bsc"), - ...compoundExports(comptroller, - "bsc", - "0x5A9A90983A369b6bB8F062f0AFe6219Ac01caF63", - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" - ), + // ...compoundExports(comptroller, + // "bsc", + // "0x5A9A90983A369b6bB8F062f0AFe6219Ac01caF63", + // ADDRESSES.bsc.WBNB + // ), + tvl: async () => ({}), + }, + // polygon: compoundExports(polygonComptroller, + // "polygon", + // "0xa65722af4957cef481edb4cb255f804dd36e8adc", + // ADDRESSES.polygon.WMATIC_2 + // ), + polygon: { + tvl: async () => ({}), }, - polygon: compoundExports(polygonComptroller, - "polygon", - "0xa65722af4957cef481edb4cb255f804dd36e8adc", - "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270" - ), avax: compoundExports(avaxComptroller, "avax", "0x6bd2154fbc086cb43411966e0e72584196ccd065", - "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" + ADDRESSES.avax.WAVAX ), dogechain: compoundExports(dcComptroller, "dogechain", "0xbc46Dc817ce983CfD1B36cBc599031aCBEc2FDfe", - "0xb7ddc6414bf4f5515b52d8bdd69973ae205ff101" + ADDRESSES.dogechain.WWDOGE ), + hallmarks: [ + [Math.floor(new Date('2023-04-01') / 1e3), 'Team stops all comms, stole funds (?)'], + [Math.floor(new Date('2023-06-10') / 1e3), 'Governance Attack'], + ], methodology: "TVL is comprised of tokens deposited to the protocol as collateral, similar to Compound Finance and other lending protocols the borrowed tokens are not counted as TVL.", }; diff --git a/projects/atlas-fi/index.js b/projects/atlas-fi/index.js index ce6cb2af9c..a3309fcd00 100644 --- a/projects/atlas-fi/index.js +++ b/projects/atlas-fi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs") const { sumTokensExport } = require("../helper/unknownTokens") const VAULT = '0x3A93FCCcD2769579eFE03d6DeF2C4468F5F0bd38' @@ -8,7 +9,7 @@ async function tvl(_, _b, _cb, { api, }) { api, ownerTokens: [ [[ - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', + ADDRESSES.arbitrum.USDT, '0xf6995955e4b0e5b287693c221f456951d612b628', '0xee338313f022caee84034253174fa562495dcc15', '0x8dc3312c68125a94916d62b97bb5d925f84d4ae0', @@ -22,6 +23,9 @@ async function tvl(_, _b, _cb, { api, }) { module.exports = { methodology: 'Sums the total value locked of all strategies in Atlas', + hallmarks: [ + [1681776000, "Rug Pull"] + ], arbitrum: { tvl, pool2: sumTokensExport({ useDefaultCoreAssets: true, owner: FARM_PROXY, tokens: ['0x4edaa03fc13f8f13c3290c3728f587760b12e381'], lps: ['0x4edaa03fc13f8f13c3290c3728f587760b12e381'] }), diff --git a/projects/atlas-usv/api.js b/projects/atlas-usv/api.js new file mode 100644 index 0000000000..98969bb597 --- /dev/null +++ b/projects/atlas-usv/api.js @@ -0,0 +1,8 @@ +const index = require('./index') + +module.exports = { + polygon: { + tvl: () => 0, + staking: index.polygon.staking, + } +} \ No newline at end of file diff --git a/projects/atlas-usv/index.js b/projects/atlas-usv/index.js index 27925f7dff..dea985804e 100644 --- a/projects/atlas-usv/index.js +++ b/projects/atlas-usv/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0x71EF2894E23D7ea7Fd73a3558B3a0bA25689bC86"; module.exports = ohmTvl(treasuryAddress, [ //DAI - ["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", false], + [ADDRESSES.polygon.DAI, false], //FRAX ["0x104592a158490a9228070e0a8e5343b499e125d0", false], //SSX diff --git a/projects/atmossoft.js b/projects/atmossoft.js index 433101a3f4..9461ed5bae 100644 --- a/projects/atmossoft.js +++ b/projects/atmossoft.js @@ -1,14 +1,15 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumUnknownTokens } = require('./helper/unknownTokens') async function bsc(timestamp, ethBlock, chainBlocks) { const pools = [{ 'pool2Address': '0xaF18cde26fdd22561df2a02958CbA092f41875d8', - 'pairToken': 'bsc:0x55d398326f99059ff775485246999027b3197955', + 'pairToken': 'bsc:' + ADDRESSES.bsc.USDT, 'stakingContract': '0x282FFbE782F903340A14955649032302e8020b9C' }, { 'pool2Address': '0xdf825e486d9d15848a36c113b7725d7923e886a4', - 'pairToken': '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', + 'pairToken': ADDRESSES.bsc.WBNB, 'stakingContract': '0xa65d60e8a71dBDbb14B6eE7073522546FE73CFE4' }]; @@ -20,7 +21,7 @@ async function bsc(timestamp, ethBlock, chainBlocks) { async function ftm(timestamp, ethBlock, chainBlocks) { const pools = [{ 'pool2Address': '0x662db0c6fa77041fe4901149558cc70ca1c8e874', - 'pairToken': '0x4e15361fd6b4bb609fa63c81a2be19d873717870', + 'pairToken': ADDRESSES.ethereum.FTM, 'stakingContract': 'f043f876d3d220acce029ca76c9572f0449e5e71' }]; const tokensAndOwners = pools.map(i => ([i.pool2Address, i.stakingContract])) diff --git a/projects/atomic/index.js b/projects/atomic/index.js new file mode 100644 index 0000000000..2df5412b64 --- /dev/null +++ b/projects/atomic/index.js @@ -0,0 +1,35 @@ +const Lendings = [ + "0x561920028545985c60fb93d48717ff0070cb4e74", + "0xBAE99752dA245089698Bc1b5F0a14eAE91694FBc", + "0xc1b677039892C048f2eFb7E9C5da1B51fDE92504" +]; + +async function tvl(_, _1, _2, { api }) { + const balances = {}; + + const collateralBalance = await api.multiCall({ + abi: "uint256:totalSupplied", + calls: Lendings.map(i => ({ target: i })) + }); + + const lendingTokens = await api.multiCall({ + abi: "address:token", + calls: Lendings.map(i => ({ target: i })) + }); + + + for (let i = 0; i < collateralBalance.length; i++) { + balances[`arbitrum:${lendingTokens[i]}`] = collateralBalance[i]; + } + + return balances; +} + +module.exports = { + misrepresentedTokens: false, + arbitrum: { + tvl + } +}; + + diff --git a/projects/auctus/index.js b/projects/auctus/index.js index 4087947ab2..300b5f3d75 100644 --- a/projects/auctus/index.js +++ b/projects/auctus/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -12,7 +13,7 @@ const FACTORY = '0x176b98ab38d1aE8fF3F30bF07f9B93E26F559C17'; const POOLS_FACTORY = '0xe28520DDB1b419Ac37eCDBB2c0F97c8Cf079CCC3'; const VAULTS = '0x2Ce43b4570Ad9DEAb8CFE6258B42DB7301e3b6C0'; - const ETHER_ADDRESS = '0x0000000000000000000000000000000000000000'; + const ETHER_ADDRESS = ADDRESSES.null; /*================================================== TVL diff --git a/projects/augur/index.js b/projects/augur/index.js index c50490c14e..b04181bee3 100644 --- a/projects/augur/index.js +++ b/projects/augur/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); -const dai = '0x6b175474e89094c44da98b954eedeac495271d0f' +const dai = ADDRESSES.ethereum.DAI const universe = '0x49244bd018ca9fd1f06ecc07b9e9de773246e5aa' const delegator = '0xd5524179cB7AE012f5B642C1D6D700Bbaa76B96b' @@ -16,7 +17,7 @@ async function tvl(timestamp, block) { }) return { - '0x0000000000000000000000000000000000000000': ethBalance.output, + [ADDRESSES.null]: ethBalance.output, [dai]: daiBalance.output } } diff --git a/projects/aura-finance/index.js b/projects/aura-finance/index.js index b4a05092d7..fca63047ec 100644 --- a/projects/aura-finance/index.js +++ b/projects/aura-finance/index.js @@ -1,8 +1,8 @@ +const { getLogs } = require('../helper/cache/getLogs') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { staking } = require("../helper/staking"); -const BigNumber = require('bignumber.js') -const { unwrapBalancerPool } = require('../helper/unwrapLPs') +const { unwrapBalancerToken } = require('../helper/unwrapLPs') const AURA_BOOSTER = "0x7818A1DA7BD1E64c199029E86Ba244a9798eEE10" const AURA_BOOSTER_2 = "0xA57b8d98dAE62B26Ec3bcC4a365338157060B234" @@ -16,69 +16,85 @@ const addresses = { bal80eth20: "0x5c6Ee304399DBdB9C8Ef030aB642B10820DB8F56", }; -async function tvl(_, block) { - let pools = await Promise.all([AURA_BOOSTER, AURA_BOOSTER_2].map(i => sdk.api2.abi.fetchList({ - target: i, - block, - itemAbi: abi.poolInfo, - lengthAbi: abi.poolLength, - }))) - pools = pools.flat() - const poolIds = (await sdk.api.abi.multiCall({ - calls: pools.map(pool => ({target: pool.lptoken})), - abi: abi.getPoolId, - block, - })).output; - const poolTokensInfo = (await sdk.api.abi.multiCall({ - calls: poolIds.map(poolId => ({target: BALANCER_VAULT, params: poolId.output})), - abi: abi.getPoolTokens, - block - })).output; - const balancesinStaking = (await sdk.api.abi.multiCall({ - calls: pools.map(pool => ({target: pool.token, params:pool.crvRewards })), - abi: 'erc20:balanceOf', - block - })).output; - const totalSupplies = (await sdk.api.abi.multiCall({ - calls: pools.map(pool => ({target: pool.lptoken})), - abi: 'erc20:totalSupply', - block - })).output; - let balances = {} - const { output: veBalTotalSupply } = await sdk.api.erc20.totalSupply({ target: addresses.veBal, block }) - const { output: veBalance } = await sdk.api.erc20.balanceOf({ target: addresses.veBal, owner: addresses.auraDelegate, block }) - const ratio = veBalance / veBalTotalSupply - const bal = await unwrapBalancerPool({ block, balancerPool: addresses.bal80eth20, owner: addresses.veBal, }) - Object.entries(bal).forEach(([token, value]) => { - const newValue = BigNumber(+value * ratio).toFixed(0) - sdk.util.sumSingleBalance(balances, token, newValue) +async function tvl(_, block, _1, { api }) { + let pools = await Promise.all([AURA_BOOSTER, AURA_BOOSTER_2].map(i => api.fetchList({ target: i, itemAbi: abi.poolInfo, lengthAbi: abi.poolLength, }))) + pools = pools.flat() + const poolInputs = pools.map(pool => pool.lptoken) + const poolIds = await api.multiCall({ calls: poolInputs, abi: abi.getPoolId, permitFailure: true, }) + + + let failedCallIndices = poolIds.map((v, i) => [i, v]).filter(i => !i[1]).map(i => i[0]) + let newPoolIds = await api.multiCall({ calls: failedCallIndices.map(i => poolInputs[i]), abi: 'function POOL_ID() view returns (bytes32)', permitFailure: true, }) + newPoolIds.forEach((v, i) => { if (v) poolIds[failedCallIndices[i]] = v }) + + failedCallIndices = poolIds.map((v, i) => [i, v]).filter(i => !i[1]).map(i => i[0]) + const newLpTokens = await api.multiCall({ calls: failedCallIndices.map(i => poolInputs[i]), abi: 'address:lp_token', permitFailure: true, }) + newPoolIds = await api.multiCall({ calls: newLpTokens.map(i => ({ target: i })), abi: abi.getPoolId, permitFailure: true, }) + newPoolIds.forEach((v, i) => { if (v) poolIds[failedCallIndices[i]] = v }) + + + const poolTokensInfo = await api.multiCall({ calls: poolIds.map(poolId => ({ target: BALANCER_VAULT, params: poolId })), abi: abi.getPoolTokens, }) + const balancesinStaking = await api.multiCall({ calls: pools.map(pool => ({ target: pool.token, params: pool.crvRewards })), abi: 'erc20:balanceOf', }) + const totalSupplies = await api.multiCall({ calls: pools.map(pool => pool.lptoken), abi: 'erc20:totalSupply', }) + const { output: veBalTotalSupply } = await sdk.api.erc20.totalSupply({ target: addresses.veBal, block }) + const { output: veBalance } = await sdk.api.erc20.balanceOf({ target: addresses.veBal, owner: addresses.auraDelegate, block }) + const ratio = veBalance / veBalTotalSupply + const ratios = balancesinStaking.map((v, i) => +totalSupplies[i] > 0 ? v / totalSupplies[i] : 0) + const bal = await unwrapBalancerToken({ api, balancerToken: addresses.bal80eth20, owner: addresses.veBal, }) + Object.entries(bal).forEach(([token, value]) => { + api.add(token, +value * ratio, { skipChain: true, }) + }) + for (let [i, info] of poolTokensInfo.entries()) { + // // unwrapBalancerToken would be better here, but since crvRewards address holds aura-wrapped tokens, it won't work + // if (poolIds[i] == "0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249") { + // // Pool is 80BAL-20ETH/auraBAL, need to unwrap 80BAL-20ETH + // const unwrapped = await unwrapBalancerToken({ block: api.block, balancerPool: addresses.bal80eth20, owner: BALANCER_VAULT }) + // Object.entries(unwrapped).forEach(([token, balance]) => { + // api.add(token, balance * ratio) + // }) + // } else { + info.tokens.forEach((token, j) => { + api.add(token, info.balances[j] * ratios[i]) }) - for (let [i,info] of poolTokensInfo.entries()) { - // unwrapBalancerPool would be better here, but since crvRewards address holds aura-wrapped tokens, it won't work - const result = Object.assign.apply({}, info.output.tokens.map( (v, i) => ( {[v]: info.output.balances[i]} ) ) ); - const totalSupply = BigNumber(totalSupplies[i].output); - const stakedBalance = BigNumber(balancesinStaking[i].output); - const ratio = stakedBalance.div(totalSupply) - if (info.input.params[0] == "0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249") { - // Pool is 80BAL-20ETH/auraBAL, need to unwrap 80BAL-20ETH - const unwrapped = await unwrapBalancerPool({block, balancerPool: addresses.bal80eth20, owner:BALANCER_VAULT}) - Object.entries(unwrapped).forEach(([token, balance]) => { - balances[token] = BigNumber(balances[token] || 0).plus(BigNumber(balance).times(ratio)) - }) - } - Object.entries(result).forEach(([token, balance]) => { - balances[token] = BigNumber(balances[token] || 0).plus(BigNumber(balance).times(ratio)) - }) - } - return balances + // } + } +} +const config = { + arbitrum: { factory: '0x6817149cb753bf529565b4d023d7507ed2ff4bc0', fromBlock: 72942741, voterProxy: '0xc181edc719480bd089b94647c2dc504e2700a2b0'}, + optimism: { factory: '0xa523f47A933D5020b23629dDf689695AA94612Dc', fromBlock: 83239534, voterProxy: '0xc181edc719480bd089b94647c2dc504e2700a2b0'}, + polygon: { factory: '0x22625eedd92c81a219a83e1dc48f88d54786b017', fromBlock: 40687417, voterProxy: '0xC181Edc719480bd089b94647c2Dc504e2700a2B0'}, } module.exports = { - timetravel: true, - methodology: "TVL of Aura Finance consists of the total deposited assets, protocol-controlled value via veBAL and vote-locked AURA (staking)", - ethereum: { - tvl, - staking: staking(addresses.auraLocker, addresses.aura) - } + methodology: "TVL of Aura Finance consists of the total deposited assets, protocol-controlled value via veBAL and vote-locked AURA (staking)", + ethereum: { + tvl, + staking: staking(addresses.auraLocker, addresses.aura) + } } + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, voterProxy, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xaa98436d09d130af48de49867af8b723bbbebb0d737638b5fe8f1bf31bbb71c0'], + eventAbi: 'event GaugeCreated (address indexed gauge)', + onlyArgs: true, + fromBlock, + }) + + // const auraBalVault = '0x4EA9317D90b61fc28C418C247ad0CA8939Bbb0e9' + // const asset = await api.call({ abi: 'address:asset', target: auraBalVault }) + // const bal = await api.call({ abi: 'uint256:totalAssets', target: auraBalVault }) + // api.add(asset, bal) + const gauges = logs.map(log => log.gauge) + const tokens = await api.multiCall({ abi: 'address:lp_token', calls: gauges }) + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: gauges.map(i => ({ target: i, params: voterProxy })) }) + api.addTokens(tokens, bals) + } + } +}) diff --git a/projects/aurora-plus/index.js b/projects/aurora-plus/index.js index 01573ac9f4..394fc0166c 100644 --- a/projects/aurora-plus/index.js +++ b/projects/aurora-plus/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); -const AURORA = "0x8bec47865ade3b172a928df8f990bc7f2a3b9f79"; +const AURORA = ADDRESSES.aurora.AURORA; const stakingContract = "0xf075c896cbbb625e7911e284cd23ee19bdccf299"; module.exports = { diff --git a/projects/autocoreDefi/index.js b/projects/autocoreDefi/index.js new file mode 100644 index 0000000000..2569487a27 --- /dev/null +++ b/projects/autocoreDefi/index.js @@ -0,0 +1,38 @@ +const { sumUnknownTokens } = require('../helper/unknownTokens') + +const config = { + core: { + vaults: [ + "0x3132CDD419820f0D00152b95267FA013783e1F27", + "0x88f95f59c0FC1e9857188218F23315ECe6f64CFe", + "0xF71552C9893BDFf01a4a2debaB80E21b6E0e9481", + "0x1D165E1D48177592943275750C7ABeB946D44a6e", + "0x11606ce0D44a62027F6EEb28db7483E5ecB1103f", + "0xe79E557bf863383EB666197e96e73ACEFBf71347", + "0x91C143ED78970a4C3830070c6c1FA38EEc9F8c6E", + "0xE891d51D278518e522148271b65ec3a534012389", + "0xc09849236c5De1317e9a957cF695642285A2A5E2", + "0x0dc152dDC49e0f872489297D6Df0ef3Bb5498FF2", + "0xBafA023c72112ecfc04E661bedb30d9A8e7e08ad", + "0x746f5530FBebDcf984F0D15637f0217eb7cDcE73", + "0x87c98004D1F819fB6354CeD704304a1394Ac1F16", + "0x5D884E045d8F74E3b600c359395A300515b6F574", + "0x1f0c2507C500F24fdd765Dc4025E5c5b40FC33c3" + ] + } +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const { vaults } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const tokens = await api.multiCall({ abi: 'address:want', calls: vaults }) + const bals = await api.multiCall({ abi: 'uint256:balance', calls: vaults }) + api.addTokens(tokens, bals) + return sumUnknownTokens({ api , useDefaultCoreAssets: true, resolveLP: true, lps: tokens }) + } + } +}) \ No newline at end of file diff --git a/projects/autoearn/index.js b/projects/autoearn/index.js new file mode 100644 index 0000000000..2ee6b6969a --- /dev/null +++ b/projects/autoearn/index.js @@ -0,0 +1,29 @@ +const { mergeExports } = require("../helper/utils") +const { yieldHelper, } = require("../helper/yieldHelper") + +const farm_arbi = '0x9373da81F82Aba62605a8A03950B9Aa188a02bF7' +const ate_arbi = '0xd5DA32Ad4C7510457C0e46Fa4332F75f6C4C4dC0' +const abis ={ + poolInfo: 'function poolInfo(uint256) view returns (address want, uint256 allocPoint, uint256 lastRewardBlock, uint256 accSushiPerShare, uint256 accAQUAPerShare, uint256 depositFee, uint256 withdrawFee, uint256 amount, uint256 reserve, address strat, address strat1)', +} + +const arbi_helper = yieldHelper({ + project: 'autoearn-finance', + chain: 'arbitrum', + masterchef: farm_arbi, + nativeToken: ate_arbi, + abis, +}) + +const farm_zk = '0x6d90D891A03C32d4082126D0CEe145f3bE62444A' +const ate_zk = '0x8E6D4473031f4B81E19B13C632933a913d4B4F8e' + +const zk_helper = yieldHelper({ + project: 'autoearn-finance-era', + chain: 'era', + masterchef: farm_zk, + nativeToken: ate_zk, + abis, +}) + +module.exports = mergeExports([arbi_helper, zk_helper]) \ No newline at end of file diff --git a/projects/autofarm.js b/projects/autofarm.js index e0d7b51888..aec56e503b 100644 --- a/projects/autofarm.js +++ b/projects/autofarm.js @@ -1,31 +1,42 @@ -const utils = require('./helper/utils'); -const {fetchChainExports} = require('./helper/exports'); +const { sumUnknownTokens } = require('./helper/unknownTokens'); -const transformChain = { - okexchain: 'okex', - avax: 'avax', - wan: 'wanchain', -} - -function chainTvl(chain){ - return async()=>{ - const data = await utils.fetchURL(`https://static.autofarm.network/${transformChain[chain] ?? chain}/stats.json`) - return data.data.platformTVL - } -} - -module.exports=fetchChainExports(chainTvl, [ - 'bsc', 'polygon', - 'heco', 'avax', - 'fantom', 'moonriver', - 'okexchain', 'celo', - 'cronos', 'boba', - 'harmony', 'xdai', - 'velas', 'aurora', - 'oasis', 'wan', - 'kcc', 'evmos' -]) module.exports.hallmarks=[ [1618966800, "Venus incident"], [1634778000, "Emissions end"], ] + +const config = { + aurora: "0x62537419c8327AB66165bAE205Da8fcB6871A700", + avax: "0x864A0B7F8466247A0e44558D29cDC37D4623F213", + boba: "0x864A0B7F8466247A0e44558D29cDC37D4623F213", + bsc: "0x0895196562c7868c5be92459fae7f877ed450452", + celo: "0xdD11b66B90402F294a017c4688509c364312303F", + cronos: "0x76b8c3ECdF99483335239e66F34191f11534cbAA", + fantom: "0x76b8c3ECdF99483335239e66F34191f11534cbAA", + fuse: "0x9C30e4B50b4b3804D3b50f01619c61fE44ed894e", + harmony: "0x9c57658139afb41949cebc07d806f37d29d13eea", + heco: "0x96a29c4bce3126266983f535b41c30dba80d5d99", + moonbeam: "0x77286f5257e090b1bedbc6df6726d53cbf8573a6", + moonriver: "0xfadA8Cc923514F1D7B0586aD554b4a0CeAD4680E", + oasis: "0xbf19C3fe078258F1D1C34bEc7e624AD8a1DE343A", + okexchain: "0x864A0B7F8466247A0e44558D29cDC37D4623F213", + polygon: "0x89d065572136814230A55DdEeDDEC9DF34EB0B76", + velas: "0xAd2DB12795CeD89cA2D1819710233106115E3034", + xdai: "0xfadA8Cc923514F1D7B0586aD554b4a0CeAD4680E", + evmos: "0x9C30e4B50b4b3804D3b50f01619c61fE44ed894e", + kcc: "0x76b8c3ECdF99483335239e66F34191f11534cbAA", + wan: "0xAd2DB12795CeD89cA2D1819710233106115E3034", +} + +Object.keys(config).forEach(chain => { + const masterchef = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const data = await api.fetchList({ lengthAbi: 'uint256:poolLength', itemAbi: 'function poolInfo(uint256) view returns (address want, uint256,uint256,uint256,address strat)', target: masterchef, }) + const tokens = data.map(i => i.want) + const bals = await api.multiCall({ abi: 'uint256:wantLockedTotal', calls: data.map(i => i.strat), permitFailure: true, }) + bals.forEach((v, i) => v && api.add(tokens[i], v)) + return sumUnknownTokens({ api, resolveLP: true, useDefaultCoreAssets: true, }) + } + } +}) diff --git a/projects/avatr/index.js b/projects/avatr/index.js index 8f71001c51..e73fd8cec0 100644 --- a/projects/avatr/index.js +++ b/projects/avatr/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); const { getLogs } = require("../helper/cache/getLogs"); const { staking } = require("../helper/staking"); -const FACTORY_CONTRACT = "0x9CAc6c4fDb0fCbbB1cA3064f7f6C3FAD22B0B92D"; -const WETH_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const FACTORY_CONTRACT = "0x498B8f1E767E2A32ab68C1301F1e98b59a34dA94"; +const WETH_ADDRESS = ADDRESSES.ethereum.WETH; async function tvl(timestamp, block, chainBlocks, { api }) { const logs = await getLogs({ @@ -22,6 +23,9 @@ async function tvl(timestamp, block, chainBlocks, { api }) { } module.exports = { + hallmarks: [ + [1682726400, "Rug Pull"] + ], ethereum: { tvl, }, diff --git a/projects/avely-finance-staking/index.js b/projects/avely-finance-staking/index.js new file mode 100644 index 0000000000..2c90a7a32c --- /dev/null +++ b/projects/avely-finance-staking/index.js @@ -0,0 +1,59 @@ +const { + formQuery, + call +} = require('../helper/chain/zilliqa') + +const STZIL_CONTRACT_ADDRESS = 'zil1umc54ly88xjw4599gtq860le0qvsuwuj72s246' +const DECIMALS = 12 + +const tvlFields = { + + //'total_supply' contract field: it's total amount of minted stzil + //https://github.com/avely-finance/avely-contracts/blob/main/contracts/source/stzil.scilla#L355 + // [STZIL_CONTRACT_ADDRESS]: 'total_supply', + + //get 'totalstakeamount' contract field: it's total amount of zil, staked in Zilliqa native staking contract through StZIL contract + //https://github.com/avely-finance/avely-contracts/blob/main/contracts/source/stzil.scilla#L353 + 'zilliqa': 'totalstakeamount', +} + +async function tvl() { + const { api } = arguments[3] + const query = prepareQuery(tvlFields) + + const data = await call(query) + + data.forEach((response) => { + const { id, result } = response + if (!id || !result || !tvlFields[id] || !result[tvlFields[id]]) return + api.add(id, result[tvlFields[id]] / (10 ** DECIMALS), { skipChain: true}) + }) +} + +//prepare batch GetSmartContractSubState query +//https://dev.zilliqa.com/api/contract-related-methods/api-contract-get-smartcontract-substate/ +function prepareQuery(fields) { + const query = Object.entries(fields).map(([id, field]) => { + return formQuery({ + id: id, + params: [ + STZIL_CONTRACT_ADDRESS, + field, + [] + ] + }); + }); + + //console.log(query) + return query; +} + + +module.exports = { + zilliqa: { + tvl + }, + methodology: 'TVL represents the sum of stakes denominated in ZIL and staked in the native Zilliqa staking contract via the STZIL contract', + timetravel: false, +} + diff --git a/projects/avely-finance-swap/index.js b/projects/avely-finance-swap/index.js new file mode 100644 index 0000000000..22c8ce7e8d --- /dev/null +++ b/projects/avely-finance-swap/index.js @@ -0,0 +1,54 @@ +const BigNumber = require('bignumber.js') +const { + formQuery, + call +} = require('../helper/chain/zilliqa') + + +const ASWAP_CONTRACT_ADDRESS = 'zil1uxfzk4n9ef2t3f4c4939ludlvp349uwqdx32xt' +const STZIL_CONTRACT_ADDRESS = 'zil1umc54ly88xjw4599gtq860le0qvsuwuj72s246' +//seems Zilliqa API take address in legacy format as map key +const STZIL_CONTRACT_ADDRESS_LEGACY = '0xe6f14afc8739a4ead0a542c07d3ff978190e3b92' +const DECIMALS = 12 + +async function tvl() { + + //https://dev.zilliqa.com/api/contract-related-methods/api-contract-get-smartcontract-substate/ + const query = formQuery({ + id: "1", + params: [ + ASWAP_CONTRACT_ADDRESS, + 'pools', + [STZIL_CONTRACT_ADDRESS_LEGACY] + ] + }); + //console.log(query) + + const data = await call(query) + //console.log(data) + + //(* POOL token -> Pair{zil_reserve, token_reserve} *) + //https://github.com/avely-finance/avely-contracts/blob/main/contracts/source/aswap.scilla#L301 + const zil_reserve = data?.result?.pools[STZIL_CONTRACT_ADDRESS_LEGACY]?.arguments[0] + const token_reserve = data?.result?.pools[STZIL_CONTRACT_ADDRESS_LEGACY]?.arguments[1] + if (zil_reserve == undefined || token_reserve == undefined) { + return + } + + const balances = { + // [STZIL_CONTRACT_ADDRESS]: BigNumber(token_reserve).shiftedBy(DECIMALS * -1), + 'zilliqa': zil_reserve / 1e12, + } + //console.log(balances) + + return balances +} + +module.exports = { + zilliqa: { + tvl, + }, + methodology: 'TVL represents the state of the Aswap pool, which consists of a single liquidity pair: Zilliqa native token vs StZIL token.', + timetravel: false, + misrepresentedTokens: true, +} diff --git a/projects/axe/index.js b/projects/axe/index.js index 1f19c1a596..92b63f3532 100644 --- a/projects/axe/index.js +++ b/projects/axe/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking.js"); const treasuryAddresses = ["0xa2039621Cc042567092fAaee89B03Ef959F89712"]; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const DAI = ADDRESSES.ethereum.DAI; +const USDC = ADDRESSES.ethereum.USDC; const AXEStaking = "0x7f4d186b76a39a2da32804a8c35b3d04e0e174fd"; const AXE = "0x30AC8317DfB0ab4263CD8dB1C4F10749911B126C"; @@ -29,6 +30,9 @@ const AXE_DAI_POOL = "0xd34d3b648db688bee383022dd26a9027592b82d5"; } module.exports = { + hallmarks: [ + [1648765747, "Rug Pull"] + ], deadFrom: 1648765747, start: 1637036516, // 16 Nov 2021 ethereum: { diff --git a/projects/axion/index.js b/projects/axion/index.js index a10d9fe664..f4d47f5d8f 100644 --- a/projects/axion/index.js +++ b/projects/axion/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -17,7 +18,7 @@ async function staking(timestamp, block, chainBlocks) { }; } -const BTC = "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6"; +const BTC = ADDRESSES.polygon.WBTC; const VC = "0x660B71C03C15B24EFa800F2454540CD9011E40cB"; async function tvl(timestamp, block, chainBlocks) { const stats = await sdk.api.abi.call({ diff --git a/projects/azuro/index.js b/projects/azuro/index.js index d4f07cf261..3a7033c73f 100644 --- a/projects/azuro/index.js +++ b/projects/azuro/index.js @@ -1,22 +1,12 @@ +const { getLogs } = require('../helper/cache/getLogs') +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const config = { - polygon: { - owners: [ - '0x2a838ab9b037db117576db8d0dcc3b686748ef7c', - ], - tokens: [ - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC - ], - }, + polygon: { factory: '0xde3e9a39af548b5daa8365d30a5f6e7a7fa0203d', fromBlock: 38563568, }, + arbitrum: { factory: '0x752735c1a93fe359e7bac65f9981e7796e1039ef', fromBlock: 94336607, }, xdai: { - owners: [ - '0xac004b512c33D029cf23ABf04513f1f380B3FD0a', // v1 - '0x204e7371Ade792c5C006fb52711c50a7efC843ed', // v2 - ], - tokens: [ - '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', // WXDAI - ], + factory: '0x8ea1a7241537f10fa73363fdc6380f3fc8619c03', fromBlock: 26026402, tokensAndOwners: [[ADDRESSES.xdai.WXDAI, '0xac004b512c33D029cf23ABf04513f1f380B3FD0a']], // v1 }, } @@ -29,3 +19,23 @@ module.exports = { polygon: { tvl }, methodology: `TVL is the total amount of WXDAI and USDC held on Liquidity pools’ smart-contracts.` } + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, tokensAndOwners = [] } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xbf48d8b8335478e764061b936181c0a7b273540bd6284da4d4791758e81fd51c'], + eventAbi: 'event NewPool(address indexed lp, address indexed core, string indexed coreType, address access)', + onlyArgs: true, + fromBlock, + }) + const lps = logs.map(i => i[0]) + const tokens = await api.multiCall({ abi: 'address:token', calls: lps }) + lps.forEach((lp, i) => tokensAndOwners.push([tokens[i], lp])) + return sumTokens2({ api, tokensAndOwners, permitFailure: true }) + } + } +}) \ No newline at end of file diff --git a/projects/bagel-finance/index.js b/projects/bagel-finance/index.js index 8cf1bcaa60..78510c9e78 100644 --- a/projects/bagel-finance/index.js +++ b/projects/bagel-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const BigNumber = require("bignumber.js"); @@ -5,13 +6,13 @@ const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); const bankAddress = "0x18C32E273D0F13D5b8268B3Bc5acD30f26A8F91a"; const tokens = [ - "0x55d398326f99059ff775485246999027b3197955", - "0xe9e7cea3dedca5984780bafc599bd69add087d56", - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.ETH, "0x9c65ab58d8d978db963e63f2bfb7121627e3a739", "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + ADDRESSES.bsc.USDC, "0xbb238fce6e2ee90781cd160c9c6eaf3a4cfad801", ]; @@ -135,7 +136,7 @@ const lps = [ ]; async function bnbTvl(bankAddress, block) { let balances = { - "0x0000000000000000000000000000000000000000": ( + [ADDRESSES.null]: ( await sdk.api.eth.getBalance({ target: bankAddress, block, chain: "bsc" }) ).output, }; @@ -186,8 +187,8 @@ async function tvl(timestamp, ethBlock, chainBlocks) { /// @dev bnb const bnbBalance = await bnbTvl(bankAddress, block); - balances[getBSCAddress("0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c")] = - BigNumber(bnbBalance["0x0000000000000000000000000000000000000000"]); + balances[getBSCAddress(ADDRESSES.bsc.WBNB)] = + BigNumber(bnbBalance[ADDRESSES.null]); const lpTotalSupplys = ( await sdk.api.abi.multiCall({ diff --git a/projects/baker-guild-finance/index.js b/projects/baker-guild-finance/index.js index f5d19f8134..a1e3eb4c5a 100644 --- a/projects/baker-guild-finance/index.js +++ b/projects/baker-guild-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const {addFundsInMasterChef} = require("../helper/masterchef"); const {pool2BalanceFromMasterChefExports} = require("../helper/pool2"); @@ -13,10 +14,10 @@ const wsSPA= "0x89346b51a54263cf2e92da79b1863759efa68692"; const spa = "fantom:0x5602df4a94eb6c680190accfa2a475621e0ddbdc"; const translate = { - "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e":"0x6b175474e89094c44da98b954eedeac495271d0f", - "0x9879abdea01a879644185341f7af7d8343556b7a":"0x0000000000085d4780b73119b644ae5ecd22b376", - "0x9f47f313acfd4bdc52f4373b493eae7d5ac5b765":"avax:0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", - "0x511d35c52a3c244e7b8bd92c0c297755fbd89212":"avax:0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" + [ADDRESSES.fantom.DAI]:ADDRESSES.ethereum.DAI, + "0x9879abdea01a879644185341f7af7d8343556b7a":ADDRESSES.ethereum.TUSD, + "0x9f47f313acfd4bdc52f4373b493eae7d5ac5b765":"avax:" + ADDRESSES.avax.JOE, + "0x511d35c52a3c244e7b8bd92c0c297755fbd89212":"avax:" + ADDRESSES.avax.WAVAX } async function tvl(timestamp, block, chainBlocks) { diff --git a/projects/baksdao/index.js b/projects/baksdao/index.js index 8faf4638ab..7cfcef7460 100644 --- a/projects/baksdao/index.js +++ b/projects/baksdao/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens, } = require('../helper/unwrapLPs') const { transformBscAddress, } = require('../helper/portedTokens'); const chain = 'bsc' const DEPOSIT_TOKENS = [ - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // wBnB - '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', //ETH, - '0x55d398326f99059fF775485246999027B3197955', // USDT - '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', // BTC + ADDRESSES.bsc.WBNB, // wBnB + ADDRESSES.bsc.ETH, //ETH, + ADDRESSES.bsc.USDT, // USDT + ADDRESSES.bsc.BTCB, // BTC ] const DEPOSIT_CONTRACT = '0xe94286A3e83D66aB3bAF9840184a2E5680e9A7eC' diff --git a/projects/balancer-v1/index.js b/projects/balancer-v1/index.js index 308f6d7384..212b039d04 100644 --- a/projects/balancer-v1/index.js +++ b/projects/balancer-v1/index.js @@ -1,9 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { v1Tvl } = require('../helper/balancer') -const blacklistedTokens = ["0xC011A72400E58ecD99Ee497CF89E3775d4bd732F", "0x57Ab1E02fEE23774580C119740129eAC7081e9D3", // old synthetix -//self destructed -"0x00f109f744B5C918b13d4e6a834887Eb7d651535", "0x645F7dd67479663EE7a42feFEC2E55A857cb1833", "0x4922a015c4407F87432B179bb209e125432E4a2A", -"0xdA16D6F08F20249376d01a09FEBbAd395a246b2C", "0x9be4f6a2558f88A82b46947e3703528919CE6414", +const blacklistedTokens = [ + "0xC011A72400E58ecD99Ee497CF89E3775d4bd732F", + ADDRESSES.ethereum.sUSD_OLD, + //self destructed + "0x00f109f744B5C918b13d4e6a834887Eb7d651535", "0x645F7dd67479663EE7a42feFEC2E55A857cb1833", "0x4922a015c4407F87432B179bb209e125432E4a2A", + "0xdA16D6F08F20249376d01a09FEBbAd395a246b2C", "0x9be4f6a2558f88A82b46947e3703528919CE6414", ] module.exports = { diff --git a/projects/balancer/onchain.js b/projects/balancer/onchain.js index facd484313..057f1a0649 100644 --- a/projects/balancer/onchain.js +++ b/projects/balancer/onchain.js @@ -1,7 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { onChainTvl } = require('../helper/balancer') const { eulerTokens } = require('../helper/tokenMapping') -const blacklistedTokens = ["0xC011A72400E58ecD99Ee497CF89E3775d4bd732F", "0x57Ab1E02fEE23774580C119740129eAC7081e9D3", // old synthetix +const blacklistedTokens = [ + "0xC011A72400E58ecD99Ee497CF89E3775d4bd732F", + ADDRESSES.ethereum.sUSD_OLD, //self destructed "0x00f109f744B5C918b13d4e6a834887Eb7d651535", "0x645F7dd67479663EE7a42feFEC2E55A857cb1833", "0x4922a015c4407F87432B179bb209e125432E4a2A", "0xdA16D6F08F20249376d01a09FEBbAd395a246b2C", "0x9be4f6a2558f88A82b46947e3703528919CE6414", "0xa7fd7d83e2d63f093b71c5f3b84c27cff66a7802", @@ -17,6 +20,8 @@ const config = { polygon: { fromBlock: 15832990, }, arbitrum: { fromBlock: 222832, }, xdai: { fromBlock: 24821598, }, + polygon_zkevm: { fromBlock: 203079, }, + base: { fromBlock: 1196036, }, } module.exports = {}; diff --git a/projects/bancor/index.js b/projects/bancor/index.js index 499ad191f5..d73bdfdd7e 100644 --- a/projects/bancor/index.js +++ b/projects/bancor/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require('./abi.json'); const sdk = require('@defillama/sdk'); const { sumTokens } = require('../helper/unwrapLPs'); -const ethAddress = '0x0000000000000000000000000000000000000000'; +const ethAddress = ADDRESSES.null; const ethReserveAddresses = ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee']; async function generateCallsByBlockchain(block) { diff --git a/projects/bancor/v3.js b/projects/bancor/v3.js index 8cb6722c6b..37fbea3109 100644 --- a/projects/bancor/v3.js +++ b/projects/bancor/v3.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require('./abi.json'); const sdk = require('@defillama/sdk'); const { sumTokens } = require('../helper/unwrapLPs'); -const ethAddress = '0x0000000000000000000000000000000000000000'; +const ethAddress = ADDRESSES.null; const ethReserveAddresses = ['0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee']; const bancor = '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c' diff --git a/projects/bank-of-chain/index.js b/projects/bank-of-chain/index.js index 48c2ee5ab9..c59769e96c 100644 --- a/projects/bank-of-chain/index.js +++ b/projects/bank-of-chain/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // const BigNumber = require("bignumber.js"); // const utils = require('../helper/utils'); // const { toUSDTBalances } = require('../helper/balances'); @@ -7,8 +8,8 @@ const risk_off_abi = require("./risk_off_vault_abi.json"); const RISK_OFF_USD_VAULT = "0x30D120f80D60E7b58CA9fFaf1aaB1815f000B7c3" const RISK_OFF_ETH_VAULT = "0x8f0Cb368C63fbEDF7a90E43fE50F7eb8B9411746" -const usdtAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"; -const ethAddress = '0x0000000000000000000000000000000000000000'; +const usdtAddress = ADDRESSES.ethereum.USDT; +const ethAddress = ADDRESSES.null; const chains = { ethereum: 1, diff --git a/projects/bao-usd/index.js b/projects/bao-usd/index.js index 95090dd61a..5c711a5b08 100644 --- a/projects/bao-usd/index.js +++ b/projects/bao-usd/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require("../helper/unwrapLPs"); module.exports = { ethereum: { - tvl: sumTokensExport({ tokens: ['0x6b175474e89094c44da98b954eedeac495271d0f'], owner: '0x720282bb7e721634c95f0933636de3171dc405de'}), + tvl: sumTokensExport({ tokens: [ADDRESSES.ethereum.DAI], owner: '0x720282bb7e721634c95f0933636de3171dc405de'}), } }; \ No newline at end of file diff --git a/projects/based-finance/basedV2.js b/projects/based-finance/basedV2.js index 82f1e433b4..5b4b8b2f73 100644 --- a/projects/based-finance/basedV2.js +++ b/projects/based-finance/basedV2.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require("../helper/unwrapLPs"); const { stakings } = require("../helper/staking"); const chain = 'fantom' @@ -5,8 +6,8 @@ const chain = 'fantom' //BASED V2 const smelt = "0x141FaA507855E56396EAdBD25EC82656755CD61e"; const BoardroomV2 = "0x8ff9eFB99D522fAC6a21363b7Ca54d25477637F6"; -const usdc = "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75"; -const wftm = "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"; +const usdc = ADDRESSES.fantom.USDC; +const wftm = ADDRESSES.fantom.WFTM; const treasuryAddress = '0x0A10daD90b9C6FB8B87BFf3857A4B012890C53A5'; //BASED V2 Twisted Nodes diff --git a/projects/based-finance/index.js b/projects/based-finance/index.js index 4f02d7d355..ad339d396b 100644 --- a/projects/based-finance/index.js +++ b/projects/based-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); const { getUniTVL } = require("../helper/unknownTokens") @@ -9,10 +10,10 @@ const treasuryAddress = "0xa0e0f462d66de459711bc721ce1fdcc3d9405831"; // Token Addresses const basedTokenAddress = "0x8d7d3409881b51466b483b11ea1b8a03cded89ae"; const bshareTokenAddress = "0x49c290ff692149a4e16611c694fded42c954ab7a"; -const usdcAddress = "0x04068da6c83afcfa0e13ba15a6696662335d5b75"; -const usdtAddress = "0x049d68029688eAbF473097a2fC38ef61633A3C7A"; +const usdcAddress = ADDRESSES.fantom.USDC; +const usdtAddress = ADDRESSES.fantom.fUSDT; const maiAddress = "0xfB98B335551a418cD0737375a2ea0ded62Ea213b"; -const wftmAddress = "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"; +const wftmAddress = ADDRESSES.fantom.WFTM; const treasuryTokens = [ usdcAddress, diff --git a/projects/basilisk/index.js b/projects/basilisk/index.js new file mode 100644 index 0000000000..2dd0f26c6e --- /dev/null +++ b/projects/basilisk/index.js @@ -0,0 +1,9 @@ +const { compoundExports2 } = require('../helper/compound'); + +module.exports = { + era: compoundExports2({ + comptroller: '0x4085f99720e699106bc483dAb6CAED171EdA8D15', + cether: '0x1e8F1099a3fe6D2c1A960528394F4fEB8f8A288D', + fetchBalances: true, + }) +}; \ No newline at end of file diff --git a/projects/basis-cash.js b/projects/basis-cash.js index 180e00b7ba..04796ac67a 100644 --- a/projects/basis-cash.js +++ b/projects/basis-cash.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require('./helper/unwrapLPs') async function tvl(ts, block) { const toa = [ - ['0x6b175474e89094c44da98b954eedeac495271d0f', '0xEBd12620E29Dc6c452dB7B96E1F190F3Ee02BDE8'], - ['0x57ab1ec28d129707052df4df418d58a2d46d5f51', '0xdc42a21e38c3b8028b01a6b00d8dbc648f93305c'], - ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0x2833bdc5B31269D356BDf92d0fD8f3674E877E44'], - ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '0x51882184b7F9BEEd6Db9c617846140DA1d429fD4'], + [ADDRESSES.ethereum.DAI, '0xEBd12620E29Dc6c452dB7B96E1F190F3Ee02BDE8'], + [ADDRESSES.ethereum.sUSD, '0xdc42a21e38c3b8028b01a6b00d8dbc648f93305c'], + [ADDRESSES.ethereum.USDT, '0x2833bdc5B31269D356BDf92d0fD8f3674E877E44'], + [ADDRESSES.ethereum.USDC, '0x51882184b7F9BEEd6Db9c617846140DA1d429fD4'], ['0xdf5e0e81dff6faf3a7e52ba697820c5e32d806a8', '0xC462d8ee54953E7d7bF276612b75387Ea114c3bf'], ] diff --git a/projects/basketdao/index.js b/projects/basketdao/index.js index 8ac0f53601..d249a096c6 100644 --- a/projects/basketdao/index.js +++ b/projects/basketdao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const {unwrapUniswapLPs} = require('../helper/unwrapLPs') const BigNumber = require('bignumber.js') @@ -7,11 +8,11 @@ const dpiEthToken = '0x4d5ef58aAc27d99935E5b6B4A6778ff292059991' const bDPISLP = '0x8d782C5806607E9AAFB2AC38c1DA3838Edf8BD03' const bDPIToken = '0x0309c98B1bffA350bcb3F9fB9780970CA32a5060' const masterChef = '0xDB9daa0a50B33e4fe9d0ac16a1Df1d335F96595e' -const weth = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' +const weth = ADDRESSES.ethereum.WETH const continuousMigrator = '0x3f436dE9ef3f07b770c4DB45F60f9f1d323Bbf36' const bmiToken = "0x0aC00355F80E289f53BF368C9Bdb70f5c114C44B"; -const daiToken = '0x6b175474e89094c44da98b954eedeac495271d0f' +const daiToken = ADDRESSES.ethereum.DAI async function tvl(timestamp, block) { let balances = {}; diff --git a/projects/baton/index.js b/projects/baton/index.js new file mode 100644 index 0000000000..fb3a9a0170 --- /dev/null +++ b/projects/baton/index.js @@ -0,0 +1,42 @@ +const { getLogs } = require("../helper/cache/getLogs"); +const { nullAddress } = require("../helper/tokenMapping"); + +async function tvl(timestamp, blockHeight, _2, { api }) { + const batonFactory = "0xEB8D09235255b37fBC810df41Fa879225c04639a"; + + // get all the farms from the factory + const logs = await getLogs({ + api, + target: batonFactory, + topic: "FarmCreated(address,address,address,address,address,uint256,uint8)", + fromBlock: 17411300, + eventAbi: + "event FarmCreated(address farmAddress, address owner, address rewardsDistributor, address rewardsToken, address pairAddress, uint256 rewardsDuration, uint8 farmType)", + onlyArgs: true + }); + + // filter any farms where the reward token is not fractional nfts or the underlying pair is not paired with eth + let filteredLogs = logs.filter(i => i.farmType === 2) + const baseTokens = await api.multiCall({ abi: 'address:baseToken', calls: filteredLogs.map(i => i.pairAddress) }) + const filteredFarms = filteredLogs.filter((i, idx) => baseTokens[idx] = nullAddress) + + const farms = filteredFarms.map(i => i.farmAddress) + const pairs = filteredFarms.map(i => i.pairAddress) + const rewardTokens = filteredFarms.map(i => i.rewardsToken) + const totalSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: farms }) + const prices = await api.multiCall({ abi: 'uint256:price', calls: rewardTokens }) + const baseTokenAmounts = (await api.multiCall({ abi: "function removeQuote(uint256) view returns (uint256,uint256)", calls: pairs.map((v, i) => ({ target: v, params: [totalSupplies[i]] })) })).map(i => i[0]) + const rewardBalances = (await api.multiCall({ abi: "erc20:balanceOf", calls: rewardTokens.map((v, i) => ({ target: v, params: [farms[i]] })) })) + baseTokenAmounts.forEach(i => api.add(nullAddress, i * 2)); + rewardBalances.forEach((v, i) => api.add(nullAddress, (prices[i] * v) / 1e18)); +} + +module.exports = { + misrepresentedTokens: true, + methodology: + "Sums the total staked in baton farms and the total amount of tokens deposited as yield farming rewards.", + start: 17411300, + ethereum: { + tvl + } +}; diff --git a/projects/bayswap/index.js b/projects/bayswap/index.js new file mode 100644 index 0000000000..f87d419bd6 --- /dev/null +++ b/projects/bayswap/index.js @@ -0,0 +1,40 @@ +const { dexExport } = require('../helper/chain/sui'); + +const enrichPrefixZero = (type_) => { + const parts = type_.split('::'); + if (parts.length !== 3) { + return parts.join('::'); + } + if (parts[0].length === 65) { + parts[0] = '0x0' + parts[0].slice(2); + } + + return parts.join('::'); +}; + +const parsingPoolTypes = (types_) => { + const t = types_.substring(types_.lastIndexOf('<') + 1, types_.lastIndexOf('>')); + const slice = t.replaceAll(' ', '').split(','); + if (slice.length < 3) { + throw new Error('invalid pool type'); + } + + return { + coinXType: enrichPrefixZero(slice[0]), + coinYType: enrichPrefixZero(slice[1]), + curveType: enrichPrefixZero(slice[2]), + }; +}; + +const getTokens = (pool) => { + const {coinXType, coinYType} = parsingPoolTypes(pool.type) + return [coinXType, coinYType] +}; + +module.exports = dexExport({ + account: '0x72b55bab9064f458451ccf0157e2e0317bcd9b210476b9954081c44ee07b7702', + poolStr: 'liquidity_pool::LiquidityPool', + token0Reserve: i => i.fields.coin_x_reserve, + token1Reserve: i => i.fields.coin_y_reserve, + getTokens +}); diff --git a/projects/bchpad/index.js b/projects/bchpad/index.js index b1891fe007..b1c5f67a59 100644 --- a/projects/bchpad/index.js +++ b/projects/bchpad/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const chain = "smartbch" // token contracts const BPAD = "0x9192940099fDB2338B928DE2cad9Cd1525fEa881" -const CATS = "0x265bD28d79400D55a1665707Fa14A72978FA6043" +const CATS = ADDRESSES.smartbch._CATS // tvl pools const BPAD_POOL = "0xc39f046a0E2d081e2D01558269D1e3720D2D2EA1" // BPAD single asset pool, ended diff --git a/projects/beamer/index.js b/projects/beamer/index.js index 59837ca231..b4947a3361 100644 --- a/projects/beamer/index.js +++ b/projects/beamer/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') const config = { @@ -5,16 +6,16 @@ const config = { owner: '0x6d00f6994f36ec1a3bd008dbbc84dfa46a939001', tokens: [ nullAddress, - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', + ADDRESSES.arbitrum.USDC, + ADDRESSES.optimism.DAI, ] }, optimism: { owner: '0x0b3c3dcf4c9db39b810f306e55cd14aed5c19c0b', tokens: [ nullAddress, - '0x7f5c764cbc14f9669b88837ca1490cca17c31607', - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.DAI, ] } } diff --git a/projects/beamex/index.js b/projects/beamex/index.js new file mode 100644 index 0000000000..5fa70476e3 --- /dev/null +++ b/projects/beamex/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + moonbeam: { + tvl: gmxExports({ vault: '0x73197B461eA369b36d5ee96A1C9f090Ef512be21', }) + }, +} \ No newline at end of file diff --git a/projects/beamswap-v3/index.js b/projects/beamswap-v3/index.js new file mode 100644 index 0000000000..890183f7f8 --- /dev/null +++ b/projects/beamswap-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + moonbeam: { factory: '0xd118fa707147c54387b738f54838ea5dd4196e71', fromBlock: 3579833 }, +}) diff --git a/projects/beamswap/index.js b/projects/beamswap/index.js index 8aa14118c5..f95ebffcd9 100644 --- a/projects/beamswap/index.js +++ b/projects/beamswap/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { staking } = require('../helper/staking') -const GLINT_TOKEN = "0xcd3B51D98478D53F4515A306bE565c6EebeF1D58" +const GLINT_TOKEN = ADDRESSES.moonbeam.GLINT const SHARE_CONTRACT = "0x4204cAd97732282d261FbB7088e07557810A6408" const dexTVL = getUniTVL({ diff --git a/projects/bearfinance/index.js b/projects/bearfinance/index.js index 4f010a13f3..b1f1a185fd 100644 --- a/projects/bearfinance/index.js +++ b/projects/bearfinance/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { masterchefExports } = require('../helper/unknownTokens') const BEAR_DAI_LP = "0x9e5719236e2ce62dc286ac89ae5a0fa142ae3aa8" -const DAI = '0x6b175474e89094c44da98b954eedeac495271d0f'; +const DAI = ADDRESSES.ethereum.DAI; module.exports = masterchefExports({ diff --git a/projects/bearnfi/index.js b/projects/bearnfi/index.js index c5edb8336b..1ab8a3cae2 100644 --- a/projects/bearnfi/index.js +++ b/projects/bearnfi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getUniTVL } = require('../helper/unknownTokens') const { compoundExports } = require('../helper/compound') @@ -12,7 +13,7 @@ const url = "https://api.bdollar.fi/api/bvault/get-vaults"; const BDEX_FACTORY = "0x2C358A7C62cdb9D554A65A86EEa034bc55D1E715"; const COMPTROLLER = "0xEEea0D4aAd990c4ede8e064A8Cb0A627B432EDa0"; -const wBNB = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"; +const wBNB = ADDRESSES.bsc.WBNB; const cBNB = "0xa3948b027f94ca195eac645746435aaa7eb555a7"; const chain = 'bsc' diff --git a/projects/beefy/index.js b/projects/beefy/index.js index 80f2fe078c..45d036bf39 100644 --- a/projects/beefy/index.js +++ b/projects/beefy/index.js @@ -2,6 +2,8 @@ const utils = require('../helper/utils'); const { toUSDTBalances } = require('../helper/balances'); let _response +const distressedAssets = ['aleth']; // Add any distressed asset names here + function fetchChain(chainId, staking) { return async () => { if (!_response) _response = utils.fetchURL('https://api.beefy.finance/tvl') @@ -10,6 +12,11 @@ function fetchChain(chainId, staking) { let tvl = 0; const chain = response.data[chainId]; for (const vault in chain) { + // Skip distressed assets + if (distressedAssets.some(asset => vault.includes(asset))) { + continue; + } + const isBIFI = vault.includes("bifi") if ((isBIFI && staking) || (!isBIFI && !staking)) { tvl += Number(chain[vault]); @@ -32,7 +39,9 @@ const chains = { heco: 128, polygon: 137, fantom: 250, + zksync: 324, metis: 1088, + polygon_zkevm: 1101, moonbeam: 1284, moonriver: 1285, kava: 2222, diff --git a/projects/beekava/index.js b/projects/beekava/index.js index 9c9381c7af..2cb09480f2 100644 --- a/projects/beekava/index.js +++ b/projects/beekava/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unknownTokens') const WkavaBeekLpAddress = "0x6F95ff58Cdbf17594882E7EF948687aC81c2fEE0"; -const ERC20ContractWkavaAddress = "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b"; +const ERC20ContractWkavaAddress = ADDRESSES.kava.WKAVA; const ERC20ContractBeekAddress = "0xb520e9C5123A450828c190cb6073583a5ecd0d74"; const POL_Pool_One = "0x00635507895D30801f60a2859990420013068ee0"; diff --git a/projects/behodler/index.js b/projects/behodler/index.js index fb56635b1e..5965599a20 100644 --- a/projects/behodler/index.js +++ b/projects/behodler/index.js @@ -1,5 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { request, gql } = require("graphql-request"); const { toUSDTBalances } = require('../helper/balances'); +const { sumTokensExport } = require("../helper/unwrapLPs"); const graphUrl = 'https://api.thegraph.com/subgraphs/name/arrenv/behodler' const graphQuery = gql` @@ -28,9 +30,26 @@ async function tvl(timestamp, block) { } module.exports = { - misrepresentedTokens: true, methodology: `ERC20 tokens deposited as liquidity on the AMM. You can see this on https://analytics.behodler.io/#/, pulling the data from the 'arrenv/behodler' subgraph`, ethereum:{ - tvl, + tvl: sumTokensExport({ + owner: '0x1B8568FbB47708E9E9D31Ff303254f748805bF21', + tokens: [ + '0xaFEf0965576070D1608F374cb14049EefaD218Ec', + '0x4f5704D9D2cbCcAf11e70B34048d41A0d572993F', + ADDRESSES.ethereum.BAT, + '0x319eAd06eb01E808C80c7eb9bd77C5d8d163AddB', + '0xF047ee812b21050186f86106f6cABDfEc35366c6', + '0x155ff1A85F440EE0A382eA949f24CE4E0b751c65', + ADDRESSES.ethereum.MKR, + ADDRESSES.ethereum.LINK, + '0x4575f41308EC1483f3d399aa9a2826d74Da13Deb', + ADDRESSES.ethereum.DAI, + '0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d', + '0x42476F744292107e34519F9c357927074Ea3F75D', + '0x890ff7533Ca0C44F33167FdEEeaB1cA7E690634F', + ], + resolveLP: true, + }), }, } \ No newline at end of file diff --git a/projects/bella.js b/projects/bella.js index 7f5ee4b0d9..fb5e74d9e5 100644 --- a/projects/bella.js +++ b/projects/bella.js @@ -47,5 +47,22 @@ module.exports = { tvl, pool2, }, + era: { + pool2: async (_, _1, _2, { api }) => { + const pool2s = [ + '0x9FB6Ca27D20E569E5c8FeC359C9d33D468d2803C', + '0x3bd7a1D8c760d8be1bC57A3205cbFfBaDFB74D94' + ] + const infoABI = "function getMiningContractInfo() external view returns (address tokenX, address tokenY, uint24 fee_, address iziTokenAddr, uint256 lastTouchTime_, uint256 totalVLiquidity_, uint256 bal0, uint256 bal1, uint256 balIzi, uint256 startTime_, uint256 endTime_)" + + const data = await api.multiCall({ abi: infoABI, calls: pool2s }) + const transform = i => i.toLowerCase() === '0xb83cfb285fc8d936e8647fa9b1cc641dbaae92d9' ? 'ethereum:0xa91ac63d040deb1b7a5e4d4134ad23eb0ba07e14': 'era:'+i + for (const { tokenX, tokenY, iziTokenAddr, bal0, bal1, balIzi } of data) { + api.add(transform(tokenX), bal0, { skipChain: true}) + api.add(transform(tokenY), bal1, { skipChain: true}) + api.add(iziTokenAddr, balIzi) + } + }, + }, } diff --git a/projects/belt/index.js b/projects/belt/index.js index d4ddcf0224..b9e351d07a 100644 --- a/projects/belt/index.js +++ b/projects/belt/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const abi = require('./abi.json') const { get } = require('../helper/http') @@ -6,9 +7,9 @@ const { toUSDTBalances } = require('../helper/balances'); // https://docs.belt.fi/contracts/contract-deployed-info const bscVaults = [ - '0x51bd63F240fB13870550423D208452cA87c44444', - '0xAA20E8Cb61299df2357561C2AC2e1172bC68bc25', - '0xa8Bb71facdd46445644C277F9499Dd22f6F0A30C', + ADDRESSES.bsc.beltBTC, + ADDRESSES.bsc.beltETH, + ADDRESSES.bsc.beltBNB, '0x9171Bf7c050aC8B4cf7835e51F7b4841DFB2cCD0', '0x55E1B1e49B969C018F2722445Cd2dD9818dDCC25', '0x7a59bf07D529A5FdBab67D597d63d7D5a83E61E5', diff --git a/projects/beluga-dex/index.js b/projects/beluga-dex/index.js new file mode 100644 index 0000000000..258f7c6442 --- /dev/null +++ b/projects/beluga-dex/index.js @@ -0,0 +1,21 @@ +const { staking } = require("../helper/staking"); +const { sumTokens2 } = require('../helper/unwrapLPs') +const asssetsContract = "0xF6Eb0eE167e3b8a43E74999C47720140A9431448" + +async function tvl(timestamp, ethereumBlock, chainBlocks, { api }) { + const tokensAndOwners = await api.call({ + target: asssetsContract, + abi: "function getAssets() view returns (address[][])", + }) + return sumTokens2({ api, tokensAndOwners, }) +} + +module.exports = { + arbitrum:{ + tvl, + staking: staking( + "0x7fbdEb84D5966c1C325D8CB2E01593D74c9A41Cd", //vetoken + "0x09090e22118b375f2c7b95420c04414E4bf68e1A", //bela + ), + }, +}; diff --git a/projects/beluga-protocol/index.js b/projects/beluga-protocol/index.js index 1d9263cc29..7585ba8932 100644 --- a/projects/beluga-protocol/index.js +++ b/projects/beluga-protocol/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require('../helper/solana') const tokens = { - usdt: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', - usdc: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + usdt: ADDRESSES.solana.USDT, + usdc: ADDRESSES.solana.USDC, } const pools = { diff --git a/projects/bemo/index.js b/projects/bemo/index.js new file mode 100644 index 0000000000..a829af299b --- /dev/null +++ b/projects/bemo/index.js @@ -0,0 +1,23 @@ +const BigNumber = require("bignumber.js"); +const { post } = require('../helper/http') + +module.exports = { + timetravel: false, + methodology: "stTon", + ton: { + tvl: async () => { + const requestBody = { + "address": "EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k", + "method": "get_full_data", + "stack": [] + } + const response = await post('https://toncenter.com/api/v2/runGetMethod', requestBody) + if (! response.ok) { + throw new Error("Unknown"); + } + const result = response.result + const tonTotalSupply = parseInt(result.stack[1][1], 16) + return {"coingecko:the-open-network": BigNumber(tonTotalSupply).div(1e9).toFixed(0)}; + } + } +} diff --git a/projects/benddao-ape-staking/index.js b/projects/benddao-ape-staking/index.js index 77f989005d..5c6cde163c 100644 --- a/projects/benddao-ape-staking/index.js +++ b/projects/benddao-ape-staking/index.js @@ -1,35 +1,65 @@ - const abi = require("../benddao/helper/abis"); -const address = require("../benddao/helper/address") -const sdk = require('@defillama/sdk') +const address = require("../benddao/helper/address"); +const sdk = require("@defillama/sdk"); module.exports = { ethereum: { - tvl: async (_, _b, _cb, { api, }) => { - const balances = {} + tvl: async (_, _b, _cb, { api }) => { + const balances = {}; const addressMap = address[api.chain]; - const bnftAssetList = await api.call({ - target: addressMap.BNFTRegistry, - abi: abi.BNFTRegistry.getBNFTAssetList, - }) - - const bnftProxyList = await api.multiCall({ - calls: bnftAssetList, - target: addressMap.BNFTRegistry, - abi: abi.BNFTRegistry.bNftProxys, - }); - const apeStakingStakedTotal = await api.multiCall({ - calls: bnftProxyList, - target: addressMap.ApeCoinStaking, - abi: abi.ApeCoinStaking.stakedTotal, - }) - apeStakingStakedTotal.forEach((d) => + const nftList = [addressMap.BAYC, addressMap.MAYC, addressMap.BAKC]; + + const [stakedTotal, apeCoinBalance, nftBalance] = await Promise.all([ + api.multiCall({ + calls: [ + // v1 + addressMap.BoundBAYC, + addressMap.BoundMAYC, + addressMap.BoundBAKC, + // v2 + addressMap.BendStakeManager, + addressMap.NftVault, + ], + target: addressMap.ApeCoinStaking, + abi: abi.ApeCoinStaking.stakedTotal, + }), + api.multiCall({ + calls: [ + // v1 + addressMap.BoundBAYC, + addressMap.BoundMAYC, + addressMap.BoundBAKC, + // v2 + addressMap.BendCoinPool, + addressMap.BendNftPool, + ], + target: addressMap.ApeCoin, + abi: "erc20:balanceOf", + }), + api.multiCall({ + calls: nftList.map((nft) => ({ + target: nft, + params: [addressMap.NftVault], + })), + abi: abi.ERC721.balanceOf, + }), + ]); + + stakedTotal.forEach((d) => sdk.util.sumSingleBalance(balances, addressMap.ApeCoin, d, api.chain) ); - return balances - } - } -} \ No newline at end of file + apeCoinBalance.forEach((d) => + sdk.util.sumSingleBalance(balances, addressMap.ApeCoin, d, api.chain) + ); + + nftBalance.forEach((d, i) => { + sdk.util.sumSingleBalance(balances, nftList[i], d, api.chain); + }); + + return balances; + }, + }, +}; diff --git a/projects/benddao/helper/abis/ERC721.json b/projects/benddao/helper/abis/ERC721.json new file mode 100644 index 0000000000..6db3f7d30a --- /dev/null +++ b/projects/benddao/helper/abis/ERC721.json @@ -0,0 +1,3 @@ +{ + "balanceOf": "function balanceOf(address account) view returns (uint256)" +} diff --git a/projects/benddao/helper/abis/index.js b/projects/benddao/helper/abis/index.js index 2fb7077640..cc67db36b6 100644 --- a/projects/benddao/helper/abis/index.js +++ b/projects/benddao/helper/abis/index.js @@ -1,9 +1,11 @@ const UiPoolDataProvider = require("./UiPoolDataProvider.json"); const ApeCoinStaking = require("./ApeCoinStaking.json"); const BNFTRegistry = require("./BNFTRegistry.json"); +const ERC721 = require("./ERC721.json"); module.exports = { UiPoolDataProvider, ApeCoinStaking, BNFTRegistry, + ERC721, }; diff --git a/projects/benddao/helper/address.js b/projects/benddao/helper/address.js index 5bb59f50d4..32c0e519d4 100644 --- a/projects/benddao/helper/address.js +++ b/projects/benddao/helper/address.js @@ -1,3 +1,4 @@ +const ADDRESSES = require("../../helper/coreAssets.json"); module.exports = { ethereum: { UiPoolDataProvider: "0x5250cCE48E43AB930e45Cc8E71C87Ca4B51244cf", @@ -8,8 +9,21 @@ module.exports = { UniswapV2PairWETH: "0x336ef4e633b1117dca08c1a57f4139c62c32c935", StakedBUNI: "0x647C509AF2A2b2294bB79fCE12DaEc8e7cf938f7", Treasury: "0x472FcC65Fab565f75B1e0E861864A86FE5bcEd7B", - USDC: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + USDC: ADDRESSES.ethereum.USDC, ApeCoin: "0x4d224452801ACEd8B2F0aebE155379bb5D594381", BNFTRegistry: "0x79d922DD382E42A156bC0A354861cDBC4F09110d", + BendStakeManager: "0x9d1833becb105405a8305F775F0aF3157d12B33c", + NftVault: "0xaAa2DA255DF9Ee74C7075bCB6D81f97940908A5D", + BendCoinPool: "0x86862445f58F50382c421a7bceCBcd971cc25367", + BendNftPool: "0x9Da9571389BA2316ad98f695210aD5fB0363cDEd", + BAYC: "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", + MAYC: "0x60E4d786628Fea6478F785A6d7e704777c86a7c6", + BAKC: "0xba30E5F9Bb24caa003E9f2f0497Ad287FDF95623", + BoundBAYC: "0xDBfD76AF2157Dc15eE4e57F3f942bB45Ba84aF24", + BoundMAYC: "0x69f37e419bD1457d2a25ed3f5d418169caAe8D1F", + BoundBAKC: "0xcF2CC4994Fe9E411A6aDC30d0A11f20CD4D8d2aB", + StBAYC: "0x08f5F0126aF89B4fD5499E942891D904A027624B", + StMAYC: "0xc1ED28E4b4d8e284A41E7474CA5522b010f3A64F", + StBAKC: "0xf6d3B8098967dd349d0477F01C16E8864a832ac2", }, }; diff --git a/projects/benddao/helper/index.js b/projects/benddao/helper/index.js index 4b2a92cda5..d40d088365 100644 --- a/projects/benddao/helper/index.js +++ b/projects/benddao/helper/index.js @@ -7,18 +7,17 @@ const address = require("./address"); async function tvl(chain, timestamp, chainBlocks, { api }) { const addressMap = address[api.chain]; - const [simpleReservesData, bnftAssetList] = - await Promise.all([ - api.call({ - target: addressMap.UiPoolDataProvider, - params: [addressMap.LendPoolAddressProvider], - abi: abi.UiPoolDataProvider.getSimpleReservesData, - }), - api.call({ - target: addressMap.BNFTRegistry, - abi: abi.BNFTRegistry.getBNFTAssetList, - }), - ]); + const [simpleReservesData, bnftAssetList] = await Promise.all([ + api.call({ + target: addressMap.UiPoolDataProvider, + params: [addressMap.LendPoolAddressProvider], + abi: abi.UiPoolDataProvider.getSimpleReservesData, + }), + api.call({ + target: addressMap.BNFTRegistry, + abi: abi.BNFTRegistry.getBNFTAssetList, + }), + ]); const bnftProxyList = await api.multiCall({ calls: bnftAssetList, @@ -27,11 +26,34 @@ async function tvl(chain, timestamp, chainBlocks, { api }) { }); const toa = [ - ...bnftAssetList.map((i, idx) => [i, bnftProxyList[idx]]), - ...simpleReservesData.map((i) => [i.underlyingAsset, i.bTokenAddress]), + ...bnftAssetList.map((bnftAsset, idx) => { + const bnftProxy = bnftProxyList[idx]; + return [bnftAsset, bnftProxy]; + }), + ...simpleReservesData.map((reserve) => [ + reserve.underlyingAsset, + reserve.bTokenAddress, + ]), ]; - return sumTokens2({ api, tokensAndOwners: toa }); + const balances = await sumTokens2({ api, tokensAndOwners: toa }); + + // cause stNFT do not have price, it should use the underlying asset price + const stNFTMap = { + [addressMap.StBAYC.toLowerCase()]: addressMap.BAYC.toLowerCase(), + [addressMap.StMAYC.toLowerCase()]: addressMap.MAYC.toLowerCase(), + [addressMap.StBAKC.toLowerCase()]: addressMap.BAKC.toLowerCase(), + }; + + for (const asset in balances) { + const underlyingAsset = stNFTMap[asset]; + if (underlyingAsset) { + sdk.util.sumSingleBalance(balances, underlyingAsset, balances[asset]); + delete balances[asset]; + } + } + + return balances; } async function borrowed(chain, timestamp, chainBlocks, { api }) { diff --git a/projects/benqi-staked-avax/index.js b/projects/benqi-staked-avax/index.js index 92076aaef7..fd2468f223 100644 --- a/projects/benqi-staked-avax/index.js +++ b/projects/benqi-staked-avax/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const savaxAbi = require("./savax.json"); const SAVAX = "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE"; -const WAVAX = "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"; +const WAVAX = ADDRESSES.avax.WAVAX; const transformAddress = (addr) => `avax:${addr}`; diff --git a/projects/benswap/index.js b/projects/benswap/index.js index 5c47b63172..19568bc976 100644 --- a/projects/benswap/index.js +++ b/projects/benswap/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getUniTVL } = require('../helper/unknownTokens') const { stakingPricedLP } = require('../helper/staking') -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; +const WBCH = ADDRESSES.smartbch.WBCH; const EBEN = "0x77CB87b57F54667978Eb1B199b28a0db8C8E1c0B"; -const FLEXUSD = "0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72"; +const FLEXUSD = ADDRESSES.smartbch.flexUSD; const FACTORY = "0x8d973bAD782c1FFfd8FcC9d7579542BA7Dd0998D"; const MASTERBREEDER = "0xDEa721EFe7cBC0fCAb7C8d65c598b21B6373A2b6"; const EBEN_WBCH_LP = "0x0D4372aCc0503Fbcc7EB129e0De3283c348B82c3"; diff --git a/projects/bent/constants.js b/projects/bent/constants.js index 5c5591cc7c..45fa73b16b 100644 --- a/projects/bent/constants.js +++ b/projects/bent/constants.js @@ -1,12 +1,13 @@ -const addressZero = "0x0000000000000000000000000000000000000000"; +const ADDRESSES = require('../helper/coreAssets.json') +const addressZero = ADDRESSES.null; const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; -const wethAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const wethAddress = ADDRESSES.ethereum.WETH; const bentCVXAddress = "0x9E0441E084F5dB0606565737158aa6Ab6B970fE0"; -const CVXAddress = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; +const CVXAddress = ADDRESSES.ethereum.CVX; const pool2Address = "0xd564b2feec19df8f4d6cb52c0a4386d05a993583"; const sushiLpAddress = "0x5fa4370164a2fabeef159b893299d59ff5dc1e6d"; const bentAddress = "0x01597e397605bf280674bf292623460b4204c375"; -const daiAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"; +const daiAddress = ADDRESSES.ethereum.DAI; const weBent = "0x04637d61F538911929ff96E755B589C014fD9ce2"; const bentPools = { diff --git a/projects/bepro/index.js b/projects/bepro/index.js index 847690a766..d05e900a42 100644 --- a/projects/bepro/index.js +++ b/projects/bepro/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') /** BEPRO Protocol is available on Moonbeam and Moonriver */ @@ -7,11 +8,11 @@ const config = { bountyNetworks: [] }, "moonriver": { - token: "0xCb4a593ce512D78162C58384f0b2Fd6e802c2c47", + token: ADDRESSES.moonriver.BEPRO, bountyNetworks: ["0x85dE589aDc4bC5F17075fcd603E8A0f7561d90C9"] }, "moonbeam": { - token: "0x4EdF8E0778967012D46968ceadb75436d0426f88", + token: ADDRESSES.moonbeam.BEPRO, registry: "0x34DD5F63437FdC20557a8C6dDAeA056d3661c5e0", bountyNetworks: ["0xa9938c8712552Fe0b5312547fA96Ad9f14d58d3C"] } diff --git a/projects/betafinance/index.js b/projects/betafinance/index.js index b9ad6ce946..78cd314a2d 100644 --- a/projects/betafinance/index.js +++ b/projects/betafinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getConfig } = require('../helper/cache') const { sumTokens } = require("../helper/unwrapLPs"); @@ -6,21 +7,21 @@ const config = { ethereum: { bank: '0x972a785b390D05123497169a04c72dE652493BE1', collaterals: [ - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "0x6b175474e89094c44da98b954eedeac495271d0f", - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WETH, ], poolURL: 'https://beta-reward-xvn33y7hlq-uc.a.run.app/beta_active_eth/reward_infos' }, avax: { bank: '0xf3a82ddd4fbf49a35eccf264997f82d40510f36b', collaterals: [ - "0xc7198437980c041c805a1edcba50c1ce5db95118", - "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", - "0xd586e7f844cea2f87f50152665bcbc2c279d8d70", - "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", - "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + ADDRESSES.avax.USDT_e, + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.DAI, + ADDRESSES.avax.WETH_e, + ADDRESSES.avax.WAVAX, ], poolURL: 'https://beta-reward-xvn33y7hlq-uc.a.run.app/beta_active_avax/reward_infos' } diff --git a/projects/betswirl/index.js b/projects/betswirl/index.js index a9014f0a78..ec75654a00 100644 --- a/projects/betswirl/index.js +++ b/projects/betswirl/index.js @@ -1,10 +1,19 @@ +const { staking } = require('../helper/staking') module.exports = { - methodology: - "BetSwirl has no users TVL yet. However, it includes the bankrolls amounts (each tokens amount in the bank allowing players to bet).", - // The first Bank was deployed on Polygon at tx 0x6b99f617946d2f8c23adcd440cd3309d2da750e52d135853f38a0da11cdc3233 - start: 1648344312, // new Date(Date.UTC(2022, 2, 27, 1, 25, 12)).getTime() / 1e3, + methodology: "TVL counts BETS tokens deposited on the Staking contracts.", + start: 1687715559, bsc: { tvl: () => ({}), + staking: staking('0xeb5F6571861EAA6de9F827519B48eFe979d4d913', '0x3e0a7C7dB7bB21bDA290A80c9811DE6d47781671'), + }, + polygon: { + staking: staking('0xa184468972c71209BC31a5eF39b7321d2A839225', '0x9246a5f10a79a5a939b0c2a75a3ad196aafdb43b'), + }, + avax: { + staking: staking('0x31EDcD915e695AdAF782c482b9816613b347AC8c', '0xc763f8570a48c4c00c80b76107cbe744dda67b79'), + }, + arbitrum: { + staking: staking('0xD4BFB259D8785228e5D2c19115D5DB342E2eE064', '0xe26ae3d881f3d5def58d795f611753804e7a6b26'), }, }; diff --git a/projects/bfx/index.js b/projects/bfx/index.js new file mode 100644 index 0000000000..b8cff8baf4 --- /dev/null +++ b/projects/bfx/index.js @@ -0,0 +1,14 @@ +const { staking } = require("../helper/staking"); +const { gmxExports } = require("../helper/gmx"); + +//bsc +const bscVault = "0xDDC99EE89f9556749e8e8916eEa5d3bBA8D6F13d"; +const bscStaking = "0x0F0b54d7446110210513295336E4A85dDA65e40D"; +const bscBFX = "0x491347561CEc563aD7D91135F92dBdC700277505"; + +module.exports = { + bsc: { + staking: staking(bscStaking, bscBFX), + tvl: gmxExports({ vault: bscVault }) + }, +}; diff --git a/projects/bhavish/index.js b/projects/bhavish/index.js index 3c04e59316..5e361a69dd 100644 --- a/projects/bhavish/index.js +++ b/projects/bhavish/index.js @@ -13,4 +13,11 @@ module.exports = { ] }), }, + mantle: { + tvl: sumTokensExport({ + tokensAndOwners: [ + [nullAddress, '0xca0112597B795728d0aFC33dB2E3eD56D95F624d'], + ] + }), + } } \ No newline at end of file diff --git a/projects/biconomy/index.js b/projects/biconomy/index.js index 896d9b4142..9992332667 100644 --- a/projects/biconomy/index.js +++ b/projects/biconomy/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens2 } = require("../helper/unwrapLPs"); const { returnEthBalance } = require("../helper/utils") @@ -12,9 +13,9 @@ const config = { ], tokens: [ '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - '0x6b175474e89094c44da98b954eedeac495271d0f', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - '0xdac17f958d2ee523a2206206994597c13d831ec7', + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, ] }, polygon: { @@ -23,10 +24,10 @@ const config = { '0x2A5c2568b10A0E826BfA892Cf21BA7218310180b', ], tokens: [ - '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.WETH_1, ] }, avax: { @@ -35,10 +36,10 @@ const config = { '0x2A5c2568b10A0E826BfA892Cf21BA7218310180b', ], tokens: [ - '0xc7198437980c041c805a1edcba50c1ce5db95118', - '0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664', - '0xd586e7f844cea2f87f50152665bcbc2c279d8d70', - '0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab', + ADDRESSES.avax.USDT_e, + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.DAI, + ADDRESSES.avax.WETH_e, ] }, bsc: { @@ -47,9 +48,9 @@ const config = { '0x94D3E62151B12A12A4976F60EdC18459538FaF08', ], tokens: [ - '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', - '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', - '0x55d398326f99059ff775485246999027b3197955', + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.USDT, ] }, optimism: { @@ -59,7 +60,7 @@ const config = { ], tokens: [ '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - '0x7f5c764cbc14f9669b88837ca1490cca17c31607', + ADDRESSES.optimism.USDC, ] }, arbitrum: { @@ -69,7 +70,7 @@ const config = { ], tokens: [ '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + ADDRESSES.arbitrum.USDC, ] }, } diff --git a/projects/bifi/index.js b/projects/bifi/index.js index df6f9c2d5f..79096df090 100644 --- a/projects/bifi/index.js +++ b/projects/bifi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakings } = require("../helper/staking"); const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') @@ -9,23 +10,23 @@ const ethPool = '0x13000c4a215efe7e414bb329b2f11c39bcf92d78'; const ethTokenPools = { 'usdt': { 'pool': '0x808c3ba97268dbf9695b1ec10729e09c7e67a9e3', - 'token': '0xdac17f958d2ee523a2206206994597c13d831ec7' + 'token': ADDRESSES.ethereum.USDT }, 'dai': { 'pool': '0xd76b7060f1b646fa14740ff6ac670a4f0a6fc5e3', - 'token': '0x6b175474e89094c44da98b954eedeac495271d0f' + 'token': ADDRESSES.ethereum.DAI }, 'link': { 'pool': '0x25567603eb61a4a49f27e433652b5b8940d10682', - 'token': '0x514910771af9ca656af840dff83e8264ecf986ca' + 'token': ADDRESSES.ethereum.LINK }, 'usdc': { 'pool': '0x128647690C7733593aA3Dd149EeBC5e256E79217', - 'token': '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' + 'token': ADDRESSES.ethereum.USDC }, 'wbtc': { 'pool': '0x93948Aa8488F522d5b079AF84fe411FBCE476e9f', - 'token': '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599' + 'token': ADDRESSES.ethereum.WBTC } } @@ -34,7 +35,7 @@ const bscPool = '0x170b6AA872166eC2F8515c2B855C34B6C7563c18' const bscTokenPools = { 'usdt': { 'pool': '0x2A29598cbc17BA112C8Fd0E07Fbf5402eF57E6b8', - 'token': '0x55d398326f99059ff775485246999027b3197955' + 'token': ADDRESSES.bsc.USDT }, 'dai': { 'pool': '0xB67C5433d234d656002f12664d15ab4b40666D9B', @@ -42,19 +43,19 @@ const bscTokenPools = { }, 'eth': { 'pool': '0xf86d8218BCC15874f5D25c191FdDd43F2334c3EB', - 'token': '0x2170ed0880ac9a755fd29b2688956bd959f933f8' + 'token': ADDRESSES.bsc.ETH }, 'usdc': { 'pool': '0xBA9De5a8FD91408826616f2d6d7470A11E34c9F0', - 'token': '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d' + 'token': ADDRESSES.bsc.USDC }, 'btcb': { 'pool': '0x26d0E4707af1c1DAAd8e9BA21b99cDa7Fd24c40B', - 'token': '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c' + 'token': ADDRESSES.bsc.BTCB }, 'busd': { 'pool': '0x829ED2a2BeF8b72e648f92CBF01587C7E12e8c1e', - 'token': '0xe9e7cea3dedca5984780bafc599bd69add087d56' + 'token': ADDRESSES.bsc.BUSD } } @@ -62,19 +63,19 @@ const avaxPool = '0x446881360d6d39779D292662fca9BC85C5789dB3' const avaxTokenPools = { 'eth': { 'pool': '0x8AbA88E8A4AB28319b782199cB17f0001EE67984', - 'token': '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB' + 'token': ADDRESSES.avax.WETH_e }, 'usdt': { 'pool': '0xE893233515b7D02dD4e3D888162d4C87Dc837943', - 'token': '0xc7198437980c041c805A1EDcbA50c1Ce5db95118' + 'token': ADDRESSES.avax.USDT_e }, 'usdc': { 'pool': '0x8385Ea36dD4BDC84B3F2ac718C332E18C1E42d36', - 'token': '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664' + 'token': ADDRESSES.avax.USDC_e }, 'dai': { 'pool': '0x34DA42143b0c6E321CEb76931c637c12Bd865f7e', - 'token': '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70' + 'token': ADDRESSES.avax.DAI }, 'wbtc': { 'pool': '0xc4D1e935F02A44D44985E6b1C0eE1ee616fC146a', @@ -86,27 +87,27 @@ const klayPool = '0x829fCFb6A6EeA9d14eb4C14FaC5B29874BdBaD13'; const klaytnTokenPools = { 'keth': { 'pool': '0x07970F9D979D8594B394fE12345211C376aDfF89', - 'token': '0x34d21b1e550d73cee41151c77f3c73359527a396' + 'token': ADDRESSES.klaytn.oETH }, 'kusdt': { 'pool': '0xe0e67b991d6b5CF73d8A17A10c3DE74616C1ec11', - 'token': '0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167' + 'token': ADDRESSES.klaytn.oUSDT }, 'kdai': { 'pool': '0xE03487927e137526a2dB796A9B3b4048ab615043', - 'token': '0x5c74070fdea071359b86082bd9f9b3deaafbe32b' + 'token': ADDRESSES.klaytn.KDAI }, 'usdc': { 'pool': '0x808c707c53c3D30d0247e4b8D78AA0D8b75CAAE1', - 'token': '0x754288077d0ff82af7a5317c7cb8c444d421d103' + 'token': ADDRESSES.klaytn.oUSDC }, 'kwbtc': { 'pool': '0xa6aDE2e6c6F50a2d9b9C4b819e84b367F88C1598', - 'token': '0x16d0e1fbd024c600ca0380a4c5d57ee7a2ecbf9c' + 'token': ADDRESSES.klaytn.oWBTC }, 'kxrp': { 'pool': '0x4800577A71F68eD7ef4C09cFBe7fd6E066D5F0dA', - 'token': '0x9eaefb09fe4aabfbe6b1ca316a3c36afc83a393f' + 'token': ADDRESSES.klaytn.oXRP }, } @@ -116,7 +117,7 @@ async function eth(timestamp, block) { return sumTokens2({ block, tokensAndOwners: toa }) } -const wbtc = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" +const wbtc = ADDRESSES.ethereum.WBTC async function bitcoin(timestamp, ethBlock) { const tokenPool = { 'pool': '0x986Eb51E67e154901ff9B482835788B8f3054076', diff --git a/projects/bifrost-staking/index.js b/projects/bifrost-staking/index.js index 65da65fe40..70e47cfb16 100644 --- a/projects/bifrost-staking/index.js +++ b/projects/bifrost-staking/index.js @@ -1,18 +1,32 @@ +const BigNumber = require("bignumber.js") const { getExports } = require('../helper/heroku-api') const { nullAddress } = require('../helper/unwrapLPs') -const BigNumber = require("bignumber.js"); module.exports = { timetravel: false, - ...getExports("bifrost-staking", ['bifrost']), + bifrost: { + tvl: async () => { + const { bifrost } = getExports("bifrost-staking", ['bifrost']) + const tvl = await bifrost.tvl() + return { 'bifrost-native-coin': tvl['bifrost-native-coin'], polkadot: tvl.polkadot, kusama: tvl.kusama, moonbeam: tvl.moonbeam, moonriver: tvl.moonriver, } + } + }, ethereum: { tvl: async (_, _1, _2, { api }) => { const vETH = await api.call({ target: '0x4bc3263eb5bb2ef7ad9ab6fb68be80e43b43801f', abi: 'uint256:totalSupply' }) - const vETH_v1 = await api.call({ target: '0xc3d088842dcf02c13699f936bb83dfbbc6f721ab', abi: 'uint256:totalSupply' }) + const contract_veth1 = await api.call({ target: '0xc3d088842dcf02c13699f936bb83dfbbc6f721ab', abi: 'uint256:totalSupply' }) + const contract_veth1_null_address_balance = await api.call({ target: '0xc3d088842dcf02c13699f936bb83dfbbc6f721ab', abi: 'erc20:balanceOf', params: '0x000000000000000000000000000000000000dEaD' }) return { - [nullAddress]: new BigNumber(vETH).plus(vETH_v1).toString(), + [nullAddress]: new BigNumber(vETH).plus(contract_veth1).minus(contract_veth1_null_address_balance).toString(), } } - } + }, + filecoin: { + tvl: async () => { + const { bifrost } = getExports("bifrost-staking", ['bifrost']) + const { filecoin } = await bifrost.tvl() + return { filecoin } + } + }, } diff --git a/projects/billion-happiness/index.js b/projects/billion-happiness/index.js index ecf205e2bb..0e8a4bbbc4 100644 --- a/projects/billion-happiness/index.js +++ b/projects/billion-happiness/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { pool2 } = require("../helper/pool2.js"); const { stakings, staking } = require("../helper/staking.js"); const bhcToken = "0x6fd7c98458a943f469E1Cf4eA85B173f5Cd342F4"; const masterchef = "0xC5c482a4Ed34b80B861B4e6Eb28664a46bd3eC8B"; //"Feeling Sweet Masterchef" const pool2LP = "0x851dB01B337Ee3E5Ab161ad04356816F09EA01dc"; // "Feeling Sweet" BHC-WBNB -const bhcTokenETHW = "0x0c9f28FBdFd79f7C00B805d8c63D053c146d282c"; +const bhcTokenETHW = ADDRESSES.ethpow.BHC; const BHC_ETHW = "0x899fED261A7df2761CF0b6f7556B80669D135802"; -const WETHW = "0x7Bf88d2c0e32dE92CdaF2D43CcDc23e8Edfd5990"; +const WETHW = ADDRESSES.ethpow.WETHW; const stakingPools = [ "0xa4712bd37cdE563bDfccCfa6DE5E5c2b1Da5572B", // "Feeling Playful" diff --git a/projects/binance-beth/index.js b/projects/binance-beth/index.js index 88938e42ad..48188c8f66 100644 --- a/projects/binance-beth/index.js +++ b/projects/binance-beth/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require("../helper/unwrapLPs"); const sdk = require('@defillama/sdk') @@ -7,7 +8,7 @@ module.exports = { const api = new sdk.ChainApi({ timestamp, chain: 'bsc' }) await api.getBlock() return { - [nullAddress]: await api.call({ target: '0x250632378e573c6be1ac2f97fcdf00515d0aa91b', abi: 'uint256:totalSupply'}) + [nullAddress]: await api.call({ target: ADDRESSES.bsc.BETH, abi: 'uint256:totalSupply'}) } } } diff --git a/projects/binance-staked-eth/index.js b/projects/binance-staked-eth/index.js new file mode 100644 index 0000000000..dc8631e48b --- /dev/null +++ b/projects/binance-staked-eth/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require("@defillama/sdk") +const token = '0xa2E3356610840701BDf5611a53974510Ae27E2e1' + +module.exports = { + ethereum: { + tvl: async (_, block) => ({ + ["ethereum:" + ADDRESSES.null]: (await sdk.api.erc20.totalSupply({ target: token, block})).output + }) + }, + bsc: { + tvl: async (_, block, chainBlocks) => ({ + ["ethereum:" + ADDRESSES.null]: (await sdk.api.erc20.totalSupply({ target: token, chain:"bsc", block: chainBlocks.bsc})).output + }) + } +} diff --git a/projects/binance/config.js b/projects/binance/config.js index 3947a3eefc..b063348ad4 100644 --- a/projects/binance/config.js +++ b/projects/binance/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniqueAddresses } = require('../helper/utils') @@ -6,16 +7,22 @@ const assetList = [ ["BTC", "BTC", "34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo"], //["BTC", "BTC", "3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb"], ["BTC", "BTC", "3M219KR5vEneNb47ewrPfWyb5jQ2DjxRP6"], + ["BTC", "BTC", "3LcgLHzTvjLKBixBvkKGiadtiw2GBSKKqH"], ["BTC", "BTC", "3JJmF63ifcamPLiAmLgG96RA599yNtY3EQ"], ["BTC", "BTC", "3HdGoUTbcztBnS7UzY4vSPYhwr424CiWAA"], ["BTC", "BTC", "395vnFScKQ1ay695C6v7gf89UzoFpx3WuJ"], - ["BTC", "BTC", "3FrmCRcGKiTATfreBDM9F17yAUDoDsnWeA"], + //["BTC", "BTC", "3FrmCRcGKiTATfreBDM9F17yAUDoDsnWeA"], ["BTC", "BTC", "3FHNBLobJnbCTFTVakh5TXmEneyf5PT61B"], ["BTC", "BTC", "3LQUu4v9z6KNch71j7kbj8GPeAGUo1FW6a"], ["BTC", "BTC", "3AeUiDpPPUrUBS377584sFCpx8KLfpX9Ry"], ["BTC", "BTC", "3JFJPpH8Chwo7CDbyYQ4XcfgcjEP1FGRMJ"], ["BTC", "BTC", "34HpHYiyQwg69gFmCq2BGHjF1DZnZnBeBP"], ["BTC", "BTC", "bc1qm34lsc65zpw79lxes69zkqmk6ee3ewf0j77s3h"], + // ["BTC", "BTC", "38Xnrq8MZiKmYmwobbYdZQ5nnCbX1qvQfE"], old wallet that moved 3.1b to new one + ["BTC", "BTC", "3EbJfpmFgufYtzW9UFvf1GAfm2ted1Rwnr"], + ["BTC", "BTC", "38DN2uFMZPiHLHJigfv4kWC9JWJrNnhLcn"], + ["BTC", "BTC", "3Qxak1CZhLyZ7GVckKphLURdLBCjMfz9bA"], + ["BTC", "BTC", "36zSLdRv1jyewjaC12fqK5fptn7PqewunL"], ["ETH", "ETH", "0xbe0eb53f46cd790cd13851d5eff43d12404d33e8"], ["ETH", "ETH", "0xf977814e90da44bfa03b6295a0616a897441acec"], ["ETH", "ETH", "0x5a52e96bacdabb82fd05763e25335261b270efcb"], @@ -270,7 +277,7 @@ const assetList = [ ["ENJ", "ETH", "0xf977814e90da44bfa03b6295a0616a897441acec"], ["LTC", "LTC", "MWGTiJBNEQSfxTCrdC2VKEa55Lck27wr67"], ["LTC", "LTC", "MLkNzCps6cXou2DELVfxDuRC4uZGwr397o"], - ["LTC", "LTC", "MRwsBPhSteTreKQrNE6BXU1U33PMsn8jCS"], + //["LTC", "LTC", "MRwsBPhSteTreKQrNE6BXU1U33PMsn8jCS"], ["LTC", "LTC", "MBjKmoDwkuUbtnVd4vjymxjJx7Crca2s1z"], ["LTC", "LTC", "MJwFHGandYUFJTTHHSXg3q6u7ge4af1n4N"], ["LTC", "LTC", "MQd1fJwqBJvwLuyhr17PhEFx1swiqDbPQS"], @@ -289,6 +296,10 @@ const assetList = [ ["ETH", "OP", "0xF977814e90dA44bFA03b6295A0616a897441aceC"], ["ETH", "OP", "0xacd03d601e5bb1b275bb94076ff46ed9d753435a"], ["BUSD", "OP", "0xacd03d601e5bb1b275bb94076ff46ed9d753435a"], + ["OP", "OP", "0xF977814e90dA44bFA03b6295A0616a897441aceC"], + ["OP", "OP", "0xacd03d601e5bb1b275bb94076ff46ed9d753435a"], + ["USDT", "OP", "0xacd03d601e5bb1b275bb94076ff46ed9d753435a"], + ["USDT", "OP", "0xF977814e90dA44bFA03b6295A0616a897441aceC"], ["XRP", "XRP", "rNU4eAowPuixS5ZCWaRL72UUeKgxcKExpK"], ["XRP", "XRP", "rs8ZPbYqgecRcDzQpJYAMhSxSi5htsjnza"], ["XRP", "XRP", "rBtttd61FExHC68vsZ8dqmS3DfjFEceA1A"], @@ -305,13 +316,65 @@ const assetList = [ ["DOT", "DOT", "1743nDTMZisPgBCYSAgkUn1kVG7MePc9rvMEjoRNf4ipVkF"], ["DOT", "DOT", "1qnJN7FViy3HZaxZK9tGAA71zxHSBeUweirKqCaox4t8GT7"], ["DOT", "DOT", "16ZL8yLyXv3V3L3z9ofR1ovFLziyXaN1DPq4yffMAZ9czzBD"], + //new chains + ["USDC", "ALGO", "MTCEM5YJJSYGW2RCXYXGE4SXLSPUUEJKQAWG2GUX6CNN72KQ3XPJCM6NOI"], + ["ALGO", "ALGO", "MTCEM5YJJSYGW2RCXYXGE4SXLSPUUEJKQAWG2GUX6CNN72KQ3XPJCM6NOI"], + ["USDC", "ALGO", "QYXDGS2XJJT7QNR6EJ2YHNZFONU6ROFM6BKTBNVT63ZXQ5OC6IYSPNDJ4U"], + ["ALGO", "ALGO", "QYXDGS2XJJT7QNR6EJ2YHNZFONU6ROFM6BKTBNVT63ZXQ5OC6IYSPNDJ4U"], + ["APT", "APT", "0xed8c46bec9dbc2b23c60568f822b95b87ea395f7e3fdb5e3adc0a30c55c0a60e"], + ["APT", "APT", "0xae1a6f3d3daccaf77b55044cea133379934bba04a11b9d0bbd643eae5e6e9c70"], + ["APT", "APT", "0xd91c64b777e51395c6ea9dec562ed79a4afa0cd6dad5a87b187c37198a1f855a"], + ["APT", "APT", "0x80174e0fe8cb2d32b038c6c888dd95c3e1560736f0d4a6e8bed6ae43b5c91f6f"], + ["APT", "APT", "0x5bd7de5c56d5691f32ea86c973c73fec7b1445e59736c97158020018c080bb00"], + //new tokens UNI + ["UNI", "BEP2", "bnb142q467df6jun6rt5u2ar58sp47hm5f9wvz2cvg"], + ["UNI", "BEP2", "bnb1u2agwjat20494fmc6jnuau0ls937cfjn4pjwtn"], + ["UNI", "BEP2", "bnb1fnd0k5l4p3ck2j9x9dp36chk059w977pszdgdz"], + ["UNI", "BEP2", "bnb1lsmt5a8vqqus5fwslx8pyyemgjtg4y6ugj308t"], + ["UNI", "ETH", "0xf977814e90da44bfa03b6295a0616a897441acec"], + ["UNI", "ETH", "0x21a31ee1afc51d94c2efccaa2092ad1028285549"], + ["UNI", "ETH", "0x5a52e96bacdabb82fd05763e25335261b270efcb"], + ["UNI", "ETH", "0xbe0eb53f46cd790cd13851d5eff43d12404d33e8"], + ["UNI", "ETH", "0xdfd5293d8e347dfe59e90efd55b2956a1343963d"], + ["UNI", "ETH", "0x28c6c06298d514db089934071355e5743bf21d60"], + //new token ARB + ["ARB", "ARB", "0xf977814e90da44bfa03b6295a0616a897441acec"], + ["ARB", "ARB", "0xb38e8c17e38363af6ebdcb3dae12e0243582891d"], + ["ARB", "ETH", "0x28c6c06298d514db089934071355e5743bf21d60"], + ["ARB", "ARB", "0xf92402bb795fd7cd08fb83839689db79099c8c9c"], + // ["USDC", "ETH", "0xf8d3e5fe8bb885325d98a751a30a1573e887a953"], removed 06/07/2023 + // ["USDC", "ETH", "0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4"], removed 06/07/2023 + // ["USDC", "ETH", "0x95e63f78bd2fd5ea8a0d58182f3d998558881fda"], removed 06/07/2023 + // ["USDC", "ETH", "0x39e2d89f4b4708077a48d75c5cf2ab059a4b3e48"], removed 06/07/2023 + // ["USDC", "ETH", "0x558a87a7c8b79ffb66a3d10a4a2de8c73a46707d"], removed 06/07/2023 + // ["USDC", "ETH", "0xf033bce292bcaaf998ca13755104a4b23c04af5c"], removed 06/07/2023 + ["LTC", "LTC", "LbmGksLBwtwRXyxeazCZqKiAHX6cWN2AzN"], + ["LTC", "LTC", "LhzEoDXHXASi4hSMxrKeVoSGrED9QsBpPq"], + ["LTC", "LTC", "MB8nnFMvR5cgvpzQ1QXTDVfUM91BcsLH3k"], + // ["USDC", "TRX", "TDjPeMNaRxoNMwENrdtNYmZt1YAfVVjp59"], removed 06/07/2023 + // ["USDC", "TRX", "TL6VgVKo6natQb6hW5Hy2jcyX5EHgmwXLE"], removed 06/07/2023 + ["BTC", "BTC", "1Pzaqw98PeRfyHypfqyEgg5yycJRsENrE7"], // new wallet https://twitter.com/binance/status/1670723088802283520 + ["BTC", "BTC", "39884E3j6KZj82FK4vcCrkUvWYL5MQaS3v"], // new wallet that got 3.1b + ["TUSD", "BEP2", "bnb1fnd0k5l4p3ck2j9x9dp36chk059w977pszdgdz"], + ["TUSD", "BEP20", "0xf977814e90da44bfa03b6295a0616a897441acec"], + ["TUSD", "BEP20", "0x8894e0a0c962cb723c1976a4421c95949be2d4e3"], + ["TUSD", "BEP20", "0xe2fc31f816a9b94326492132018c3aecc4a93ae1"], + ["TUSD", "ETH", "0x21a31ee1afc51d94c2efccaa2092ad1028285549"], + ["TUSD", "ETH", "0x28c6c06298d514db089934071355e5743bf21d60"], + ["TUSD", "ETH", "0xdfd5293d8e347dfe59e90efd55b2956a1343963d"], + ["TUSD", "ETH", "0xf977814e90da44bfa03b6295a0616a897441acec"], + ["TUSD", "ETH", "0x5a52e96bacdabb82fd05763e25335261b270efcb"], + ["TUSD", "TRX", "TNXoiAJ3dct8Fjg4M9fkLFh9S2v9TXc32G"], + ["TUSD", "TRX", "TV6MuMXfmLbBqPZvBHdwFsDnQeVfnmiuSi"], + ["TUSD", "TRX", "TWd4WrZ9wn84f5x1hZhL4DHvk738ns5jwb"], + ["TUSD", "TRX", "TJCo98saj6WND61g1uuKwJ9GMWMT9WkJFo"], ] function getAddresses(chain) { return assetList.filter(i => i[1] === chain).map(i => i[2]) } function getOwners(chain) { - const isCaseSensitive = ['BTC', 'TRX', 'SOL', 'XRP', 'LTC', 'DOT'].includes(chain) + const isCaseSensitive = ['BTC', 'TRX', 'SOL', 'XRP', 'LTC', 'DOT', 'ALGO'].includes(chain) return getUniqueAddresses(assetList.filter(i => i[1] === chain).map(i => i[2]), isCaseSensitive) } @@ -323,12 +386,12 @@ module.exports = { owners: getOwners('ETH'), blacklistedTokens: [ '0x9be89d2a4cd102d8fecc6bf9da793be995c22541', // BBTC - '0xB8c77482e45F1F44dE1745F52C74426C631bDD52', // WBNB + ADDRESSES.ethereum.BNB, // WBNB ] }, bsc: { owners: getOwners('BEP20'), - tokens: ['0x0000000000000000000000000000000000000000',], + tokens: [ADDRESSES.null,], }, bep2: { geckoId: 'binancecoin', @@ -361,4 +424,10 @@ module.exports = { polkadot: { owners: getOwners('DOT') }, + algorand: { + owners: getOwners('ALGO') + }, + aptos: { + owners: getOwners('APT') + }, } \ No newline at end of file diff --git a/projects/bishares/config.js b/projects/bishares/config.js index 2f90026ba5..ea8301d2b2 100644 --- a/projects/bishares/config.js +++ b/projects/bishares/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // data taken from // https://api.thegraph.com/subgraphs/name/toffick/bisharesfunds // https://api.thegraph.com/subgraphs/name/bisharesindexfund/bisharesfunds-ybf-fantom @@ -19,7 +20,7 @@ module.exports = { "0x259c0cf00f8710b473457314420114ae4c87cee5" ], [ - "0x82f0b8b456c1a451378467398982d4834b6829c1", + ADDRESSES.fantom.MIM, "0x259c0cf00f8710b473457314420114ae4c87cee5" ], [ @@ -67,7 +68,7 @@ module.exports = { "0xa55568847c5c5be3b6c59c6e57e74677591d900d" ], [ - "0x82f0b8b456c1a451378467398982d4834b6829c1", + ADDRESSES.fantom.MIM, "0xa55568847c5c5be3b6c59c6e57e74677591d900d" ], [ @@ -103,7 +104,7 @@ module.exports = { "0xab8ac08c597fb090b36eb514ba3f3a8b4a78aed1" ], [ - "0x82f0b8b456c1a451378467398982d4834b6829c1", + ADDRESSES.fantom.MIM, "0xab8ac08c597fb090b36eb514ba3f3a8b4a78aed1" ], [ @@ -135,7 +136,7 @@ module.exports = { "0xead77cdfeb1fe4672704ba322d63a3d2bdca2025" ], [ - "0x82f0b8b456c1a451378467398982d4834b6829c1", + ADDRESSES.fantom.MIM, "0xead77cdfeb1fe4672704ba322d63a3d2bdca2025" ], [ @@ -169,7 +170,7 @@ module.exports = { "0x10a520829c1e9631ef9e60e37eea3916092caa99" ], [ - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + ADDRESSES.bsc.ETH, "0x10a520829c1e9631ef9e60e37eea3916092caa99" ], [ @@ -177,7 +178,7 @@ module.exports = { "0x10a520829c1e9631ef9e60e37eea3916092caa99" ], [ - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", + ADDRESSES.bsc.BTCB, "0x10a520829c1e9631ef9e60e37eea3916092caa99" ], [ @@ -189,7 +190,7 @@ module.exports = { "0x10a520829c1e9631ef9e60e37eea3916092caa99" ], [ - "0xe9e7cea3dedca5984780bafc599bd69add087d56", + ADDRESSES.bsc.BUSD, "0x10a520829c1e9631ef9e60e37eea3916092caa99" ], [ @@ -197,7 +198,7 @@ module.exports = { "0x28939911a862bd4e6b10e281f233a5e060114e0b" ], [ - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + ADDRESSES.bsc.ETH, "0x28939911a862bd4e6b10e281f233a5e060114e0b" ], [ @@ -253,7 +254,7 @@ module.exports = { "0x2a5f983706b6535ab5d69f003eb271ec44b5e839" ], [ - "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + ADDRESSES.bsc.WBNB, "0x2a5f983706b6535ab5d69f003eb271ec44b5e839" ], [ @@ -389,7 +390,7 @@ module.exports = { "0xfc02d63e44e71d4b8c81a436f19ce580eb7bfada" ], [ - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + ADDRESSES.bsc.ETH, "0xfc02d63e44e71d4b8c81a436f19ce580eb7bfada" ], [ @@ -405,7 +406,7 @@ module.exports = { "0xfc02d63e44e71d4b8c81a436f19ce580eb7bfada" ], [ - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", + ADDRESSES.bsc.BTCB, "0xfc02d63e44e71d4b8c81a436f19ce580eb7bfada" ], [ diff --git a/projects/biswap-v3/index.js b/projects/biswap-v3/index.js new file mode 100644 index 0000000000..bed655ce7b --- /dev/null +++ b/projects/biswap-v3/index.js @@ -0,0 +1,24 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +const config = { + bsc: { factory: '0x7c3d53606f9c03e7f54abddffc3868e1c5466863', fromBlock: 29462097 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xe857b53ada03b8d88fd7546e77c34d3b68996e6ce330f0edee6e813b7daea099'], + eventAbi: 'event NewPool (address indexed tokenX, address indexed tokenY, uint16 indexed fee, uint24 pointDelta, address pool)', + onlyArgs: true, + fromBlock, + }) + const ownerTokens = logs.map(log => [[log.tokenX, log.tokenY], log.pool]) + return sumTokens2({ api, ownerTokens }) + } + } +}) \ No newline at end of file diff --git a/projects/bitBTC.js b/projects/bitBTC.js index b1744e0417..70f8700d0e 100644 --- a/projects/bitBTC.js +++ b/projects/bitBTC.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { transformOptimismAddress } = require('./helper/portedTokens'); const WBTC = "0x68f180fcce6836688e9084f035309e29bf0a2095"; -const bitANT = "0x5029c236320b8f15ef0a657054b84d90bfbeded3"; +const bitANT = ADDRESSES.optimism.BitANT; const bitBTC = "0xc98b98d17435aa00830c87ea02474c5007e1f272"; const tvlContracts = [ diff --git a/projects/bitindi/index.js b/projects/bitindi/index.js index c1657eb14b..33d2f74235 100644 --- a/projects/bitindi/index.js +++ b/projects/bitindi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') @@ -8,6 +9,6 @@ module.exports = { }, bitindi: { tvl: () => ({}), - staking: staking('0x140c312c8841B0a7152946C0Bc2BD343bA51bbcc', '0x15E162205421dc3A47b15A1A740FbF5EAbB77921', 'bitindi'), + staking: staking('0x140c312c8841B0a7152946C0Bc2BD343bA51bbcc', ADDRESSES.bitindi.WBNI, 'bitindi'), }, }; diff --git a/projects/bitlend/index.js b/projects/bitlend/index.js index 826aed932c..9446245857 100644 --- a/projects/bitlend/index.js +++ b/projects/bitlend/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const CHAIN = 'bittorrent' // Tokens -const ETH = '0x1249C65AfB11D179FFB3CE7D4eEDd1D9b98AD006' -const USDC_T = '0x935faA2FCec6Ab81265B301a30467Bbc804b43d3' -const TRX = '0xEdf53026aeA60f8F75FcA25f8830b7e2d6200662' +const ETH = ADDRESSES.bittorrent.ETH +const USDC_T = ADDRESSES.bittorrent.USDC_t +const TRX = ADDRESSES.bittorrent.TRX // Bitlend Markets const bETH = '0xb65103C4B2Af563F9bBD8ad8CA8387d700673B6E' diff --git a/projects/bitmake/index.js b/projects/bitmake/index.js new file mode 100644 index 0000000000..2a4781423b --- /dev/null +++ b/projects/bitmake/index.js @@ -0,0 +1,13 @@ +const { cexExports } = require('../helper/cex') + +const config = { + bitcoin: { + // wallet provide by a bitmake team + owners: [ + "3F12ncAyx4VkfpvnS7ZxdpggFx4p9RKfVe", + ], + }, +} + +module.exports = cexExports(config) +module.exports.methodology = 'We are only tracking one BTC wallet. We dont have information regarding other wallets' \ No newline at end of file diff --git a/projects/bitvenus/index.js b/projects/bitvenus/index.js index f5c24bccfb..af65a1bc5c 100644 --- a/projects/bitvenus/index.js +++ b/projects/bitvenus/index.js @@ -3,35 +3,39 @@ const { cexExports } = require('../helper/cex') const config = { ethereum: { owners: [ - '0xe43c53c466a282773f204df0b0a58fb6f6a88633', - '0x2b097741854eedeb9e5c3ef9d221fb403d8d8609', - '0x686b9202a36c09ce8aba8b49ae5f75707edec5fe', - '0xef7a2610a7c9cfb2537d68916b6a87fea8acfec3', - '0x5631aa1fc1868703a962e2fd713dc02cad07c1db', - '0x4785e47ae7061632c2782384da28b9f68a5647a3' + // '0xe43c53c466a282773f204df0b0a58fb6f6a88633', Old wallets + // '0x2b097741854eedeb9e5c3ef9d221fb403d8d8609', Old wallets + // '0x686b9202a36c09ce8aba8b49ae5f75707edec5fe', Old wallets + // '0xef7a2610a7c9cfb2537d68916b6a87fea8acfec3', Old wallets + '0x5631aa1fc1868703a962e2fd713dc02cad07c1db', + '0x4785e47ae7061632c2782384da28b9f68a5647a3', + '0x25Ee4Ce905Da85df8620cB82884adDf96A14498A', + '0xE1E5F8caCc6B9Ace0894Fe7ba467328587e60bE7' ], }, bitcoin: { owners: [ - '3FdoFGYYcD1EU7ekrt2x2u2mFrjmxouMJG', - '358pjjkYRG8exw2BKZnn7Q9s6SCb7wZEWN', - '3C1ykoWkHBMZwmY8PUUMVxtJJSBkZBCtN8', - 'bc1qrm2a7u9xyeffvulm6e589qvesmt0v0rjxqfkhv' + // '3FdoFGYYcD1EU7ekrt2x2u2mFrjmxouMJG', + // '358pjjkYRG8exw2BKZnn7Q9s6SCb7wZEWN', + // '3C1ykoWkHBMZwmY8PUUMVxtJJSBkZBCtN8', + 'bc1qrm2a7u9xyeffvulm6e589qvesmt0v0rjxqfkhv', + 'bc1qvht34dma2uy23l9j862nnqr38a42kjr66e6lec' ] }, bsc: { owners: [ - '0xef7a2610a7c9cfb2537d68916b6a87fea8acfec3', + // '0xef7a2610a7c9cfb2537d68916b6a87fea8acfec3', '0x4785e47aE7061632C2782384DA28B9F68a5647a3' ] }, tron: { owners: [ - 'TPbExxiw99nMsDfWVjaweSPkMVQfZSVVZj', + 'TPbExxiw99nMsDfWVjaweSPkMVQfZSVVZj', + 'TSM8m5ADsMRySsWy7d4REX7FBXusMQCi6y' ] } } module.exports = cexExports(config) -module.exports.methodology = 'This wallets where provide by BitVenus team on the 07/02/2023' \ No newline at end of file +module.exports.methodology = 'This wallets where provide by BitVenus team on the 07/02/2023. *On the 14/07/2023 BitVenus team provided new wallets' \ No newline at end of file diff --git a/projects/blackbird-finance/index.js b/projects/blackbird-finance/index.js index be918dcc74..439f241e90 100644 --- a/projects/blackbird-finance/index.js +++ b/projects/blackbird-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {addFundsInMasterChef} = require("../helper/masterchef"); const {stakingUnknownPricedLP} = require("../helper/staking"); const {pool2BalanceFromMasterChefExports} = require("../helper/pool2"); @@ -6,11 +7,11 @@ const bird = "0x9A3d8759174f2540985aC83D957c8772293F8646"; const masterchef = "0xDF937094C6f2B757Dfd1265e5e1550Ea0055b27A"; const translate = { - "0xbed48612bc69fa1cab67052b42a95fb30c1bcfee": "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce", - "0x765277eebeca2e31912c9946eae1021199b39c61": "avax:0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "0xb44a9b6905af7c801311e8f4e76932ee959c663c": "fantom:0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", + [ADDRESSES.cronos.SHIB]: ADDRESSES.ethereum.INU, + [ADDRESSES.shiden.ETH]: "avax:" + ADDRESSES.avax.WAVAX, + [ADDRESSES.moonriver.USDT]: "fantom:" + ADDRESSES.fantom.WFTM, "0x9b8077c6590b560f1a9d60512648277d29b35a3b": "polygon:0x8a953cfe442c5e8855cc6c61b1293fa648bae472", - "0xc9baa8cfdde8e328787e29b4b078abf2dadc2055": "polygon:0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + [ADDRESSES.kcc.DAI]: "polygon:" + ADDRESSES.polygon.WMATIC_2, } async function tvl(timestamp, block, chainBlocks) { diff --git a/projects/blazestake/index.js b/projects/blazestake/index.js new file mode 100644 index 0000000000..6ddaf5ad9e --- /dev/null +++ b/projects/blazestake/index.js @@ -0,0 +1,15 @@ +const { getTokenSupply } = require("../helper/solana") + +async function tvl(_, _1, _2, { api }) { + const bSOL = 'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1' + const supply = await getTokenSupply(bSOL) + api.add(bSOL, supply * 1e9) +} + +module.exports = { + timetravel: false, + methodology: "bSOL total supply as it's equal to the SOL staked", + solana: { + tvl + }, +}; diff --git a/projects/blindex/index.js b/projects/blindex/index.js index f5026549e5..1479887dfd 100644 --- a/projects/blindex/index.js +++ b/projects/blindex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("../helper/abis/blindex.json"); const { formatAddressChecksum } = require("../helper/formatAddressChecksum.js"); @@ -22,7 +23,7 @@ const chains = { coingeckoMapping: { prefix: "rsk", "0x542fda317318ebf1d3deaf76e0b632741a7e677d": "rootstock", // RSK's WRBTC - "0x1d931bf8656d795e50ef6d639562c5bd8ac2b78f": "ethereum", // RSK's ETHs + [ADDRESSES.rsk.ETHs]: "ethereum", // RSK's ETHs "0xb450ff06d950efa9a9c0ad63790c51971c1be885": "usd-coin", // RSK's BDUS - USD stable "0x99ac494badd0cba26143bd423e39a088591c7b09": "tether-eurt", // RSK's BDEU, - Euro stable "0xa4a8fb98a26e5314397170e5d12da8b73dc2ceb5": "pax-gold", // RSK's bXAU, - Gold stable diff --git a/projects/blockng/index.js b/projects/blockng/index.js index 4ed27e46e4..465a371613 100644 --- a/projects/blockng/index.js +++ b/projects/blockng/index.js @@ -1,23 +1,24 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumUnknownTokens, getUniTVL, sumTokensExport } = require('../helper/unknownTokens'); const { staking, } = require('../helper/staking') const sdk = require('@defillama/sdk') const blockng = require('../helper/abis/blockng.json'); const chain = 'smartbch' -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04" -const LAW = "0x0b00366fBF7037E9d75E4A569ab27dAB84759302" +const WBCH = ADDRESSES.smartbch.WBCH +const LAW = ADDRESSES.smartbch.LAW const coreAssets = [ WBCH, LAW, - '0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72', // FlexUSD - '0xBc2F884680c95A02cea099dA2F524b366d9028Ba', // BlockNG pegged USDT + ADDRESSES.smartbch.flexUSD, // FlexUSD + ADDRESSES.smartbch.bcUSDT, // BlockNG pegged USDT ] const masterchefTvl = async (timestamp, ethBlock, { [chain]: block }) => { const toa = [ - ['0x0000000000000000000000000000000000000000', '0x896a8ddb5B870E431893EDa869feAA5C64f85978'], // BCH - ['0x24d8d5Cbc14FA6A740c3375733f0287188F8dF3b', '0x82112e12533A101cf442ee57899249C719dc3D4c'], // DAIQUIRI + [ADDRESSES.null, '0x896a8ddb5B870E431893EDa869feAA5C64f85978'], // BCH + [ADDRESSES.smartbch.DAIQUIRI, '0x82112e12533A101cf442ee57899249C719dc3D4c'], // DAIQUIRI ] return sumUnknownTokens({ chain, block, useDefaultCoreAssets: true, tokensAndOwners: toa, }); diff --git a/projects/blockswap/index.js b/projects/blockswap/index.js index d42d57c88c..2f1529fb82 100644 --- a/projects/blockswap/index.js +++ b/projects/blockswap/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { GraphQLClient, gql } = require('graphql-request'); -const ethAddress = '0x0000000000000000000000000000000000000000' +const ethAddress = ADDRESSES.null const lsd_subgraph = 'https://api.thegraph.com/subgraphs/name/stakehouse-dev/lsd' diff --git a/projects/bluebit/index.js b/projects/bluebit/index.js index d3b602e52a..dd1d64b357 100644 --- a/projects/bluebit/index.js +++ b/projects/bluebit/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abis.json"); const { staking } = require("../helper/staking"); const { toUSDTBalances } = require("../helper/balances"); const { getBlock } = require("../helper/http"); -const account = "0x0000000000000000000000000000000000000000"; +const account = ADDRESSES.null; const token = "0x4148d2Ce7816F0AE378d98b40eB3A7211E1fcF0D"; const veToken = "0xdf7C547f332351A86DB0D89a89799A7aB4eC9dEB"; diff --git a/projects/bluefin/index.js b/projects/bluefin/index.js index 5049dca914..e79a019b13 100644 --- a/projects/bluefin/index.js +++ b/projects/bluefin/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') // https://dapi.api.arbitrum-prod.firefly.exchange/marketData/contractAddresses module.exports = { arbitrum: { - tvl: sumTokensExport({ tokens: ['0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'], owner: '0x52b5471d04487fb85B39e3Ae47307f115fe8733F'}) + tvl: sumTokensExport({ tokens: [ADDRESSES.arbitrum.USDC], owner: '0x52b5471d04487fb85B39e3Ae47307f115fe8733F'}) } } \ No newline at end of file diff --git a/projects/bluemove-dex/index.js b/projects/bluemove-dex/index.js new file mode 100644 index 0000000000..4ec28198e6 --- /dev/null +++ b/projects/bluemove-dex/index.js @@ -0,0 +1,20 @@ +const { dexExport } = require('../helper/chain/sui') +const { mergeExports } = require('../helper/utils') + +module.exports = mergeExports([ + dexExport({ + account: '0x3f2d9f724f4a1ce5e71676448dc452be9a6243dac9c5b975a588c8c867066e92', + poolStr: '::swap::Pool', + token0Reserve: i => i.fields.reserve_x, + token1Reserve: i => i.fields.reserve_y, + eventType: "0xb24b6789e088b876afabca733bed2299fbc9e2d6369be4d1acfa17d8145454d9::swap::Created_Pool_Event", + eventTransform: i => i.pool_id + }), + dexExport({ + account: '0x5a7eca40df453efe6bb1feae99e5b8fc072d1252cbd1979eb187d625dc9b47c9', + poolStr: 'stable_swap::Stable_Pool', + token0Reserve: i => i.fields.token_x, + token1Reserve: i => i.fields.token_y, + isAMM: false, + }) +]) diff --git a/projects/blueshift/abi.json b/projects/blueshift/abi.json index 3d03d17149..549cf17145 100644 --- a/projects/blueshift/abi.json +++ b/projects/blueshift/abi.json @@ -1,6 +1,6 @@ { "BlueshiftRegistry": { - "getPortfolios": "function getPortfolios() view returns (tuple(string name, address contractAddress, address baseTokenAddress, address lpTokenAddress, uint256 lpTokenPrice, uint256 totalValue, uint256 tokenCount, tuple(address tokenAddress, uint256 amount, uint256 price, uint256 depositLimit, uint256 withdrawLimit, uint256 depositEMAPrice, uint256 withdrawEMAPrice, uint256 portfolioShare, uint256 targetWeight)[] tokens)[])" + "getPortfolios": "function getPortfolios() view returns (tuple(string[] name, address[] contractAddress, address[] baseTokenAddress, address[] lpTokenAddress, uint256[] lpTokenPrice, uint256[] totalValue, uint256[] tokenCount, uint256[] baseTokenPriceCoefficient, tuple(address[] tokenAddress, uint256[] amount, uint256[] price, uint256[] depositLimit, uint256[] withdrawLimit, uint256[] depositEMAPrice, uint256[] withdrawEMAPrice, uint256[] portfolioShare, uint256[] targetWeight)[] tokens))" }, "BlueshiftEarning": { "getAccDeposit": "uint256:getAccDeposit", diff --git a/projects/blueshift/config.json b/projects/blueshift/config.json index f4c82f253e..07d9d2bbf8 100644 --- a/projects/blueshift/config.json +++ b/projects/blueshift/config.json @@ -1,12 +1,28 @@ { "registry": { - "milkomeda": "0x83E384d119adA05195Caca26396B8f56fdDA1c91", - "milkomeda_a1": "0x93e9c79582cAd65627758bbdB067EAB1c79E005c", - "kava": "0xe46e53672B160a67faEdE644d4A339CDeC1f671c" + "milkomeda": "0xb42F2f37Dedf435F4916665d6B4c2cC643A17f14", + "milkomeda_a1": "0xa98C276d262Cc3Bf660189E2eBE74c4B8C18e50a", + "kava": "0x49399653f651A25924b3D8718276b5b4372577b1", + "polygon": "0x2080A319A4B11D097050722b6b65d09F754EdC83" }, "manualPool": { "milkomeda": "0xA4f0e3C80C77b347250B9D3999478E305FF814A4", "milkomeda_a1": "0x589E3Edd93A22FB316cff53eABA6BB958ff601cd", "kava": "0x7A60918Bd5c83Ef7e2ABA87D13e3FD704f6A77E1" + }, + "blueschain": { + "milkomeda": { + "reserve": "0xa2351AEA209ceB0ffeCd77149eC615335d7f513d", + "tokens": [ + "0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9", + "0x8c008BBA2Dd56b99f4A6aB276bE3a478cB075F0C" + ] + }, + "polygon": { + "reserve": "0x3abd79823C595C0778e51246c491126e77367b20", + "tokens": [ + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270" + ] + } } } \ No newline at end of file diff --git a/projects/blueshift/index.js b/projects/blueshift/index.js index ddea2d6f76..fd9b3427f8 100644 --- a/projects/blueshift/index.js +++ b/projects/blueshift/index.js @@ -1,66 +1,40 @@ -const sdk = require('@defillama/sdk'); -const { transformBalances } = require('../helper/portedTokens'); +const { sumTokens2 } = require('../helper/unwrapLPs') const abi = require('./abi.json'); -const config = require("./config.json"); - - -async function staking(chain, chainBlocks) { - const balances = {}; - - const value = (await sdk.api.abi.call({ - abi: abi.BlueshiftEarning.getAccDeposit, - chain: chain, - target: config.manualPool[chain], - params: [], - block: chainBlocks[chain], - })).output; - - const tokenAddress = (await sdk.api.abi.call({ - abi: abi.BlueshiftEarning.getToken, - chain: chain, - target: config.manualPool[chain], - params: [], - block: chainBlocks[chain], - })).output; - - sdk.util.sumSingleBalance(balances, tokenAddress, value); - return transformBalances(chain, balances); +const { registry, manualPool, blueschain, } = require("./config.json"); + +async function staking(_, _1, _2, { api }) { + const chain = api.chain + if (!manualPool[chain]) return {} + const value = await api.call({ abi: abi.BlueshiftEarning.getAccDeposit, target: manualPool[chain], }) + const tokenAddress = await api.call({ abi: abi.BlueshiftEarning.getToken, target: manualPool[chain], }) + api.add(tokenAddress, value) + return api.getBalances() } -async function tvl(chain, chainBlocks) { - const balances = {}; +async function tvl(_, _1, _2, { api }) { + const chain = api.chain + const { reserve, tokens } = blueschain[chain] ?? {} - const portfolios = (await sdk.api.abi.call({ - abi: abi.BlueshiftRegistry.getPortfolios, - chain: chain, - target: config.registry[chain], - params: [], - block: chainBlocks[chain], - })).output; + // Blueschain reserves + if (reserve) + await sumTokens2({ api, owner: reserve, tokens, }) - for (let portfolio of portfolios) { - const value = portfolio.totalValue; - sdk.util.sumSingleBalance(balances, portfolio.baseTokenAddress, value); + // Local reserves + if (registry[chain]) { + const portfolios = await api.call({ abi: abi.BlueshiftRegistry.getPortfolios, target: registry[chain], }) + + for (let i = 0; i < portfolios.contractAddress.length; ++i) + api.add(portfolios.baseTokenAddress[i], portfolios.totalValue[i]) } - return transformBalances(chain, balances); + return api.getBalances() } + module.exports = { methodology: 'Accumulates TVL of all Blueshift portfolios calculated in base tokens. Adds TVL of BLUES tokens staked in Blueshift yield pools.', - milkomeda: { - start: 2023331, - staking: (timestamp, block, chainBlocks) => staking('milkomeda', chainBlocks), - tvl: (timestamp, block, chainBlocks) => tvl('milkomeda', chainBlocks) - }, - milkomeda_a1: { - start: 1300, - staking: (timestamp, block, chainBlocks) => staking('milkomeda_a1', chainBlocks), - tvl: (timestamp, block, chainBlocks) => tvl('milkomeda_a1', chainBlocks) - }, - kava: { - start: 2499737, - staking: (timestamp, block, chainBlocks) => staking('kava', chainBlocks), - tvl: (timestamp, block, chainBlocks) => tvl('kava', chainBlocks) - } }; + +Object.keys(registry).forEach(chain => { + module.exports[chain] = { tvl, staking } +}) diff --git a/projects/bluespade/index.js b/projects/bluespade/index.js new file mode 100644 index 0000000000..0bf9136b7e --- /dev/null +++ b/projects/bluespade/index.js @@ -0,0 +1,22 @@ +const {staking} = require('../helper/staking') +const { gmxExports } = require('../helper/gmx') + +//Cronos +const cronosVault = '0x26e5FbFbfd38a27D5777C9C9CC5543e687E637D8'; +const cronosStaking = '0xbCCE1c2efDED06ee73183f8B20f03e452EF8495D'; +const cronosBLU = '0x1542bA4CA0fb6D1B4476a933B292002fd1959A52'; +//Polygon +const polygonVault = '0xd6f70237f501891C3E1634544F36E026250c2D3F' +const polygonStaking = '0xb710f0D97023340eB3faBC4259FEAdf3bBeDdf05' +const polygonBLU = '0x759d34685468604c695De301ad11A9418e2f1038' + +module.exports = { + cronos: { + staking: staking(cronosStaking, cronosBLU), + tvl: gmxExports({ vault: cronosVault, }) + }, + polygon:{ + staking: staking(polygonStaking, polygonBLU), + tvl: gmxExports({ vault: polygonVault, }) + } +}; diff --git a/projects/blur-finance/index.js b/projects/blur-finance/index.js index d1d39fccc1..35d1fb4b0d 100644 --- a/projects/blur-finance/index.js +++ b/projects/blur-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const abi = require('./abi') const { getChainTransform } = require('../helper/portedTokens') @@ -8,9 +9,9 @@ let totalTvl const contract = '0xf300b9171aAb493F4584b8f5601d97E627AaB451' const blur = '0x4165084a6e5388ce53c9d9892f904a2712dd943a' -const wbnb = '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c' +const wbnb = ADDRESSES.bsc.WBNB const sushi = '0x4165084A6e5388ce53c9D9892f904a2712Dd943A' -const busd = '0x66e428c3f67a68878562e79a0234c1f83c208770' +const busd = ADDRESSES.cronos.USDT async function gettotalTvl(block) { if (!totalTvl) totalTvl = getTVL() diff --git a/projects/blur-lend/index.js b/projects/blur-lend/index.js new file mode 100644 index 0000000000..0bc033ad33 --- /dev/null +++ b/projects/blur-lend/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const collateralProxy = "0x29469395eAf6f95920E59F858042f0e28D98a20B" + +module.exports = { + misrepresentedTokens: true, + methodology: 'TVL counts NFTs used as collateral to take out loans', + ethereum: { + tvl: sumTokensExport({ owners: [collateralProxy], resolveNFTs: true, }), + } +} diff --git a/projects/blur/index.js b/projects/blur/index.js index 84c4791392..2b5e18af55 100644 --- a/projects/blur/index.js +++ b/projects/blur/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') @@ -12,7 +13,7 @@ async function ethtvl(timestamp, block) { }) return { - '0x0000000000000000000000000000000000000000': ethBalance.output, + [ADDRESSES.null]: ethBalance.output, } } diff --git a/projects/bobagateway/index.js b/projects/bobagateway/index.js index add5a86f91..0f499efd72 100644 --- a/projects/bobagateway/index.js +++ b/projects/bobagateway/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const listTokens = require("./listTokens.json"); const abi = require("./abi.json"); @@ -12,8 +13,8 @@ const L1StakingTokens = [ const L2LiquidityPool = "0x3A92cA39476fF84Dc579C868D4D7dE125513B034"; const L2StakingTokens = [ - "0xe1E2ec9a85C607092668789581251115bCBD20de", //OMG on boba - "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7", //BOBA on boba + ADDRESSES.boba.OMG, //OMG on boba + ADDRESSES.boba.BOBA, //BOBA on boba ]; const calcTvl = async ( diff --git a/projects/bodhfinance/index.js b/projects/bodhfinance/index.js index 0a2767c6b3..5e37a1b692 100644 --- a/projects/bodhfinance/index.js +++ b/projects/bodhfinance/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound') -const WETH = "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000" +const WETH = ADDRESSES.metis.Metis const bETH = "0xe970c37243F3d0B2AeB041b855Ef6466CB140BcA" const unitroller = "0x97b491744587d05ca33e84bB18B61Df9B3986DcE" diff --git a/projects/bolide/index.js b/projects/bolide/index.js index 209a16accb..50e7555bf3 100644 --- a/projects/bolide/index.js +++ b/projects/bolide/index.js @@ -5,24 +5,29 @@ const sdk = require('@defillama/sdk') const BigNumber = require("bignumber.js"); const VAULTS = { - STABLECOINS: '0xf1f25A26499B023200B3f9A30a8eCEE87b031Ee1', - ETH: '0x941ef9AaF3277052e2e6c737ae9a75b229A20988', - BTC: '0xed18f1CE58fED758C7937cC0b8BE66CB02Dc45c6', - ALTCOINS: '0x5d735e9ffE9664B80c405D16921912E5B989688C', + bsc: { + STABLECOINS: '0xf1f25A26499B023200B3f9A30a8eCEE87b031Ee1', + ETH: '0x941ef9AaF3277052e2e6c737ae9a75b229A20988', + BTC: '0xed18f1CE58fED758C7937cC0b8BE66CB02Dc45c6', + ALTCOINS: '0x5d735e9ffE9664B80c405D16921912E5B989688C', + }, + polygon: { + STABLECOINS: '0x0aF9F3297f34921Acd5Ac81970929964c9f3d0a7', + } } const getTotalDepositABI = 'uint256:getTotalDeposit' -async function tvl(ts, _block, chainBlocks) { +async function tvl(chain, ts, _block, chainBlocks) { let totalUsdt = new BigNumber(0); - for (const item of Object.values(VAULTS)) { + for (const item of Object.values(VAULTS[chain])) { const result = await sdk.api.abi.call({ target: item, abi: getTotalDepositABI, - block: chainBlocks.bsc, - chain: 'bsc' + block: chainBlocks[chain], + chain: chain }); if (result && result.output) { @@ -33,7 +38,7 @@ async function tvl(ts, _block, chainBlocks) { totalUsdt = totalUsdt.plus(usdt); } } - + return { [usdtAddress]: totalUsdt, }; @@ -41,8 +46,11 @@ async function tvl(ts, _block, chainBlocks) { module.exports = { bsc: { - tvl, + tvl: tvl.bind(this, 'bsc'), staking: staking('0x3782c47e62b13d579fe748946aef7142b45b2cf7', '0x766AFcf83Fd5eaf884B3d529b432CA27A6d84617', 'bsc'), pool2: pool2('0x3782c47e62b13d579fe748946aef7142b45b2cf7', '0x12c35ed2405bc70721584594723351bf5db6235c', 'bsc'), + }, + polygon: { + tvl: tvl.bind(this, 'polygon'), } } diff --git a/projects/bonqdao/index.js b/projects/bonqdao/index.js index 3582fb708d..a3633567f4 100644 --- a/projects/bonqdao/index.js +++ b/projects/bonqdao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { stakings } = require("../helper/staking"); const TROVE_FACTORY_CONTRACT = '0x3bB7fFD08f46620beA3a9Ae7F096cF2b213768B3' @@ -7,11 +8,11 @@ const BNQ = '0x91eFbe97e08D0ffC7d31381c032D05FAd8E25aAA' // BONQ Utility Token const BNQ_STAKING_CONTRACT = '0xb1b72B3579b03dFdCfF3195486277605e55Cf703' const BNQ_BEUR_UNIV3_POOL = '0xA96373C7a591fd21b86E0c9b8E156CC81E6cBb5e' const TOKEN_COLLATERAL = [ - '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', // WMATIC - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC + ADDRESSES.polygon.WMATIC_2, // WMATIC + ADDRESSES.polygon.USDC, // USDC '0x35b2ece5b1ed6a7a99b83508f8ceeab8661e0632', // WALBT (Wrapped AllianceBlock Token) - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH - '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI + ADDRESSES.polygon.WETH_1, // WETH + ADDRESSES.polygon.DAI, // DAI ] const LP_COLLATERAL = [ '0xa1dd21527c76bb1a3b667149e741a8b0f445fae2', // Arrakis Vault V1 BEUR/DAI diff --git a/projects/bonsai-strike/index.js b/projects/bonsai-strike/index.js index 1325796341..dd5ce05870 100644 --- a/projects/bonsai-strike/index.js +++ b/projects/bonsai-strike/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); module.exports = { bsc: { - tvl: sumTokensExport({ owners: ['0x01cEF5B79044E1CCd9b6Ad76c3d0985b5A33F769', '0x4b9d1cf13129a79d92bef13dac908e9ffc665ad8'], tokens: ['0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c']}), + tvl: sumTokensExport({ owners: ['0x01cEF5B79044E1CCd9b6Ad76c3d0985b5A33F769', '0x4b9d1cf13129a79d92bef13dac908e9ffc665ad8'], tokens: [ADDRESSES.bsc.WBNB]}), } }; \ No newline at end of file diff --git a/projects/boofinance/index.js b/projects/boofinance/index.js index c28f0ee2f3..e63245dba6 100644 --- a/projects/boofinance/index.js +++ b/projects/boofinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const token0Abi = 'address:token0' @@ -11,12 +12,12 @@ const stakingAddress = "0x67712c62d1DEAEbDeF7401E59a9E34422e2Ea87c"; const hauntedHouse = "0xB178bD23876Dd9f8aA60E7FdB0A2209Fe2D7a9AB"; const transform = { - "0x4f60a160d8c2dddaafe16fcc57566db84d674bd6": "harmony:0x72cb10c6bfa5624dd07ef608027e366bd690048f", - "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e": "avax:0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664" + "0x4f60a160d8c2dddaafe16fcc57566db84d674bd6": "harmony:" + ADDRESSES.harmony.JEWEL, + [ADDRESSES.avax.USDC]: "avax:" + ADDRESSES.avax.USDC_e } -const joe = "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd"; -const xjoe = "0x57319d41f71e81f3c65f2a47ca4e001ebafd4f33"; +const joe = ADDRESSES.avax.JOE; +const xjoe = ADDRESSES.avax.xJOE; async function calcTvl(block, chain, pool2, api) { let balances = {}; diff --git a/projects/bourbon-dao/index.js b/projects/bourbon-dao/index.js index 37106ff3ca..0fc309816a 100644 --- a/projects/bourbon-dao/index.js +++ b/projects/bourbon-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {ohmTvl} = require("../helper/ohm"); const whiskey = "0xce1ad4e2810e413e2e3684decc58a0bd01c907d9"; @@ -5,9 +6,9 @@ const stakingContract = "0x5e398c5da5353182aae7410fb824a1578fc518cb"; const treasury = "0x950d8c342bc6e0bcf9c1deb87d039947f35b3eb9"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD - ["0x55d398326f99059ff775485246999027b3197955", false], // USDT - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], // WBNB + [ADDRESSES.bsc.BUSD, false], // BUSD + [ADDRESSES.bsc.USDT, false], // USDT + [ADDRESSES.bsc.WBNB, false], // WBNB ["0x96b6d5482313eecc031afeb2fb32da2ba7439ba2", true], // WHISKEY-BUSD CAKELP ] diff --git a/projects/bow/index.js b/projects/bow/index.js index e7507e9b29..7c1f8895d3 100644 --- a/projects/bow/index.js +++ b/projects/bow/index.js @@ -1,13 +1,11 @@ -const { get } = require("../helper/http"); -const { sumTokens, endPoints } = require('../helper/chain/cosmos') + +const { getConfig } = require("../helper/cache"); +const { sumTokens } = require('../helper/chain/cosmos') async function tvl() { - const bowPoolCodes = [46, 54, 36]; - const bowPools = (await Promise.all(bowPoolCodes.map(async (code) => { - const result = await get(endPoints.kujira + `/cosmwasm/wasm/v1/code/${code}/contracts?pagination.limit=100`); - return result.contracts; - }))).flat(); + const contracts = await getConfig("kujira/contracts", "https://raw.githubusercontent.com/Team-Kujira/kujira.js/master/src/resources/contracts.json"); + const bowPools = contracts["kaiyo-1"].bow.map(x => x.address) const owners = [ ...bowPools ] diff --git a/projects/bprotocol/index.js b/projects/bprotocol/index.js index 02476b27f8..8f5b611965 100644 --- a/projects/bprotocol/index.js +++ b/projects/bprotocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -22,17 +23,17 @@ const bKeeperAddress = "0xeaE019ef845A4Ffdb8829210De5D30aC6FbB5371"; const stabilityPoolAddress = "0x66017D22b0f8556afDd19FC67041899Eb65a21bb"; - const usdcEth = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" - const usdcFantom = "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75" - const usdcArbitrum = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" + const usdcEth = ADDRESSES.ethereum.USDC + const usdcFantom = ADDRESSES.fantom.USDC + const usdcArbitrum = ADDRESSES.arbitrum.USDC - const daiEth = "0x6b175474e89094c44da98b954eedeac495271d0f" - const daiFantom = "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e" + const daiEth = ADDRESSES.ethereum.DAI + const daiFantom = ADDRESSES.fantom.DAI - const usdtEth = "0xdac17f958d2ee523a2206206994597c13d831ec7" - const usdtArbitrum = "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9" + const usdtEth = ADDRESSES.ethereum.USDT + const usdtArbitrum = ADDRESSES.arbitrum.USDT - const fraxEth = "0x853d955aCEf822Db058eb8505911ED77F175b99e" + const fraxEth = ADDRESSES.ethereum.FRAX const usdcFantomBAMM = "0xEDC7905a491fF335685e2F2F1552541705138A3D" const daiFantomBAMM = "0x6d62d6Af9b82CDfA3A7d16601DDbCF8970634d22" @@ -58,7 +59,7 @@ ==================================================*/ async function compoundTvl(timestamp, block) { - if (block < cFirstBlock) return { '0x0000000000000000000000000000000000000000': '0' }; + if (block < cFirstBlock) return { [ADDRESSES.null]: '0' }; // number of accounts const { output: avatarLength } = await sdk.api.abi.call( @@ -101,7 +102,7 @@ // get the underlying token address const isCEth = cTokenAddress.toLowerCase() === "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5" const { output: token } = isCEth - ? { output: '0x0000000000000000000000000000000000000000' } // ETH has no underlying asset on Compound + ? { output: ADDRESSES.null } // ETH has no underlying asset on Compound : await sdk.api.abi.call( { block, @@ -141,7 +142,7 @@ } async function makerTvl(timestamp, block) { - if (block < mFirstBlock) return { '0x0000000000000000000000000000000000000000': '0' }; + if (block < mFirstBlock) return { [ADDRESSES.null]: '0' }; const cdpiRes = await sdk.api.abi.call( { @@ -166,13 +167,13 @@ let totalBalance = new BigNumber(0); ethBalances.forEach(balance => totalBalance = totalBalance.plus(new BigNumber(balance))); - const balances = { '0x0000000000000000000000000000000000000000': totalBalance.toString(10) }; + const balances = { [ADDRESSES.null]: totalBalance.toString(10) }; return balances } async function liquityTvl(timestamp, block) { - if (block < lFirstBlock) return { '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0': '0' }; + if (block < lFirstBlock) return { [ADDRESSES.ethereum.LUSD]: '0' }; let totalBalance = new BigNumber(0); @@ -201,7 +202,7 @@ } // all balance is lusd - return {'0x5f98805A4E8be255a32880FDeC7F6728C6568bA0' : totalBalance.toString(10)} + return {[ADDRESSES.ethereum.LUSD]: totalBalance.toString(10)} } async function tvlEth(timestamp, block) { diff --git a/projects/brainiac/index.js b/projects/brainiac/index.js index ecb4bfe679..5ef9ecfb14 100644 --- a/projects/brainiac/index.js +++ b/projects/brainiac/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound'); const { staking, sumTokensExport } = require('../helper/unknownTokens') @@ -19,7 +20,7 @@ const BRAINIAC_CKB_LP = '0xaa0f41e50dbfd8247fb397b1fffea1fea9f4e6d4' // params = comptroller , chain , brCKB , CKB module.exports = { - [chain]: compoundExports("0x5c68BDBba7151c486faCB66dc39b891030e46725", chain, "0x352d09567dE5A02415670723D09E006F623fE62e", "0x7538C85caE4E4673253fFd2568c1F1b48A71558a") + [chain]: compoundExports("0x5c68BDBba7151c486faCB66dc39b891030e46725", chain, "0x352d09567dE5A02415670723D09E006F623fE62e", ADDRESSES.godwoken_v1.pCKB) } module.exports[chain].staking = staking({ chain, useDefaultCoreAssets: true, owners: farms, tokens: [BRAINIAC], lps: [BRAINIAC_CKB_LP], }) diff --git a/projects/brewlabs/index.js b/projects/brewlabs/index.js index 1c268b1962..1985439877 100644 --- a/projects/brewlabs/index.js +++ b/projects/brewlabs/index.js @@ -39,6 +39,7 @@ async function getStakingPools(chain, poolType) { async function _getPools() { const poolTypeStr = poolType === 'pool2' ? 'farms' : 'pools' const pools = await post(`${api_endpoint}/${poolTypeStr}`, { chainId: chains[chain]}) + console.log(pools, `brewlabs ${chain} ${poolType} pools: ${pools.length}`) setCache(`brewlabs/pools`, chain, pools) return pools } @@ -62,8 +63,7 @@ async function staking(_, _b, _cb, { api, }) { const poolInfoAbi = "function poolInfo(uint256) view returns (address lpToken, uint256, uint256, uint256, uint256, uint256, uint16, uint16)" async function pool2(_, _b, _cb, { api, }) { - const pools = await getStakingPools(api.chain, 'pool2') - const infos = await api.multiCall({ abi: poolInfoAbi , calls: pools.map(i => ({ target: i.contractAddress, params: [0]}))}) - const tokensAndOwners = pools.map((v, i) => ([infos[i].lpToken, v.contractAddress])) + const pools = (await getStakingPools(api.chain, 'pool2')) + const tokensAndOwners = pools.map((v, i) => ([v.lpAddress, v.contractAddress])) return sumUnknownTokens({ api, tokensAndOwners, blacklist}) } diff --git a/projects/bridge-mutual/index.js b/projects/bridge-mutual/index.js index 0a8595a0ac..86d541ba07 100644 --- a/projects/bridge-mutual/index.js +++ b/projects/bridge-mutual/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') @@ -8,7 +9,7 @@ const config = { staking: ["0x81d73999fabec7e8355d76d1010afbe3068f08fa", "0x55978a6f6a4cfa00d5a8b442e93e42c025d0890c"], PolicyBookRegistry: "0xff13c3d2c7931e86e13c993a8cb02d68848f9613", ShieldMining: "0x6d6fCf279a63129797def89dBA82a65b3386497e", - usdt: "0xdac17f958d2ee523a2206206994597c13d831ec7", + usdt: ADDRESSES.ethereum.USDT, bmi: "0x725c263e32c72ddc3a19bea12c5a0479a81ee688", }, bsc: { @@ -16,7 +17,7 @@ const config = { staking: ["0x8be37f9bb9b09cf89774c103c52d1e660398a7b3"], PolicyBookRegistry: "0xab7c7356f706954c3c926a690e96c7b65fa76116", ShieldMining: "0xcc75bf59969e8362d064536fd941a541f81abe56", - usdt: "0x55d398326f99059fF775485246999027B3197955", + usdt: ADDRESSES.bsc.USDT, bmi: "0xb371f0eb8dfb3b47fdfc23bbcbc797954d3d4f23", }, polygon: { @@ -24,7 +25,7 @@ const config = { staking: ["0xcfdb12299c2d0111ae1cee23337e9156deabfbf5"], PolicyBookRegistry: "0xab7c7356f706954c3c926a690e96c7b65fa76116", ShieldMining: "0xde52f95ea3373fab1deefde56d35fa1dacd83e99", - usdt: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + usdt: ADDRESSES.polygon.USDT, bmi: "0xa10facae1abac4fae6312c615a9c3fd56075be1a", }, } diff --git a/projects/bright-union/index.js b/projects/bright-union/index.js index e97c8f88b8..854af6f884 100644 --- a/projects/bright-union/index.js +++ b/projects/bright-union/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const {staking} = require('../helper/staking') @@ -11,7 +12,7 @@ const BrightLPStaking = ["0x160c43821004Cb76C7e9727159dD64ab8468f61C"]; //UNIV2 const ETH_BRIGHT_UNIV2 = "0xf4835af5387fab6bbc59f496cbcfa92998469b7b"; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f" +const DAI = ADDRESSES.ethereum.DAI async function tvl (timestamp, block) { return { diff --git a/projects/brinc/index.js b/projects/brinc/index.js index ab54b96001..4fdceccc95 100644 --- a/projects/brinc/index.js +++ b/projects/brinc/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakingPricedLP } = require('../helper/staking') const {sumTokensAndLPsSharedOwners} = require('../helper/unwrapLPs') const { transformArbitrumAddress } = require("../helper/portedTokens"); @@ -10,7 +11,7 @@ async function tvl(time, ethBlock, chainBlocks){ const balances = {}; const transformAddress = await transformArbitrumAddress(); await sumTokensAndLPsSharedOwners(balances, [ - ["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", false], //dai + [ADDRESSES.optimism.DAI, false], //dai ], [treasury], chainBlocks.arbitrum, "arbitrum", transformAddress) return balances diff --git a/projects/brokkr/index.js b/projects/brokkr/index.js index 71b96fbfa0..b1f3ef2811 100644 --- a/projects/brokkr/index.js +++ b/projects/brokkr/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const INDEX_TOKEN_CONTRACT = { 'avax': '0xB0E2880D4429d10eF1956062B260aDf09557A1da' } -const USDC_TOKEN_CONTRACT = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E' +const USDC_TOKEN_CONTRACT = ADDRESSES.avax.USDC const CALM_PORTFOLIO_CONTRACT = '0x2eAf73F8E6BCf606f56E5cf201756C1f0565C068' const AMBITIOUS_PORTFOLIO_CONTRACT = '0x0294D02e9Fee4872e72697e9514aD0be671DB498' const DCA_PORTFOLIO_CONTRACTS = { diff --git a/projects/btcst/index.js b/projects/btcst/index.js index 3cedd1708d..7f3c3f5172 100644 --- a/projects/btcst/index.js +++ b/projects/btcst/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); const { transformBscAddress } = require("../helper/portedTokens"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -21,7 +22,7 @@ const vaultContracts = [ const listOfTokens = [ //BTCB - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", + ADDRESSES.bsc.BTCB, //sigmaBTC "0x2cd1075682b0fccaadd0ca629e138e64015ba11c", //sigmaDOGE diff --git a/projects/bubbleswap-v2/index.js b/projects/bubbleswap-v2/index.js new file mode 100644 index 0000000000..9c46e6795f --- /dev/null +++ b/projects/bubbleswap-v2/index.js @@ -0,0 +1,25 @@ +const { default: axios } = require('axios'); + +async function fetch(){ + + const response = await axios.get('https://api.bubbleswap.io/v2/backend/api/v1/tvl', { + headers: { + //I would prefer the user agengt to be set to something like axios, or DefiLlama, but our WAF only allows the bellow + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' + } + }) + return response.data.data.sumTVL + +} + +module.exports = { + hedera: { + tvl: () => ({}), + }, + timetravel: false, + methodology: "Data is retrieved from the api at https://api.bubbleswap.io/", + hallmarks: [ + [1683288000, "V2 Launch"], + [Math.floor(new Date('2023-07-01')/1e3), 'Project shutdown'], + ] +} \ No newline at end of file diff --git a/projects/bubbleswap/index.js b/projects/bubbleswap/index.js index 7056bbef33..1d90435596 100644 --- a/projects/bubbleswap/index.js +++ b/projects/bubbleswap/index.js @@ -1,34 +1,9 @@ -const { default: axios } = require('axios'); -async function fetch(){ - - const response = await axios.get('https://api.bubbleswap.io/analytics/api/v1/analytics/aggregate/liquidity/year', { - headers: { - //I would prefer the user agengt to be set to something like axios, or DefiLlama, but our WAF only allows the bellow - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' - } - }); - - if(!response?.data?.ok - || !response?.data?.data - || !Array.isArray(response?.data?.data) - || !response?.data?.data?.length > 0) { - - return null; - - } - - const lastItem = response.data.data[response.data.data.length - 1]; - - if(isNaN(lastItem[1])){ - return null; - } - - return Number(lastItem[1]); - -} - module.exports = { - methodology: "Data is retrieved from the api at https://analytics.bubbleswap.io/", - timetravel: false, - fetch + fetch: () => 0, + timetravel: false, + methodology: "Data is retrieved from the api at https://api.bubbleswap.io", + hallmarks: [ + [1666569600, "Start V1 Rewards"], + [1683813600, "V1 Deprecation"], + ] } \ No newline at end of file diff --git a/projects/bucket-protocol/index.js b/projects/bucket-protocol/index.js new file mode 100644 index 0000000000..ced7ee1722 --- /dev/null +++ b/projects/bucket-protocol/index.js @@ -0,0 +1,26 @@ +const sui = require("../helper/chain/sui"); + +const MAINNET_PROTOCOL_ID = + "0x9e3dab13212b27f5434416939db5dec6a319d15b89a84fd074d03ece6350d3df"; + +async function tvl(_, _1, _2, { api }) { + const protocolFields = await sui.getDynamicFieldObjects({ + parent: MAINNET_PROTOCOL_ID, + }); + + const bucketList = protocolFields.filter((item) => + item.type.includes("Bucket") + ); + + for (const bucket of bucketList) { + const coin = bucket.type.split("<").pop()?.replace(">", "") ?? ""; + api.add(coin, bucket.fields.collateral_vault); + } +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, +}; diff --git a/projects/buffer/index.js b/projects/buffer/index.js index 7e87dbf250..3da25c9935 100644 --- a/projects/buffer/index.js +++ b/projects/buffer/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { sumTokensExport } = require("../helper/unwrapLPs"); const tokens = { BFR: "0x1A5B0aaF478bf1FDA7b934c76E7692D722982a6D", - USDC_ARB: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", - USDC_POLY: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + USDC_ARB: ADDRESSES.arbitrum.USDC, + USDC_POLY: ADDRESSES.polygon.USDC, ARB: "0x912CE59144191C1204E64559FE8253a0e49E6548" }; @@ -12,6 +13,7 @@ const contracts = { USDC_POOL_V1: "0x37Cdbe3063002383B2018240bdAFE05127d36c3C", USDC_POOL_V2: "0x4d338bc1a2380752736718f49bd45d9a040fdff8", USDC_POOL_V3: "0x6Ec7B10bF7331794adAaf235cb47a2A292cD9c7e", + USDC_POOL_V4: "0xfD9f8841C471Fcc55f5c09B8ad868BdC9eDeBDE1", POLY_POOL_V1: "0x6FD5B386d8bed29b3b62C0856250cdD849b3564d", ARB_POOL_V1: "0xaE0628C88EC6C418B3F5C005f804E905f8123833", BFR_STAKING: "0x173817F33f1C09bCb0df436c2f327B9504d6e067" @@ -26,22 +28,25 @@ module.exports = { contracts.USDC_POOL_V1, contracts.USDC_POOL_V2, contracts.USDC_POOL_V3, - contracts.ARB_POOL_V1 + contracts.ARB_POOL_V1, + contracts.USDC_POOL_V4 ] }) }, polygon: { tvl: sumTokensExport({ tokens: [tokens.USDC_POLY], - owners: [ - contracts.POLY_POOL_V1 - ] + owners: [contracts.POLY_POOL_V1] }) }, hallmarks: [ [Math.floor(new Date("2022-10-26") / 1e3), "Shifted to USDC POL pool"], - [Math.floor(new Date("2023-01-30") / 1e3), "Opened USDC BLP pool to the public"], + [ + Math.floor(new Date("2023-01-30") / 1e3), + "Opened USDC BLP pool to the public" + ], [Math.floor(new Date("2023-02-22") / 1e3), "Added a USDC Pool on polygon"], - [Math.floor(new Date("2023-03-22") / 1e3), "Added ARB Pool"] + [Math.floor(new Date("2023-03-22") / 1e3), "Added ARB Pool"], + [Math.floor(new Date("2023-04-14") / 1e3), "Added USDC Protocol owned liquidity Pool"], ] }; diff --git a/projects/bullish/index.js b/projects/bullish/index.js deleted file mode 100644 index 6ebbd5c85e..0000000000 --- a/projects/bullish/index.js +++ /dev/null @@ -1,20 +0,0 @@ -const { get_account_tvl } = require("../helper/chain/eos"); - -const accounts = [ - "bullishfunds", // deposit account - "j4obibe5lfv1", // cold account - "vbdoctdtpwb1", // withdraw account -]; - -// Bullish -// https://bullish.com -async function eos() { - return await get_account_tvl(accounts, [["eosio.token", "EOS", "eos"]]); -} - -module.exports = { - methodology: `Bullish TVL is achieved by querying token balances from Bullish funds account.`, - eos: { - tvl: eos - }, -} diff --git a/projects/bumper/index.js b/projects/bumper/index.js index cd13a9ada6..6c5b8024d7 100644 --- a/projects/bumper/index.js +++ b/projects/bumper/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" +const USDC = ADDRESSES.ethereum.USDC const contract = "0xBabeE6d5F6EDD301B5Fae591a0D61AB702b359d0" async function tvl(time, block) { return { diff --git a/projects/burgerswap/index.js b/projects/burgerswap/index.js index 1a0be7cfe3..f48dd91cfe 100644 --- a/projects/burgerswap/index.js +++ b/projects/burgerswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { getUniTVL } = require('../helper/unknownTokens') @@ -7,7 +8,7 @@ const stakingContract = "0x9154c2684aeF8d106babcB19Aa81d4FabF7581ec"; const BURGER = "0xae9269f27437f0fcbc232d39ec814844a51d6b8f"; const Factory = "0x8a1E9d3aEbBBd5bA2A64d3355A48dD5E9b511256"; -const WBNB = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; +const WBNB = ADDRESSES.bsc.WBNB; const shackChef = "0x07dE034A0Fc0DA7a0bf703F6DcA7025bcD61BA3e"; diff --git a/projects/butternetwork/index.js b/projects/butternetwork/index.js index a4a6938cd1..b482ea84d9 100644 --- a/projects/butternetwork/index.js +++ b/projects/butternetwork/index.js @@ -1,33 +1,34 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/sumTokens') const config = { bsc: { mosContract: "0x630105189c7114667a7179aa57f07647a5f42b7f", tokens: { - USDT: "0x55d398326f99059fF775485246999027B3197955", - USDC: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + USDT: ADDRESSES.bsc.USDT, + USDC: ADDRESSES.bsc.USDC, DAI: "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", - ETH: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + ETH: ADDRESSES.bsc.ETH, // MAP: "0x8105ECe4ce08B6B6449539A5db23e23b973DfA8f" } }, polygon: { mosContract: "0x630105189c7114667a7179aa57f07647a5f42b7f", tokens: { - USDT: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - USDC: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - DAI: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - ETH: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + USDT: ADDRESSES.polygon.USDT, + USDC: ADDRESSES.polygon.USDC, + DAI: ADDRESSES.polygon.DAI, + ETH: ADDRESSES.polygon.WETH_1, // MAP: "0xBAbceE78586d3e9E80E0d69601A17f983663Ba6a" } }, ethereum: { mosContract: "0x630105189c7114667a7179aa57f07647a5f42b7f", tokens: { - USDT: "0xdAC17F958D2ee523a2206206994597C13D831ec7", - USDC: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - DAI: "0x6B175474E89094C44Da98b954EedeAC495271d0F", - ETH: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + USDT: ADDRESSES.ethereum.USDT, + USDC: ADDRESSES.ethereum.USDC, + DAI: ADDRESSES.ethereum.DAI, + ETH: ADDRESSES.ethereum.WETH, // MAP: "0x9e976f211daea0d652912ab99b0dc21a7fd728e4" } }, @@ -45,10 +46,10 @@ const config = { mosContract: "0x630105189c7114667a7179Aa57f07647a5f42B7F", tokens: { // USDT: "0x33daba9618a75a7aff103e53afe530fbacf4a3dd", - // USDC: "0x9f722b2cb30093f766221fd0d37964949ed66918", + // USDC: ADDRESSES.map.USDC, // DAI: "0xEdDfAac857cb94aE8A0347e2b1b06f21AA1AAeFA", - // ETH: "0x05ab928d446d8ce6761e368c8e7be03c3168a9ec", - MAP: "0x13cb04d4a5dfb6398fc5ab005a6c84337256ee23" + // ETH: ADDRESSES.map.ETH, + MAP: ADDRESSES.map.WMAPO } } } diff --git a/projects/bzx.js b/projects/bzx.js deleted file mode 100644 index e7c3100f16..0000000000 --- a/projects/bzx.js +++ /dev/null @@ -1,14 +0,0 @@ -const utils = require('./helper/utils'); - -/* * * * * * * * -* ==> Correct adapter needs to be created. -* -*****************/ -async function fetch() { - let staked = await utils.fetchURL('https://api.bzx.network/v1/vault-balance-usd?networks=bsc,eth,polygon') - return Number(staked.data.data.bsc.all) + Number(staked.data.data.eth.all) + Number(staked.data.data.polygon.all); -} - -module.exports = { - fetch -} diff --git a/projects/caffeinefund/index.js b/projects/caffeinefund/index.js deleted file mode 100644 index ae7edea73b..0000000000 --- a/projects/caffeinefund/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const { tombTvl } = require('../helper/tomb'); - -const cfn = "0x3873788Acb34a7d67e90F053da8598aEF76298c6"; -const cshare = "0x41160139986dFfE2011a07fbB5F4B316200A5419"; - -const boardroom = "0xf916Dc7bfEAd1cA29cB1aCE71D82dFF68Cc12291"; -const rewardPool = "0x803b87cC88B701E4F871939826944e1d0413747c"; - -const pool2lps = [ - "0x504183690063734eAAd4f53b77729266b28E3b60", - "0x190a83FdaC8560d0e6ED2ab00dDE62D648A46747" -] - -module.exports = { - ...tombTvl(cfn, cshare, rewardPool, boardroom, pool2lps, "avax", undefined, false, pool2lps[1]) -} \ No newline at end of file diff --git a/projects/cakedao/index.js b/projects/cakedao/index.js index b6668cea68..f306220cc0 100644 --- a/projects/cakedao/index.js +++ b/projects/cakedao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const cakeStaking = "0xA3E4200CA1ac92331d529327E82d89C149CcD81C"; @@ -6,10 +7,10 @@ const cake = "0x4eb49a2f9a79053866fae806fac95a3ef5b92c05"; const treasury = "0x829D805F26E26aE6c2C6294B7fF9c0fE14d982Ac"; const treasuryTokens = [ ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], // MIM - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], // WAVAX, - ["0xc7198437980c041c805a1edcba50c1ce5db95118", false], // USDT + [ADDRESSES.avax.WAVAX, false], // WAVAX, + [ADDRESSES.avax.USDT_e, false], // USDT ["0x50b7545627a5162f82a992c33b87adc75187b218", false], // WBTC - ["0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", false], // WETH + [ADDRESSES.avax.WETH_e, false], // WETH ["0x84d2fe6adace63407f4b6bd91ab9f782ba3cb420", true], // CAKE-MIM JLP ["0xb8df8111a74e5fd62b13dbbe59ddeb343fc91d4a", true] // CAKE-WAVAX JLP ] diff --git a/projects/camel-farm/index.js b/projects/camel-farm/index.js index 7aa8eac485..62b5b0c57f 100644 --- a/projects/camel-farm/index.js +++ b/projects/camel-farm/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { masterchefExports } = require('../helper/unknownTokens') module.exports = masterchefExports({ chain: 'arbitrum', masterchef: '0xceFDbfaf8E0f5b52F57c435dAD670554aF57EBFF', nativeToken: '0xb5734ac76d44bdf32b8dd4331e5bfc3bf9989cda', - coreAssets: ['0x82af49447d8a07e3bd95bd0d56f35241523fbab1'] + coreAssets: [ADDRESSES.arbitrum.WETH] }) \ No newline at end of file diff --git a/projects/camelot-v2/index.js b/projects/camelot-v2/index.js index 447ba8602c..736a4682aa 100644 --- a/projects/camelot-v2/index.js +++ b/projects/camelot-v2/index.js @@ -1,5 +1,13 @@ + const { uniV3Export } = require('../helper/uniswapV3') +const { mergeExports } = require('../helper/utils'); -module.exports = uniV3Export({ +const export1 = uniV3Export({ arbitrum: { factory: '0xd490f2f6990c0291597fd1247651b4e0dcf684dd', fromBlock: 75633510, isAlgebra: true, }, -}) \ No newline at end of file +}) + +const export2 = uniV3Export({ + arbitrum: { factory: '0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B', fromBlock: 75633510, isAlgebra: true, }, +}) + +module.exports = mergeExports([export1, export2]); \ No newline at end of file diff --git a/projects/camelot/index.js b/projects/camelot/index.js index 1458b0bd9c..060254dd45 100644 --- a/projects/camelot/index.js +++ b/projects/camelot/index.js @@ -1,9 +1,9 @@ -const { uniTvlExport } = require("../helper/calculateUniTvl"); +const { getUniTVL } = require("../helper/unknownTokens"); + module.exports = { - doublecounted: false, - timetravel: true, + misrepresentedTokens: true, start: 1669075200, arbitrum: { - tvl: uniTvlExport("0x6EcCab422D763aC031210895C81787E87B43A652", "arbitrum"), + tvl: getUniTVL({ factory: '0x6EcCab422D763aC031210895C81787E87B43A652', useDefaultCoreAssets: true,}), }, }; \ No newline at end of file diff --git a/projects/canto-lending/index.js b/projects/canto-lending/index.js index 528cb06db2..c7e02a89e3 100644 --- a/projects/canto-lending/index.js +++ b/projects/canto-lending/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound') @@ -8,12 +9,12 @@ const addresses = { NoteUSDCLP: '0x9571997a66D63958e1B3De9647C22bD6b9e7228c', CantoETHLP: '0x216400ba362d8FCE640085755e47075109718C8B', Comptroller: '0x5E23dC409Fc2F832f83CEc191E245A191a4bCc5C', - Note: '0x4e71A2E537B7f9D9413D3991D37958c0b5e1e503', - USDC: '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', - USDT: '0xd567B3d7B8FE3C79a1AD8dA978812cfC4Fa05e75', - ATOM: '0xecEEEfCEE421D8062EF8d6b4D814efe4dc898265', - ETH: '0x5FD55A1B9FC24967C4dB09C513C3BA0DFa7FF687', - WCANTO: '0x826551890Dc65655a0Aceca109aB11AbDbD7a07B', + Note: ADDRESSES.canto.NOTE, + USDC: ADDRESSES.functionx.WFX, + USDT: ADDRESSES.functionx.PUNDIX, + ATOM: ADDRESSES.functionx.USDT, + ETH: ADDRESSES.functionx.PURSE, + WCANTO: ADDRESSES.canto.WCANTO, CCANTO: '0xb65ec550ff356eca6150f733ba9b954b2e0ca488', NOTE_WCANTO: '0x1d20635535307208919f0b67c3b2065965a85aa9', ETH_WCANTO: '0x216400ba362d8fce640085755e47075109718c8b', diff --git a/projects/cantohm/index.js b/projects/cantohm/index.js index 77dfe066eb..ffedffea92 100644 --- a/projects/cantohm/index.js +++ b/projects/cantohm/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unknownTokens"); const lps = [ '0x2382994D8A15d2dd2aAE10561688Ef6cbe10CB8C', @@ -11,8 +12,8 @@ module.exports = { tvl: sumTokensExport({ owner: '0xB8Ce90A08bdAdd3e6e6cD3173c0661FA94Aa81c5', tokens: [ - '0x4e71A2E537B7f9D9413D3991D37958c0b5e1e503', - '0x826551890Dc65655a0Aceca109aB11AbDbD7a07B', + ADDRESSES.canto.NOTE, + ADDRESSES.canto.WCANTO, ...lps, ], useDefaultCoreAssets: true, diff --git a/projects/cap-v4/index.js b/projects/cap-v4/index.js index 5438432b53..bd6f77f473 100644 --- a/projects/cap-v4/index.js +++ b/projects/cap-v4/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') const vault = "0xba9736a3fc948f8c489a7e975114eaf2b7f1c3fc"; @@ -8,7 +9,7 @@ module.exports = { arbitrum: { tvl: sumTokensExport({ owners: [vault, fundStore], tokens: [ nullAddress, - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',//USDC + ADDRESSES.arbitrum.USDC,//USDC ]}), staking: sumTokensExport({ owners: [vault, fundStore], tokens: [cap]}) }, diff --git a/projects/cap/index.js b/projects/cap/index.js index 30ba2b45c2..8b16d2a118 100644 --- a/projects/cap/index.js +++ b/projects/cap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unwrapLPs') const contracts = { @@ -13,7 +14,7 @@ const contracts = { "usdcPool2": "0xf16033d20adda47dc99ea291d0f4c4fef2ff47af", }; const cap = "0x031d35296154279dc1984dcd93e392b1f946737b"; -const usdc = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"; +const usdc = ADDRESSES.arbitrum.USDC; module.exports = { methodology: "ETH locked on trading contracts", diff --git a/projects/carbon/index.js b/projects/carbon/index.js index 1fe2cf6856..bc6d1aca9f 100644 --- a/projects/carbon/index.js +++ b/projects/carbon/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const BigNumber = require("bignumber.js"); const stakingETHContract = "0x27F0408729dCC6A4672e1062f5003D2a07E4E10D"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH = ADDRESSES.ethereum.WETH; const stakingCARBONContract = "0x2C5058325373d02Dfd6c08E48d91FcAf8fD49f45"; const CARBON = "0xfa42da1bd08341537a44a4ca9d236d1c00a98b40"; @@ -21,7 +22,7 @@ const lpAddresses = [ "0x89450F6C7d7f2c5971E9Ee28e94d8b199d17f673", ]; -const WETH_arb = "0x82af49447d8a07e3bd95bd0d56f35241523fbab1"; +const WETH_arb = ADDRESSES.arbitrum.WETH; const NYAN = "0xed3fb761414da74b74f33e5c5a1f78104b188dfc"; async function pool2(time, ethBlock, chainBlocks) { diff --git a/projects/carbondefi/index.js b/projects/carbondefi/index.js new file mode 100644 index 0000000000..ad46c9f01e --- /dev/null +++ b/projects/carbondefi/index.js @@ -0,0 +1,21 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const controller = '0xC537e898CD774e2dCBa3B14Ea6f34C93d5eA45e1' + +async function tvl(_, _b, _cb, { 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: 17087375, + }) + const tokens = logs.map(i => [i.token0, i.token1]).flat() + + return sumTokens2({ api, owner: controller, tokens, }) +} + + +module.exports = { ethereum: { tvl } } \ No newline at end of file diff --git a/projects/carmine-options/abi.js b/projects/carmine-options/abi.js new file mode 100644 index 0000000000..20cb0e9142 --- /dev/null +++ b/projects/carmine-options/abi.js @@ -0,0 +1,41 @@ +const abi = [ + { + "name": "get_all_lptoken_addresses", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "array_len", + "type": "felt" + }, + { + "name": "array", + "type": "felt*" + } + ], + "stateMutability": "view" + }, + { + "name": "get_underlying_token_address", + "type": "function", + "inputs": [ + { + "name": "lptoken_address", + "type": "felt" + } + ], + "outputs": [ + { + "name": "underlying_token_address_", + "type": "felt" + } + ], + "stateMutability": "view" + }, +]; + +const objAbi = {}; + +abi.forEach((i) => (objAbi[i.name] = i)); + +module.exports = objAbi; diff --git a/projects/carmine-options/api.js b/projects/carmine-options/api.js new file mode 100644 index 0000000000..71a21d4a5e --- /dev/null +++ b/projects/carmine-options/api.js @@ -0,0 +1,31 @@ +// https://www.starknetjs.com/docs/API/contract + +const { call, multiCall, parseAddress, number, sumTokens, } = require("../helper/chain/starknet"); +const abi = require("./abi"); + +const amm = + "0x076dbabc4293db346b0a56b29b6ea9fe18e93742c73f12348c8747ecfc1050aa"; + +async function tvl(_, _1, _2, { api }) { + + let lpTokens = await call({ + abi: abi.get_all_lptoken_addresses, + target: amm, + }) + lpTokens = number.bigNumberishArrayToHexadecimalStringArray(lpTokens.array.toString().split(',')) + let underlyings = await multiCall({ + abi: abi.get_underlying_token_address, + target: amm, + calls: lpTokens.map((lpToken) => ({ + params: [parseAddress(lpToken)], + })), + }); + return sumTokens({ owner: amm, tokens: underlyings.map(parseAddress), api, }); +} + +module.exports = { + methodology: 'Sums the unlocked capital and position of each pool.', + starknet: { + tvl, + }, +}; diff --git a/projects/carmine-options/index.js b/projects/carmine-options/index.js new file mode 100644 index 0000000000..674e8c995c --- /dev/null +++ b/projects/carmine-options/index.js @@ -0,0 +1 @@ +module.exports = require('./api') \ No newline at end of file diff --git a/projects/carthage/index.js b/projects/carthage/index.js deleted file mode 100644 index 0109691d86..0000000000 --- a/projects/carthage/index.js +++ /dev/null @@ -1,38 +0,0 @@ -const { request, gql } = require("graphql-request"); -const { toUSDTBalances } = require('../helper/balances'); -const graphUrl = 'https://thegraph.cndlchain.com/subgraphs/name/ianlapham/uniswap-v3-test' - -const graphQuery = gql` -query get_tvl($block: Int, $number_gte: Int = 10) { - factory( - id: "0x5Bb7BAE25728e9e51c25466D2A15FaE97834FD95" - block: {number_gte: $number_gte} - ) { - totalValueLockedETHUntracked - totalValueLockedETH - totalValueLockedUSD - totalValueLockedUSDUntracked - } -} -`; - -async function tvl(timestamp, ethBlock, chainBlocks) { - const response = await request( - graphUrl, - graphQuery, - { - block:chainBlocks.cndl, - } - ); - - return toUSDTBalances(Number(response.factory.totalValueLockedUSD)); -} - -module.exports = { - misrepresentedTokens: true, - methodology: 'The Carthage subgraph and the Carthage factory contract address are used to obtain the balance held in every LP pair.', - candle:{ - tvl, - }, - start: 1612715300, // 7th-Feb-2021 -} diff --git a/projects/cashcow/index.js b/projects/cashcow/index.js index a3cdee69f0..9f662a787b 100644 --- a/projects/cashcow/index.js +++ b/projects/cashcow/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json"); const { getCompoundV2Tvl, compoundExports } = require("../helper/compound"); const { transformBscAddress } = require("../helper/portedTokens"); @@ -5,7 +6,7 @@ const { addFundsInMasterChef } = require("../helper/masterchef"); const comptroller = "0x44f2A790aCB1bE42d3F7864e9F73762556eb895E"; const cBNB = "0xC819cCfA453C4b5D2B9c9fF7CF8017adE99CB9B1"; -const WBNBEquivalent = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; +const WBNBEquivalent = ADDRESSES.bsc.WBNB; const stakingChef = "0xbfcaB1627c4fB86A055DE4B8a56D46e625F51C0B"; diff --git a/projects/cashio/index.js b/projects/cashio/index.js index ddfd1999bd..2c3d5fb6a3 100644 --- a/projects/cashio/index.js +++ b/projects/cashio/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const SUNNY_POOLS = [{ "poolName": "quarry_saber_usdc_usdt", "relevantAccounts": { "sunnyPool": "3Zk1PhVap6mwrB9jZktucoSaMBa2whYSq8jtLew3tXbp", - "tokenAMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "tokenBMint": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + "tokenAMint": ADDRESSES.solana.USDC, + "tokenBMint": ADDRESSES.solana.USDT, "tokenAReserve": "CfWX7o2TswwbxusJ4hCaPobu2jLCb1hfXuXJQjVq3jQF", "tokenBReserve": "EnTrdMMpdhugeH6Ban6gYZWXughWxKtVGfCwFn78ZmY3", "lpTokenSPL": "2poo1w1DL6yd2WNTCnNTzDqkC6MBXq7axo77P16yrBuf" diff --git a/projects/cat-in-a-box/index.js b/projects/cat-in-a-box/index.js index d23efa2025..2607de1a3a 100644 --- a/projects/cat-in-a-box/index.js +++ b/projects/cat-in-a-box/index.js @@ -1,11 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') -const { tokensBare } = require('../helper/tokenMapping') module.exports = { ethereum: { tvl: sumTokensExport({ owners: [ '0x7f0A0C7149a46Bf943cCd412da687144b49C6014', '0x24146D1B3339Cf76b455dC42e71Ea5Cdff4aE0d7', - ], tokens: [tokensBare.steth]}) + ], tokens: [ADDRESSES.ethereum.STETH]}) } } \ No newline at end of file diff --git a/projects/catsapes/index.js b/projects/catsapes/index.js index 6701905834..ba0e5aee2e 100644 --- a/projects/catsapes/index.js +++ b/projects/catsapes/index.js @@ -1,26 +1,10 @@ -const { sumTokensExport } = require('../helper/unwrapLPs') const { masterchefExports } = require('../helper/unknownTokens') const config = { kava: { SKILL_TOKEN_CONTRACT: '0x85602B00C9bd973B1Afb66EC140A62480CF812d3', - // STAKING: [ - // '0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b', - // '0x765277EebeCA2e31912C9946eAe1021199B39C61', - // '0xfA9343C3897324496A05fC75abeD6bAC29f8A40f', - // '0xB44a9B6905aF7c801311e8F4E76932ee959c663', - // ] } } - -// Object.keys(config).forEach(chain => { -// const { SKILL_TOKEN_CONTRACT, STAKING, } = config[chain] -// module.exports[chain] = { -// tvl: () => ({}), -// staking: sumTokensExport({ tokens: STAKING, owner: SKILL_TOKEN_CONTRACT }) -// } -// }) - module.exports = masterchefExports({ chain: 'kava', masterchef: config.kava.SKILL_TOKEN_CONTRACT, }) \ No newline at end of file diff --git a/projects/caviar-v2/index.js b/projects/caviar-v2/index.js new file mode 100644 index 0000000000..798bffd0ba --- /dev/null +++ b/projects/caviar-v2/index.js @@ -0,0 +1,24 @@ +const { getLogs, } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(_, _b, _cb, { api, }) { + const factory = '0xa16be8d32934a9aab272102ac4bb890481f4074e' + const logs = await getLogs({ + api, + target: factory, + topics: ['0x2e8b0eeead8b24c71386db9f08f074489fc7ceed52e7ee8a3ad4ab50b9c8c4f4'], + fromBlock: 16480338, + eventAbi: 'event Create(address indexed privatePool, uint256[] tokenIds, uint256 baseTokenAmount)', + onlyArgs: true, + }) + const pools = logs.map(i => i.privatePool) + const tokens = await api.multiCall({ abi: 'address:baseToken', calls: pools}) + const nfts = await api.multiCall({ abi: 'address:nft', calls: pools}) + const ownerTokens = pools.map((v, i) => [[tokens[i], nfts[i]], v]) + return sumTokens2({ ownerTokens, api}) +} + +module.exports = { + misrepresentedTokens: true, + ethereum: { tvl } +} \ No newline at end of file diff --git a/projects/caviar/index.js b/projects/caviar/index.js index 46426e8888..d9e7879574 100644 --- a/projects/caviar/index.js +++ b/projects/caviar/index.js @@ -1,5 +1,6 @@ const { getLogs, } = require('../helper/cache/getLogs') -const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const sdk = require('@defillama/sdk') +const { getUniqueAddresses } = require('../helper/utils') async function tvl(_, _b, _cb, { api, }) { const factory = '0xa964d6e8d90e5cd12592a8ef2b1735dae9ba0840' @@ -7,18 +8,16 @@ async function tvl(_, _b, _cb, { api, }) { api, target: factory, topics: ['0x94e35d08a6788cb2901c35019eb1105f35dcfdac00943412ebe0236470ee420f'], - fromBlock: 16480338, + fromBlock: 16480338, eventAbi: 'event Create (address indexed nft, address indexed baseToken, bytes32 indexed merkleRoot)', onlyArgs: true, }) const calls = logs.map(i => ([i.nft, i.baseToken, i.merkleRoot])) - const pools = await api.multiCall({ abi: "function pairs(address, address, bytes32) view returns (address)", calls: calls.map(i => ({ params: i})), target: factory }) - - const balances = await sumTokens2({ api, owners: pools, tokens: [nullAddress]}) - const ethKey = 'ethereum:'+nullAddress + const pools = await api.multiCall({ abi: "function pairs(address, address, bytes32) view returns (address)", calls: calls.map(i => ({ params: i })), target: factory }) + let { output: balances } = await sdk.api.eth.getBalances({ block: _b, targets: getUniqueAddresses(pools) }) + balances = balances.reduce((agg, i) => agg + i.balance/1e18, 0) return { - ...balances, - [ethKey]: (balances[ethKey] ?? 0) * 2 + ethereum: balances * 2, } } diff --git a/projects/cega/abi.json b/projects/cega/abi.json new file mode 100644 index 0000000000..eddc17011d --- /dev/null +++ b/projects/cega/abi.json @@ -0,0 +1,8 @@ +{ + "sumVaultUnderlyingAmounts": "uint256:sumVaultUnderlyingAmounts", + "queuedDepositsTotalAmount": "uint256:queuedDepositsTotalAmount", + "getProductNames": "string[]:getProductNames", + "products": "function products(string) view returns (address)", + "getLOVVaultMetadata": "function getLOVVaultMetadata(address productAddress, uint256 leverage) view returns (tuple(uint256 vaultStart, uint256 tradeDate, uint256 tradeExpiry, uint256 aprBps, uint256 tenorInDays, uint256 underlyingAmount, uint256 currentAssetAmount, uint256 totalCouponPayoff, uint256 vaultFinalPayoff, uint256 queuedWithdrawalsSharesAmount, uint256 queuedWithdrawalsCount, uint256 optionBarriersCount, uint256 leverage, address vaultAddress, uint8 vaultStatus, bool isKnockedIn, tuple(uint256 barrierBps, uint256 barrierAbsoluteValue, uint256 strikeBps, uint256 strikeAbsoluteValue, string asset, string oracleName, uint8 barrierType)[] optionBarriers)[])", + "getLOVProductQueuedDeposits": "function getLOVProductQueuedDeposits(address fcnProductAddress, uint256 leverage) view returns (uint256 totalQueuedDeposits)" +} \ No newline at end of file diff --git a/projects/cega/evm.js b/projects/cega/evm.js new file mode 100644 index 0000000000..dee221d9fe --- /dev/null +++ b/projects/cega/evm.js @@ -0,0 +1,96 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const abi = require("./abi.json"); + +const maxLeverage = 5; +const LOV_SUFFIX = "-lov"; +const config = { + ethereum: { CEGA_STATE: "0x0730AA138062D8Cc54510aa939b533ba7c30f26B", CEGA_PRODUCT_VIEWER: '0x31C73c07Dbd8d026684950b17dD6131eA9BAf2C4', usdcAddress: ADDRESSES.ethereum.USDC, }, + arbitrum: { CEGA_STATE: "0xc809B7F21250B1ce0a61b7Fb645AEf5CE7c1B5ed", CEGA_PRODUCT_VIEWER: '0x8c32a5d9f29da36ed68a9d454eda1b374795b6ca', usdcAddress: ADDRESSES.arbitrum.USDC, }, +} + +// Funds are not lent out +const FCN_PURE_OPTIONS_ADDRESSES = [ + '0x042021d59731d3fFA908c7c4211177137Ba362Ea', // supercharger + '0x56F00A399151EC74cf7bE8DC38225363E84975E6', // go fast + '0x784e3C592A6231D92046bd73508B3aAe3A7cc815', // insanic +]; + +// Funds are lent out 100% +const FCN_BOND_AND_OPTIONS_ADDRESSES = [ + '0xAB8631417271Dbb928169F060880e289877Ff158', // starboard + '0xcf81b51AecF6d88dF12Ed492b7b7f95bBc24B8Af', // autopilot + '0x80ec1c0da9bfBB8229A1332D40615C5bA2AbbEA8', // cruise control + '0x94C5D3C2fE4EF2477E562EEE7CCCF07Ee273B108', // genesis basket +]; + +async function getProducts(api) { + const { CEGA_STATE } = config[api.chain] + const productNames = await api.call({ target: CEGA_STATE, abi: abi.getProductNames, }) + const LOVProductNames = productNames.filter(v => v.includes(LOV_SUFFIX)) + return api.multiCall({ target: CEGA_STATE, abi: abi.products, calls: LOVProductNames }) +} + + +async function getSumFCNProductDeposits(fcnProducts, api) { + return api.multiCall({ calls: fcnProducts, abi: abi.sumVaultUnderlyingAmounts, }) +} + +async function getSumFCNProductQueuedDeposits(fcnProducts, api) { + return api.multiCall({ calls: fcnProducts, abi: abi.queuedDepositsTotalAmount, }) +} + +function getLOVCalls(lovProducts) { + const calls = [] + for (const product of lovProducts) + for (let i = 2; i < maxLeverage; i++) + calls.push([product, i]) + return calls.map(i => ({ params: i })) +} + +async function getSumLOVProductDeposits(lovProducts, api) { + const { CEGA_PRODUCT_VIEWER } = config[api.chain] + const calls = getLOVCalls(lovProducts) + return (await api.multiCall({ target: CEGA_PRODUCT_VIEWER, abi: abi.getLOVVaultMetadata, calls })).map(i => i.map(j => j.underlyingAmount)).flat() +} + +async function getSumLOVProductQueuedDeposits(lovProducts, api) { + const { CEGA_PRODUCT_VIEWER } = config[api.chain] + const calls = getLOVCalls(lovProducts) + return await api.multiCall({ target: CEGA_PRODUCT_VIEWER, abi: abi.getLOVProductQueuedDeposits, calls }) +} + +async function getEthereumTvl(_, _1, _2, { api }) { + const { usdcAddress } = config[api.chain] + const lovProducts = await getProducts(api); + const calls = [ + getSumLOVProductDeposits(lovProducts, api), + getSumLOVProductQueuedDeposits(lovProducts, api) + ] + if (api.chain === 'ethereum') { + calls.push(getSumFCNProductDeposits(FCN_PURE_OPTIONS_ADDRESSES, api), getSumFCNProductQueuedDeposits(FCN_PURE_OPTIONS_ADDRESSES, api)) + } + const results = await Promise.all(calls); + const sum = results.flat().flat().reduce((total, currentValue) => total + +currentValue, 0); + api.add(usdcAddress, sum) + return api.getBalances() +} + +async function getBorrowedTvl(_, _1, _2, { api }) { + const { usdcAddress } = config[api.chain] + const results = await Promise.all([ + getSumFCNProductDeposits(FCN_BOND_AND_OPTIONS_ADDRESSES, api), + getSumFCNProductQueuedDeposits(FCN_BOND_AND_OPTIONS_ADDRESSES, api), + ]); + const sum = results.flat().flat().reduce((total, currentValue) => total + +currentValue, 0); + api.add(usdcAddress, sum) +} + +module.exports = { + ethereum: { + tvl: getEthereumTvl, + borrowed: getBorrowedTvl, + }, + arbitrum: { + tvl: getEthereumTvl, + }, +} \ No newline at end of file diff --git a/projects/cega/index.js b/projects/cega/index.js index ec0b9e361e..f6d5585f13 100644 --- a/projects/cega/index.js +++ b/projects/cega/index.js @@ -1,67 +1,8 @@ -const { Program } = require("@project-serum/anchor"); -const { getProvider, sumTokens2, getTokenBalance, } = require("../helper/solana"); -const sdk = require('@defillama/sdk') -const idl = require("./idl.json"); -const MM_multisigs = [ - '0xBdaF8c2BAA14f322e1429Ae3869B005590Ea1FF8', - '0x0fEcA1Ff36AbA721BAEd6C6248b6745C88AF1dDF', - '0x1d14E27221F1b3c690Fc3cced827bEE4892d0698', - '0x60daD1DF74F20fd6d6C07e6FC6153078Cd14a57c', - '0xC6589ad1eed78c50f28249D743A585f7053e7D2C', -] - -const vaultMintAuthority = '4nhbsUdKEwVQXuYDotgdQHoMWW83GvjXENwLsf9QrRJT' -const usdcTokenSpl = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' - -async function tvl() { - const products = await getProducts() - const tokenAccounts = [] - products.forEach(({ account: i }) => { - if (!i.isActive || Buffer.from(i.productName).toString().trim().includes("demo")) return; - tokenAccounts.push(i.productUnderlyingTokenAccount.toString()) - }); - - return sumTokens2({ balances: { - ['solana:'+usdcTokenSpl]: await getMMbalance() - }, owner: vaultMintAuthority, tokens: [usdcTokenSpl], tokenAccounts, }); -} - -async function borrowed() { - const products = await getProducts() - const balances = {} - const usdcBalance = await getTokenBalance(usdcTokenSpl, vaultMintAuthority) - sdk.util.sumSingleBalance(balances, usdcTokenSpl, -1 * usdcBalance, 'solana') - sdk.util.sumSingleBalance(balances, usdcTokenSpl, -1 * await getMMbalance(), 'solana') - products.forEach(({ account: i }) => { - if (!i.isActive || Buffer.from(i.productName).toString().trim().includes("demo")) return; - sdk.util.sumSingleBalance(balances,i.underlyingMint.toString(),+i.underlyingAmount, 'solana') - }); - return balances -} - -async function getProducts() { - const provider = getProvider(); - const programId = "3HUeooitcfKX1TSCx2xEpg2W31n6Qfmizu7nnbaEWYzs"; - const program = new Program(idl, programId, provider); - return program.account.product.all(); - -} - -async function getMMbalance() { - const { output: bals } = await sdk.api.abi.multiCall({ - target: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - abi: 'erc20:balanceOf', - calls: MM_multisigs.map(i => ({ params: i})), - }) - let total = 0 - bals.forEach(({ output: i}) => total += +i) - return total -} +const evm = require("./evm"); +const solana = require("./solana"); module.exports = { timetravel: false, - solana: { - tvl, - borrowed, - }, -}; + ...evm, + ...solana, +}; \ No newline at end of file diff --git a/projects/cega/solana.js b/projects/cega/solana.js new file mode 100644 index 0000000000..13b4579c5f --- /dev/null +++ b/projects/cega/solana.js @@ -0,0 +1,65 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { Program } = require("@project-serum/anchor"); +const { getProvider} = require("../helper/solana"); +const sdk = require('@defillama/sdk') +const idl = require("./idl.json"); + +const usdcAddress = ADDRESSES.solana.USDC; +const PURE_OPTIONS_PRODUCTS = [ + 'insanic-2', + 'supercharger', + 'go-fast-2' +] + +const OPTIONS_AND_BONDS_PRODUCTS = [ + 'genesis-basket-2', + 'starboard', + 'cruise-control-2', + 'autopilot' +] + +async function getProducts() { + const provider = getProvider(); + const programId = "3HUeooitcfKX1TSCx2xEpg2W31n6Qfmizu7nnbaEWYzs"; + const program = new Program(idl, programId, provider); + return program.account.product.all(); +} + +async function getSolanaTvl() { + const balances = {}; + const products = await getProducts() + let totalAmount = 0; + products.forEach(({ account: i }) => { + const productName = Buffer.from(i.productName).toString().trim(); + if (!i.isActive || productName.includes("test")) return; + const underlyingAmount = i.underlyingAmount.toNumber(); + if(PURE_OPTIONS_PRODUCTS.includes(productName)){ + totalAmount += underlyingAmount; + } + }); + await sdk.util.sumSingleBalance(balances, usdcAddress, totalAmount, "solana"); + return balances; +} + +async function getBorrowedTvl() { + const balances = {}; + const products = await getProducts() + let totalAmount = 0; + products.forEach(({ account: i }) => { + const productName = Buffer.from(i.productName).toString().trim(); + if (!i.isActive || productName.includes("test")) return; + const underlyingAmount = i.underlyingAmount.toNumber(); + if(OPTIONS_AND_BONDS_PRODUCTS.includes(productName)){ + totalAmount += underlyingAmount; + } + }); + await sdk.util.sumSingleBalance(balances, usdcAddress, totalAmount, "solana"); + return balances; +} + +module.exports = { + solana: { + tvl: getSolanaTvl, + borrowed: getBorrowedTvl, + } +} \ No newline at end of file diff --git a/projects/celerbridge/index.js b/projects/celerbridge/index.js index 62b30c5d1c..4ee0a323bf 100644 --- a/projects/celerbridge/index.js +++ b/projects/celerbridge/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { chainExports } = require("../helper/exports"); const { sumTokens } = require("../helper/unwrapLPs"); const { getFixBalances } = require('../helper/portedTokens') @@ -25,7 +26,7 @@ config.setProvider("syscoin", new ethers.providers.StaticJsonRpcProvider( const liquidityBridgeContractsV2 = { // NOTE: Some chains have addresses before and after the liquidity bridge upgrade / migration arbitrum: [ - "0xdd90E5E87A2081Dcf0391920868eBc2FFB81a1aF", + ADDRESSES.astar.MATIC, "0x1619DE6B6B20eD217a58d00f37B9d47C7663feca", "0xFe31bFc4f7C9b69246a6dc0087D91a91Cb040f76", "0xEA4B1b0aa3C110c55f650d28159Ce4AD43a4a58b", @@ -41,7 +42,7 @@ const liquidityBridgeContractsV2 = { boba: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", '0x8db213bE5268a2b8B78Af08468ff1EA422073Da0', '0x4C882ec256823eE773B25b414d36F92ef58a7c0C'], bsc: [ "0x5d96d4287D1ff115eE50faC0526cf43eCf79bFc6", - "0xdd90E5E87A2081Dcf0391920868eBc2FFB81a1aF", + ADDRESSES.astar.MATIC, "0x78bc5Ee9F11d133A08b331C2e18fE81BE0Ed02DC", "0x11a0c9270D88C99e221360BCA50c2f6Fda44A980", ], @@ -55,7 +56,7 @@ const liquidityBridgeContractsV2 = { "0x7510792A3B1969F9307F3845CE88e39578f2bAE1", ], fantom: [ - "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283", + ADDRESSES.astar.USDT, "0x374B8a9f3eC5eB2D97ECA84Ea27aCa45aa1C57EF", "0x7D91603E79EA89149BAf73C9038c51669D8F03E9", ], @@ -66,9 +67,9 @@ const liquidityBridgeContractsV2 = { moonbeam: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C"], moonriver: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C"], oasis: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C"], - okexchain: ["0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98"], + okexchain: [ADDRESSES.moonbeam.USDC], optimism: [ - "0x6De33698e9e9b787e09d3Bd7771ef63557E148bb", + ADDRESSES.astar.DAI, "0x9D39Fc627A6d9d9F8C831c16995b209548cc3401", "0xbCfeF6Bb4597e724D720735d32A9249E0640aA11", ], @@ -80,71 +81,70 @@ const liquidityBridgeContractsV2 = { rei: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C"], shiden: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", "0xBB7684Cc5408F4DD0921E5c2Cadd547b8f1AD573",], syscoin: ["0x841ce48F9446C8E281D3F1444cB859b4A6D0738C", "0x1E6b1ceAF75936f153ABB7B65FBa57AbaE14e6CE"], - xdai: ["0x3795C36e7D12A8c252A20C5a7B455f7c57b60283"], + xdai: [ADDRESSES.astar.USDT], }; // Tokens added to the liquidity bridges, excluding Celer-Pegged tokens. const liquidityBridgeTokens = [ { // USDT - arbitrum: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", - aurora: "0x4988a896b1227218e4A686fdE5EabdcAbd91571f", - avax: "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", - bsc: "0x55d398326f99059ff775485246999027b3197955", - ethereum: "0xdac17f958d2ee523a2206206994597c13d831ec7", - fantom: "0x049d68029688eabf473097a2fc38ef61633a3c7a", - heco: "0xa71edc38d189767582c38a3145b5873052c3e47a", - okexchain: "0x382bb369d343125bfb2117af9c149795c6c65c50", - optimism: "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", - polygon: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - xdai: "0x4ECaBa5870353805a9F068101A40E0f32ed605C6", + arbitrum: ADDRESSES.arbitrum.USDT, + aurora: ADDRESSES.aurora.USDT_e, + avax: ADDRESSES.avax.USDT_e, + bsc: ADDRESSES.bsc.USDT, + ethereum: ADDRESSES.ethereum.USDT, + fantom: ADDRESSES.fantom.fUSDT, + heco: ADDRESSES.heco.USDT, + okexchain: ADDRESSES.okexchain.USDT, + optimism: ADDRESSES.optimism.USDT, + polygon: ADDRESSES.polygon.USDT, + xdai: ADDRESSES.xdai.USDT, }, { // USDC - arbitrum: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", - aurora: "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802", - avax: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", - boba: "0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc", - bsc: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - ethereum: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - fantom: "0x04068da6c83afcfa0e13ba15a6696662335d5b75", + arbitrum: ADDRESSES.arbitrum.USDC, + aurora: ADDRESSES.aurora.USDC_e, + avax: ADDRESSES.avax.USDC_e, + boba: ADDRESSES.boba.USDC, + bsc: ADDRESSES.bsc.USDC, + ethereum: ADDRESSES.ethereum.USDC, + fantom: ADDRESSES.fantom.USDC, harmony: "0x985458e523db3d53125813ed68c274899e9dfab4", - heco: "0x9362bbef4b8313a8aa9f0c9808b80577aa26b73b", - okexchain: "0xc946daf81b08146b1c7a8da2a851ddf2b3eaaf85", - optimism: "0x7f5c764cbc14f9669b88837ca1490cca17c31607", - polygon: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - xdai: "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", + heco: ADDRESSES.heco.USDC_HECO, + okexchain: ADDRESSES.okexchain.USDC, + optimism: ADDRESSES.optimism.USDC, + polygon: ADDRESSES.polygon.USDC, + xdai: ADDRESSES.xdai.USDC, }, { - // BUSD - ethereum: "0x4fabb145d64652a948d72533023f6e7a623c7c53", - bsc: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + ethereum: ADDRESSES.ethereum.BUSD, + bsc: ADDRESSES.bsc.BUSD, }, { // DAI - avax: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", + avax: ADDRESSES.avax.DAI, bsc: "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", - ethereum: "0x6b175474e89094c44da98b954eedeac495271d0f", - optimism: "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", - polygon: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", + ethereum: ADDRESSES.ethereum.DAI, + optimism: ADDRESSES.optimism.DAI, + polygon: ADDRESSES.polygon.DAI, }, { // WETH - arbitrum: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", - avax: "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", - bsc: "0x2170ed0880ac9a755fd29b2688956bd959f933f8", - ethereum: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + arbitrum: ADDRESSES.arbitrum.WETH, + avax: ADDRESSES.avax.WETH_e, + bsc: ADDRESSES.bsc.ETH, + ethereum: ADDRESSES.ethereum.WETH, fantom: "0x74b23882a30290451A17c44f4F05243b6b58C76d", - optimism: "0x4200000000000000000000000000000000000006", - polygon: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + optimism: ADDRESSES.tombchain.FTM, + polygon: ADDRESSES.polygon.WETH_1, }, { // WBTC - arbitrum: "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", + arbitrum: ADDRESSES.arbitrum.WBTC, avax: "0x50b7545627a5162F82A992c33b87aDc75187B218", - ethereum: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", + ethereum: ADDRESSES.ethereum.WBTC, fantom: "0x321162Cd933E2Be498Cd2267a90534A804051b11", - polygon: "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", + polygon: ADDRESSES.polygon.WBTC, }, { // DODO @@ -188,7 +188,7 @@ const liquidityBridgeTokens = [ }, { // BOBA - boba: "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7", + boba: ADDRESSES.boba.BOBA, ethereum: "0x42bbfa2e77757c645eeaad1655e0911a7553efbc", }, { @@ -204,7 +204,7 @@ const liquidityBridgeTokens = [ { // METIS ethereum: "0x9e32b13ce7f2e80a01932b42553652e053d6ed8e", - metis: "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", + metis: ADDRESSES.metis.Metis, }, { // CVP @@ -242,7 +242,7 @@ const liquidityBridgeTokens = [ // USX arbitrum: "0x641441c631e2F909700d2f41FD87F0aA6A6b4EDb", bsc: "0xb5102cee1528ce2c760893034a4603663495fd72", - ethereum: "0x0a5e677a6a24b2f1a2bf4f3bffc443231d2fdec8", + ethereum: ADDRESSES.ethereum.USX, optimism: "0xbfD291DA8A403DAAF7e5E9DC1ec0aCEaCd4848B9", polygon: "0xCf66EB3D546F0415b368d98A95EAF56DeD7aA752", }, @@ -318,9 +318,8 @@ const liquidityBridgeTokens = [ polygon: "0x08648471B5AAd25fEEeb853d6829048f3Fc37786", }, { - // iZi - arbitrum: "0x60D01EC2D5E98Ac51C8B4cF84DfCCE98D527c747", - bsc: "0x60D01EC2D5E98Ac51C8B4cF84DfCCE98D527c747", + arbitrum: ADDRESSES.bsc.iZi, + bsc: ADDRESSES.bsc.iZi, ethereum: "0x9ad37205d608B8b219e6a2573f922094CEc5c200", }, { @@ -364,13 +363,10 @@ const liquidityBridgeTokens = [ ethereum: "0xcA37530E7c5968627BE470081d1C993eb1dEaf90", }, { - // cUSD - celo: "0x765DE816845861e75A25fCA122bb6898B8B1282a", + celo: ADDRESSES.celo.cUSD, }, { - // WSYS - // origin: "syscoin:0xd3e822f3ef011Ca5f17D82C956D952D8d7C3A1BB", - syscoin: "0xd3e822f3ef011Ca5f17D82C956D952D8d7C3A1BB", + syscoin: ADDRESSES.syscoin.WSYS, bsc: "0x6822A778726CD2f0d4A1Cfaca2D04654e575cC82", ethereum: "0xF3C96924d85566C031ddc48DbC63B2d71da6D0f6", }, @@ -384,8 +380,7 @@ const liquidityBridgeTokens = [ ethereum: "0xa02120696c7b8fe16c09c749e4598819b2b0e915", }, { - // FRAX - ethereum: "0x853d955acef822db058eb8505911ed77f175b99e", + ethereum: ADDRESSES.ethereum.FRAX, }, { // FXS @@ -400,16 +395,13 @@ const liquidityBridgeTokens = [ bsc: "0x1fD991fb6c3102873ba68a4e6e6a87B3a5c10271", }, { - // BNB - bsc: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + bsc: ADDRESSES.bsc.WBNB, }, { - // AVAX - avax: "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + avax: ADDRESSES.avax.WAVAX, }, { - // FTM - fantom: "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", + fantom: ADDRESSES.fantom.WFTM, }, { // AMY @@ -436,9 +428,7 @@ const liquidityBridgeTokens = [ heco: "0x4668e0E7cC545De886aBF038067F81cD4DC0924b", }, { - // SDN - // origin: "shiden:0x0f933dc137d21ca519ae4c7e93f87a4c8ef365ef", - shiden: "0x0f933dc137d21ca519ae4c7e93f87a4c8ef365ef", + shiden: ADDRESSES.shiden.WSDN, }, { // CONV @@ -449,16 +439,13 @@ const liquidityBridgeTokens = [ avax: "0x4fbf0429599460d327bd5f55625e30e4fc066095", }, { - // MATIC - polygon: "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + polygon: ADDRESSES.polygon.WMATIC_2, }, { - // AAVE - ethereum: "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + ethereum: ADDRESSES.ethereum.AAVE, }, { - // CRV - ethereum: "0xD533a949740bb3306d119CC777fa900bA034cd52", + ethereum: ADDRESSES.ethereum.CRV, }, { // AVG @@ -485,8 +472,7 @@ const liquidityBridgeTokens = [ boba: "0xCe055Ea4f29fFB8bf35E852522B96aB67Cbe8197", }, { - // LUSD - ethereum: "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0", + ethereum: ADDRESSES.ethereum.LUSD, }, { // JONES diff --git a/projects/cells/index.js b/projects/cells/index.js new file mode 100644 index 0000000000..6cc7ec3d6d --- /dev/null +++ b/projects/cells/index.js @@ -0,0 +1,7 @@ +module.exports = { + bsc: { tvl: () => 0 }, + arbitrum: { tvl: () => 0 }, + hallmarks: [ + [Math.floor(new Date('2023-06-11') / 1e3), 'Project rugged'], + ], +} \ No newline at end of file diff --git a/projects/cemetery/index.js b/projects/cemetery/index.js index 3e5da33525..cf94ed9664 100644 --- a/projects/cemetery/index.js +++ b/projects/cemetery/index.js @@ -19,6 +19,9 @@ async function tvl(timestamp, block, chainBlocks) { module.exports = { methodology: "TVL includes all farms in MasterChef contract", + hallmarks: [ + [1646524800,"Rug Pull"] + ], fantom: { tvl, staking: staking(hauntchef, haunt, "fantom"), diff --git a/projects/cennz-bridge.js b/projects/cennz-bridge.js index 876e8fd704..b41b7fc308 100644 --- a/projects/cennz-bridge.js +++ b/projects/cennz-bridge.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const target = '0x76BAc85e1E82cd677faa2b3f00C4a2626C4c6E32'; -const WETH = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; +const WETH = ADDRESSES.ethereum.WETH; async function tvl(timestamp, block) { return { [ WETH ]: diff --git a/projects/cerberusdao/api.js b/projects/cerberusdao/api.js new file mode 100644 index 0000000000..b83e37f250 --- /dev/null +++ b/projects/cerberusdao/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/cerberusdao/index.js b/projects/cerberusdao/index.js index d034238e30..3c458fb001 100644 --- a/projects/cerberusdao/index.js +++ b/projects/cerberusdao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x56D595ea5591D264bc1Ef9E073aF66685F0bFD31" @@ -5,11 +6,11 @@ module.exports = { deadFrom: 1648765747, ...ohmTvl(treasury, [ //SHIB - ["0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", false], + [ADDRESSES.ethereum.INU, false], //FLOKI ["0x43f11c02439e2736800433b4594994bd43cd066d", false], //WETH - ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", false], + [ADDRESSES.ethereum.WETH, false], //uniswap LP shib/weth ["0xb5b6c3816c66fa6bc5b189f49e5b088e2de5082a", true], ], "ethereum", "0x95deaF8dd30380acd6CC5E4E90e5EEf94d258854", "0x8a14897eA5F668f36671678593fAe44Ae23B39FB") diff --git a/projects/cesta/index.js b/projects/cesta/index.js index fef0d9b66c..832e897b16 100644 --- a/projects/cesta/index.js +++ b/projects/cesta/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -8,7 +9,7 @@ async function avax(timestamp, block) { StableAvax: "0xfbE9613a6bd9d28ceF286b01357789b2b02E46f5", StableStable: "0xB103F669E87f67376FB9458A67226f2774a0B4FD", }; - let usd = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; + let usd = ADDRESSES.ethereum.USDC; let [DexAvaxTVL, DexStableTVL, StableAvaxTVL, StableStableTVL] = await Promise.all([ diff --git a/projects/cetus/index.js b/projects/cetus/index.js index a63f0d4e13..63232ac61b 100644 --- a/projects/cetus/index.js +++ b/projects/cetus/index.js @@ -1,4 +1,5 @@ const { dexExport, getResources } = require('../helper/chain/aptos') +const sui = require('../helper/chain/sui') const { transformDexBalances } = require('../helper/portedTokens') const { PromisePool } = require('@supercharge/promise-pool') const sdk = require('@defillama/sdk') @@ -17,9 +18,9 @@ async function tvl() { async function addPool(poolAddr) { const res = await getResources(poolAddr) const val = res.find(i => i.type.includes('::pool::Pool')) - const [token0, token1 ] = val.type.split('::pool::Pool<')[1].replace('>', '').split(', ') + const [token0, token1] = val.type.split('::pool::Pool<')[1].replace('>', '').split(', ') data.push({ - token0, + token0, token1, token0Bal: val.data.coin_a.value, token1Bal: val.data.coin_b.value, @@ -27,6 +28,19 @@ async function tvl() { } } +async function suiTVL() { + const { api } = arguments[3] + const poolObjectID = '0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0' + const { fields: { list: { fields: listObject } } } = await sui.getObject(poolObjectID) + const items = (await sui.getDynamicFieldObjects({ parent: listObject.id.id })).map(i => i.fields.value.fields.value) + const poolInfo = await sui.getObjects(items.map(i => i.fields.pool_id)) + poolInfo.forEach(({ type: typeStr, fields }) => { + const [coinA, coinB] = typeStr.replace('>', '').split('<')[1].split(', ') + api.add(coinA, fields.coin_a) + api.add(coinB, fields.coin_b) + }) +} + module.exports = dexExport({ account: '0xec42a352cc65eca17a9fa85d0fc602295897ed6b8b8af6a6c79ef490eb8f9eba', poolStr: 'amm_swap::Pool<', @@ -37,5 +51,8 @@ module.exports = dexExport({ module.exports = { aptos: { tvl: sdk.util.sumChainTvls([module.exports.aptos.tvl, tvl]) + }, + sui: { + tvl: suiTVL, } } \ No newline at end of file diff --git a/projects/cexdex-stacking/index.js b/projects/cexdex-stacking/index.js index 96700ae095..776be9cfc4 100644 --- a/projects/cexdex-stacking/index.js +++ b/projects/cexdex-stacking/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); -const token_USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f"; -const token_USDT = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; +const token_USDC = ADDRESSES.telos.ETH; +const token_USDT = ADDRESSES.moonriver.USDT; const masterchef = "0x451c3a3594aEB75EDcb13F132dc11D7d2972861A"; module.exports = { diff --git a/projects/chainport/index.js b/projects/chainport/index.js index c4417a2361..003c2e0557 100644 --- a/projects/chainport/index.js +++ b/projects/chainport/index.js @@ -1,46 +1,105 @@ -const { get } = require('../helper/http') -let _resposne +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport, nullAddress } = require("../helper/sumTokens"); -async function getStats() { - if (!_resposne) _resposne = get('https://api.chainport.io/api/tvl_per_chain') - return _resposne -} +//ETH -function fetchByNetwork(network_name) { - return async () => ({ - tether: +(await getStats())[network_name] - }) -} +const vault1eth = "0x894107b7b5051409f279e8300774b2f62febe057" +const vault2eth = "0xD2238E8c085E5059F8DFC52256530210bc7250F6" +const vault3eth = "0x7B8FDfCf79E72a9a8e656958647D139C0e16EA19" +const vault4eth = "0xfe83475880d3592833249baaacfec5ed51e29d82" +const vault5eth = "0x873089bC765a1C0AFAd48e34fCd305d17D81be87" +const vault6eth = "0x450aD18B4442ce2972Af2a7A12439984db4Afaf9" +const vault7eth = "0x763a0ca93af05ade98a52dc1e5b936b89bf8b89a" + +const portx = "0x104F3152D8ebFC3f679392977356962Ff36566aC" + +//BSC CHAIN + +const vault1bsc = "0x2cd90158baae285010a5ed7c549c2e5b4c0715f4"; +const vault2bsc = "0x873089bC765a1C0AFAd48e34fCd305d17D81be87" + +//Polygon + +const vault1poly= "0xc07cd7fcda887119bff8e1eed2256ad433bee125"; +const vault2poly = "0x873089bC765a1C0AFAd48e34fCd305d17D81be87" + +//Fantom + +const vault1ftm= "0xc30da5144d1b9f47ff86345fee14fe2da94c7203"; +const vault2ftm = "0x873089bC765a1C0AFAd48e34fCd305d17D81be87" -module.exports = { - timetravel: false, - misrepresentedTokens: true, - methodology: "assets in liquidity are counted as TVL", + +const config = { ethereum: { - tvl: fetchByNetwork('ETHEREUM') - }, - polygon: { - tvl: fetchByNetwork('POLYGON') + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.BUSD, + "0x8B3870Df408fF4D7C3A26DF852D41034eDa11d81", + "0x0000000DE40dfa9B17854cBC7869D80f9F98D823", + // "0x42Baf1f659D765C65ADE5BB7E08eb2C680360d9d", //CORNOPIA + // "0xBb3A8FD6Ec4bF0FDc6Cd2739b1e41192D12B1873", OBI + "0x3496B523e5C00a4b4150D6721320CdDb234c3079", + "0x5F0bc16D50F72d10b719dBF6845DE2E599eb5624", + "0x7659CE147D0e714454073a5dd7003544234b6Aa0", + "0x80D55c03180349Fff4a229102F62328220A96444", + "0xD567B5F02b9073aD3a982a099a23Bf019FF11d1c", + "0x4674a4F24C5f63D53F22490Fb3A08eAAAD739ff8", + "0x2653891204F463fb2a2F4f412564b19e955166aE", + "0x43A96962254855F16b925556f9e97BE436A43448", + "0x4da0C48376C277cdBd7Fc6FdC6936DEE3e4AdF75", + "0x8E0fE2947752BE0d5ACF73aaE77362Daf79cB379", + "0xFe459828c90c0BA4bC8b42F5C5D44F316700B430" + ], + owners: [vault1eth, vault2eth, vault3eth, vault4eth, vault5eth, vault6eth, vault7eth], + ownTokens: [portx], }, bsc: { - tvl: fetchByNetwork('BSC') - }, - fantom: { - tvl: fetchByNetwork('FANTOM') + tokens: [ + nullAddress, + "0x5B6bf0c7f989dE824677cFBD507D9635965e9cD3", + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.WBNB, + "0xF93f6b686f4A6557151455189a9173735D668154" + ], + owners: [vault1bsc, vault2bsc], }, - arbitrum: { - tvl: fetchByNetwork('ARBITRUM') - }, - optimism: { - tvl: fetchByNetwork('OPTIMISM') + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.BUSD, + ADDRESSES.polygon.USDT, + "0x04d80CdF20285d5Ac590BBAd97C887b9C6781774", + "0x0000000000004946c0e9F43F4Dee607b0eF1fA1c", + "0xa5Eb60CA85898f8b26e18fF7c7E43623ccbA772C" + ], + owners: [vault1poly, vault2poly], }, - avax: { - tvl: fetchByNetwork('AVALANCHE') + fantom: { + tokens: [ + nullAddress, + "0x40DF1Ae6074C35047BFF66675488Aa2f9f6384F3", + "0xdc301622e621166BD8E82f2cA0A26c13Ad0BE355" + ], + owners: [vault1ftm, vault2ftm], }, - milkomeda: { - tvl: fetchByNetwork('MILKOMEDA') - }, - hallmarks:[ - [1651881600, "UST depeg"], - ], + cardano: { + owners: [ + 'addr1xxcqzje930yw0hykwhf0a89l62dmjwqqpfzdsppf8rhv9rg2czf3yffs8ar450sw50w4xn3pxxwvkz25s4ygh7pjq23ql4slcu', // multi sig cold storage + 'addr1v9nygflpcedeg004tfghu9hdxhg29sv9550sdyvvu4gxepq5ps9ra', // hot bridge address 1 + 'addr1vxku68zc6wrewfkrdaduw2t8yj7nsh0z6mg8vwuxh7pwjxckzjkjq' // hot bridge address 2 + ], + } } + +Object.keys(config).forEach(chain => { + const {owners, tokens} = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owners, tokens }) + } +}) \ No newline at end of file diff --git a/projects/chaintools/index.js b/projects/chaintools/index.js new file mode 100644 index 0000000000..79b1d943e7 --- /dev/null +++ b/projects/chaintools/index.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const YIELD_BOOSTER_ADDRESS = "0x9954B485E650E067BCAD654F66CD67DAC122123b"; +const YIELD_VAULT_ADDRESS = "0xce2C952B27FCc41F868BDC32c9411F0759378ED0"; +const MULTISIG_ADDRESS = "0xb0Df68E0bf4F54D06A4a448735D2a3d7D97A2222"; +const CTLS_ADDRESS = "0xE155F64B9aD8c81318c313196a60c72e72fD2cD1"; +const UNI_V3_POOL = "0xc53489F27F4d8A1cdceD3BFe397CAF628e8aBC13"; // we cant count liquidity on uni v3 as your tvl +const INCENTIVES_WALLET = "0x9318a070a16E25554f098c6930B506123b66E19d"; // this is EOA, whis is it included in tvl? +const COMPOUNDING_KEEPER_ADDRESS = "0x5648C24Ea7cFE703836924bF2080ceFa44A12cA8"; // this is EOA, whis is it included in tvl? + +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + methodology: "Total balances of the Uniswap V3 Pool plus protocol/user controlled balances (in WETH+ETH and CTLS)", + ethereum: { + tvl: sumTokensExport({ owners: [YIELD_VAULT_ADDRESS,], tokens: [ADDRESSES.ethereum.WETH, ADDRESSES.null, ], }), + staking: sumTokensExport({ owners: [YIELD_BOOSTER_ADDRESS, YIELD_VAULT_ADDRESS,], tokens: [CTLS_ADDRESS,], }), + }, +}; diff --git a/projects/chainxyz/index.js b/projects/chainxyz/index.js deleted file mode 100644 index 2815d98316..0000000000 --- a/projects/chainxyz/index.js +++ /dev/null @@ -1,13 +0,0 @@ -const { stakings } = require('../helper/staking') - -const stakingContracts = [ - '0x23445c63FeEf8D85956dc0f19aDe87606D0e19A9', -] -const xcnToken = '0xA2cd3D43c775978A96BdBf12d733D5A1ED94fb18' - -module.exports = { - ethereum: { - staking: stakings(stakingContracts, xcnToken), - tvl: async () => ({}), - }, -} diff --git a/projects/channels/index.js b/projects/channels/index.js index 5aa7a75737..63f235ca88 100644 --- a/projects/channels/index.js +++ b/projects/channels/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound'); const comptroller = { @@ -12,8 +13,8 @@ const ceth = { } const native = { - bsc: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - heco: "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f", + bsc: ADDRESSES.bsc.WBNB, + heco: ADDRESSES.heco.WHT, } module.exports = { diff --git a/projects/charmfinance/index.js b/projects/charmfinance/index.js index b4ba94cc11..73243beaec 100644 --- a/projects/charmfinance/index.js +++ b/projects/charmfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getConfig } = require('../helper/cache') @@ -6,9 +7,9 @@ const { sumTokens } = require('../helper/unwrapLPs') const vaultAbi = require("./vaultAbi.json"); const cubePoolAbi = require("./cubePoolAbi.json"); -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const WBTC = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; -const ETH = "0x0000000000000000000000000000000000000000"; +const USDC = ADDRESSES.ethereum.USDC; +const WBTC = ADDRESSES.ethereum.WBTC; +const ETH = ADDRESSES.null; const vaults = [ // Old alpha vault - v0 diff --git a/projects/chee-finance/index.js b/projects/chee-finance/index.js index 1448ce46bb..afd6c95ed4 100644 --- a/projects/chee-finance/index.js +++ b/projects/chee-finance/index.js @@ -1,11 +1,10 @@ -const {compoundExports, compoundExportsWithAsyncTransform} = require('../helper/compound') -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); +const ADDRESSES = require('../helper/coreAssets.json') +const {compoundExports } = require('../helper/compound') module.exports={ hallmarks: [ ], - celo:compoundExports("0x9BD4Fd10b531ae07437676dfE3FA6f505032CB64", "celo", "0x9de4171EDc1F69EAD07f7595bD3beD62d9215532", "0x471EcE3750Da237f93B8E339c536989b8978a438"), - meter:compoundExports("0xcc0BfaD4e684023B18e0adfEcaEDd800D91dc8B5", "meter", "0xbF5cffE28d3CbA3376Cd02fF12eBECa43Bc3f14A", "0x160361ce13ec33C993b5cCA8f62B6864943eb083"), - bsc:compoundExports("0x0E00Ae24B84148ee93Ce2Cf4F52dE277C91B0B72", "bsc", "0x9437Ea5b08AC7f9dc553861dfE1AA77EE0F2aE69", "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"), + celo:compoundExports("0x9BD4Fd10b531ae07437676dfE3FA6f505032CB64", "celo", "0x9de4171EDc1F69EAD07f7595bD3beD62d9215532", ADDRESSES.celo.CELO), + meter:compoundExports("0xcc0BfaD4e684023B18e0adfEcaEDd800D91dc8B5", "meter", "0xbF5cffE28d3CbA3376Cd02fF12eBECa43Bc3f14A", ADDRESSES.meter.WMTR), + bsc:compoundExports("0x0E00Ae24B84148ee93Ce2Cf4F52dE277C91B0B72", "bsc", "0x9437Ea5b08AC7f9dc553861dfE1AA77EE0F2aE69", ADDRESSES.bsc.WBNB), } \ No newline at end of file diff --git a/projects/cherryswap/index.js b/projects/cherryswap/index.js index 84c4855088..bb0dfa4567 100644 --- a/projects/cherryswap/index.js +++ b/projects/cherryswap/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { getUniTVL } = require('../helper/unknownTokens') -const che = "0x8179d97eb6488860d816e3ecafe694a4153f216c" +const che = ADDRESSES.okexchain.CHE const cheStaking = "0x9Ab8BCf67fE8d8D2aD27D42Ec2A0fD5C206DAE60" module.exports = { diff --git a/projects/chest-finance/index.js b/projects/chest-finance/index.js index b135fac5a9..8ddd3f400a 100644 --- a/projects/chest-finance/index.js +++ b/projects/chest-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require("../helper/solana"); // SOL chest owner: https://solscan.io/account/3SGP67y3XAxZivaz2peNTxS6E44cQXErnEMyBXaCeT2n @@ -5,7 +6,7 @@ const SOL_chest_owner = "3SGP67y3XAxZivaz2peNTxS6E44cQXErnEMyBXaCeT2n"; const mSOL = "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"; const soETH = "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk"; const BTC = "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E"; -const USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; +const USDC = ADDRESSES.solana.USDC; const CASH = "CASHVDm2wsJXfhj6VWxb7GiMdoLc17Du7paH4bNr5woT"; async function solanaTVL() { diff --git a/projects/chfry/index.js b/projects/chfry/index.js index 728181db31..0da57323d8 100644 --- a/projects/chfry/index.js +++ b/projects/chfry/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require('./abi.json'); const BigNumber = require("bignumber.js"); @@ -12,9 +13,9 @@ const fryerContracts = [ "0x7E271Eb034dFc47B041ADf74b24Fb88E687abA9C", ] -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7"; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const USDT = ADDRESSES.ethereum.USDT; +const DAI = ADDRESSES.ethereum.DAI; +const USDC = ADDRESSES.ethereum.USDC; async function tvl(timestamp, block) { let balances = {}; diff --git a/projects/chocodoge/index.js b/projects/chocodoge/index.js index 4950129cb7..a6a90fbe16 100644 --- a/projects/chocodoge/index.js +++ b/projects/chocodoge/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { unknownTombs, sumTokensExport, } = require('../helper/unknownTokens') const chain = 'dogechain' @@ -24,9 +25,9 @@ module.exports = unknownTombs({ }) module.exports[chain].tvl = sumTokensExport({ chain, owner: genesisPool, tokens: [ - '0x7B4328c127B85369D9f82ca0503B000D09CF9180', + ADDRESSES.dogechain.DC, '0x68609eA0b8393258d0d7EF21401E1Cd3B00A714e', - '0x765277EebeCA2e31912C9946eAe1021199B39C61', - '0xB7ddC6414bf4F5515b52D8BdD69973Ae205ff101', + ADDRESSES.shiden.ETH, + ADDRESSES.dogechain.WWDOGE, ], useDefaultCoreAssets: true, }) module.exports.misrepresentedTokens = true diff --git a/projects/chronos/index.js b/projects/chronos/index.js new file mode 100644 index 0000000000..e92e057991 --- /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, hasStablePools: true }), + } +}; diff --git a/projects/cian/index.js b/projects/cian/index.js index a3e52f3e6e..474631f237 100644 --- a/projects/cian/index.js +++ b/projects/cian/index.js @@ -19,6 +19,19 @@ async function fetchPolygon() { return toUSDTBalances(value); } +async function fetchArbitrum() { + const value = await get("https://data.cian.app/arbitrum/api/v1/tvl"); + + return toUSDTBalances(value); +} + +async function fetchOptimism() { + const value = await get("https://data.cian.app/optimism/api/v1/tvl"); + + return toUSDTBalances(value); +} + + module.exports = { misrepresentedTokens: true, doublecounted: true, @@ -32,4 +45,10 @@ module.exports = { ethereum: { tvl: fetchEthereum, }, + arbitrum: { + tvl: fetchArbitrum, + }, + optimism: { + tvl: fetchOptimism, + }, }; diff --git a/projects/citrus/index.js b/projects/citrus/index.js index 5049d854d3..66c4689d55 100644 --- a/projects/citrus/index.js +++ b/projects/citrus/index.js @@ -1,4 +1,5 @@ -const { getProvider, tokens, } = require('../helper/solana'); +const ADDRESSES = require('../helper/coreAssets.json') +const { getProvider, } = require('../helper/solana'); const { Program } = require("@project-serum/anchor"); const { getConfig } = require('../helper/cache'); const axios = require("axios"); @@ -22,7 +23,7 @@ async function getStats() { const programId = 'JCFRaPv7852ESRwJJGRy2mysUMydXZgVVhrMLmExvmVp'; const provider = getProvider(); // const collectionsById = await getCollections(); - const idl = await getConfig('citrus-idl', 'https://gist.githubusercontent.com/FoxyDev42/5f23cd03eab33e0d73f6f6227912451e/raw/03e68f7543dc4dd399d7b61e15881c1a6792eb4a/citrus-account.json'); + // const idl = await getConfig('citrus-idl', 'https://gist.githubusercontent.com/FoxyDev42/5f23cd03eab33e0d73f6f6227912451e/raw/03e68f7543dc4dd399d7b61e15881c1a6792eb4a/citrus-account.json'); const program = new Program(idl, programId, provider) const loans = await program.account.loan.all() const activeLoans = loans.filter(loan => Object.keys(loan.account.status)[0] === 'active'); @@ -38,11 +39,11 @@ async function getStats() { } const tvl = async () => { - return { [tokens.solana]: (await getStats()).tvl } + return { ['solana:' + ADDRESSES.solana.SOL]: (await getStats()).tvl } }; const borrowed = async () => { - return { [tokens.solana]: (await getStats()).borrowed } + return { ['solana:' + ADDRESSES.solana.SOL]: (await getStats()).borrowed } } module.exports = { @@ -52,4 +53,177 @@ module.exports = { tvl, borrowed, } +}; + +const idl = { + version: '0.1.0', + name: 'citrus', + instructions: [], + accounts: [ + { + name: 'loan', + type: { + kind: 'struct', + fields: [ + { + name: 'bump', + type: 'u8' + }, + { + name: 'lender', + type: 'publicKey' + }, + { + name: 'borrower', + type: 'publicKey' + }, + { + name: 'mint', + type: 'publicKey' + }, + { + name: 'collectionConfig', + type: 'publicKey' + }, + { + name: 'status', + type: { + defined: 'LoanStatus' + } + }, + { + name: 'loanTerms', + type: { + defined: 'LoanTerms' + } + }, + { + name: 'creationTime', + type: 'i64' + }, + { + name: 'startTime', + type: 'i64' + }, + { + name: 'endTime', + type: 'i64' + }, + { + name: 'fox', + type: 'bool' + }, + { + name: 'mortgage', + type: 'bool' + }, + { + name: 'private', + type: 'bool' + }, + { + name: 'offerType', + type: { + defined: 'OfferType' + } + }, + { + name: 'listingPrice', + type: 'u64' + }, + { + name: 'ltvTerms', + type: { + option: { + defined: 'LtvTerms' + } + } + } + ] + } + } + ], + types: [ + { + name: 'LoanTerms', + type: { + kind: 'struct', + fields: [ + { + name: 'apyBps', + type: 'u64' + }, + { + name: 'duration', + type: 'u64' + }, + { + name: 'principal', + type: 'u64' + } + ] + } + }, + { + name: 'LtvTerms', + type: { + kind: 'struct', + fields: [ + { + name: 'ltvBps', + type: 'u64' + }, + { + name: 'maxOffer', + type: 'u64' + } + ] + } + }, + { + name: 'LoanStatus', + type: { + kind: 'enum', + variants: [ + { + name: 'WaitingForBorrower' + }, + { + name: 'WaitingForLender' + }, + { + name: 'Active' + }, + { + name: 'Repaid' + }, + { + name: 'Defaulted' + }, + { + name: 'OnSale' + } + ] + } + }, + { + name: 'OfferType', + type: { + kind: 'enum', + variants: [ + { + name: 'Global' + }, + { + name: 'Mortgage' + }, + { + name: 'Borrow' + } + ] + } + } + ], + events: [], + errors: [] }; \ No newline at end of file diff --git a/projects/claystack/index.js b/projects/claystack/index.js index 96f0babb2c..eb89a2fac4 100644 --- a/projects/claystack/index.js +++ b/projects/claystack/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./clayABIs/clayMain.json'); @@ -6,7 +7,7 @@ const clayAddresses = { }; const coinAddresses = { - matic: "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", + matic: ADDRESSES.ethereum.MATIC, }; async function getClayMaticTvl(_,block) { diff --git a/projects/cleopatradao.js b/projects/cleopatradao.js index 352cd0379a..78420920ca 100644 --- a/projects/cleopatradao.js +++ b/projects/cleopatradao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { ohmTvl } = require("./helper/ohm"); const cat = "0x48358BfAA1EC39AafCb0786c3e0342Db676Df93E"; @@ -5,7 +6,7 @@ const stakingContract = "0x6636dF51544bAef6B90f4012504B1dfE1eD5e3Fd"; const treasury = "0x10243C6D13875443716ff3E88b7Da7664e431E09"; const treasuryTokens = [ ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], // MIM - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], // WAVAX + [ADDRESSES.avax.WAVAX, false], // WAVAX ["0x6a71044647c960afb6bbe758cc444dedfa9349f7", true] // CAT-MIM JLP ] diff --git a/projects/clever-protocol/index.js b/projects/clever-protocol/index.js index 98dea1f674..7d38e6c112 100644 --- a/projects/clever-protocol/index.js +++ b/projects/clever-protocol/index.js @@ -6,7 +6,6 @@ module.exports = { misrepresentedTokens: true, dogechain: { tvl: getUniTVL({ - chain: 'dogechain', factory: FACTORY, useDefaultCoreAssets: true, }), diff --git a/projects/clever/index.js b/projects/clever/index.js index c75efacc5d..06279aee25 100644 --- a/projects/clever/index.js +++ b/projects/clever/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const commonAbi = require("./abis/index.json") const config = require("./config") + const lockCvxAddress = '0x96C68D861aDa016Ed98c30C810879F9df7c64154'; -const cvxAddress = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; async function pool2(_, _1, _2, { api, balances = {}}) { const gaugeTotalSupplies = await api.multiCall({ @@ -37,7 +38,7 @@ async function tvl(timestamp, block, _, { api }) { }), getClevers(balances, api), ]) - sdk.util.sumSingleBalance(balances, cvxAddress, totalLockedGlobal) + sdk.util.sumSingleBalance(balances, ADDRESSES.ethereum.CVX, totalLockedGlobal) return balances } diff --git a/projects/clipper/index.js b/projects/clipper/index.js index e42301b33c..e16e47e7d2 100644 --- a/projects/clipper/index.js +++ b/projects/clipper/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') const { getChainTransform } = require('../helper/portedTokens') const sdk = require('@defillama/sdk') @@ -16,7 +17,7 @@ const chainConfig = { optimism: { chainId: 10, }, arbitrum: { chainId: 42161, }, } -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" +const weth = ADDRESSES.ethereum.WETH const moonbeamGLMR = "moonbeam:0x0000000000000000000000000000000000000802" async function getChainData(chain) { diff --git a/projects/clober/abi.json b/projects/clober/abi.json index b29d92d13b..6edec0a4e1 100644 --- a/projects/clober/abi.json +++ b/projects/clober/abi.json @@ -1,6 +1,5 @@ { "nonce":"uint256:nonce", - "computeTokenAddress": "function computeTokenAddress(uint256) view returns (address)", "market":"address:market", "baseToken":"address:baseToken", "quoteToken":"address:quoteToken" diff --git a/projects/clober/index.js b/projects/clober/index.js index da0a381d38..dd81310e7b 100644 --- a/projects/clober/index.js +++ b/projects/clober/index.js @@ -1,13 +1,42 @@ const abi = require("./abi.json"); +const { ethers } = require("ethers"); const { sumTokens2 } = require('../helper/unwrapLPs') -const FACTORY = "0x93A43391978BFC0bc708d5f55b0Abe7A9ede1B91" +const contractV1DeployedChainIds = [1, 137, 42161] +const contractV1_1DeployedChainIds = [137, 1101, 42161] + +function calculateSalt(chainId, nonce) { + return ethers.utils.solidityKeccak256(['uint256', 'uint256'], [chainId, nonce]) +} + +async function fetchTokenAddressesV1_0(api, chainId){ + if(!contractV1DeployedChainIds.includes(chainId)){ + return [] + } + return await api.fetchList({ + lengthAbi: abi.nonce, + itemAbi: "function computeTokenAddress(uint256) view returns (address)", + target: "0x93A43391978BFC0bc708d5f55b0Abe7A9ede1B91" + }) +} + +async function fetchTokenAddressesV1_1(api, chainId){ + if (!contractV1_1DeployedChainIds.includes(chainId)) { + return [] + } + const maxNonce = await api.call({ abi: abi.nonce, target: "0x24aC0938C010Fb520F1068e96d78E0458855111D" }) + return await api.multiCall({ + abi: "function computeTokenAddress(bytes32) view returns (address)", + calls: Array.from({length: maxNonce}, (_, i) => i ).map((i, v) => ({ target: "0x58ed1f4913e652baF17C154551bd8E9dbc73fC56", params: calculateSalt(chainId, v) })), + }) +} async function tvl(_, _b, _cb, { api }) { - let tokenAddresses = await api.fetchList({ lengthAbi: abi.nonce, itemAbi: abi.computeTokenAddress, target: FACTORY}) + const chainId = await api.getChainId() + let tokenAddresses = [...await fetchTokenAddressesV1_0(api, chainId), ...await fetchTokenAddressesV1_1(api, chainId)] tokenAddresses = tokenAddresses.flat() const markets = await api.multiCall({ abi: abi.market, calls: tokenAddresses }) - const base = await api.multiCall({ abi: abi.baseToken, calls: markets}) + const base = await api.multiCall({ abi: abi.baseToken, calls: markets}) const quote = await api.multiCall({ abi: abi.quoteToken, calls: markets}) const tokens = [base, quote].flat() const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: tokens}) @@ -22,5 +51,6 @@ module.exports = { methodology: "TVL consists of assets deposited into market contracts", ethereum: { tvl }, polygon: { tvl }, - arbitrum: { tvl } + arbitrum: { tvl }, + polygon_zkevm: { tvl } } \ No newline at end of file diff --git a/projects/coffin/index.js b/projects/coffin/index.js index 62c49acbc8..142116d8f6 100644 --- a/projects/coffin/index.js +++ b/projects/coffin/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { addFundsInMasterChef } = require("../helper/masterchef"); @@ -7,7 +8,7 @@ const MasterChefV1Contract = "0x155482Bd4e5128082D61a2384935D4BBDcb0E7a7"; const MasterChefV2Contract = "0x2447115E9Ba73bd2877821BF69E09259664a2bd5"; const stakingContract = "0x61Befe6E5f20217960bD8659cd3113CC1ca67d2F"; -const WFTM = "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"; +const WFTM = ADDRESSES.fantom.WFTM; const ftmTvl = async (timestamp, ethBlock, chainBlocks) => { diff --git a/projects/cofix.js b/projects/cofix.js index 8c81e1ff95..f4c958ad54 100644 --- a/projects/cofix.js +++ b/projects/cofix.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require('./helper/unwrapLPs') async function tvl(_, block) { return sumTokens({}, [ - ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0xb2b7bedd7d7fc19804c7dd4a4e8174c4c73c210d'], - ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0xb2b7bedd7d7fc19804c7dd4a4e8174c4c73c210d'], + [ADDRESSES.ethereum.USDT, '0xb2b7bedd7d7fc19804c7dd4a4e8174c4c73c210d'], + [ADDRESSES.ethereum.WETH, '0xb2b7bedd7d7fc19804c7dd4a4e8174c4c73c210d'], ['0x0316EB71485b0Ab14103307bf65a021042c6d380', '0x7c2d7b53aca4038f2eb649164181114b9aee93cb'], - ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0x7c2d7b53aca4038f2eb649164181114b9aee93cb'], + [ADDRESSES.ethereum.WETH, '0x7c2d7b53aca4038f2eb649164181114b9aee93cb'], ], block) } diff --git a/projects/coindrip/index.js b/projects/coindrip/index.js new file mode 100644 index 0000000000..1d717f2d35 --- /dev/null +++ b/projects/coindrip/index.js @@ -0,0 +1,19 @@ +const { toUSDTBalances } = require("../helper/balances"); +const { get } = require("../helper/http"); +const { sumTokensExport } = require('../helper/sumTokens') +const { getCoreAssets } = require('../helper/tokenMapping') + +const API_URL = "https://app.coindrip.finance/api/tvl"; + +async function tvl() { + const data = await get(API_URL); + return toUSDTBalances(data); +} + +module.exports = { + timetravel: false, + elrond: { + tvl: sumTokensExport({ owner: 'erd1qqqqqqqqqqqqqpgqqnm3x37972323nuv3l3kywev0n8q5n6gyc8qwljqz9', whitelistedTokens: getCoreAssets('elrond')}), + vesting: sumTokensExport({ owner: 'erd1qqqqqqqqqqqqqpgqqnm3x37972323nuv3l3kywev0n8q5n6gyc8qwljqz9', blacklistedTokens: getCoreAssets('elrond')}), + }, +}; \ No newline at end of file diff --git a/projects/coinscope/index.js b/projects/coinscope/index.js new file mode 100644 index 0000000000..773f5391bf --- /dev/null +++ b/projects/coinscope/index.js @@ -0,0 +1,44 @@ + +const { sumUnknownTokens } = require('../helper/unknownTokens') +module.exports = { + misrepresentedTokens: true, + methodology: "TVL is calculated by summing the values of LP tokens held in lockers for a specific network", +}; + +const lockerFactories = { + ethereum: "0x269D4d211CBc9845B006128717eE51b0D6524955", + bsc: "0x269D4d211CBc9845B006128717eE51b0D6524955", + polygon: "0x269D4d211CBc9845B006128717eE51b0D6524955", + avax: "0x269D4d211CBc9845B006128717eE51b0D6524955", + arbitrum: "0x269D4d211CBc9845B006128717eE51b0D6524955", + cronos: "0x269D4d211CBc9845B006128717eE51b0D6524955", + fantom: "0x269D4d211CBc9845B006128717eE51b0D6524955", + telos: "0x269D4d211CBc9845B006128717eE51b0D6524955", + harmony: "0x097f5E933306ad0EbB1c0027B223a3dd153520BE", +} + +Object.keys(lockerFactories).forEach(chain => { + const factory = lockerFactories[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + let fetchLength = 100 + let page = 0 + const tokensAndOwners = [] + let result + do { + result = await api.call({ + abi: abi.getTokens, + target: factory, + params: [true, page, fetchLength, "0x0000000000000000000000000000000000000000",], + }) + tokensAndOwners.push(...result.pageTokens.map(i => i.lockerAddresses.map(j => [i.tokenAddress, j]))) + ++page + } while (result.total === tokensAndOwners) + return sumUnknownTokens({ api, tokensAndOwners: tokensAndOwners.flat(), useDefaultCoreAssets: true }) + } + } +}) + +const abi = { + "getTokens": "function getTokens(bool lp, uint256 page, uint256 pageSize, address token) view returns (tuple(address tokenAddress, uint8 decimals, uint256 totalSupply, bool pair, string pairToken1Name, address pairToken1Address, string pairToken2Name, address pairToken2Address, address pairDexAddress, string tokenName, string tokenSymbol, uint256 totalAmountLocked, uint256 currentAmountLocked, address[] lockerAddresses)[] pageTokens, uint256 total)", +} \ No newline at end of file diff --git a/projects/collectionxyz/index.js b/projects/collectionxyz/index.js index ba58ea17a8..ad8c08cfbb 100644 --- a/projects/collectionxyz/index.js +++ b/projects/collectionxyz/index.js @@ -1,24 +1,42 @@ -const { getLogs } = require('../helper/cache/getLogs') -const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') -const factory = '0x03b51826a4868780db375ee27e5b0adaac5274ee' +const { getLogs } = require('../helper/cache/getLogs'); +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs'); -async function tvl(_, _b, _cb, { api, }) { - const logs = await getLogs({ +const FACTORY_ADDRESS_1 = '0x03b51826a4868780db375ee27e5b0adaac5274ee'; +const FACTORY_ADDRESS_2 = '0x7a1D4c6E8edbd8a9314034356b29419e1b1B44f0'; +const START_BLOCK_1 = 16932638; +const START_BLOCK_2 = 17277832; +const EVENT_ABI = 'event NewPool (address indexed collection, address indexed poolAddress)'; +const TOPIC_HASH = '0x77948cb83ef3caff9ac13dfab1ea1f8a6875c98370287ce587f5dbc74cc5b6b0'; + +async function getPoolLogs(api, factory, startBlock) { + return await getLogs({ api, target: factory, - topics: ['0x77948cb83ef3caff9ac13dfab1ea1f8a6875c98370287ce587f5dbc74cc5b6b0'], - eventAbi: 'event NewPool (address indexed collection, address indexed poolAddress)', + topics: [TOPIC_HASH], + eventAbi: EVENT_ABI, onlyArgs: true, - fromBlock: 16932638, - }) - api.log('Pool length: ', logs.length) - const tokensAndOwners = logs.map(i => [[i.collection, i.poolAddress], [nullAddress, i.poolAddress]]).flat() - return sumTokens2({ api, tokensAndOwners}) + fromBlock: startBlock, + }); +} + +async function getTotalValueLocked(_, _b, _cb, { api }) { + const logsFactory1 = await getPoolLogs(api, FACTORY_ADDRESS_1, START_BLOCK_1); + const logsFactory2 = await getPoolLogs(api, FACTORY_ADDRESS_2, START_BLOCK_2); + const allLogs = [...logsFactory1, ...logsFactory2]; + api.log('Pool length: ', allLogs.length); + + const tokensAndOwners = allLogs.flatMap(log => [ + [log.collection, log.poolAddress], + [nullAddress, log.poolAddress] + ]); + + return sumTokens2({ api, tokensAndOwners }); } + module.exports = { start: 16945809, ethereum: { - tvl, + tvl: getTotalValueLocked, }, }; diff --git a/projects/complus/index.js b/projects/complus/index.js index fdca047b02..85c0aa6cad 100644 --- a/projects/complus/index.js +++ b/projects/complus/index.js @@ -3,15 +3,15 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, polygon: { - tvl: getUniTVL({ chain: 'polygon', useDefaultCoreAssets: true, factory: '0x973c934137dd687eca67bdd1c5a8b74286964ac6', }), + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x973c934137dd687eca67bdd1c5a8b74286964ac6', }), }, heco: { - tvl: getUniTVL({ chain: 'heco', useDefaultCoreAssets: true, factory: '0xc32cccf795940ca8491cd4f31161509db28ab719', }), + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0xc32cccf795940ca8491cd4f31161509db28ab719', }), }, bsc: { - tvl: getUniTVL({ chain: 'bsc', useDefaultCoreAssets: true, factory: '0xdf97982bf70be91df4acd3d511c551f06a0d19ec', }), + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0xdf97982bf70be91df4acd3d511c551f06a0d19ec', }), }, avax:{ - tvl: getUniTVL({ chain: 'avax', useDefaultCoreAssets: true, factory: '0x5c02e78a3969d0e64aa2cfa765acc1d671914ac0', }), + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x5c02e78a3969d0e64aa2cfa765acc1d671914ac0', }), }, } \ No newline at end of file diff --git a/projects/component/index.js b/projects/component/index.js index a4352aff1f..c4da60879c 100644 --- a/projects/component/index.js +++ b/projects/component/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const {staking} = require("../helper/staking"); @@ -7,11 +8,11 @@ const ethStakingPool = "0x79876b5062160C107e02826371dD33c047CCF2de"; const translateToken = { '0xFe7ed09C4956f7cdb54eC4ffCB9818Db2D7025b8': "0x1456688345527be1f37e9e627da0837d6f08c925", - '0xFc8B2690F66B46fEC8B3ceeb95fF4Ac35a0054BC': "0x6b175474e89094c44da98b954eedeac495271d0f", + '0xFc8B2690F66B46fEC8B3ceeb95fF4Ac35a0054BC': ADDRESSES.ethereum.DAI, '0xDACD011A71f8c9619642bf482f1D4CeB338cfFCf': "0x1456688345527be1f37e9e627da0837d6f08c925", '0x3129aC70c738D398d1D74c87EAB9483FD56D16f8': "0x1456688345527be1f37e9e627da0837d6f08c925", - '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E': "0x6b175474e89094c44da98b954eedeac495271d0f", - '0x82f0B8B456c1A451378467398982d4834b6829c1': "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3" + [ADDRESSES.fantom.DAI]: ADDRESSES.ethereum.DAI, + [ADDRESSES.fantom.MIM]: "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3" } const ethPools = [ @@ -19,8 +20,8 @@ const ethPools = [ { token: "0x49519631B404E06ca79C9C7b0dC91648D86F08db", underlying: [ - "0xdAC17F958D2ee523a2206206994597C13D831ec7", - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, "0x1456688345527bE1f37E9e627DA0837D6f08C925" ] }, @@ -28,8 +29,8 @@ const ethPools = [ token: "0x6477960dd932d29518D7e8087d5Ea3D11E606068", underlying: [ "0x1456688345527bE1f37E9e627DA0837D6f08C925", - "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51" + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.sUSD ] } ]; @@ -39,25 +40,25 @@ const xDaiPools = [ { token: "0x53De001bbfAe8cEcBbD6245817512F8DBd8EEF18", underlying: [ - "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", + ADDRESSES.xdai.USDC, "0xFe7ed09C4956f7cdb54eC4ffCB9818Db2D7025b8", - "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d" + ADDRESSES.xdai.WXDAI ] }, { token: "0xF82fc0ecBf3ff8e253a262447335d3d8A72CD028", underlying: [ "0xFc8B2690F66B46fEC8B3ceeb95fF4Ac35a0054BC", - "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d" + ADDRESSES.xdai.WXDAI ] }, { token: "0xfbbd0F67cEbCA3252717E66c1Ed1E97ad8B06377", underlying: [ - "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", + ADDRESSES.xdai.USDC, "0xFc8B2690F66B46fEC8B3ceeb95fF4Ac35a0054BC", "0xD10Cc63531a514BBa7789682E487Add1f15A51E2", - "0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d" + ADDRESSES.xdai.WXDAI ] } ] @@ -67,17 +68,17 @@ const bscPools = [ { token: "0xcf76a0ceDf50DA184FDef08A9d04E6829D7FefDF", underlying: [ - "0x55d398326f99059fF775485246999027B3197955", - "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BUSD, "0xDACD011A71f8c9619642bf482f1D4CeB338cfFCf" ] }, { token: "0x3Bb6Bf6EcBC71f8f78D1Eec9c91de4f8Fd5C891c", underlying: [ - "0x55d398326f99059fF775485246999027B3197955", - "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", - "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d" + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDC ] } ] @@ -87,8 +88,8 @@ const ftmPools = [ { token: "0xdDCA02Ddd94f97eeFE07fCcde780fD2FbDc85b23", underlying: [ - "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", + ADDRESSES.fantom.DAI, + ADDRESSES.fantom.USDC, "0x3129aC70c738D398d1D74c87EAB9483FD56D16f8" ] }, @@ -96,7 +97,7 @@ const ftmPools = [ token: "0x238139bF999f389063444e397cDfadF780ec57DB", underlying: [ "0xdc301622e621166BD8E82f2cA0A26c13Ad0BE355", - "0x82f0B8B456c1A451378467398982d4834b6829c1", + ADDRESSES.fantom.MIM, "0x3129aC70c738D398d1D74c87EAB9483FD56D16f8" ] } @@ -116,7 +117,7 @@ async function getTvlFromPools(balances, pools, block, chain) { for (let j in underlyingBalances) { if (underlyingBalances[j].input.target === "0xD10Cc63531a514BBa7789682E487Add1f15A51E2") { let bal = new BigNumber(underlyingBalances[j].output).div(10 ** 12).toFixed(0); - sdk.util.sumSingleBalance(balances, "xdai:0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", bal); + sdk.util.sumSingleBalance(balances, "xdai:" + ADDRESSES.xdai.USDC, bal); } else if (underlyingBalances[j].input.target in translateToken) { sdk.util.sumSingleBalance(balances, translateToken[underlyingBalances[j].input.target], underlyingBalances[j].output); diff --git a/projects/componentswap/index.js b/projects/componentswap/index.js new file mode 100644 index 0000000000..f8b1041e79 --- /dev/null +++ b/projects/componentswap/index.js @@ -0,0 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport, } = require('../helper/unwrapLPs'); + +const TOKEN_CONTRACTS = [ + ADDRESSES.pulse.DAI, + ADDRESSES.pulse.USDC, + ADDRESSES.pulse.USDT, +] + +module.exports = { + pulse: { + tvl: sumTokensExport({ owner: '0x35C49cB4fa16C557968cF43e237674b38bf05327', tokens: TOKEN_CONTRACTS}) + }, +}; \ No newline at end of file diff --git a/projects/composable/index.js b/projects/composable/index.js index 737d0af02b..46e9157045 100644 --- a/projects/composable/index.js +++ b/projects/composable/index.js @@ -1,20 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { chainExports } = require('../helper/exports') const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') const networks = { 'ethereum': ['0xef4439f0fae7db0b5ce88c155fc6af50f1b38728', [ - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', //usdc - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // eth + ADDRESSES.ethereum.USDC, //usdc + ADDRESSES.ethereum.WETH, // eth '0xca3d75ac011bf5ad07a98d02f18225f9bd9a6bdf', // tricrypto ]], 'arbitrum': ['0xEba8C2Bf0d1C9413543188fc42D7323690AED051', [ - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', //usdc - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' //eth + ADDRESSES.arbitrum.USDC, //usdc + ADDRESSES.arbitrum.WETH //eth ]], 'polygon': ['0xcd8e7322dc2659b1ec447e5d52fdd9c67e8c3c01', [ - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', //usdc - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619' //eth + ADDRESSES.polygon.USDC, //usdc + ADDRESSES.polygon.WETH_1 //eth ]] } diff --git a/projects/compound-onchain/index.js b/projects/compound-onchain/index.js index 3f88b0b7f0..0b340809c7 100644 --- a/projects/compound-onchain/index.js +++ b/projects/compound-onchain/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); @@ -8,19 +9,19 @@ const { lendingMarket } = require('../helper/methodologies') // cache some data const markets = [ { - underlying: '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', + underlying: ADDRESSES.ethereum.BAT, symbol: 'BAT', decimals: 18, cToken: '0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E', }, { - underlying: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + underlying: ADDRESSES.ethereum.DAI, symbol: 'DAI', decimals: 18, cToken: '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', }, { - underlying: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', + underlying: ADDRESSES.ethereum.WETH, symbol: 'WETH', decimals: 18, cToken: '0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5', @@ -32,19 +33,19 @@ const markets = [ cToken: '0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1', }, { - underlying: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + underlying: ADDRESSES.ethereum.USDC, symbol: 'USDC', decimals: 6, cToken: '0x39AA39c021dfbaE8faC545936693aC917d5E7563', }, { - underlying: '0xdAC17F958D2ee523a2206206994597C13D831ec7', + underlying: ADDRESSES.ethereum.USDT, symbol: 'USDT', decimals: 6, cToken: '0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9', }, { - underlying: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', + underlying: ADDRESSES.ethereum.WBTC, symbol: 'WBTC', decimals: 8, cToken: '0xC11b1268C1A384e55C48c2391d8d480264A3A7F4',//cWBTC - legacy @@ -56,7 +57,7 @@ const markets = [ cToken: '0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407', }, { - underlying: '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', + underlying: ADDRESSES.ethereum.SAI, symbol: 'SAI', decimals: 18, cToken: '0xF5DCe57282A584D2746FaF1593d3121Fcac444dC', @@ -83,7 +84,7 @@ async function getMarkets(block) { } else { const markets = [{ cToken: CTOKEN_WETH, - underlying: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', //cETH => WETH + underlying: ADDRESSES.ethereum.WETH, //cETH => WETH }] const allCTokens = await getAllCTokens(block) @@ -170,7 +171,7 @@ async function tvl(timestamp, block) { module.exports = { hallmarks: [ [1632873600, "Comptroller vulnerability exploit"], - [1623715200, "Liquidity mining begins"] + [1592226000, "COMP distribution begins"] ], timetravel: true, ethereum: { diff --git a/projects/compound-v3/index.js b/projects/compound-v3/index.js index 7bba7c94be..137669d1c2 100644 --- a/projects/compound-v3/index.js +++ b/projects/compound-v3/index.js @@ -4,16 +4,14 @@ const markets = [ '0xa17581a9e3356d9a858b789d68b4d866e593ae94', // ETH Market ] -const collaterals = [ - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", -] - module.exports = compoundV3Exports({ ethereum: { - markets, collaterals, + markets, + }, + arbitrum: { + markets: ['0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA'], }, polygon: { - markets:["0xF25212E676D1F7F89Cd72fFEe66158f541246445"], collaterals:["0x2791bca1f2de4661ed88a30c99a7a9449aa84174"], + markets:["0xF25212E676D1F7F89Cd72fFEe66158f541246445"], } }) \ No newline at end of file diff --git a/projects/concave/index.js b/projects/concave/index.js index 014978986d..995209a869 100644 --- a/projects/concave/index.js +++ b/projects/concave/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { ohmTvl } = require('../helper/ohm') const { uniTvlExport } = require('../helper/calculateUniTvl'); @@ -6,11 +7,11 @@ const { genericUnwrapCvx } = require('../helper/unwrapLPs'); // Treasury backing the CNV price, similar to OHM so using the ohm wrapper const treasury = '0x226e7af139a0f34c6771deb252f9988876ac1ced' -const etherAddress = '0x0000000000000000000000000000000000000000' +const etherAddress = ADDRESSES.null const cnv_token = '0x000000007a58f5f58e697e51ab0357bc9e260a04' -const stakingAddress = '0x0000000000000000000000000000000000000000' +const stakingAddress = ADDRESSES.null const treasuryTokens = [ - ['0x6b175474e89094c44da98b954eedeac495271d0f', false], //DAI + [ADDRESSES.ethereum.DAI, false], //DAI // ['0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', false], //gOHM ] const gemSwap_factory = '0x066a5cb7ddc6d55384e2f6ca13d5dd2cd2685cbd' diff --git a/projects/concentrator/index.js b/projects/concentrator/index.js index bd5e17e4a3..0397ffeee7 100644 --- a/projects/concentrator/index.js +++ b/projects/concentrator/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require('./abis/abi.json') const { default: BigNumber } = require("bignumber.js"); @@ -7,21 +8,21 @@ const AladdinCRVABI = require('./abis/AladdinCRV.json') const AladdinAFXSABI = require('./abis/AladdinAFXS.json') const AladdinCVXABI = require('./abis/AladdinCVX.json') const AladdinSdCRVABI = require('./abis/AladdinSdCRV.json') -const { farmConfig, vaultConfig: configPools, afrxETHConfig } = require('./config.js'); +const { farmConfig } = require('./config.js'); const concentratorVault = '0xc8fF37F7d057dF1BB9Ad681b53Fa4726f268E0e8'; const concentratorAcrv = '0x2b95A1Dcc3D405535f9ed33c219ab38E8d7e0884'; const concentratorAFXS = '0xDAF03D70Fe637b91bA6E521A32E1Fb39256d3EC9'; const concentratorAFrxETH = "0xb15Ad6113264094Fd9BF2238729410A07EBE5ABa"; -const cvxcrvAddress = '0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7'; +const cvxcrvAddress = ADDRESSES.ethereum.cvxCRV; const concentratorAbcCVXAddress = '0xDEC800C2b17c9673570FDF54450dc1bd79c8E359'; const concentratorAsdCRVAddress = "0x43E54C2E7b3e294De3A155785F52AB49d87B9922" const concentratorNewVault = '0x3Cf54F3A1969be9916DAD548f3C084331C4450b5'; const concentratorAfxsVault = '0xD6E3BB7b1D6Fa75A71d48CFB10096d59ABbf99E1'; const concentratorAfrxETHVault = '0x50B47c4A642231dbe0B411a0B2FBC1EBD129346D'; -const usdtAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"; +const usdtAddress = ADDRESSES.ethereum.USDT; const aladdinBalancerLPGauge = '0x33e411ebE366D72d058F3eF22F1D0Cf8077fDaB0'; const clevCVXAddress = "0xf05e58fCeA29ab4dA01A495140B349F8410Ba904" const clevCVXCVXAddress = "0xF9078Fb962A7D13F55d40d49C8AA6472aBD1A5a6" diff --git a/projects/concordex-io/index.js b/projects/concordex-io/index.js new file mode 100644 index 0000000000..39ab729a2a --- /dev/null +++ b/projects/concordex-io/index.js @@ -0,0 +1,15 @@ +const { post } = require('../helper/http') + +async function tvl(_, _b, _cb, { api, }) { + const body = {"jsonrpc":"2.0","method":"liquidity_pools_list","params":{"filter":{"sort":"EFFECTIVE_TVL","page":1,"is_desc":true,"search":"","limit":999}},"id":0} + const { result: { pools }} = await post('https://cdex-liquidity-pool.concordex.io/v1/rpc', body) + return { + tether: pools.reduce((acc, i) => acc + +i.tvl, 0) + } +} + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + concordium: { tvl }, +} diff --git a/projects/config/hodltree/addresses.js b/projects/config/hodltree/addresses.js index d28492a311..f366254dfa 100644 --- a/projects/config/hodltree/addresses.js +++ b/projects/config/hodltree/addresses.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../helper/coreAssets.json') const { dexType, flashloan, @@ -32,7 +33,7 @@ const eth = [ contractType: lendBorrow.lender, address: '0xb3e1912fa5d9d219da8c65cda407cc998849428b', miscInfo: { - tokenIn: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' + tokenIn: ADDRESSES.ethereum.WETH } }, { contractType: lendBorrow.borrower, @@ -55,11 +56,11 @@ const eth = [ address: '0x2e5a08c26cb22109e585784c4f99363bb3e199ab', miscInfo: { tokensIn: [ - '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51', + ADDRESSES.ethereum.sUSD, '0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd', - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - '0x6B175474E89094C44Da98b954EedeAC495271d0F', - '0x0000000000085d4780B73119b644AE5ecd22b376' + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.TUSD ] } }] @@ -76,13 +77,13 @@ const eth = [ contractType: em.rp, address: '0xce596bf99d21e46fa91143c03d7a356682b67859', miscInfo: { - token: '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51' + token: ADDRESSES.ethereum.sUSD } }, { contractType: em.vps, address: '0xb7ead8c418f3d03bc22dd538c22600abe7209e72', miscInfo: { - token: '0x57ab1ec28d129707052df4df418d58a2d46d5f51' + token: ADDRESSES.ethereum.sUSD } }, @@ -96,13 +97,13 @@ const eth = [ contractType: em.rp, address: '0x87B46E49681E08E3adDF8A90F6a1fb5183079033', miscInfo: { - token: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' + token: ADDRESSES.ethereum.USDC } }, { contractType: em.vps, address: '0xcB72e764Ab46535aAD13cbF55b1F06cB15347A95', miscInfo: { - token: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' + token: ADDRESSES.ethereum.USDC } }] } @@ -118,7 +119,7 @@ const polygon = [ contractType: lendBorrow.lender, address: '0x2F35d311fd2F0b0dA65FA268B86831279FB4fd98', miscInfo: { - tokenIn: '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270' + tokenIn: ADDRESSES.polygon.WMATIC_2 } }, { contractType: lendBorrow.borrower, @@ -141,9 +142,9 @@ const polygon = [ address: '0xCAFDa65B1031535F1766C6b1E3b5efF5520c7C0f', miscInfo: { tokensIn: [ - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - '0xc2132D05D31c914a87C6611C10748AEb04B58e8F' + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.USDT ] } }] diff --git a/projects/config/keys.js b/projects/config/keys.js index 57e42db85c..9d5be2d3bd 100644 --- a/projects/config/keys.js +++ b/projects/config/keys.js @@ -1,40 +1,41 @@ +const ADDRESSES = require('../helper/coreAssets.json') let keys = { - '0x514910771af9ca656af840dff83e8264ecf986ca': 'chainlink', - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599': 'bitcoin', - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9': 'aave', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 'stable', - '0x0000000000085d4780B73119b644AE5ecd22b376': 'stable', - '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e': 'yearn-finance', //yfi + [ADDRESSES.ethereum.LINK]: 'chainlink', + [ADDRESSES.ethereum.WBTC]: 'bitcoin', + [ADDRESSES.ethereum.AAVE]: 'aave', + [ADDRESSES.ethereum.USDC]: 'stable', + [ADDRESSES.ethereum.TUSD]: 'stable', + [ADDRESSES.ethereum.YFI]: 'yearn-finance', '0x408e41876cccdc0f92210600ef50372656052a38': 'republic-protocol', //ren '0x80fB784B7eD66730e8b1DBd9820aFD29931aab03': 'ethlend', //lend - '0x4fabb145d64652a948d72533023f6e7a623c7c53': 'stable', //busd - '0xdac17f958d2ee523a2206206994597c13d831ec7': 'stable', //USDT - '0x6b175474e89094c44da98b954eedeac495271d0f': 'stable', //DAI - '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2': 'maker', //makerdao - '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f': 'havven', //SNX + [ADDRESSES.ethereum.BUSD]: 'stable', + [ADDRESSES.ethereum.USDT]: 'stable', + [ADDRESSES.ethereum.DAI]: 'stable', + [ADDRESSES.ethereum.MKR]: 'maker', + [ADDRESSES.ethereum.SNX]: 'havven', '0x0f5d2fb29fb7d3cfee444a200298f468908cc942': 'decentraland', //MANA - '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984': 'uniswap', //uni + [ADDRESSES.ethereum.UNI]: 'uniswap', '0xdd974d5c2e2928dea5f71b9825b8b646686bd200': 'kyber-network', //knc '0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c': 'enjincoin', //ENJ - '0x0d8775f648430679a709e98d2b0cb6250d2887ef': 'basic-attention-token', //BAT - '0x57ab1ec28d129707052df4df418d58a2d46d5f51': 'stable', //susd + [ADDRESSES.ethereum.BAT]: 'basic-attention-token', + [ADDRESSES.ethereum.sUSD]: 'stable', '0xe41d2489571d322189246dafa5ebde1f4699f498': '0x', //0x - '0xd533a949740bb3306d119cc777fa900ba034cd52': 'curve-dao-token', + [ADDRESSES.ethereum.CRV]: 'curve-dao-token', '0xc00e94cb662c3520282e6f5717214004a7f26888': 'compound-governance-token', '0x04fa0d235c4abf4bcf4787af4cf447de572ef828': 'uma', '0xd26114cd6ee289accf82350c8d8487fedb8a0c07': 'omisego', - '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359': 'sai', - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2': 'ethereum', + [ADDRESSES.ethereum.SAI]: 'sai', + [ADDRESSES.ethereum.WETH]: 'ethereum', '0x5d3a536e4d6dbd6114cc1ead35777bab948e3643': 'cdai', '0xbc396689893d065f41bc2c6ecbee5e0085233447': 'perpetual-protocol', '0x92e187a03b6cd19cb6af293ba17f2745fd2357d5': 'unit-protocol-duck', '0x2ba592f78db6436527729929aaf6c908497cb200': 'cream', '0x0ae055097c6d159879521c384f1d2123d1f195e6': 'xdai-stake', '0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44': 'keep3rv1', - '0x4e15361fd6b4bb609fa63c81a2be19d873717870': 'fantom', - '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2': 'sushi', + [ADDRESSES.ethereum.FTM]: 'fantom', + [ADDRESSES.ethereum.SUSHI]: 'sushi', '0x4688a8b1f292fdab17e9a90c8bc379dc1dbd8713': 'cover-protocol', '0x3472a5a71965499acd81997a54bba8d852c6e53d': 'badger-dao', '0xa3bed4e1c75d00fa6f4e5e6922db7261b5e9acd2': 'meta', diff --git a/projects/config/mantra-dao/contracts/lp-staking-contracts.js b/projects/config/mantra-dao/contracts/lp-staking-contracts.js index 84156d17dc..9b9e96e592 100644 --- a/projects/config/mantra-dao/contracts/lp-staking-contracts.js +++ b/projects/config/mantra-dao/contracts/lp-staking-contracts.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../../helper/coreAssets.json') const lpStakingAssetsETH = [ // LABS-ETH UNI LP simple staking { @@ -5,7 +6,7 @@ const lpStakingAssetsETH = [ pairAddress: "0x2d9fd51e896ff0352cb6d697d13d04c2cb85ca83", token1: "0x2D9FD51E896Ff0352Cb6D697D13D04C2CB85CA83", price1: "labs-group", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // LABS-ETH UNI LP staking with exit tollbooth @@ -14,7 +15,7 @@ const lpStakingAssetsETH = [ pairAddress: "0x2d9fd51e896ff0352cb6d697d13d04c2cb85ca83", token1: "0x2D9FD51E896Ff0352Cb6D697D13D04C2CB85CA83", price1: "labs-group", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // MANTRA DAO OM-ETH LP staking @@ -23,7 +24,7 @@ const lpStakingAssetsETH = [ pairAddress: "0xe46935ae80e05cdebd4a4008b6ccaa36d2845370", token1: "0x3593D125a4f7849a1B059E64F4517A86Dd60c95d", price1: "mantra-dao", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // ROYA-ETH LP staking @@ -32,7 +33,7 @@ const lpStakingAssetsETH = [ pairAddress: "0x6d9d2427cfa49e39b4667c4c3f627e56ae586f37", token1: "0x4Cd4c0eEDb2bC21f4e280d0Fe4C45B17430F94A9", price1: "royale", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // BITE-ETH LP staking @@ -41,7 +42,7 @@ const lpStakingAssetsETH = [ pairAddress: "0x1f07f8e712659087914b96db4d6f6e4fee32285e", token1: "0x4eed0fa8de12d5a86517f214c2f11586ba2ed88d", price1: "dragonbite", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // BITE-ETH LP staking w/ tollbooth @@ -50,14 +51,14 @@ const lpStakingAssetsETH = [ pairAddress: "0x1f07f8e712659087914b96db4d6f6e4fee32285e", token1: "0x4eed0fa8de12d5a86517f214c2f11586ba2ed88d", price1: "dragonbite", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // BBANK-ETH LP staking { contract: "0x6406788d1CD4fdD823ef607A924c00a4244a841d", pairAddress: "0x2a182e532a379cb2c7f1b34ce3f76f3f7d3596f7", - token1: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token1: ADDRESSES.ethereum.WETH, price1: "weth", token2: "0xf4b5470523ccd314c6b9da041076e7d79e0df267", price2: "blockbank", @@ -68,7 +69,7 @@ const lpStakingAssetsETH = [ pairAddress: "0x4fc47579ecf6aa76677ee142b6b75faf9eeafba8", token1: "0x5eaa69b29f99c84fe5de8200340b4e9b4ab38eac", price1: "raze-network", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, // BCUBE-ETH LP staking @@ -77,7 +78,7 @@ const lpStakingAssetsETH = [ pairAddress: "0xc62bf2c79f34ff24e2f97982af4f064161ed8949", token1: "0x93c9175e26f57d2888c7df8b470c9eea5c0b0a93", price1: "b-cube-ai", - token2: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token2: ADDRESSES.ethereum.WETH, price2: "weth", }, ]; @@ -90,14 +91,14 @@ const lpStakingAssetsBSC = [ pairAddress: "0xC309a6d2F1537922E06f15aA2eb21CaA1b2eEDb6", token1: "0x4e6415a5727ea08aae4580057187923aec331227", price1: "refinable", - token2: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token2: ADDRESSES.bsc.WBNB, price2: "wbnb", }, // OM-BNB LP staking { contract: "0xcbf42ace1dbd895ffdcabc1b841488542626014d", pairAddress: "0x49837a48abde7c525bdc86d9acba39f739cbe22c", - token1: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token1: ADDRESSES.bsc.WBNB, price1: "wbnb", token2: "0xf78d2e7936f5fe18308a3b2951a93b6c4a41f5e2", price2: "mantra-dao", @@ -108,14 +109,14 @@ const lpStakingAssetsBSC = [ pairAddress: "0x0b49580278b403ca13055bf4d81b6b7aa85fd8b9", token1: "0x0e2b41ea957624a314108cc4e33703e9d78f4b3c", price1: "greenheart-cbd", - token2: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token2: ADDRESSES.bsc.WBNB, price2: "wbnb", }, // BBANK-BNB LP staking { contract: "0x1E8BC897bf03ebac570Df7e5526561f8a42eCe05", pairAddress: "0x538e61bd3258304e9970f4f2db37a217f60436e1", - token1: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token1: ADDRESSES.bsc.WBNB, price1: "wbnb", token2: "0xf4b5470523ccd314c6b9da041076e7d79e0df267", price2: "blockbank", @@ -126,7 +127,7 @@ const lpStakingAssetsBSC = [ pairAddress: "0xb8b4383b49d451bbea63bc4421466e1086da6f18", token1: "0x96058f8c3e16576d9bd68766f3836d9a33158f89", price1: "bondly", - token2: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + token2: ADDRESSES.bsc.WBNB, price2: "wbnb", }, // MIST-BNB LP staking @@ -135,7 +136,7 @@ const lpStakingAssetsBSC = [ pairAddress: "0x5a26eb7c9c72140d01039eb172dcb8ec98d071bd", token1: "0x68e374f856bf25468d365e539b700b648bf94b67", price1: "mist", - token2: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token2: ADDRESSES.bsc.WBNB, price2: "wbnb", }, // ROSN-BNB LP staking @@ -144,7 +145,7 @@ const lpStakingAssetsBSC = [ pairAddress: "0x5548bd47293171d3bc1621edccd953bcc9b814cb", token1: "0x651Cd665bD558175A956fb3D72206eA08Eb3dF5b", price1: "roseon-finance", - token2: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token2: ADDRESSES.bsc.WBNB, price2: "wbnb", }, // MLT-BNB LP staking @@ -153,14 +154,14 @@ const lpStakingAssetsBSC = [ pairAddress: "0x560b96f81a2190ff6ac84ebfd17788bab3679cbc", token1: "0x4518231a8fdf6ac553b9bbd51bbb86825b583263", price1: "media-licensing-token", - token2: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token2: ADDRESSES.bsc.WBNB, price2: "wbnb", }, // L3P-BNB LP staking { contract: "0x3ba3E2f3cACcDbE3C56D3046FFe859cc9deE08a0", pairAddress: "0xB62c57Bda4C126E21A726e3D28734bfb1151231e", - token1: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + token1: ADDRESSES.bsc.WBNB, price1: "wbnb", token2: "0xdeF1da03061DDd2A5Ef6c59220C135dec623116d", price2: "lepricon", @@ -173,7 +174,7 @@ const lpStakingAssetsPOLYGON = [ { contract: "0xCBf42Ace1dBD895FFDCaBC1b841488542626014d", pairAddress: "0xff2bbcb399ad50bbd06debadd47d290933ae1038", - token1: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + token1: ADDRESSES.polygon.WETH_1, price1: "weth", token2: "0xC3Ec80343D2bae2F8E680FDADDe7C17E71E114ea", price2: "mantra-dao", @@ -184,7 +185,7 @@ const lpStakingAssetsPOLYGON = [ pairAddress: "0x1dF661fC4319415a2f990bd5F49D5cA70EFDee1C", token1: "0x3f6b3595ecF70735D3f48D69b09C4E4506DB3F47", price1: "gamestation", - token2: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + token2: ADDRESSES.polygon.WETH_1, price2: "weth", }, ]; diff --git a/projects/config/onx/constant.js b/projects/config/onx/constant.js index 419e9a7bc8..9b3c7b565c 100644 --- a/projects/config/onx/constant.js +++ b/projects/config/onx/constant.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../helper/coreAssets.json') const tokenAddresses = { onx: "0xe0ad1806fd3e7edf6ff52fdb822432e847411033", sOnx: "0xa99f0ad2a539b2867fcfea47f7e71f240940b47c", @@ -10,14 +11,14 @@ const tokenAddresses = { pool: "0x47F3E6C1Ef0cBe69502167095b592e61de108BaA", aethToken: "0xE95A203B1a91a908F9B9CE46459d101078c2c3cb", onsToken: "0xfC97C0c12438B6E4CF246cD831b02FeF4950DCAD", - daiToken: "0x6B175474E89094C44Da98b954EedeAC495271d0F", - fraxToken: "0x853d955acef822db058eb8505911ed77f175b99e", - usdcToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + daiToken: ADDRESSES.ethereum.DAI, + fraxToken: ADDRESSES.ethereum.FRAX, + usdcToken: ADDRESSES.ethereum.USDC, aethPairEth: "0x6147805e1011417B93e5D693424a62A70d09d0E5", aethPairOns: "0x5022BbC26B3Bc8c8d2F1F7dB9ee3A2B4631b9b18", aethPairOne: "0x5BD4D1f8D46Ad6ae1e6b694eb64f7583C1cB1A74", oneVault: "0x3BdF1977d87EDAD8e0617efCEa958F6d43A4C30E", - wethToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + wethToken: ADDRESSES.ethereum.WETH, bondPairEth: "0xb17b1342579e4bce6b6e9a426092ea57d33843d9", sushiPairEth: "0xce84867c3c02b05dc570d0135103d3fb9cc19433", fantom: { diff --git a/projects/config/onx/ethereum/farms.js b/projects/config/onx/ethereum/farms.js index 0a0720a4c2..414bd79bb8 100644 --- a/projects/config/onx/ethereum/farms.js +++ b/projects/config/onx/ethereum/farms.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../../helper/coreAssets.json') const rawFarms = [ {//0 @@ -28,7 +29,7 @@ const rawFarms = [ subTokenSymbol1: 'ANKR', subTokenSymbol2: 'ANKR', subTokenAddresses1: '0xE95A203B1a91a908F9B9CE46459d101078c2c3cb', - subTokenAddresses2: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + subTokenAddresses2: ADDRESSES.ethereum.USDC, }, {//3 title: 'onxEthSlpMulti', diff --git a/projects/config/smoothy/abis.js b/projects/config/smoothy/abis.js index eee78fccfc..408e5a45c2 100644 --- a/projects/config/smoothy/abis.js +++ b/projects/config/smoothy/abis.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../helper/coreAssets.json') let abis = {}; abis.smoothy = { @@ -9,37 +10,37 @@ abis.smoothy = { abis.tokens = [ { symbol: "USDT", - address: "0xdac17f958d2ee523a2206206994597c13d831ec7", + address: ADDRESSES.ethereum.USDT, id: 0, decimals: 6, }, { symbol: "USDC", - address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + address: ADDRESSES.ethereum.USDC, id: 1, decimals: 6, }, { symbol: "DAI", - address: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + address: ADDRESSES.ethereum.DAI, id: 2, decimals: 18, }, { symbol: "TUSD", - address: "0x0000000000085d4780B73119b644AE5ecd22b376", + address: ADDRESSES.ethereum.TUSD, id: 3, decimals: 18, }, { symbol: "sUSD", - address: "0x57ab1ec28d129707052df4df418d58a2d46d5f51", + address: ADDRESSES.ethereum.sUSD, id: 4, decimals: 18, }, { symbol: "BUSD", - address: "0x4fabb145d64652a948d72533023f6e7a623c7c53", + address: ADDRESSES.ethereum.BUSD, id: 5, decimals: 18, }, diff --git a/projects/conic-omnipool/index.js b/projects/conic-omnipool/index.js index a4c290cab4..c473908b1b 100644 --- a/projects/conic-omnipool/index.js +++ b/projects/conic-omnipool/index.js @@ -2,6 +2,9 @@ const sdk = require('@defillama/sdk') module.exports = { doublecounted: true, + hallmarks: [ + [1689937200,"ETH Omnipool Hacked"] + ], ethereum: { tvl: async (_, _b, _cb, { api, }) => { const balances = {} diff --git a/projects/connext/old.js b/projects/connext/old.js index b1f9a708d1..fb8ca75713 100644 --- a/projects/connext/old.js +++ b/projects/connext/old.js @@ -1,19 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); const BigNumber = require('bignumber.js') // V1 const hubAddress = '0xdfa6edAe2EC0cF1d4A60542422724A48195A5071'; -const tokenDenominationAddress = '0x6b175474e89094c44da98b954eedeac495271d0f'; +const tokenDenominationAddress = ADDRESSES.ethereum.DAI; //V3 const routers = ['0xe3cF69b86F274a14B87946bf641f11Ac837f4492', '0xe6887c0cc3c37cb2ee34Bc58AB258f36825CA910', '0xE540998865aFEB054021dc849Cc6191b8E09dC08', '0xC6C68811E75EfD86d012587849F1A1D30427361d'] -const ethereumTokens = ['0xdAC17F958D2ee523a2206206994597C13D831ec7', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', '0x6b175474e89094c44da98b954eedeac495271d0f'] -const bscTokens = ['0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', '0x55d398326f99059fF775485246999027B3197955', '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d'] +const ethereumTokens = [ADDRESSES.ethereum.USDT, ADDRESSES.ethereum.USDC, ADDRESSES.ethereum.MATIC, '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', ADDRESSES.ethereum.DAI] +const bscTokens = ['0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', ADDRESSES.bsc.USDT, ADDRESSES.bsc.USDC] const polygonSettings = { nativeCoin: 'matic-network', tokens: [ { - address: '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + address: ADDRESSES.polygon.DAI, coingeckoId: 'dai', }, { @@ -21,11 +22,11 @@ const polygonSettings = { coingeckoId: 'decentraland' }, { - address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', + address: ADDRESSES.polygon.USDT, coingeckoId: 'tether' }, { - address: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', + address: ADDRESSES.polygon.USDC, coingeckoId: 'usd-coin' } ] @@ -34,11 +35,11 @@ const xdaiSettings = { nativeCoin: 'dai', tokens: [ { - address: '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', + address: ADDRESSES.xdai.USDC, coingeckoId: 'usd-coin' }, { - address: '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', + address: ADDRESSES.xdai.USDT, coingeckoId: 'tether' }, ] diff --git a/projects/convex/index.js b/projects/convex/index.js index 5bb60c34a3..b45440ae19 100644 --- a/projects/convex/index.js +++ b/projects/convex/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const ABI = require('./abi.json') const { sumTokensExport } = require('../helper/unwrapLPs') const boosterAddress = "0xF403C135812408BFbE8713b5A23a04b3D48AAE31"; const staker = '0x989aeb4d175e16225e39e87d0d97a3360524ad80' -const cvxAddress = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; +const cvxAddress = ADDRESSES.ethereum.CVX; const cvxRewardsAddress = "0xCF50b810E57Ac33B91dCF525C6ddd9881B139332"; -const crvAddress = "0xd533a949740bb3306d119cc777fa900ba034cd52"; +const crvAddress = ADDRESSES.ethereum.CRV; const arbiPoolInfoABI = 'function poolInfo(uint256) view returns (address lptoken, address gauge, address rewards, bool shutdown, address factory)' diff --git a/projects/convex/pools-crv.js b/projects/convex/pools-crv.js index 8f723d13e0..06082a5be6 100644 --- a/projects/convex/pools-crv.js +++ b/projects/convex/pools-crv.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const REFERENCE_ASSETS = {}; const coins = {}; @@ -761,7 +762,7 @@ module.exports = [{ referenceAsset: REFERENCE_ASSETS.EUR, oldAdditionalRewards: [{ name: 'SNX', - rewardTokenAddress: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', + rewardTokenAddress: ADDRESSES.ethereum.SNX, rewardTokenDecimals: 18, rewardTokenCoingeckoId: 'havven', }], @@ -856,7 +857,7 @@ module.exports = [{ additionalRewards: [{ name: 'LDO', amountDataKey: 'ldoRewards', - rewardTokenAddress: '0x5a98fcbea516cf06857215779fd812ca3bef1b32', + rewardTokenAddress: ADDRESSES.ethereum.LIDO, rewardTokenDecimals: 18, rewardTokenCoingeckoId: 'lido-dao', }], diff --git a/projects/core/index.js b/projects/core/index.js index 4fa98fb865..6409055e0e 100644 --- a/projects/core/index.js +++ b/projects/core/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require('../helper/unwrapLPs') // cVault UniV2 pairs @@ -16,15 +17,15 @@ const WCORE = '0x17B8c1A92B66b1CF3092C5d223Cb3a129023b669' // wCORE // ERC20 Tokens const COREDAO = '0xf66cd2f8755a21d3c8683a10269f795c0532dd58' // coreDAO -const DAI = '0x6B175474E89094C44Da98b954EedeAC495271d0F' // DAI +const DAI = ADDRESSES.ethereum.DAI // DAI const DELTA = '0x9EA3b5b4EC044b70375236A281986106457b20EF' // DELTA const FANNY = '0x8ad66f7e0e3e3dc331d3dbf2c662d7ae293c1fe0' // FANNY const CORE = '0x62359ed7505efc61ff1d56fef82158ccaffa23d7' // CORE const DELTA_RLP = '0xfcfc434ee5bff924222e084a8876eee74ea7cfba' // DELTA rLP -const WETH = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' // wETH -const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7" -const WBTC = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" +const WETH = ADDRESSES.ethereum.WETH // wETH +const USDC = ADDRESSES.ethereum.USDC +const USDT = ADDRESSES.ethereum.USDT +const WBTC = ADDRESSES.ethereum.WBTC // Ecosystem contracts const CORE_DEPLOYER = '0x5a16552f59ea34e44ec81e58b3817833e9fd5436' // CoreVault Deployer/Multisig diff --git a/projects/cover.js b/projects/cover.js index 4eb50307a2..527841ea42 100644 --- a/projects/cover.js +++ b/projects/cover.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abis = require('./config/cover/cover.js') const { sumTokens } = require('./helper/unwrapLPs'); @@ -21,7 +22,7 @@ async function tvl(ts, block) { protocolDetails.forEach(({ output }) => { output._allCovers.forEach(cover => toa.push( - ['0x6b175474e89094c44da98b954eedeac495271d0f', cover], // DAI + [ADDRESSES.ethereum.DAI, cover], // DAI ['0x16de59092dAE5CcF4A1E6439D611fd0653f0Bd01', cover], // yearn DAI )) }) diff --git a/projects/covo-v2/index.js b/projects/covo-v2/index.js index e876f05cb0..5e33071e65 100644 --- a/projects/covo-v2/index.js +++ b/projects/covo-v2/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') const fundStore = "0xED29cB1b164dd7EA1c5065E79a15dA31EC34327B"; @@ -7,7 +8,7 @@ module.exports = { polygon: { tvl: sumTokensExport({ owners: [fundStore], tokens: [ nullAddress, - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',//USDC + ADDRESSES.polygon.USDC,//USDC ]}), staking: sumTokensExport({ owners: [fundStore], tokens: [covo]}) }, diff --git a/projects/cowswap-cash/index.js b/projects/cowswap-cash/index.js new file mode 100644 index 0000000000..ee736bc1a6 --- /dev/null +++ b/projects/cowswap-cash/index.js @@ -0,0 +1,14 @@ +const { getUniTVL } = require('../helper/unknownTokens') +const { stakingPricedLP } = require('../helper/staking') + + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + methodology: "The factory addresses are used to find the LP pairs on Smart BCH and Milkomeda. For Cardano we calculate the tokens on resting orders on the order book contracts. TVL is equal to the liquidity on the AMM plus the open orders in the order book", + smartbch: { + tvl: getUniTVL({ factory: '0x72cd8c0B5169Ff1f337E2b8F5b121f8510b52117', chain: 'smartbch', useDefaultCoreAssets: true }), + staking: stakingPricedLP("0x4856BB1a11AF5514dAA0B0DC8Ca630671eA9bf56", "0xc8E09AEdB3c949a875e1FD571dC4b3E48FB221f0", "smartbch", "0x599061437d8455df1f86d401FCC2211baaBC632D", "bitcoin-cash", false, 18) + }, + +} \ No newline at end of file diff --git a/projects/cozy-v2/index.js b/projects/cozy-v2/index.js new file mode 100644 index 0000000000..48aa5410dc --- /dev/null +++ b/projects/cozy-v2/index.js @@ -0,0 +1,25 @@ +const { getLogs, getAddress } = require('../helper/cache/getLogs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const config = { + optimism: {factory: '0xdebe19b57e8b7eb6ea6ebea67b12153e011e6447', fromBlock: 96818459,}, +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const {factory, fromBlock} = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x1bf8fff61a482f21edcb49226d708f5255b3e06bb9c6485892a057058b494790'], + fromBlock, + }) + const tokensAndOwners = logs.map(i => [i.topics[1], i.data].map(getAddress)) + return sumTokens2({ api, tokensAndOwners}) + } + } +}) \ No newline at end of file diff --git a/projects/cozy/index.js b/projects/cozy/index.js index ea995626fe..f9dba73acf 100644 --- a/projects/cozy/index.js +++ b/projects/cozy/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {compoundExports} = require('../helper/compound') const transform = addr=>{ if(addr==="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"){ - return "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + return ADDRESSES.ethereum.WETH } return addr } diff --git a/projects/crETH2/index.js b/projects/crETH2/index.js new file mode 100644 index 0000000000..f89a2a2bb6 --- /dev/null +++ b/projects/crETH2/index.js @@ -0,0 +1,10 @@ +const sdk = require("@defillama/sdk") +const token = '0x49d72e3973900a195a155a46441f0c08179fdb64' + +module.exports = { + ethereum: { + tvl: async (_, block) => ({ + ethereum: (await sdk.api.erc20.totalSupply({ target: token, block})).output/1e18 + }) + } +} \ No newline at end of file diff --git a/projects/crafting/index.js b/projects/crafting/index.js index 3dc5511c0b..de35652d11 100644 --- a/projects/crafting/index.js +++ b/projects/crafting/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const contractStakingETH = "0x9353177049757A21f19a28C3055c03871e6428cf"; -const ETH = "0x0000000000000000000000000000000000000000"; +const ETH = ADDRESSES.null; const contractAddresses = [ //Staking Contract wbtc @@ -14,8 +15,8 @@ const contractAddresses = [ ]; const tokens = [ - "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "0xdac17f958d2ee523a2206206994597c13d831ec7", + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.USDT, "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", ]; @@ -27,8 +28,8 @@ const contractAddresses_aurora = [ ]; const tokens_aurora = [ - "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", - "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + ADDRESSES.aurora.AURORA, + ADDRESSES.aurora.NEAR, ]; async function ethTvl(timestamp, block) { diff --git a/projects/cream/index.js b/projects/cream/index.js index 34e09461ec..8b8baf84c4 100644 --- a/projects/cream/index.js +++ b/projects/cream/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const utils = require("../helper/utils"); const { unwrapUniswapLPs, nullAddress } = require("../helper/unwrapLPs"); @@ -10,13 +11,13 @@ const abiCereth2 = require("./creth2.json"); const BigNumber = require("bignumber.js"); // -const wETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const wETH = ADDRESSES.ethereum.WETH; const CRETH2 = "0xcBc1065255cBc3aB41a6868c22d1f1C573AB89fd"; const crvIB = "0x27b7b1ad7288079A66d12350c828D3C00A6F07d7"; const replacements = { "0xe1237aA7f535b0CC33Fd973D66cBf830354D16c7": wETH, // yWETH -> WETH - //'0x27b7b1ad7288079A66d12350c828D3C00A6F07d7': '0x6b175474e89094c44da98b954eedeac495271d0f', // yearn: yCRV-IB -> DAI + //'0x27b7b1ad7288079A66d12350c828D3C00A6F07d7': ADDRESSES.ethereum.DAI, // yearn: yCRV-IB -> DAI "0x986b4AFF588a109c09B50A03f42E4110E29D353F": wETH, // yearn: yCRV/sETH "0xdCD90C7f6324cfa40d7169ef80b12031770B4325": wETH, // yearn: yCRV/stETH "0x9cA85572E6A3EbF24dEDd195623F188735A5179f": @@ -46,6 +47,7 @@ async function ethereumTvl(timestamp, block) { block, calls: tokens_ethereum.map((token) => ({ target: token.token_address })), abi: abiCerc20["underlying"], + permitFailure: true, }) ).output; @@ -55,7 +57,7 @@ async function ethereumTvl(timestamp, block) { // It's ETH sdk.util.sumSingleBalance( balances, - "0x0000000000000000000000000000000000000000", + ADDRESSES.null, cashVal.output ); } else if ( @@ -66,37 +68,18 @@ async function ethereumTvl(timestamp, block) { token: underlyings[idx].output, balance: cashVal.output, }); - } else if (underlyings[idx].output === crvIB) { - return; // https://twitter.com/0xngmi/status/1398565590856515585 + } else if (underlyings[idx].output === crvIB || underlyings[idx].output === CRETH2) { + return; // Exclude CRETH2 //https://twitter.com/0xngmi/status/1398565590856515585 } else { const token = replacements[underlyings[idx].output] || underlyings[idx].output; sdk.util.sumSingleBalance(balances, token, cashVal.output); } }); - await unwrapUniswapLPs(balances, lpPositions, block); - - // --- Grab the accumulated on CRETH2 (ETH balance and update proper balances key) --- - const accumCRETH2 = ( - await sdk.api.abi.call({ - block, - target: CRETH2, - abi: abiCereth2["accumulated"], - }) - ).output; - - /* - In theory the ETH deposited in `0xcBc1065255cBc3aB41a6868c22d1f1C573AB89fd` mints CRETH2 which later, - but represents the same ETH portion, so we should deduct from the total value given by `accumulated()`` - the amount of ETH already deployed in the ethereum market place, otherwise it will account a certain % - twice. Only certain portion can be considered "idle" in the eth deposit contract to account again as extra - eth tvl - */ - const iddleInETHDepositContract = +accumCRETH2 - +(balances[CRETH2] ?? 0) - - sdk.util.sumSingleBalance(balances, nullAddress, +iddleInETHDepositContract) + await unwrapUniswapLPs(balances, lpPositions, block); + return balances; } @@ -123,6 +106,7 @@ async function lending(block, chain, borrowed) { block, calls: tokens_bsc.map((token) => ({ target: token.token_address })), abi: abiCerc20["underlying"], + permitFailure: true, chain, }) ).output; @@ -138,7 +122,7 @@ async function lending(block, chain, borrowed) { } else if (tokens_bsc[idx].symbol === "crBNB") { sdk.util.sumSingleBalance( balances, - "bsc:0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + "bsc:" + ADDRESSES.bsc.WBNB, cashVal.output ); // BNB } else { @@ -161,7 +145,7 @@ const bscTvl = async (timestamp, ethBlock, chainBlocks) => { sdk.util.sumSingleBalance( balances, - "bsc:0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", // -- Apparently it auto-merges balances (check on output) --- + "bsc:" + ADDRESSES.bsc.WBNB, // -- Apparently it auto-merges balances (check on output) --- BigNumber(bsc_staking_service.data.votingPower) .multipliedBy(10 ** 18) .toFixed(0) @@ -187,7 +171,7 @@ module.exports = { bsc: { tvl: bscTvl, borrowed: bscBorrowed - //getCompoundV2Tvl("0x589de0f0ccf905477646599bb3e5c622c84cc0ba", "bsc", addr=>`bsc:${addr}`, "0x1Ffe17B99b439bE0aFC831239dDECda2A790fF3A", "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", true), + //getCompoundV2Tvl("0x589de0f0ccf905477646599bb3e5c622c84cc0ba", "bsc", addr=>`bsc:${addr}`, "0x1Ffe17B99b439bE0aFC831239dDECda2A790fF3A", ADDRESSES.bsc.WBNB, true), }, // ethereum:compoundExports("0x3d5BC3c8d13dcB8bF317092d84783c2697AE9258", "ethereum", "0xd06527d5e56a3495252a528c4987003b712860ee", nullAddress), polygon: compoundExports("0x20ca53e2395fa571798623f1cfbd11fe2c114c24", "polygon"), diff --git a/projects/creamswap/index.js b/projects/creamswap/index.js index b65dfda3ac..dcbbe23f00 100644 --- a/projects/creamswap/index.js +++ b/projects/creamswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -12,8 +13,8 @@ const { getLogs } = require('../helper/cache/getLogs') Settings ==================================================*/ -const wETH = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'; -const usdt = '0xdAC17F958D2ee523a2206206994597C13D831ec7'; +const wETH = ADDRESSES.ethereum.WETH; +const usdt = ADDRESSES.ethereum.USDT; const yyCrv = '0x5dbcF33D8c2E976c6b560249878e6F1491Bca25c'; const yETH = '0xe1237aA7f535b0CC33Fd973D66cBf830354D16c7'; const crYFI = '0xCbaE0A83f4f9926997c8339545fb8eE32eDc6b76'; @@ -32,7 +33,7 @@ function isCrToken(address) { async function tvl(timestamp, block, _, { api }) { let balances = { - '0x0000000000000000000000000000000000000000': '0', // ETH + [ADDRESSES.null]: '0', // ETH }; let poolLogs = (await Promise.all([ @@ -120,7 +121,8 @@ async function tvl(timestamp, block, _, { api }) { sdk.api.abi.multiCall({ block, calls: underlyingBalanceCalls, - abi: abi['balanceOfUnderlying'] + abi: abi['balanceOfUnderlying'], + permitFailure: true, }), sdk.api.abi.multiCall({ block, diff --git a/projects/creditum/index.js b/projects/creditum/index.js index 501c0fb0cf..8622d2cad5 100644 --- a/projects/creditum/index.js +++ b/projects/creditum/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakingPricedLP } = require("../helper/staking"); const { sumTokensSharedOwners } = require("../helper/unwrapLPs"); const { pool2 } = require("../helper/pool2"); @@ -9,11 +10,11 @@ async function tvl(time, ethBlock, chainBlocks){ const chain = 'fantom' const block = chainBlocks[chain] const balances = {} - const transform = addr=> addr==="0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e"?"0x6b175474e89094c44da98b954eedeac495271d0f":`${chain}:${addr}` + const transform = addr=> addr===ADDRESSES.fantom.DAI?[ADDRESSES.ethereum.DAI]:`${chain}:${addr}` await sumTokensSharedOwners(balances, [ - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", - "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", - "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.WFTM, + ADDRESSES.fantom.DAI, "0x321162Cd933E2Be498Cd2267a90534A804051b11", "0x74b23882a30290451A17c44f4F05243b6b58C76d" ], [lending], block, chain, transform) diff --git a/projects/credix/index.js b/projects/credix/index.js index 54c1290b4e..2353c6894e 100644 --- a/projects/credix/index.js +++ b/projects/credix/index.js @@ -1,14 +1,17 @@ +const ADDRESSES = require("../helper/coreAssets.json"); const BigNumber = require("bignumber.js"); const { PublicKey } = require("@solana/web3.js"); -const { Program, utils } = require("@project-serum/anchor"); -const { getProvider, sumTokens2 } = require("../helper/solana"); +const { Program, utils, BN } = require("@project-serum/anchor"); +const { getProvider, sumTokens2, sumTokens } = require("../helper/solana"); const MAX_NUMBER_OF_ACCOUNT_INFOS = 99; -const MARKET_SEED = "credix-marketplace"; +const MARKET_SEED_FINTECH = "credix-marketplace"; +const MARKET_SEED_RECEIVABLES = "receivables-factoring"; const IDL = require("./credix.json"); -const USDC = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' +const USDC = ADDRESSES.solana.USDC; const programId = new PublicKey("CRDx2YkdtYtGZXGHZ59wNv1EwKHQndnRc1gT4p8i2vPX"); -const encodeSeedString = (seedString) => Buffer.from(utils.bytes.utf8.encode(seedString)); +const encodeSeedString = (seedString) => + Buffer.from(utils.bytes.utf8.encode(seedString)); const constructProgram = (provider) => { return new Program(IDL, programId, provider); @@ -29,8 +32,20 @@ const findSigningAuthorityPDA = async (globalMarketSeed) => { return findPDA(seeds); }; -async function generateRepaymentSchedulePDA(deal) { - const marketAdress = await findGlobalMarketStatePDA(MARKET_SEED); +const findDealPda = (marketPk, borrowerPk, dealNumber) => { + const dealSeed = encodeSeedString("deal-info"); + const dealNumberSeed = new BN(dealNumber).toArrayLike(Buffer, "le", 2); + const seeds = [ + marketPk.toBuffer(), + borrowerPk.toBuffer(), + dealNumberSeed, + dealSeed, + ]; + return findPDA(seeds); +}; + +async function generateRepaymentSchedulePDA(deal, globalMarketSeed) { + const marketAdress = await findGlobalMarketStatePDA(globalMarketSeed); const seed = [ marketAdress[0].toBuffer(), deal.publicKey.toBuffer(), @@ -123,8 +138,35 @@ function chunk(inputArray, perChunk) { return result; } -async function fetchRepaymentScheduleForDeals(program, provider, deals) { - const pdaPromises = deals.map((d) => generateRepaymentSchedulePDA(d)); +async function asyncFilter(arr, filter) { + const results = await Promise.all(arr.map(filter)); + return arr.filter((_, i) => results[i]); +} + +async function filterDealsForMarket(deals, globalMarketSeed) { + const [globalMarketStatePk] = await findGlobalMarketStatePDA( + globalMarketSeed + ); + const marketDeals = await asyncFilter(deals, async (deal) => { + const [dealPDA] = await findDealPda( + globalMarketStatePk, + deal.account.borrower, + deal.account.dealNumber + ); + return dealPDA.equals(deal.publicKey); + }); + return marketDeals; +} + +async function fetchRepaymentScheduleForDeals( + program, + provider, + deals, + globalMarketSeed +) { + const pdaPromises = deals.map((d) => + generateRepaymentSchedulePDA(d, globalMarketSeed) + ); const pdas = await Promise.all(pdaPromises); const addresses = pdas.map((pda) => pda[0]); const addressesChunks = chunk(addresses, MAX_NUMBER_OF_ACCOUNT_INFOS - 1); @@ -146,25 +188,42 @@ async function fetchRepaymentScheduleForDeals(program, provider, deals) { } async function tvl() { - const [signingAuthorityKey] = await findSigningAuthorityPDA(MARKET_SEED); - return sumTokens2({ tokensAndOwners: [[USDC, signingAuthorityKey]] }); + // Fintech pool + const [signingAuthorityKeyFintech] = await findSigningAuthorityPDA( + MARKET_SEED_FINTECH + ); + + // Receivables factoring pool + const [signingAuthorityKeyReceivables] = await findSigningAuthorityPDA( + MARKET_SEED_RECEIVABLES + ); + const tokens = await sumTokens2({ + tokensAndOwners: [ + [USDC, signingAuthorityKeyFintech], + [USDC, signingAuthorityKeyReceivables], + ], + }); + return tokens; } -async function borrowed() { - const provider = getProvider(); - const program = constructProgram(provider); - const allDeals = await program.account.deal.all(); +async function fetchOutstandingCreditPool( + provider, + program, + deals, + globalMarketSeed +) { + const marketDeals = await filterDealsForMarket(deals, globalMarketSeed); const allRepaymentSchedules = await fetchRepaymentScheduleForDeals( program, provider, - allDeals + marketDeals, + globalMarketSeed ); - const inProgressSchedules = allDeals.map((deal, index) => { + const inProgressSchedules = marketDeals.map((deal, index) => { const schedule = allRepaymentSchedules[index]; const dealIsInProgress = isInProgress(deal, schedule); return dealIsInProgress ? schedule : null; }); - const totalOutstandingCredit = inProgressSchedules .filter((schedule) => schedule !== null) .reduce((principalSum, schedule) => { @@ -173,8 +232,34 @@ async function borrowed() { .minus(principalRepaid(schedule)); }, new BigNumber(0)); + return totalOutstandingCredit; +} + +async function borrowed() { + const provider = getProvider(); + const program = constructProgram(provider); + const allDeals = await program.account.deal.all(); + + // FinTech pool + const totalOutstandingCreditFintech = await fetchOutstandingCreditPool( + provider, + program, + allDeals, + MARKET_SEED_FINTECH + ); + + // Receivables factoring pool + const totalOutstandingCreditReceivables = await fetchOutstandingCreditPool( + provider, + program, + allDeals, + MARKET_SEED_RECEIVABLES + ); + return { - ['solana:' + USDC]: totalOutstandingCredit.toString() + ["solana:" + USDC]: totalOutstandingCreditFintech + .plus(totalOutstandingCreditReceivables) + .toString(), }; } diff --git a/projects/crosschainbridge/index.js b/projects/crosschainbridge/index.js index 4ae85c47eb..e6049c9215 100644 --- a/projects/crosschainbridge/index.js +++ b/projects/crosschainbridge/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); @@ -32,13 +33,13 @@ const tokens = { TXL: "0x8eEF5a82E6Aa222a60F009ac18c24EE12dBf4b41", BRIDGE: "0x92868a5255c628da08f550a858a802f5351c5223", // Stablecoins - BUSD: "0x4Fabb145d64652a948d72533023f6E7A623C7C53", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", - USDC: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - USDT: "0xdac17f958d2ee523a2206206994597c13d831ec7", + BUSD: ADDRESSES.ethereum.BUSD, + DAI: ADDRESSES.ethereum.DAI, + USDC: ADDRESSES.ethereum.USDC, + USDT: ADDRESSES.ethereum.USDT, // Network Tokens - WETH: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - WMATIC: "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", + WETH: ADDRESSES.ethereum.WETH, + WMATIC: ADDRESSES.ethereum.MATIC, // Further tokens BULK: "0xa143ac515dca260a46c742c7251ef3b268639593", DAX: "0x77e9618179820961ee99a988983bc9ab41ff3112", @@ -57,12 +58,12 @@ const tokens = { TXL: "0x1ffd0b47127fdd4097e54521c9e2c7f0d66aafc5", BRIDGE: "0x92868a5255c628da08f550a858a802f5351c5223", // Stablecoins - BUSD: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + BUSD: ADDRESSES.bsc.BUSD, DAI: "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", - USDC: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - USDT: "0x55d398326f99059fF775485246999027B3197955", + USDC: ADDRESSES.bsc.USDC, + USDT: ADDRESSES.bsc.USDT, // Network Tokens - WETH: "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + WETH: ADDRESSES.bsc.ETH, WMATIC: "0xcc42724c6683b7e57334c4e856f4c9965ed682bd", // Further tokens ARNX: "0x0c37bcf456bc661c14d596683325623076d7e283", @@ -90,12 +91,12 @@ const tokens = { BRIDGE: "0x92868a5255c628da08f550a858a802f5351c5223", // Stablecoins BUSD: "0xdab529f40e671a1d4bf91361c21bf9f0c9712ab7", - DAI: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - USDC: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - USDT: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + DAI: ADDRESSES.polygon.DAI, + USDC: ADDRESSES.polygon.USDC, + USDT: ADDRESSES.polygon.USDT, // Network Tokens - WETH: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - WMATIC: "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + WETH: ADDRESSES.polygon.WETH_1, + WMATIC: ADDRESSES.polygon.WMATIC_2, // Further tokens DAF: "0x2f0e07e881363bb1cdff32971b2f8c87ef8ff432", GFX: "0x65ad6a2288b2dd23e466226397c8f5d1794e58fc", @@ -106,17 +107,17 @@ const tokens = { // Project tokens BRIDGE: "0xC0367f9b1f84Ca8DE127226AC2A994EA4bf1e41b", // Stablecoins - USDC: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", - USDT: "0xc7198437980c041c805a1edcba50c1ce5db95118", + USDC: ADDRESSES.avax.USDC_e, + USDT: ADDRESSES.avax.USDT_e, // Network Tokens - WETH: "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", + WETH: ADDRESSES.avax.WETH_e, }, fantom: { // Project tokens BRIDGE: "0x92868A5255C628dA08F550a858A802f5351C5223", // Stablecoins - USDC: "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", - USDT: "0x049d68029688eabf473097a2fc38ef61633a3c7a", + USDC: ADDRESSES.fantom.USDC, + USDT: ADDRESSES.fantom.fUSDT, // Network Tokens WETH: "0x74b23882a30290451A17c44f4F05243b6b58C76d", } diff --git a/projects/croswap/index.js b/projects/croswap/index.js new file mode 100644 index 0000000000..983df3793d --- /dev/null +++ b/projects/croswap/index.js @@ -0,0 +1,47 @@ +const { staking } = require("../helper/staking"); +const { getLogs, getAddress } = require('../helper/cache/getLogs'); +const { transformDexBalances } = require("../helper/portedTokens"); +const { cachedGraphQuery } = require('../helper/cache') + +module.exports = { + misrepresentedTokens: true, +} + +async function tvl(_, _b, _cb, { api, }) { + const { factory, fromBlock } = config[api.chain] + let pools + + if (api.chain === 'cronos') { + const data = await cachedGraphQuery('croswap/cronos', 'https://graph.croswap.com/subgraphs/name/croswap/croswap-v2', `{ pairInfos { pair { id}}}`) + pools = data.pairInfos.map(i => i.pair.id) + } else { + + const logs = await getLogs({ + api, + target: factory, + topics: ['0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'], + fromBlock, + }) + pools = logs.map(i => getAddress(i.data.slice(0, 64 + 2))) + } + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) + const reserves = await api.multiCall({ abi: 'function getReserves() view returns (uint112, uint112, uint32)', calls: pools }) + const data = reserves.map(([token0Bal, token1Bal], i) => ({ token0Bal, token1Bal, token1: token1s[i], token0: token0s[i] })) + return transformDexBalances({ ...api, data, }) +} + +const config = { + arbitrum: { factory: '0x8f6ecb066f2bfe31bf87e022c76f63bc4642d8bc', fromBlock: 82954506, stakingContracts: ['0x8e9DA87f58A8480dD6b8878Aa37144a5Fb2F122D'], cros: '0x780469101caBD2bFe4B596D98d4777C2a142e012' }, + cronos: { factory: '0x4ae2bd26e60741890edb9e5c7e984bb396ec26e3', fromBlock: 4807004, stakingContracts: ['0xedfe968033fd2b9a98371d052cd7f32a711e533a'], cros: '0x1Ba477CA252C0FF21c488d41759795E7E7812aB4' }, +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const { stakingContracts, cros, } = config[chain] + module.exports[chain] = { + tvl, staking: staking(stakingContracts, cros) + } +}) \ No newline at end of file diff --git a/projects/crowdswap/index.js b/projects/crowdswap/index.js new file mode 100644 index 0000000000..101bca241e --- /dev/null +++ b/projects/crowdswap/index.js @@ -0,0 +1,38 @@ +const { sumTokensExport, sumTokens2, } = require("../helper/unwrapLPs"); +const { getLogs, getAddress } = require('../helper/cache/getLogs'); + +const polygonStakingContracts = '0x3C868fe859eF46a133e032f22B443e6Efd617449'; +const bscStakingContracts = '0x21224834612ecaC194c4b877b49e7794f193d2A2'; +const CROWD = "0x483dd3425278C1f79F377f1034d9d2CaE55648B6"; +const BscCROWD = "0xA5d4B64a639d93b660cdA04D331374dA1108F8f5"; + +async function tvl(_, _b, _cb, { api, }) { + const { factory, fromBlock } = config[api.chain] + + const logs = await getLogs({ + api, + target: factory, + topics: ['0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'], + fromBlock, + }) + const pools = logs.map(i => getAddress(i.data.slice(0, 64 + 2))) + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools }) + const tokensAndOwners = pools.map((pool, i) => [[token0s[i], pool], [token1s[i], pool]]).flat() + return sumTokens2({ api, tokensAndOwners }) +} + +const config = { + ethereum: { factory: '0xBeA843A2DC516c6F38F159a6a55e80Ec40Cf2286', fromBlock: 16882649, }, + arbitrum: { factory: '0x9ff74eea1e7f0f8ee437b70d68f7cdc1a1030642', fromBlock: 91681087, }, + polygon: { factory: '0xab7dac1daf712693539d770a967a9bc7ba47470c', fromBlock: 37984740, }, + bsc: { factory: '0x08f65111cb9b517b10e5c1e63cb2224467e7988a', fromBlock: 25927093, }, + era: { factory: '0x049D3809043d137591687170Fc323DBcDFe83283', fromBlock: 2714942, }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) + +module.exports.polygon.staking = sumTokensExport({ owner: polygonStakingContracts, tokens: [CROWD] }) +module.exports.bsc.staking = sumTokensExport({ owner: bscStakingContracts, tokens: [BscCROWD] }) diff --git a/projects/crown-finance/index.js b/projects/crown-finance/index.js index b4000e1f1b..def99f5ec1 100644 --- a/projects/crown-finance/index.js +++ b/projects/crown-finance/index.js @@ -1,6 +1,9 @@ module.exports = { + hallmarks: [ + [1655582945, "Rug Pull"] + ], deadFrom: 1655582945, // we suspect that the project has rugged cronos: { tvl: () => ({}), diff --git a/projects/crust-finance/index.js b/projects/crust-finance/index.js new file mode 100644 index 0000000000..0436be8a00 --- /dev/null +++ b/projects/crust-finance/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + methodology: `Uses factory(0x62DbCa39067f99C9D788a253cB325c6BA50e51cE) address and whitelisted tokens address to find and price liquidity pool pairs`, + mantle: { + tvl: getUniTVL({ + factory: "0x62DbCa39067f99C9D788a253cB325c6BA50e51cE", + hasStablePools: true, + useDefaultCoreAssets: true, + }), + }, +}; diff --git a/projects/crv-usd/index.js b/projects/crv-usd/index.js new file mode 100644 index 0000000000..a0deab1cbd --- /dev/null +++ b/projects/crv-usd/index.js @@ -0,0 +1,39 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + ethereum: { + pools: [ + { factory: '0x818709b85052ddc521fae9c78737b27316337e3a', fromBlock: 17182152 }, + { factory: '0x30a2F3c3AA6D12C0a36Bed210dCF1B32EF6228Cc', fromBlock: 17187330 }, + { factory: '0xfa3e2db8eb6c646e0d24046c1a185934d41a8f7a', fromBlock: 17187330 }, + { factory: '0xC9332fdCB1C491Dcc683bAe86Fe3cb70360738BC', fromBlock: 17187330 }, + ] + }, +} + +module.exports = { +}; + + +Object.keys(config).forEach(chain => { + const { pools} = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await Promise.all(pools.map(getLogs_)) + + return sumTokens2({ api, tokensAndOwners: logs.flat().map(i => [i.collateral, i.amm]) }) + + async function getLogs_({ factory, fromBlock }) { + return getLogs({ + api, + target: factory, + topics: ['0xebbe0dfde9dde641808b7a803882653420f3a5b12bb405d238faed959e1e3aa3'], + eventAbi: 'event AddMarket (address indexed collateral, address controller, address amm, address monetary_policy, uint256 ix)', + onlyArgs: true, + fromBlock, + }) + } + } + } +}) diff --git a/projects/cryptex-finance/index.js b/projects/cryptex-finance/index.js index 437b72c784..6b64a2ac24 100755 --- a/projects/cryptex-finance/index.js +++ b/projects/cryptex-finance/index.js @@ -1,6 +1,8 @@ -const sdk = require("@defillama/sdk"); -const { sumTokensSharedOwners} = require("../helper/unwrapLPs"); -const { staking } = require("../helper/staking"); +const { getLogs } = require('../helper/cache/getLogs') +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2, sumTokensExport, } = require("../helper/unwrapLPs"); +const { staking } = require('../helper/staking') +const { pool2 } = require('../helper/pool2') const ctxToken = "0x321c2fe4446c7c963dc41dd58879af648838f98d"; const factory = "0x70236b36f86AB4bd557Fe9934E1246537B472918"; @@ -15,20 +17,20 @@ const ethPool2s = [ "0x2A93167Ed63A31F35CA4788e2EB9fBd9fA6089D0", // CTX-WETH ] const ethVaults = [ - "0x717170b66654292dfbd89c39f5ae6753d2ac1381", // WETH VAULT - "0x443366a7a5821619D8d57405511E4fadD9964771", // DAI VAULT - // Hardmode Vaults - "0xc2Ba6B8E0EE3cf48B045D966F1dCda767df74833", // WETH VAULT - "0xA5b3Bb6e1f206624B3B8CE0c6A0f7614fd35Fa03", // DAI VAULT - "0xa8CcA36A624215a39D5af6854ac24868559424d3", // USDC VAULT - "0x2364536F4891Ed560A6728f4B36871de8176eE5c", // WBTC VAULT + "0x717170b66654292dfbd89c39f5ae6753d2ac1381", // WETH VAULT + "0x443366a7a5821619D8d57405511E4fadD9964771", // DAI VAULT + // Hardmode Vaults + "0xc2Ba6B8E0EE3cf48B045D966F1dCda767df74833", // WETH VAULT + "0xA5b3Bb6e1f206624B3B8CE0c6A0f7614fd35Fa03", // DAI VAULT + "0xa8CcA36A624215a39D5af6854ac24868559424d3", // USDC VAULT + "0x2364536F4891Ed560A6728f4B36871de8176eE5c", // WBTC VAULT ] const ethCollaterals = [ - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH - "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", // WBTC + ADDRESSES.ethereum.WETH, // WETH + ADDRESSES.ethereum.DAI, // DAI + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.WBTC, // WBTC ] const optVaults = [ @@ -40,52 +42,35 @@ const optVaults = [ ] const optCollaterals = [ - "0x4200000000000000000000000000000000000006", // WETH - "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", // DAI + ADDRESSES.tombchain.FTM, // WETH + ADDRESSES.optimism.DAI, // DAI "0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6", // LINK "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4", // SNX "0x6fd9d7AD17242c41f7131d257212c54A0e816691" // UNI ] -async function ethTvl(timestamp, block) { - let balances = {}; - await sumTokensSharedOwners(balances, ethCollaterals, ethVaults, block); - return balances; -} - -async function optTvl(timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensSharedOwners(balances, optCollaterals, optVaults, chainBlocks.optimism, "optimism"); - return balances; -} - -const treasuryAddress = "0xa54074b2cc0e96a43048d4a68472F7F046aC0DA8"; -const treasuryContents = [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" -] -const optTreasury = "0x271901c3268D0959bbc9543DE4f073D3708C88F7"; - -async function treasury(timestamp, block) { - let balances = {}; - const ethBal = (await sdk.api.eth.getBalance({ - target: treasuryAddress, - block, - })).output; - sdk.util.sumSingleBalance(balances, "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", ethBal); - await sumTokensSharedOwners(balances, treasuryContents, [treasuryAddress], block); - return balances; -} - - module.exports = { methodology: "TVL includes collateral in vaults", ethereum: { - tvl: ethTvl, - pool2: staking(ethStakingContracts, ethPool2s), - staking: staking(factory, ctxToken), - treasury + tvl: sumTokensExport({ tokens: ethCollaterals, owners: ethVaults,}), + pool2: pool2(ethStakingContracts, ethPool2s), + staking: staking_, }, optimism: { - tvl: optTvl + tvl: sumTokensExport({ tokens: optCollaterals, owners: optVaults,}) } }; + +async function staking_(_, _b, _cb, { api, }) { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x0976a62688d14faa8e35e63a7ada50f147ba1a0357f99182a596f9afea2502f4'], + eventAbi: 'event DelegatorCreated (address indexed delegator, address indexed delegatee)', + onlyArgs: true, + fromBlock: 13360296, + }) + const owners = [factory,] + logs.forEach(log => owners.push(log.delegator)) + return sumTokens2({ api, owners, tokens: [ctxToken] }) +} \ No newline at end of file diff --git a/projects/cryptex-v2/index.js b/projects/cryptex-v2/index.js new file mode 100644 index 0000000000..518f779f4c --- /dev/null +++ b/projects/cryptex-v2/index.js @@ -0,0 +1,25 @@ +const config = { + arbitrum: { + collateralContract: '0xaf8ced28fce00abd30463d55da81156aa5aeeec2', + products: [ + '0xea281a4c70ee2ef5ce3ed70436c81c0863a3a75a', // TCAP LP + '0x4243b34374cfb0a12f184b92f52035d03d4f7056', // TCAP Short + '0x1cd33f4e6edeee8263aa07924c2760cf2ec8aad0', // TCAP Long + ] + } +} + +module.exports = { + doublecounted: true, +}; + +Object.keys(config).forEach(chain => { + const { collateralContract, products, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const token = await api.call({ abi: 'address:token', target: collateralContract }) + const bals = await api.multiCall({ abi: 'function collateral(address) view returns (uint256)', calls: products, target: collateralContract }) + bals.forEach(i => api.add(token, i)) + } + } +}) diff --git a/projects/cryptoyieldfocus/index.js b/projects/cryptoyieldfocus/index.js index 3c35b110be..d41be93634 100644 --- a/projects/cryptoyieldfocus/index.js +++ b/projects/cryptoyieldfocus/index.js @@ -23,6 +23,9 @@ const avaxTvl = async (timestamp, ethBlock, chainBlocks) => { }; module.exports = { + hallmarks: [ + [1631318400, "Rug Pull"] + ], avax:{ tvl: avaxTvl, }, diff --git a/projects/curve/historical/abis.js b/projects/curve/historical/abis.js new file mode 100644 index 0000000000..e77735f7b8 --- /dev/null +++ b/projects/curve/historical/abis.js @@ -0,0 +1,19 @@ + +let abis = {}; + +abis.compoundv1 = [{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[2]","name":"_coins"},{"type":"address[2]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1084167},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":4239939},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":6479997},{"name":"get_dy","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2543681},{"name":"get_dx","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":2543687},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2543506},{"name":"get_dx_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":2543512},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":5184573},{"name":"exchange_underlying","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":5200817},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":153898},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":6479708},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":146105},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":133512},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21835},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74512},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60568},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21925},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":12831},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37878},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22015},{"name":"coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"underlying_coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2220},{"name":"balances","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2250},{"name":"A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"future_A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351}]; + +abis.abiNew = [{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"token_amount","indexed":false},{"type":"uint256","name":"coin_amount","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[2]","name":"token_amounts","indexed":false},{"type":"uint256[2]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewFee","inputs":[{"type":"uint256","name":"deadline","indexed":true},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewFee","inputs":[{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"type":"uint256","name":"old_A","indexed":false},{"type":"uint256","name":"new_A","indexed":false},{"type":"uint256","name":"initial_time","indexed":false},{"type":"uint256","name":"future_time","indexed":false}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"t","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"_owner"},{"type":"address[2]","name":"_coins"},{"type":"address","name":"_pool_token"},{"type":"address","name":"_base_pool"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"},{"type":"uint256","name":"_admin_fee"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":5199},{"name":"A_precise","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":5161},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":992460},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"bool","name":"is_deposit"}],"stateMutability":"view","type":"function","gas":3938567},{"name":"add_liquidity","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"stateMutability":"nonpayable","type":"function","gas":6136485},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"stateMutability":"view","type":"function","gas":2390018},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"stateMutability":"view","type":"function","gas":2393224},{"name":"exchange","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"stateMutability":"nonpayable","type":"function","gas":2617039},{"name":"exchange_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"stateMutability":"nonpayable","type":"function","gas":2631854},{"name":"remove_liquidity","outputs":[{"type":"uint256[2]","name":""}],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[2]","name":"min_amounts"}],"stateMutability":"nonpayable","type":"function","gas":163158},{"name":"remove_liquidity_imbalance","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[2]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"stateMutability":"nonpayable","type":"function","gas":6136334},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"stateMutability":"view","type":"function","gas":4389},{"name":"remove_liquidity_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"_min_amount"}],"stateMutability":"nonpayable","type":"function","gas":3826262},{"name":"ramp_A","outputs":[],"inputs":[{"type":"uint256","name":"_future_A"},{"type":"uint256","name":"_future_time"}],"stateMutability":"nonpayable","type":"function","gas":151894},{"name":"stop_ramp_A","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":148655},{"name":"commit_new_fee","outputs":[],"inputs":[{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"stateMutability":"nonpayable","type":"function","gas":110491},{"name":"apply_new_fee","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":97272},{"name":"revert_new_parameters","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":21925},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"stateMutability":"nonpayable","type":"function","gas":74663},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":60740},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":22015},{"name":"admin_balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"i"}],"stateMutability":"view","type":"function","gas":3511},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":9232},{"name":"donate_admin_fees","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":74995},{"name":"kill_me","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38028},{"name":"unkill_me","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":22165},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2250},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2280},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2201},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2231},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2261},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2291},{"name":"base_pool","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2321},{"name":"base_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2351},{"name":"base_cache_updated","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2381},{"name":"base_coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2520},{"name":"initial_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2441},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2471},{"name":"initial_A_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2501},{"name":"future_A_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2531},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2561},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2591},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2621},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2651},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2681}] + +abis.abisBTC = [{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[3]","name":"token_amounts","indexed":false},{"type":"uint256[3]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[3]","name":"token_amounts","indexed":false},{"type":"uint256[3]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"token_amount","indexed":false},{"type":"uint256","name":"coin_amount","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[3]","name":"token_amounts","indexed":false},{"type":"uint256[3]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewFee","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewFee","inputs":[{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampA","inputs":[{"type":"uint256","name":"old_A","indexed":false},{"type":"uint256","name":"new_A","indexed":false},{"type":"uint256","name":"initial_time","indexed":false,"unit":"sec"},{"type":"uint256","name":"future_time","indexed":false,"unit":"sec"}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"t","indexed":false,"unit":"sec"}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[3]","name":"_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":5227},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1150488},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":4526955},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":6972762},{"name":"get_dy","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2687932},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":2687745},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":5499133},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[3]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":196975},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[3]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":6972281},{"name":"calc_withdraw_one_coin","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"}],"constant":true,"payable":false,"type":"function","gas":15405},{"name":"remove_liquidity_one_coin","outputs":[],"inputs":[{"type":"uint256","name":"_token_amount"},{"type":"int128","name":"i"},{"type":"uint256","name":"min_amount"}],"constant":false,"payable":false,"type":"function","gas":4044074},{"name":"ramp_A","outputs":[],"inputs":[{"type":"uint256","name":"_future_A"},{"type":"uint256","unit":"sec","name":"_future_time"}],"constant":false,"payable":false,"type":"function","gas":151937},{"name":"stop_ramp_A","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":148697},{"name":"commit_new_fee","outputs":[],"inputs":[{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":110521},{"name":"apply_new_fee","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":97220},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21955},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74632},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60688},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22045},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":17565},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37998},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22135},{"name":"coins","outputs":[{"type":"address","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2310},{"name":"balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2340},{"name":"fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"initial_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_A","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"initial_A_time","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321},{"name":"future_A_time","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2351},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2381},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2411},{"name":"future_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2441},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2471},{"name":"future_owner","outputs":[{"type":"address","name":""}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2501}]; + +abis.cTokens = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserveFactorMantissa","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateStored","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"borrower","type":"address"},{"name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCash","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newComptroller","type":"address"}],"name":"_setComptroller","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalBorrows","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"comptroller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialExchangeRateMantissa","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"accrualBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"underlying","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalReserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"accrueInterest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"borrowIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"supplyRatePerBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"liquidator","type":"address"},{"name":"borrower","type":"address"},{"name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exchangeRateCurrent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"interestRateModel","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"borrower","type":"address"},{"name":"repayAmount","type":"uint256"},{"name":"cTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowRatePerBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isCToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"underlying_","type":"address"},{"name":"comptroller_","type":"address"},{"name":"interestRateModel_","type":"address"},{"name":"initialExchangeRateMantissa_","type":"uint256"},{"name":"name_","type":"string"},{"name":"symbol_","type":"string"},{"name":"decimals_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"interestAccumulated","type":"uint256"},{"indexed":false,"name":"borrowIndex","type":"uint256"},{"indexed":false,"name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minter","type":"address"},{"indexed":false,"name":"mintAmount","type":"uint256"},{"indexed":false,"name":"mintTokens","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"redeemer","type":"address"},{"indexed":false,"name":"redeemAmount","type":"uint256"},{"indexed":false,"name":"redeemTokens","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"borrower","type":"address"},{"indexed":false,"name":"borrowAmount","type":"uint256"},{"indexed":false,"name":"accountBorrows","type":"uint256"},{"indexed":false,"name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"payer","type":"address"},{"indexed":false,"name":"borrower","type":"address"},{"indexed":false,"name":"repayAmount","type":"uint256"},{"indexed":false,"name":"accountBorrows","type":"uint256"},{"indexed":false,"name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"liquidator","type":"address"},{"indexed":false,"name":"borrower","type":"address"},{"indexed":false,"name":"repayAmount","type":"uint256"},{"indexed":false,"name":"cTokenCollateral","type":"address"},{"indexed":false,"name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldPendingAdmin","type":"address"},{"indexed":false,"name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldAdmin","type":"address"},{"indexed":false,"name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldComptroller","type":"address"},{"indexed":false,"name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldInterestRateModel","type":"address"},{"indexed":false,"name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"admin","type":"address"},{"indexed":false,"name":"reduceAmount","type":"uint256"},{"indexed":false,"name":"newTotalReserves","type":"uint256"}],"name":"ReservesReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"error","type":"uint256"},{"indexed":false,"name":"info","type":"uint256"},{"indexed":false,"name":"detail","type":"uint256"}],"name":"Failure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Approval","type":"event"}]; + + +abis.yTokens = [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yTUSD.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yTUSD.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] + + + +module.exports = { + abis +} \ No newline at end of file diff --git a/projects/curve/historical/index.js b/projects/curve/historical/index.js new file mode 100644 index 0000000000..f08307340c --- /dev/null +++ b/projects/curve/historical/index.js @@ -0,0 +1,254 @@ +const ADDRESSES = require('../../helper/coreAssets.json') +const { Web3 } = require('web3'); +const BigNumber = require("bignumber.js"); +const axios = require("axios"); +const web3 = new Web3(`https://eth.llamarpc.com`); +const abis = require('./abis.js') +const { toUSDTBalances } = require('../../helper/balances') + + +let swaps = [ + { + 'name': 'tbtc', + 'address': '0xc25099792e9349c7dd09759744ea681c7de2cb66', + 'coins': [0], + 'type': 'btc', + 'abi': abis.abis.abiNew + }, + { + 'name': 'hbtc', + 'address': '0x4CA9b3063Ec5866A4B82E437059D2C43d1be596F', + 'coins': [0], + 'type': 'btc', + 'abi': abis.abis.abiNew + }, + { + 'name': 'sbtc', + 'address': '0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714', + 'coins': [0,1,2], + 'type': 'btc', + 'abi': abis.abis.abisBTC + }, + { + 'name': 'ren', + 'address': '0x93054188d876f558f4a66B2EF1d97d16eDf0895B', + 'coins': [0,1], + 'type': 'btc', + 'abi': abis.abis.abisBTC + }, + { + 'name': 'rsv', + 'address': '0xC18cC39da8b11dA8c3541C598eE022258F9744da', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'musd', + 'address': '0x8474DdbE98F5aA3179B3B3F5942D724aFcdec9f6', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'linkusd', + 'address': '0xE7a24EF0C5e95Ffb0f6684b813A78F2a3AD7D171', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'usdn', + 'address': '0x0f9cb53Ebe405d49A0bbdBD291A65Ff571bC83e1', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'usdk', + 'address': '0x3E01dD8a5E1fb3481F0F589056b428Fc308AF0Fb', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'gusd', + 'address': '0x4f062658EaAF2C1ccf8C8e36D6824CDf41167956', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'compoundv1', + 'address': '0xA2B47E3D5c44877cca798226B7B8118F9BFb7A56', + 'coins': [0,1], + 'type': 'compound', + 'abi': abis.abis.compoundv1 + }, + { + 'name': 'usdtPool', + 'address': '0x52EA46506B9CC5Ef470C5bf89f17Dc28bB35D85C', + 'coins': [0,1,2], + 'type': 'compound', + 'abi': abis.abis.compoundv1 + }, + { + 'name': 'YPool', + 'address': '0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51', + 'coins': [0,1,2,3], + 'type': 'yToken', + 'abi': abis.abis.compoundv1 + }, + { + 'name': 'PAX', + 'address': '0x06364f10B501e868329afBc005b3492902d6C763', + 'coins': [0,1,2,3], + 'type': 'yToken', + 'abi': abis.abis.compoundv1 + }, + { + 'name': 'BUSD', + 'address': '0x79a8C46DeA5aDa233ABaFFD40F3A0A2B1e5A4F27', + 'coins': [0,1,2,3], + 'type': 'yToken', + 'abi': abis.abis.compoundv1 + }, + { + 'name': 'sUSD', + 'address': '0xA5407eAE9Ba41422680e2e00537571bcC53efBfD', + 'coins': [0,1,2,3], + 'type': 1, + 'abi': abis.abis.abisBTC + }, + { + 'name': '3Pool', + 'address': '0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7', + 'coins': [0,1,2], + 'type': 1, + 'abi': abis.abis.abiNew + }, + { + 'name': 'DUSD', + 'address': '0x8038C01A0390a8c547446a0b2c18fc9aEFEcc10c', + 'coins': [0], + 'type': 1, + 'abi': abis.abis.abiNew + }, + + + +] + +let coinDecimals = [ + { + '0x8dAEBADE922dF735c38C80C7eBD708Af50815fAa': '18', + '0x0316EB71485b0Ab14103307bf65a021042c6d380': '18', + '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D': '8', + [ADDRESSES.ethereum.WBTC]: '8', + '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6': '18', + '0x196f4727526eA7FB1e17b2071B3d8eAA38486988': '18', + '0xe2f2a5C287993345a840Db3B0845fbC70f5935a5': '18', + '0x0E2EC54fC0B509F445631Bf4b91AB8168230C752': '18', //linkusd + '0x674C6Ad92Fd080e4004b2312b45f796a192D27a0': '18', //USDN + '0x1c48f86ae57291F7686349F12601910BD8D470bb': '18', //USDK + '0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd': '2', //GUSD + '0x39AA39c021dfbaE8faC545936693aC917d5E7563': '8', //cUSD + '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643': '8', //cDAI + [ADDRESSES.ethereum.USDT]: '6', //USDT + '0x73a052500105205d34Daf004eAb301916DA8190f': '18', //yTUSD + '0xd6aD7a6750A7593E092a9B218d66C0A814a3436e': '6', ///yUSDC + '0x16de59092dAE5CcF4A1E6439D611fd0653f0Bd01': '18', ///yDAI + '0x83f798e925BcD4017Eb265844FDDAbb448f1707D': '6', ///yUSDT + '0x8E870D67F660D95d5be530380D0eC0bd388289E1': '18', //PAX + '0x9777d7E2b60bB01759D0E2f8be2095df444cb07E': '6', ///ycUSDC + '0x99d1Fa417f94dcD62BfE781a1213c092a47041Bc': '18', ///ycDAI + '0x1bE5d71F2dA660BFdee8012dDc58D024448A0A59': '6', ///ycUSDT + '0x04bC0Ab673d88aE9dbC9DA2380cB6B79C4BCa9aE': '18', //Y2busd + '0x26EA744E5B887E5205727f55dFBE8685e3b21951': '6', ///y2USDC + '0xC2cB1040220768554cf699b0d863A3cd4324ce32': '18', ///y2DAI + '0xE6354ed5bC4b393a5Aad09f21c46E101e692d447': '6', ///y2USDT + [ADDRESSES.ethereum.sUSD]: '18', //sUSD + [ADDRESSES.ethereum.DAI]: '18', //DAI + [ADDRESSES.ethereum.USDC]: '6', //USDC + '0x5BC25f649fc4e26069dDF4cF4010F9f706c23831': '18', //dusd + [ADDRESSES.ethereum.TUSD]: '18' + } +] + +async function tvlFunc(timestamp, block) { + var price_feed = await axios.get(`https://coins.llama.fi/prices/historical/${timestamp}/${["bitcoin","cdai","compound-usd-coin"].map(c=>"coingecko:"+c).join(',')}`) + var tvl = 0; + var btcTVL = 0; + await Promise.all( + swaps.map(async item => { + var details = {}; + await Promise.all( + item.coins.map(async i => { + try{ + const poolAmount = await calc(item, i, price_feed, block); + if (item.type == 'btc') { + btcTVL += parseFloat(poolAmount); + } else { + tvl += parseFloat(poolAmount ) + } + } catch(e){ + console.log(item.name, i, "failed") + } + }) + ) + }) + ) + + tvl = (price_feed.data.coins['coingecko:bitcoin'].price * btcTVL) + tvl + return toUSDTBalances(tvl); +} + +async function getVirtualPrice(abi, contract, block) { + var dacontract = new web3.eth.Contract(abi, contract) + dacontract.defaultBlock = block; + var virtualPrice = await dacontract.methods.getPricePerFullShare().call(); + return virtualPrice; +} + + + + + +async function calc(item, i, price_feed, block) { + var dacontract = new web3.eth.Contract(item.abi, item.address) + dacontract.defaultBlock = block + var balances = await dacontract.methods.balances(i).call(); + var coins = await dacontract.methods.coins(i).call(); + + + var poolAmount = await new BigNumber(balances).div(10 ** coinDecimals[0][coins]).toFixed(2); + + let multiplier; + if (item.type == 'compound') { + multiplier = 1; + if (coins === '0x39AA39c021dfbaE8faC545936693aC917d5E7563') { + multiplier = price_feed.data.coins['coingecko:compound-usd-coin'].price; + } + if (coins === '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643') { + multiplier = price_feed.data.coins['coingecko:cdai'].price; + } + poolAmount = poolAmount * multiplier; + } + + if (item.type == 'yToken') { + multiplier = 1; + if (coins !== '0x8E870D67F660D95d5be530380D0eC0bd388289E1') { // PAX exception + multiplier = await getVirtualPrice(abis.abis.yTokens, coins, block) + multiplier = await new BigNumber(multiplier).div(10 ** 18).toFixed(4); + } + poolAmount = poolAmount * multiplier; + } + + return poolAmount; +} + + + +module.exports = { + ethereum:{tvlFunc} +} diff --git a/projects/curve/index.js b/projects/curve/index.js index 509d3570fa..665099ec94 100644 --- a/projects/curve/index.js +++ b/projects/curve/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensSharedOwners, nullAddress, sumTokens2, } = require("../helper/unwrapLPs"); const { getChainTransform } = require("../helper/portedTokens"); const { getCache } = require("../helper/http"); @@ -7,6 +8,8 @@ const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const erc20Abi = require("../helper/abis/erc20.json"); const contracts = require("./contracts.json"); +const { getLogs } = require('../helper/cache/getLogs') + const chains = [ "ethereum", //-200M "polygon", //-40M @@ -36,9 +39,10 @@ async function getDecimals(chain, token) { return decimalsCache[key] } + const gasTokens = [ '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', - '0x0000000000000000000000000000000000000000', + ADDRESSES.null, ] async function getNames(chain, tokens) { @@ -56,11 +60,12 @@ async function getNames(chain, tokens) { abi: erc20Abi.name, calls: missing, chain, + permitFailure: true, }) res.forEach((name, i) => { const key = chain + '-' + missing[i] nameCache[key] = name ?? '' - mapping[missing[i]] = nameCache[key] + mapping[missing[i]] = nameCache[key] }) return mapping @@ -69,7 +74,7 @@ async function getNames(chain, tokens) { const registryIdsReverse = Object.fromEntries(Object.entries(registryIds).map(i => i.reverse())) async function getPool({ chain, block, registry }) { - const data = await sdk.api2.abi.fetchList({ chain, block, target: registry, itemAbi: abi.pool_list, lengthAbi: abi.pool_count, withMetadata: true, }) + const data = await sdk.api2.abi.fetchList({ chain, block, target: registry, itemAbi: abi.pool_list, lengthAbi: abi.pool_count, withMetadata: true, }) return data.filter(i => i.output) } @@ -155,7 +160,7 @@ async function unwrapPools({ poolList, registry, chain, block }) { let calls = aggregateBalanceCalls({ coins, nCoins, wrapped }); const allTokens = getUniqueAddresses(calls.map(i => i[0])) const tokenNames = await getNames(chain, allTokens) - const blacklistedTokens = [...blacklist, ...(Object.values(metapoolBases))] + const blacklistedTokens = [...blacklist, ...(Object.values(metapoolBases))] Object.entries(tokenNames).forEach(([token, name]) => { if ((name ?? '').startsWith('Curve.fi ')) { sdk.log(chain, 'blacklisting', name) @@ -166,11 +171,41 @@ async function unwrapPools({ poolList, registry, chain, block }) { } const blacklists = { - ethereum: [ '0x6b8734ad31d42f5c05a86594314837c416ada984', ], + ethereum: ['0x6b8734ad31d42f5c05a86594314837c416ada984', '0x95ECDC6caAf7E4805FCeF2679A92338351D24297', '0x5aa00dce91409b58b6a1338639b9daa63eb22be7', '0xEf1385D2b5dc6D14d5fecB86D53CdBefeCA20fcC', '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E', '0x29b41fe7d754b8b43d4060bb43734e436b0b9a33'], + arbitrum: ['0x3aef260cb6a5b469f970fae7a1e233dbd5939378'], +} + +const config = { + ethereum: { + plainFactoryConfig: [ + { plainFactory: '0x528baca578523855a64ee9c276826f934c86a54c', fromBlock: 17182168 }, + { plainFactory: '0x0145fd99f1dd6e2491e44fca608c481c9c5b97a9', fromBlock: 17182168 }, + ] + }, +} + +async function addPlainFactoryConfig({ api, tokensAndOwners, plainFactoryConfig = [] }) { + return Promise.all(plainFactoryConfig.map(async ({ plainFactory, fromBlock }) => { + const logs = await getLogs({ + api, + target: plainFactory, + topics: ['0xb8f6972d6e56d21c47621efd7f02fe68f07a17c999c42245b3abd300f34d61eb'], + eventAbi: 'event PlainPoolDeployed(address[4] coins, uint256 A, uint256 fee, address deployer, address pool)', + onlyArgs: true, + fromBlock, + }) + logs.forEach(log => { + log.coins.forEach((coin, i) => { + if (i > 1 && coin === nullAddress) return; + tokensAndOwners.push([coin, log.pool]) + }) + }) + })) } function tvl(chain) { - return async (_t, _e, { [chain]: block }) => { + const { plainFactoryConfig = [] } = config[chain] ?? {} + return async (_t, _e, { [chain]: block }, { api }) => { let balances = {}; const transform = await getChainTransform(chain); const poolLists = await getPools(block, chain); @@ -184,7 +219,8 @@ function tvl(chain) { const blacklistedTokens = res.map(i => i.blacklistedTokens).flat() if (blacklists[chain]) blacklistedTokens.push(...blacklists[chain]) - await sumTokens2({ balances, chain, block, tokensAndOwners, transformAddress: transform, blacklistedTokens }) + await addPlainFactoryConfig({ api, tokensAndOwners, plainFactoryConfig }) + await sumTokens2({ balances, chain, block, tokensAndOwners, transformAddress: transform, blacklistedTokens }) await handleUnlistedFxTokens(balances, chain); return balances; }; diff --git a/projects/cvi/index.js b/projects/cvi/index.js index fa3d0b082c..7e1ca8a1c2 100644 --- a/projects/cvi/index.js +++ b/projects/cvi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking, stakings } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -34,9 +35,9 @@ const platformLiquidityContracts = [ "0xe6e5220291CF78b6D93bd1d08D746ABbC115C64b", ]; -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const USDT = ADDRESSES.ethereum.USDT; +const WETH = ADDRESSES.ethereum.WETH; +const USDC = ADDRESSES.ethereum.USDC; const ETHVOL_USDC_UNIV2 = "0x197e99bD87F98DFde461afE3F706dE36c9635a5D"; const WETH_COTI_UNIV2 = "0xA2b04F8133fC25887A436812eaE384e32A8A84F2"; @@ -60,8 +61,8 @@ const platformLiquidityContracts_polygon = [ //liquidty Mining CVOL-USDC "0xEA7b8DC5615e049417C80C795eA652556971c423", ]; -const USDT_Polygon = "0xc2132d05d31c914a87c6611c10748aeb04b58e8f"; -const USDC_Polygon = "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"; +const USDT_Polygon = ADDRESSES.polygon.USDT; +const USDC_Polygon = ADDRESSES.polygon.USDC; const CVOL_USDC_QLP = "0x1dd0095a169e8398448A8e72f15A1868d99D9348"; /*** Arbitrum Addresses ***/ diff --git a/projects/cyclone/index.js b/projects/cyclone/index.js index e55c6af993..b2a8f087d4 100644 --- a/projects/cyclone/index.js +++ b/projects/cyclone/index.js @@ -1,11 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const contracts = require("./contracts.json"); const { pool2 } = require("./../helper/pool2"); const { staking } = require(".././helper/staking.js"); const { - sumLPWithOnlyOneTokenOtherThanKnown, sumTokens2, nullAddress + sumTokens2, nullAddress, } = require("./../helper/unwrapLPs"); - -const wiotx = "0xA00744882684C3e4747faEFD68D283eA44099D03"; +const {sumTokensExport} = require("./../helper/unknownTokens"); function tvl(chain, gasToken) { return async (timestamp, block, chainBlocks) => { @@ -25,57 +25,23 @@ function tvl(chain, gasToken) { }; } -async function iotexPool2(timestamp, block, chainBlocks) { - block = chainBlocks.iotex - const balances = {}; - let a = await sumLPWithOnlyOneTokenOtherThanKnown( - balances, - contracts.iotex.pool2.token, - contracts.iotex.pool2.address, - "0x4d7b88403aa2f502bf289584160db01ca442426c", - block, - "iotex" - ); - return { iotex: balances[wiotx] / 10 ** 18 }; -} - module.exports = { iotex: { tvl: tvl("iotex", "iotex"), - pool2: iotexPool2, - staking: staking( - contracts.iotex.staking.address, - contracts.iotex.staking.token, - "iotex", - "cyclone-protocol", - 18 - ), + pool2: sumTokensExport({ owner: contracts.iotex.pool2.address, tokens: [contracts.iotex.pool2.token], }), + staking: staking(contracts.iotex.staking.address, contracts.iotex.staking.token, "iotex", "cyclone-protocol", 18), }, ethereum: { - tvl: tvl("ethereum", "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"), - pool2: pool2( - contracts.ethereum.pool2.address, - contracts.ethereum.pool2.token, - "ethereum" - ), + tvl: tvl("ethereum", ADDRESSES.ethereum.WETH), + pool2: pool2(contracts.ethereum.pool2.address, contracts.ethereum.pool2.token, "ethereum"), }, bsc: { - tvl: tvl("bsc", "bsc:0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"), + tvl: tvl("bsc", "bsc:" + ADDRESSES.bsc.WBNB), pool2: pool2(contracts.bsc.pool2.address, contracts.bsc.pool2.token, "bsc"), - staking: staking( - contracts.bsc.staking.address, - contracts.bsc.staking.token, - "bsc", - "cyclone-protocol", - 18 - ), + staking: staking(contracts.bsc.staking.address, contracts.bsc.staking.token, "bsc", "cyclone-protocol", 18), }, polygon: { - tvl: tvl("polygon", "polygon:0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"), - pool2: pool2( - contracts.polygon.pool2.address, - contracts.polygon.pool2.token, - "polygon" - ), + tvl: tvl("polygon", "polygon:" + ADDRESSES.polygon.WMATIC_2), + pool2: pool2(contracts.polygon.pool2.address, contracts.polygon.pool2.token,), }, }; diff --git a/projects/dam-finance/index.js b/projects/dam-finance/index.js index 3741b00097..e0be38c63a 100644 --- a/projects/dam-finance/index.js +++ b/projects/dam-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const ethCollateralJoins = ["0xB1fbcD7415F9177F5EBD3d9700eD5F15B476a5Fe"] @@ -6,7 +7,7 @@ module.exports = { start: 16375673, // LMCV Deployment Block ethereum: { tvl: sumTokensExport({ - tokens: ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'], + tokens: [ADDRESSES.ethereum.USDC], owners: ethCollateralJoins }) } diff --git a/projects/damm-finance/index.js b/projects/damm-finance/index.js index c1857b7111..3325faabd2 100644 --- a/projects/damm-finance/index.js +++ b/projects/damm-finance/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound') -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" +const WETH = ADDRESSES.ethereum.WETH const bETH = "0xe970c37243F3d0B2AeB041b855Ef6466CB140BcA" const unitroller = "0x4F96AB61520a6636331a48A11eaFBA8FB51f74e4" diff --git a/projects/damx/index.js b/projects/damx/index.js new file mode 100644 index 0000000000..f13a1e5ce2 --- /dev/null +++ b/projects/damx/index.js @@ -0,0 +1,14 @@ +const { staking } = require("../helper/staking"); +const { gmxExports } = require("../helper/gmx"); + +//Fantom +const fantomVault = "0xD093eeE7c968CEef2df96cA9949eba1a1A9b2306"; +const fantomStaking = "0xECef79f974182f4E9c168E751101F23686Bdc6dF"; +const fantomDMX = "0x0Ec581b1f76EE71FB9FEefd058E0eCf90EBAb63E"; + +module.exports = { + fantom: { + staking: staking(fantomStaking, fantomDMX), + tvl: gmxExports({ vault: fantomVault }) + } +}; diff --git a/projects/daolama/borrowed.js b/projects/daolama/borrowed.js new file mode 100644 index 0000000000..ac27357701 --- /dev/null +++ b/projects/daolama/borrowed.js @@ -0,0 +1,17 @@ +const sdk = require("@defillama/sdk"); +const { transformBalances } = require("../helper/portedTokens"); +const { get } = require('../helper/http'); +const ADDRESSES = require('../helper/coreAssets.json'); +const { BASE_API_URL } = require("./constants"); +const nullAddress = ADDRESSES.null; + +async function borrowed(chain, timestamp, chainBlocks, { api }) { + const balances = {}; + const result = await get(`${BASE_API_URL}/api/v1/analytics/borrowed`); + sdk.util.sumSingleBalance(balances, nullAddress, result.value, api.chain); + return transformBalances(api.chain, balances); +} + +module.exports = { + borrowed, +} diff --git a/projects/daolama/constants.js b/projects/daolama/constants.js new file mode 100644 index 0000000000..9e4e707537 --- /dev/null +++ b/projects/daolama/constants.js @@ -0,0 +1,4 @@ +module.exports = { + BASE_API_URL: 'https://api.daolama.co', + POOL_ADDRESS: 'EQAwsDboFl_iGuaflNn5959HOamenkvQEQDwakO55CY2SGB8' +} diff --git a/projects/daolama/index.js b/projects/daolama/index.js new file mode 100644 index 0000000000..26d3f534bf --- /dev/null +++ b/projects/daolama/index.js @@ -0,0 +1,12 @@ +const { tvl } = require('./tvl'); +const { borrowed } = require('./borrowed'); + +module.exports = { + methodology: 'Counts the pool size as the TVL. Borrowed coins are not counted towards the TVL.', + timetravel: false, + misrepresentedTokens: true, + ton: { + tvl, + borrowed, + } +} diff --git a/projects/daolama/tvl.js b/projects/daolama/tvl.js new file mode 100644 index 0000000000..ad7f92ebd7 --- /dev/null +++ b/projects/daolama/tvl.js @@ -0,0 +1,17 @@ +const sdk = require("@defillama/sdk"); +const { get } = require("../helper/http"); +const { transformBalances } = require("../helper/portedTokens"); +const ADDRESSES = require("../helper/coreAssets.json"); +const { POOL_ADDRESS } = require("./constants"); +const nullAddress = ADDRESSES.null; + +async function tvl(chain, timestamp, chainBlocks, { api }) { + const balances = {}; + const balance = await get(`https://toncenter.com/api/v2/getAddressBalance?address=${encodeURIComponent(POOL_ADDRESS)}`) + sdk.util.sumSingleBalance(balances, nullAddress, balance.result, api.chain); + return transformBalances(api.chain, balances); +} + +module.exports = { + tvl, +} diff --git a/projects/darkness/index.js b/projects/darkness/index.js index 96e86fef99..ac1f3dce8c 100644 --- a/projects/darkness/index.js +++ b/projects/darkness/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const masterChef = "0x63Df75d039f7d7A8eE4A9276d6A9fE7990D7A6C5"; const ness = "0xe727240728c1a5f95437b8b50afdd0ea4ae5f0c8"; const nessroom = "0xA93248C548Ac26152F3b4F201C9101f4e032074e"; @@ -11,11 +12,11 @@ module.exports = { tokens: [ '0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23', '0xf2001b145b43032aaf5ee2884e456ccd805f677d', - '0xc21223249ca28397b4b6541dffaecc539bff0c59', + ADDRESSES.cronos.USDC, '0x6582c738660bf0701f05b04dce3c4e5fcfcda47a', - '0x66e428c3f67a68878562e79a0234c1f83c208770', + ADDRESSES.cronos.USDT, '0x83b2ac8642ae46fc2823bc959ffeb3c1742c48b5', - '0x062e66477faf219f25d27dced647bf57c3107d52', + ADDRESSES.cronos.WBTC, '0x9d3bbb0e988d9fb2d55d07fe471be2266ad9c81c', '0x1ecaf6a3551e5822f142c9689d8f36a9b5f68217', '0xfa202a63234a7089eddbfeee83c378ba248f0e9a', diff --git a/projects/darumadao/index.js b/projects/darumadao/index.js index 1f49f58c47..d140066159 100644 --- a/projects/darumadao/index.js +++ b/projects/darumadao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const { default: BigNumber } = require("bignumber.js") const { toUSDTBalances } = require('../helper/balances') @@ -5,7 +6,7 @@ const { toUSDTBalances } = require('../helper/balances') const chain = 'godwoken' const STAKING_ADDRESS = '0x31A7D9c604C87F7aA490A350Ef8DF170dC2233AA' const DRM_ADDRESS = '0x81E60A955DC8c4d25535C358fcFE979351d102B5' -const USDC_ADDRESS = '0xc3b946c53e2e62200515d284249f2a91d9df7954' +const USDC_ADDRESS = ADDRESSES.godwoken.USDC const DRM_USDC_LP_ADDRESS = '0x268aaeed47d031751db1cbba50930fe2991f0ed0' async function tvl(ts, _block, chainBlocks) { diff --git a/projects/davos-protocol/index.js b/projects/davos-protocol/index.js index fb8b23e6a4..9b077e3ad9 100644 --- a/projects/davos-protocol/index.js +++ b/projects/davos-protocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require('../helper/unknownTokens') module.exports = { @@ -6,5 +7,14 @@ module.exports = { tvl: sumTokensExport({ chain: 'polygon', owner: '0x5E851dC1f56A05Bb6d3C053FA756304a5171C345', tokens: [ '0x0E9b89007eEE9c958c0EDA24eF70723C2C93dD58', // ankrMATIC ] }), + }, + ethereum: { + tvl: sumTokensExport({ chain: 'ethereum', owners: ['0x97f0BdaDbfAA05a1944fFbA862b3336a175056cF', '0xc7b219a9A8e246f9C4d4A1c7d4a371F0840ff724', '0x0730BA2252670Cd71580dadf471f3E137592e800', '0xb396b31599333739A97951b74652c117BE86eE1D', '0x7281d1bCcbe34574Ee6507b3f4816AFBe85A2e3d'], tokens: [ + ADDRESSES.ethereum.WSTETH, + ADDRESSES.ethereum.RETH, + '0x9ee91f9f426fa633d227f7a9b000e28b9dfd8599', //stmatic + ADDRESSES.ethereum.sfrxETH, + ADDRESSES.ethereum.MATIC + ] }), } } diff --git a/projects/daytona-finance/index.js b/projects/daytona-finance/index.js new file mode 100644 index 0000000000..99afa2778d --- /dev/null +++ b/projects/daytona-finance/index.js @@ -0,0 +1,10 @@ +const { masterchefExports } = require("../helper/unknownTokens"); + +module.exports = masterchefExports({ + chain: "pulse", + masterchef: "0xAc6fBc06C8c0477ba8fc117adb52881c1Cc580dA", + nativeTokens: ["0x9F8182aD65c53Fd78bd07648a1b3DDcB675c6772"], + useDefaultCoreAssets: true, + poolInfoABI: "function poolInfo(uint256) view returns (address)", + getToken: (i) => i, +}); diff --git a/projects/dbx-finance/index.js b/projects/dbx-finance/index.js new file mode 100644 index 0000000000..9de7567c70 --- /dev/null +++ b/projects/dbx-finance/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + tvl: getUniTVL({ factory: '0x41755a88d4ab443d5d8ef73ec64dd3df71fb5559', useDefaultCoreAssets: true, }), + } +} diff --git a/projects/ddex/index.js b/projects/ddex/index.js index e10a15c6e0..7af4ef5151 100644 --- a/projects/ddex/index.js +++ b/projects/ddex/index.js @@ -1,8 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { nullAddress, sumTokens2 } = require('../helper/unwrapLPs') const { createIncrementArray, getUniqueAddresses } = require('../helper/utils') + const ddexMarginContractAddress = '0x241e82c79452f51fbfc89fac6d912e021db1a3b7' -const SAI = '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359' +const SAI = ADDRESSES.ethereum.SAI async function tvl(timestamp, block) { const tokens = [] diff --git a/projects/debets/index.js b/projects/debets/index.js index 87969176e4..197d25b8de 100644 --- a/projects/debets/index.js +++ b/projects/debets/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const getPoolInfo = "function getPoolInfo(address token) view returns (tuple(uint256 freeAmount, uint256 frozenAmount) poolInfo)"; @@ -6,12 +7,12 @@ const getPoolInfo = const factory_address_polygon = "0xcE214f6a877747495106B5e55533f3e23D290DBd"; const polygon_tokens = Object.values({ - POLYGON_WMATIC: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", - POLYGON_WETH: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - POLYGON_WBTC: "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6", - POLYGON_USDC: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - POLYGON_USDT: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - POLYGON_DAI: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + POLYGON_WMATIC: ADDRESSES.polygon.WMATIC_2, + POLYGON_WETH: ADDRESSES.polygon.WETH_1, + POLYGON_WBTC: ADDRESSES.polygon.WBTC, + POLYGON_USDC: ADDRESSES.polygon.USDC, + POLYGON_USDT: ADDRESSES.polygon.USDT, + POLYGON_DAI: ADDRESSES.polygon.DAI, POLYGON_XEN: "0x2AB0e9e4eE70FFf1fB9D67031E44F6410170d00e", }); @@ -19,7 +20,7 @@ const polygon_tokens = Object.values({ const factory_address_fantom = "0x069C55f2DDb434fF67055977dbeB9e9FE8a2F25E"; const fantom_tokens = Object.values({ - FANTOM_WFTM: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + FANTOM_WFTM: ADDRESSES.fantom.WFTM, FANTOM_XEN: "0xeF4B763385838FfFc708000f884026B8c0434275", }); diff --git a/projects/debtdao/index.js b/projects/debtdao/index.js new file mode 100644 index 0000000000..8f7d5ae3f6 --- /dev/null +++ b/projects/debtdao/index.js @@ -0,0 +1,92 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + ethereum: { + moduleFactory: '0x00A3699F677C252CA32B887F9f66621920D392f8', + moduleFactoryStart: 16970379, + lineFactory: '0xc9ef6509a09b92043cedce689dfaa760048abd7f', + lineFactoryStart: 16970396, + }, + // xdai: { + // moduleFactory: '0x00A3699F677C252CA32B887F9f66621920D392f8', + // moduleFactoryStart: 27253390, + // lineFactory: '0xc9ef6509a09b92043cedce689dfaa760048abd7f', + // lineFactoryStart: 27253485, + // }, +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const { moduleFactory, moduleFactoryStart, lineFactory, lineFactoryStart, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const ownerTokens = [] + const escrowLogs = await getLogs({ + api, + target: moduleFactory, + topics: ['0x795112e1546f70e94f47252ccd7189f90d711b2e6557885dc3def7b589c7f7ac'], + eventAbi: 'event DeployedEscrow (address indexed deployedAt, uint32 indexed minCRatio, address indexed oracle, address owner)', + onlyArgs: true, + fromBlock: moduleFactoryStart, + }) + const lineLogs = await getLogs({ + api, + target: lineFactory, + topics: ['0xc043ebb31424e42a4ec1454f0de8a7ab9ba0443b8b556c538484c873ae8e64b5'], + eventAbi: 'event DeployedSecuredLine (address indexed deployedAt, address indexed escrow, address indexed spigot, address swapTarget, uint8 revenueSplit)', + onlyArgs: true, + fromBlock: lineFactoryStart, + }) + + await Promise.all(escrowLogs.map(async (log) => { + const escrow = log.deployedAt + const tokenLogs = await getLogs({ + api, + target: escrow, + topic: 'EnableCollateral(address)', + eventAbi: 'event EnableCollateral(address indexed token)', + onlyArgs: true, + fromBlock: moduleFactoryStart, + }) + ownerTokens.push([tokenLogs.map(i => i.token), escrow]) + })) + await Promise.all(lineLogs.map(async (log) => { + const target = log.deployedAt + const counts = await api.call({ abi: "function counts() view returns (uint256, uint256)", target }) + const calls = [] + for (let i = 0; i < counts[0]; i++) calls.push(i) + const proposals = await api.multiCall({ abi: "function ids(uint256) view returns (bytes32)", calls, target }) + const credits = await api.multiCall({ abi: "function credits(bytes32) view returns (uint256 deposit, uint256 principal, uint256 interestAccrued, uint256 interestRepaid, uint8 decimals, address token, address lender, bool isOpen)", calls: proposals, target }) + ownerTokens.push([credits.map(i => i.token), target]) + })) + return sumTokens2({ api, ownerTokens }) + }, + borrowed: async (_, _b, _cb, { api, }) => { + const lineLogs = await getLogs({ + api, + target: lineFactory, + topics: ['0xc043ebb31424e42a4ec1454f0de8a7ab9ba0443b8b556c538484c873ae8e64b5'], + eventAbi: 'event DeployedSecuredLine (address indexed deployedAt, address indexed escrow, address indexed spigot, address swapTarget, uint8 revenueSplit)', + onlyArgs: true, + fromBlock: lineFactoryStart, + }) + + await Promise.all(lineLogs.map(async (log) => { + const target = log.deployedAt + const counts = await api.call({ abi: "function counts() view returns (uint256, uint256)", target }) + const calls = [] + for (let i = 0; i < counts[0]; i++) calls.push(i) + const proposals = await api.multiCall({ abi: "function ids(uint256) view returns (bytes32)", calls, target }) + const credits = await api.multiCall({ abi: "function credits(bytes32) view returns (uint256 deposit, uint256 principal, uint256 interestAccrued, uint256 interestRepaid, uint8 decimals, address token, address lender, bool isOpen)", calls: proposals, target }) + credits.map(i => { + api.add(i.token, i.principal) + // api.add(i.token, i.interestAccrued) + // api.add(i.token, i.interestRepaid * -1) + }) + })) + } + } +}) \ No newline at end of file diff --git a/projects/decubate/index.js b/projects/decubate/index.js index 0cafc43682..b18c12bf43 100644 --- a/projects/decubate/index.js +++ b/projects/decubate/index.js @@ -1,7 +1,7 @@ const sdk = require("@defillama/sdk"); const DCBToken = "0xEAc9873291dDAcA754EA5642114151f3035c67A2"; -const stakingPool = "0x22B551fE288c93A3Ac9172aD998A1D9ce1A882e5"; +const stakingPool = "0xD1748192aE1dB982be2FB8C3e6d893C75330884a"; async function staking (timestamp, block, chainBlocks) { let balances = {}; @@ -24,4 +24,4 @@ module.exports = { staking }, -} \ No newline at end of file +} diff --git a/projects/deepbook-sui/index.js b/projects/deepbook-sui/index.js new file mode 100644 index 0000000000..b344219467 --- /dev/null +++ b/projects/deepbook-sui/index.js @@ -0,0 +1,23 @@ +const { toUSDTBalances } = require('../helper/balances') +const { get } = require('../helper/http') + +async function tvl(ts) { + const {data} = await get('https://49490zsfv2.execute-api.us-east-1.amazonaws.com/sui/deepbook?interval=hour&timeFrame=1&dataType=tvl') + return toUSDTBalances(findClosestTvl(data, ts)) +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + sui: { + tvl + } +} + +function findClosestTvl(data, ts) { + ts = ts * 1000 + data.forEach(i => i.ts = new Date(i.timestamp)) + data = data.filter(i => i.ts < ts && (ts -i.ts) < 86400000) // filter for recent tvl but less than day old + data.sort((a, b) => b.ts - a.ts) + return data[0].tvl +} \ No newline at end of file diff --git a/projects/defichain-loans.js b/projects/defichain-loans/index.js similarity index 84% rename from projects/defichain-loans.js rename to projects/defichain-loans/index.js index adf7589a50..97d0fa086d 100644 --- a/projects/defichain-loans.js +++ b/projects/defichain-loans/index.js @@ -1,6 +1,6 @@ -const { get } = require('./helper/http') -const { log } = require('./helper/utils') -const { transformBalances } = require('./helper/portedTokens') +const { get } = require('../helper/http') +const { log } = require('../helper/utils') +const { transformBalances } = require('../helper/portedTokens') const sdk = require('@defillama/sdk') async function tvl() { @@ -12,7 +12,7 @@ async function tvl() { let endpoint = baseURI if (next) endpoint += '&next=' + next - log('fetchin: ', ++page) + log('fetchin: ', ++page, next) const res = await get(endpoint) next = res.page?.next diff --git a/projects/defichain-staking.js b/projects/defichain-staking.js deleted file mode 100644 index f0f926f5d5..0000000000 --- a/projects/defichain-staking.js +++ /dev/null @@ -1,11 +0,0 @@ -const utils = require('./helper/utils'); - -async function fetch() { - const { data } = await utils.fetchURL('https://ocean.defichain.com/v0/mainnet/stats') - return data.data.tvl.masternodes; -} - -module.exports = { - methodology: "Liquidity on the Staking", - fetch -} diff --git a/projects/defidollar/index.js b/projects/defidollar/index.js index 4f819b2196..bc9c933bc2 100644 --- a/projects/defidollar/index.js +++ b/projects/defidollar/index.js @@ -33,6 +33,9 @@ async function tvl(_timestamp, block) { } module.exports = { + hallmarks: [ + [1641600000, "Possible exploit, contracts paused"] + ], ethereum:{ tvl }, diff --git a/projects/defiedge/index.js b/projects/defiedge/index.js index 0391049962..dba0ab92cd 100644 --- a/projects/defiedge/index.js +++ b/projects/defiedge/index.js @@ -1,31 +1,40 @@ -const { GraphQLClient, gql } = require("graphql-request"); +const { graphQuery } = require('../helper/http') -var endpoint = "https://api.defiedge.io/graphql"; - -function tvl(network) { - return async (_timestamp, _block, _chainBlocks) => { - var graphQLClient = new GraphQLClient(endpoint); - - var query = gql` - query Stats($network: [Network!]) { - stats(network: $network) { - totalValueManaged - } +const endpoint = "https://api.defiedge.io/graphql"; +const query = ` + query Stats($network: [Network!] $dex: [Dex!] = [Uniswap, Apeswap, Pancakeswap, Arbidex, Sushiswap]) { + stats(network: $network, dex: $dex) { + totalValueManaged } - `; + } + `; - var results = await graphQLClient.request(query, { network: [network] }); +async function tvl() { + const { api } = arguments[3] + let tvl = 0 + const { dexes, network } = config[api.chain] + for (const dex of dexes) { + const results = await graphQuery(endpoint, query, { network: [network], dex: [dex] }) + tvl += results.stats.totalValueManaged + } - return { "usd-coin": results.stats.totalValueManaged }; - }; + return { "usd-coin": tvl}; } module.exports = { doublecounted: true, timetravel: false, misrepresentedTokens: true, - ethereum: { tvl: tvl("mainnet") }, - polygon: { tvl: tvl("polygon") }, - arbitrum: { tvl: tvl("arbitrum") }, - optimism: { tvl: tvl("optimism") }, }; + +const config = { + ethereum: { dexes: ["Uniswap",], network: "mainnet",}, + bsc: { dexes: ["Uniswap", "Apeswap", "Pancakeswap",], network: "bsc",}, + arbitrum: { dexes: ["Uniswap", "Arbidex", "Sushiswap"], network: "arbitrum",}, + optimism: { dexes: ["Uniswap",], network: "optimism",}, + polygon: { dexes: ["Uniswap",], network: "polygon",}, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/defifranc/index.js b/projects/defifranc/index.js index 261dfa7cb1..6a7a887e78 100644 --- a/projects/defifranc/index.js +++ b/projects/defifranc/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require('../helper/staking') const Collaterals = { - ETH: "0x0000000000000000000000000000000000000000", - wBTC: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"// + ETH: ADDRESSES.null, + wBTC: ADDRESSES.ethereum.WBTC// } const TROVE_MANAGER_ADDRESS = "0x99838142189adE67c1951f9c57c3333281334F7F"; // deposits in native ETH and wBTC @@ -20,7 +21,7 @@ async function tvl(_, block, chainBlocks) { }) output.forEach(({ input: { params: [token] }, output }) => { - if (token.toLowerCase() === '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599') // Fix wBTC balance + if (token.toLowerCase() === ADDRESSES.ethereum.WBTC) // Fix wBTC balance output /= 1e10 sdk.util.sumSingleBalance(balances, token, output) }) diff --git a/projects/defihalal/index.js b/projects/defihalal/index.js index b2a3ee5ca4..a7bd51a86c 100644 --- a/projects/defihalal/index.js +++ b/projects/defihalal/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {getLiquityTvl} = require('../helper/liquity') //USDH TOKEN ADDRESS ON POLYGON MAINNET @@ -6,6 +7,6 @@ const USDH_TOKEN_ADDRESS = "0x92B27abe3C96d3B1266f881b3B0886e68645F51F"; module.exports = { methodology: "Deposited Matic and USDH, USDH is not listed on CoinGecko and has been replaced with TUSD", polygon:{ - tvl: getLiquityTvl("0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", "0xd8a3e8c70091d6231a63e671a6ce8ea44e143d24", "polygon") + tvl: getLiquityTvl(ADDRESSES.polygon.WMATIC_2, "0xd8a3e8c70091d6231a63e671a6ce8ea44e143d24", "polygon") } }; diff --git a/projects/defikingdoms/index.js b/projects/defikingdoms/index.js index e436a934ca..49bced43b0 100644 --- a/projects/defikingdoms/index.js +++ b/projects/defikingdoms/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { getUniTVL } = require("../helper/unknownTokens"); @@ -5,7 +6,7 @@ const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { harmony: { tvl: getUniTVL({ factory: '0x9014B937069918bd319f80e8B3BB4A2cf6FAA5F7', chain: 'harmony', useDefaultCoreAssets: true }), - staking: staking("0xa9ce83507d872c5e1273e745abcfda849daa654f", "0x72cb10c6bfa5624dd07ef608027e366bd690048f", "harmony"), + staking: staking(ADDRESSES.harmony.xJEWEL, ADDRESSES.harmony.JEWEL, "harmony"), }, klaytn: { tvl: getUniTVL({ factory: '0x36fAE766e51f17F8218C735f58426E293498Db2B', chain: 'klaytn', useDefaultCoreAssets: true }), diff --git a/projects/defily-dex/index.js b/projects/defily-dex/index.js new file mode 100644 index 0000000000..8ebc8cb1a5 --- /dev/null +++ b/projects/defily-dex/index.js @@ -0,0 +1,15 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +const config = { + onus: '0xf57578DD26422e80ab4051165Fb64DA1F25E740A', +} + +module.exports = { + misrepresentedTokens: true, +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: config[chain], }) + } +}) diff --git a/projects/defilyio/index.js b/projects/defilyio/index.js index b49d50571f..eca2a2ca3f 100644 --- a/projects/defilyio/index.js +++ b/projects/defilyio/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const utils = require("../helper/utils"); const { staking } = require("../helper/staking"); @@ -6,12 +7,14 @@ const stakingContract_KARDIA = "0x0245a1f57Ee84b55Cf489Eb5F3d27355014e57f8"; const stakingContract_Harmony = "0x3b441bf2522927BCf41c1c24786E7a8E9a56B234"; const DFL = "0xD675fF2B0ff139E14F86D87b7a6049ca7C66d76e"; -const DFL_Harmony = "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a"; +const DFL_Harmony = ADDRESSES.arbitrum.MIM; const fetch = async () => { + return 0 + /* const tvl = (await utils.fetchURL("https://api.defily.io/v1/statistics")).data .payload.totalValueLocked.total; - return tvl; + return tvl; */ }; module.exports = { diff --git a/projects/definer/index.js b/projects/definer/index.js index 7a8446368e..1fdb8d0512 100644 --- a/projects/definer/index.js +++ b/projects/definer/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -149,7 +150,7 @@ const utility = { }) ).output; - let zeroCTokenAddress = "0x0000000000000000000000000000000000000000"; + let zeroCTokenAddress = ADDRESSES.null; cToken.forEach((item) => { allTokenObj[item.input.params[0]] = item.output === zeroCTokenAddress ? "" : item.output; diff --git a/projects/defirex/index.js b/projects/defirex/index.js index dbe9de34e7..07f22d2733 100644 --- a/projects/defirex/index.js +++ b/projects/defirex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unwrapLPs') module.exports = { @@ -5,7 +6,7 @@ module.exports = { tvl: sumTokensExport({ ownerTokens: [ { - tokens: [nullAddress, '0xdac17f958d2ee523a2206206994597c13d831ec7' /*USDT*/, '0x6b175474e89094c44da98b954eedeac495271d0f'/*DAI*/], + tokens: [nullAddress, ADDRESSES.ethereum.USDT /*USDT*/, ADDRESSES.ethereum.DAI/*DAI*/], holders: '0xb942ca22e0eb0f2524F53f999aE33fD3B2D58E3E', // Strategy controller contract }, { @@ -13,7 +14,7 @@ module.exports = { holders: '0x0BCbAb2FeCC30B7341132B4Ebb36d352E035f1bD', // Wallet strategy contract with user funds deposited in Compound }, { - tokens: ['0x6b175474e89094c44da98b954eedeac495271d0f' /*DAI*/], + tokens: [ADDRESSES.ethereum.DAI /*DAI*/], holders: '0x65D4853d663CeE114A0aA1c946E95479C53e78c2', // user rewards in DAI token }].map(i => [i.tokens, i.holders]) }), diff --git a/projects/defisaver.js b/projects/defisaver.js index 7b5c302523..f22646d796 100644 --- a/projects/defisaver.js +++ b/projects/defisaver.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('./helper/coreAssets.json') const defisaverABIs = require("./config/defisaver/abis"); const utils = require("./helper/utils"); -const { tokensBare, nullAddress, } = require("./helper/tokenMapping"); +const { nullAddress, } = require("./helper/tokenMapping"); const sdk = require('@defillama/sdk') -const dai = tokensBare.dai +const dai = ADDRESSES.ethereum.DAI const { CompoundSubscriptions, @@ -133,13 +134,13 @@ async function tvl(ts, block, _, { api }) { const assetMapping = { ETH: nullAddress, - DAI: tokensBare.dai, - BAT: tokensBare.BAT, - RETH: tokensBare.reth, - LINK: tokensBare.link, - WBTC: tokensBare.wbtc, - MATIC: tokensBare.matic, - WSTETH: tokensBare.wsteth, + DAI: ADDRESSES.ethereum.DAI, + BAT: ADDRESSES.ethereum.BAT, + RETH: ADDRESSES.ethereum.RETH, + LINK: ADDRESSES.ethereum.LINK, + WBTC: ADDRESSES.ethereum.WBTC, + MATIC: ADDRESSES.ethereum.MATIC, + WSTETH: ADDRESSES.ethereum.WSTETH } module.exports = { diff --git a/projects/defyswap/index.js b/projects/defyswap/index.js index 7a863f385b..b1457bad44 100644 --- a/projects/defyswap/index.js +++ b/projects/defyswap/index.js @@ -1,20 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { stakingUnknownPricedLP } = require("../helper/staking.js"); const factory = "0xAffdbEAE1ec595cba4C262Bdb52A6083aEc2e2a6"; const masterchef = "0x53e986884c55c9AEDB7f003583f350EE789505D0"; -const ftm = "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"; +const ftm = ADDRESSES.fantom.WFTM; const dfy = "0x84b0b7718f8480a9eda3133fd385d7edf2b1d1c4"; const whitelist = [ dfy, - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", + ADDRESSES.fantom.USDC, "0x321162cd933e2be498cd2267a90534a804051b11", ]; module.exports = { misrepresentedTokens: true, echelon: { - tvl: getUniTVL({ chain: 'echelon', useDefaultCoreAssets: true, factory: '0xdBE4CC36D0C19858d8cc7c5030593E9922aC680D' }) + tvl: () => ({}), }, fantom: { tvl: getUniTVL({ factory, chain: 'fantom', useDefaultCoreAssets: true }), diff --git a/projects/degenerative/index.js b/projects/degenerative/index.js index 710be22693..7c8cb194de 100644 --- a/projects/degenerative/index.js +++ b/projects/degenerative/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { getConfig } = require('../helper/cache') const collaterals = { - 'WETH': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - 'USDC': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' + 'WETH': ADDRESSES.ethereum.WETH, + 'USDC': ADDRESSES.ethereum.USDC } async function tvl(timestamp, block) { diff --git a/projects/dehive/assetsInfo.js b/projects/dehive/assetsInfo.js index 77df35f2c3..c68fa85945 100644 --- a/projects/dehive/assetsInfo.js +++ b/projects/dehive/assetsInfo.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // Auto generated at 9-2-2022 16:14 module.exports = { 'ethereum' : [ @@ -16,7 +17,7 @@ module.exports = { dhvToken: '0x62Dc4817588d53a056cBbD18231d91ffCcd34b2A', underlying: [ '0x62Dc4817588d53a056cBbD18231d91ffCcd34b2A', // DHV - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH + ADDRESSES.ethereum.WETH, // WETH ], isPool2: true, poolId: 0 @@ -72,8 +73,8 @@ module.exports = { lpAddress: '0x4A35582a710E1F4b2030A3F826DA20BfB6703C09', // QCK-WETH-DAI dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', underlying: [ - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', // DAI + ADDRESSES.polygon.WETH_1, // WETH + ADDRESSES.polygon.DAI, // DAI ], poolId: 1 }, @@ -86,7 +87,7 @@ module.exports = { // lpAddress: '0x1F1E4c845183EF6d50E9609F16f6f9cAE43BC9Cb', // QCK-USDC-QUICK // dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', // underlying: [ - // '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC + // ADDRESSES.polygon.USDC, // USDC // '0x831753DD7087CaC61aB5644b308642cc1c33Dc13', // QUICK // ], // poolId: 2 @@ -100,7 +101,7 @@ module.exports = { // lpAddress: '0xE89faE1B4AdA2c869f05a0C96C87022DaDC7709a', // QCK-MAI-USDT // dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', // underlying: [ - // '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', // USDT + // ADDRESSES.polygon.USDT, // USDT // '0xa3fa99a148fa48d14ed51d610c367c61876997f1', // MAI // ], // poolId: 4 @@ -114,7 +115,7 @@ module.exports = { dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', underlying: [ '0x2C89bbc92BD86F8075d1DEcc58C7F4E0107f286b', // AVAX - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH + ADDRESSES.polygon.WETH_1, // WETH ], poolId: 5 }, @@ -126,8 +127,8 @@ module.exports = { lpAddress: '0xc4e595acDD7d12feC385E5dA5D43160e8A0bAC0E', // SUSHI-WMATIC-WETH dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', underlying: [ - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH + ADDRESSES.polygon.WMATIC_2, // WMATIC + ADDRESSES.polygon.WETH_1, // WETH ], poolId: 6 }, @@ -140,7 +141,7 @@ module.exports = { dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', underlying: [ '0x172370d5Cd63279eFa6d502DAB29171933a610AF', // CRV - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH + ADDRESSES.polygon.WETH_1, // WETH ], poolId: 7 }, @@ -153,7 +154,7 @@ module.exports = { dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', underlying: [ '0x50B728D8D964fd00C2d0AAD81718b71311feF68a', // SNX - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH + ADDRESSES.polygon.WETH_1, // WETH ], poolId: 8 }, @@ -165,7 +166,7 @@ module.exports = { lpAddress: '0xf69e93771F11AECd8E554aA165C3Fe7fd811530c', // SUSHI-WMATIC-GHST dhvToken: '0x5fCB9de282Af6122ce3518CDe28B7089c9F97b26', underlying: [ - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC + ADDRESSES.polygon.WMATIC_2, // WMATIC '0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7', // GHST ], poolId: 9 @@ -201,7 +202,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x58759dd469ae5631c42cf8a473992335575b58d7', // DHV - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + ADDRESSES.bsc.BUSD, // BUSD ], isPool2: true, poolId: 0 @@ -215,7 +216,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82', // CAKE - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + ADDRESSES.bsc.BUSD, // BUSD ], poolId: 0 }, @@ -227,8 +228,8 @@ module.exports = { lpAddress: '0xEc6557348085Aa57C72514D67070dC863C0a5A8c', // PANCAKE-BUSDT-USDC dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ - '0x55d398326f99059fF775485246999027B3197955', // BUSDT - '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', // BUSDC + ADDRESSES.bsc.USDT, // BUSDT + ADDRESSES.bsc.USDC, // BUSDC ], poolId: 1 }, @@ -240,8 +241,8 @@ module.exports = { lpAddress: '0x16b9a82891338f9bA80E2D6970FddA79D1eb0daE', // PANCAKE-BUSDT-WBNB dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ - '0x55d398326f99059fF775485246999027B3197955', // BUSDT - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.USDT, // BUSDT + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 2 }, @@ -254,7 +255,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63', // XVS - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 3 }, @@ -267,7 +268,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x8F0528cE5eF7B51152A59745bEfDD91D97091d2F', // ALPACA - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + ADDRESSES.bsc.BUSD, // BUSD ], poolId: 4 }, @@ -280,7 +281,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0xF8A0BF9cF54Bb92F17374d9e9A321E6a111a51bD', // LINK - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 5 }, @@ -293,7 +294,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82', // CAKE - '0x55d398326f99059fF775485246999027B3197955', // BUSDT + ADDRESSES.bsc.USDT, // BUSDT ], poolId: 6 }, @@ -306,7 +307,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x67ee3Cb086F8a16f34beE3ca72FAD36F7Db929e2', // DODO - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 7 }, @@ -319,7 +320,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x603c7f932ED1fc6575303D8Fb018fDCBb0f39a95', // BANANA - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 8 }, @@ -332,7 +333,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x603c7f932ED1fc6575303D8Fb018fDCBb0f39a95', // BANANA - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + ADDRESSES.bsc.BUSD, // BUSD ], poolId: 9 }, @@ -345,7 +346,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x4B0F1812e5Df2A09796481Ff14017e6005508003', // TWT - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 10 }, @@ -358,7 +359,7 @@ module.exports = { dhvToken: '0x58759dd469ae5631c42cf8a473992335575b58d7', underlying: [ '0x1CE0c2827e2eF14D5C4f29a091d735A204794041', // AVAX - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB + ADDRESSES.bsc.WBNB, // WBNB ], poolId: 11 }, @@ -387,7 +388,7 @@ module.exports = { dhvToken: '0xFbdd194376de19a88118e84E279b977f165d01b8', underlying: [ '0xFbdd194376de19a88118e84E279b977f165d01b8', // DHV - '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d', // WXDAI + ADDRESSES.xdai.WXDAI, // WXDAI ], isPool2: true, poolId: 1 diff --git a/projects/delta/index.js b/projects/delta/index.js index 0ad1c29a8a..e0ad89e1b9 100644 --- a/projects/delta/index.js +++ b/projects/delta/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const { staking } = require("../helper/staking"); @@ -7,7 +8,7 @@ const rebasingContract = "0xfcfC434ee5BfF924222e084a8876Eee74Ea7cfbA"; const DELTA_WETH_SLP = "0x1498bd576454159Bb81B5Ce532692a8752D163e8"; const DELTA = "0x9EA3b5b4EC044b70375236A281986106457b20EF"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH = ADDRESSES.ethereum.WETH; async function Pool2(timestamp, block) { const balances = {}; diff --git a/projects/deltaprime/index.js b/projects/deltaprime/index.js index cbbb106dab..b8a46e12d9 100644 --- a/projects/deltaprime/index.js +++ b/projects/deltaprime/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { ethers } = require("ethers"); const { sumTokens2 } = require('../helper/unwrapLPs') @@ -70,7 +71,7 @@ async function tvl(timestamp, block, chainBlocks, { api }) { function translatePlatypusLPToBaseToken(token){ // Platypus USDC Asset (LP-USDC) -> USDC if(token === "0x06f01502327de1c37076bea4689a7e44279155e9"){ - token = "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e"; + token = ADDRESSES.avax.USDC; } return token; } diff --git a/projects/deltaprime/mappings/assetToAddressMapping.json b/projects/deltaprime/mappings/assetToAddressMapping.json index 120d1913a1..3bd2b801b9 100644 --- a/projects/deltaprime/mappings/assetToAddressMapping.json +++ b/projects/deltaprime/mappings/assetToAddressMapping.json @@ -5,10 +5,16 @@ "ETH": "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", "BTC": "0x152b9d0FdC40C096757F570A51E494bd4b943E50", "USDT": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", + "EUROC": "0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD", + "GMX": "0x62edc0692BD897D2295872a9FFCac5425011c661", "QI": "0x8729438eb15e2c8b576fcc6aecda6a148776c0f5", "PNG": "0x60781C2586D68229fde47564546784ab3fACA982", "PTP": "0x22d4002028f537599bE9f666d1c4Fa138522f9c8", "JOE": "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", + "gmdUSDC": "0x33f0a866d9024d44de2E0602f4C9B94755944B6F", + "gmdWAVAX": "0x13AF25f924056d4D4668705C33aB9b70D505050e", + "gmdBTCb": "0x8fe3024351B9a51a3439183e940c2aF3994DD52F", + "gmdWETHe": "0xE28c95e9EB0f6D16b05D265cAa4BcEE9E5C2e625", "YY_AAVE_AVAX": "0xaAc0F2d0630d1D09ab2B5A400412a4840B866d95", "YY_PTP_sAVAX": "0xb8f531c0d3c53B1760bcb7F57d87762Fd25c4977", "YY_GLP": "0x9f637540149f922145c06e1aa3f38dcDc32Aff5C", @@ -26,5 +32,15 @@ "YY_TJ_AVAX_ETH_LP": "0x5219558ee591b030E075892acc41334A1694fd8A", "YY_TJ_AVAX_sAVAX_LP": "0x22EDe03f1115666CF05a4bAfafaEe8F43D42cD56", "MOO_TJ_AVAX_USDC_LP": "0x7E5bC7088aB3Da3e7fa1Aa7ceF1dC73F5B00681c", - "GLP": "0x9e295B5B976a184B14aD8cd72413aD846C299660" + "GLP": "0x9e295B5B976a184B14aD8cd72413aD846C299660", + "DAIe": "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", + "USDCe": "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", + "USDT.e": "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", + "WBTCe": "0x50b7545627a5162F82A992c33b87aDc75187B218", + "crvUSDBTCETH": "0x1daB6560494B04473A0BE3E7D83CF3Fdf3a51828", + "SHLB_AVAX-USDC_B": "0x668530302c6ecc4ebe693ec877b79300ac72527c", + "SHLB_BTC.b-AVAX_B": "0x536d7e7423e8fb799549caf574cfa12aae95ffcd", + "SHLB_JOE-AVAX_B": "0x89547441489262feb5cee346fdacb9037c2574db", + "SHLB_EUROC-USDC_V2_1_B": "0x638f969675822dfae4566b44d0f2a11362fbed52", + "SHLB_USDT.e-USDt_C": "0x9f44e67ba256c18411bb041375e572e3dd11fa72" } \ No newline at end of file diff --git a/projects/demeter.js b/projects/demeter.js index 0940ea564a..84a329748b 100644 --- a/projects/demeter.js +++ b/projects/demeter.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokensExport } = require('./helper/unwrapLPs') @@ -5,7 +6,7 @@ const config = { heco: { markets: [ [ - "0xa71EdC38d189767582C38A3145b5873052c3e47a", + ADDRESSES.heco.USDT, "0x8d8fD8139CEaf0034A021E6eb039bB6f70C83d9c" ], [ @@ -21,7 +22,7 @@ const config = { "0x59a626a783A9C071fDcEFC95B3664a34d0592e24" ], [ - "0x5545153CCFcA01fbd7Dd11C0b23ba694D9509A6F", + ADDRESSES.heco.WHT, "0xDA77B5663a0baFa56080Ae5D0a1F462848465b14" ], [ @@ -73,23 +74,23 @@ const config = { bsc: { markets: [ [ - "0x55d398326f99059fF775485246999027B3197955", + ADDRESSES.bsc.USDT, "0x89bB17aF665Ec0607268C697Bb294117992027Cf" ], [ - "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + ADDRESSES.bsc.BUSD, "0xB275b6AE294159278547297dBE7617f66A7bC6e2" ], [ - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + ADDRESSES.bsc.BTCB, "0x6c9FcBD7aD9dFB241f4fA2cc08FaABb42d764606" ], [ - "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + ADDRESSES.bsc.ETH, "0x4A345187BFAe9A14DA764C2222c4B7E816C18216" ], [ - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + ADDRESSES.bsc.WBNB, "0x5C4E2B1E6E03cCF5F3c3356C008a69C7f93BD10B" ], [ diff --git a/projects/demeter/index.js b/projects/demeter/index.js index d9a2c4b99e..c7adf3de82 100644 --- a/projects/demeter/index.js +++ b/projects/demeter/index.js @@ -1,7 +1,7 @@ const { get } = require('../helper/http') async function fetch() { - let results = await get('https://farming-api.cerestoken.io/get-supply-data'); + let results = await get('https://api.deotoken.com/api/demeter/supply-data'); return results.tvl; } diff --git a/projects/demodyfi/index.js b/projects/demodyfi/index.js index 40598173db..0cf6579008 100644 --- a/projects/demodyfi/index.js +++ b/projects/demodyfi/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); -const wGLMR = "0x5f6c5C2fB289dB2228d159C69621215e354218d7"; +const wGLMR = ADDRESSES.moonbeam.WGLMR; const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); const { transformBscAddress } = require("../helper/portedTokens"); @@ -38,7 +39,7 @@ async function dmodEthereumStakingPool(timestamp, block, chainBlocks) { await sdk.api.abi.call({ abi: "erc20:balanceOf", chain: "ethereum", - target: "0x5f6c5c2fb289db2228d159c69621215e354218d7", + target: ADDRESSES.moonbeam.WGLMR, params: ["0x024D59Ac0Bb03dEd28B9A16cd50B3d242B43a683"], block }) @@ -50,7 +51,7 @@ async function dmodEthereumStakingPool(timestamp, block, chainBlocks) { await sdk.api.abi.call({ abi: "erc20:decimals", chain: "ethereum", - target: "0x5f6c5c2fb289db2228d159c69621215e354218d7", + target: ADDRESSES.moonbeam.WGLMR, params: [], block }) diff --git a/projects/depth/index.js b/projects/depth/index.js index 9e27c0a959..0012181aba 100644 --- a/projects/depth/index.js +++ b/projects/depth/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const formalDeposit = { @@ -326,7 +327,7 @@ async function getTokenPrice(contractAddress) { target: "0xED7d5F38C79115ca12fe6C0041abb22F0A06C300", abi: mdexRouter['getAmountsIn'], chain: "heco", - params: [1e8, ['0xa71edc38d189767582c38a3145b5873052c3e47a', underlyingCoinsAddress.output]], + params: [1e8, [ADDRESSES.heco.USDT, underlyingCoinsAddress.output]], }); return getAmountsIn.output[0] / Math.pow(10, 26 - 18) @@ -362,7 +363,7 @@ async function getPrice(contractAddress,dc) { target: "0xED7d5F38C79115ca12fe6C0041abb22F0A06C300", abi: mdexRouter['getAmountsOut'], chain: "heco", - params: [1e8, [contractAddress,'0xa71edc38d189767582c38a3145b5873052c3e47a']], + params: [1e8, [contractAddress,ADDRESSES.heco.USDT]], }); return getAmountsIn.output[1] / Math.pow(10, 26 - dc) @@ -419,7 +420,7 @@ async function getBnbPrice() { target: "0x10ed43c718714eb63d5aa57b78b54704e256024e", abi: mdexRouter['getAmountsOut'], chain: "bsc", - params: [1e8, ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059ff775485246999027b3197955"]], + params: [1e8, [ADDRESSES.bsc.WBNB,ADDRESSES.bsc.USDT]], }); return getAmountsIn.output[1] / Math.pow(10, 26 - 18) } diff --git a/projects/deri/index.js b/projects/deri/index.js index 2844198534..5174dc0b71 100644 --- a/projects/deri/index.js +++ b/projects/deri/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { transformPolygonAddress } = require("../helper/portedTokens"); const abi = require("./abi"); @@ -97,16 +98,16 @@ async function v3Pool( let bscContracts = { a: { - bTokenSymbol: "0x4fabb145d64652a948d72533023f6e7a623c7c53", + bTokenSymbol: ADDRESSES.ethereum.BUSD, pool: "0x66f501dda450C8978c4A1115D7b2A7FAa7702F05", }, b: { - bTokenSymbol: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + bTokenSymbol: ADDRESSES.bsc.BUSD, pool: "0x574022307e60bE1f07da6Ec1cB8fE23d426e5831", lite: true, }, everlastingOption: { - bTokenSymbol: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + bTokenSymbol: ADDRESSES.bsc.BUSD, pool: "0x08aD0E0b4458183758fC5b9b6D27c372965fB780", lite: true, }, @@ -116,28 +117,28 @@ let bscContracts = { lite: true, }, option: { - bTokenSymbol: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + bTokenSymbol: ADDRESSES.bsc.BUSD, pool: "0x243681B8Cd79E3823fF574e07B2378B8Ab292c1E", v3: true, }, futureMain: { - bTokenSymbol: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + bTokenSymbol: ADDRESSES.bsc.BUSD, pool: "0x4ad5cb09171275A4F4fbCf348837c63a91ffaB04", v3: true, }, futureInno: { - bTokenSymbol: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + bTokenSymbol: ADDRESSES.bsc.BUSD, pool: "0xD2D950e338478eF7FeB092F840920B3482FcaC40", v3: true, }, }; let polygonContracts = { a: { - bTokenSymbol: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + bTokenSymbol: ADDRESSES.polygon.USDT, pool: "0x4Db087225C920Bec55B2dCEAa629BDc5782623D9", }, b: { - bTokenSymbol: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + bTokenSymbol: ADDRESSES.polygon.USDT, pool: "0xA8769A4Fb0Ca82eb474448B1683DCA3c79798B69", lite: true, }, @@ -151,14 +152,14 @@ let polygonContracts = { let config = { arbitrum: { futureMain: { - bTokenSymbol: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + bTokenSymbol: ADDRESSES.arbitrum.USDC, pool: "0xDE3447Eb47EcDf9B5F90E7A6960a14663916CeE8", v3: true, }, }, era: { futureMain: { - bTokenSymbol: "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4", + bTokenSymbol: ADDRESSES.era.USDC, pool: "0x9F63A5f24625d8be7a34e15477a7d6d66e99582e", v3: true, }, diff --git a/projects/deridex/index.js b/projects/deridex/index.js index 1cd419b751..20af05f2bd 100644 --- a/projects/deridex/index.js +++ b/projects/deridex/index.js @@ -24,6 +24,9 @@ async function tvl() { } module.exports = { + hallmarks: [ + [1675900800, "Project shuts down"] + ], timetravel: false, doublecounted: true, misrepresentedTokens: true, diff --git a/projects/derify/index.js b/projects/derify/index.js index 0ad876e21c..74b92c2dd1 100644 --- a/projects/derify/index.js +++ b/projects/derify/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') module.exports = { bsc: { - tvl: staking('0x75777494496f6250DdB9A1B96a6203e219d3698f', '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56') + tvl: staking('0x75777494496f6250DdB9A1B96a6203e219d3698f', ADDRESSES.bsc.BUSD) } } diff --git a/projects/derivadex/index.js b/projects/derivadex/index.js index 60b5f42a0e..f41ed3fcde 100644 --- a/projects/derivadex/index.js +++ b/projects/derivadex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -13,14 +14,14 @@ const addressList = ["0x6fb8aa6fc6f27e591423009194529ae126660027"]; //TODO: DYNAMICALLY FETCH const tokenAddresses = [ - "0xdac17f958d2ee523a2206206994597c13d831ec7", //usdtAddress: + ADDRESSES.ethereum.USDT, //usdtAddress: "0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9", //cusdtAddress: - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //usdcAddress: + ADDRESSES.ethereum.USDC, //usdcAddress: "0x39aa39c021dfbae8fac545936693ac917d5e7563", //cusdcAddress: "0xdf574c24545e5ffecb9a659c229253d4111d87e1", //husdAddress "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd", //gusdAddress - // "0x0000000000000000000000000000000000000000", // ausdtAddress: - // "0x0000000000000000000000000000000000000000", //ausdcAddress: + // ADDRESSES.null, // ausdtAddress: + // ADDRESSES.null, //ausdcAddress: ]; /*================================================== diff --git a/projects/deversifi/index.js b/projects/deversifi/index.js index 2a47c3f660..995e9b6a37 100644 --- a/projects/deversifi/index.js +++ b/projects/deversifi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {nullAddress, sumTokens2} = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') @@ -12,60 +13,60 @@ const contracts = { const listedTokens = [ nullAddress, - '0xdac17f958d2ee523a2206206994597c13d831ec7', - '0x6B175474E89094C44Da98b954EedeAC495271d0F', + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, '0xd26114cd6EE289AccF82350c8d8487fedB8A0C07', '0x940a2db1b7008b6c776d4faaca729d6d4a4aa551', - '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', - '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + ADDRESSES.ethereum.YFI, + ADDRESSES.ethereum.MKR, + ADDRESSES.ethereum.WBTC, '0xe41d2489571d322189246dafa5ebde1f4699f498', '0xcc80c051057b774cd75067dc48f8987c4eb97a5e', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + ADDRESSES.ethereum.USDC, '0x419d0d8bdd9af5e606ae2232ed285aff190e711b', '0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d', - '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', + ADDRESSES.ethereum.YFI, '0xba100000625a3754423978a60c9317c58a424e3d', - '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', + ADDRESSES.ethereum.UNI, '0xc00e94cb662c3520282e6f5717214004a7f26888', '0xec67005c4e498ec7f55e092bd1d35cbc47c91892', - '0x0d8775f648430679a709e98d2b0cb6250d2887ef', - '0x514910771af9ca656af840dff83e8264ecf986ca', + ADDRESSES.ethereum.BAT, + ADDRESSES.ethereum.LINK, '0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d', - '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f', - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', + ADDRESSES.ethereum.SNX, + ADDRESSES.ethereum.AAVE, '0xeef9f339514298c6a857efcfc1a762af84438dee', '0xa117000000f279d81a1d3cc75430faa017fa5a2e', '0x1494ca1f11d487c2bbe4543e90080aeba4ba3c2b', '0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9', - '0x5a98fcbea516cf06857215779fd812ca3bef1b32', + ADDRESSES.ethereum.LIDO, '0xdddddd4301a082e62e84e43f474f044423921918', '0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d', - '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0', + ADDRESSES.ethereum.MATIC, '0x0a0e3bfd5a8ce610e735d4469bc1b3b130402267', - '0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE', - '0xD533a949740bb3306d119CC777fa900bA034cd52', + ADDRESSES.ethereum.INU, + ADDRESSES.ethereum.CRV, '0x03ab458634910aad20ef5f1c8ee96f1d6ac54919', '0x0391d2021f89dc339f60fff84546ea23e337750f', - '0x2e9d63788249371f1dfc918a52f8d799f4a38c94', + ADDRESSES.ethereum.TOKE, '0x33349b282065b0284d756f0577fb39c158f935e6', '0x767fe9edc9e0df98e07454847909b5e959d7ca0e', '0x25f8087ead173b73d6e8b84329989a8eea16cf73', '0xdddd0e38d30dd29c683033fa0132f868597763ab', - '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', - '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2' + ADDRESSES.ethereum.WSTETH, + ADDRESSES.ethereum.SUSHI ]; const arbitrumTokens = [ nullAddress, - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1' + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.optimism.DAI ]; const polygonTokens = [ nullAddress, - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', - '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063' + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.DAI ]; async function tvl(timestamp, block){ diff --git a/projects/devil-finance/index.js b/projects/devil-finance/index.js index da544d9f2d..627b6ae592 100644 --- a/projects/devil-finance/index.js +++ b/projects/devil-finance/index.js @@ -17,3 +17,5 @@ module.exports = { staking: tvl("native"), }, }; + +module.exports.fantom = { tvl: () => 0} \ No newline at end of file diff --git a/projects/dexfinance/index.js b/projects/dexfinance/index.js index 0fe6df9aa1..c133c7cfbc 100644 --- a/projects/dexfinance/index.js +++ b/projects/dexfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const { ETF_ABI, } = require('./abi'); @@ -17,7 +18,7 @@ const TOKENS = { DEXSHARE: '0xf4914e6d97a75f014acfcf4072f11be5cffc4ca6', DEXIRA: '0x147e07976e1ae78287c33aafaab87760d32e50a5', WDEX_DEXSHARE: '0x6647047433df4cfc9912d092fd155b9d972a4a85', - BNB: '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', + BNB: ADDRESSES.bsc.WBNB, }; const chain = 'bsc' diff --git a/projects/dexilla/index.js b/projects/dexilla/index.js new file mode 100644 index 0000000000..51d677ed50 --- /dev/null +++ b/projects/dexilla/index.js @@ -0,0 +1,49 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + era: { + exchanges: [ + '0xCA2eE260BFA64D8Fb01B1cd75615aAa42D528214', + '0x588450db6e3586Ec0468a7Bb36f1d5f3BbbE2084', + '0x0DE31204e919D71f0E7b9E5766950e99f1017826', + '0x16412BE389278B81594027E77FF9b61b2d200caa', + '0xE0D2833D9ED879D16BfC1cEc3573293770b8abBB', + '0x66831746E2F5a3CfC2A6E2b9eB5Ea8b7dd78Ee6A', + ], + }, + optimism: { + exchanges: [ + '0x189c3f9dcAfe968Be3620cC58274E7c5DF057C7c', + '0x68D05405472C4f0c254A47922Dba9dbC4CFf2bD9', + '0x8F1F6751236855391BbBEDBf4Bf5AD7e383E6e50', + '0xb0BE48F722a8AD727b99064EE18b715e9757e959', + '0x2d10b03854e970d3772434FF1133BCb3E59Ca4b8', + '0x2BF9D7e4173B882335b464e2fB38f5b57768ab61', + '0x44F1C33ED3bf77A5883cBEce1c1b34E71425CE84', + ], + }, + arbitrum: { + exchanges: [ + '0x8ea13d1a455e5c5b425a6fc7260a01265d4c4673', + '0x8C9DBB80f12D0425eAf127FCC1D92FB21Cb4CE4C', + '0x66A724fa0CEB8adfa064afEf5102A2e04E4264c6', + '0x5dD2a1C1Fb25E30928C901a28Ceaf53E59B606dD', + ], + }, +} + +module.exports = { + methodology: 'TVL counts the ERC20 tokens on the exchange contracts.', + start: 1685610580, // June 1, 2023 @ 9:09:40 (UTC +0) +} + +Object.keys(config).forEach(chain => { + const { exchanges } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const baseTokens = await api.multiCall({ abi: 'address:baseToken', calls: exchanges}) + const quoteTokens = await api.multiCall({ abi: 'address:quoteToken', calls: exchanges}) + return sumTokens2({ api, tokensAndOwners: exchanges.map((v, i) => [[baseTokens[i], v], [quoteTokens[i], v ]]).flat()}) + } + } +}) diff --git a/projects/dexit-swap/index.js b/projects/dexit-swap/index.js index 7e98066cc2..d67935e32b 100644 --- a/projects/dexit-swap/index.js +++ b/projects/dexit-swap/index.js @@ -1,3 +1,5 @@ const { uniTvlExport } = require('../helper/unknownTokens') -module.exports = uniTvlExport('dexit', '0xed7e00862c73eF3a53f33d785c62d312Cc8827d2') \ No newline at end of file +module.exports = uniTvlExport('dexit', '0xed7e00862c73eF3a53f33d785c62d312Cc8827d2') + +module.exports.dexit.tvl = () => ({}) \ No newline at end of file diff --git a/projects/dexswap-arbi/index.js b/projects/dexswap-arbi/index.js new file mode 100644 index 0000000000..8b46b8d8fe --- /dev/null +++ b/projects/dexswap-arbi/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + tvl: getUniTVL({ factory: '0x3E40739d8478c58f9B973266974C58998D4F9e8b', useDefaultCoreAssets: true, }), + } +} diff --git a/projects/dexter-tezos/index.js b/projects/dexter-tezos/index.js new file mode 100644 index 0000000000..2aecf25d30 --- /dev/null +++ b/projects/dexter-tezos/index.js @@ -0,0 +1,18 @@ +const { sumTokensExport } = require('../helper/sumTokens') + +module.exports = { + tezos: { + tvl: sumTokensExport({ + owners: [ + 'KT1Puc9St8wdNoGtLiD2WXaHbWU7styaxYhD', + 'KT1Tr2eG3eVmPRbymrbU2UppUmKjFPXomGG9', + 'KT1DrJV8vhkdLEj76h1H9Q4irZDqAkMPo1Qf', + 'KT1BGQR7t4izzKZ7eRodKWTodAsM23P38v7N', + 'KT1Xf2Cwwwh67Ycu7E9yd3UhsABQC4YZPkab', + 'KT1AbYeDbjjcAnV1QK7EZUUdqku77CdkTuv6', + 'KT19c8n5mWrqpxMcR3J687yssHxotj88nGhZ', + 'KT1PDrBE59Zmxnb8vXRgRAG1XmvTMTs5EDHU', + ] + }), + } +} \ No newline at end of file diff --git a/projects/dforce/index.js b/projects/dforce/index.js index 8ffc345c33..8a3d4ed8b1 100644 --- a/projects/dforce/index.js +++ b/projects/dforce/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); @@ -13,11 +14,11 @@ /*================================================== Ethereum Settings ==================================================*/ -const DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; +const DAI = ADDRESSES.ethereum.DAI; const PAX = "0x8E870D67F660D95d5be530380D0eC0bd388289E1"; -const TUSD = "0x0000000000085d4780B73119b644AE5ecd22b376"; -const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; -const USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; +const TUSD = ADDRESSES.ethereum.TUSD; +const USDC = ADDRESSES.ethereum.USDC; +const USDT = ADDRESSES.ethereum.USDT; const USDx = "0xeb269732ab75A6fD61Ea60b06fE994cD32a83549"; /*================================================== @@ -38,10 +39,10 @@ const goldxProtocol = "0x355C665e101B9DA58704A8fDDb5FeeF210eF20c0"; // GOLDx /*================================================== BSC Settings ==================================================*/ -const BSC_BUSD = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const BSC_BUSD = ADDRESSES.bsc.BUSD; const BSC_DAI = "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3"; -const BSC_USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"; -const BSC_USDT = "0x55d398326f99059fF775485246999027B3197955"; +const BSC_USDC = ADDRESSES.bsc.USDC; +const BSC_USDT = ADDRESSES.bsc.USDT; let oracles = { @@ -51,7 +52,8 @@ let oracles = { optimism: "0x4f9312A21F8853384E0f6141F3F9fB855d860161", polygon: "0x9E8B68E17441413b26C2f18e741EAba69894767c", avax: "0x5237d212F9BbC83d91c2cbd810D2b07808d94f08", - kava: "0xe04cea4d02261923769D79Dd24D188C2cB29dB4A" + kava: "0xe04cea4d02261923769D79Dd24D188C2cB29dB4A", + conflux: "0xfd3868B848B5D9eD3583938B4db4746415bD43a3" }; let allControllers = { @@ -72,6 +74,7 @@ let allControllers = { polygon: ["0x52eaCd19E38D501D006D2023C813d7E37F025f37"], avax: ["0x078ad8d6faeD9DAeE55f5d446C80E0C81230DE6b"], kava: ["0xFBf64A8cAEA1D641affa185f850dbBF90d5c84dC"], + conflux: ["0xA377eCF53253275125D0a150aF195186271f6a56"] }; let yieldMarkets = { @@ -140,6 +143,9 @@ const excludeAlliTokens = { ], kava: [ "0x9787af345e765a3fbf0f881c49f8a6830d94a514" // iUSX + ], + conflux: [ + "0x6f87b39a2e36F205706921d81a6861B655db6358" // iUSX ] }; @@ -147,12 +153,13 @@ const excludeAlliTokens = { const dfStakingPools = "0x41602ccf9b1F63ea1d0Ab0F0A1D2F4fd0da53f60"; const USXs = { - "ethereum": "0x0a5e677a6a24b2f1a2bf4f3bffc443231d2fdec8", + "ethereum": ADDRESSES.ethereum.USX, "bsc": "0xb5102cee1528ce2c760893034a4603663495fd72", "arbitrum": "0x641441c631e2f909700d2f41fd87f0aa6a6b4edb", "polygon": "0xCf66EB3D546F0415b368d98A95EAF56DeD7aA752", "avax": "0x853ea32391AaA14c112C645FD20BA389aB25C5e0", - "kava": "0xDb0E1e86B01c4ad25241b1843E407Efc4D615248", + "kava": ADDRESSES.kava.USX, + "conflux": "0x422a86f57b6b6F1e557d406331c25EEeD075E7aA" }; async function getDFStakingValue(block) { @@ -273,6 +280,6 @@ module.exports = { ...chainTvl("ethereum"), staking, }, - ...generalizedChainExports(chainTvl, ["bsc", "arbitrum", "optimism", "polygon", "avax", "kava"]), + ...generalizedChainExports(chainTvl, ["bsc", "arbitrum", "optimism", "polygon", "avax", "kava", "conflux"]), start: 1564165044, // Jul-27-2019 02:17:24 AM +UTC } diff --git a/projects/dfx/contracts.json b/projects/dfx/contracts.json deleted file mode 100644 index 8b0ccb1ca0..0000000000 --- a/projects/dfx/contracts.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "usdc": { - "ethereum": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "polygon": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174" - }, - "ethereum": [ - { - "address": "0xa6c0cbcaebd93ad3c6c94412ec06aaa37870216d", - "token": "0xcadc0acd4b445166f12d2c07eac6e2544fbe2eef" - }, - { - "address": "0x1a4ffe0dcbdb4d551cfca61a5626afd190731347", - "token": "0xdb25f211ab05b1c97d595516f45794528a807ad8" - }, - { - "address": "0x2bab29a12a9527a179da88f422cdaaa223a90bd5", - "token": "0x70e8de73ce538da2beed35d14187f6959a8eca96" - }, - { - "address": "0xdD39379AB7C93b9bAAE29E6eC03795d0bC99a889", - "token": "0xebf2096e01455108badcbaf86ce30b6e5a72aa52" - }, - { - "address": "0xE9669516e09f5710023566458F329cCE6437AaaC", - "token": "0xda446fad08277b4d2591536f204e018f32b6831c", - "currency": "NZDS" - }, - { - "address": "0xC574A613A3900e4314da13eB2287f13689A5b64D", - "token": "0x2c537e5624e4af88a7ae4060c022609376c8d0eb", - "currency": "TRYb" - }, - { - "address": "0x66310ec13f36CAf5532c32B4359760592Db835Ab", - "token": "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c", - "currency": "EUROC" - }, - { - "address": "0x57BC10876fEbdC57f0ABb8C82ffAE600eEcc03A2", - "token": "0xC08512927D12348F6620a698105e1BAac6EcD911", - "currency": "GYEN" - }, - { - "address": "0xF3d7AA346965656E7c65FB4135531e0C2270AF83", - "token": "0xcadc0acd4b445166f12d2c07eac6e2544fbe2eef" - }, - { - "address": "0x9a6c7ae10eb82a0d7dc3c296ecbc2e2bdc53e80b", - "token": "0x70e8de73ce538da2beed35d14187f6959a8eca96" - }, - { - "address": "0x46161158b1947d9149e066d6d31af1283b2d377c", - "token": "0xebf2096e01455108badcbaf86ce30b6e5a72aa52" - }, - { - "address": "0x764a5A29f982D3513e76fe07dF2034821fBdba72", - "token": "0xda446fad08277b4d2591536f204e018f32b6831c", - "currency": "NZDS" - }, - { - "address": "0xcF3c8f51DE189C8d5382713B716B133e485b99b7", - "token": "0x2c537e5624e4af88a7ae4060c022609376c8d0eb", - "currency": "TRYb" - }, - { - "address": "0x477658494c3541ba272a7120176d77674a0183ba", - "token": "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c", - "currency": "EUROC" - }, - { - "address": "0x63cb0f59b7e67c7d4cb96214ca456597d85c587d", - "token": "0xC08512927D12348F6620a698105e1BAac6EcD911", - "currency": "GYEN" - }, - { - "address": "0xDA9dcc7fd51F0D9Aa069a82647A5F3ba594edAED", - "token": "0xcadc0acd4b445166f12d2c07eac6e2544fbe2eef" - }, - { - "address": "0xACC5Dca0B684f444bC6b4be30B95Ca7D928A4B9c", - "token": "0x70e8de73ce538da2beed35d14187f6959a8eca96" - }, - { - "address": "0xb7dB2F8d25C51A26799bE6765720c3C6D84CD2f2", - "token": "0xebf2096e01455108badcbaf86ce30b6e5a72aa52" - }, - { - "address": "0xc147cee0F6BB0e56240868c9f53aE916D3b86073", - "token": "0xda446fad08277b4d2591536f204e018f32b6831c", - "currency": "NZDS" - }, - { - "address": "0x38F818fCd57F8A1782bBCC1C90CB0FD03e7f0bd1", - "token": "0x2c537e5624e4af88a7ae4060c022609376c8d0eb", - "currency": "TRYb" - }, - { - "address": "0x8cd86fbC94BeBFD910CaaE7aE4CE374886132c48", - "token": "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c", - "currency": "EUROC" - }, - { - "address": "0x9aFD65013770525E43a84e49c87B3015C2C32517", - "token": "0xC08512927D12348F6620a698105e1BAac6EcD911", - "currency": "GYEN" - } - ], - "polygon": [ - { - "address": "0x288Ab1b113C666Abb097BB2bA51B8f3759D7729e", - "token": "0x5d146d8b1dacb1ebba5cb005ae1059da8a1fbf57", - "currency": "CADC" - }, - { - "address": "0xB72d390E07F40D37D42dfCc43E954Ae7c738Ad44", - "token": "0xe111178a87a3bff0c8d18decba5798827539ae99", - "currency": "EURS" - }, - { - "address": "0x8e3e9cB46E593Ec0CaF4a1Dcd6DF3A79a87b1fd7", - "token": "0x769434dca303597c8fc4997bf3dab233e961eda2", - "currency": "XSGD" - }, - { - "address": "0xea75cd0b12a8b48f5bddad37ceb15f8cb3d2cc75", - "token": "0x4fb71290ac171e1d144f7221d882becac7196eb5", - "currency": "TRYb" - }, - { - "address": "0x931d6a6cc3f992beee80a1a14a6530d34104b000", - "token": "0xeafe31cd9e8e01c8f0073a2c974f728fb80e9dce", - "currency": "NZDs" - }, - { - "address": "0xbe9fa3E654A1bf8fe740E9d930D595f31Fce1aE2", - "token": "0x9de41aFF9f55219D5bf4359F167d1D0c772A396D", - "currency": "CADC" - }, - { - "address": "0x7e4a73278d6e578af34faaaba76ed29583ac0341", - "token": "0xe111178a87a3bff0c8d18decba5798827539ae99", - "currency": "EURS" - }, - { - "address": "0x8c6eb8c26f166f87b4f886ce07116a823805602c", - "token": "0xDC3326e71D45186F113a2F448984CA0e8D201995", - "currency": "XSGD" - }, - { - "address": "0x17f8ddcea03a8972559a8d32874e144c87baf5b6", - "token": "0x4fb71290ac171e1d144f7221d882becac7196eb5", - "currency": "TRYb" - }, - { - "address": "0xefac71536feBE220D0Bb5128AeBBD1e3df2a1e67", - "token": "0xeafe31cd9e8e01c8f0073a2c974f728fb80e9dce", - "currency": "NZDs" - }, - { - "address": "0x6691FA63aa1d7E422Dc5D19C9B04F25909fdE966", - "token": "0x9de41aFF9f55219D5bf4359F167d1D0c772A396D", - "currency": "CADC" - }, - { - "address": "0x2385D7aB31F5a470B1723675846cb074988531da", - "token": "0xe111178a87a3bff0c8d18decba5798827539ae99", - "currency": "EURS" - }, - { - "address": "0xBc408da6A7237682c8672eF7a66AFF09a9069b15", - "token": "0xDC3326e71D45186F113a2F448984CA0e8D201995", - "currency": "XSGD" - }, - { - "address": "0xAAb708fBd208Ac262821E229ded16234277b2B13", - "token": "0x4fb71290ac171e1d144f7221d882becac7196eb5", - "currency": "TRYb" - } - ] -} diff --git a/projects/dfx/index.js b/projects/dfx/index.js index 7a8eb53eeb..1c7c14db36 100644 --- a/projects/dfx/index.js +++ b/projects/dfx/index.js @@ -1,50 +1,34 @@ -const sdk = require("@defillama/sdk"); -const { transformPolygonAddress } = require("../helper/portedTokens"); -const contracts = require('./contracts.json'); +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') -// node test.js projects/dfx/index.js -function tvl(chain) { - return async (timestamp, block, chainBlocks) => { - const transform = - chain == "polygon" ? await transformPolygonAddress() : (a) => a; - const balances = {}; - - const [tokenBalances, usdcBalances] = await Promise.all([ - sdk.api.abi.multiCall({ - calls: contracts[chain].map((c) => ({ - target: c.token, - params: [c.address], - })), - abi: "erc20:balanceOf", - block: chainBlocks[chain], - chain, - }), - - sdk.api.abi.multiCall({ - calls: contracts[chain].map((c) => ({ - target: contracts.usdc[chain], - params: [c.address], - })), - abi: "erc20:balanceOf", - block: chainBlocks[chain], - chain, - }), - ]); - - await Promise.all([ - sdk.util.sumMultiBalanceOf(balances, tokenBalances, true, transform), - sdk.util.sumMultiBalanceOf(balances, usdcBalances, true, transform), - ]); +module.exports = { + hallmarks: [[1667955600, "Hack"]], +}; - return balances; - }; +const config = { + arbitrum: { factory: "0x9544995B5312B26acDf09e66E699c34310b7c856", fromBlock: 65832059 }, + ethereum: { factory: "0x9adeac3b6d29d9d5e543b8579e803a7cce72c9cd", fromBlock: 16607851 }, + polygon: { factory: "0x3591040cE5dF8828b3Ed4Ec39D030F832d43fD53", fromBlock: 39183403 }, } -module.exports = { - ethereum: { - tvl: tvl("ethereum"), - }, - polygon: { - tvl: tvl("polygon"), - }, -}; +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xe7a19de9e8788cc07c144818f2945144acd6234f790b541aa1010371c8b2a73b'], + eventAbi: 'event NewCurve (address indexed caller, bytes32 indexed id, address indexed curve)', + onlyArgs: true, + fromBlock, + }) + let pools = logs.map(log => log.curve) + if (chain === 'arbitrum') pools = pools.slice(1) + const calls = pools.map(pool => [{ target: pool, params: 0 }, { target: pool, params: 1 }]).flat() + const tokens = await api.multiCall({ abi: 'function numeraires(uint256) view returns (address)', calls }) + const tokensAndOwners = tokens.map((token, i) => [token, pools[Math.floor(i / 2)]]) + return sumTokens2({ api, tokensAndOwners, }) + } + } +}) \ No newline at end of file diff --git a/projects/dhedge.js b/projects/dhedge.js index b130308f8b..e4364d3f88 100644 --- a/projects/dhedge.js +++ b/projects/dhedge.js @@ -1,64 +1,99 @@ -const utils = require('./helper/utils'); -const { GraphQLClient, } = require('graphql-request'); - -/* * * * * * * * - * ==> Correct adapter needs to be created. - * - *****************/ - -const STATS_URL = 'https://us-central1-dh-alpha.cloudfunctions.net/stats'; - -async function fetch() { - var totalTvl = await utils.fetchURL(STATS_URL); - return totalTvl.data.protocolStats.totalAssetUnderManagement; -} - -async function ethereum() { - var totalTvl = await utils.fetchURL(STATS_URL); - return totalTvl.data.protocolStats.ethereum.totalAumEthereum; -} - -async function polygon() { - var totalTvl = await utils.fetchURL(STATS_URL); - return totalTvl.data.protocolStats.polygon.totalAumPolygon; -} - -async function optimism() { - var totalTvl = await utils.fetchURL(STATS_URL); - return totalTvl.data.protocolStats.optimism.totalAumOptimism; -} - -async function staking() { - var endpoint = 'https://api.thegraph.com/subgraphs/name/dhedge/dht-staking'; - var graphQLClient = new GraphQLClient(endpoint); - - var query = ` - { - stakingContracts { - id - balance - } - } - `; - - const data = await graphQLClient.request(query); - const balance = data.stakingContracts[0].balance; +/* *** Common config *** */ +const { sliceIntoChunks } = require("@defillama/sdk/build/util"); + +const DHEDGE_FACTORY_PROXIES = { + ethereum: "0x03D20ef9bdc19736F5e8Baf92D02C8661a5941F7", + polygon: "0xfdc7b8bFe0DD3513Cc669bB8d601Cb83e2F69cB0", + optimism: "0x5e61a079A178f0E5784107a4963baAe0c5a680c6", +}; + +/* *** dHEDGE V1 *** */ + +const DHEDGE_V1_VAULTS_QUANTITY_ABI = + "function deployedFundsLength() view returns (uint256)"; +const DHEDGE_V1_VAULTS_ABI = + "function deployedFunds(uint256) view returns (address)"; +const DHEDGE_V1_TVL_ABI = "function totalFundValue() view returns (uint256)"; + +const getV1TotalValueLocked = async (_, __, ___, { api, chain }) => { + const target = DHEDGE_FACTORY_PROXIES[chain]; + const vaults = await api.fetchList({ lengthAbi: DHEDGE_V1_VAULTS_QUANTITY_ABI, itemAbi: DHEDGE_V1_VAULTS_ABI, target, }); + const vaultsValues = await api.multiCall({ abi: DHEDGE_V1_TVL_ABI, calls: vaults, permitFailure: true, }); + const totalValueLocked = vaultsValues.reduce((acc, value) => acc + +(value ?? 0), 0); return { - 'dhedge-dao': balance / 10 ** 18 + tether: totalValueLocked / 1e18, + }; +}; + +/* *** dHEDGE V2 *** */ + +const DHEDGE_V2_VAULTS_ABI = + "function getDeployedFunds() view returns (address[])"; +const DHEDGE_V2_VAULT_SUMMARY_ABI = + "function getFundSummary() view returns (tuple(string name, uint256 totalSupply, uint256 totalFundValue))"; + +const tvl = async (_, __, ___, { api, chain }) => { + const target = DHEDGE_FACTORY_PROXIES[chain]; + const vaults = await api.call({ abi: DHEDGE_V2_VAULTS_ABI, target, }) + let chunkSize = chain === 'optimism' ? 42 : 51 // Optimism has a lower gas limit + const vaultChunks = sliceIntoChunks(vaults, chunkSize); + const summaries = []; + for (const chunk of vaultChunks) { + summaries.push(...await api.multiCall({ abi: DHEDGE_V2_VAULT_SUMMARY_ABI, calls: chunk, permitFailure: true, })) } -} + const totalValueLocked = summaries.reduce((acc, vault) => acc + +(vault?.totalFundValue ?? 0), 0); + return { + tether: totalValueLocked / 1e18, + }; +}; + +/* *** DHT Staking V1 *** */ + +const DHT_STAKING_V1_PROXY = "0xEe1B6b93733eE8BA77f558F8a87480349bD81F7f"; +const DHT_ON_MAINNET = "0xca1207647Ff814039530D7d35df0e1Dd2e91Fa84"; + +const getV1StakingTotalAmount = async (_, __, ___, { api }) => ({ + [DHT_ON_MAINNET]: await api.call({ + abi: "erc20:balanceOf", + target: DHT_ON_MAINNET, + params: [DHT_STAKING_V1_PROXY], + }), +}); + +/* *** DHT Staking V2 *** */ + +const DHT_STAKED_ABI = "function dhtStaked() view returns (uint256)"; +const DHT_STAKING_V2_PROXY = "0xf165ca3d75120d817b7428eef8c39ea5cb33b612"; +const DHT_ON_OPTIMISM = "optimism:0xaf9fe3b5ccdae78188b1f8b9a49da7ae9510f151"; + +const getV2StakingTotalAmount = async (_, __, ___, { api }) => ({ + [DHT_ON_OPTIMISM]: await api.call({ + abi: DHT_STAKED_ABI, + target: DHT_STAKING_V2_PROXY, + }), +}); + +/* *** Exports *** */ module.exports = { ethereum: { - fetch: ethereum, - staking, + tvl: getV1TotalValueLocked, + staking: getV1StakingTotalAmount, }, polygon: { - fetch: polygon, + tvl, }, optimism: { - fetch: optimism, + tvl, + staking: getV2StakingTotalAmount, }, - fetch, + misrepresentedTokens: true, + methodology: "Aggregates total value of each dHEDGE vault ever created", + hallmarks: [ + [1627693200, "dHEDGE V2 Launch"], + [1639616400, "Optimism Launch"], + [1674003600, "Optimism Incentives Start"], + [1679965200, "DHT Staking V2 Release"], + ], }; diff --git a/projects/diamond-unibot-v2/index.js b/projects/diamond-unibot-v2/index.js index 5da0ac984c..8e97c7ad9c 100644 --- a/projects/diamond-unibot-v2/index.js +++ b/projects/diamond-unibot-v2/index.js @@ -1,14 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getLogs, getAddress } = require("../helper/cache/getLogs"); const { sumTokens2 } = require("../helper/unwrapLPs"); const config = { arbitrum: { lendingPools: [ [ - "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + ADDRESSES.arbitrum.WETH, "0xedd1efa76fe59e9106067d824b89b59157c5223c", ], // WETH [ - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + ADDRESSES.arbitrum.USDC, "0xFEaDE428e2Fe0F547d560B540a7617087505538B", ], // USDC [ @@ -19,8 +20,8 @@ const config = { vaults: [ [ [ - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC - "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a", // GMX + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.GMX, // GMX "0x912ce59144191c1204e64559fe8253a0e49e6548", // ARB ], "0x8610D60f5329B0560c8F0CEb80175F342fe943F3", // vault @@ -31,19 +32,19 @@ const config = { polygon: { lendingPools: [ [ - "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + ADDRESSES.polygon.WETH_1, "0x8610D60f5329B0560c8F0CEb80175F342fe943F3", ], // WETH [ - "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + ADDRESSES.polygon.WMATIC_2, "0xEdD1efA76fe59e9106067D824b89B59157C5223C", ], // WMATIC ], vaults: [ [ [ - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", // USDC - "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", // WETH + ADDRESSES.polygon.USDC, // USDC + ADDRESSES.polygon.WETH_1, // WETH ], "0xD576bE0d3CC1c0184d1ea3F1778A4A9Dec523859", // vault ], diff --git a/projects/diamond/index.js b/projects/diamond/index.js index 9a4df39cf6..c2fb34ce3d 100644 --- a/projects/diamond/index.js +++ b/projects/diamond/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens2 } = require('../helper/unwrapLPs') @@ -9,19 +10,19 @@ const ETH_BULL_VAULT = "0xad48a8261b0690c71b70115035eb14afd9a43242"; // Optimism const BASIS_TRADING_VAULT = "0xD576bE0d3CC1c0184d1ea3F1778A4A9Dec523859"; -const OPT_USDC = "0x7F5c764cBc14f9669B88837ca1490cCa17c31607"; +const OPT_USDC = ADDRESSES.optimism.USDC; // Arbitrum const DMO_LENDING_POOL = "0x4c51FF6AF2EfC679A08C5A7377Bce18050f86CcB"; const DMO_FACTORY = "0xcd8d2e1fa4132749220ffeec165285ee33028d59"; const DMO_FARM = "0x4a127cB6806E869bf61A6de9db76dabE46A837D3"; const DMO_FARM_ACTION = "0x4Ec4e76c11E2182918a80822df114DB03048388b"; -const ARB_WETH = "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"; -const ARB_USDC = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"; +const ARB_WETH = ADDRESSES.arbitrum.WETH; +const ARB_USDC = ADDRESSES.arbitrum.USDC; async function ethTvl(_, block) { return { - 'ethereum:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2': ( + ['ethereum:' + ADDRESSES.ethereum.WETH]: ( await sdk.api.abi.call({ target: ETH_BULL_VAULT, block, diff --git a/projects/diffusionfi/index.js b/projects/diffusionfi/index.js index 24c69ab423..527a62e888 100644 --- a/projects/diffusionfi/index.js +++ b/projects/diffusionfi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { stakingUnknownPricedLP } = require("../helper/staking"); @@ -7,6 +8,6 @@ module.exports = { "Factory address (0x6abdda34fb225be4610a2d153845e09429523cd2) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", evmos: { tvl: getUniTVL({ factory: '0x6abdda34fb225be4610a2d153845e09429523cd2', chain: 'evmos', useDefaultCoreAssets: true }), - staking: stakingUnknownPricedLP('0x75aeE82a16BD1fB98b11879af93AB7CE055f66Da', '0x3f75ceabcdfed1aca03257dc6bdc0408e2b4b026', "evmos", "0x5b575e84e4921A93D57301cB75C9635BA12D50e2") + staking: stakingUnknownPricedLP('0x75aeE82a16BD1fB98b11879af93AB7CE055f66Da', ADDRESSES.evmos.DIFF, "evmos", "0x5b575e84e4921A93D57301cB75C9635BA12D50e2") }, }; // node test.js projects/diffusionfi/index.js \ No newline at end of file diff --git a/projects/dinosaur-finance/index.js b/projects/dinosaur-finance/index.js index 198a1b20b7..ee0068e012 100644 --- a/projects/dinosaur-finance/index.js +++ b/projects/dinosaur-finance/index.js @@ -21,6 +21,9 @@ async function tvl(_, _b, _c, { api }) { } module.exports = { + hallmarks: [ + [1675814400, "Rug Pull"] + ], arbitrum: { tvl, } diff --git a/projects/dinoswap/index.js b/projects/dinoswap/index.js index 504283ec06..49852da56e 100644 --- a/projects/dinoswap/index.js +++ b/projects/dinoswap/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json"); const {masterChefExports} = require('../helper/masterchef'); const MASTERCHEF_CONTRACT = "0x1948abC5400Aa1d72223882958Da3bec643fb4E5"; -const token = "0xAa9654BECca45B5BDFA5ac646c939C62b527D394"; +const token = ADDRESSES.polygon.DINO; module.exports = { misrepresentedTokens: true, diff --git a/projects/dinotopia/abi.json b/projects/dinotopia/abi.json new file mode 100644 index 0000000000..fa91e9331c --- /dev/null +++ b/projects/dinotopia/abi.json @@ -0,0 +1,8 @@ +{ + "bank": { + "usableBnbBalance": "uint256:usableCollateralBalance" + }, + "multiFeeDistribution": { + "totalSupply": "uint256:totalSupply" + } +} \ No newline at end of file diff --git a/projects/dinotopia/index.js b/projects/dinotopia/index.js new file mode 100644 index 0000000000..1598163f84 --- /dev/null +++ b/projects/dinotopia/index.js @@ -0,0 +1,31 @@ +const Abis = require("./abi.json"); +const { sumTokensExport, sumUnknownTokens, } = require('../helper/unknownTokens') + +const Contracts = { + bsc: { + wbnb: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + brx: "0xe550c560a895d043E5EEd2bC7eC8A8e46c2408D6", + fossil: "0xfE8FFB60a2B6d46102caa35739Be465E600D0f5E", + bank: "0xF90c0b409001b97067c539693754008456f6C265", + multiFeeDistribution: "0xd1f2467b2E2cb7bABc5CE8a947A294f216D93F90", + chef: "0xF59e1568cb5FA1cdf1f4233D738D802A90c64B5E", + lps: [ + "0x9bB50fE7E33C15405f94978A5bb88F8544847007", // FOSSIL_BNB_LP + "0x5Ff686208DFe12D35761fe9C74396852303BC377", // BRX_BNB_LP + ], + }, +}; + +async function calcBscStakingTvl(timestamp, ethBlock, chainBlocks, {api}) { + const bscStakingData = await api.call({ target: Contracts.bsc.multiFeeDistribution, abi: Abis.multiFeeDistribution.totalSupply, }); + api.add(Contracts.bsc.fossil, bscStakingData) + return sumUnknownTokens({ api, useDefaultCoreAssets: true, lps: Contracts.bsc.lps, }) +} + +module.exports = { + bsc: { + tvl: sumTokensExport({ owner: Contracts.bsc.bank, tokens: [Contracts.bsc.wbnb] }), + pool2: sumTokensExport({ owner: Contracts.bsc.chef, tokens: Contracts.bsc.lps, useDefaultCoreAssets: true, }), + staking: calcBscStakingTvl, + }, +}; \ No newline at end of file diff --git a/projects/diosfinance/index.js b/projects/diosfinance/index.js index 60ee93cfd4..77b30053dd 100644 --- a/projects/diosfinance/index.js +++ b/projects/diosfinance/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const dios = "0x08eEcF5d03bDA3dF2467F6AF46b160c24D931DE7"; const diosStaking = "0x36c8a6E7436EDd850752E09539a519a369D95096"; const treasury = "0x98eE3F3629aCFA6fDDB49028C494030E5dFA349a"; -const busd = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const busd = ADDRESSES.bsc.BUSD; const diosBusdLP = "0x2D7A5e9d85F62ADbaea9d48B11F5947F3AC57FC8"; module.exports = { diff --git a/projects/direct-exchange/index.js b/projects/direct-exchange/index.js new file mode 100644 index 0000000000..f0ee996735 --- /dev/null +++ b/projects/direct-exchange/index.js @@ -0,0 +1,7 @@ +const { getUniTVL } = require('../helper/unknownTokens') +module.exports = { + misrepresentedTokens: true, + kava: { + tvl: getUniTVL({ factory: '0xcE08c3d20Ff00a9Cf0D28922768bD606592B5D4C', fetchBalances: true, useDefaultCoreAssets: true, }) + }, +} diff --git a/projects/djed-alliance/abi.json b/projects/djed-alliance/abi.json new file mode 100644 index 0000000000..cd51a2c3c9 --- /dev/null +++ b/projects/djed-alliance/abi.json @@ -0,0 +1,5 @@ +{ + "Djed": { + "reserve": "function R(uint256 cpa) view returns (uint256 balance)" + } +} \ No newline at end of file diff --git a/projects/djed-alliance/config.json b/projects/djed-alliance/config.json new file mode 100644 index 0000000000..a3a6b9ecdc --- /dev/null +++ b/projects/djed-alliance/config.json @@ -0,0 +1,10 @@ +{ + "djedAddress": { + "milkomeda": "0x67A30B399F5Ed499C1a6Bc0358FA6e42Ea4BCe76", + "milkomeda_a1": "0x..." + }, + "reserveTokenAddress": { + "milkomeda": "0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9", + "milkomeda_a1": "0x..." + } +} \ No newline at end of file diff --git a/projects/djed-alliance/index.js b/projects/djed-alliance/index.js new file mode 100644 index 0000000000..523cd3d1fb --- /dev/null +++ b/projects/djed-alliance/index.js @@ -0,0 +1,37 @@ +const sdk = require('@defillama/sdk'); +const utils = require('../helper/utils'); +const { sumTokensExport } = require("../helper/chain/cardano"); +const { transformBalances } = require('../helper/portedTokens'); + +const abi = require('./abi.json'); +const config = require("./config.json"); + +async function tvl(chain, chainBlocks) { + const balances = {}; + + const reserve = (await sdk.api.abi.call({ + abi: abi.Djed.reserve, chain: chain, target: config.djedAddress[chain], params: [ 0 ], block: chainBlocks[chain], + })).output; + + sdk.util.sumSingleBalance(balances, config.reserveTokenAddress[chain], reserve); // Using WADA address instead of mADA + return transformBalances(chain, balances); +} + +async function ergotvl() { + const {data: { confirmed }} = await utils.fetchURL('https://api.ergoplatform.com/api/v1/addresses/MUbV38YgqHy7XbsoXWF5z7EZm524Ybdwe5p9WDrbhruZRtehkRPT92imXer2eTkjwPDfboa1pR3zb3deVKVq3H7Xt98qcTqLuSBSbHb7izzo5jphEpcnqyKJ2xhmpNPVvmtbdJNdvdopPrHHDBbAGGeW7XYTQwEeoRfosXzcDtiGgw97b2aqjTsNFmZk7khBEQywjYfmoDc9nUCJMZ3vbSspnYo3LarLe55mh2Np8MNJqUN9APA6XkhZCrTTDRZb1B4krgFY1sVMswg2ceqguZRvC9pqt3tUUxmSnB24N6dowfVJKhLXwHPbrkHViBv1AKAJTmEaQW2DN1fRmD9ypXxZk8GXmYtxTtrj3BiunQ4qzUCu1eGzxSREjpkFSi2ATLSSDqUwxtRz639sHM6Lav4axoJNPCHbY8pvuBKUxgnGRex8LEGM8DeEJwaJCaoy8dBw9Lz49nq5mSsXLeoC4xpTUmp47Bh7GAZtwkaNreCu74m9rcZ8Di4w1cmdsiK1NWuDh9pJ2Bv7u3EfcurHFVqCkT3P86JUbKnXeNxCypfrWsFuYNKYqmjsix82g9vWcGMmAcu5nagxD4iET86iE2tMMfZZ5vqZNvntQswJyQqv2Wc6MTh4jQx1q2qJZCQe4QdEK63meTGbZNNKMctHQbp3gRkZYNrBtxQyVtNLR8xEY8zGp85GeQKbb37vqLXxRpGiigAdMe3XZA4hhYPmAAU5hpSMYaRAjtvvMT3bNiHRACGrfjvSsEG9G2zY5in2YWz5X9zXQLGTYRsQ4uNFkYoQRCBdjNxGv6R58Xq74zCgt19TxYZ87gPWxkXpWwTaHogG1eps8WXt8QzwJ9rVx6Vu9a5GjtcGsQxHovWmYixgBU8X9fPNJ9UQhYyAWbjtRSuVBtDAmoV1gCBEPwnYVP5GCGhCocbwoYhZkZjFZy6ws4uxVLid3FxuvhWvQrVEDYp7WRvGXbNdCbcSXnbeTrPMey1WPaXX/balance/total'); + return { ergo: confirmed.nanoErgs / 1e9 }; +} + +module.exports = { + methodology: 'The TVL of each Djed deployment is the reserve belonging to the deployment. The TVL within a given blockchain is the sum of the TVLs of all known Djed deployments within that blockchain. The total TVL is the sum of the Djed TVLs on all blockchains.', + /*ergo:{ //has its own listing under sigmaUSD + tvl: ergotvl + },*/ + cardano: { + tvl: sumTokensExport({ owner: 'addr1z9s3v9vyyctzr4xagvrayw87yvzre6qcq7qw2uvqfznf92qm5kjdmrpmng059yellupyvwgay2v0lz6663swmds7hp0q2jjlf4', tokens: ['lovelace']}), + }, + /*milkomeda: { + start: 10440400, + tvl: (timestamp, block, chainBlocks) => tvl('milkomeda', chainBlocks) + },*/ +}; diff --git a/projects/djed/index.js b/projects/djed/index.js deleted file mode 100644 index 91543ce42d..0000000000 --- a/projects/djed/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const { sumTokensExport } = require("../helper/chain/cardano"); - -module.exports = { - timetravel: false, - cardano: { - tvl: sumTokensExport({ owner: 'addr1z9s3v9vyyctzr4xagvrayw87yvzre6qcq7qw2uvqfznf92qm5kjdmrpmng059yellupyvwgay2v0lz6663swmds7hp0q2jjlf4', tokens: ['lovelace']}), - }, -}; diff --git a/projects/dmmexchange/abi.json b/projects/dmmexchange/abi.json deleted file mode 100644 index 90fece27dd..0000000000 --- a/projects/dmmexchange/abi.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "allPools": "function allPools(uint256) view returns (address)", - "allPoolsLength": "uint256:allPoolsLength", - "token0": "address:token0", - "token1": "address:token1", - "getReserves": "function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)" -} \ No newline at end of file diff --git a/projects/dmmexchange/index.js b/projects/dmmexchange/index.js deleted file mode 100644 index 18776a21c8..0000000000 --- a/projects/dmmexchange/index.js +++ /dev/null @@ -1,69 +0,0 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); - -const factory = "0x833e4083B7ae46CeA85695c4f7ed25CDAd8886dE"; - -const ethTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - const poolLength = Number( - ( - await sdk.api.abi.call({ - target: factory, - abi: abi.allPoolsLength, - block: ethBlock, - }) - ).output - ); - - const allPoolNums = Array.from(Array(poolLength).keys()); - - const poolAddresses = ( - await sdk.api.abi.multiCall({ - abi: abi.allPools, - calls: allPoolNums.map((num) => ({ - target: factory, - params: [num], - })), - block: ethBlock, - }) - ).output.map((el) => el.output); - - for (let i = 0; i < poolAddresses.length; i++) { - const token0 = ( - await sdk.api.abi.call({ - target: poolAddresses[i], - abi: abi.token0, - block: ethBlock, - }) - ).output; - - const token1 = ( - await sdk.api.abi.call({ - target: poolAddresses[i], - abi: abi.token1, - block: ethBlock, - }) - ).output; - - const getReserves = ( - await sdk.api.abi.call({ - target: poolAddresses[i], - abi: abi.getReserves, - block: ethBlock, - }) - ).output; - - sdk.util.sumSingleBalance(balances, token0, getReserves[0]); - - sdk.util.sumSingleBalance(balances, token1, getReserves[1]); - } - - return balances; -}; - -module.exports = { - ethereum: { - tvl: ethTvl, - }, -}; diff --git a/projects/dnadollar/index.js b/projects/dnadollar/index.js index ec23707840..7e31143336 100644 --- a/projects/dnadollar/index.js +++ b/projects/dnadollar/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -6,8 +7,8 @@ const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const treasuryContract = "0x1420287565FD5Ebec8FbD720c17Cd911600449d3"; const FundDAO = "0x3e1Aa19FA59c9B474f6d2F37976a84DeD64af4Bf"; -const USDT = "0x66e428c3f67a68878562e79a0234c1f83c208770"; -const USDC = "0xc21223249ca28397b4b6541dffaecc539bff0c59"; +const USDT = ADDRESSES.cronos.USDT; +const USDC = ADDRESSES.cronos.USDC; const USDC_DSHARE_meerkatLP = "0xFe0F0d50175789C1F69B41dB797cc9ABd8Ab0120"; const DShareRewardPool = "0x1A4bb8E03C35e2B672A0fcE18cab920aa023d7FC"; diff --git a/projects/dogedollar/index.js b/projects/dogedollar/index.js new file mode 100644 index 0000000000..2cebc693c7 --- /dev/null +++ b/projects/dogedollar/index.js @@ -0,0 +1,15 @@ +const { sumTokensExport, nullAddress, } = require("../helper/unwrapLPs"); + +const DJED_ADDR = '0xA99ef299CdA10AC4Ec974370778fbd27Cfb5CF61' + +module.exports = { + methodology: 'finds the DOGE balance of the DJED instance backing the stablecoin, aswell as the fallback stablecoin balance', + start: 14576300, + dogechain: { + tvl: sumTokensExport({ + tokensAndOwners: [ + [nullAddress, DJED_ADDR], + ] + }), + } +}; diff --git a/projects/dokidoki/index.js b/projects/dokidoki/index.js index 128207d446..e851b81d45 100644 --- a/projects/dokidoki/index.js +++ b/projects/dokidoki/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs, sumTokens2 } = require("../helper/unwrapLPs"); @@ -42,11 +43,11 @@ const ethPool2LPs = [ const ethPools = [ { pool: "0xb3a2AF499aF8f717BB3431968f8e0b038C975686", - token: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + token: ADDRESSES.ethereum.WBTC, }, // WBTC { pool: "0xde846827cE3022EcD5eFD6ed316a2dEf9AB299B8", - token: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + token: ADDRESSES.ethereum.WETH, }, // WETH ]; diff --git a/projects/dolomite/index.js b/projects/dolomite/index.js index f02d934a66..abc3874404 100644 --- a/projects/dolomite/index.js +++ b/projects/dolomite/index.js @@ -3,17 +3,23 @@ const { getMarketTokenAddress, getMarketTotalPar, } = require("./dolomite-margin.json"); -const { sumTokens2 } = require('../helper/unwrapLPs') const dolomiteMargin = "0x6bd780e7fdf01d77e4d475c821f1e7ae05409072"; async function getTokensAndBalances(api, supplyOrBorrow) { const tokens = await api.fetchList({ lengthAbi: getNumMarkets, itemAbi: getMarketTokenAddress, target: dolomiteMargin }) - if (supplyOrBorrow === 'supply') - return sumTokens2({ owner: dolomiteMargin, api, tokens }) + const underlyingTokens = await api.multiCall({ abi: 'address:UNDERLYING_TOKEN', calls: tokens, permitFailure: true, }) + let bals + if (supplyOrBorrow === 'supply') { + bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: tokens.map(i => ({ target: i, params: dolomiteMargin })), }) - const res = await api.fetchList({ lengthAbi: getNumMarkets, itemAbi: getMarketTotalPar, target: dolomiteMargin }) - res.forEach((v, i) => api.addToken(tokens[i], v.borrow)) + } else { + const res = await api.fetchList({ lengthAbi: getNumMarkets, itemAbi: getMarketTotalPar, target: dolomiteMargin }) + bals = res.map(i => i.borrow) + } + tokens.forEach((v, i) => { + api.add(underlyingTokens[i] ?? v, bals[i]) + }) } async function tvl(timestamp, ethereumBlock, blocksToKeys, { api }) { diff --git a/projects/domfi/registry.js b/projects/domfi/registry.js index 290a7da0b1..7ad610ecfe 100644 --- a/projects/domfi/registry.js +++ b/projects/domfi/registry.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') -const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; +const ZERO_ADDRESS = ADDRESSES.null; const Chain = { ETHEREUM: 'ethereum', @@ -8,9 +9,9 @@ const Chain = { } const usdc = { - [Chain.ETHEREUM]: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - [Chain.POLYGON]: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - [Chain.BOBA]: "0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc", + [Chain.ETHEREUM]: ADDRESSES.ethereum.USDC, + [Chain.POLYGON]: ADDRESSES.polygon.USDC, + [Chain.BOBA]: ADDRESSES.boba.USDC, } const lsps = { diff --git a/projects/donkey/index.js b/projects/donkey/index.js index 6fd59746ac..16110fd4f7 100644 --- a/projects/donkey/index.js +++ b/projects/donkey/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getChainTransform } = require('../helper/portedTokens') const abi = require('./abi.json') @@ -21,7 +22,7 @@ const stakings = [ ] const DONKEY_TOKEN = '0x4576E6825B462b6916D2a41E187626E9090A92c6' -const ETH = "0x0000000000000000000000000000000000000000"; +const ETH = ADDRESSES.null; async function staking(timestamp, block) { const balances = {} diff --git a/projects/dopex/index.js b/projects/dopex/index.js index 83ce03f5e1..4a8c4550ca 100644 --- a/projects/dopex/index.js +++ b/projects/dopex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { staking } = require("../helper/staking"); @@ -37,9 +38,9 @@ const slpStakingRewards = [ const ssovs = [ ["0xbB741dC1A519995eac67Ec1f2bfEecbe5C02f46e", "0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55"], ["0x6A1142681b74fbeA5dEA07258f573484D80e4435", "0x32eb7902d4134bf98a28b963d26de779af92a212"], - ["0x2c9C1E9b4BDf6Bf9CB59C77e0e8C0892cE3A9d5f", "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"], + ["0x2c9C1E9b4BDf6Bf9CB59C77e0e8C0892cE3A9d5f", ADDRESSES.arbitrum.WETH], ["0x54552CB564F4675bCEda644e47dE3E35D1c88E1b", "0x8D9bA570D6cb60C7e3e0F31343Efe75AB8E65FB1"], - ["0x5bE3c77ED3Cd42fc2c702C9fcd665f515862B0AE", "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a"], + ["0x5bE3c77ED3Cd42fc2c702C9fcd665f515862B0AE", ADDRESSES.arbitrum.GMX], ]; const crvPools = [ @@ -111,7 +112,7 @@ async function crvTvls(balances, crvPools, block, chain) { for (let i = 0; i < crvPools.length; i++) { const balance = BigNumber(Number(lpPrices) / 1e18).times(Number(totalEpochDeposits[i].output)).div(1e12).toFixed(0); - sdk.util.sumSingleBalance(balances, "0xdac17f958d2ee523a2206206994597c13d831ec7", balance); + sdk.util.sumSingleBalance(balances, ADDRESSES.ethereum.USDT, balance); } } @@ -141,7 +142,7 @@ async function bscTvl(timestamp, block, chainBlocks) { chain: "bsc" })).output; - sdk.util.sumSingleBalance(balances, "bsc:0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", bnbAmount); + sdk.util.sumSingleBalance(balances, "bsc:" + ADDRESSES.bsc.WBNB, bnbAmount); delete balances["bsc:0xa07c5b74c9b40447a954e1466938b865b6bbea36"]; return balances; @@ -149,7 +150,7 @@ async function bscTvl(timestamp, block, chainBlocks) { // AVAX Addresses const avaxSsovs = [ - ["0x5540FEa353dF6302611DA1d57988104e43A4B6b6", "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"] + ["0x5540FEa353dF6302611DA1d57988104e43A4B6b6", ADDRESSES.avax.WAVAX] ]; async function avaxTvl(timestamp, block, chainBlocks) { diff --git a/projects/dopplefinance/index.js b/projects/dopplefinance/index.js index fa28e18510..2338cf6a44 100644 --- a/projects/dopplefinance/index.js +++ b/projects/dopplefinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const assetsOnExchange = { @@ -5,35 +6,35 @@ const assetsOnExchange = { // * KUSD '0x940Ff63e82d15fb47371BFE5a4ed7D7D183dE1A5', // * BUSD - "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + ADDRESSES.bsc.BUSD, // * USDT - "0x55d398326f99059fF775485246999027B3197955", + ADDRESSES.bsc.USDT, // * USDC - "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + ADDRESSES.bsc.USDC, // * DAI "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", // * UST "0x23396cF899Ca06c4472205fC903bDB4de249D6fC", // * BTCB - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", + ADDRESSES.bsc.BTCB, // * renBTC '0xfCe146bF3146100cfe5dB4129cf6C82b0eF4Ad8c', // * USDN '0x03ab98f5dc94996F8C33E15cD4468794d12d41f9', // * TUSD - '0x14016E85a25aeb13065688cAFB43044C2ef86784', + ADDRESSES.bsc.BTUSD, // * DOLLY "0xfF54da7CAF3BC3D34664891fC8f3c9B6DeA6c7A5" ], fantom: [ // * USDC - '0x04068da6c83afcfa0e13ba15a6696662335d5b75', + ADDRESSES.fantom.USDC, // * fUSDT - '0x049d68029688eabf473097a2fc38ef61633a3c7a', + ADDRESSES.fantom.fUSDT, // * DAI - '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e', + ADDRESSES.fantom.DAI, // * MIM - '0x82f0b8b456c1a451378467398982d4834b6829c1', + ADDRESSES.fantom.MIM, ], harmony: [ // * KUSD @@ -66,7 +67,7 @@ async function bscTVL(_, _b, { bsc: block }) { '0x830e287ac5947b1c0da865dfb3afd7cdf7900464', ] const toa = [ - ['0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', '0xa275769Fb6fF34A1a01C8CE61D0182f5d36AD27A',], // USDC collateral for minting KUSD + [ADDRESSES.bsc.USDC, '0xa275769Fb6fF34A1a01C8CE61D0182f5d36AD27A',], // USDC collateral for minting KUSD ] assetsOnExchange.bsc.forEach(t => pools.forEach(o => toa.push([t, o]))) return sumTokens2({ tokensAndOwners: toa, chain, block, }) diff --git a/projects/dotdot/index.js b/projects/dotdot/index.js index 961b47df32..12dd3c075c 100644 --- a/projects/dotdot/index.js +++ b/projects/dotdot/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { pool2 } = require("../helper/pool2"); const { staking } = require("../helper/staking"); const { transformBalances } = require("../helper/portedTokens"); @@ -66,9 +67,9 @@ async function fixVal3EPS(block, balances) { const { output } = await sdk.api.abi.multiCall({ abi: "erc20:balanceOf", calls: [ - { params, target: "0xaed19dab3cd68e4267aec7b2479b1ed2144ad77f" }, - { params, target: "0xa6fdea1655910c504e974f7f1b520b74be21857b" }, - { params, target: "0x5f7f6cb266737b89f7af86b30f03ae94334b83e9" } + { params, target: ADDRESSES.bsc.valBUSD }, + { params, target: ADDRESSES.bsc.valUSDC }, + { params, target: ADDRESSES.bsc.valUSDT } ], chain, block @@ -88,7 +89,7 @@ async function resolveEpsLP({ if (token.toLowerCase() === "0xaf4de8e872131ae328ce21d909c74705d3aaf452") { sdk.util.sumSingleBalance( balances, - "0xe9e7cea3dedca5984780bafc599bd69add087d56", + ADDRESSES.bsc.BUSD, tokenBalance ); // store 3EPS as BUSD return; diff --git a/projects/dotoracle/index.js b/projects/dotoracle/index.js index ab4c3e57fb..979e146a07 100644 --- a/projects/dotoracle/index.js +++ b/projects/dotoracle/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, sumTokens2 } = require('../helper/unwrapLPs') const { staking} = require('../helper/staking') @@ -9,13 +10,13 @@ const config = { ], tokens: { eth: nullAddress, - usdc: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - usdt: '0xdac17f958d2ee523a2206206994597c13d831ec7', - DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', - frax: '0x853d955acef822db058eb8505911ed77f175b99e', + usdc: ADDRESSES.ethereum.USDC, + usdt: ADDRESSES.ethereum.USDT, + DAI: ADDRESSES.ethereum.DAI, + frax: ADDRESSES.ethereum.FRAX, fxs: '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0', - maker: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', - aave: '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', + maker: ADDRESSES.ethereum.MKR, + aave: ADDRESSES.ethereum.AAVE, } }, avax: { @@ -33,7 +34,7 @@ const config = { ], tokens: { bsc: nullAddress, - busd: '0xe9e7cea3dedca5984780bafc599bd69add087d56', + busd: ADDRESSES.bsc.BUSD, } }, okexchain: { diff --git a/projects/drachma/index.js b/projects/drachma/index.js index 85f22e30c1..a4fa920a2a 100644 --- a/projects/drachma/index.js +++ b/projects/drachma/index.js @@ -13,20 +13,20 @@ const { tvl: drachmaTvl, borrowed: drachmaBorrowed } = compoundExports( //tvl for drachma app function tvl(chain) { - return async (timestamp, block, chainBlocks) => { + return async (timestamp, block, chainBlocks, { api }) => { const toa = [] toa.push(...contracts[chain].map(c => ([c.token, c.address]))) toa.push(...contracts[chain].map(c => ([contracts.usdc[chain], c.address]))) - return sumTokens2({ chain, tokensAndOwners: toa, block: chainBlocks[chain], resolveLP: true, }) + return sumTokens2({ chain, tokensAndOwners: toa, api, resolveLP: true, }) }; } module.exports = { - timetravel: true, - incentivized: true, - misrepresentedTokens: true, metis: { tvl: sdk.util.sumChainTvls([drachmaTvl, tvl("metis")]), borrowed: drachmaBorrowed, }, }; + + +module.exports.metis = { tvl: tvl("metis") } \ No newline at end of file diff --git a/projects/dracula.js b/projects/dracula.js index ef1a264b98..d1fce2a21b 100644 --- a/projects/dracula.js +++ b/projects/dracula.js @@ -4,7 +4,7 @@ module.exports = { hallmarks: [ [Math.floor(new Date('2022-03-17')/1e3), 'DRACULA is for now fully focused on it\'s Metaverse product'], ], - methodology: 'DRACULA is for now fully focused on it\'s Metaverse product', + methodology: 'Tokens staked on 0xC8DFD57E82657f1e7EdEc5A9aA4906230C29A62A', ethereum: { tvl: () => ({}), staking: staking('0xC8DFD57E82657f1e7EdEc5A9aA4906230C29A62A', '0xb78b3320493a4efaa1028130c5ba26f0b6085ef8'), diff --git a/projects/dracula/index.js b/projects/dracula/index.js new file mode 100644 index 0000000000..bd5f0612eb --- /dev/null +++ b/projects/dracula/index.js @@ -0,0 +1,7 @@ +const { uniTvlExport } = require("../helper/calculateUniTvl.js"); + +module.exports = { + era: { + tvl: uniTvlExport("0x68e03D7B8B3F9669750C1282AD6d36988f4FE18e", "era", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: false, }), + }, +}; diff --git a/projects/drift.js b/projects/drift.js index dc117efcca..bc0d8dc90d 100644 --- a/projects/drift.js +++ b/projects/drift.js @@ -1,21 +1,48 @@ -const { sumTokens2 } = require('./helper/solana') - -async function tvl() { - return sumTokens2({ - tokenAccounts: [ - '6W9yiHDCW9EpropkFV8R3rPiL8LVWUHSiys3YeW6AT6S', - 'Bzjkrm1bFwVXUaV9HTnwxFrPtNso7dnwPQamhqSxtuhZ', - 'GXWqPpjQpdz7KZw9p7f5PX2eGxHAhvpNXiviFkAB8zXg', - 'DfYCNezifxAEsQbAJ1b3j6PX3JVBe8fu11KBhxsbw5d2', - '2CqkQvYxp9Mq4PqLvAQ1eryYxebUh4Liyn5YMDtXsYci', // insurance fund - ] - }) -} +const { PublicKey } = require("@solana/web3.js"); +const anchor = require("@project-serum/anchor"); +const { sumTokens2, } = require("./helper/solana"); +const DRIFT_PROGRAM_ID = new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH') +const { getConfig } = require('./helper/cache') module.exports = { timetravel: false, - methodology: "Calculate the USDC on 6W9yiHDCW9EpropkFV8R3rPiL8LVWUHSiys3YeW6AT6S through on-chain calls & add the USDC on Bzjkrm1bFwVXUaV9HTnwxFrPtNso7dnwPQamhqSxtuhZ which is the insurance fund for liquidations", + methodology: "Calculate sum across all program token accounts", solana: { - tvl + tvl, + }, +}; + +async function tvl(_, _b, _cb, { api, }) { + + const legacyVaults = [ + '6W9yiHDCW9EpropkFV8R3rPiL8LVWUHSiys3YeW6AT6S', // legacy usdc vault + 'Bzjkrm1bFwVXUaV9HTnwxFrPtNso7dnwPQamhqSxtuhZ', // legacy usdc insurance fund + ]; + const getSpotMarketVaultPublicKey = marketIndex => getVaultPublicKey('spot_market_vault', marketIndex) + const getInsuranceFundVaultPublicKey = marketIndex => getVaultPublicKey('insurance_fund_vault', marketIndex) + let configFile = await getConfig('drift-config', 'https://raw.githubusercontent.com/drift-labs/protocol-v2/master/sdk/src/constants/spotMarkets.ts') + const marketIndices = []; + configFile = configFile.slice(configFile.indexOf('MainnetSpotMarkets:')) + + const regex = /marketIndex:\s*(\d+),/g + let match; + while ((match = regex.exec(configFile))) { + marketIndices.push(parseInt(match[1])); } + + const vaults = [ + ...legacyVaults, + ...marketIndices.map(getSpotMarketVaultPublicKey), + ...marketIndices.map(getInsuranceFundVaultPublicKey), + ] + + return sumTokens2({ tokenAccounts: vaults }) +} + +function getVaultPublicKey(seed, marketIndex) { + return PublicKey.findProgramAddressSync( + [ + Buffer.from(anchor.utils.bytes.utf8.encode(seed)), + new anchor.BN(marketIndex).toArrayLike(Buffer, 'le', 2), + ], DRIFT_PROGRAM_ID)[0].toBase58() } diff --git a/projects/dsu-money/index.js b/projects/dsu-money/index.js index 5017e39f85..cb047b6c10 100644 --- a/projects/dsu-money/index.js +++ b/projects/dsu-money/index.js @@ -1,11 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { ethereum: { tvl: sumTokensExport({ tokensAndOwners: [ - ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0xaef566ca7e84d1e736f999765a804687f39d9094'], - ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0xD05aCe63789cCb35B9cE71d01e4d632a0486Da4B'], + [ADDRESSES.ethereum.USDC, '0xaef566ca7e84d1e736f999765a804687f39d9094'], + [ADDRESSES.ethereum.USDC, '0xD05aCe63789cCb35B9cE71d01e4d632a0486Da4B'], ['0x39aa39c021dfbae8fac545936693ac917d5e7563', '0xD05aCe63789cCb35B9cE71d01e4d632a0486Da4B'], ]}) + }, + arbitrum: { + tvl: sumTokensExport({ tokensAndOwners: [ + [ADDRESSES.arbitrum.USDC, '0x0d49c416103cbd276d9c3cd96710db264e3a0c27'], + ]}) } -} \ No newline at end of file +} diff --git a/projects/dubble-exchange/index.js b/projects/dubble-exchange/index.js new file mode 100644 index 0000000000..90f0e199ce --- /dev/null +++ b/projects/dubble-exchange/index.js @@ -0,0 +1,14 @@ +const VAULT_CONTRACT = "0xD522395dfD017F47a932D788eC7CB058aDBbc783"; +const ADDRESSES = require('../helper/coreAssets.json') + +async function tvl(timestamp, block, chainBlocks, { api }) { + const bal = await api.call({ abi: 'uint256:checkBalance', target: VAULT_CONTRACT }) + api.add(ADDRESSES.arbitrum.USDC, bal) +} + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + tvl + } +}; diff --git a/projects/dxsale/apiCache.js b/projects/dxsale/apiCache.js index 599b85d9ae..845eec7c26 100644 --- a/projects/dxsale/apiCache.js +++ b/projects/dxsale/apiCache.js @@ -217,3 +217,5 @@ module.exports = { tvl: getTVLTotal(bitgertArchives), } }; + +module.exports.dexit.tvl = () => ({}) diff --git a/projects/dxsale/index.js b/projects/dxsale/index.js index 1b58b09c32..b13f4b6ad4 100644 --- a/projects/dxsale/index.js +++ b/projects/dxsale/index.js @@ -189,3 +189,5 @@ module.exports = { tvl: getTVLTotal(bitgertArchives), } }; + +module.exports.dexit.tvl = () => ({}) \ No newline at end of file diff --git a/projects/dyad/index.js b/projects/dyad/index.js new file mode 100644 index 0000000000..e3fd585415 --- /dev/null +++ b/projects/dyad/index.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require("@defillama/sdk"); + + +async function tvl(_timestamp, block) { + return { + [ADDRESSES.null]: ( + await sdk.api.eth.getBalance({ + target: "0xdc400bbe0b8b79c07a962ea99a642f5819e3b712", + block, + }) + ).output, + }; +} + +module.exports = { + ethereum: { + tvl, + }, +}; + + + diff --git a/projects/dydx/index.js b/projects/dydx/index.js index 0e173d45b1..eb26b94f88 100644 --- a/projects/dydx/index.js +++ b/projects/dydx/index.js @@ -1,7 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); - const BigNumber = require("bignumber.js"); - const contracts = [ '0x5199071825CC1d6cd019B0D7D42B08106f6CF16D', '0x1e0447b19bb6ecfdae1e4ae1694b0c3659614e4e', @@ -9,10 +8,10 @@ ]; const tokens = [ - '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - '0x6B175474E89094C44Da98b954EedeAC495271d0F' + ADDRESSES.ethereum.SAI, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI ]; async function tvl (timestamp, block) { diff --git a/projects/dynastyswap-xyz/index.js b/projects/dynastyswap-xyz/index.js new file mode 100644 index 0000000000..448503aa1b --- /dev/null +++ b/projects/dynastyswap-xyz/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + pulse: { + tvl: getUniTVL({ factory: '0x7abcEc2e35505aF1720431A6c414067717342B1F', useDefaultCoreAssets: true, fetchBalances: true, }), + }, +}; // node test.js projects/pulsex/index.js \ No newline at end of file diff --git a/projects/dyson-money/index.js b/projects/dyson-money/index.js index a0e07e8e84..69ae31abaf 100644 --- a/projects/dyson-money/index.js +++ b/projects/dyson-money/index.js @@ -1,19 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { sumTokens2 } = require('../helper/unwrapLPs'); -const sdk = require('@defillama/sdk'); -const { get } = require('../helper/http') const utils = require('../helper/utils'); const { toUSDTBalances } = require('../helper/balances'); -//contract the deposits into official GNS Staking Contract -const gnsDysonVault = "0x035001DdC2f6DcF2006565Af31709f8613a7D70C" - -//grab GNS price from DefiLlama Price API -const getGNSPrice = async () => { - const response = await get('https://coins.llama.fi/prices/current/polygon:0xE5417Af564e4bFDA1c483642db72007871397896') - return response.coins['polygon:0xE5417Af564e4bFDA1c483642db72007871397896'].price -} - const sphere_token = "0x62F594339830b90AE4C084aE7D223fFAFd9658A7" const ylSPHEREvault = "0x4Af613f297ab00361D516454E5E46bc895889653" @@ -24,18 +14,18 @@ async function polygonTvl(timestamp, block, chainBlocks) { await sumTokens2({ balances, owners: [ylSPHEREvault], - tokens: ["0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", "0x4Af613f297ab00361D516454E5E46bc895889653", "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6"], + tokens: [ + ADDRESSES.polygon.WMATIC_2, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.WETH_1, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.WBTC, + "0x172370d5Cd63279eFa6d502DAB29171933a610AF" + ], chain: 'polygon', block: chainBlocks.polygon }) - const gnsDysonVaultSupply = (await sdk.api.erc20.totalSupply({ - target: gnsDysonVault, - chain: 'polygon', - block: chainBlocks.polygon - })).output / 1e18 * ((await getGNSPrice()) * 1e18) / 6.24 //Don't even ask why 6.24 is needed, it just is the only way to get the correct TVL - balances["polygon:0xE5417Af564e4bFDA1c483642db72007871397896"] = gnsDysonVaultSupply - // calculate TVL for polygon from API const dysonTvl = await fetchChain(137)() for (const [token, balance] of Object.entries(dysonTvl)) { @@ -65,12 +55,6 @@ function fetchChain(chainId) { } } -const chains = { - optimism: 10, - polygon: 137, - arbitrum: 42161, -} - module.exports = { doublecounted: true, misrepresentedTokens: false, @@ -88,4 +72,7 @@ module.exports = { bsc: { tvl: fetchChain(56) }, + avax: { + tvl: fetchChain(43114) + } }; diff --git a/projects/ease/index.js b/projects/ease/index.js index 1d662b7de5..a85cd89098 100644 --- a/projects/ease/index.js +++ b/projects/ease/index.js @@ -27,31 +27,17 @@ const ARNXM_VAULT = { address: "0x1337DEF1FC06783D4b03CB8C1Bf3EBf7D0593FC4", } -async function tvl(_, block) { +async function tvl(_, block, _1, { api }) { //get TVL of Uninsurance vaults let resp = await getConfig('ease', VAULT_LIST_URL); - let vaults = resp - const balances = {}; - const { output: bal } = await sdk.api.abi.multiCall({ - abi: RCA_SHIELD.abis.uBalance, - calls: vaults.map(i => ({ target: i.address })), - block, - }) - bal.forEach(({ output}, i) => { - const { decimals, token, address } = vaults[i] - const fixDecimals = 10 ** (decimals - token.decimals) - sdk.util.sumSingleBalance(balances, token.address, BigNumber( output / fixDecimals).toFixed(0)); - }) - + let vaults = resp.map(i => i.address.toLowerCase()).filter(i => i !== '0x8f247eb2d71beeacdf212f8bc748f09cdf7144c0') + const bals = await api.multiCall({ abi: 'uint256:uBalance', calls: vaults }) + const tokens = await api.multiCall({ abi: 'address:uToken', calls: vaults }) + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens }) + api.addTokens(tokens, bals.map((v, i) => v / 10 ** (18 - decimals[i]))) //get TVL of arNXM vault - const { output: balNXM } = await sdk.api.abi.call({ - target: ARNXM_VAULT.address, - abi: ARNXM_VAULT.abis.aum, - block, - }); - sdk.util.sumSingleBalance(balances, NXM, balNXM) - - return balances; + const balNXM = await api.call({ target: ARNXM_VAULT.address, abi: ARNXM_VAULT.abis.aum, }); + api.add(NXM, balNXM) } module.exports = { diff --git a/projects/eazyswap/index.js b/projects/eazyswap/index.js new file mode 100644 index 0000000000..6dbb1f61f1 --- /dev/null +++ b/projects/eazyswap/index.js @@ -0,0 +1,15 @@ +const { getUniTVL, sumTokensExport } = require('../helper/unknownTokens') +const EAZY_TOKEN = "0x6cF99BAA0a4d079F960216d08cf9a1Bc7e4dd37C"; +module.exports = { + misrepresentedTokens: true, + methodology: "Factory address (0xbeE82c502eC48a962510Aa4505595259C3ba631f) is used to find the LP pairs. TVL is equal to the liquidity on the AMM. Staking balance is equal to the balance of $EAZY in $xEAZY contract", + pulse: { + tvl: getUniTVL({ factory: '0xbeE82c502eC48a962510Aa4505595259C3ba631f', useDefaultCoreAssets: true }), + staking: sumTokensExport({ + owners: ['0x23E1Be43887641E8c0EB9938FaB9D6539438115a'], + tokens: [EAZY_TOKEN], + }) + } +}; + + diff --git a/projects/echodex/index.js b/projects/echodex/index.js new file mode 100644 index 0000000000..47eec9b7c3 --- /dev/null +++ b/projects/echodex/index.js @@ -0,0 +1,6 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + linea: { tvl: getUniTVL({ factory: '0x6D1063F2187442Cc9adbFAD2f55A96B846FCB399', useDefaultCoreAssets: true, fetchBalances: true }), }, +} diff --git a/projects/echswap/index.js b/projects/echswap/index.js index 83a8b90892..751dcffd94 100644 --- a/projects/echswap/index.js +++ b/projects/echswap/index.js @@ -2,7 +2,10 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { misrepresentedTokens: true, + hallmarks: [ + [1671062400, "Rug Pull"] + ], echelon: { - tvl: getUniTVL({ chain: 'echelon', useDefaultCoreAssets: true, factory: '0xaFd37A86044528010d0E70cDc58d0A9B5Eb03206' }) + tvl: () => ({}), } } \ No newline at end of file diff --git a/projects/ecodefi/index.js b/projects/ecodefi/index.js index f9c1d8a36c..8d4487abc8 100644 --- a/projects/ecodefi/index.js +++ b/projects/ecodefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); const stakingAbi = require('./stakingAbi.json'); @@ -20,7 +21,7 @@ let BabySwapRouter = { } let USDT = { - "bsc": "0x55d398326f99059fF775485246999027B3197955", // USDT in BSC + "bsc": ADDRESSES.bsc.USDT, // USDT in BSC } /*================================================== TVL diff --git a/projects/edgeprotocol.js b/projects/edgeprotocol.js index ccc53185bf..8900b3ba43 100644 --- a/projects/edgeprotocol.js +++ b/projects/edgeprotocol.js @@ -1,37 +1,21 @@ -const { queryContract, } = require('./helper/chain/terra') - -function getCoinGeckoId(apiId) { - return { - 'terra14z56l0fp2lsf86zy3hty2z47ezkhnthtr9yq76': 'anchor-protocol', - 'terra15gwkyepfc6xgca5t5zefzwy42uts8l2m4g40k6': 'mirror-protocol', - 'terra17y9qkl8dfkeg4py7n0g5407emqnemc3yqk5rup': 'stader-lunax', - 'terra1hzh9vpxhsk8253se0vv5jj6etdvxu3nv8z07zu': 'anchorust', - 'terra1kc87mu460fwkqte29rquh4hc20m54fxwtsx7gp': 'bonded-luna', - 'uluna': 'terra-luna', - 'uusd': 'terrausd' - }[apiId] -} +const { queryContract, } = require('./helper/chain/cosmos') async function getMarkets() { - const res = await queryContract({ contract: 'terra1pcxwtrxppj9xj7pq3k95wm2zztfr9kwfkcgq0w', data:{ market_lists: {} } }) + const res = await queryContract({ contract: 'terra1pcxwtrxppj9xj7pq3k95wm2zztfr9kwfkcgq0w', data: { market_lists: {} }, chain: 'terra' }) return res } -async function tvl() { - const balances = {}; +async function tvl(_, _1, _2, { api }) { const markets = await getMarkets() markets.forEach(m => { - balances[getCoinGeckoId(m.underlying)] = (m.total_credit - m.total_insurance) / 10 ** 6; + api.add(m.underlying, Math.floor(m.total_credit - m.total_insurance)) }); - return balances; } -async function borrowed() { - const balances = {}; +async function borrowed(_, _1, _2, { api }) { const markets = await getMarkets() markets.forEach(m => { - balances[getCoinGeckoId(m.underlying)] = m.total_loan / 10 ** 6; + api.add(m.underlying, Math.floor(m.total_loan)) }); - return balances; } module.exports = { @@ -41,7 +25,7 @@ module.exports = { tvl, borrowed }, - hallmarks:[ - [1651881600, "UST depeg"], - ] + hallmarks: [ + [1651881600, "UST depeg"], + ] }; diff --git a/projects/eigenlayer/index.js b/projects/eigenlayer/index.js new file mode 100644 index 0000000000..8e0ed8e799 --- /dev/null +++ b/projects/eigenlayer/index.js @@ -0,0 +1,34 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +async function tvl(_, _b, _cb, { api, }) { + const logs = await getLogs({ + api, + target: '0x858646372CC42E1A627fcE94aa7A7033e7CF075A', + topic: 'StrategyAddedToDepositWhitelist(address)', + eventAbi: "event StrategyAddedToDepositWhitelist(address strategy)", + onlyArgs: true, + fromBlock: 17445564, + }) + const podLogs = await getLogs({ + api, + target: '0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338', + topics: ['0x21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a'], + eventAbi: "event PodDeployed (address indexed eigenPod, address indexed podOwner)", + onlyArgs: true, + fromBlock: 17445564, + }) + const strategies = logs.map(log => log.strategy) + const pods = podLogs.map(log => log.eigenPod) + const restakedStatus = await api.multiCall({ abi: 'bool:hasRestaked', calls: pods }) + restakedStatus.filter(i => i).forEach(() => api.add(nullAddress, 32 * 1e18)) + const tokens = await api.multiCall({ abi: 'address:underlyingToken', calls: strategies }) + return sumTokens2({ api, tokensAndOwners2: [tokens, strategies] }) +} + +// https://github.com/Layr-Labs/eigenlayer-contracts/blob/master/script/output/M1_deployment_mainnet_2023_6_9.json +module.exports = { + ethereum: { + tvl, + }, +} \ No newline at end of file diff --git a/projects/eklipse/index.js b/projects/eklipse/index.js index 5a6a8d6d2c..e67d2091f2 100644 --- a/projects/eklipse/index.js +++ b/projects/eklipse/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const BigNumber = require('bignumber.js') const { getChainTransform, getFixBalances, } = require('../helper/portedTokens') @@ -7,7 +8,7 @@ const vaults = require('./vaults') const chain = 'klaytn' const EKL_TOKEN = '0x807c4e063eb0ac21e8eef7623a6ed50a8ede58ca' const STAKING_ADDRESS = '0xD067C3b871ee9E07BA4205A8F96c182baBBA6c58' -const USDT_TOKEN = '0xceE8FAF64bB97a73bb51E115Aa89C17FfA8dD167' +const USDT_TOKEN = ADDRESSES.klaytn.oUSDT const POOL2_ADDRESS = '0x625ae9043e8730c4a1e30b36838502fb90e1d3c2' const USDT_PAIR = '0x219ee5d76593f5bd639125b6411a17d309e3ad31' const KLAY_PAIR = '0x5db231ac93faaad876155dc0853bb11a2f4b0fb2' @@ -15,23 +16,23 @@ const W_KLAY_ADDRESS = '0xd7a4d10070a4f7bc2a015e78244ea137398c3b74' const TOKENS = { kDAI: { - address: '0x5c74070fdea071359b86082bd9f9b3deaafbe32b', + address: ADDRESSES.klaytn.KDAI, decimal: 18 }, kBUSD: { - address: '0x210bc03f49052169d5588a52c317f71cf2078b85', + address: ADDRESSES.klaytn.oBUSD, decimal: 18 }, kUSDC: { decimal: 6, - address: '0x754288077d0ff82af7a5317c7cb8c444d421d103' + address: ADDRESSES.klaytn.oUSDC }, KSD: { - address: '0x4fa62f1f404188ce860c8f0041d6ac3765a72e67', + address: ADDRESSES.klaytn.KSD, decimal: 18 }, KASH: { - address: '0xce40569d65106c32550626822b91565643c07823', + address: ADDRESSES.klaytn.KASH, decimal: 18 }, EKL: { @@ -40,15 +41,15 @@ const TOKENS = { }, kUSDT: { decimal: 6, - address: '0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167' + address: ADDRESSES.klaytn.oUSDT }, pUSD: { decimal: 18, - address: '0x168439b5eebe8c83db9eef44a0d76c6f54767ae4' + address: ADDRESSES.klaytn.pUSD }, USDK: { decimal: 18, - address: '0xd2137fdf10bd9e4e850c17539eb24cfe28777753' + address: ADDRESSES.klaytn.USDK } } diff --git a/projects/elephantmoney/index.js b/projects/elephantmoney/index.js index b3769b3dfc..d4a7bc710f 100644 --- a/projects/elephantmoney/index.js +++ b/projects/elephantmoney/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakings } = require("../helper/staking"); const contracts = { - BUSD: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', + BUSD: ADDRESSES.bsc.BUSD, TRUNK: '0xdd325C38b12903B727D16961e61333f4871A70E0', treasury: '0xCb5a02BB3a38e92E591d323d6824586608cE8cE4', LP_TRUNK: '0xf15A72B15fC4CAeD6FaDB1ba7347f6CCD1E0Aede', diff --git a/projects/ellipisis-phoenix/index.js b/projects/ellipisis-phoenix/index.js new file mode 100644 index 0000000000..de7fc653af --- /dev/null +++ b/projects/ellipisis-phoenix/index.js @@ -0,0 +1,26 @@ +const { sumTokens2, getConnection, decodeAccount, } = require('../helper/solana') +const { PublicKey } = require('@solana/web3.js') + +async function tvl() { + const program = new PublicKey('PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY') + const connection = getConnection(); + const accounts0 = await connection.getProgramAccounts(program, { + filters: [{ + dataSize: 445536 + }] + }) + const accounts1 = await connection.getProgramAccounts(program, { + filters: [{ + dataSize: 1723488 + }] + }) + const accounts = [...accounts0, ...accounts1] + const tokenAccounts = accounts.map(i => decodeAccount('phoenix', i.account)) + .map(i => [i.baseParams.vaultKey, i.quoteParams.vaultKey]).flat() + return sumTokens2({ tokenAccounts, }) +} + +module.exports = { + timetravel: false, + solana: { tvl }, +} diff --git a/projects/ellipsis/onchain.js b/projects/ellipsis/onchain.js index 2a523d611a..871613c77e 100644 --- a/projects/ellipsis/onchain.js +++ b/projects/ellipsis/onchain.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const axios = require('axios'); const { unwrapUniswapLPs } = require('../helper/unwrapLPs'); @@ -11,9 +12,9 @@ function getBSCAddress(address) { // list of missing tokens const replaceable = { - "0x049d68029688eAbF473097a2fC38ef61633A3C7A": "0xdac17f958d2ee523a2206206994597c13d831ec7", //fUSDT -> USDT + [ADDRESSES.fantom.fUSDT]: ADDRESSES.ethereum.USDT, //fUSDT -> USDT '0xeD28A457A5A76596ac48d87C0f577020F6Ea1c4C': '0x5228a22e72ccc52d415ecfd199f99d0665e7733b', //pBTC -> pBTC on ETH - '0x54261774905f3e6E9718f2ABb10ed6555cae308a': '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', //anyBTC -> WBTC + '0x54261774905f3e6E9718f2ABb10ed6555cae308a': ADDRESSES.ethereum.WBTC, //anyBTC -> WBTC '0x03ab98f5dc94996f8c33e15cd4468794d12d41f9': '0x674c6ad92fd080e4004b2312b45f796a192d27a0', //USDN -> USDN on ETH }; diff --git a/projects/elysia/index.js b/projects/elysia/index.js index 2a451242e7..155e55ff19 100644 --- a/projects/elysia/index.js +++ b/projects/elysia/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakings } = require("../helper/staking"); const { sumTokensExport, } = require('../helper/unwrapLPs') @@ -6,10 +7,10 @@ const addresses = { elfi: "0x4da34f8264cb33a5c9f17081b9ef5ff6091116f4", el: "0x2781246fe707bb15cee3e5ea354e2154a2877b16", elStaking: "0x3F0c3E32bB166901AcD0Abc9452a3f0c5b8B2C9D", - dai: "0x6b175474e89094c44da98b954eedeac495271d0f", - usdt: "0xdac17f958d2ee523a2206206994597c13d831ec7", - busd: "0x4fabb145d64652a948d72533023f6e7a623c7c53", - usdc: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + dai: ADDRESSES.ethereum.DAI, + usdt: ADDRESSES.ethereum.USDT, + busd: ADDRESSES.ethereum.BUSD, + usdc: ADDRESSES.ethereum.USDC, elfiStaking: [ "0xb41bcd480fbd986331eeed516c52e447b50dacb4", "0xCD668B44C7Cf3B63722D5cE5F655De68dD8f2750", @@ -28,7 +29,7 @@ const moneyPools = { [addresses.usdt, '0xe0bda8e3a27e889837ae37970fe97194453ee79c'], [addresses.usdc, '0x3fea4cc5a03e372ac9cded96bd07795ac9034d71'], ], - bsc: [['0xe9e7cea3dedca5984780bafc599bd69add087d56', '0x5bb4d02a0ba38fb8b916758f11d9b256967a1f7f']] + bsc: [[ADDRESSES.bsc.BUSD, '0x5bb4d02a0ba38fb8b916758f11d9b256967a1f7f']] } function borrowed(chain) { diff --git a/projects/emberswap/index.js b/projects/emberswap/index.js index 9ea85d2b93..8a81e4d503 100644 --- a/projects/emberswap/index.js +++ b/projects/emberswap/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { stakingPricedLP } = require('../helper/staking') const EMBER = "0x6BAbf5277849265b6738e75AEC43AEfdde0Ce88D"; const VAULT = "0xFFbE92fDA81f853bcf00d3c7686d5DAd5A6600bB"; -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; +const WBCH = ADDRESSES.smartbch.WBCH; const FACTORY = "0xE62983a68679834eD884B9673Fb6aF13db740fF0"; const EMBER_WBCH_PAIR = "0x52c656FaF57DCbDdDd47BCbA7b2ab79e4c232C28" diff --git a/projects/emdx/index.js b/projects/emdx/index.js index b399c7a054..e52c9404e6 100644 --- a/projects/emdx/index.js +++ b/projects/emdx/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const ark = "0x3B065b08AAe6e29972058096cfA77E196590784a" const insuranceFund = "0x80ce46804010C03387a13E27729c5FBb6a309105" const clearingHouse = "0xBFB083840b0507670b92456264164E5fecd0430B" -const usdcAvalanche = "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E" +const usdcAvalanche = ADDRESSES.avax.USDC module.exports = { avax: { diff --git a/projects/emiswap/index.js b/projects/emiswap/index.js index c70b967ffe..21ce74b0b7 100644 --- a/projects/emiswap/index.js +++ b/projects/emiswap/index.js @@ -1,92 +1,33 @@ -const sdk = require("@defillama/sdk") -const { post } = require('../helper/http') -const { toUSDTBalances } = require('../helper/balances') -const { sumTokens } = require("../helper/unwrapLPs") -const { getChainTransform, getFixBalances } = require("../helper/portedTokens") +const { sumTokens2 } = require("../helper/unwrapLPs") const abi = require("../mooniswap/abi.json") - -const query = factory => `query emiswapFactories { emiswapFactories(where: {id: "${factory}"}) { id totalLiquidityUSD }}` +const { staking } = require('../helper/staking') const chainConfig = { - ethereum: { - factory: '0x1771dff85160768255F0a44D20965665806cBf48', - url: 'https://api.thegraph.com/subgraphs/name/lombardi22/emiswap8' - }, - kcc: { - factory: '0x945316F2964ef5C6C84921b435a528DD1790E93a', - url: 'https://thegraph.kcc.network/subgraphs/name/emiswap/emiswap1' - }, - polygon: { - factory: '0x23c1b313152e276e0CF61665dc3AC160b3c5aB19', - url: 'https://api.thegraph.com/subgraphs/name/lombardi22/polygon', - }, - shiden: { - factory: '0x7449314B698f918E98c76279B5570613b243eECf', - url: 'https://shiden-graph.emiswap.com/subgraphs/name/shiden', - }, - avax: { - factory: '0xaD6b9b31832A88Bb59dB4ACD820F8df2CfA84f0f', - }, - astar: { - factory: '0xb4BcA5955F26d2fA6B57842655d7aCf2380Ac854', - }, - aurora: { - factory: '0x979e5d41595263f6Dfec4F4D48419C555B80D95c', - url: 'https://api.thegraph.com/subgraphs/name/lombardi22/aurora', - }, + ethereum: { factory: '0x1771dff85160768255F0a44D20965665806cBf48', }, + kcc: { factory: '0x945316F2964ef5C6C84921b435a528DD1790E93a', }, + polygon: { factory: '0x23c1b313152e276e0CF61665dc3AC160b3c5aB19', }, + shiden: { factory: '0x7449314B698f918E98c76279B5570613b243eECf', }, + avax: { factory: '0xaD6b9b31832A88Bb59dB4ACD820F8df2CfA84f0f', }, + astar: { factory: '0xb4BcA5955F26d2fA6B57842655d7aCf2380Ac854', }, + aurora: { factory: '0x979e5d41595263f6Dfec4F4D48419C555B80D95c', }, } - -const moduleExports = {} - -Object.keys(chainConfig).forEach(chain => { - const { factory, url } = chainConfig[chain] - async function tvl() { - const body = { query: query(factory), operationName: "emiswapFactories", variables: {} } - const response = await post(url, body) - return toUSDTBalances(response.data.emiswapFactories[0].totalLiquidityUSD) - } - - async function computeTvl(ts, _block, chainBlocks) { - const balances = {} - const block = chainBlocks[chain] - const transformAddress = await getChainTransform(chain) - const fixBalances = await getFixBalances(chain) - - const getAllpools = (await sdk.api.abi.call({ abi: abi.getAllPools, target: factory, block, chain, })).output - const getTokens = (await sdk.api.abi.multiCall({ abi: abi.getTokens, calls: getAllpools.map(pool => ({ target: pool })), block, chain, })).output - const tokensAndOwners = [] - getTokens.forEach(({ output: tokens }, i) => { - const owner = getAllpools[i] - tokens.forEach(token => tokensAndOwners.push([token, owner])) - }) - - await sumTokens(balances, tokensAndOwners, block, chain, transformAddress) - fixBalances(balances) - return balances - } - - moduleExports[chain] = { tvl: url ? tvl : computeTvl } -}) const eswToken = "0x5a75a093747b72a0e14056352751edf03518031d"; const stakingPool = "0xe094E3E16e813a40E2d6cC4b89bfeAe0142044e1"; -async function ethStaking(timestamp, block) { - let balances = {}; - - let { output: balance } = await sdk.api.erc20.balanceOf({ - target: eswToken, - owner: stakingPool, - block, - }); - sdk.util.sumSingleBalance(balances, eswToken, balance); - - return balances; -} - -moduleExports.ethereum.staking = ethStaking module.exports = { methodology: "ETH and KCC TVL are the total liquidity from the LPs according to the subgraph. Staking TVL would be ESW value in the staking pool.", - ...moduleExports -}; \ No newline at end of file +}; + +Object.keys(chainConfig).forEach(chain => { + const { factory } = chainConfig[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const pools = await api.call({ target: factory, abi: abi.getAllPools, }) + const tokens = await api.multiCall({ calls: pools, abi: abi.getTokens, }) + return sumTokens2({ api, ownerTokens: pools.map((v, i) => [tokens[i], v]) }) + } + } +}) +module.exports.ethereum.staking = staking(stakingPool, eswToken) \ No newline at end of file diff --git a/projects/empyrean/index.js b/projects/empyrean/index.js index 55722ae9d6..9abb86fc6c 100644 --- a/projects/empyrean/index.js +++ b/projects/empyrean/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -5,7 +6,7 @@ const empyreanStaking = "0xD080CBc2885c64510923Ac6F5c8896011f86a6aF"; const EMPYR = "0xE9F226a228Eb58d408FdB94c3ED5A18AF6968fE1"; const treasuryAddress = "0x4606f4e6D43d501b86Fc583f44ae27097A1F9EA7"; -const USDC = "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802"; +const USDC = ADDRESSES.aurora.USDC_e; const EMPYR_USDC_TLP = "0x6e46c69FE35eF5BB78D7f35d92645C74245a6567"; /*** Bonds TVL Portion (Treasury) *** diff --git a/projects/ennead/index.js b/projects/ennead/index.js new file mode 100644 index 0000000000..b98b11c2df --- /dev/null +++ b/projects/ennead/index.js @@ -0,0 +1,51 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { sumTokensExport } = require('../helper/unknownTokens') +const { staking, } = require("../helper/staking"); +const lensAbi = require("./ramsesLens.json"); + +// Ramses contracts +const ramsesLens = '0xAAA68f40515bCcd8e407EBB4dBdF5046D105621e'; +const nfpManager = '0xAA277CB7914b7e5514946Da92cb9De332Ce610EF'; + +// Ennead contracts +// arbi +const neadRam = '0x40301951Af3f80b8C1744ca77E55111dd3c1dba1'; +const neadStake = '0x7D07A61b8c18cb614B99aF7B90cBBc8cD8C72680'; +const lpDepositor = '0x1863736c768f232189F95428b5ed9A51B0eCcAe5'; +const neadNfpDepositor = '0xe99ead648Fb2893d1CFA4e8Fe8B67B35572d2581'; +// avax +const neadStake_avax = '0xe99ead39204bd394e56502A3ad56d7061EE6B1c7'; +const neadSnek = '0xe99ead9519239F3eAad9339292d8A399739Cd55d'; +const neadSnekLp = '0x82360748aC3D7045812c6783f355b41193d3492E'; +const snekView = '0xe99eadc22747c95c658f41a02F1c6C2CcAefA757'; +const booster = '0xe99ead683Dcf1eF0C7F6612be5098BC5fDF4998d'; + +async function arbiTvl(timestamp, block, chainBlocks, { api }) { + let poolsAddresses = await api.call({ target: ramsesLens, abi: lensAbi.allPools, }) + let gauges = await api.multiCall({ target: ramsesLens, calls: poolsAddresses, abi: lensAbi.gaugeForPool, }) + poolsAddresses = poolsAddresses.filter((_, i) => gauges[i] !== nullAddress) + gauges = gauges.filter(gauge => gauge !== nullAddress) + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: gauges.map(i => ({ target: i, params: lpDepositor}))}) + api.addTokens(poolsAddresses, bals) + await sumTokens2({ api, uniV3nftsAndOwners: [[nfpManager, neadNfpDepositor],], resolveLP: true, }) +} + +async function avaxTvl(timestamp, block, chainBlocks, { api }) { + const poolsAddresses = await api.call({ target: snekView, abi: lensAbi.allActivePools, }) + const gauges = await api.call({ target: snekView, abi: lensAbi.allGauges, }) + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: gauges.map(i => ({ target: i, params: booster}))}) + api.addTokens(poolsAddresses, bals) + return sumTokens2({ api, resolveLP: true, }) +} + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + staking: staking(neadStake, neadRam), + tvl: arbiTvl, + }, + avax: { + staking: sumTokensExport({ owner: neadStake_avax, tokens: [neadSnek], lps: [neadSnekLp], useDefaultCoreAssets: true, }), + tvl: avaxTvl + } +}; \ No newline at end of file diff --git a/projects/ennead/ramsesLens.json b/projects/ennead/ramsesLens.json new file mode 100644 index 0000000000..2686073867 --- /dev/null +++ b/projects/ennead/ramsesLens.json @@ -0,0 +1,7 @@ +{ + "allPools": "function allPools() view returns (address[])", + "gaugeForPool": "function gaugeForPool(address) view returns (address)", + "allActivePools": "function allActivePools() view returns (address[])", + "allGauges": "function allGauges() view returns (address[])", + "allStakingPositionsOf": "function allStakingPositionsOf(address) view returns (tuple(address gauge, uint256 balance, uint256 derivedBalance, tuple(address token, uint256 earned)[] userRewards)[] rewardsData)" +} \ No newline at end of file diff --git a/projects/enosys-bridge/index.js b/projects/enosys-bridge/index.js new file mode 100644 index 0000000000..2013c01144 --- /dev/null +++ b/projects/enosys-bridge/index.js @@ -0,0 +1,7 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + xdc: { tvl: sumTokensExport({ owner: '0xd5308a4bb2d7121a26d0bd11257245f0efda2bc4', tokens: [ADDRESSES.xdc.WXDC] }) }, + ethereum: { tvl: sumTokensExport({ owner: '0xb3902647015c17fc3c2f5ca5f5cb68bbf2d9b1e2', tokens: [ADDRESSES.ethereum.USDT] }) }, +} \ No newline at end of file diff --git a/projects/ensuro/index.js b/projects/ensuro/index.js index e1c0013040..3eb3881ec3 100644 --- a/projects/ensuro/index.js +++ b/projects/ensuro/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const addressBook = { polygon: { - usdc: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + usdc: ADDRESSES.polygon.USDC, aave_v3_usdc: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aPolUSDC aave_v2_usdc: "0x1a13F4Ca1d028320A707D99520AbFefca3998b7F", // amUSDC reserves: [ @@ -12,10 +13,16 @@ const addressBook = { {name: "eToken Innov Zone", address: "0x1C48Accaf6f8106883AA1973A45F02525652DEfC"}, {name: "eToken Junior Koala BMA", address: "0xBC33c283A37d46ABA17BC5F8C27b27242688DeC6"}, {name: "eToken Senior BMA", address: "0xF383eF2D31E1d4a19B3e04ca2937DB6A8DA9f229"}, + {name: "eToken Junior Spot", address: "0x6229D78658305a301E177f9dAEa3a0799fd1528C"}, + {name: "eToken Junior Revo", address: "0x6A0e61C757e384eB1E4A2b94F7E02E68e4b4515e"}, + {name: "eToken Junior StormStrong", address: "0xE36D6585F0c200195b196C66644C519e7674b476"}, // PremiumsAccounts {name: "PremiumsAccount Koala", address: "0xCCf5C404d32eB6E777088AB13837a1b8dCBA9328"}, {name: "PremiumsAccount Innov Zone", address: "0x4f43B8F252887F814ED689346fdb5Bd266394520"}, {name: "PremiumsAccount Koala BMA", address: "0xc1A74eaC52a195E54E0cd672A9dAB023292C6100"}, + {name: "PremiumsAccount StormStrong", address: "0x06347eA3dA6a5B44eEAe3B8F4a65992Ae073e6F4"}, + {name: "PremiumsAccount Revo", address: "0x47f35B4876138b5d96FfDed1e46aE6b58E6e7B31"}, + {name: "PremiumsAccount Spot", address: "0x42118Df6EBb18346ca425f1c67AC739E95aD9358"}, ], v1: { pool: "0xF7ED72430bEA07D8dB6eC264603811381F5af8e0", diff --git a/projects/enterdao/index.js b/projects/enterdao/index.js index 6708179926..0be631aa3c 100644 --- a/projects/enterdao/index.js +++ b/projects/enterdao/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const StakingContract = "0x3F148612315AaE2514AC630D6FAf0D94B8Cd8E33"; const USDC_ENTR_SUSHI_LP = "0x83b546e10917432a722444672504f0d459472171"; const yieldFarms = [ - "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", //SUSHI + ADDRESSES.ethereum.SUSHI, //SUSHI "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b", //AXS "0x0391D2021f89DC339F60Fff84546EA23E337750f", //BOND "0x0f5d2fb29fb7d3cfee444a200298f468908cc942", //MANA diff --git a/projects/entities/a16z-cold.js b/projects/entities/a16z-cold.js new file mode 100644 index 0000000000..58642a2fb0 --- /dev/null +++ b/projects/entities/a16z-cold.js @@ -0,0 +1,14 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x7D325A9C8F10758188641FE91cFD902499edC782", + "0x2B1Ad6184a6B0fac06bD225ed37C2AbC04415fF4", + "0x05E793cE0C6027323Ac150F6d45C2344d28B6019", //14k MKR staking + "0x0f50D31B3eaefd65236dd3736B863CfFa4c63C4E" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/akg-ventures.js b/projects/entities/akg-ventures.js new file mode 100644 index 0000000000..9bee71c524 --- /dev/null +++ b/projects/entities/akg-ventures.js @@ -0,0 +1,12 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x19a504b1096aE59624105E737B22F5943B1a4846", + + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/animoca-brands.js b/projects/entities/animoca-brands.js new file mode 100644 index 0000000000..ffce59fb8c --- /dev/null +++ b/projects/entities/animoca-brands.js @@ -0,0 +1,12 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xd6AF301A8770659c1Dc880843db4d1aaA01048b4", + "0xE929c67Db94f5b1541FB241eB3E5CbC6468c37e6", //binance deposited account + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/arca.js b/projects/entities/arca.js new file mode 100644 index 0000000000..3a88c09640 --- /dev/null +++ b/projects/entities/arca.js @@ -0,0 +1,22 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x23A5eFe19Aa966388E132077d733672cf5798C03", //1.6m wANT staking + "0xa66f8Db3B8F1e4c79e52ac89Fec052811F4dbd19", // 20,189.10 GMX staked + "0xe05A884D4653289916D54Ce6aE0967707c519879" + ], + }, + polygon: { + owners: [ + "0xa66f8Db3B8F1e4c79e52ac89Fec052811F4dbd19", + ], + }, + arbitrum: { + owners: [ + "0xa66f8Db3B8F1e4c79e52ac89Fec052811F4dbd19", + ], + }, +} +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/axia8-venture.js b/projects/entities/axia8-venture.js new file mode 100644 index 0000000000..5bd34c5bec --- /dev/null +++ b/projects/entities/axia8-venture.js @@ -0,0 +1,17 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x717821AAe2A45C5c5c5bcDa7A8662cD3df2385E5", + + ], + }, + bsc: { + owners: [ + "0x717821AAe2A45C5c5c5bcDa7A8662cD3df2385E5", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/binance-labs.js b/projects/entities/binance-labs.js new file mode 100644 index 0000000000..24f8d7b673 --- /dev/null +++ b/projects/entities/binance-labs.js @@ -0,0 +1,12 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xfad531c62757cf18391E48Ee0959ab9ba106deCc", + + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/block-one.js b/projects/entities/block-one.js new file mode 100644 index 0000000000..f21dc32d1f --- /dev/null +++ b/projects/entities/block-one.js @@ -0,0 +1,12 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x24eaeCf1784c3bf9b01E011976E3D7ba917e2219", //binance deposited account + "0x2997A7a817e4b7ff60082b948a49fDAEfc042E4e" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/blockchain-capital.js b/projects/entities/blockchain-capital.js new file mode 100644 index 0000000000..b08e4bf1be --- /dev/null +++ b/projects/entities/blockchain-capital.js @@ -0,0 +1,14 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x598Dbe6738E0AcA4eAbc22feD2Ac737dbd13Fb8F", + "0x3744DA57184575064838BBc87A0FC791F5E39eA2", + "0x702caCafA54B88e9c54449563Fb2e496e85c78b7" + + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/chain-capital.js b/projects/entities/chain-capital.js new file mode 100644 index 0000000000..b4a544351c --- /dev/null +++ b/projects/entities/chain-capital.js @@ -0,0 +1,22 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x4cF9faf73714b65B98557c822B6B514dfDa0E339", + "0x2489146cf124A6900bA46c6F76f18eC76d5068b9" + ], + }, + polygon: { + owners: [ + "0x4cF9faf73714b65B98557c822B6B514dfDa0E339", + ], + }, + bsc: { + owners: [ + "0x2489146cf124A6900bA46c6F76f18eC76d5068b9" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/coin98-venture.js b/projects/entities/coin98-venture.js new file mode 100644 index 0000000000..c09aff9559 --- /dev/null +++ b/projects/entities/coin98-venture.js @@ -0,0 +1,28 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xFcbf806792f06d9c78E50B3737E1a22cfC36a942", + "0x9413Da1bC1797179e5D019A9420cEEc44680A4bf" + ], + }, + bsc: { + owners: [ + "0x9413Da1bC1797179e5D019A9420cEEc44680A4bf", + '0xFcbf806792f06d9c78E50B3737E1a22cfC36a942' + ], + }, + arbitrum: { + owners: [ + "0x9413Da1bC1797179e5D019A9420cEEc44680A4bf", + ], + }, + polygon: { + owners: [ + "0x9413Da1bC1797179e5D019A9420cEEc44680A4bf", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/defiance-capital.js b/projects/entities/defiance-capital.js new file mode 100644 index 0000000000..92043e314d --- /dev/null +++ b/projects/entities/defiance-capital.js @@ -0,0 +1,32 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x7E4B4DC22111B84594d9b7707A8DCFFd793D477A", + "0xE97eb050Fa3e677e79E4ebEe7EF9c9c7D026377D", + "0x1E138759baED8a1139376a475Bf7f08053ACA016", + "0xdD709cAE362972cb3B92DCeaD77127f7b8D58202", + "0x9B5ea8C719e29A5bd0959FaF79C9E5c8206d0499" + + ], + }, + arbitrum: { + owners: [ + "0x7E4B4DC22111B84594d9b7707A8DCFFd793D477A", + ], + }, + avax: { + owners: [ + "0x7E4B4DC22111B84594d9b7707A8DCFFd793D477A", + ], + }, + bsc: { + owners: [ + "0x7E4B4DC22111B84594d9b7707A8DCFFd793D477A", + "0xdD709cAE362972cb3B92DCeaD77127f7b8D58202" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/delphi-digital.js b/projects/entities/delphi-digital.js new file mode 100644 index 0000000000..3e2938aa33 --- /dev/null +++ b/projects/entities/delphi-digital.js @@ -0,0 +1,22 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x5Ca29DC4845b8cB19CCF335337b774749C7Bb617", + "0x4181805C36ad6B1b2aDb43D0b0615d676ACBF9b4", + ], + }, + bsc: { + owners: [ + "0x4181805C36ad6B1b2aDb43D0b0615d676ACBF9b4" + ], + }, + avax: { + owners: [ + "0x4181805C36ad6B1b2aDb43D0b0615d676ACBF9b4" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/digital-finance-group.js b/projects/entities/digital-finance-group.js new file mode 100644 index 0000000000..88a171642b --- /dev/null +++ b/projects/entities/digital-finance-group.js @@ -0,0 +1,22 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xEaf3B28A87D498530cDC7f0700E70502CF896D3f", + "0x90FFFbbdf770eFB530d950C24bf56a292CDab3F7", + "0xC71BaF5d8667FfF515246811a4f61350D26A191F", + "0x36822AD3f4dF3E49EB042AFE74e43551d3c3Adba" + ], + }, + bsc: { + owners: [ + "0xEaf3B28A87D498530cDC7f0700E70502CF896D3f", + "0x2C20E739552cd0BEAF523930BAAD7754C426C962", + "0x36822AD3f4dF3E49EB042AFE74e43551d3c3Adba", + "0xC71BaF5d8667FfF515246811a4f61350D26A191F" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/dragonfly-capital.js b/projects/entities/dragonfly-capital.js new file mode 100644 index 0000000000..ab3e8939e8 --- /dev/null +++ b/projects/entities/dragonfly-capital.js @@ -0,0 +1,18 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xB953E202C5E51C7C010E80402a63C02f37F14059", //1.9m$ in cega protocol + // "0xe4A2410e158a790463ba1b2c98693061f5A3A9EF", old wallet not sure if related + // "0x30BDC51A48272F96480921ea280448695D2B5d6F", old wallet not sure if related + "0x221E3c87A034E79Dd16d64762a1B20FB71594F46", + "0xF410dC5Ff862BfD36111aD492123280dDB23D495", + // "0xEC4b615C8aBfB491cD4227b165A1e389DB5e8286", old wallet not sure if related + "0xB93994e2efCAed3E88C538F68eC6A2587C3E2ebF", + "0x002A5dc50bbB8d5808e418Aeeb9F060a2Ca17346" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/fbg-capital.js b/projects/entities/fbg-capital.js new file mode 100644 index 0000000000..bbeb547dfa --- /dev/null +++ b/projects/entities/fbg-capital.js @@ -0,0 +1,18 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xe25397734a184053cF382E5C4e32cA7eF8335F31", + "0x7c04A698855d1ECF9610636a1d7AFf8E03331fa5", + "0xb079F40dd951d842f688275100524c09bEf9b4E2" + ], + }, + avax: { + owners: [ + "0xe25397734a184053cF382E5C4e32cA7eF8335F31" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/fenbushi-capital.js b/projects/entities/fenbushi-capital.js new file mode 100644 index 0000000000..cf89112020 --- /dev/null +++ b/projects/entities/fenbushi-capital.js @@ -0,0 +1,18 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xCef1B4Bf8F05F623A2A688b56d9dA679D302EBa7", + "0x5963efF631bf3d28b68388909e2404AA6dB1e7a8" // binance deposited account + + ], + }, + arbitrum: { + owners: [ + "0xCef1B4Bf8F05F623A2A688b56d9dA679D302EBa7" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/framework-ventures.js b/projects/entities/framework-ventures.js new file mode 100644 index 0000000000..7f96602761 --- /dev/null +++ b/projects/entities/framework-ventures.js @@ -0,0 +1,11 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x681148725731F213b0187A3CBeF215C291D85a3E", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/genesis-trading.js b/projects/entities/genesis-trading.js new file mode 100644 index 0000000000..b81ca87613 --- /dev/null +++ b/projects/entities/genesis-trading.js @@ -0,0 +1,25 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x35b517039f75df2469Af8A329b75DfE215b33790", + "0x16ADa39D140699D9a1934F05DdCf78612f342b3e", + "0x7a59384e2bD2D75fb3e83c486b61921fa517EB27", + "0x2095feFc0cf268E58087A43DBf9733532eD51B25", + "0xF65D8e83396e66340743D852db8eb116BeC0027a", + "0xBF4731191af7029f7D669D3e337a0063D1E008a3", + "0x6d21266DfcF5541BEE9F67c4837AAa72b3BF9303", + "0xd628f7c481c7Dd87F674870BEc5D7A311Fb1D9A2", + "0xaF641E29C4730530d9428A37C5934B00a73624A9", + "0x7DC47f4C227e22DA6C81fCB4c253d1DC18BeC4A3" + ], + }, + avax: { + owners: [ + "0xd628f7c481c7dd87f674870bec5d7a311fb1d9a2", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/id-capital.js b/projects/entities/id-capital.js new file mode 100644 index 0000000000..bf2e8dfb90 --- /dev/null +++ b/projects/entities/id-capital.js @@ -0,0 +1,34 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xC3ad72Bf4721fdF448c970f2F8E303c57588B73c", + "0xbFC94A95d4448C802E848C68fdD2FC0fEE4a876E" + ], + }, + polygon: { + owners: [ + "0xC3ad72Bf4721fdF448c970f2F8E303c57588B73c", + "0xbFC94A95d4448C802E848C68fdD2FC0fEE4a876E" + ], + }, + bsc: { + owners: [ + "0xC3ad72Bf4721fdF448c970f2F8E303c57588B73c", + "0xbFC94A95d4448C802E848C68fdD2FC0fEE4a876E" + ], + }, + avax: { + owners: [ + "0xC3ad72Bf4721fdF448c970f2F8E303c57588B73c", + ], + }, + arbitrum: { + owners: [ + "0xC3ad72Bf4721fdF448c970f2F8E303c57588B73c", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/jump-capital.js b/projects/entities/jump-capital.js new file mode 100644 index 0000000000..bc480ed7af --- /dev/null +++ b/projects/entities/jump-capital.js @@ -0,0 +1,25 @@ + +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xCB8EFB0c065071E4110932858A84365A80C8feF0" + + ], + }, + avax: { + owners: [ + "0xCB8EFB0c065071E4110932858A84365A80C8feF0" + + ], + }, + bsc: { + owners: [ + "0xCB8EFB0c065071E4110932858A84365A80C8feF0" + + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/mechanism-capital.js b/projects/entities/mechanism-capital.js new file mode 100644 index 0000000000..032dee922f --- /dev/null +++ b/projects/entities/mechanism-capital.js @@ -0,0 +1,13 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x6Af3D183d225725d975C5EaA08D442dd01Aad8fF", + "0x953a50bd2daAa852A4Bc3E58b3AcFb95EA4E82D2", + "0x1366Dcf0f0178802Be85d405BBeA8026EC0876c4" // binance deposited account + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/mt-gox.js b/projects/entities/mt-gox.js new file mode 100644 index 0000000000..3adb8f9224 --- /dev/null +++ b/projects/entities/mt-gox.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 diff --git a/projects/entities/multi-chain-capital.js b/projects/entities/multi-chain-capital.js new file mode 100644 index 0000000000..f345ba0ea6 --- /dev/null +++ b/projects/entities/multi-chain-capital.js @@ -0,0 +1,31 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xfbf335f8224a102e22abe78d78cc52dc95e074fa" //2.6m$ on convex + ], + }, + bsc: { + owners: [ + "0xFBf335f8224a102e22abE78D78CC52dc95e074Fa", + ], + }, + fantom: { + owners: [ + "0xFBf335f8224a102e22abE78D78CC52dc95e074Fa", + ], + }, + optimism: { + owners: [ + "0xFBf335f8224a102e22abE78D78CC52dc95e074Fa", + ], + }, + avax: { + owners: [ + "0xFBf335f8224a102e22abE78D78CC52dc95e074Fa", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/ngc-ventures.js b/projects/entities/ngc-ventures.js new file mode 100644 index 0000000000..22f732c1cd --- /dev/null +++ b/projects/entities/ngc-ventures.js @@ -0,0 +1,31 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD", + ], + }, + arbitrum: { + owners: [ + "0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD", + ], + }, + bsc: { + owners: [ + "0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD", + ], + }, + polygon: { + owners: [ + "0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD", + ], + }, + avax: { + owners: [ + "0x53F470A909d7CE7f35e62f4470fD440B1eD5D8CD", + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/pantera-capital.js b/projects/entities/pantera-capital.js new file mode 100644 index 0000000000..11a1f6c514 --- /dev/null +++ b/projects/entities/pantera-capital.js @@ -0,0 +1,12 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x12ca45FEd7998ba0E56f52D678823A508BA9A99E", + "0x5789C571552b4820BfA64eFB6F0CaD80fD2A9Bca" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/paradigm-capital.js b/projects/entities/paradigm-capital.js new file mode 100644 index 0000000000..d70a67f182 --- /dev/null +++ b/projects/entities/paradigm-capital.js @@ -0,0 +1,15 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x11577a8a5baf1e25b9a2d89f39670f447d75c3cd", + "0xCA8d6F69D8f32516a109Df68B623452cc9f5E64d", + "0x917B3ACa2142Dd136fa106229990EA4D02763A83", + "0x09F82Ccd6baE2AeBe46bA7dd2cf08d87355ac430", + '0x820fb25352BB0c5E03E07AFc1d86252fFD2F0A18', //LIDO TOKENS + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/plutus-vc.js b/projects/entities/plutus-vc.js new file mode 100644 index 0000000000..b14fd8ea90 --- /dev/null +++ b/projects/entities/plutus-vc.js @@ -0,0 +1,16 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0x3105889390F894F8ee1d3f8f75E2c4dde57735bA" + ], + }, + bsc: { + owners: [ + "0x3105889390F894F8ee1d3f8f75E2c4dde57735bA" + ], + }, +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/polychain-capital.js b/projects/entities/polychain-capital.js new file mode 100644 index 0000000000..9e513bd927 --- /dev/null +++ b/projects/entities/polychain-capital.js @@ -0,0 +1,13 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + "0xBcd5000F5c522856E710c5d274bb672B2f2EefBf", + "0x53c286E0AbE87c9e6d4d95ebE62ceaFa4aFCE849" + ], + }, + +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/entities/silkroad-fbifunds.js b/projects/entities/silkroad-fbifunds.js new file mode 100644 index 0000000000..3adb8f9224 --- /dev/null +++ b/projects/entities/silkroad-fbifunds.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 diff --git a/projects/epsylon/index.js b/projects/epsylon/index.js index 2a0b75871b..a4d23ebe7f 100644 --- a/projects/epsylon/index.js +++ b/projects/epsylon/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { default: BigNumber } = require("bignumber.js"); @@ -5,8 +6,8 @@ const { default: BigNumber } = require("bignumber.js"); const USDC_VAULT = "0x756d09263483dC5A6A0023bb80933db2C680703E"; const USDC_2_VAULT = "0x69e475b67052987707E953b684c7d437e15AC511"; const WFTM_VAULT = "0x22c538c1EeF31B662b71D5C8DB47847d30784976"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const WFTM = "0x4e15361fd6b4bb609fa63c81a2be19d873717870"; +const USDC = ADDRESSES.ethereum.USDC; +const WFTM = ADDRESSES.ethereum.FTM; async function tvl() { let balances = {}; diff --git a/projects/equilibria/index.js b/projects/equilibria/index.js new file mode 100644 index 0000000000..eef4aa7849 --- /dev/null +++ b/projects/equilibria/index.js @@ -0,0 +1,96 @@ +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const contracts = { + ethereum: { + boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", + staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", + eqbAddress: "0xfE80D611c6403f70e5B1b9B722D2B3510B740B2B", + eqbRewardsAddress: "0xd8967B2B15b3CDF96039b7407813B4037f73ec27", + pendleAddress: "0x808507121b80c02388fad14726482e061b8da827", + }, + arbitrum: { + boosterAddress: "0x4D32C8Ff2fACC771eC7Efc70d6A8468bC30C26bF", + staker: "0x64627901dAdb46eD7f275fD4FC87d086cfF1e6E3", + eqbRewardsAddress: "0x70f61901658aAFB7aE57dA0C30695cE4417e72b9", + pendleAddress: "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", + }, +}; + +async function tvl(chain, block) { + const balances = {}; + + if (chain === "ethereum") { + const pendleLocked = await sdk.api2.abi.call({ + target: "0x4f30A9D41B80ecC5B94306AB4364951AE3170210", + params: contracts[chain].staker, + abi: "erc20:balanceOf", + block, + }); + sdk.util.sumSingleBalance( + balances, + contracts[chain].pendleAddress, + pendleLocked + ); + } + + const poolLength = await sdk.api2.abi.call({ + chain, + block, + target: contracts[chain].boosterAddress, + abi: "function poolLength() view returns (uint256)", + }); + + 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 chains = ["ethereum", "arbitrum"]; + +module.exports = { + doublecounted: true, +}; + +chains.forEach((chain) => { + module.exports[chain] = { + tvl: async (_, _b, { [chain]: block }) => tvl(chain, block), + }; +}); + +module.exports.ethereum.staking = sumTokensExport({ + owner: contracts.ethereum.eqbRewardsAddress, + tokens: [contracts.ethereum.eqbAddress], +}); diff --git a/projects/equito-finance/index.js b/projects/equito-finance/index.js new file mode 100644 index 0000000000..25c3c7de99 --- /dev/null +++ b/projects/equito-finance/index.js @@ -0,0 +1,38 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokensExport } = require("../helper/sumTokens"); + +// Addresses +const ALGO_VAULT1 = + "XYE5SU66M6JV24REYQJMXUMIWK54X5I6TWYP25RIA3NH7YEEY6UPPWM3RY"; +const ETH_VAULT1 = "0x274af57Cc969cA96980BA043332D4fb79F496708"; +const BSC_VAULT1 = "0x9Aa09a1D7ACD6Bb7b4bB5ae4c6F91279E78502a8"; + +const ALGO_VAULT2 = + "56CF35MFZHMCWTVJZLNBTP62UJKFRRKW47GTSOVATZONVEZ6ASSWRWOOHM"; +const ETH_VAULT2 = "0x4d753245f273e119Be944Ae180A17DfE35258e1e"; +const BSC_VAULT2 = "0x7aFeCFABBA462121262D81d764e289aB77966aec"; + +// Tokens +const ETH_PSYOP = "0xaa07810aE08575921c476Ff088bc949da43e4964"; + +module.exports = { + hallmarks: [ + [1671724719, "Start of bridge"], + [1683547217, "Ethereum, Binance vaults deployed"], + ], + methodology: + "TVL counts native tokens locked in EquitoFinance bridge vaults.", + algorand: { tvl: sumTokensExport({ owners: [ALGO_VAULT1, ALGO_VAULT2] }) }, + ethereum: { + tvl: sumTokensExport({ + owners: [ETH_VAULT1, ETH_VAULT2], + tokens: [ADDRESSES.null, ADDRESSES.ethereum.INU, ETH_PSYOP], + }), + }, + bsc: { + tvl: sumTokensExport({ + owners: [BSC_VAULT1, BSC_VAULT2], + tokens: [ADDRESSES.null], + }), + }, +}; diff --git a/projects/equity/index.js b/projects/equity/index.js new file mode 100644 index 0000000000..ac9a5fa967 --- /dev/null +++ b/projects/equity/index.js @@ -0,0 +1,9 @@ +// Equity - Central Vaults +const { gmxExports } = require("../helper/gmx"); + +module.exports = { + fantom: { + //tvl: gmxExports({ vault: '0x9e4105f9e2284532474f69e65680e440f4c91cb8' }), // Vault #1 - Disabled + tvl: gmxExports({ vault: '0x0Fb84ADB9c16D28b92c09c382CaadbDdD8e354c4' }), // Vault #2 + }, +}; diff --git a/projects/erasure/index.js b/projects/erasure/index.js index 237cf190ff..d2d19e7871 100644 --- a/projects/erasure/index.js +++ b/projects/erasure/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -22,7 +23,7 @@ const tokenAddresses = [ '0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671', // NMR - '0x6B175474E89094C44Da98b954EedeAC495271d0F' // DAI + ADDRESSES.ethereum.DAI // DAI ] /*================================================== diff --git a/projects/ergodex.js b/projects/ergodex.js index c58c8445d8..46776b2495 100644 --- a/projects/ergodex.js +++ b/projects/ergodex.js @@ -1,16 +1,24 @@ +const { sumTokensExport } = require('./helper/chain/ergo') const utils = require('./helper/utils'); -const {toUSDTBalances} = require('./helper/balances') -async function tvl() { - var totalTvl = await utils.fetchURL('https://api.spectrum.fi/v1/amm/platform/stats'); - return toUSDTBalances(totalTvl.data.tvl.value/100); +async function cardanoTVL() { + let response = await utils.fetchURL('https://analytics.spectrum.fi/cardano/pools/overview?after=0') + let data = response.data; + + let totalTvl = 0; + for(let i=0; i ({}), - staking + staking: sumTokensExport({ + owners: [ + '3eiC8caSy3jiCxCmdsiFNFJ1Ykppmsmff2TEpSsXY1Ha7xbpB923Uv2midKVVkxL3CzGbSS2QURhbHMzP9b9rQUKapP1wpUQYPpH8UebbqVFHJYrSwM3zaNEkBkM9RjjPxHCeHtTnmoun7wzjajrikVFZiWurGTPqNnd1prXnASYh7fd9E2Limc2Zeux4UxjPsLc1i3F9gSjMeSJGZv3SNxrtV14dgPGB9mY1YdziKaaqDVV2Lgq3BJC9eH8a3kqu7kmDygFomy3DiM2hYkippsoAW6bYXL73JMx1tgr462C4d2PE7t83QmNMPzQrD826NZWM2c1kehWB6Y1twd5F9JzEs4Lmd2qJhjQgGg4yyaEG9irTC79pBeGUj98frZv1Aaj6xDmZvM22RtGX5eDBBu2C8GgJw3pUYr3fQuGZj7HKPXFVuk3pSTQRqkWtJvnpc4rfiPYYNpM5wkx6CPenQ39vsdeEi36mDL8Eww6XvyN4cQxzJFcSymATDbQZ1z8yqYSQeeDKF6qCM7ddPr5g5fUzcApepqFrGNg7MqGAs1euvLGHhRk7UoeEpofFfwp3Km5FABdzAsdFR9', + 'BxjSQHD1hqQFUXbXatkn46YUxM6wVsLkT5HNXJe1N1n3dM2c7X8BtgnLqszJuxoRTnzXzrCrmEjPyLxqstcnW7YkQJ9m7QTmhChBYt1hAFcTWiyVMdaiYYFtxr7qfXKcjsadtfusNhS63ZddciC3wogjrfSE3U2Fy9dhrrKStUVzWhTP22ZuwdDPv8F88WVtdLsu24bbHsv2ntXZJGhvdKnvJL83kJWs9XV582sqUBqX7kL2A5qp6T2Jxgt3gLxcZ99JhUG99YtRsmpuwb94TE5KVTESWA6cD8EdReTbP1kwW77rnJyNfj8KUsy1j7AZuNBUsVBc3oLV4GxYFDvaTNEyNBmGY3dEe8k7UKjUSnqCmYH2QM2cmhtPEdT6UBR9sS4h4YFiGsRHiybjuTSaBUPrzhJ12ESKf8jcaNna9rYprzm8ZnfwNEQFtPJyKfCoJjbwkfsAEirsMcyU3VjPAvKJ2mtu7A3WwXViBSfwUgdCnWkEhdPCRPueAXfN38JXG8HjJeZTPi3VtgcnFobg8Zjp1XtRkTaoj6i4BgyfwCft3sCYgBgmNjXhtFuuozpCiAXWyGMMs5rhJL6FzXsJWiTSML96LdshFnhoPRPi8FXVooURKztnqJowFcpLApL2ou2jfeC4iaxKgtd6zDR6ikFVXMsipVHmBrhan9dheUPnfjeXz9WVPmGLmVkrxnVv', + '5ASYVJ2w8tH3bDMmDvjvgX76HQen4rcvoHku32GsL9js8THW6rduV5VDy8Diue6rRQfp4DRTs4P9bd4vjQY9mmE94A473YeANVps31i76HD88Xk3oeuMgWSgAPuTncfYG1hYHvyT9N7RECUYb64Hs8b2kuvUksccZ841k1vYTmhzseiAFEC59PPnfxxJ4EL9MJ6oHSfwwJBYaZHjmH5eCPkXbJZhGwnTb6bFXvCGGucjDXhmiDPSXGUU49U3r8gN2eTnbh5Dz5mh9eSudUGf7N1fWtT3asz1uruMcdYeNFptD2jFNz6MDTqajZjSEw5guvAmvZAYnfiXwRW8yQyqbd5GcwiuiaPybcGThdf5TLhYxrNeTr1eLn7d1A1RGvySo8dz9vHNrzsK4Zd8HGK4ofhE4kwepyNbYWJY9XbfKVZxqtmLTUHwheNwiJ7cQSCcQUFyMZwAKmjuXdPrVZ9AftFc5gkdqdaC82ya8oMhsbHBV68yorJbp4yyXs8qjaegUfEb4TEZ4L9NsTTsKZxfHB2GypBmssJ6gHGEongQWnca3zqSV9A55SGwbvMQrrkrnvAe9UVsK1h6XwzBj41vF2faVp7Sfp5noqJi9jZjobiCTYA344RW6dNpGS2YpxNzrZtxvyVhmyF9Tms7nSTUMpbF4L', + '5ASYVJ2w8tH3bDQx5ZLz6rZUdokD1kmTXSRZ8GfrsAUW4vqy9eg5omtTYVzY22ibHANf7GgSc2E5FiThgo8qXzWpU3RDLohN277hksbAf9yykajXbYPUaXUeMPfSXbS1GdE4y2GoYKaXHR3H57MV5CDZE58YteqWe3XVXzmMvj1192AD7UZ1N6nguRfjgijxEWTrLq2ZrykjRAut2JBGYHanAKn46tYWW3chpxNosXG7ZW2ShDzKju2ttHhfxeZVMBydryuoEya5E9KVagjsfa9E2qPUdLpbh8enppVWcwoQ4GF1ktgzSX32QbfKhfpD23iWQixThUbcCca14FjXDt94GVFPuhAT5tQyiKen863Cq5eRAEgsQ7otX6pWa32Q28sxSF9Az4abwiJKNbFhbhb3cDCs6A45ZnW6aB6AkfwTJSAZ2ZzqqG7LXT4HdxNpdmiwno9sJWxPf2PC4vRhVqBPdxxyCgoodjyutf4UuinSCibhfqdhUJLc1JM8zX9UcD699mChgUZoKE8kXD4soVGSgQD3qfGXC6RP7n8dtowArNLm3H5QJ3EobDCbEgECLHFaHN2BPwwWscAt5eejKeFvkp3CuQ3mqFW7vfQG4n9tTLnshj8cjxnpkBdfFKC83sW8A3AoZAX4K1UrhndfLSFh4w', + ] + }) }, - methodology: `Ergopad TVL is achieved by making a call to its API: https://ergopad.io/api/blockchain/tvl/d71693c49a84fbbecd4908c94813b46514b18b67a99952dc1e6e4791556de413 and consists of both staked ergopad tokens.` } diff --git a/projects/eris-protocol/index.js b/projects/eris-protocol/index.js index 89dffd1fb3..c4e1cf057e 100644 --- a/projects/eris-protocol/index.js +++ b/projects/eris-protocol/index.js @@ -1,7 +1,7 @@ -const { queryContract } = require("../helper/chain/terra"); const { queryContract: queryContractCosmos, getBalance, + getBalance2, } = require("../helper/chain/cosmos"); // For testing run @@ -50,64 +50,151 @@ const config = { kujira: { coinGeckoId: "kujira", hub: "kujira1n3fr5f56r2ce0s37wdvwrk98yhhq3unnxgcqus8nzsfxvllk0yxquurqty", + voteEscrow: + "kujira1mxzfcxpn6cjx4u9zln6ttxuc6fuw6g0cettd6nes74vrt2f22h4q3j5cdz", + ampToken: + "factory/kujira1n3fr5f56r2ce0s37wdvwrk98yhhq3unnxgcqus8nzsfxvllk0yxquurqty/ampKUJI", }, juno: { coinGeckoId: "juno-network", hub: "juno17cya4sw72h4886zsm2lk3udxaw5m8ssgpsl6nd6xl6a4ukepdgkqeuv99x", }, + migaloo: { + coinGeckoId: "white-whale", + hub: "migaloo1436kxs0w2es6xlqpp9rd35e3d0cjnw4sv8j3a7483sgks29jqwgshqdky4", + voteEscrow: + "migaloo1hntfu45etpkdf8prq6p6la9tsnk3u3muf5378kds73c7xd4qdzysuv567q", + ampToken: + "factory/migaloo1436kxs0w2es6xlqpp9rd35e3d0cjnw4sv8j3a7483sgks29jqwgshqdky4/ampWHALE", + // currently not running due to node simulation gas issues + arbVault: + "migaloo1ey4sn2mkmhew4pdrzk90l9acluvas25qlhuvsfgssw42ugz8yjlqx92j9l", + }, + osmosis: { + coinGeckoId: "osmosis", + hub: "osmo1dv8wz09tckslr2wy5z86r46dxvegylhpt97r9yd6qc3kyc6tv42qa89dr9", + voteEscrow: + "osmo1vcg9a7zwfeuqwtkya5l34tdgzxnafdzpe22ahphd02uwed43wnfs3wtf8a", + ampToken: + "factory/osmo1dv8wz09tckslr2wy5z86r46dxvegylhpt97r9yd6qc3kyc6tv42qa89dr9/ampOSMO", + }, + injective: { + coinGeckoId: "injective-protocol", + hub: "inj1cdwt8g7nxgtg2k4fn8sj363mh9ahkw2qt0vrnc", + voteEscrow: "inj1yp0lgxq460ked0egtzyj2nck3mdhr8smfmteh5", + ampToken: "factory/inj1cdwt8g7nxgtg2k4fn8sj363mh9ahkw2qt0vrnc/ampINJ", + decimals: 18, + }, + neutron: { + farms: [ + "neutron1h4ehzx3j92jv4tkgjy3k2qphh5863l68cyep7vaf83fj6k89l4lqjfyh77", + "neutron1sfmpf84xacu2la88zzsgende2jjlczswdmhzn7jh6tuhn43jl86q6d0vhj", + "neutron1smam4j5cypw2vp7un3q8w68sg97zq9s2c95ukwsmpsl2jh4xwzdskxm6az", + "neutron188xz8cg4uqk4ssg9tcf3q2764ar8ev0jr8qpx2qspchul98ykzuqx58r50", + ], + coinGeckoMap: { + "ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349": + "usd-coin", + "ibc/57503D7852EF4E1899FE6D71C5E81D7C839F76580F86F21E39348FC2BC9D7CE2": + "tether", + "ibc/5751B8BCDA688FD0A8EC0B292EEF1CDEAB4B766B63EC632778B196D317C40C3A": + "astroport-fi", + untrn: "neutron-3", + "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9": + "cosmos", + }, + }, }; -async function tvlHub(chain) { - let chainConfig = config[chain]; - let coinGeckoId = chainConfig.coinGeckoId; - - const res = await queryContractCosmos({ - contract: chainConfig.hub, +async function getState(chain, contract) { + if (!contract) { + return {}; + } + return queryContractCosmos({ + contract, chain, data: { state: {} }, }); +} - let tvl = +(res.tvl_uluna ?? res.tvl_utoken ?? 0) / 1e6; +async function tvlHub(chain, state) { + let chainConfig = config[chain]; + let coinGeckoId = chainConfig.coinGeckoId; + + state ||= await getState(chain, chainConfig.hub); + + let tvl = + +(state.tvl_uluna ?? state.tvl_utoken ?? 0) / getDecimalFactor(chainConfig); return { [coinGeckoId]: tvl, }; } +function getDecimalFactor(chainConfig) { + let decimals = chainConfig.decimals ?? 6; + return Math.pow(10, decimals); +} + async function tvlArbVault(chain) { let chainConfig = config[chain]; let coinGeckoId = chainConfig.coinGeckoId; - const res = await queryContractCosmos({ - contract: chainConfig.arbVault, - chain, - data: { state: {} }, - }); + if (!chainConfig.arbVault) { + return {}; + } - let tvl = +(res.balances.tvl_utoken ?? 0) / 1e6; + const res = await getState(chain, chainConfig.arbVault); + + let tvl = +(res.balances.tvl_utoken ?? 0) / getDecimalFactor(chainConfig); return { [coinGeckoId]: tvl, }; } -async function tvlAmpGovernance(chain) { +async function tvlAmpGovernance(chain, state) { let chainConfig = config[chain]; - let coinGeckoId = chainConfig.coinGeckoIdAmp; - const res = await getBalance({ - owner: chainConfig.voteEscrow, - token: chainConfig.ampToken, - chain, - }); + if (!chainConfig.ampToken) { + return {}; + } - let tvl = +(res.tvl_uluna ?? res.tvl_utoken ?? 0) / 1e6; - return { - [coinGeckoId]: tvl, - }; + let isTokenFactory = chainConfig.ampToken.startsWith("factory"); + + let ampAmount = 0; + + if (isTokenFactory) { + let balances = await getBalance2({ + owner: chainConfig.voteEscrow, + token: isTokenFactory, + chain, + }); + + ampAmount = +(balances[chainConfig.ampToken] ?? 0); + } else { + ampAmount = await getBalance({ + owner: chainConfig.voteEscrow, + token: chainConfig.ampToken, + chain, + }); + } + + if (chainConfig.coinGeckoIdAmp) { + return { + [chainConfig.coinGeckoIdAmp]: ampAmount / getDecimalFactor(chainConfig), + }; + } else { + state ||= await getState(chain, chainConfig.hub); + let amount = + (ampAmount / getDecimalFactor(chainConfig)) * +state.exchange_rate; + return { + [chainConfig.coinGeckoId]: amount, + }; + } } -async function farm2Tvl(farm) { - const res = await queryContract({ - isTerra2: true, +async function farm2Tvl(chain, farm) { + const res = await queryContractCosmos({ + chain: chain, contract: farm, data: { state: {} }, }); @@ -126,8 +213,8 @@ async function farm2Tvl(farm) { amount: +res.locked_assets[1].amount, }; - token1.coinGeckoId = getCoinGeckoId("terra2", token1.denom); - token2.coinGeckoId = getCoinGeckoId("terra2", token2.denom); + token1.coinGeckoId = getCoinGeckoId(chain, token1.denom); + token2.coinGeckoId = getCoinGeckoId(chain, token2.denom); let results = []; if (token1.coinGeckoId) { @@ -171,33 +258,35 @@ function merge(elements) { }, {}); } -function terraTvl() { - return mergePromises([tvlHub("terra")]); -} - -function kujiraTvl() { - return mergePromises([tvlHub("kujira")]); -} - -function junoTvl() { - return mergePromises([tvlHub("juno")]); -} - -function terra2Tvl() { - return mergePromises([ - tvlHub("terra2"), - tvlArbVault("terra2"), - tvlAmpGovernance("terra2"), - ...config.terra2.farms.map(farm2Tvl), - ]); +async function productsTvl(chain) { + let chainConfig = config[chain]; + try { + let state = await getState(chain, chainConfig.hub); + return await mergePromises([ + tvlHub(chain, state), + tvlAmpGovernance(chain, state), + tvlArbVault(chain).catch((a) => ({})), + ...(chainConfig.farms ?? []).map((farm) => farm2Tvl(chain, farm)), + ]); + } catch (error) { + let url = error?.response?.config?.url; + if (url) { + console.log("Issue calling", error?.response?.config?.url); + } + throw error; + } } module.exports = { timetravel: false, misrepresentedTokens: false, methodology: "Liquid Staking and Arbitrage Protocol", - terra2: { tvl: terra2Tvl }, - terra: { tvl: terraTvl }, - kujira: { tvl: kujiraTvl }, - juno: { tvl: junoTvl }, + terra2: { tvl: () => productsTvl("terra2") }, + terra: { tvl: () => productsTvl("terra") }, + kujira: { tvl: () => productsTvl("kujira") }, + juno: { tvl: () => productsTvl("juno") }, + migaloo: { tvl: () => productsTvl("migaloo") }, + injective: { tvl: () => productsTvl("injective") }, + osmosis: { tvl: () => productsTvl("osmosis") }, + neutron: { tvl: () => productsTvl("neutron") }, }; diff --git a/projects/ethalend/index.js b/projects/ethalend/index.js index 4005d35e7d..d3b4da469b 100644 --- a/projects/ethalend/index.js +++ b/projects/ethalend/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const abi = require('./abi.json') const { unwrapUniswapLPs } = require('../helper/unwrapLPs') @@ -51,7 +52,7 @@ async function tvl(chain, block, chainId) { const globalData = (await request("https://api.thegraph.com/subgraphs/name/ethalend/etha-v1", globalDataQuery, { block: block - 100 })).globalDatas await Promise.all(globalData.filter(v => v.type === "lending").map(async v => { if (v.address === "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { - v.address = "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270" + v.address = ADDRESSES.polygon.WMATIC_2 } const decimals = await sdk.api.erc20.decimals(v.address, chain) sdk.util.sumSingleBalance(balances, chain + ':' + v.address, BigNumber(v.totalUnderlying).times(10 ** decimals.output).toFixed(0)) diff --git a/projects/ether-fi/index.js b/projects/ether-fi/index.js index ee7430aa68..8c9ec59018 100644 --- a/projects/ether-fi/index.js +++ b/projects/ether-fi/index.js @@ -1,13 +1,14 @@ -const { tokens } = require('../helper/tokenMapping') +const { nullAddress } = require("../helper/unwrapLPs"); +const sdk = require('@defillama/sdk') module.exports = { - misrepresentedTokens: true, ethereum: { - tvl: async (_, _1, _2, { api }) => { - const tvl = await api.call({ abi: 'uint256:getContractTVL', target: '0x7623e9DC0DA6FF821ddb9EbABA794054E078f8c4'}) + tvl: async (timestamp) => { + const api = new sdk.ChainApi({ timestamp, chain: 'optimism' }) + await api.getBlock() return { - [tokens.ethereum]: tvl + [nullAddress]: await api.call({ target: '0x6329004E903B7F420245E7aF3f355186f2432466', abi: 'uint256:getTvl'}) } } } -} \ No newline at end of file +} diff --git a/projects/etherberry/index.js b/projects/etherberry/index.js new file mode 100644 index 0000000000..4c2921668d --- /dev/null +++ b/projects/etherberry/index.js @@ -0,0 +1,34 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); +const { getLogs } = require("../helper/cache/getLogs"); +const { pool2 } = require("../helper/pool2"); + +const FACTORY_CONTRACT = "0x09cA2dF4956720aB75c55313a7c83A63286fDd42"; +const WETH_ADDRESS = ADDRESSES.arbitrum.WETH; +const BERRY_ETH_LP_ADDRESS = "0x6eF6eCD8AC5626525383d72AfaA9a7e7e39C0959"; +const BERRY_ETH_STAKING_POOL = "0xcA4319D51472D7111fa3A103b07fc08fC8b20655"; + +async function tvl(timestamp, block, chainBlocks, { api }) { + const logs = await getLogs({ + api, + target: FACTORY_CONTRACT, + topics: ["0x489ab9065c597368f4a678fadcb323bf4c848713ea7d5a296d16ec97203eae83",], + eventAbi: "event StakingPoolDeployed(address indexed poolAddress,address indexed stakingToken,uint256 startTime,uint256 roundDurationInDays)", + onlyArgs: true, + fromBlock: 93557929, + }); + + const lsdAddresses = logs.map((i) => i.stakingToken === nullAddress ? WETH_ADDRESS : i.stakingToken); + const poolAddresses = logs.map((i) => i.poolAddress); + + return sumTokens2({ api, tokensAndOwners2: [lsdAddresses, poolAddresses], blacklistedTokens: [BERRY_ETH_LP_ADDRESS], }); +} + +module.exports = { + arbitrum: { + methodology: + "TVL of Staked ETH & LSD tokens, with pool2 including value of staked BERRY/ETH Uniswap-V2 LP tokens", + tvl, + pool2: pool2([BERRY_ETH_STAKING_POOL], [BERRY_ETH_LP_ADDRESS]), + }, +}; diff --git a/projects/ethichub/index.js b/projects/ethichub/index.js index b4821545df..cdb3f2eb90 100644 --- a/projects/ethichub/index.js +++ b/projects/ethichub/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { transformCeloAddress } = require('../helper/portedTokens'); const { pool2 } = require("../helper/pool2"); @@ -13,7 +14,7 @@ const MINIMICE_ETH = '0x21320683556BB718c8909080489F598120C554D9'; const ORIGINATOR_BRAZIL = '0x3B61CD481Be3BA62a9a544c49d6C09FCb804d0e3'; const ORIGINATOR_HONDURAS = '0x7435C0232A69270D19F8E4010571175c3f1dd955'; // Celo -const ETHIX_TOKEN_CELO = '0x9995cc8F20Db5896943Afc8eE0ba463259c931ed'; +const ETHIX_TOKEN_CELO = ADDRESSES.celo.ETHIX; const COLLATERAL_RESERVE_CELO = '0xA14B1D7E28C4F9518eb7757ddeE35a18423e1567'; const STAKED_ETHIX_CELO = '0xCb16E29d0B667BaD7266E5d0Cd59b711b6273C6B'; const MINIMICE_CELO = '0x0f497a790429685a3CfD43b841865Ee185378ff0'; diff --git a/projects/ethos/index.js b/projects/ethos/index.js new file mode 100644 index 0000000000..5bb56ca4ed --- /dev/null +++ b/projects/ethos/index.js @@ -0,0 +1,22 @@ +const { unwrapBalancerToken } = require("../helper/unwrapLPs") + +async function tvl(_, _b, _cb, { api, }) { + const ADMIN_ADDR = '0xd584a5e956106db2fe74d56a0b14a9d64be8dc93' + const CONFIG_ADDR = await api.call({ abi: 'address:collateralConfig', target: ADMIN_ADDR }) + const collaterals = await api.call({ abi: 'address[]:getAllowedCollaterals', target: CONFIG_ADDR }) + const ACTIVE_POOL = await api.call({ abi: 'address:activePool', target: ADMIN_ADDR }) + const bals = await api.multiCall({ abi: 'function getEntireSystemColl(address) view returns (uint256)', target: ADMIN_ADDR, calls: collaterals }) + api.addTokens(collaterals, bals) +} + +async function pool2(_, _b, _cb, { api, }) { + return unwrapBalancerToken({ ...api, balancerToken: '0xd20f6F1D8a675cDCa155Cb07b5dC9042c467153f', owner: '0x9425b96462b1940e7563cd765464300f6a774805'}) + +} +module.exports = { + methodology: `TVL is fetched from the Ethos Reserve subgraph and the Byte Masons token price api.`, + optimism: { + tvl, + pool2, + }, +} diff --git a/projects/ethwswap/index.js b/projects/ethwswap/index.js index b57a7727b7..e840b9fcdd 100644 --- a/projects/ethwswap/index.js +++ b/projects/ethwswap/index.js @@ -4,7 +4,6 @@ module.exports = { misrepresentedTokens: true, ethpow: { tvl: getUniTVL({ - chain: 'ethpow', useDefaultCoreAssets: true, factory: '0x78376072F4945b2A5450B1A6B41a85ff20034527', }) diff --git a/projects/ethx/index.js b/projects/ethx/index.js new file mode 100644 index 0000000000..5af72e18cb --- /dev/null +++ b/projects/ethx/index.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { staking } = require('../helper/staking') + +module.exports = { + ethereum: { + tvl: staking('0x7b0Eff0C991F0AA880481FdFa5624Cb0BC9b10e1', [ + ADDRESSES.null, + ADDRESSES.ethereum.STETH, + '0x5E8422345238F34275888049021821E8E08CAa1f', + ADDRESSES.ethereum.RETH, + ]), + } +} \ No newline at end of file diff --git a/projects/everlend/index.js b/projects/everlend/index.js index 21ed7a4ddf..e941a1e371 100644 --- a/projects/everlend/index.js +++ b/projects/everlend/index.js @@ -1,15 +1,9 @@ -const { get } = require('../helper/http') - -async function fetch() { - const response = await get('https://api.everlend.finance/api/v1/info') - - return response.tvl; -} +// token vault: GV2MntTz56GmbzvKLYfM3T54KjSgW1fc71kFAeFfrYxC module.exports = { timetravel: false, - solana: { - fetch - }, - fetch, -}; + solana: { tvl: () => 0, }, + hallmarks: [ + [Math.floor(new Date('2023-02-01')/1e3), 'Product is winding down'], + ], +} diff --git a/projects/everrise/index.js b/projects/everrise/index.js index ca56359db5..9a11a8d5e0 100644 --- a/projects/everrise/index.js +++ b/projects/everrise/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const http = require('../helper/http'); const { getConfig } = require('../helper/cache') @@ -6,7 +7,7 @@ const { unwrapUniswapLPs, nullAddress, sumTokens2 } = require("../helper/unwrapL const { getChainTransform } = require("../helper/portedTokens"); const getPairFactory = 'function getPair(address, address) view returns (address)' -const zeroAddress = '0x0000000000000000000000000000000000000000' +const zeroAddress = ADDRESSES.null const BRIDGE_CONTROLLER = '0x0Dd4A86077dC53D5e4eAE6332CB3C5576Da51281'; const RESERVES = [ // '0x78b939518f51b6da10afb3c3238Dd04014e00057', @@ -17,7 +18,7 @@ const EVEROWN_DAO_API = 'https://app.everrise.com/prod/api/v1/contracts/active' const chainConfig = { ethereum: { chainId: '1', - WCoin: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', + WCoin: ADDRESSES.ethereum.WETH, lpFactory: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f', LPs: [ { @@ -26,14 +27,14 @@ const chainConfig = { }, // RISE-ETH ], reserveTokens: [ - "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC + ADDRESSES.ethereum.USDT, // USDT + ADDRESSES.ethereum.USDC, // USDC // TOKEN, ], }, bsc: { chainId: '56', - WCoin: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', + WCoin: ADDRESSES.bsc.WBNB, lpFactory: '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73', LPs: [ { @@ -42,15 +43,15 @@ const chainConfig = { }, // RISE-BNB ], reserveTokens: [ - "0x55d398326f99059fF775485246999027B3197955", // USDT - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", // USDC - "0xe9e7cea3dedca5984780bafc599bd69add087d56", // BUSD + ADDRESSES.bsc.USDT, // USDT + ADDRESSES.bsc.USDC, // USDC + ADDRESSES.bsc.BUSD, // BUSD // TOKEN, ], }, polygon: { chainId: '137', - WCoin: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + WCoin: ADDRESSES.polygon.WMATIC_2, lpFactory: '0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32', LPs: [ { @@ -59,14 +60,14 @@ const chainConfig = { }, // RISE-MATIC ], reserveTokens: [ - "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", // USDT - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", // USDC + ADDRESSES.polygon.USDT, // USDT + ADDRESSES.polygon.USDC, // USDC // TOKEN, ], }, avax: { chainId: '43114', - WCoin: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', + WCoin: ADDRESSES.avax.WAVAX, lpFactory: '0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10', LPs: [ { @@ -75,14 +76,14 @@ const chainConfig = { }, // RISE-AVAX ], reserveTokens: [ - "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", // USDT - "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", // USDC + ADDRESSES.avax.USDt, // USDT + ADDRESSES.avax.USDC, // USDC // TOKEN, ], }, fantom: { chainId: '250', - WCoin: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', + WCoin: ADDRESSES.fantom.WFTM, lpFactory: '0x152eE697f2E276fA89E96742e9bB9aB1F2E61bE3', LPs: [ { @@ -91,7 +92,7 @@ const chainConfig = { }, // RISE-FTM ], reserveTokens: [ - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", // USDC + ADDRESSES.fantom.USDC, // USDC // TOKEN, ], }, diff --git a/projects/evmoswap/index.js b/projects/evmoswap/index.js index d4870fb253..ccb4b70a36 100644 --- a/projects/evmoswap/index.js +++ b/projects/evmoswap/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getChainTransform} = require("../helper/portedTokens") const { getUniTVL } = require('../helper/unknownTokens') const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); -const madDAI = "0x63743ACF2c7cfee65A5E356A4C4A005b586fC7AA" -const madUSDC = "0x51e44FfaD5C2B122C8b635671FCC8139dc636E82" -const madUSDT = "0x7FF4a56B32ee13D7D4D405887E0eA37d61Ed919e" -const madWETH = "0x5842C5532b61aCF3227679a8b1BD0242a41752f2" -const madWBTC = "0xF80699Dc594e00aE7bA200c7533a07C1604A106D" +const madDAI = ADDRESSES.evmos.DAI +const madUSDC = ADDRESSES.evmos.USDC +const madUSDT = ADDRESSES.evmos.USDT +const madWETH = ADDRESSES.evmos.WETH +const madWBTC = ADDRESSES.evmos.WBTC //////////////////////////// UNI AMM //////////////////////////////////// const evmoswapTvl = getUniTVL({ factory: '0xF24E36e53628C3086493B9EfA785ab9DD85232EB', chain: 'evmos', useDefaultCoreAssets: true }) diff --git a/projects/evolutionland/index.js b/projects/evolutionland/index.js index dd5683bf92..daab37b011 100644 --- a/projects/evolutionland/index.js +++ b/projects/evolutionland/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const ring = { @@ -7,10 +8,10 @@ const ring = { "crab": "0x7399Ea6C9d35124d893B8d9808930e9d3F211501", } const weth = { - "ethereum": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "heco": "0x5545153CCFcA01fbd7Dd11C0b23ba694D9509A6F", - "polygon": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", - "crab": "0x2D2b97EA380b0185e9fDF8271d1AFB5d2Bf18329", + "ethereum": ADDRESSES.ethereum.WETH, + "heco": ADDRESSES.heco.WHT, + "polygon": ADDRESSES.polygon.WMATIC_2, + "crab": ADDRESSES.crab.WCRAB, } const lpGOLD = { diff --git a/projects/exit10-fi/index.js b/projects/exit10-fi/index.js new file mode 100644 index 0000000000..c423d159d3 --- /dev/null +++ b/projects/exit10-fi/index.js @@ -0,0 +1,19 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const config = { + ethereum: { + uniV3Holders: ['0xBFD697f71159Ed85eb1A7fE3520Ad8e5d61017fB'], + }, + arbitrum: { + uniV3Holders: ['0x6aC7197B8C41F8C72a82c49fb219be8ec421dbb0'], + }, +} + +module.exports = {}; + +Object.keys(config).forEach(chain => { + const { uniV3Holders } = config[chain] + module.exports[chain] = { + tvl: sumTokensExport({ owners: uniV3Holders, resolveUniV3: true, }) + } +}) \ No newline at end of file diff --git a/projects/exodia/index.js b/projects/exodia/index.js index 094f44770d..496b19b8b1 100644 --- a/projects/exodia/index.js +++ b/projects/exodia/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require("../helper/unwrapLPs"); const sdk = require('@defillama/sdk'); const { transformFantomAddress } = require("../helper/portedTokens"); @@ -9,8 +10,8 @@ const wsexod = "0xe992C5Abddb05d86095B18a158251834D616f0D1" const gohm = "0x91fa20244fb509e8289ca630e5db3e9166233fdc" const mai = "0xfb98b335551a418cd0737375a2ea0ded62ea213b" const treasury = "0x6a654d988eebcd9ffb48ecd5af9bd79e090d8347" -const dai = "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e" -const wftm = "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83" +const dai = ADDRESSES.fantom.DAI +const wftm = ADDRESSES.fantom.WFTM const beetsvault = "0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce" const poolid = "0xa216aa5d67ef95dde66246829c5103c7843d1aab000100000000000000000112" diff --git a/projects/extra/index.js b/projects/extra/index.js new file mode 100644 index 0000000000..8bef68cf25 --- /dev/null +++ b/projects/extra/index.js @@ -0,0 +1,44 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + optimism: { factory: '0xbb505c54d71e9e599cb8435b4f0ceec05fc71cbd', fromBlock: 96265067, vaultFactory: '0x155620a2e6a9392c754b73296d9655061525729b', positionViewer: '0xf9cfb8a62f50e10adde5aa888b44cf01c5957055' }, +} + +module.exports = {}; + +const getVaultAbi = "function getVault(uint256 vaultId) view returns (tuple(address gauge, address pair, address token0, address token1, bool stable, bool paused, bool frozen, bool borrowingEnabled, bool liquidateWithTWAP, uint16 maxLeverage, uint16 premiumMaxLeverage, uint16 maxPriceDiff, uint16 liquidateDebtRatio, uint16 withdrawFeeRate, uint16 compoundFeeRate, uint16 liquidateFeeRate, uint16 rangeStopFeeRate, uint16 protocolFeeRate, uint256 premiumRequirement, uint256 protocolFee0Accumulated, uint256 protocolFee1Accumulated, uint256 minInvestValue, uint256 minSwapAmount0, uint256 minSwapAmount1, uint256 totalLp, uint256 totalLpShares, uint256 premiumUtilizationOfReserve0, uint256 debtLimit0, uint256 debtPositionId0, uint256 debtTotalShares0, uint256 premiumUtilizationOfReserve1, uint256 debtLimit1, uint256 debtPositionId1, uint256 debtTotalShares1))" + + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, vaultFactory, positionViewer, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x857d20297bde4478f678d3aafbfdf7fbfc90a4200b62eb053a32b2c50335676f'], + eventAbi: 'event InitReserve (address indexed reserve, address indexed eTokenAddress, address stakingAddress, uint256 id)', + onlyArgs: true, + fromBlock, + }) + + const vaultLogs = await getLogs({ + api, + target: vaultFactory, + topics: ['0xc0a8c0f282890a3da41a2183a1e9a1988888e8d8a0a39d933d42b0418e626250'], + fromBlock, + }) + + const calls = [] + for (let i = 1; i <= vaultLogs.length; i++) calls.push(i) + + const data = await api.multiCall({ target: positionViewer, abi: getVaultAbi, calls }) + data.forEach(({ pair, totalLp }) => api.add(pair, totalLp)) + + const tokensAndOwners = logs.map(i => [i.reserve, i.eTokenAddress]) + + return sumTokens2({ api, tokensAndOwners, resolveLP: true, }) + } + } +}) \ No newline at end of file diff --git a/projects/ezkalibur/index.js b/projects/ezkalibur/index.js new file mode 100644 index 0000000000..2b61648181 --- /dev/null +++ b/projects/ezkalibur/index.js @@ -0,0 +1,15 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +const { stakingPricedLP } = require("../helper/staking"); + +const xSWORD = '0x11ef47783740B3F0c9736D54BE8eF8953C3Ead99' +const SWORD_TOKEN = '0x240f765Af2273B0CAb6cAff2880D6d8F8B285fa4' +const SWORD_WETH_LP = '0xc8b6b3a4d2d8428ef3a940eac1e32a7ddadcb0f1' + +module.exports = { + misrepresentedTokens: true, + start: 1686309181, + era: { + tvl: getUniTVL({ factory: '0x15C664A62086c06D43E75BB3fddED93008B8cE63', useDefaultCoreAssets: true,fetchBalances: true, }), + staking: stakingPricedLP(xSWORD,SWORD_TOKEN,'era',SWORD_WETH_LP,'weth') + }, +}; \ No newline at end of file diff --git a/projects/factor-v2/index.js b/projects/factor-v2/index.js new file mode 100644 index 0000000000..dc4521416f --- /dev/null +++ b/projects/factor-v2/index.js @@ -0,0 +1,26 @@ +const { getLogs } = require('../helper/cache/getLogs') + +const config = { + arbitrum: { factory: '0x6b3e693b436510c430ffbb6b5ca6c8248022f1cd', fromBlock: 112324705 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xc66cfbda93c132fbda8600e8032ce13d18d0db1d139e72d677d5556e0acf9484'], + eventAbi: 'event VaultCreated (address indexed vault, address strategy, string name, string symbol, uint256 approval)', + onlyArgs: true, + fromBlock, + }) + const vaults = logs.map(log => log.vault) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + const bals = await api.multiCall({ abi: 'uint256:assetBalance', calls: vaults }) + // console.table(vaults.map((v, i) => ({ vault: v, token: tokens[i], bal: bals[i] }))) + api.addTokens(tokens, bals) + } + } +}) \ No newline at end of file diff --git a/projects/factor/index.js b/projects/factor/index.js index 59df2118a6..4bbc739b2d 100644 --- a/projects/factor/index.js +++ b/projects/factor/index.js @@ -1,13 +1,14 @@ const { staking } = require("../helper/staking"); const { sumTokens2 } = require('../helper/unwrapLPs'); +const { cachedGraphQuery } = require('../helper/cache'); const FCTR = "0x6dD963C510c2D2f09d5eDdB48Ede45FeD063Eb36" const veFCTR = "0xA032082B08B2EF5A6C3Ea80DaEac58300F68FB73" -const FCTR_RNDTX = "0x95C34a4efFc5eEF480c65E2865C63EE28F2f9C7e" // Factor Roundtable Index - -const indices = [FCTR_RNDTX] async function tvl(timestamp, block, chainBlocks, { api }) { + const endpoint = 'https://api.thegraph.com/subgraphs/name/yanuar-ar/factor-arbitrum' + const res = await cachedGraphQuery('factor-v1', endpoint, `{vaultGeneses { id }}`) + const indices = res.vaultGeneses.map(v => v.id) const uBalances = await api.multiCall({ abi: 'uint256[]:underlyingAssetsBalance', calls: indices }) const calls = [] uBalances.forEach((v, i) => { diff --git a/projects/fantOHM/api.js b/projects/fantOHM/api.js new file mode 100644 index 0000000000..606277d156 --- /dev/null +++ b/projects/fantOHM/api.js @@ -0,0 +1,4 @@ +const index = require('./index') +const { ohmStaking } = require('../helper/treasury') + +module.exports = ohmStaking(index) \ No newline at end of file diff --git a/projects/fantOHM/index.js b/projects/fantOHM/index.js index fc8eb1c987..8744e8ae8d 100644 --- a/projects/fantOHM/index.js +++ b/projects/fantOHM/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const {staking} = require("../helper/staking"); const {sumTokensAndLPsSharedOwners} = require("../helper/unwrapLPs"); @@ -32,8 +33,8 @@ const masterChefContract = "0x4897EB3257A5391d80B2f73FB0748CCd4150b586"; // Moonriver TVL should consist of - treasury value and investments on gnosis safe // const movr_transforms = { - "0x748134b5f553f2bcbd78c6826de99a70274bdeb3": "ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC - "0xe936caa7f6d9f5c9e907111fcaf7c351c184cda7": "ethereum:0xdac17f958d2ee523a2206206994597c13d831ec7", // USDT + "0x748134b5f553f2bcbd78c6826de99a70274bdeb3": "ethereum:" + ADDRESSES.ethereum.USDC, // USDC + "0xe936caa7f6d9f5c9e907111fcaf7c351c184cda7": "ethereum:" + ADDRESSES.ethereum.USDT, // USDT "0xfa1fbb8ef55a4855e5688c0ee13ac3f202486286": "fantom:0xfa1FBb8Ef55A4855E5688C0eE13aC3f202486286", // FHM } @@ -61,8 +62,8 @@ async function moonriverTvl(timestamp, block, chainBlocks) { // Fantom TVL should consist of - treasury value and investments on gnosis safe // const fantom_transforms = { - "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e": "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + [ADDRESSES.fantom.DAI]: ADDRESSES.ethereum.DAI, // DAI + [ADDRESSES.fantom.USDC]: ADDRESSES.ethereum.USDC, // USDC } async function fantomTvl(timestamp, _, {fantom: block}) { @@ -70,33 +71,33 @@ async function fantomTvl(timestamp, _, {fantom: block}) { // treasury value await sumTokensAndLPsSharedOwners(balances, [ - ["0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", false], // DAI - ["0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", false], // wFTM - ["0x6fc9383486c163fa48becdec79d6058f984f62ca", false], // USDB - ["0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", false], // USDC + [ADDRESSES.fantom.DAI, false], // DAI + [ADDRESSES.fantom.WFTM, false], // wFTM + // ["0x6fc9383486c163fa48becdec79d6058f984f62ca", false], // USDB + [ADDRESSES.fantom.USDC, false], // USDC ["0xd77fc9c4074b56ecf80009744391942fbfddd88b", true], // DAI/FHM ], [fantomTreasuryContract], block, "fantom", addr => (fantom_transforms[addr.toLowerCase()] ? fantom_transforms[addr.toLowerCase()] : `fantom:${addr}`)) // treasury values await Promise.all([ - balanceOfStablePool(fantomTreasuryContract, "0xD5E946b5619fFf054c40D38c976f1d06C1e2fA82", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", balances, block), // USDB-DAI stable pool + balanceOfStablePool(fantomTreasuryContract, "0xD5E946b5619fFf054c40D38c976f1d06C1e2fA82", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:" + ADDRESSES.fantom.DAI, balances, block), // USDB-DAI stable pool ]); // investments await Promise.all([ - balanceOf(fantomGnosisContract, "0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block), // USDB - balanceOf(fantomGnosisContract, "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", "0x6b175474e89094c44da98b954eedeac495271d0f", balances, block), // DAI + // balanceOf(fantomGnosisContract, "0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block), // USDB + balanceOf(fantomGnosisContract, ADDRESSES.fantom.DAI, ADDRESSES.ethereum.DAI, balances, block), // DAI beetsFtm_BeetsLp(fantohmDaoDeployerWallet, balances, block), // beets/wftm LP lqdrFtm_BeetsLp(fantohmDaoDeployerWallet, balances, block), // lqdr/wftm LP ]); // usdbalance.com await Promise.all([ - balanceOf(ftmTradfi3mContract, "0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block), // USDB - balanceOf(ftmTradfi6mContract, "0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block), // USDB + // balanceOf(ftmTradfi3mContract, "0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block), // USDB + // balanceOf(ftmTradfi6mContract, "0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block), // USDB - balanceOfStablePool(masterChefContract, "0xD5E946b5619fFf054c40D38c976f1d06C1e2fA82", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", balances, block), // USDB-DAI stable pool + balanceOfStablePool(masterChefContract, "0xD5E946b5619fFf054c40D38c976f1d06C1e2fA82", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", "fantom:" + ADDRESSES.fantom.DAI, balances, block), // USDB-DAI stable pool ]); return balances; @@ -111,21 +112,21 @@ async function ethTvl(timestamp, block, chainBlocks) { // investments await Promise.all([ balanceOf(ethGnosisContract, "0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", "ethereum:0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", balances, block, "ethereum"), // wLUNA - balanceOf(ethGnosisContract, "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", "ethereum:0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", balances, block, "ethereum"), // wBTC - balanceOf(ethGnosisContract, "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "ethereum:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", balances, block, "ethereum"), // wETH - balanceOf(ethGnosisContract, "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", "ethereum:0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", balances, block, "ethereum"), // MATIC + balanceOf(ethGnosisContract, ADDRESSES.ethereum.WBTC, "ethereum:" + ADDRESSES.ethereum.WBTC, balances, block, "ethereum"), // wBTC + balanceOf(ethGnosisContract, ADDRESSES.ethereum.WETH, "ethereum:" + ADDRESSES.ethereum.WETH, balances, block, "ethereum"), // wETH + balanceOf(ethGnosisContract, ADDRESSES.ethereum.MATIC, "ethereum:" + ADDRESSES.ethereum.MATIC, balances, block, "ethereum"), // MATIC balanceOf(ethGnosisContract, "0x940a2db1b7008b6c776d4faaca729d6d4a4aa551", "ethereum:0x940a2db1b7008b6c776d4faaca729d6d4a4aa551", balances, block, "ethereum"), // DUSK ]); // usdbalance.com await Promise.all([ - balanceOf(ethGnosisContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB - balanceOf(ethGnosisContract, "0x6b175474e89094c44da98b954eedeac495271d0f", "ethereum:0x6b175474e89094c44da98b954eedeac495271d0f", balances, block, "ethereum"), // DAI + // balanceOf(ethGnosisContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB + balanceOf(ethGnosisContract, ADDRESSES.ethereum.DAI, "ethereum:" + ADDRESSES.ethereum.DAI, balances, block, "ethereum"), // DAI - balanceOf(ethTreasuryContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB + // balanceOf(ethTreasuryContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB - balanceOf(ethTradfi3mContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB - balanceOf(ethTradfi6mContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB + // balanceOf(ethTradfi3mContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB + // balanceOf(ethTradfi6mContract, "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B", "fantom:0x6fc9383486c163fa48becdec79d6058f984f62ca", balances, block, "ethereum"), // USDB ]); return balances; @@ -141,7 +142,7 @@ async function bobaTvl(timestamp, block, chainBlocks) { const balance = (await sdk.api.erc20.balanceOf({ chain: "boba", block: chainBlocks.boba, - target: "0xa18bf3994c0cc6e3b63ac420308e5383f53120d7", + target: ADDRESSES.boba.BOBA, owner: fantohmDaoDeployerWallet, })).output; @@ -200,7 +201,7 @@ async function beetsFtm_BeetsLp(owner, balances, block) { const poolId = "0xcde5a11a4acb4ee4c805352cec57e236bdbc3837000200000000000000000019"; const beets = "0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e"; - const wftm = "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"; + const wftm = ADDRESSES.fantom.WFTM; const fBeetsBalance = (await sdk.api.abi.call({ chain: "fantom", @@ -255,7 +256,7 @@ async function lqdrFtm_BeetsLp(owner, balances, block) { const lqdr = "0x10b620b2dbAC4Faa7D7FFD71Da486f5D44cd86f9"; const beets = "0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e"; - const wftm = "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"; + const wftm = ADDRESSES.fantom.WFTM; const lqdrFtmBalance = (await sdk.api.abi.call({ chain: "fantom", diff --git a/projects/fantasm/index.js b/projects/fantasm/index.js index 5c4db4a0cf..07121d26ea 100644 --- a/projects/fantasm/index.js +++ b/projects/fantasm/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const Abis = require("./abi.json"); const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -5,7 +6,7 @@ const { staking } = require("../helper/staking"); const Contracts = { fantomV1: { - wftm: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + wftm: ADDRESSES.fantom.WFTM, fsm: "0xaa621D2002b5a6275EF62d7a065A865167914801", bank: "0x880672AB1d46D987E5d663Fc7476CD8df3C9f937", multiFeeDistribution: "0x348634Ea9367690383716FbCa8f225366bbC5966", @@ -17,7 +18,7 @@ const Contracts = { ], }, fantom: { - wftm: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + wftm: ADDRESSES.fantom.WFTM, fxm: "0x132b56763C0e73F95BeCA9C452BadF89802ba05e", bank: "0xa3B99CdFdDe2216AfB1D58D6108cC93fea413A76", multiFeeDistribution: "0xC4510604504Fd50f64499fF6186AEf1F740dE38B", diff --git a/projects/fantom.js b/projects/fantom.js index d5c4532885..6e9fa43e0e 100644 --- a/projects/fantom.js +++ b/projects/fantom.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { get } = require('./helper/http') const { GraphQLClient, } = require("graphql-request"); const BigNumber = require("bignumber.js"); @@ -22,7 +23,7 @@ async function fetch() { var tokens = [ { - address: "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", + address: ADDRESSES.fantom.WFTM, symbol: "WFTM", }, { diff --git a/projects/fathom-dex/index.js b/projects/fathom-dex/index.js new file mode 100644 index 0000000000..921bfb37c6 --- /dev/null +++ b/projects/fathom-dex/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + xdc: { + tvl: getUniTVL({ factory: "0x9fAb572F75008A42c6aF80b36Ab20C76a38ABc4B", useDefaultCoreAssets: true, }), + }, +}; \ No newline at end of file diff --git a/projects/fcondex/index.js b/projects/fcondex/index.js new file mode 100644 index 0000000000..73c66369ff --- /dev/null +++ b/projects/fcondex/index.js @@ -0,0 +1,11 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +module.exports = { + misrepresentedTokens: true, + mantle: { + tvl: getUniTVL({ + factory: "0x3eF942017d51BA257c4B61BE2f8f641209C8b341", + useDefaultCoreAssets: true, + fetchBalanes: true, + }), + }, +}; diff --git a/projects/fdoge/index.js b/projects/fdoge/index.js index 7003938ba6..88bb0528be 100644 --- a/projects/fdoge/index.js +++ b/projects/fdoge/index.js @@ -11,6 +11,9 @@ const pool2LPs = [ module.exports = { deadFrom: 1648765747, + hallmarks: [ + [1645488000, "Rug Pull"] + ], misrepresentedTokens: true, ...tombTvl(token, shares, rewardPool, masonry, pool2LPs, "fantom", undefined, false, pool2LPs[1]) } diff --git a/projects/fei/index.js b/projects/fei/index.js index 070e85f985..384a0f4e62 100644 --- a/projects/fei/index.js +++ b/projects/fei/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') -const weth = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' +const weth = ADDRESSES.ethereum.WETH async function tvl(timestamp, block) { const balances = {} @@ -47,7 +48,7 @@ async function tvl(timestamp, block) { ] await sumTokensAndLPsSharedOwners(balances, [ ['0x94b0a3d511b6ecdb17ebf877278ab030acb0a878', true], // FEI-ETH Uni V2 LP (NOTE: this counts both FEI and ETH, but only the FEI doesn't count as PCV) - ['0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', false], // stETH + [ADDRESSES.ethereum.STETH, false], // stETH ['0x030ba81f1c18d280636f32af80b9aad02cf0854e', false], // aWETH ['0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5', false], // cETH ['0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', false], // cDAI diff --git a/projects/fenrirfinance/index.js b/projects/fenrirfinance/index.js index 5c70dfd2a3..c4b9cbd318 100644 --- a/projects/fenrirfinance/index.js +++ b/projects/fenrirfinance/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {fullCoumpoundExports} = require('../helper/compound'); const replace = { - "0x250632378e573c6be1ac2f97fcdf00515d0aa91b": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // beth->weth - "0xfb6115445bff7b52feb98650c87f44907e58f802": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", // aave + [ADDRESSES.bsc.BETH]: ADDRESSES.ethereum.WETH, // beth->weth + "0xfb6115445bff7b52feb98650c87f44907e58f802": ADDRESSES.ethereum.AAVE, // aave } -module.exports = fullCoumpoundExports("0x56b4B49f31517be8DacC2ED471BCc20508A0e29D", "bsc", "0x444ADC2D487090A660ebFdDd934d0E962410d8Cc", "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", addr=>{ +module.exports = fullCoumpoundExports("0x56b4B49f31517be8DacC2ED471BCc20508A0e29D", "bsc", "0x444ADC2D487090A660ebFdDd934d0E962410d8Cc", ADDRESSES.bsc.WBNB, addr=>{ return replace[addr.toLowerCase()] || `bsc:${addr}` }) diff --git a/projects/ferro/index.js b/projects/ferro/index.js index 28eb24476d..e34a9adb03 100644 --- a/projects/ferro/index.js +++ b/projects/ferro/index.js @@ -1,10 +1,47 @@ -const { saddleExports } = require('../helper/saddle') +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require('../helper/unwrapLPs') -const config = { - cronos: { - factory: '0xc4106bba1a8752e54940be71f7bd02c38e64f9e3', - fromBlock: 2539442, - } +const SWAP_3FER_ADDR = '0xe8d13664a42B338F009812Fa5A75199A865dA5cD'; +const SWAP_2FER_ADDR = '0xa34C0fE36541fB085677c36B4ff0CCF5fa2B32d6'; +const SWAP_LCRO_WCRO_ADDRESSES = '0x1578C5CF4f8f6064deb167d1eeAD15dF43185afa'; +const chain = 'cronos' + +const tokens = { + // DAI + "0xF2001B145b43032AAF5Ee2884e456CCd805F677D": [ + SWAP_3FER_ADDR, + ], + // USDC + [ADDRESSES.cronos.USDC]: [ + SWAP_3FER_ADDR, + SWAP_2FER_ADDR, + ], + // USDT + [ADDRESSES.cronos.USDT]: [ + SWAP_3FER_ADDR, + SWAP_2FER_ADDR, + ], + // LCRO + "0x9fae23a2700feecd5b93e43fdbc03c76aa7c08a6": [ + SWAP_LCRO_WCRO_ADDRESSES, + ], + // WCRO + "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23": [ + SWAP_LCRO_WCRO_ADDRESSES, + ], +}; + +async function tvl(timestamp, ethBlock, {cronos: block}) { + const tokensAndOwners = Object.entries(tokens).map(([token, owners]) => owners.map(owner => [token, owner])).flat() + return sumTokens2({ chain, block, tokensAndOwners }) } -module.exports = saddleExports(config) \ No newline at end of file +module.exports = { + timetravel: true, + misrepresentedTokens: false, + methodology: 'sum of ferro stablecoin pool contracts balance', + start: 1651218360, + cronos: { + tvl, + } +} \ No newline at end of file diff --git a/projects/fiatdao/index.js b/projects/fiatdao/index.js index 4e837e2940..8c9c9e7e6f 100644 --- a/projects/fiatdao/index.js +++ b/projects/fiatdao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const { default: BigNumber } = require("bignumber.js") const abi = require('./abi.json') @@ -9,8 +10,8 @@ const { getConfig } = require('../helper/cache') const STAKING_CONTRACT = "0xe98ae8cD25CDC06562c29231Db339d17D02Fd486" const STAKING_NFT = "0xE9F9936a639809e766685a436511eac3Fb1C85bC" const RGT = "0xD291E7a03283640FDc51b121aC401383A46cC623" -const YFI = "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e" -const MKR = "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2" +const YFI = ADDRESSES.ethereum.YFI +const MKR = ADDRESSES.ethereum.MKR const BOND = "0x0391D2021f89DC339F60Fff84546EA23E337750f" const UMA = "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828" const GOHM = "0x0ab87046fbb341d058f17cbc4c1133f25a20a52f" @@ -18,7 +19,7 @@ const WSOHM = "0xca76543cf381ebbb277be79574059e32108e3e65" const WSOHM_FDT_SLP = "0x2e30e758b3950dd9afed2e21f5ab82156fbdbbba" const FDT_GOHM = "0x75b02b9889536B617d57D08c1Ccb929c523945C1" -const LUSD = '0x5f98805a4e8be255a32880fdec7f6728c6568ba0' +const LUSD = ADDRESSES.ethereum.LUSD const LUSD3CRV = '0xEd279fDD11cA84bEef15AF5D39BB4d4bEE23F0cA' function resolveUnderlier(underlier) { @@ -66,7 +67,7 @@ async function tvl(timestamp, block) { const vaults = [] tokensAll.forEach(({ output, input: { target } }) => { - if (output !== '0x0000000000000000000000000000000000000000') { + if (output !== ADDRESSES.null) { vaults.push(target) tokens.push(output) } diff --git a/projects/filda/index.js b/projects/filda/index.js index 291104af60..ce4e00009b 100644 --- a/projects/filda/index.js +++ b/projects/filda/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); @@ -34,12 +35,12 @@ async function getUnderlying(block, cToken) { function transformAddress(token) { if (token === '0x6f259637dcd74c767781e37bc6133cd6a68aa161') { return token - } else if (token === '0x3D760a45D0887DFD89A2F5385a236B29Cb46ED2a') { - return '0x6b175474e89094c44da98b954eedeac495271d0f';//DAI => DAI - } else if (token === '0x9362Bbef4B8313A8Aa9f0c9808B80577Aa26B73B') { - return '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';//USDC => USDC - } else if (token === "0x5eE41aB6edd38cDfB9f6B4e6Cf7F75c87E170d98") { - return "0x0000000000085d4780b73119b644ae5ecd22b376" //TUSD + } else if (token === ADDRESSES.heco.DAI_HECO) { + return ADDRESSES.ethereum.DAI;//DAI => DAI + } else if (token === ADDRESSES.heco.USDC_HECO) { + return ADDRESSES.ethereum.USDC;//USDC => USDC + } else if (token === ADDRESSES.heco.TUSD) { + return ADDRESSES.ethereum.TUSD //TUSD } else { return 'heco:' + token } @@ -139,4 +140,7 @@ module.exports = { elastos: compoundExportsWithDifferentBase("0xE52792E024697A6be770e5d6F1C455550265B2CD", "elastos", "elastos"), kava: compoundExportsWithDifferentBase("0xD2CBE89a36df2546eebc71766264e0F306d38196", "kava", "kava"), bittorrent: compoundExportsWithDifferentBase("0xE52792E024697A6be770e5d6F1C455550265B2CD", "bittorrent", "bittorrent"), + hallmarks: [ + [Math.floor(new Date('2023-04-24')/1e3), 'Protocol was hacked'], + ], }; diff --git a/projects/filet/abi.js b/projects/filet/abi.js new file mode 100644 index 0000000000..45f869d902 --- /dev/null +++ b/projects/filet/abi.js @@ -0,0 +1,7 @@ +const filetFVMAbi = "function minePoolMap(uint256) view returns (tuple(address tokenAddress, uint256 expireType, uint256 actionType, uint256 canSell, address[] minerList, uint256 stakingPrice, uint256 tokenRate, uint256 FILRate, uint256 tokenPrecision, uint256 miniPurchaseAmount, uint256 hasSoldOutToken) mPool, bool isEntity)" +const filetBSCAbi = "function minePoolMap(uint256) view returns (tuple(address tokenInterface, address tokenAddress, uint256 expireType, uint256 actionType, tuple(uint256 canSell, uint256 canNotSell) maxMiningPower, address earlyRedeemFundAccount, address redeemFundAccount, address minerAccount, uint256 stakingPrice, uint256 tokenRate, uint256 FILRate, uint256 tokenPrecision, address recievePaymentAccount, uint256 miniPurchaseAmount, uint256 hasSoldOutToken, uint256 lockInterval, uint256[] poolThredhold, uint256[] serviceFeePercent) mPool, bool isEntity)" +const FiletBSCCurrentAbi = "function minePoolMap(uint256) view returns (tuple(address tokenInterface, address tokenAddress, uint256 expireType, uint256 actionType, tuple(uint256 canSell, uint256 canNotSell) maxMiningPower, address earlyRedeemFundAccount, address redeemFundAccount, address profitFundAccount, address minerAccount, uint256 stakingPrice, uint256 tokenRate, uint256 FILRate, uint256 tokenPrecision, address recievePaymentAccount, uint256 miniPurchaseAmount, uint256 maxPurchaseAmount, uint256 hasSoldOutToken, uint256 lockInterval, uint256[] poolThredhold, uint256[] serviceFeePercent, uint256 lendhubExtraRatio) mPool, bool isEntity)" + +module.exports = { + filetFVMAbi, filetBSCAbi, FiletBSCCurrentAbi +} \ No newline at end of file diff --git a/projects/filet/index.js b/projects/filet/index.js index 16ce7d84a2..3b17ce993d 100644 --- a/projects/filet/index.js +++ b/projects/filet/index.js @@ -1,10 +1,91 @@ -const { get } = require('../helper/http') -async function fetch() { - const resp = await get('https://api.filet.finance/pledge/ext/tx/pledgeTxAll') - return resp.data.tvl; +const abi = require("./abi.js") +const { fetchURL } = require('../helper/utils') + + +const BigNumber = require("bignumber.js") +const { getExports } = require('../helper/heroku-api') +const { nullAddress } = require("../helper/tokenMapping"); +const { get } = require("../helper/http"); +const {utils} = require("ethers"); + +//bsc staking con +const filetStakingCon_BSC = "0x9c821defD3BBb07C5c786C3bB039051364Fa6F39"; +const filetStakingConFlexible_BSC = "0xE989ef3118C685603B86123569340438ab670505"; +//bsc FILE con +const filetFILECon_BSC = "0xA8F19840e08dC3f134FF45062b953a2B14E02F5A" +const filetStorageCon_FVM = "0xFca90089d63D099c80A4ae91edCdfC904c2afa8e"; +const filetNativeCon = "0xBfd5BB742940a5b059710F4d1216db1F1287F4e0"; + +const filetStakingCon_HECO = "0x62C7aaCdCCEc32A2E33d5fa535B374f8a4a42566"; +const filetStakingConFlexible_HECO = "0x64F23Eb153D7496Fc31C1b38a41068995354773E" + +const poolOnFVM180 = 4010 +const poolOnFVM360 = 4011 + +// filet +const filetAPI = "https://api.filet.finance/pledge/ext/tx/pledgeTxAll" +const minerList = "https://api.filet.finance/pledge/pool/querySpList" +const { sumTokens2 } = require('../helper/unwrapLPs') + + +const getMinersList = async () => { + const resp = await get(minerList) + return resp.data.map(({minerId}) => { + + let bytes = Buffer.alloc(20); + bytes.writeUint8(0xff, 0); + bytes.writeBigUint64BE(BigInt(minerId), 12); + return utils.getAddress('0x' + bytes.toString('hex')); + }); } +// + module.exports = { - fetch, -}; + timetravel: false, + heco: { + tvl: async (_, _1, _2, { api}) => { + const tvlData = await fetchURL(filetAPI) + return { + ["filecoin"]: new BigNumber(tvlData.data.data.hecoTvl), + } + } + }, + bsc: { + tvl: async (_, _1, _2, { api}) => { + + const tvlData = await fetchURL(filetAPI) + return { + ["filecoin"]: new BigNumber(tvlData.data.data.bscTvl), + } + + } + }, + filecoin: { + tvl: async (_, _1, _2, { api }) => { + + const filetMpool180 = await api.call({ target: filetStorageCon_FVM, abi: abi.filetFVMAbi, params:[poolOnFVM180] }); + const filetMpool360 = await api.call({ target: filetStorageCon_FVM, abi: abi.filetFVMAbi, params:[poolOnFVM360] }); + + const filetNative_hasSoldOutToken = await api.call({ target: filetNativeCon, abi: "uint256:hasSoldOutToken", params:[] }); + api.add(nullAddress, filetMpool180.mPool.hasSoldOutToken) + api.add(nullAddress, filetMpool360.mPool.hasSoldOutToken ) + api.add(nullAddress, filetNative_hasSoldOutToken ) + + // getMinersList + const minerList = await getMinersList(); + let balances = await sumTokens2({ owner: filetStorageCon_FVM, tokens:[nullAddress], api, }); + return sumTokens2({balances, api, owners: minerList, tokens: [nullAddress]}); + }, + }, + mixin: { + tvl: async (_, _1, _2, { api }) => { + const tvlData = await fetchURL(filetAPI) + console.log("tvlData:",tvlData.data.data.mixinTvl) + return { + ["filecoin"]: new BigNumber(tvlData.data.data.mixinTvl), + } + } + } +} diff --git a/projects/fin/index.js b/projects/fin/index.js index 8438ecfe8c..61e7ca3a45 100644 --- a/projects/fin/index.js +++ b/projects/fin/index.js @@ -1,15 +1,14 @@ -const { get } = require("../helper/http"); const { getConfig } = require("../helper/cache"); const { sumTokens, } = require('../helper/chain/cosmos'); async function tvl() { - const { pairs } = await getConfig("kujira/fin", "https://api.kujira.app/api/coingecko/pairs"); + const contracts = await getConfig("kujira/contracts", "https://raw.githubusercontent.com/Team-Kujira/kujira.js/master/src/resources/contracts.json"); const blacklist = [ 'kujira1hs95lgvuy0p6jn4v7js5x8plfdqw867lsuh5xv6d2ua20jprkgesw2pujt', 'kujira1gl8js9zn7h9u2h37fx7qg8xy65jrk9t4zpa6s7j5hdlanud2uwxshqq67m' ] let owners = [ - ...pairs.map((pair) => pair.pool_id), + ...contracts["kaiyo-1"].fin.map(x => x.address), ] owners = owners.filter(item => { diff --git a/projects/finext-finance/index.js b/projects/finext-finance/index.js index 758b37b44a..957cdcb354 100644 --- a/projects/finext-finance/index.js +++ b/projects/finext-finance/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const FINX = "0xb6943825E461C6d8f2DDF17307C0571972f169FB"; const GENESIS_POOL = "0x0711c9f411FFc4Fe331256E83ee8C910a997A16a"; -const USDC = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"; -const WETH = "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"; +const USDC = ADDRESSES.arbitrum.USDC; +const WETH = ADDRESSES.arbitrum.WETH; module.exports = { methodology: "Calculator USDC and WETH staked to genesis pool contract", diff --git a/projects/finnexus/index.js b/projects/finnexus/index.js index 1efa55877e..e64e540448 100644 --- a/projects/finnexus/index.js +++ b/projects/finnexus/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const config = { ethereum: [ // ['0xef9cd7882c067686691b6ff49e650b43afbbcc6b', '0x919a35A4F40c479B3319E3c3A2484893c06fd7de'], - ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '0xff60d81287BF425f7B2838a61274E926440ddAa6'], - ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0xff60d81287BF425f7B2838a61274E926440ddAa6'], - ['0x853d955acef822db058eb8505911ed77f175b99e', '0x6f88e8fbF5311ab47527f4Fb5eC10078ec30ab10'], + [ADDRESSES.ethereum.USDC, '0xff60d81287BF425f7B2838a61274E926440ddAa6'], + [ADDRESSES.ethereum.USDT, '0xff60d81287BF425f7B2838a61274E926440ddAa6'], + [ADDRESSES.ethereum.FRAX, '0x6f88e8fbF5311ab47527f4Fb5eC10078ec30ab10'], ], wan: [ // ['0xC6F4465A6a521124C8e3096B62575c157999D361', '0xe96E4d6075d1C7848bA67A6850591a095ADB83Eb'], @@ -12,8 +13,8 @@ const config = { ], bsc: [ // ['0xdfd9e2a17596cad6295ecffda42d9b6f63f7b5d5', '0xf2E1641b299e60a23838564aAb190C52da9c9323'], - ['0xe9e7cea3dedca5984780bafc599bd69add087d56', '0xA3f70ADd496D2C1c2C1Be5514A5fcf0328337530'], - ['0x55d398326f99059fF775485246999027B3197955', '0xA3f70ADd496D2C1c2C1Be5514A5fcf0328337530'], + [ADDRESSES.bsc.BUSD, '0xA3f70ADd496D2C1c2C1Be5514A5fcf0328337530'], + [ADDRESSES.bsc.USDT, '0xA3f70ADd496D2C1c2C1Be5514A5fcf0328337530'], ], } diff --git a/projects/firebird/index.js b/projects/firebird/index.js index 91f6554909..69dac2a086 100644 --- a/projects/firebird/index.js +++ b/projects/firebird/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const {uniTvlExport} = require('../helper/calculateUniTvl.js') const { sumTokens2 } = require('../helper/unwrapLPs') const FACTORY = '0x5De74546d3B86C8Df7FEEc30253865e1149818C8'; const stablePool = "0x01C9475dBD36e46d1961572C8DE24b74616Bae9e" -const stablePoolTokens = ['0xc2132d05d31c914a87c6611c10748aeb04b58e8f', '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063'] +const stablePoolTokens = [ADDRESSES.polygon.USDT, ADDRESSES.polygon.USDC, ADDRESSES.polygon.DAI] async function tvl(_, ethBlock, chainBlocks) { const block = chainBlocks['polygon'] diff --git a/projects/firebot/index.js b/projects/firebot/index.js new file mode 100644 index 0000000000..1063d28b06 --- /dev/null +++ b/projects/firebot/index.js @@ -0,0 +1,29 @@ +const { sumTokensExport } = require('../helper/unknownTokens') +const { sumTokensExport: ogSumExport } = require('../helper/unwrapLPs') + +const FBX_TOKEN_CONTRACT = '0xD125443F38A69d776177c2B9c041f462936F8218'; +const FIRE_VAULT_CONTRACT = '0x960d43BE128585Ca45365CD74a7773B9d814dfBE'; +const EP_TOKEN_CONTRACT = '0x60Ed6aCEF3a96F8CDaF0c0D207BbAfA66e751af2'; +const FBX_LP = '0xcffbfa978ac3fb10e829ca6b763c307daafe8a77' +const EP_FBX_LP = '0x41D9DE53EBF26F766229E42Aa02904eB2495E397' + +module.exports = { + polygon: { + tvl: () => 0, + staking: sumTokensExport({ + tokensAndOwners: [ + [EP_TOKEN_CONTRACT, EP_TOKEN_CONTRACT], + [FBX_TOKEN_CONTRACT, FIRE_VAULT_CONTRACT], + ], + lps: [EP_FBX_LP], + coreAssets: [FBX_TOKEN_CONTRACT], + restrictTokenRatio: 100, + }), + pool2: ogSumExport({ + tokensAndOwners: [ + [FBX_LP, '0x92a9180af33531A5d78d81D90AFc0523dc6c62c9'], + ], + }), + }, + methodology: 'Counts the number of FBX and EP tokens in the Vault contracts.' +}; diff --git a/projects/flamincome.js b/projects/flamincome.js index 654a958cfd..1adbb4a33f 100644 --- a/projects/flamincome.js +++ b/projects/flamincome.js @@ -1,32 +1,33 @@ +const { sumTokens2 } = require('./helper/unwrapLPs') + const abis = { balance: "uint256:balance", token: "address:token", } -const sdk = require("@defillama/sdk") - - -async function tvl(ts, block) { - - const contracts = [ - '0x54bE9254ADf8D5c8867a91E44f44c27f0c88e88A', - '0x1a389c381a8242B7acFf0eB989173Cd5d0EFc3e3', - '0x1E9DC5d843731D333544e63B2B2082D21EF78ed3', - ] - const calls = contracts.map(t => ({ target: t })) - const { output: token } = await sdk.api.abi.multiCall({ - block, - calls, - abi: abis.token - }) - const { output: balance } = await sdk.api.abi.multiCall({ - block, - calls, - abi: abis.balance - }) - - const balances = {} - token.forEach((t, i) => sdk.util.sumSingleBalance(balances, t.output, balance[i].output)) - return balances + +const vaults = { + "VaultBaselineUSDT": "0x54bE9254ADf8D5c8867a91E44f44c27f0c88e88A", + "VaultBaselinewBTC": "0x1a389c381a8242B7acFf0eB989173Cd5d0EFc3e3", + "VaultBaselinewETH": "0x1E9DC5d843731D333544e63B2B2082D21EF78ed3", + "VaultBaselineDAI": "0x163D457fA8247f1A9279B9fa8eF513de116e4327", + "VaultBaselineUNI-V2[WBTC]": "0x743BC5cc8F52a84fF6e06E47Bc2af5324f5463D6", + /* "VaultBaselinerenBTC": "0xB0B3442b632175B0b7d9521291c51060722C4e8C", + "VaultBaselineTUSD": "0xa322AEa77769666453377CC697fbE4C6390b9942", + "VaultBaselineyCRV": "0x5e7B4de4aC8e319fB2ec4bF9Fa98192346f8C99B", + "VaultBaselinesBTC": "0x681D3261CC6d2A18b59f8B53219b96F06BcEeB69", + "VaultBaselineUSDC": "0x3f7E3d82bdDc28d3Eb04F0d0A51e9Fc82db581f0", + "VaultBaselineyDAI": "0x79A2e8C1120d6B5fBfaBD3f7a39CF8473A635742", + "VaultBaselinecrvBTC": "0x483A47247d5cBd420A9c5d2838Ec89776ba8B56B", + "VaultBaselineOKB": "0x272C8dF3E8068952606046c1389fc1e2320FCCfd", + "VaultBaselinecrvRenWBTC": "0x10d0A001EeDC62b2A483EB9DFA0bb021aC61d55b", + "VaultBaselinecrvRenWSBTC": "0x483A47247d5cBd420A9c5d2838Ec89776ba8B56B", */ +} + +async function tvl(ts, block, _, { api }) { + const contracts =Object.values(vaults) + const tokens = await api.multiCall({ abi: abis.token, calls: contracts}) + const bals = await api.multiCall({ abi: abis.balance, calls: contracts}) + api.addTokens(tokens, bals) } module.exports = { diff --git a/projects/flare-loans/index.js b/projects/flare-loans/index.js index e8b74a6538..be641a5500 100644 --- a/projects/flare-loans/index.js +++ b/projects/flare-loans/index.js @@ -1,16 +1,12 @@ -const sdk = require('@defillama/sdk') - -async function tvl(time, ethB, {songbird: block}){ - return { - "songbird": Number( - (await sdk.api.erc20.balanceOf({target: "0x02f0826ef6aD107Cfc861152B32B52fD11BaB9ED", owner: "0xFa21A4ABD1a58CefAB79CFd597aCcc314403eE9f", block, chain:'songbird'})).output - )/1e18 - } -} +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') module.exports={ - methodology: "We count all WSGB on 0xFa21A4ABD1a58CefAB79CFd597aCcc314403eE9f, which is backing the stablecoin", + methodology: "We count all WSGB on 0xFa21A4ABD1a58CefAB79CFd597aCcc314403eE9f and all EXFI on 0x4595fc96262057f9b0d4276ff04de8f2f44e612e, which are backing the stablecoin", songbird: { - tvl + tvl: sumTokensExport({chain: 'songbird', tokensAndOwners: [ + [ADDRESSES.songbird.WSGB, '0xFa21A4ABD1a58CefAB79CFd597aCcc314403eE9f'], + [ADDRESSES.songbird.EXFI,'0x4595fc96262057f9b0d4276ff04de8f2f44e612e'] + ]}) } } \ No newline at end of file diff --git a/projects/flarefarm/index.js b/projects/flarefarm/index.js index 05605ef6bf..bd5a66bcf2 100644 --- a/projects/flarefarm/index.js +++ b/projects/flarefarm/index.js @@ -1,8 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumUnknownTokens } = require("../helper/unknownTokens"); -const WSGB = '0x02f0826ef6aD107Cfc861152B32B52fD11BaB9ED' -const CANARY_DOLLAR = '0x70Ad7172EF0b131A1428D0c1F66457EB041f2176' - const EXFI = '0xC348F894d0E939FE72c467156E6d7DcbD6f16e21'; - const SFIN = '0x0D94e59332732D18CF3a3D457A8886A2AE29eA1B'; +const { staking } = require('../helper/staking') +const WSGB = ADDRESSES.songbird.WSGB +const CANARY_DOLLAR = ADDRESSES.songbird.CAND + const EXFI = ADDRESSES.songbird.EXFI; + const SFIN = ADDRESSES.songbird.SFIN; const chain = 'songbird' @@ -26,6 +28,9 @@ async function farmTvl(timestamp, ethblock, { [chain]: block }) { [EXFI, '0xD02C3e166223EE78F4d0ae99F5396142b48D97FE'], [WSGB, '0x745d8896629842ef8E44D269f89A7A873086A6F2'], [EXFI, "0x61128b44C299b0f7a752BF6278f44f1EcefD9109"], + ['0x3233642aCf7664a69c33e5a6FFAb321608d7A65f','0xF81B465C562ED3f54Aea772D8A56FAF93884ea2E'], + [EXFI, "0x3B346b0b091fA8813f60Cd6e81b95b63375e22f5"], + ['0xc41aA3ac0e6efcb780cd4696E7eC3B8193BB46E1', "0xa275DD75C1182055C7039b839cC0Da017c78933a"] ]; return sumUnknownTokens({ tokensAndOwners: tokens, chain, block, useDefaultCoreAssets: true, }) @@ -45,13 +50,6 @@ async function pool2(timestamp, ethblock, { [chain]: block }) { ] return sumUnknownTokens({ tokensAndOwners: tokens, chain, block, useDefaultCoreAssets: true, }) } -async function staking(timestamp, ethblock, { [chain]: block }) { - const tokens = [ - [SFIN, '0x554742076743b366504972F86609d64fd18BDC34'], - [SFIN,'0xd0dbAFF52224C0882cfaf1765f347Cb5e4364FA1'] - ] - return sumUnknownTokens({ tokensAndOwners: tokens, chain, block, useDefaultCoreAssets: true, lps: ['0x48195Ca4D228ce487AE2AE1335B017a95493Ade6'] }) -} module.exports = { misrepresentedTokens: true, @@ -59,6 +57,6 @@ module.exports = { songbird: { tvl: farmTvl, pool2, - staking, + staking: staking(['0x554742076743b366504972F86609d64fd18BDC34', '0xd0dbAFF52224C0882cfaf1765f347Cb5e4364FA1'], SFIN), } }; \ No newline at end of file diff --git a/projects/flashstake-old/index.js b/projects/flashstake-old/index.js index c9cac47aa6..25dfe37017 100644 --- a/projects/flashstake-old/index.js +++ b/projects/flashstake-old/index.js @@ -1,24 +1,18 @@ -const { request, gql } = require("graphql-request"); -const { toUSDTBalances } = require("../helper/balances"); -const graphUrl = - "https://api.thegraph.com/subgraphs/name/blockzerohello/flash-stake-stats-v2-subgraph"; -const graphQuery = gql` - query get_tvl($block: Int) { - flashFactories(block: { number: $block }) { - totalVolumeUSD - totalLiquidityUSD - } - } -`; -async function tvl(timestamp, block) { - const { flashFactories } = await request(graphUrl, graphQuery, { - block, - }); - const usdTvl = Number(flashFactories[0].totalLiquidityUSD); - return toUSDTBalances(usdTvl); +const { getLogs } = require('../helper/cache/getLogs') + +async function tvl(timestamp, block, _, { api }) { + const logs = await getLogs({ + api, + target: '0xb0aeae6e204bd95911ead25263d7078954fb7fb0', + topics: ['0x4f2ce4e40f623ca765fc0167a25cb7842ceaafb8d82d3dec26ca0d0e0d2d4896'], + eventAbi: 'event PoolCreated (address pool, address token)', + onlyArgs: true, + fromBlock: 12030855, + }) + return api.sumTokens({ tokensAndOwners: logs.map(log => [log.token, log.pool]) }) } + module.exports = { - misrepresentedTokens: true, ethereum: { tvl, }, diff --git a/projects/flashstake/index.js b/projects/flashstake/index.js index 34102aec68..3e2cc6bb58 100644 --- a/projects/flashstake/index.js +++ b/projects/flashstake/index.js @@ -24,7 +24,8 @@ module.exports = { [1666641600, "Optimism Launch"], [1674604800, "Flash Capacitor Launch"], [1676484000, "Flido Launch"], - [1680022800, "Arbitrum Launch"] + [1680022800, "Arbitrum Launch"], + [1684443600, "Rocket Pool Launch"] ] }; diff --git a/projects/flatcoin/index.js b/projects/flatcoin/index.js index 11c7b1b6f8..7955bcdcc1 100644 --- a/projects/flatcoin/index.js +++ b/projects/flatcoin/index.js @@ -1,14 +1,11 @@ -const { sumTokens } = require('../helper/chain/tron') +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') const owner = 'TV8ndiKP98SF537BM9XvEbzkY2TerXNzEs' -const token = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t' - -async function tvl() { - return sumTokens({ tokensAndOwners: [[token, owner]], }) -} +const token = ADDRESSES.tron.USDT module.exports = { tron: { - tvl, + tvl: sumTokensExport({tokensAndOwners: [[token, owner]], }), }, } diff --git a/projects/float-capital/index.js b/projects/float-capital/index.js index 8fbca25f0d..35632c7c60 100644 --- a/projects/float-capital/index.js +++ b/projects/float-capital/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens, unwrapCreamTokens } = require("../helper/unwrapLPs"); const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -18,12 +19,12 @@ const avaults = [ "0x47a21F14794b6229cc2a1ddfe4498C9e48f1C16c", ]; const avDAI = "0x47afa96cdc9fab46904a55a6ad4bf6660b53c38a"; -const DAI = "0xd586e7f844cea2f87f50152665bcbc2c279d8d70"; +const DAI = ADDRESSES.avax.DAI; const transforms = { "0x47afa96cdc9fab46904a55a6ad4bf6660b53c38a": - "0x6b175474e89094c44da98b954eedeac495271d0f", // avDAI - "0xd586e7f844cea2f87f50152665bcbc2c279d8d70": - "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI + ADDRESSES.ethereum.DAI, // avDAI + [ADDRESSES.avax.DAI]: + ADDRESSES.ethereum.DAI, // DAI }; async function polyTvl(time, ethBlock, chainBlocks) { diff --git a/projects/floor-dao/api.js b/projects/floor-dao/api.js new file mode 100644 index 0000000000..606277d156 --- /dev/null +++ b/projects/floor-dao/api.js @@ -0,0 +1,4 @@ +const index = require('./index') +const { ohmStaking } = require('../helper/treasury') + +module.exports = ohmStaking(index) \ No newline at end of file diff --git a/projects/floor-dao/index.js b/projects/floor-dao/index.js index c1dd65a8cd..92baadf74a 100644 --- a/projects/floor-dao/index.js +++ b/projects/floor-dao/index.js @@ -1,11 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, sumTokensExport, } = require('../helper/unwrapLPs') const sdk = require("@defillama/sdk"); // https://docs.floor.xyz/fundamentals/treasury -const WETH = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const WETH = ADDRESSES.ethereum.WETH +const USDC = ADDRESSES.ethereum.USDC const NFTX_LP_STAKING = '0x688c3e4658b5367da06fd629e41879beab538e37' const treasury = '0x91E453f442d25523F42063E1695390e325076ca2' +const floorTreasury2 = "0xa9d93a5cca9c98512c8c56547866b1db09090326"; const stakingAddress = '0x759c6de5bca9ade8a1a2719a31553c4b7de02539' const FLOOR = '0xf59257E961883636290411c11ec5Ae622d19455e' @@ -29,7 +32,7 @@ module.exports = { }) const balances = {} stakingBalances.forEach((bal,i) => sdk.util.sumSingleBalance(balances,stakingInfo[i][0],bal)) - return sumTokens2({ balances, block, owner: treasury, tokens: [WETH], resolveLP: true, }) + return sumTokens2({ balances, block, owners: [treasury, floorTreasury2], tokens: [WETH, USDC], resolveLP: true, }) }, staking: sumTokensExport({owner: stakingAddress, tokens: [FLOOR]}) } diff --git a/projects/florence-finance/index.js b/projects/florence-finance/index.js new file mode 100644 index 0000000000..87bfbd4f88 --- /dev/null +++ b/projects/florence-finance/index.js @@ -0,0 +1,21 @@ + +const FACTORY_CONTRACT_ETH = "0xD6348E8EacE62Eb3Eb77fBbA8D8c363e375fC455"; +const EURS_CONTRACT_ETH= "0xdb25f211ab05b1c97d595516f45794528a807ad8"; + +async function borrowed(_, _1, _2, { api }) { + // Get all vaults + const vaultIds = await api.call({ + abi: "function getLoanVaultIds() external view returns (string[])", + target: FACTORY_CONTRACT_ETH + }) + const vaultContracts = await api.multiCall({ abi: "function getLoanVault (string loanVaultId) external view returns (address)", target: FACTORY_CONTRACT_ETH, calls: vaultIds }) + const loans = await api.multiCall({ abi: "function loansOutstanding() external view returns (uint256)", calls: vaultContracts}) + // Take the sum of all vault tokens in terms of EURS (1 Loan Vault Token = 1 EURS Statis) on the platform | 18-2 = 16 atomic units (LV-EURS + loans.forEach((val, i) => api.add(EURS_CONTRACT_ETH, val / 1e16)) +} + +module.exports = { + start: 16077400, + methodology: "Data is retrieved on-chain by taking the total sum of all loans outstanding (dominated in EURS Statis) from all platform vaults.", + ethereum: { borrowed, tvl: () => ({}) } +} diff --git a/projects/flowx-finance/index.js b/projects/flowx-finance/index.js new file mode 100644 index 0000000000..03c6d8d5ab --- /dev/null +++ b/projects/flowx-finance/index.js @@ -0,0 +1,28 @@ +const sui = require("../helper/chain/sui"); + +async function suiTVL() { + const { api } = arguments[3]; + + const poolInfo = ( + await sui.getDynamicFieldObjects({ + parent: + "0xd15e209f5a250d6055c264975fee57ec09bf9d6acdda3b5f866f76023d1563e6", + }) + ).map((i) => i.fields.value.fields); + poolInfo.forEach(({ reserve_x, reserve_y }) => { + api.add( + reserve_x.type.replace(">", "").split("<")[1], + reserve_x.fields.balance + ); + api.add( + reserve_y.type.replace(">", "").split("<")[1], + reserve_y.fields.balance + ); + }); +} + +module.exports = { + sui: { + tvl: suiTVL, + }, +}; diff --git a/projects/fluidity-money/index.js b/projects/fluidity-money/index.js index 4e30bdc9ac..bc6b358e3c 100644 --- a/projects/fluidity-money/index.js +++ b/projects/fluidity-money/index.js @@ -1,8 +1,8 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); const ATOKENS_ETHEREUM = ['0x028171bCA77440897B824Ca71D1c56caC55b68A3', '0x101cc05f4A51C0319f570d5E146a8C625198e636', '0xd4937682df3C8aEF4FE912A96A74121C0829E664']; const APOOL_ETHEREUM = ['0xFC66c25dbDb0606e7F9cA1d2754Eb0A0f8306dA9', '0x5E88f6dc0aa126FA28A137B24d0B4d7231352a0B', '0xB7a2930e66D84Da74CdcFE4f97FaE9fC8f1114e8']; -const ATOKENS_ARBITRUM = ['0x6ab707Aca953eDAeFBc4fD23bA73294241490620', '0x625E7708f30cA75bfd92586e17077590C60eb4cD', '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE']; -const APOOL_ARBITRUM = ['0xad7e2165FEa1d29030dF806cE4d530fa7a44511B', '0x23E7f09Fae0933db01420173726d18Dae809022C', '0xB7D37C5b15CDF29265C20668c20cD78586c423A8']; +const ATOKENS_ARBITRUM = ['0x6ab707Aca953eDAeFBc4fD23bA73294241490620', '0x625E7708f30cA75bfd92586e17077590C60eb4cD', '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE', '0x724dc807b04555b71ed48a6896b6f41593b8c637']; +const APOOL_ARBITRUM = ['0xad7e2165FEa1d29030dF806cE4d530fa7a44511B', '0x23E7f09Fae0933db01420173726d18Dae809022C', '0xB7D37C5b15CDF29265C20668c20cD78586c423A8', '0x91beB5C41dF001175b588C9510327D53f278972A']; const COMPOUND_ETHEREUM = [ ['0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9', '0x372025203D25589eC3aDAd82652De78eC76fFabC'], ['0x39AA39c021dfbaE8faC545936693aC917d5E7563', '0xE87Adc9D382Eee54C1eDE017D6E5C1324D59F457'], diff --git a/projects/fluidtokens/index.js b/projects/fluidtokens/index.js index b3578dd723..7ac1e750fa 100644 --- a/projects/fluidtokens/index.js +++ b/projects/fluidtokens/index.js @@ -42,7 +42,24 @@ const tvl_onchain = async () => { }; }; -async function tvl( +async function tvl() { + const dataOffers = await get("https://api.fluidtokens.com/get-available-collection-offers"); + let SC_offers_tvl = 0; + + dataOffers.forEach((i) => { + SC_offers_tvl += parseInt(i.offerData.loanAmnt); + }); + + const repay_tvl = parseInt(await get("https://api.fluidtokens.com/get-total-available-repayments")); + + const pools_tvl= parseInt(await get("https://api.fluidtokens.com/get-total-available-pools")); + return { + cardano: (SC_offers_tvl+repay_tvl+pools_tvl) / 1e6, + }; +} + + +async function borrowed( ts //timestamp in seconds ) { const data = await get("https://api.fluidtokens.com/get-active-loans"); @@ -76,19 +93,29 @@ async function tvl( .forEach((x) => { SC2_tvl += parseInt(x.loanRequestData.loanAmnt); }); - + + const dataOffers = await get("https://api.fluidtokens.com/get-available-collection-offers"); + let SC_offers_tvl = 0; + + dataOffers.forEach((i) => { + SC_offers_tvl += parseInt(i.offerData.loanAmnt); + }); + return { cardano: (SC1_tvl + SC2_tvl) / 1e6, }; } + module.exports = { methodology: "Count active loaned out ADA as tvl", timetravel: false, cardano: { tvl, + borrowed, }, hallmarks: [ [Math.floor(new Date("2023-01-01") / 1e3), "Count only active loans"], + [Math.floor(new Date("2023-06-27") / 1e3), "ADA loaned out is counted under borrowed"], ], }; diff --git a/projects/fluity/index.js b/projects/fluity/index.js index ae8dd5d187..97621c1882 100644 --- a/projects/fluity/index.js +++ b/projects/fluity/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getLiquityTvl } = require("../helper/liquity"); -const BNB_ADDRESS = '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c'; +const BNB_ADDRESS = ADDRESSES.bsc.WBNB; // TroveManager has a record of total system collateral const TROVE_MANAGER_ADDRESS = "0xe041c4099C0d6dcfC52C56A556EE4289D2E4b7C5"; diff --git a/projects/flux-exchange/index.js b/projects/flux-exchange/index.js new file mode 100644 index 0000000000..25fe65e561 --- /dev/null +++ b/projects/flux-exchange/index.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { staking } = require("../helper/staking"); +const { gmxExports } = require("../helper/gmx"); + +const FTMVault = "0xc050733A325eEe50E544AcCbD38F6DACEd60ea6D"; +const FTMStaking = "0x136F1bD4Bb930cD931Ed30310142c2f03a946AC0"; +const WFTM = ADDRESSES.fantom.WFTM; + +// ZKSYNC +const zkSyncVault = "0x09Aa1138dfdfF855Df18DDAf08e92186D213700e"; +const zkSyncStaking = "0xFae2784FaE4D47316B487Bc0087a7C78D4809753"; +const WETH = ADDRESSES.era.WETH; + +module.exports = { + fantom: { + staking: staking(FTMStaking, WFTM), + tvl: gmxExports({ vault: FTMVault }) + }, + era: { + staking: staking(zkSyncStaking, WETH), + tvl: gmxExports({ vault: zkSyncVault }) + } +}; \ No newline at end of file diff --git a/projects/fluxbeam-xyz/index.js b/projects/fluxbeam-xyz/index.js new file mode 100644 index 0000000000..9270f3b8d9 --- /dev/null +++ b/projects/fluxbeam-xyz/index.js @@ -0,0 +1,24 @@ +const { getConnection, decodeAccount, sumTokens2 } = require('../helper/solana') +const sdk = require('@defillama/sdk') +const { PublicKey } = require("@solana/web3.js") + +async function tvl(_, _1, _2, { api }) { + const connection = getConnection() + + const programPublicKey = new PublicKey('FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X') + const programAccounts = await connection.getProgramAccounts(programPublicKey, { + filters: [{ dataSize: 324 } ] + }); + sdk.log('#pools', programAccounts.length) + + const tokenAccounts = programAccounts.map((account) => { + const i = decodeAccount('fluxbeam', account.account) + return [i.tokenAccountA, i.tokenAccountB] + }).flat().map(i => i.toString()) + return sumTokens2({ tokenAccounts }) +} + +module.exports = { + timetravel: false, + solana: { tvl, }, +} diff --git a/projects/folks-finance/v2/constants.js b/projects/folks-finance/v2/constants.js index a1b72dfa79..34f404a4d1 100644 --- a/projects/folks-finance/v2/constants.js +++ b/projects/folks-finance/v2/constants.js @@ -34,6 +34,21 @@ const pools = [ appId: 1044267181, assetId: 287867876, }, + // Gard + { + appId: 1060585819, + assetId: 684649988, + }, + // WBTC + { + appId: 1067289273, + assetId: 1058926737, + }, + // WETH + { + appId: 1067289481, + assetId: 887406851, + }, ]; const oracleAppId = 1040271396; diff --git a/projects/folks-xalgo/index.js b/projects/folks-xalgo/index.js new file mode 100644 index 0000000000..b7822c4042 --- /dev/null +++ b/projects/folks-xalgo/index.js @@ -0,0 +1,14 @@ +const { getAssetInfo } = require("../helper/chain/algorand"); + +const xAlgoAssetId = 1134696561; + +module.exports = { + timetravel: false, + algorand: { + tvl: async () => { + const info = await getAssetInfo(xAlgoAssetId); + const total = info.circulatingSupply / 10 ** info.decimals; + return { algorand: total }; + }, + }, +}; diff --git a/projects/forgesx/index.js b/projects/forgesx/index.js index 302de98fa8..952f6a7c8d 100644 --- a/projects/forgesx/index.js +++ b/projects/forgesx/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const FORGE_SOL = '0x4938D2016e7446a24b07635611bD34289Df42ECb' -const USDC_TOKEN = '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8' +const USDC_TOKEN = ADDRESSES.arbitrum.USDC module.exports = { methodology: 'counts the number of USDC tokens deposited as collateral in the Forge.sol contract.', diff --git a/projects/forta/index.js b/projects/forta/index.js new file mode 100644 index 0000000000..3974efb36f --- /dev/null +++ b/projects/forta/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + polygon: { + tvl: () => 0, + staking: sumTokensExport({ owner: '0xd2863157539b1d11f39ce23fc4834b62082f6874', tokens: ['0x9ff62d1fc52a907b6dcba8077c2ddca6e6a9d3e1'] }) + } +} \ No newline at end of file diff --git a/projects/fortress-lending/index.js b/projects/fortress-lending/index.js index e3deefa9fe..e6eb037d6f 100644 --- a/projects/fortress-lending/index.js +++ b/projects/fortress-lending/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { compoundExports } = require("../helper/compound"); -const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "bsc", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c") +const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "bsc", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", ADDRESSES.bsc.WBNB) module.exports = { timetravel: true, diff --git a/projects/fortress/api.js b/projects/fortress/api.js new file mode 100644 index 0000000000..c96db138de --- /dev/null +++ b/projects/fortress/api.js @@ -0,0 +1,9 @@ +const index = require('./index') + +module.exports = { + avax: { + tvl: () => 0, + staking: index.avax.staking, + } +} + diff --git a/projects/fortress/index.js b/projects/fortress/index.js index 2fa0f73c64..d398d87ac6 100644 --- a/projects/fortress/index.js +++ b/projects/fortress/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0xb8e8d2E97C5F4594F65CCe0f5888C641C7A3a056"; module.exports = ohmTvl(treasuryAddress, [ - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], + [ADDRESSES.avax.WAVAX, false], ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], ["0x3e5f198b46f3de52761b02d4ac8ef4ceceac22d6", true], ["0x2a91134162e2da1394df9e5e64608109d73ed3a0", true], diff --git a/projects/fortunedao.js b/projects/fortunedao.js index e98cd57bd7..7cfc8f4486 100644 --- a/projects/fortunedao.js +++ b/projects/fortunedao.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { ohmTvl } = require('./helper/ohm') module.exports=ohmTvl("0xC8F249cDCDCBBa52d0908Dd201F20Af926710a9c", [ ["0xF2001B145b43032AAF5Ee2884e456CCd805F677D", false], ["0x88ef5a29eEc8BAAAb8c1111A57Ad2FCeC8aD6109", true], ], "cronos", "0xAFfB721B859db8300F7a13d8E80E7b74845Fe47a", "0xcA558149225Fb386B9c26716e8C35a650C74d35e", -()=>"0x6b175474e89094c44da98b954eedeac495271d0f", undefined, false) +()=>ADDRESSES.ethereum.DAI, undefined, false) diff --git a/projects/fortunedao/api.js b/projects/fortunedao/api.js new file mode 100644 index 0000000000..3ff57ec34e --- /dev/null +++ b/projects/fortunedao/api.js @@ -0,0 +1,8 @@ +const index = require('../fortunedao.js') + +module.exports = { + cronos: { + tvl: () => 0, + staking: index.cronos.staking, + } +} \ No newline at end of file diff --git a/projects/fountain.js b/projects/fountain.js index d09f8177f6..e74cbdb583 100644 --- a/projects/fountain.js +++ b/projects/fountain.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { compoundExports } = require("./helper/compound"); module.exports = { @@ -7,7 +8,7 @@ module.exports = { '0xA7684aE7e07Dac91113900342b3ef25B9Fd1D841', 'oasis', '0xD7d588bAbFb99E82Cd6dd0cA7677A5599AA678B5', - '0x21C718C22D52d0F3a789b752D4c2fD5908a8A733', + ADDRESSES.oasis.wROSE, ) }, }; // node test.js projects/fountain.js \ No newline at end of file diff --git a/projects/fpi/index.js b/projects/fpi/index.js new file mode 100644 index 0000000000..90a3ccf3c9 --- /dev/null +++ b/projects/fpi/index.js @@ -0,0 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const frax = ADDRESSES.ethereum.FRAX +const fxs = "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0" + +async function tvl(_, _b, _cb, { api, erc20 }){ + const balances = {} + // owner 0x6a7efa964cf6d9ab3bc3c47ebddb853a8853c502 + const lpOwned = await api.call({ abi: "function totalBalanceOf(address) view returns (uint256)", target:"0x7287488f8df7dddc5f373142d4827aaf92aac845", params: ["0x921852ba77cbceaa29e986e45ef2207f6e664df2"] }) + const supply = await api.call({ abi: "function totalSupply() view returns (uint256)", target:"0xdb7cbbb1d5d5124f86e92001c9dfdc068c05801d" }) + const fraxInPool = await api.call({ abi: "function balanceOf(address) view returns (uint256)", params:["0xf861483fa7e511fbc37487d91b6faa803af5d37c"], target: frax }) + balances[frax] = lpOwned/supply * fraxInPool + balances[fxs] = await api.call({ abi: "function balanceOf(address) view returns (uint256)", params:["0x6a7efa964cf6d9ab3bc3c47ebddb853a8853c502"], target: fxs }) + + return balances +} + +module.exports={ + ethereum:{ + tvl + } +} \ No newline at end of file diff --git a/projects/fractal-protocol/index.js b/projects/fractal-protocol/index.js index 12250e6f30..370f575696 100644 --- a/projects/fractal-protocol/index.js +++ b/projects/fractal-protocol/index.js @@ -1,97 +1,158 @@ -const sdk = require('@defillama/sdk') -const { userInfo } = require('../pendle/abi.json') +const ADDRESSES = require('../helper/coreAssets.json') +const { userInfo } = require('../pendle/abi.json'); const { sumTokens2 } = require('../helper/unwrapLPs') -const FRACTAL_VAULT_CONTRACT = '0x3EAa4b3e8967c02cE1304C1EB35e8C5409838DFC'; -const YIELD_RESERVE = '0xbA83B569e99B6afc2f2BfE5124460Be6f36a4a56'; -module.exports = { - misrepresentedTokens: true, - ethereum: { - tvl: async (_, block) => { - const convexStakingWrapper_tUSD = '0x00Ec5E23B203B8aE16d55C7F601d1c67e45D826c' - const franUnifiedFarm_tUSD = '0xb324b2bd8a3dc55b04111e84d5cce0c3771f8889' - const convexStakingWrapper_alUSD = '0x0def0fac24dead04e2f4b49b5fb50b10478e2fa6' - const franUnifiedFarm_alUSD = '0x711d650cd10df656c2c28d375649689f137005fa' - const { output: tUSDBal } = await sdk.api.abi.call({ - target: franUnifiedFarm_tUSD, params: convexStakingWrapper_tUSD, - abi: abis.lockedLiquidityOf, block, - }) - const { output: alUSDBal } = await sdk.api.abi.call({ - target: franUnifiedFarm_alUSD, params: convexStakingWrapper_alUSD, - abi: abis.lockedLiquidityOf, block, - }) - const { output: convexTUSD } = await sdk.api.erc20.balanceOf({ - target: '0x4a744870fd705971c8c00ac510eac2206c93d5bb', owner: '0xFD1D1339Dbc24496D70DBF7912c07aE2EF71bC2d', block, - }) - const balances = { - '0xB30dA2376F63De30b42dC055C93fa474F31330A5': alUSDBal, - '0x33baeDa08b8afACc4d3d07cf31d49FC1F1f3E893': tUSDBal, - '0x10BE382cfAB53e0aBD093D6801B5e95C6Aedb715': convexTUSD, - } - return sumTokens2({ balances, owners: [FRACTAL_VAULT_CONTRACT, YIELD_RESERVE,], tokens: ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'], block, }) - }, - borrowed: async (_, block) => { - const loanContract = '0xf0e3020934450152308e4a84a3c4a5801fcb8d29' - const { output: token } = await sdk.api.abi.call({ block, target: loanContract, abi: abis.principalToken }) - const { output: debt } = await sdk.api.abi.call({ block, target: loanContract, abi: abis.getDebt }) - return { - [token]: debt.principalDebtAmount, - } - } - }, - avax: { - tvl: async (_, _b, { avax: block }) => { - const chain = 'avax' - const strategy = '0x9fea225c7953869e68b8228d2c90422d905e5117' - const nUSDLP = '0xCA87BF3ec55372D9540437d7a86a7750B42C02f4' - const nUSDSwap = '0xed2a7edd7413021d440b09d654f3b87712abab66' - const synapseMiniChef = '0x3a01521f8e7f012eb37eaaf1cb9490a5d9e18249' - const { output: { amount } } = await sdk.api.abi.call({ - target: synapseMiniChef, params: [1, strategy], - abi: userInfo, chain, block, - }) - const { output: price } = await sdk.api.abi.call({ - target: nUSDSwap, abi: abis.getVirtualPrice, chain, block, - }) - return { tether: amount * price / 1e36 } - } - }, - polygon: { - tvl: async (_, _b, { polygon: block }) => { - const chain = 'polygon' - const strategy = '0x894cB5e24DDdD9ececb27831647ae869541Af28F' - const nUSDLP = '0x7479e1bc2f2473f9e78c89b4210eb6d55d33b645' - const nUSDSwap = '0x85fcd7dd0a1e1a9fcd5fd886ed522de8221c3ee5' - const synapseMiniChef = '0x7875af1a6878bda1c129a4e2356a3fd040418be5' - const { output: { amount } } = await sdk.api.abi.call({ - target: synapseMiniChef, params: [1, strategy], - abi: userInfo, chain, block, - }) - const { output: price } = await sdk.api.abi.call({ - target: nUSDSwap, abi: abis.getVirtualPrice, chain, block, - }) - return { tether: amount * price / 1e36 } - } - }, - moonriver: { - tvl: async (_, _b, { moonriver: block }) => { - const chain = 'moonriver' - const muSDCToken = '0xd0670aee3698f66e2d4daf071eb9c690d978bfa8' - const { output: mUSDC } = await sdk.api.erc20.balanceOf({ target: muSDCToken, chain, block, owner: '0x3Bc4D91B0dEdC1e8E93B356a7572f51815fe843B' }) - const { output: exchangeRate } = await sdk.api.abi.call({ - target: muSDCToken, abi: abis.exchangeRateStored, chain, block, - }) - return { - tether: mUSDC/1e8 * exchangeRate/1e16 - } - } - }, -} +//Fractal Addresses ETH +const FRACTAL_VAULT_CONTRACT_ETH = '0x3EAa4b3e8967c02cE1304C1EB35e8C5409838DFC'; +const FRACTAL_YIELD_RESERVE_ETH = '0xbA83B569e99B6afc2f2BfE5124460Be6f36a4a56'; + +//Token Addresses ETH +const USDC_ETH = ADDRESSES.ethereum.USDC; + +//Fractal Addreses ARB +const FRACTAL_VAULT_CONTRACT_ARB = '0x80e1a981285181686a3951B05dEd454734892a09' +const FRACTAL_YIELD_RESERVE_ARB = '0x7d7068fB0398906C693DBFc425584FD5b58c4B60' +const FRACTAL_CHRONOS_POOL = '0x468B6e0f89fa727A47d9512021050797B4875D6d' +const FRACTAL_CAMELOT_POOL = '0xf011B036934b58A619D2822d90ecd726126Efdf2' +const FRACTAL_CAMELOT_NITRO_POOL = '0x5d209809d3284309cC34B9D092f88fFc690de6c2' + +//Token Addresses Arb +const USDC_ARB = ADDRESSES.arbitrum.USDC +const USDF_ARB = '0xae48b7C8e096896E32D53F10d0Bf89f82ec7b987' + +//Fractal Addresses All Chains +const FRACTAL_FIREBLOCKS_OWNER = '0x931250786dFd106B1E63C7Fd8f0d854876a45200' + +//Other Addresses +const CHRONOS_GAUGE = '0xDb1759d287d13b409fA80505b623e48cB9cc44Fc' + +//Loans ETH +const ETH_LOANS = [ + '0x60f5A25DfdaBc3BfB3702bCB0142213CEaF1e89a' +] + +//Loans AVAX +const AVAX_LOANS = [ + '0x9297c3B0Eb3DB1Cc72E99cF641CE418a2c3791D9', + '0x1952ae434FA8B5E9c9a1374951e5fd9ae7BD75C7', + '0x9C7629E3bAD32631F3977eF7710415158208E057', + '0x3f2ebE04329B96CBfF6E9911c64fC0c1Fc609d9C', + '0x337dBC3d0C948F8Ef516F6678C3D63d11300Dc10', + '0x595b16Aab6E43664Bf5F2DF0E34fEF1A8e7a2692' +] const abis = { + getTokenPrice: "uint256:getTokenPrice", exchangeRateStored: "uint256:exchangeRateStored", getVirtualPrice: "uint256:getVirtualPrice", principalToken: "address:principalToken", lockedLiquidityOf: "function lockedLiquidityOf(address account) view returns (uint256)", getDebt: "function getDebt() view returns (uint256 interestDebtAmount, uint256 grossDebtAmount, uint256 principalDebtAmount, uint256 interestOwed, uint256 applicableLateFee, uint256 netDebtAmount, uint256 daysSinceFunding, uint256 currentBillingCycle, uint256 minPaymentAmount, uint256 maxPaymentAmount)", -} \ No newline at end of file + userInfo: "function userInfo(address account) view returns (uint256 totalDepositAmount, uint256 rewardDebtToken1, uint256 rewardDebtToken2, uint256 pendingRewardsToken1, uint256 pendingRewardsToken2)" +} + +// Define the function +async function getLoanDebt(loans, api) { + const loanDebts = await api.multiCall({ abi: abis.getDebt, calls: loans }) + loanDebts.map((loanDebt) => api.add(USDC_ETH, loanDebt.principalDebtAmount, { skipChain: true })) + return api.getBalances() +} + +const getEthTvl = async (_, ethBlock, __, { api }) => { + return sumTokens2({ owners: [FRACTAL_YIELD_RESERVE_ETH, FRACTAL_VAULT_CONTRACT_ETH], tokens: [USDC_ETH,], api }) +}; + +const getEthLoans = async (_, ethBlock, __, { api }) => { + return getLoanDebt(ETH_LOANS, api) +} + +const getArbTvl = async (_, _b, { arbitrum: block }, { api }) => { + // const usdfPrice = await api.call({ target: FRACTAL_VAULT_CONTRACT_ARB, abi: abis.getTokenPrice, }) + + const [ + chronosLpBalance, usdcBalanceChronosPool, usdfBalanceChronosPool, usdcBalanceCamelotPool, usdfBalanceCamelotPool, + ] = await api.multiCall({ + abi: 'erc20:balanceOf', calls: [ + { target: CHRONOS_GAUGE, params: FRACTAL_FIREBLOCKS_OWNER }, + { target: USDC_ARB, params: FRACTAL_CHRONOS_POOL }, + { target: USDF_ARB, params: FRACTAL_CHRONOS_POOL }, + { target: USDC_ARB, params: FRACTAL_CAMELOT_POOL }, + { target: USDF_ARB, params: FRACTAL_CAMELOT_POOL }, + ] + }) + + const camelotUserInfo = await api.call({ + target: FRACTAL_CAMELOT_NITRO_POOL, + abi: abis.userInfo, + params: FRACTAL_FIREBLOCKS_OWNER, + }) + + const [ + chronosLpTokenSupply, camelotLpTokenSupply, + ] = await api.multiCall({ + abi: 'erc20:totalSupply', calls: [ + FRACTAL_CHRONOS_POOL, FRACTAL_CAMELOT_POOL, + ] + }) + + api.add(USDC_ARB, usdcBalanceChronosPool * chronosLpBalance / chronosLpTokenSupply) + api.add(USDC_ARB, usdcBalanceCamelotPool * camelotUserInfo.totalDepositAmount / camelotLpTokenSupply) + // api.add(USDF_ARB, usdfBalanceChronosPool * chronosLpBalance / chronosLpTokenSupply) + // api.add(USDF_ARB, usdfBalanceCamelotPool * camelotUserInfo.totalDepositAmount / camelotLpTokenSupply) + + return sumTokens2({ api, tokens: [USDC_ARB], owners: [FRACTAL_YIELD_RESERVE_ARB, FRACTAL_VAULT_CONTRACT_ARB] }) +}; + +const getAvaxTvl = async (_, _b, { avax: block }, { api }) => { + const strategy = '0x9fea225c7953869e68b8228d2c90422d905e5117' + const nUSDLP = '0xCA87BF3ec55372D9540437d7a86a7750B42C02f4' + const nUSDSwap = '0xed2a7edd7413021d440b09d654f3b87712abab66' + const synapseMiniChef = '0x3a01521f8e7f012eb37eaaf1cb9490a5d9e18249' + const { amount } = await api.call({ + target: synapseMiniChef, params: [1, strategy], + abi: userInfo, + }) + const price = await api.call({ + target: nUSDSwap, abi: abis.getVirtualPrice, + }) + const synapseBalance = amount * price / 1e36 + + return { tether: synapseBalance } +} + +const getAvaxLoans = async (_, _b, { avax: block }, { api }) => { + return getLoanDebt(AVAX_LOANS, api) +} + +const getPolygonTvl = async (_, _b, { polygon: block }, { api }) => { + const strategy = '0x894cB5e24DDdD9ececb27831647ae869541Af28F' + const nUSDLP = '0x7479e1bc2f2473f9e78c89b4210eb6d55d33b645' + const nUSDSwap = '0x85fcd7dd0a1e1a9fcd5fd886ed522de8221c3ee5' + const synapseMiniChef = '0x7875af1a6878bda1c129a4e2356a3fd040418be5' + const { amount } = await api.call({ + target: synapseMiniChef, params: [1, strategy], + abi: userInfo, + }) + const price = await api.call({ + target: nUSDSwap, abi: abis.getVirtualPrice, + }) + return { tether: amount * price / 1e36 } +} + + +module.exports = { + ethereum: { + tvl: getEthTvl, + borrowed: getEthLoans + }, + arbitrum: { + tvl: getArbTvl + }, + avax: { + tvl: getAvaxTvl, + borrowed: getAvaxLoans + }, + polygon: { + tvl: getPolygonTvl + } +}; diff --git a/projects/fractional-art.js b/projects/fractional-art.js index 8a4c688c71..d607a5bc10 100644 --- a/projects/fractional-art.js +++ b/projects/fractional-art.js @@ -1,145 +1,56 @@ -const sdk = require("@defillama/sdk"); -const { PromisePool } = require('@supercharge/promise-pool') -const { BigNumber } = require("bignumber.js"); -const { get } = require('./helper/http') +const { getLogs } = require('./helper/cache/getLogs') const { sumTokens2 } = require('./helper/unwrapLPs') +const { isArtBlocks } = require('./helper/nft') + +async function tvl(_, _b, _cb, { api, }) { + const factory = '0x85aa7f78bdb2de8f3e0c0010d99ad5853ffcfc63' + const logs = await getLogs({ + api, + target: factory, + topics: ['0xf9c32fbc56ff04f32a233ebc26e388564223745e28abd8d0781dd906537f563e'], + eventAbi: 'event Mint (address indexed token, uint256 id, uint256 price, address vault, uint256 vaultId)', + onlyArgs: true, + fromBlock: 12743932, + }) + const artBlockOwners = [] + const tokensAndOwners = logs.map(log => [log.token, log.vault]).filter(([token, vault]) => { + if (isArtBlocks(token)) { + artBlockOwners.push(vault) + return false + } + return true + }) + await sumTokens2({ api, owners: artBlockOwners, resolveArtBlocks: true, }) -// Retrieve needed vaults attributes from REST API -const fractional_api_url = 'https://mainnet-api.fractional.art/vaults?perPage=100' // &page=1' - -async function getVaults() { - const vaults = [] - let page = 1 - const { - data, metadata - } = await get(fractional_api_url + `&page=${page}`) - vaults.push(...data) - page++ - const totalPages = metadata.pagination.totalPages - const pages = [] - for (; page <= totalPages; page++) pages.push(page) - - await PromisePool - .withConcurrency(21) - .for(pages) - .process(addPage) - - async function addPage(i) { - const { data, } = await get(fractional_api_url + `&page=${i}`) - vaults.push(...data) - sdk.log('fetched', i, 'of', totalPages) - } - - sdk.log(vaults.length) - return vaults -} - -// This API returns a list of vaults similar to the following exampleVaultDebug -function exampleVaultDebug() { - return { - "symbol": "DOG", - "contractAddress": "0xbaac2b4491727d78d2b78815144570b9f2fe8899", - "pools": [{ - "pool": "0x7731CA4d00800b6a681D031F565DeB355c5b77dA", - "tokens": ["0xBAac2B4491727D78D2b78815144570b9f2Fe8899", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"], - "provider": "UNISWAP_V3" - }], - "tokenAddress": "0xabEFBc9fD2F806065b4f3C237d4b59D9A97Bcac7", - "analytics": { - "tvlUsd": 21790624 - }, - "slug": "the-doge-nft", - "isClosed": false, - } -} - -// Get Fractional.art TVL -async function tvl(_, block) { - // Get vaults and Compute vaults TVL (trusting fractional rest api) - const vaults = await getVaults() - const toa = [] - let token0; - let token1; - vaults.forEach(vault => { - vault.pools.forEach(pool => { - token0 = pool.tokens[0]; - token1 = pool.tokens[1]; - // Swap token0 and token1 if needed so token0 is always vault token - if (vault.contractAddress.toLowerCase() === token1.toLowerCase()) - toa.push([token0, pool.pool]) - else - toa.push([token1, pool.pool]) - }) + return sumTokens2({ + api, tokensAndOwners, blacklistedTokens: [ + '0x9ef27de616154ff8b38893c59522b69c7ba8a81c', + '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85', + ] }) - - return sumTokens2({ tokensAndOwners: toa, block, }) } - -// Using fractional REST API, a TVL is returned in USD, stored as USDC -function getVaultsTvlApi(vaults) { - return vaults.reduce((acc, vault) => acc.plus(BigNumber(vault.analytics ? vault.analytics.tvlUsd : 0)), BigNumber(0)) +async function tvlLPDA(_, _b, _cb, { api, }) { + const factory = '0x32e8ab1e243d8d912a5ae937635e07e7e451d2ae' + const logs = await getLogs({ + api, + target: factory, + topics: ['0x4a08e09eb1f4b221a4d4faff944c52d3bb85486dd0f7e647977d35b406e16e43'], + eventAbi: 'event CreatedLPDA(address indexed vault, address indexed token, uint256 _id, tuple(uint32 startTime, uint32 endTime, uint64 dropPerSecond, uint128 startPrice, uint128 endPrice, uint128 minBid, uint16 supply, uint16 numSold, uint128 curatorClaimed, address curator) _lpdaInfo)', + onlyArgs: true, + fromBlock: 16125170, + }) + + return sumTokens2({ + api, tokensAndOwners: logs.map(log => [log.token, log.vault]), blacklistedTokens: [ + '0x9ef27de616154ff8b38893c59522b69c7ba8a81c', + ], + }) } -const usdc = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' -/* async function tvl_api(timestamp, block, chainBlocks, chain) { - const { vaults, openedVaultsCount } = await retrieveVaultsAPI() - return { [usdc]: getVaultsTvlApi(vaults).times(1e6) } -} */ - module.exports = { - ethereum: { tvl }, - methodology: `TVL is the total quantity of tokens held in LPs against any vault token. Each vault has a token, which is provided as LP in several pools returned by fractional REST API. Do not account for vault token locked in pools as contributing to TVL.` -} - - - -// ------------ -// Alternatives -// ------------ - -// 1. COULD USE unwrapUniswapLPs with lpPositions set to erc20:totalSupply of pool but does not work for uni_v3 -/* - // Get UNISWAP_V2 and SUSHISWAP_V1 LPs - // Call unwrapUniswapLPs with lpPositions set to totalSupply of LP token. So you unwrap the whole pool without needing to pull reserves of token1 - only pull totalSupply of LP token - const univ2_sushiv1_pairAddresses = univ2_sushiv1_pools.map(p => p.pool) - const univ3_pairAddresses = univ3_pools.map(p => p.pool) - const lpSupply = (await sdk.api.abi.multiCall({ - block, - abi: 'erc20:totalSupply', - calls: univ2_sushiv1_pairAddresses.map(address=>({ // cannot retrieve uni_v3 balances - target: address - })), - chain - })).output - // Format the way unwrapUniswapLPs function requires the token/balance pairs - const lpPositions = lpSupply.map(call => ({ - token: call.input.target, - balance: call.output - })) - // Accumulate to balances - await unwrapUniswapLPs(balances, lpPositions, block, chain=chain) - */ - -// 2. COULD USE staking contract, but too slow to retrieve call by call the amount of tokens -/* -const { staking } = require("./helper/staking.js"); -balances = {} -for (const pool of v2_v3_pools) { // univ3_pools - const token1_locked = staking(pool.pool, pool.token1, chain="ethereum") - token1_pool_balance = await token1_locked(timestamp, block, chainBlocks) - - sdk.util.sumSingleBalance(balances, pool.token1, token1_pool_balance[pool.token1]); - // sdk.util.sumMultiBalanceOf(balances, [token1_pool_balance], true); + ethereum: { tvl: tvl }, + methodology: `TVL is value of nfts in the vaults` } -*/ -// 3. COULD USE core/index.js functions to get TL locked in given Uniswap pools, but too much to copy-paste from ./CORE/INDEX.JS -/* -const {getUniswapPairInfo, getPairUnderlyingReserves, flattenUnderlyingReserves} = require('./core/index.js'); -Would need to copy-paste these functions are export them by module -const pairInfo = await getUniswapPairInfo(univ2_sushiv1_pairAddresses, timestamp, block); -const underlyingReserves = await Promise.all(pairInfo.map(info => getPairUnderlyingReserves(info, timestamp, block))); -let balances = flattenUnderlyingReserves(underlyingReserves); -*/ diff --git a/projects/frakt/index.js b/projects/frakt/index.js index 243f10a66d..19e438ad8c 100644 --- a/projects/frakt/index.js +++ b/projects/frakt/index.js @@ -1,4 +1,5 @@ -const { getProvider, getSolBalances, tokens, } = require('../helper/solana') +const ADDRESSES = require('../helper/coreAssets.json') +const { getProvider, getSolBalances, } = require('../helper/solana') const { Program, } = require("@project-serum/anchor"); const { getConfig } = require('../helper/cache') @@ -31,11 +32,11 @@ async function getData() { } const tvl = async () => { - return { [tokens.solana]: (await getData()).tvl } + return { ['solana:' + ADDRESSES.solana.SOL]: (await getData()).tvl } }; const borrowed = async () => { - return { [tokens.solana]: (await getData()).borrowed } + return { ['solana:' + ADDRESSES.solana.SOL]: (await getData()).borrowed } } module.exports = { diff --git a/projects/frax-swap/index.js b/projects/frax-swap/index.js index b3abbf37c5..aaffa8e7eb 100644 --- a/projects/frax-swap/index.js +++ b/projects/frax-swap/index.js @@ -1,20 +1,9 @@ const { getUniTVL } = require('../helper/unknownTokens') const sdk = require("@defillama/sdk") -const fx = (chain, factory1, factory2) => ({ +const fx = (chain, ...factories) => ({ [chain]: { - tvl: factory2 === undefined ? - getUniTVL({ - factory: factory1, - }) - : sdk.util.sumChainTvls([ - getUniTVL({ - factory: factory1, - }), - getUniTVL({ - factory: factory2, - }), - ]) + tvl: sdk.util.sumChainTvls(factories.map(factory => getUniTVL({ factory }))) }, }) @@ -26,11 +15,11 @@ https://facts.frax.finance/pools/0x247b71D57Ac80883364599ad5c9D74ea5EDc8660 (2k module.exports = { ...fx("ethereum", "0xb076b06f669e682609fb4a8c6646d2619717be4b", "0x43ec799eadd63848443e2347c49f5f52e8fe0f6f"), - ...fx("arbitrum", "0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E"), - ...fx("avax", "0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E"), - ...fx("bsc", "0xa007a9716dba05289df85A90d0Fd9D39BEE808dE"), + ...fx("arbitrum", "0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E", "0x8374A74A728f06bEa6B7259C68AA7BBB732bfeaD"), + ...fx("avax", "0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E", "0xf77ca9B635898980fb219b4F4605C50e4ba58afF"), + ...fx("bsc", "0xa007a9716dba05289df85A90d0Fd9D39BEE808dE", "0xf89e6CA06121B6d4370f4B196Ae458e8b969A011"), ...fx("dogechain", "0x67b7DA7c0564c6aC080f0A6D9fB4675e52E6bF1d"), - ...fx("fantom", "0xF55C563148cA0c0F1626834ec1B8651844D76792"), - ...fx("moonbeam", "0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E"), - ...fx("polygon", "0xc2544A32872A91F4A553b404C6950e89De901fdb"), -}; \ No newline at end of file + ...fx("fantom", "0xF55C563148cA0c0F1626834ec1B8651844D76792", "0xDc745E09fC459aDC295E2e7baACe881354dB7F64"), + ...fx("moonbeam", "0x5Ca135cB8527d76e932f34B5145575F9d8cbE08E", "0x51f9DBEd76f5Dcf209817f641b549aa82F35D23F"), + ...fx("polygon", "0xc2544A32872A91F4A553b404C6950e89De901fdb", "0x54F454D747e037Da288dB568D4121117EAb34e79"), +}; diff --git a/projects/fraxfinance/abi.json b/projects/fraxfinance/abi.json deleted file mode 100644 index 99c01ca361..0000000000 --- a/projects/fraxfinance/abi.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "usdValueInVault": "uint256:usdValueInVault", - "collatDollarBalance": "uint256:collatDollarBalance", - "borrowed_frax": "uint256:borrowed_frax" -} \ No newline at end of file diff --git a/projects/fraxfinance/index.js b/projects/fraxfinance/index.js index 1010a770d5..66c70cc6a5 100644 --- a/projects/fraxfinance/index.js +++ b/projects/fraxfinance/index.js @@ -1,41 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const BigNumber = require("bignumber.js"); -const { staking, stakings } = require("../helper/staking"); -const { sumTokens } = require("../helper/unwrapLPs"); +const { staking, } = require("../helper/staking"); +const { sumTokens2, nullAddress, } = require("../helper/unwrapLPs"); -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const USDC = ADDRESSES.ethereum.USDC; const FXS = "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0"; - -const FEI3CRVs = [ - "0x70F55767B11c047C8397285E852919F5f6c8DC60", - "0xE4BD0461AE7fdc76c61CE286a80c9B55d83B204a", -]; - -const contractAddresses = [ - //FRAX3CRV - "0x49ee75278820f409ecd67063D8D717B38d66bd71", - //CURVE_AMO - "0x72170Cdc48C33a6AE6B3E83CD387ca3Fb9105da2", - //FRAX_AMO_MINTER - "0xcf37B62109b537fa0Cb9A90Af4CA72f6fb85E241", - //LENDING_AMO - "0x9507189f5B6D820cd93d970d67893006968825ef", - //MANUAL_AMO - "0x1Be588641Fb28Eb8C2A51f1129707FB1E2683f5a", - //USDC_POOL_V1 - "0x3C2982CA260e870eee70c423818010DfeF212659", - //USDC_POOL_V2 - "0x1864Ca3d47AaB98Ee78D11fc9DCC5E7bADdA1c0d", - //USDC_POOL_V3 - "0x2fE065e6FFEf9ac95ab39E5042744d695F560729", - //INVESTOR_COLLATERAL_POOL - "0xEE5825d5185a1D512706f9068E69146A54B6e076", - //INVESTOR_AMO_V2 - "0xB8315Af919729c823B2d996B1A6DDE381E7444f1", -]; +const FRAX_3CRV = '0xd632f22692fac7611d2aa1c0d552930d43caed3b' +const T_3CRV = '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490' const veFXS_StakingContract = "0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0"; +const INVESTOR_AMO = '0xb1748c79709f4ba2dd82834b8c82d4a505003f27' const POOL_STAKING_CONTRACTS = [ "0xD875628B942f8970De3CcEaf6417005F68540d4f", @@ -54,116 +28,163 @@ const LP_ADDRESSES = [ "0xecBa967D84fCF0405F6b32Bc45F4d36BfDBB2E81", ]; -const treasuryContracts = [ - "0x63278bF9AcdFC9fA65CFa2940b89A34ADfbCb4A1", - "0x8D4392F55bC76A046E443eb3bab99887F4366BB0", - "0xa95f86fE0409030136D6b82491822B3D70F890b3", - "0x9AA7Db8E488eE3ffCC9CdFD4f2EaECC8ABeDCB48", - "0x874a873e4891fB760EdFDae0D26cA2c00922C404", -]; +async function get3CRVRatio(api) { + const [ + frax3crvSupply, + bal_3crv, + ] = await Promise.all([ + api.call({ abi: 'erc20:totalSupply', target: FRAX_3CRV, }), + api.call({ abi: 'erc20:balanceOf', target: T_3CRV, params: FRAX_3CRV, }), + ]) + return bal_3crv / frax3crvSupply +} -const ethereumTvl = async (timestamp, block) => { - let balances = {}; +async function addFrax3CRV(api, balances) { + const vault = '0x49ee75278820f409ecd67063D8D717B38d66bd71' + const [ + frax3crvBal, + ratio3CRV, + ] = await Promise.all([ + api.call({ abi: 'uint256:FRAX3CRVInVault', target: vault }), + get3CRVRatio(api), + ]) + sdk.util.sumSingleBalance(balances, T_3CRV, ratio3CRV * frax3crvBal, api.chain) +} - // --- CurveMetapoolLockerAMOs USDC TVL --- - const usdValueInVault = ( - await sdk.api.abi.multiCall({ - calls: FEI3CRVs.map((addr) => ({ target: addr })), - abi: abi.usdValueInVault, - block, - }) - ).output.map((value) => value.output); - - usdValueInVault.forEach((value) => { - sdk.util.sumSingleBalance( - balances, - USDC, - BigNumber(value) - .dividedBy(10 ** 12) - .toFixed(0) - ); - }); - - // --- USDC POOLs + AMOs + FRAX3CRV and FEI3CRVs --- - const usdcTvls = ( - await sdk.api.abi.multiCall({ - calls: contractAddresses.map((addr) => ({ target: addr })), - abi: abi.collatDollarBalance, - block, - }) - ).output.map((response) => response.output); - - usdcTvls.forEach((usdcTvl) => { - sdk.util.sumSingleBalance( - balances, - USDC, - BigNumber(usdcTvl) - .dividedBy(10 ** 12) - .toFixed(0) - ); - }); - - return balances; -}; +async function addyFrax3CRV(api, balances) { + const vault = '0x72170Cdc48C33a6AE6B3E83CD387ca3Fb9105da2' + const yFRAX3CRV = '0xB4AdA607B9d6b2c9Ee07A275e9616B84AC560139' + const [ + yfrax3crvBal, + pricePerShare, + ratio3CRV, + ] = await Promise.all([ + api.call({ abi: 'uint256:yvCurveFRAXBalance', target: vault }), + api.call({ abi: 'uint256:pricePerShare', target: yFRAX3CRV }), + get3CRVRatio(api), + ]) + sdk.util.sumSingleBalance(balances, T_3CRV, yfrax3crvBal * ratio3CRV * (pricePerShare / 1e18), api.chain) + return sumTokens2({ balances, api, owner: vault, tokens: [USDC] }) +} -// Fantom -const contractAddressesFantom = [ - //Spirit/Ola Lending AMO Fantom - "0x8dbc48743a05A6e615D9C39aEBf8C2b157aa31eA", - //Scream Lending AMO Fantom - "0x51E6D09d5A1EcF8BE035BBCa82F77BfeC3c7672A", - //SpiritSwap Liquidity AMO Fantom - "0x48F0856e0E2D06fBCed5FDA10DD69092a500646B", -]; +async function addCvxFRAX_BP(api, balances) { + const convexFRAXBP = '0x7e880867363A7e321f5d260Cade2B0Bb2F717B02' + const crvFRAX = '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC' + const crvFRAXPool = '0xdcef968d416a41cdac0ed8702fac8128a64241a2' + const [ + cvxFraxBal, + usdcBal, + poolSupply, + ] = await Promise.all([ + + api.call({ abi: 'erc20:balanceOf', target: convexFRAXBP, params: INVESTOR_AMO }), + api.call({ abi: 'erc20:balanceOf', target: USDC, params: crvFRAXPool }), + api.call({ abi: 'erc20:totalSupply', target: crvFRAX }), + ]) + sdk.util.sumSingleBalance(balances, USDC, usdcBal * cvxFraxBal / poolSupply, api.chain) +} -const fantomTvl = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - const chain = "fantom" - const block = chainBlocks[chain] - // --- AMO's --- - const usdcTvls = ( - await sdk.api.abi.multiCall({ - calls: contractAddressesFantom.map((addr) => ({ target: addr })), - abi: abi.borrowed_frax, - block, - chain, - }) - ).output.map((response) => response.output); - - usdcTvls.forEach((usdcTvl) => { - sdk.util.sumSingleBalance( - balances, - USDC, - BigNumber(usdcTvl) - .dividedBy(10 ** 12) // // Convert to 6 decimal USDC values - .toFixed(0) - ); - }); - - // --- Liquidity staking --- - - // Curve FRAX2Pool - await sumTokens(balances, [ - ["0x8866414733f22295b7563f9c5299715d2d76caf4", "0x7a656b342e14f745e2b164890e88017e27ae7320"], - ["0x04068da6c83afcfa0e13ba15a6696662335d5b75", "0xbea9f78090bdb9e662d8cb301a00ad09a5b756e9"] - ], block, chain, addr => addr === "0x8866414733f22295b7563f9c5299715d2d76caf4" ? "0x6b175474e89094c44da98b954eedeac495271d0f" : `${chain}:${addr}`) - - return balances; +async function addCvxFXSFRAX_BP(api, balances) { + const userAccount = '0x2AA609715488B09EFA93883759e8B089FBa11296' + const vault = '0x963f487796d54d2f27ba6f3fbe91154ca103b199' + const crvFRAX = '0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC' + const crvFRAXPool = '0xdcef968d416a41cdac0ed8702fac8128a64241a2' + const [ + cvxFraxBal, + usdcBal, + poolSupply, + ] = await Promise.all([ + api.call({ abi: 'function lockedLiquidityOf(address) view returns (uint256)', target: vault, params: userAccount }), + api.call({ abi: 'erc20:balanceOf', target: USDC, params: crvFRAXPool }), + api.call({ abi: 'erc20:totalSupply', target: crvFRAX }), + ]) + sdk.util.sumSingleBalance(balances, USDC, usdcBal * cvxFraxBal / poolSupply, api.chain) } + +async function addUSDCPools(api, balances) { + return sumTokens2({ + balances, api, owners: [ + '0x3C2982CA260e870eee70c423818010DfeF212659', + '0x1864Ca3d47AaB98Ee78D11fc9DCC5E7bADdA1c0d', + '0x2fE065e6FFEf9ac95ab39E5042744d695F560729', + ], tokens: [USDC] + }) +} + +async function addAMOMinter(api, balances) { + const amoMinter = '0xcf37B62109b537fa0Cb9A90Af4CA72f6fb85E241' + let allAMOAddresses = await api.call({ target: amoMinter, abi: 'address[]:allAMOAddresses' }) + const amos = allAMOAddresses.filter(i => i !== nullAddress) + const blacklist = new Set([ + '0x66635DC1EdEfF19e839f152a67278151Aa6e1B61', // aave AMO + INVESTOR_AMO, + ].map(i => i.toLowerCase())) + const dollBallAbi = 'function dollarBalances() view returns (uint256 frax_val_e18, uint256 collat_val_e18)' + const res = await api.multiCall({ abi: dollBallAbi, calls: amos.filter(i => blacklist.has(i.toLowerCase())) }) + const table = [] + res.forEach((v, i) => { + table.push([amos[i], Number(v.collat_val_e18 / 1e24).toFixed(3)]) + sdk.util.sumSingleBalance(balances, USDC, v.collat_val_e18 / 1e12, api.chain) + }) + table.sort((a, b) => +b[1] - +a[1]) + console.log(amos.length) + console.table(table) + +} + +async function addInvestorAMO(api, balances) { + return sumTokens2({ + balances, + api, owner: INVESTOR_AMO, + tokens: Object.values({ + Synapse: '0x0f2d719407fdbeff09d87557abb7232601fd9f29', + 'Wrapped BTC': ADDRESSES.ethereum.WBTC, + 'USD Coin': ADDRESSES.ethereum.USDC, + ZigZag: '0xc91a71a1ffa3d8b22ba615ba1b9c01b2bbbf55ad', + 'Governance OHM': '0x0ab87046fbb341d058f17cbc4c1133f25a20a52f', + 'Aave interest bearing USDC': '0xbcca60bb61934080951369a648fb03df4f96263c', + Perpetual: '0xbc396689893d065f41bc2c6ecbee5e0085233447', + Hop: '0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc', + 'Ethereum Name Service': '0xc18360217d8f7ab5e7c516566761ea12ce7f9d72', + 'Curve.fi DAI/USDC/USDT': '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490', + 'Saddle DAO': '0xf1dc500fde233a4055e25e5bbf516372bc4f6871', + Ether: nullAddress, + TrueUSD: ADDRESSES.ethereum.TUSD, + 'Gelato Network Token': '0x15b7c0c907e4c6b9adaaaabc300c08991d6cea05', + 'Staked Aave': '0x4da27a545c0c5b758a6ba100e3a049001de870f5', + 'Convex Token': ADDRESSES.ethereum.CVX, + 'Curve DAO Token': ADDRESSES.ethereum.CRV, + 'Bend Token': '0x0d02755a5700414b26ff040e1de35d337df56218', + 'Binance USD': ADDRESSES.ethereum.BUSD, + 'Alchemix USD': '0xbc6da0fe9ad5f3b0d58160288917aa56653660e9', + 'Staked CvxCrv': '0xaa0c3f5f7dfd688c6e646f66cd2a6b66acdbe434', + }), + }) +} + +const ethereumTvl = async (timestamp, block, _, { api }) => { + let balances = {}; + + await Promise.all([ + addFrax3CRV(api, balances), + addyFrax3CRV(api, balances), + addUSDCPools(api, balances), + addInvestorAMO(api, balances), + addCvxFXSFRAX_BP(api, balances), + ]) + return balances +}; + module.exports = { doublecounted: true, - misrepresentedTokens: true, ethereum: { staking: staking(veFXS_StakingContract, FXS), pool2: staking(POOL_STAKING_CONTRACTS, LP_ADDRESSES), tvl: ethereumTvl, }, - fantom: { - tvl: fantomTvl - }, - hallmarks:[ + hallmarks: [ [1651881600, "UST depeg"], ], methodology: diff --git a/projects/fraxlend/index.js b/projects/fraxlend/index.js index 7c7b6ce734..86df2b95b8 100644 --- a/projects/fraxlend/index.js +++ b/projects/fraxlend/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json"); const { sumTokens2 } = require('../helper/unwrapLPs') @@ -8,10 +9,15 @@ async function tvl(timestamp, block, chainBlocks, { api }) { const tokens = await api.multiCall({ abi: abi.collateralContract, calls: pairs }) return sumTokens2({ api, tokensAndOwners: tokens.map((v, i) => [v, pairs[i]]) }) } +async function borrowed(timestamp, block, chainBlocks, { api }) { + const pairs = await api.call({ target: REGISTRY_ADDR, abi: abi['getAllPairAddresses'], }) + const bals = await api.multiCall({ abi: 'function totalBorrow() view returns (uint128 amount, uint128 shares)', calls: pairs }) + bals.forEach(bal => api.add(ADDRESSES.ethereum.FRAX, bal.amount)) +} module.exports = { methodology: 'Gets the pairs from the REGISTRY_ADDRESS and adds the collateral amounts from each pair', ethereum: { - tvl + tvl, borrowed, }, } \ No newline at end of file diff --git a/projects/freebie/index.js b/projects/freebie/index.js index 3f15854260..eb950c1b39 100644 --- a/projects/freebie/index.js +++ b/projects/freebie/index.js @@ -1,8 +1,10 @@ const { getTokenPrices } = require('../helper/unknownTokens') +const sdk = require("@defillama/sdk"); +const { staking } = require('../helper/staking') const token = '0x9bedce29f79076b21dd04958a9fd4b22f63fd86d' -async function staking(_, _b, _cb, { api, }) { +async function frbVault(_, _b, _cb, { api, }) { const balances = { ['avax:'+token]: await api.call({ abi: 'uint256:balanceVault', target: token, }) } @@ -11,10 +13,12 @@ async function staking(_, _b, _cb, { api, }) { return balances } +const stakedFRB = staking("0xcc2F243FA7bBcab3BD951E8aE40730173af88b83", "0x9BedCE29F79076b21DD04958a9Fd4B22F63fD86D", "avax") + module.exports = { misrepresentedTokens: true, avax: { tvl: () => 0, - staking, + staking: sdk.util.sumChainTvls([frbVault,stakedFRB]) } }; diff --git a/projects/frfi/index.js b/projects/frfi/index.js index 0c6c434b92..275930bd8b 100644 --- a/projects/frfi/index.js +++ b/projects/frfi/index.js @@ -2,13 +2,15 @@ const { fetchURL } = require("../helper/utils"); const { toUSDTBalances } = require("../helper/balances"); const tvl = (chain) => async () => { + return {} + /* const response = await fetchURL( `https://backend-api-prod.frfi.io/autofarm?chainId=${chain}&$limit=100` ); const data = response?.data?.data; const result = data?.reduce((acc, item) => acc + (item?.strategyTVL ?? 0), 0) ?? 0; - return toUSDTBalances(result); + return toUSDTBalances(result); */ }; module.exports = { diff --git a/projects/friktion/index.js b/projects/friktion/index.js index 173a329621..bc5f02b0e8 100644 --- a/projects/friktion/index.js +++ b/projects/friktion/index.js @@ -20,7 +20,7 @@ async function tvl() { throw new Error("Unexpected shape of friktionShapshot"); } - if (!friktionSnapshot.totalTvlUSD || friktionSnapshot.totalTvlUSD < 1000000) { + if (!friktionSnapshot.totalTvlUSD || friktionSnapshot.totalTvlUSD < 1000) { console.log(friktionSnapshot); throw new Error("Unexpected totalTvlUSD"); } diff --git a/projects/froggy-protocol/index.js b/projects/froggy-protocol/index.js new file mode 100644 index 0000000000..c902b2be3c --- /dev/null +++ b/projects/froggy-protocol/index.js @@ -0,0 +1,26 @@ +const { yieldHelper, } = require("../helper/yieldHelper") + +const masterchef = '0x6c8eE277A958751c97e8d0AFfEbbB8478bC755ce' +const froggy = '0x5217483171b2550C74234C583620C355b74b3095' + +module.exports = yieldHelper({ + project: 'froggy-ink', + chain: 'era', + masterchef: masterchef, + nativeToken: froggy, + abis: { + poolInfo: 'function poolInfo(uint256) view returns (address want, uint256 , uint256 , uint256 , uint256 , uint256 , uint256 , uint256 amount, uint256 , address strat)', + poolLength: 'function poolLength() view returns (uint256)', + getReservesABI: 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)', + }, + useDefaultCoreAssets: true, +}) + +module.exports = { + era: { + tvl: () => ({}), + }, + hallmarks: [ + [Math.floor(new Date('2023-06-15')/1e3), 'Rug Pull ?'], + ], +} \ No newline at end of file diff --git a/projects/ftmguru/index.js b/projects/ftmguru/index.js deleted file mode 100644 index 0b0f35d20a..0000000000 --- a/projects/ftmguru/index.js +++ /dev/null @@ -1,26 +0,0 @@ -const ITVL = { - pool2: "uint256:pool2", - staking: "uint256:staking", - tvl: "uint256:tvl", -} - -const tvlGuru = "0x0786c3a78f5133F08C1c70953B8B10376bC6dCad"; //On-Chain Universal TVL Finder -const USD = "fantom:0x04068DA6C83AFCFA0e13ba15A6696662335D5B75"; //same as abi.call({target:tvlGuru,abi:ITVL[3]}) -//NOTE: USD===fantom:USDC is used explicitly to reduce EVM calls by this adapter. It makes this process faster. - -function tvl(abi) { - return async (_, _b, _cb, { api, }) => { - return { - [USD]: (await api.call({ target: tvlGuru, abi: ITVL[abi], })) / 1e12 - } - } -} - -module.exports = { - methodology: "USD-denominated value aggregation of most Locked assets held across ftm.guru's contracts, powered by direct on-chain storage of quantity, pools and prices using ftm.guru's Universal TVL Finder Tool (tvlGuru.sol). More detailed documentation of TVL is available at https://ftm.guru/rawdata/tvl", - fantom: { - pool2: tvl('pool2'), - staking: tvl('staking'), - tvl: tvl('tvl'), - }, -} diff --git a/projects/fujidao-v2/index.js b/projects/fujidao-v2/index.js new file mode 100644 index 0000000000..b91df7b921 --- /dev/null +++ b/projects/fujidao-v2/index.js @@ -0,0 +1,95 @@ +const { getLogs } = require('../helper/cache/getLogs') + +const config = { + ethereum: [ + { borrowFactory: '0x24E72207a078558BF9018dcF97D7f580E79B9221', borrowStartBlock: 17690796 }, + ], + xdai: [ + { borrowFactory: '0xBeaa4b2cE11cc2F8a059341DaD422814B66d1aD0', borrowStartBlock: 28448319 }, + { borrowFactory: '0xeAcb50131a46a7b8C750c03ba336f2632fDb0344', borrowStartBlock: 28911067 }, + ], + arbitrum: [ + { borrowFactory: '0x2855666fbc5f526269b1f5dc73dfc8e11acb67f1', borrowStartBlock: 101069692 }, + { borrowFactory: '0x2bb069a248Ba1c62062143462AE7bDB5C4360E3d', borrowStartBlock: 110400709 }, + ], + optimism: [ + { borrowFactory: '0xC377e6e13426739f14E411dD88Af8056e2DcabA4', borrowStartBlock: 105577184 }, + { borrowFactory: '0x1cbf7f06c04226488B4D5b2d5EA5C8B965130500', borrowStartBlock: 106780843 }, + ], + polygon: [ + { borrowFactory: '0x157A03942e4F88c0357e4Afc1da46E9Cc12DB1D5', borrowStartBlock: 43896122 }, + { borrowFactory: '0x6Ed2428624da78cfE2daeC70BE171D1752cDEfF8', borrowStartBlock: 44986739 }, + ], +} + +module.exports = { + doublecounted: true, +}; + +Object.keys(config).forEach(chain => { + const factories = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + let logs = []; + for (let i = 0; i < factories.length; i++) { + const { borrowFactory, borrowStartBlock } = factories[i]; + const interlogs = await getLogs({ + api, + target: borrowFactory, + topics: ['0x89d38637357ca536d5c3f7cfcf4738f465b8b6bf51af92d02cb9fa8eb093f368'], + eventAbi: 'event DeployBorrowingVault (address indexed vault, address indexed asset, address indexed debtAsset, string name, string symbol, bytes32 salt)', + onlyArgs: true, + fromBlock: borrowStartBlock, + extraKey: 'borrow-vault' + }) + interlogs.forEach(log => { + logs.push(log); + }) + } + const vaults = logs.map(log => log.vault) + const assets = logs.map(log => log.asset) + const debtAssets = logs.map(log => log.debtAsset) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) + const debtBals = await api.multiCall({ abi: 'uint256:totalDebt', calls: vaults, permitFailure: true, }) + bals.forEach((bal, i) => { + if (!debtBals[i]) { + if (+bal === 0) return; + throw new Error(`No debt balance for ${vaults[i]}`) + } + api.add(assets[i], bal) + api.add(debtAssets[i], debtBals[i] * -1) + }) + return api.getBalances() + }, + borrowed: async (_, _b, _cb, { api, }) => { + let logs = []; + for (let i = 0; i < factories.length; i++) { + const { borrowFactory, borrowStartBlock } = factories[i]; + const interlogs = await getLogs({ + api, + target: borrowFactory, + topics: ['0x89d38637357ca536d5c3f7cfcf4738f465b8b6bf51af92d02cb9fa8eb093f368'], + eventAbi: 'event DeployBorrowingVault (address indexed vault, address indexed asset, address indexed debtAsset, string name, string symbol, bytes32 salt)', + onlyArgs: true, + fromBlock: borrowStartBlock, + extraKey: 'borrow-vault' + }) + interlogs.forEach(log => { + logs.push(log); + }) + } + const vaults = logs.map(log => log.vault) + const debtAssets = logs.map(log => log.debtAsset) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) + const debtBals = (await api.multiCall({ abi: 'uint256:totalDebt', calls: vaults, permitFailure: true, })) + bals.forEach((bal, i) => { + if (!debtBals[i]) { + if (+bal === 0) return; + throw new Error(`No debt balance for ${vaults[i]}`) + } + api.add(debtAssets[i], debtBals[i]) + }) + return api.getBalances() + } + } +}) \ No newline at end of file diff --git a/projects/fujidao/index.js b/projects/fujidao/index.js index 58485150b9..946cfd5c9a 100644 --- a/projects/fujidao/index.js +++ b/projects/fujidao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {sumTokens} = require('../helper/unwrapLPs'); const abi = require('./abi.json'); const sdk = require('@defillama/sdk'); @@ -8,11 +9,11 @@ const {polygonContracts} = require('./polygon'); const {arbitrumContracts} = require('./arbitrum'); const {optimismContracts} = require('./optimism'); -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; -const wbtc = "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"; -const ftm = "0x4E15361FD6b4BB609Fa63C81A2be19d873717870"; -const matic = '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0'; -const usdc= "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; +const weth = ADDRESSES.ethereum.WETH; +const wbtc = ADDRESSES.ethereum.WBTC; +const ftm = ADDRESSES.ethereum.FTM; +const matic = ADDRESSES.ethereum.MATIC; +const usdc= ADDRESSES.ethereum.USDC; const marketsupply = async (contract, block, chain) => { return await sdk.api.abi.multiCall( diff --git a/projects/funbear/index.js b/projects/funbear/index.js new file mode 100644 index 0000000000..51238b72db --- /dev/null +++ b/projects/funbear/index.js @@ -0,0 +1,19 @@ +const FUNB = 'ethereum:0xd86c0b9b686f78a7a5c3780f03e700dbbad40e01'; +const stakeContractAddresses = { + unlockedStake: '0x1C4f227A2c7F62f88a7907cBF027403603A81A64', + yearlyStake: '0xb991FAeF710f2ae699c425a92482Fc5D3Ae0cCD7', +} + +async function staking(timestamp, block, chainBlocks, { api }) { + const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: Object.values(stakeContractAddresses) }) + supplies.forEach(i => api.add(FUNB, i, { skipChain: true })) + return api.getBalances() +} + +module.exports = { + methodology: 'TVL counts staked FUNB coins on the platform itself.', + kava: { + tvl: () => 0, + staking, + } +}; diff --git a/projects/fundex/index.js b/projects/fundex/index.js index af8d59d6bc..881cddffc6 100644 --- a/projects/fundex/index.js +++ b/projects/fundex/index.js @@ -6,7 +6,11 @@ const config = { kava: '0xF28EFDEc09D15c6e206Ba15E7B4Ce13326d0ca90', } -module.exports = {}; +module.exports = { + hallmarks: [ + [1680134400, "Rugpull"] + ] +}; Object.keys(config).forEach(chain => { module.exports[chain] = {tvl} }) diff --git a/projects/fusion/index.js b/projects/fusion/index.js index a84298799c..1b1b8b34d9 100644 --- a/projects/fusion/index.js +++ b/projects/fusion/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // Set Helpers const { stakings } = require("../helper/staking"); @@ -7,7 +8,7 @@ const { mergeExports } = require("../helper/utils"); // Set NULL, Factories -const nullAddress = "0x0000000000000000000000000000000000000000"; +const nullAddress = ADDRESSES.null; const dexFactory = "0x9550b0c83AD5a58898cD4267987Af67e7E52bF55"; // 87, 250 const dexFactoryClassic = "0x9fAEd210e14F95a15b89C0D09D1a55519aC2F26d"; // 61 @@ -19,8 +20,8 @@ const sntClassic = "0x5D33f65Cc32CAB4065074E8fb1c08Df727e7F7cB"; // 61 // Set NUSD Addresses -const nusdNovaNetwork = "0x1F5396f254EE25377A5C1b9c6BfF5f44e9294fFF"; // 87 -const nusdFantom = "0xC5cd01e988cD0794E05ab80F2BCdbDF13cE08BD3"; // 250 +const nusdNovaNetwork = ADDRESSES.nova.NUSD; // 87 +const nusdFantom = ADDRESSES.fantom.nUSD; // 250 const nusdClassic = "0xab1E9D7551c1B161cedf96AeaC66b95bc5cCd7d4"; // 61 // Set Staking Protocols diff --git a/projects/fusionx-fi/index.js b/projects/fusionx-fi/index.js new file mode 100644 index 0000000000..5c28a36589 --- /dev/null +++ b/projects/fusionx-fi/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +module.exports = { + misrepresentedTokens: true, + mantle: { + tvl: getUniTVL({ + factory: "0xe5020961fa51ffd3662cdf307def18f9a87cce7c", + useDefaultCoreAssets: true, + }), + }, +}; diff --git a/projects/fusionx-v3/index.js b/projects/fusionx-v3/index.js new file mode 100644 index 0000000000..ff3f1093c3 --- /dev/null +++ b/projects/fusionx-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + mantle: { factory: '0x530d2766D1988CC1c000C8b7d00334c14B69AD71', fromBlock: 2646 }, +}) diff --git a/projects/future-swap/index.js b/projects/future-swap/index.js index 77bc34bc0e..09b8e465e0 100644 --- a/projects/future-swap/index.js +++ b/projects/future-swap/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs") const { sumUnknownTokens } = require("../helper/unknownTokens") const FindoraStableCoins = { - BNB_BUSD: "0xE80EB4a234f718eDc5B76Bb442653827D20Ebb2d", - BNB_USDT: "0x93EDFa31D7ac69999E964DAC9c25Cd6402c75DB3", - ETHEREUM_USDC: "0x2e8079E0fE49626AF8716fC38aDEa6799065D7f7", - ETHEREUM_USDT: "0x0632baa26299C9972eD4D9AfFa3FD057A72252Ff", + BNB_BUSD: ADDRESSES.findora.BUSD_b, + BNB_USDT: ADDRESSES.findora.USDT_b, + ETHEREUM_USDC: ADDRESSES.findora.USDC_e, + ETHEREUM_USDT: ADDRESSES.findora.USDT_e, }; const FutureSwapContracts = { diff --git a/projects/futureswap/index.js b/projects/futureswap/index.js index a5f0b7e6fc..d4cf03ead5 100644 --- a/projects/futureswap/index.js +++ b/projects/futureswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') async function tvl(timestamp, block) { @@ -9,8 +10,8 @@ async function tvl(timestamp, block) { ]; const tokens = [ - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDC, ]; return sumTokens2({ block, tokens, owners: contracts }) } @@ -23,9 +24,9 @@ async function arbitrum(timestamp, _, { arbitrum: block }) { ]; const tokens = [ - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", - "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.WBTC, ]; return sumTokens2({ block, tokens, owners: contracts, chain: 'arbitrum' }) } @@ -38,9 +39,9 @@ async function avax(timestamp, _, { avax: block }) { ]; const tokens = [ - '0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd', - '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', - '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', + ADDRESSES.avax.JOE, + ADDRESSES.avax.USDC, + ADDRESSES.avax.WAVAX, ]; return sumTokens2({ block, tokens, owners: contracts, chain: 'avax',}) } diff --git a/projects/fvm/index.js b/projects/fvm/index.js new file mode 100644 index 0000000000..3dfbc9e99f --- /dev/null +++ b/projects/fvm/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + fantom: { + tvl: getUniTVL({ + factory: '0x472f3C3c9608fe0aE8d702f3f8A2d12c410C881A', + useDefaultCoreAssets: true, + hasStablePools: true, + }) + } +} diff --git a/projects/fxdx/index.js b/projects/fxdx/index.js new file mode 100644 index 0000000000..21aabc7326 --- /dev/null +++ b/projects/fxdx/index.js @@ -0,0 +1,14 @@ +const sdk = require('@defillama/sdk') +const { gmxExports } = require("../helper/gmx") +const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') + +const optimismvault = "0x10235996C4DAbCE8430a71Cbc06571bd475A1d0C"; +const customWETH = '0xd158b0f013230659098e58b66b602dff8f7ff120' +const wethTvl = sumTokensExport({ owner: customWETH, tokens: [nullAddress]}) +const gmxTVL = gmxExports({ vault: optimismvault, blacklistedTokens: [customWETH] }) + +module.exports = { + optimism: { + tvl: sdk.util.sumChainTvls([gmxTVL, wethTvl]), + }, +}; diff --git a/projects/gaia-dao/index.js b/projects/gaia-dao/index.js index 5f38e2835c..2b922a6cc5 100644 --- a/projects/gaia-dao/index.js +++ b/projects/gaia-dao/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const gaia = "0x9f6aEDcA032b1092E08b848FC9D6F29139370837"; const stakingAdd = "0x89884B045Ed93067b28C2554a9CB877a41a8fA73"; const treasury = "0x15E5A559e67Cb6CAB391821635B351D43E2371b2"; const treasuryTokens = [ - ["0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", false], // USDC - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], // WAVAX - ["0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", false], // WETH + [ADDRESSES.avax.USDC_e, false], // USDC + [ADDRESSES.avax.WAVAX, false], // WAVAX + [ADDRESSES.avax.WETH_e, false], // WETH ["0x6Ca7AAc252FeD4894132Ae6E6d96bFc739d9FC3a", true] // GAIA USDC JLP ]; diff --git a/projects/gainsNetwork.js b/projects/gainsNetwork.js index 32456e0e80..25ddb327f6 100644 --- a/projects/gainsNetwork.js +++ b/projects/gainsNetwork.js @@ -1,14 +1,15 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { pool2 } = require("./helper/pool2"); const { staking } = require("./helper/staking"); const { sumTokens2 } = require("./helper/unwrapLPs"); const tokens = { polygon: { - DAI: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", + DAI: ADDRESSES.polygon.DAI, dQUICK: "0xf28164a485b0b2c90639e47b0f377b4a438a16b1", }, arbitrum: { - DAI: "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", + DAI: ADDRESSES.optimism.DAI, }, }; diff --git a/projects/galaxygoggle/index.js b/projects/galaxygoggle/index.js index 4f3ef05204..68016dc7c2 100644 --- a/projects/galaxygoggle/index.js +++ b/projects/galaxygoggle/index.js @@ -1,59 +1,18 @@ -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); const GgStaking = "0xBD79c01140CeE7040f8F5E935B72e13540a801b6" const gg = "0xF2F7CE610a091B94d41D69f4fF1129434a82E2f0" -// https://app.galaxygoggle.money/#/bonds -const treasury = "0xD5F922e23693e552793fE0431F9a95ba67A60A23" -const dao = "0xDEEdd1646984F9372Cc9D3d7E13AC1606cC2B548" -const mim = "0x130966628846BFd36ff31a822705796e8cb8C18D" -const wavax = "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" -const joe = "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd" - -async function tvl(timestamp, block, chainBlocks) { - const balances = {}; - - await sumTokensAndLPsSharedOwners( - balances, - [ - [mim, false], - [wavax, false], - [joe, false], - ["0xe9E8d6b6ce6D94Fc9d724711e80784Ec096949Fc", true], // mim-gg - ], - [treasury, dao], - chainBlocks.avax, - 'avax', - addr=>`avax:${addr}` - ); - - return balances; -} - const bscGG = "0xcAf23964Ca8db16D816eB314a56789F58fE0e10e"; -const bscTreasury = "0xF76C9753507B3Df0867EB02D86d07C6fFcEecaf1"; const bscStaking = "0x97209Cf7a6FccC388eEfF85b35D858756f31690d"; -const treasuryTokensBSC = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD - ["0x13Cf29b3F58f777dDeD38278F7d938401f6b260c", true] // GG-BUSD -] - -async function bscTvl(timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, treasuryTokensBSC, [bscTreasury], chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`); - balances[`avax:${gg}`] = balances["bsc:0xcaf23964ca8db16d816eb314a56789f58fe0e10e"] || 0; - delete balances["bsc:0xcaf23964ca8db16d816eb314a56789f58fe0e10e"]; - return balances; -} module.exports = { avax:{ - tvl, + tvl: () => 0, staking: staking(GgStaking, gg, "avax") }, bsc: { - tvl: bscTvl, + tvl: () => 0, staking: staking(bscStaking, bscGG, "bsc", `avax:${gg}`) }, methodology: diff --git a/projects/gale/index.js b/projects/gale/index.js index 95ba9e6c1b..a893ac975a 100644 --- a/projects/gale/index.js +++ b/projects/gale/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const config = { @@ -6,7 +7,7 @@ const config = { tokenContract: "0x627E86E9eC832b59018Bf91456599e752288Aa97", liquidityContract: "0x1fC3152de89b0c6c36F0d330b7Be369d6dDB219F", vaultContract: "0x973Abe726E3e37bbD8501B2D8909Fa59535Babdd", - busd: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', + busd: ADDRESSES.bsc.BUSD, } } diff --git a/projects/galoswap/index.js b/projects/galoswap/index.js new file mode 100644 index 0000000000..65a3e9dac4 --- /dev/null +++ b/projects/galoswap/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require('../helper/unknownTokens'); +const sdk = require("@defillama/sdk"); + +module.exports = { + misrepresentedTokens: true, + era: { + tvl: getUniTVL({ factory: '0x48E571C645bbeD451b7C58650E643F534fCaB693', useDefaultCoreAssets: true, hasStablePools: true }), + }, + methodology: "Counts liquidity in pools", +}; \ No newline at end of file diff --git a/projects/gambit-financial/index.js b/projects/gambit-financial/index.js new file mode 100644 index 0000000000..cc06448b27 --- /dev/null +++ b/projects/gambit-financial/index.js @@ -0,0 +1,15 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + bsc: { + tvl: sumTokensExport({ owner: '0xc73A8DcAc88498FD4b4B1b2AaA37b0a2614Ff67B', tokens: [ + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.USDT, + ]}) + }, +} diff --git a/projects/garble-money/index.js b/projects/garble-money/index.js index e03774a2e2..fc68b907fb 100644 --- a/projects/garble-money/index.js +++ b/projects/garble-money/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/sumTokens') module.exports = { @@ -5,9 +6,9 @@ module.exports = { tvl: sumTokensExport({ tokensAndOwners: [ [nullAddress, 'TCdY8kA7XsZ5UUw8jEgbVRbS2MVttrY9AC'], - ['TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', 'TYaaJsD44isGwQUbvHNuii8nAnTKSxPcND'], - ['TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn', 'TWupFtHWnURhDNrWBfB2tK3zD4uALurBgk'], - ['TVHH59uHVpHzLDMFFpUgCx2dNAQqCzPhcR', 'TK76Z1mJQHN98WsuUUKeDZnNhwRsj6p5wo'], + [ADDRESSES.tron.USDT, 'TYaaJsD44isGwQUbvHNuii8nAnTKSxPcND'], + [ADDRESSES.tron.USDD, 'TWupFtHWnURhDNrWBfB2tK3zD4uALurBgk'], + [ADDRESSES.tron.JM, 'TK76Z1mJQHN98WsuUUKeDZnNhwRsj6p5wo'], ] }), }, diff --git a/projects/gdao.js b/projects/gdao.js index f4c19f687e..df31a6e950 100644 --- a/projects/gdao.js +++ b/projects/gdao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require('./helper/unwrapLPs'); const { staking } = require('./helper/staking'); @@ -5,14 +6,14 @@ const liquidityMinesAddress = '0x4DaC3e07316D2A31baABb252D89663deE8F76f09'; const loyaltyMineAddress = '0xda58927f4065f1d02a6ea850c2aac49d7362a643'; const stakedTokens = [ - '0x514910771af9ca656af840dff83e8264ecf986ca', //link - '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', //uni - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', //aave - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', //wbtc - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', //weth - '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f', //snx - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', //usdc - '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', //yfi + ADDRESSES.ethereum.LINK, //link + ADDRESSES.ethereum.UNI, //uni + ADDRESSES.ethereum.AAVE, //aave + ADDRESSES.ethereum.WBTC, //wbtc + ADDRESSES.ethereum.WETH, //weth + ADDRESSES.ethereum.SNX, //snx + ADDRESSES.ethereum.USDC, //usdc + ADDRESSES.ethereum.YFI, //yfi ]; const GDAOLP = '0x4d184bf6f805ee839517164d301f0c4e5d25c374'; diff --git a/projects/gearbox/abi.json b/projects/gearbox/abi.json index a3f550f105..56d8f3d468 100644 --- a/projects/gearbox/abi.json +++ b/projects/gearbox/abi.json @@ -22,5 +22,12 @@ "event LiquidateCreditAccount(address indexed borrower, address indexed liquidator, address indexed to, uint256 remainingFunds)", "event TransferAccount(address indexed oldOwner, address indexed newOwner)", "event LiquidateExpiredCreditAccount(address indexed borrower, address indexed liquidator, address indexed to, uint256 remainingFunds)" + ], + "creditManagerV2": [ + "function creditFacade() view returns (address addr)", + "event NewConfigurator(address indexed newConfigurator)" + ], + "creditConfiguratorV2": [ + "event CreditFacadeUpgraded(address indexed newCreditFacade)" ] } \ No newline at end of file diff --git a/projects/gearbox/events.js b/projects/gearbox/events.js index 9697a7519a..08d505fd9f 100644 --- a/projects/gearbox/events.js +++ b/projects/gearbox/events.js @@ -1,13 +1,57 @@ -const { api, api2, } = require("@defillama/sdk"); -const { providers } = require("@defillama/sdk/build/general"); +const { api, api2 } = require("@defillama/sdk"); const { Contract, BigNumber } = require("ethers"); +const sdk = require('@defillama/sdk') const abi = require("./abi.json"); -const getV2CAs = async (creditFacade, block) => { +function getProvider(network) { + const chainApi = new sdk.ChainApi(network) + return chainApi.provider +} + +const getV2CAs = async (creditManager, block) => { const eventsByDate = []; const accounts = new Set(); + const cm = new Contract( + creditManager, + abi["creditManagerV2"], + getProvider("ethereum") + ); + const creditFacade = await cm.creditFacade(); + + const ccAddrs = ( + await cm.queryFilter( + { + address: creditManager, + topics: [cm.interface.getEventTopic("NewConfigurator")], + }, + undefined + ) + ).map((e) => e.args.newConfigurator); + + const cfAddrs = []; + + for (let cca of ccAddrs) { + const cc = new Contract( + cca, + abi["creditConfiguratorV2"], + getProvider("ethereum") + ); + + const cfs = ( + await cc.queryFilter( + { + address: cca, + topics: [cc.interface.getEventTopic("CreditFacadeUpgraded")], + }, + undefined + ) + ).map((e) => e.args.newCreditFacade); + + cfAddrs.push(...cfs); + } + const addToEvents = (e, address, operation) => { eventsByDate.push({ time: e.blockNumber * 100000 + e.logIndex, @@ -18,38 +62,38 @@ const getV2CAs = async (creditFacade, block) => { }); }; - const cf = new Contract( - creditFacade, - abi["filtersV2"], - providers["ethereum"] - ); - - const topics = { - OpenCreditAccount: cf.interface.getEventTopic("OpenCreditAccount"), - CloseCreditAccount: cf.interface.getEventTopic("CloseCreditAccount"), - LiquidateCreditAccount: cf.interface.getEventTopic( - "LiquidateCreditAccount" - ), - LiquidateExpiredCreditAccount: cf.interface.getEventTopic( - "LiquidateExpiredCreditAccount" - ), - TransferAccount: cf.interface.getEventTopic("TransferAccount"), - }; - - const logs = ( - await cf.queryFilter( - { - address: creditFacade, - topics: [Object.values(topics)], - }, - undefined, - block - ) - ).map((log) => ({ - ...cf.interface.parseLog(log), - blockNumber: log.blockNumber, - logIndex: log.logIndex, - })); + const logs = []; + + for (let cfAddr of cfAddrs) { + const cf = new Contract(cfAddr, abi["filtersV2"], getProvider("ethereum")) + + const topics = { + OpenCreditAccount: cf.interface.getEventTopic("OpenCreditAccount"), + CloseCreditAccount: cf.interface.getEventTopic("CloseCreditAccount"), + LiquidateCreditAccount: cf.interface.getEventTopic( + "LiquidateCreditAccount" + ), + LiquidateExpiredCreditAccount: cf.interface.getEventTopic( + "LiquidateExpiredCreditAccount" + ), + TransferAccount: cf.interface.getEventTopic("TransferAccount"), + }; + const l = ( + await cf.queryFilter( + { + address: cfAddr, + topics: [Object.values(topics)], + }, + undefined + ) + ).map((log) => ({ + ...cf.interface.parseLog(log), + blockNumber: log.blockNumber, + logIndex: log.logIndex, + })); + + logs.push(...l); + } logs.forEach((log) => { switch (log.name) { @@ -99,9 +143,9 @@ const getV2CAs = async (creditFacade, block) => { return totalValue[0] ? totalValue - .map((t) => t.output) - .reduce((a, c) => a.add(BigNumber.from(c)), BigNumber.from("0")) - .toString() + .map((t) => t.output) + .reduce((a, c) => a.add(BigNumber.from(c)), BigNumber.from("0")) + .toString() : "0"; }; @@ -120,7 +164,7 @@ const getV1CAs = async (creditManager, block) => { const cm = new Contract( creditManager, abi["filtersV1"], - providers["ethereum"] + getProvider("ethereum") ); const cf = await cm.creditFilter(); @@ -183,10 +227,12 @@ const getV1CAs = async (creditManager, block) => { ).args.creditAccount ); - const totalValue= await api2.abi.multiCall({ + const totalValue = await api2.abi.multiCall({ abi: abi["calcTotalValue"], target: cf, - calls: openCAs.filter(i => i !== '0xaBBd655b3791175113c1f1146D3B369494A2b815'), // filtered out address throwing error + calls: openCAs.filter( + (i) => i !== "0xaBBd655b3791175113c1f1146D3B369494A2b815" + ), // filtered out address throwing error block, }); @@ -195,4 +241,4 @@ const getV1CAs = async (creditManager, block) => { .toString(); }; -module.exports = { getV1CAs, getV2CAs }; +module.exports = { getV1CAs, getV2CAs }; \ No newline at end of file diff --git a/projects/gearbox/index.js b/projects/gearbox/index.js index 1baab20a44..11e8fd95bb 100644 --- a/projects/gearbox/index.js +++ b/projects/gearbox/index.js @@ -68,7 +68,7 @@ const getV2TVL = async (block) => { // Get all CA Balances const caValues = await Promise.all( - creditManagers.map((cm) => getV2CAs(cm.creditFacade, block)) + creditManagers.map((cm) => getV2CAs(cm.addr, block)) ); return creditManagers.map((cm, i) => ({ @@ -122,9 +122,10 @@ const tvl = async (timestamp, block) => { }; module.exports = { + hallmarks: [[1666569600, "LM begins"]], ethereum: { tvl, }, methodology: `Retrieves the tokens in each Gearbox pool (WETH/DAI/WBTC/USDC/wstETH) & value of all Credit Accounts (V1 & V2) denominated in the underlying token.`, misrepresentedTokens: true, -}; +}; \ No newline at end of file diff --git a/projects/geist/index.js b/projects/geist/index.js index 491cb2b802..7596e5a3d7 100644 --- a/projects/geist/index.js +++ b/projects/geist/index.js @@ -33,6 +33,6 @@ module.exports = { pool2: pool2(stakingContractPool2, GEIST_WFTM_spLP, "fantom"), }, hallmarks:[ - [1665090175, "BSC Bridge exploit"] + [1665090175, "BSC Bridge hacker deposits coins"] ], }; diff --git a/projects/gemswap/index.js b/projects/gemswap/index.js index 64aa4fa4f1..a39bc076ff 100644 --- a/projects/gemswap/index.js +++ b/projects/gemswap/index.js @@ -1,6 +1,9 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + hallmarks: [ + [1681430400,"Rug Pull"] + ], misrepresentedTokens: true, era: { tvl: getUniTVL({ diff --git a/projects/genesys/index.js b/projects/genesys/index.js index cc37f179af..eeee8769f9 100644 --- a/projects/genesys/index.js +++ b/projects/genesys/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {addFundsInMasterChef} = require("../helper/masterchef"); const {pool2Exports} = require("../helper/pool2"); const {staking} = require("../helper/staking") @@ -15,8 +16,8 @@ async function tvl(timestamp, block, chainBlocks) { let balances = {}; await addFundsInMasterChef(balances, masterchef, chainBlocks.fantom, "fantom", addr=>{ addr = addr.toLowerCase(); - if (addr === "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e") { - return "0x6b175474e89094c44da98b954eedeac495271d0f" + if (addr === ADDRESSES.fantom.DAI) { + return ADDRESSES.ethereum.DAI } return `fantom:${addr}` }, undefined, ignore); diff --git a/projects/genius-yield/index.js b/projects/genius-yield/index.js index 00800a6828..acf9992430 100644 --- a/projects/genius-yield/index.js +++ b/projects/genius-yield/index.js @@ -3,13 +3,15 @@ const { sumTokensExport, } = require('../helper/chain/cardano') const gens = 'dda5fdb1002f7389b33e036b6afee82a8189becb6cba852e8b79b4fb0014df1047454e53' const nmkr = '5dac8536653edc12f6f5e1045d8164b9f59998d3bdc300fc928434894e4d4b52' const ntx = 'edfd7a1d77bcb8b884c474bdc92a16002d1fb720e454fa6e993444794e5458' +const emp = '6c8642400e8437f737eb86df0fc8a8437c760f48592b1ba8f5767e81456d706f7761' +const gensx = 'fbae99b8679369079a7f6f0da14a2cf1c2d6bfd3afdf3a96a64ab67a0014df1047454e5358' const owner = 'addr1w8r99sv75y9tqfdzkzyqdqhedgnef47w4x7y0qnyts8pznq87e4wh' module.exports = { timetravel: false, cardano: { - staking: sumTokensExport({ owner, tokens: [gens, nmkr, ntx]}), + staking: sumTokensExport({ owner, tokens: [gens, nmkr, ntx, emp, gensx]}), tvl: () => ({}) } }; diff --git a/projects/genius/index.js b/projects/genius/index.js index ed6d482ceb..ea96901d1a 100644 --- a/projects/genius/index.js +++ b/projects/genius/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /* Genius staking operates on two models: * - Direct staking with GENI token. * - Policy: Basic (basicLockedMinersSupply()) @@ -30,20 +31,24 @@ const STABILITY_POOL = "0xDCA692d433Fe291ef72c84652Af2fe04DA4B4444"; /* Native currencies and ERC-20 tokens approved for collateral*/ const STABILITY_POOL_COLLATERAL_ADDRESSES = { "bsc": { - "BUSD": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + "BUSD": ADDRESSES.bsc.BUSD, "BNB": nullAddress, }, "ethereum": { - "DAI": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "DAI": ADDRESSES.ethereum.DAI, "ETH": nullAddress, }, "avax": { - "USDC": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", + "USDC": ADDRESSES.avax.USDC, "AVAX": nullAddress, }, "polygon": { - "DAI": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "DAI": ADDRESSES.polygon.DAI, "MATIC": nullAddress, + }, + "pulse": { + "DAI": ADDRESSES.pulse.DAI, + "PLS": nullAddress } }; @@ -95,5 +100,9 @@ TVL: counts total number of value locked of all collateral tokens and native in avax: { staking, tvl - } + }, + pulse: { + staking, + tvl + }, }; diff --git a/projects/genshiro/index.js b/projects/genshiro/index.js index ea2ed9934e..e940d249d9 100644 --- a/projects/genshiro/index.js +++ b/projects/genshiro/index.js @@ -2,5 +2,8 @@ const { getExports } = require('../helper/heroku-api') module.exports = { timetravel: false, - ...getExports("genshiro", ['genshiro']) + // ...getExports("genshiro", ['genshiro']), + genshiro: { + tvl: async () => ({}), + } } \ No newline at end of file diff --git a/projects/geode/index.js b/projects/geode/index.js index fd5b61e30f..5d2de65fc0 100644 --- a/projects/geode/index.js +++ b/projects/geode/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); @@ -78,7 +79,7 @@ async function avax(timestamp, ethBlock, chainBlocks) { }, 0); return { - "avax:0x0000000000000000000000000000000000000000": TotalBalance + ["avax:" + ADDRESSES.null]: TotalBalance }; } diff --git a/projects/gfs/index.js b/projects/gfs/index.js index 126a9ee0fe..d012c7a63f 100644 --- a/projects/gfs/index.js +++ b/projects/gfs/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const contracts = require("./contracts.json"); const { sumLPWithOnlyOneToken } = require("./../helper/unwrapLPs"); const iotx = "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69"; -const wiotx = "0xA00744882684C3e4747faEFD68D283eA44099D03"; +const wiotx = ADDRESSES.iotex.WIOTX; function pool2(chain, gasToken) { return async (timestamp, _, {[chain]: block}) => { diff --git a/projects/gft/index.js b/projects/gft/index.js index 8f4e59060d..7dbbbad201 100644 --- a/projects/gft/index.js +++ b/projects/gft/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const contracts = require("./contracts.json"); const { sumLPWithOnlyOneToken } = require("./../helper/unwrapLPs"); const BigNumber = require("bignumber.js"); const iotx = "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69"; -const wiotx = "0xA00744882684C3e4747faEFD68D283eA44099D03"; +const wiotx = ADDRESSES.iotex.WIOTX; const gfsBonusStackPool = "0x4346a618c2e3fd4cfa821e91216eaf927bd46ddd"; const gfs = "0x5d0f4ca481fd725c9bc6b415c0ce5b3c3bd726cf"; diff --git a/projects/ghast/index.js b/projects/ghast/index.js new file mode 100644 index 0000000000..35abcaeb6d --- /dev/null +++ b/projects/ghast/index.js @@ -0,0 +1,29 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + arbitrum: { + lendingPools: { + BTC: '0x711b36a726486bd910a819eb7930e60a1afcac7b', + USDC: '0xb8bc618e49201B68C1D594aA458aeBFF22B03c35', + WETH: '0x5d99d1d2e9f3a5f3d8f5dd5ce533b3635590c384', + } + } +} + +Object.keys(config).forEach(chain => { + const { lendingPools } = config[chain] + const pools = Object.values(lendingPools) + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const tokens = await api.multiCall({ abi: 'address:TOKEN', calls: pools}) + const gmdTokens = await api.multiCall({ abi: 'address:gmdTOKEN', calls: pools}) + const ownerTokens = pools.map((v, i) => [[tokens[i],gmdTokens[i],], v]) + return sumTokens2({ api, ownerTokens, }) + }, + /* borrowed: async (_, _b, _cb, { api, }) => { + const tokens = await api.multiCall({ abi: 'address:gmdTOKEN', calls: pools}) + const bals = await api.multiCall({ abi: 'uint256:totalBorrows', calls: pools}) + api.addTokens(tokens, bals) + }, */ + } +}) \ No newline at end of file diff --git a/projects/ghost/index.js b/projects/ghost/index.js index 9db7d922b0..e1cd7484fc 100644 --- a/projects/ghost/index.js +++ b/projects/ghost/index.js @@ -2,22 +2,40 @@ const { queryContracts, queryContract, } = require("../helper/chain/cosmos"); +const { getConfig } = require("../helper/cache"); async function tvl(_, _1, _2, { api }) { const chain = api.chain - const contracts = await queryContracts({ chain, codeId: 106 }); - const deposited = (await Promise.all( - contracts.map(contract => queryContract({ contract, chain, data: { status: {} } })) - )).map(i => i.deposited) - const tokens = (await Promise.all( - contracts.map(contract => queryContract({ contract, chain, data: { config: {} } })) - )).map(i => i.denom) - api.addTokens(tokens, deposited) + const contracts = await getConfig("kujira/contracts", "https://raw.githubusercontent.com/Team-Kujira/kujira.js/master/src/resources/contracts.json"); + const vaultContracts = contracts["kaiyo-1"].ghostVault.map(x => x.address) + const marketContracts = contracts["kaiyo-1"].ghostMarket.map(x => x.address) + for (const contract of vaultContracts) { + const { deposited, borrowed } = await queryContract({ contract, chain, data: { status: {} } }) + const { denom } = await queryContract({ contract, chain, data: { config: {} } }) + api.add(denom, deposited - borrowed) + } + + for (const contract of marketContracts) { + const { deposited } = await queryContract({ contract, chain, data: { status: {} } }) + const { collateral_denom } = await queryContract({ contract, chain, data: { config: {} } }) + api.add(collateral_denom, deposited) + } +} + +async function borrowed(_, _1, _2, { api }) { + const chain = api.chain + const vaultContracts = await queryContracts({ chain, codeId: 106 }); + for (const contract of vaultContracts) { + const { borrowed } = await queryContract({ contract, chain, data: { status: {} } }) + const { denom } = await queryContract({ contract, chain, data: { config: {} } }) + api.add(denom, borrowed) + } } module.exports = { timetravel: false, kujira: { tvl, + borrowed, }, }; diff --git a/projects/gizadao/index.js b/projects/gizadao/index.js index e336680bf8..f5832bba8a 100644 --- a/projects/gizadao/index.js +++ b/projects/gizadao/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const transforms = { - "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e": "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI + [ADDRESSES.fantom.DAI]: ADDRESSES.ethereum.DAI, // DAI } const treasury = "0x6e273a49Ba8F77d03C0CF5a190f226DcA7D46E9F" module.exports = ohmTvl(treasury, [ //DAI - ["0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", false], + [ADDRESSES.fantom.DAI, false], //spirit LP ["0x9026711a2097252a198e6602a052117eaa5f3cab", true], //spirit LP diff --git a/projects/glif/index.js b/projects/glif/index.js index ae3fbb067c..195fead9a6 100644 --- a/projects/glif/index.js +++ b/projects/glif/index.js @@ -1,15 +1,34 @@ +const { BigNumber } = require("@ethersproject/bignumber"); const { nullAddress } = require("../helper/tokenMapping"); +const { get } = require("../helper/http"); -const IFIL_TOKEN_CONTRACT = "0x690908f7fa93afC040CFbD9fE1dDd2C2668Aa0e0"; - -async function tvl(_, _1, _2, { api }) { - api.add(nullAddress, await api.call({ abi: "erc20:totalSupply", target: IFIL_TOKEN_CONTRACT, })) -} +const INFINITY_POOL_CONTRACT = "0x43dAe5624445e7679D16a63211c5ff368681500c"; // pool address +const totalAssetsABI = "function totalAssets() view returns (uint256)"; +const totalBorrowedABI = "function totalBorrowed() view returns (uint256)"; module.exports = { methodology: - "The Infinity Pool is accepting early depositers by minting 1 iFIL token per 1 FIL deposited. This adapter returns the total supply of iFIL tokens, representing the total amount of FIL and WFIL deposited into the early deposit contract.", + "The GLIF Pools protocol is a liquid staking protocol for Filecoin that requires borrowers to collateralize FIL in order to borrow for their storage providing operation. This TVL calculation adds the total amount of FIL staked into the protocol, and the total amount of locked FIL collateral by borrowers, to arrive at TVL.", filecoin: { - tvl, + tvl: async (_, _1, _2, { api }) => { + const [totalAssets, totalLockedByMiners] = await Promise.all([ + api.call({ abi: totalAssetsABI, target: INFINITY_POOL_CONTRACT }), + // this call is too costly to perform on chain in this environment, + // we wrapped the locked miners collateral in a server that derives the information directly on-chain + // but serves it in a more efficient manner to not overload defillama frontend + // github repo: https://github.com/glifio/pools-metrics + get("https://pools-metrics.vercel.app/api/v0/miner-collaterals"), + ]); + + const totalAssetsBN = BigNumber.from(totalAssets); + const totalLockedByMinersBN = BigNumber.from( + totalLockedByMiners.totalMinerCollaterals + ); + // then we add the totalLockedByMiners to the totalAssets, to account for the FIL locked by miners as borrow collateral + // this gets our tvl in attoFIL (wei denominated) without double counting + const tvl = totalAssetsBN.add(totalLockedByMinersBN).toString(); + + api.add(nullAddress, tvl); + }, }, }; diff --git a/projects/glitter-finance/index.js b/projects/glitter-finance/index.js index f533f7f110..10fbbb5e50 100644 --- a/projects/glitter-finance/index.js +++ b/projects/glitter-finance/index.js @@ -1,51 +1,10 @@ - +const ADDRESSES = require('../helper/coreAssets.json') //Solana Helpers -const { - sumTokens2, -} = require("../helper/solana"); - -//Algorand Helpers -const axios = require('axios') -const axiosObj = axios.create({ - baseURL: 'https://algoindexer.algoexplorerapi.io', - timeout: 300000, -}) - +const { sumTokensExport, } = require("../helper/sumTokens") //addresses const SOLANA_VAULT = "7xCU4nvqu3Nz3BBQckKzibp3kBav4xbkuqQ3WM9CBHdJ"; const ALGO_VAULT = "R7VCOR74LCUIFH5WKCCMZOS7ADLSDBQJ42YURFPDT3VGYTVNBNG7AIYTCQ"; -//TVL Calculations: -async function solana_tvl() { - return sumTokens2({ solOwners: [SOLANA_VAULT]}) -} -async function algorand_tvl() { - - const tvlResult = {}; - - //Get algo balance from Algo Vault - const algo_account = await getAlgoBalance(ALGO_VAULT); - var amount_algo = 0; - - //Ensure that the response is valid & set amount - if (algo_account && algo_account.account && algo_account.account.amount) { - amount_algo = algo_account.account.amount / 1000000; //Amount returned in microAlgos - } - - if (!tvlResult["algorand"]) { - tvlResult["algorand"] = Number(amount_algo); - } else { - tvlResult["algorand"] += Number(amount_algo); - } - - return tvlResult; -} - -async function getAlgoBalance(address) { - const response = (await axiosObj.get(`/v2/accounts/${address}`)) - return response.data -} - module.exports = { hallmarks: [ [1661337600, "SPL Vault Migration (V2 Expansion)"], @@ -53,6 +12,6 @@ module.exports = { timetravel: false, methodology: "TVL counts tokens and native assets locked in Glitter-Finance bridge vaults. CoinGecko is used to find the price of tokens in USD.", - solana: { tvl: solana_tvl }, - algorand: { tvl: algorand_tvl}, + solana: { tvl: sumTokensExport({ solOwners: [SOLANA_VAULT], }) }, + algorand: { tvl: sumTokensExport({ owners: [ALGO_VAULT] }) }, }; \ No newline at end of file diff --git a/projects/gmd/index.js b/projects/gmd/index.js index 879da81cca..7148a96e56 100644 --- a/projects/gmd/index.js +++ b/projects/gmd/index.js @@ -1,28 +1,55 @@ const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); -const chain = 'arbitrum'; -const abi = 'uint256:totalUSDvaults' -const vault = "0xA7Ce4434A29549864a46fcE8662fD671c06BA49a"; -const vault2 = "0x8080B5cE6dfb49a6B86370d6982B3e2A86FBBb08"; -const stakingAdd = "0x8A19F6BC381caf24C7122296AA51047105924074"; -const GMDaddress = "0x4945970EfeEc98D393b4b979b9bE265A3aE28A8B"; - -const Tvl = async (ts, _, { arbitrum: block }) => { + +const abi = 'uint256:totalUSDvaults'; + +const arbitrum_vault = "0xA7Ce4434A29549864a46fcE8662fD671c06BA49a"; +const arbitrum_vault2 = "0x8080B5cE6dfb49a6B86370d6982B3e2A86FBBb08"; +const arbitrum_staking = "0x48c81451d1fddeca84b47ff86f91708fa5c32e93"; +const arbitrum_GMD = "0x4945970EfeEc98D393b4b979b9bE265A3aE28A8B"; +const arbitrum_esGMD = "0x49E050dF648E9477c7545fE1779B940f879B787A"; + +const avax_vault = "0x5517c5F22177BcF7b320A2A5daF2334344eFb38C" +const avax_staking = "0x4f2c414b76fd9cd45c000af7a449ade4125740ce"; +const avax_GMD = "0x1FE70939c2cEc8F31E8F7729442658586B469972"; +const avax_esGMD = "0xeE788a8b015376eC0185e1e40140af03029C8763"; + +const calculateTvl = async (vaults, chain, block) => { const balances = {}; const bals = await sdk.api2.abi.multiCall({ - abi, calls: [vault, vault2], chain, block, - }) + abi, + calls: vaults, + chain, + block, + }); - bals.forEach(i =>sdk.util.sumSingleBalance(balances, 'tether', i/1e18, 'coingecko')) - return balances -} + bals.forEach((i) => + sdk.util.sumSingleBalance(balances, 'tether', i / 1e18, 'coingecko') + ); + + return balances; +}; module.exports = { misrepresentedTokens: true, - methodology: "staked gmd + vault balance", + methodology: 'staked gmd + vault balance', arbitrum: { - staking: staking(stakingAdd, GMDaddress, "arbitrum"), - tvl: Tvl, + staking: staking(arbitrum_staking, [arbitrum_esGMD, arbitrum_GMD]), + tvl: async (ts, _, { arbitrum: block }) => + calculateTvl( + [arbitrum_vault, arbitrum_vault2], + 'arbitrum', + block + ), + }, + avax: { + staking: staking(avax_staking, [avax_esGMD, avax_GMD]), + tvl: async (ts, _, { avax: block }) => + calculateTvl( + [avax_vault], + 'avax', + block + ), }, }; diff --git a/projects/gmx/index.js b/projects/gmx/index.js index 9f3410f4e1..155699ddc3 100644 --- a/projects/gmx/index.js +++ b/projects/gmx/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {staking} = require('../helper/staking') const { gmxExports } = require('../helper/gmx') @@ -5,7 +6,7 @@ const { gmxExports } = require('../helper/gmx') // const arbitrumApiEndpoint = 'https://gmx-server-mainnet.uw.r.appspot.com/tokens' const arbitrumVault = '0x489ee077994B6658eAfA855C308275EAd8097C4A'; const arbitrumStaking = '0x908C4D94D34924765f1eDc22A1DD098397c59dD4'; -const arbitrumGMX = '0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a'; +const arbitrumGMX = ADDRESSES.arbitrum.GMX; //Avalanche // const avalancheApiEndpoint = 'https://gmx-avax-server.uc.r.appspot.com/tokens' const avalancheVault = '0x9ab2De34A33fB459b538c43f251eB825645e8595' diff --git a/projects/gnd-protocol/index.js b/projects/gnd-protocol/index.js new file mode 100644 index 0000000000..7646744ba9 --- /dev/null +++ b/projects/gnd-protocol/index.js @@ -0,0 +1,16 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { staking } = require('../helper/staking') + +async function tvl(_, _b, _cb, { api, }) { + const farm = '0xd8769d8826149b137af488b1e9ac0e3afdbc058a' + await sumTokens2({ api, owner: farm, resolveUniV3: true, }) + const tokens = Object.keys(api.getBalances()).map(i => i.replace(/arbitrum:/gi, '')) + return sumTokens2({ api, owner: farm, tokens, }) + +} +module.exports = { + arbitrum: { + tvl, + staking: staking('0x535ec56479892d9C02fe2Bb86CeBF7ed62E81131', ['0x40ea7f6d6964413d4a26a0a268542dae9f55768e', '0x40ea7f6d6964413d4a26a0a268542dae9f55768e']) + } +} \ No newline at end of file diff --git a/projects/gnosis/index.js b/projects/gnosis/index.js index bf76698297..d4faac58b0 100644 --- a/projects/gnosis/index.js +++ b/projects/gnosis/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') @@ -12,21 +13,21 @@ module.exports = { function addTvl(owner) { const tokens = [ - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - '0x6b175474e89094c44da98b954eedeac495271d0f', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - '0x6810e776880c02933d47db1b9fc05908e5386b96', - '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', - '0x57ab1ec28d129707052df4df418d58a2d46d5f51', - '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.GNO, + ADDRESSES.ethereum.YFI, + ADDRESSES.ethereum.sUSD, + ADDRESSES.ethereum.UNI, '0xa1d65E8fB6e87b60FECCBc582F7f97804B725521', '0xc00e94cb662c3520282e6f5717214004a7f26888', - '0x514910771af9ca656af840dff83e8264ecf986ca', - '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2', + ADDRESSES.ethereum.LINK, + ADDRESSES.ethereum.SUSHI, '0x22eEab2f980E8ed7824f8EA548C9595564a0F0e4', '0xe2f2a5c287993345a840db3b0845fbc70f5935a5', - '0x0000000000085d4780B73119b644AE5ecd22b376', - '0xdac17f958d2ee523a2206206994597c13d831ec7', + ADDRESSES.ethereum.TUSD, + ADDRESSES.ethereum.USDT, '0x0b38210ea11411557c13457D4dA7dC6ea731B88a', '0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419', ] diff --git a/projects/goblinscash/api.js b/projects/goblinscash/api.js new file mode 100644 index 0000000000..988beab608 --- /dev/null +++ b/projects/goblinscash/api.js @@ -0,0 +1,8 @@ +const index = require('./index') + +module.exports = { + smartbch: { + tvl: () => 0, + staking: index.smartbch.staking, + } +} \ No newline at end of file diff --git a/projects/goblinscash/index.js b/projects/goblinscash/index.js index 2f1b27e772..b72b8959c9 100644 --- a/projects/goblinscash/index.js +++ b/projects/goblinscash/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumUnknownTokens } = require('../helper/unknownTokens') const { stakingPricedLP } = require("../helper/staking"); @@ -5,7 +6,7 @@ const goblinStaking = "0x48B8aCe692ad8BD2E3139C65bFf7d28c048F8f00"; const GOB = "0x56381cB87C8990971f3e9d948939e1a95eA113a3"; const treasuryAddress = "0x259D4CBA522A15AA5Db641D0E06d6f7Aa040D89f"; -const flexUSD = "0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72"; +const flexUSD = ADDRESSES.smartbch.flexUSD; const GOB_flexUSD_MLP = "0xC20A4f3012bA2Df47544d4926B19604Fa777FB01"; const GOB_BCH_MLP = "0x86b0fd64234a747681f0235b6cc5fe04a4d95b31"; const chain = "smartbch" diff --git a/projects/gogocoin/index.js b/projects/gogocoin/index.js index ad84fb8bed..3a19f7d9c2 100644 --- a/projects/gogocoin/index.js +++ b/projects/gogocoin/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { transformPolygonAddress @@ -14,7 +15,7 @@ const GOVERNANCE_STAKING_CONTRACT = '0xd46206003FfB72Fe5FEB04373328C62e2bF864f9' const LP_TOKEN_USDC = '0xe33Dd0C0534189b66B9872425189399e2B9c169D' const LP_STAKING_CONTRACT = '0x5dc4ffc0f9c2261dcaae7f69e1a8837afbd577bc' const GOGOCOIN = '0xdD2AF2E723547088D3846841fbDcC6A8093313d6' -const USDC = '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174' +const USDC = ADDRESSES.polygon.USDC const chain = 'polygon' async function chainTVL(timestamp, block, chainBlocks) { diff --git a/projects/gogopool/index.js b/projects/gogopool/index.js new file mode 100644 index 0000000000..ea7a4d75d3 --- /dev/null +++ b/projects/gogopool/index.js @@ -0,0 +1,12 @@ +async function tvl(_, _b, _cb, { api, }) { + const ggAVAX = '0xA25EaF2906FA1a3a13EdAc9B9657108Af7B703e3' + const token = await api.call({ abi: 'address:asset', target: ggAVAX }) + const bal= await api.call({ abi: 'uint256:totalAssets', target: ggAVAX }) + api.add(token, bal) +} + +module.exports = { + avax: { + tvl, + } +} \ No newline at end of file diff --git a/projects/goldbank/index.js b/projects/goldbank/index.js new file mode 100644 index 0000000000..bc8ad24489 --- /dev/null +++ b/projects/goldbank/index.js @@ -0,0 +1,13 @@ +const { compoundExports } = require("../helper/compound"); +const unitroller = "0x537A09Fd99Fc7eF737d297cDEeAB3b7f9602308c"; + +module.exports = { + hallmarks: [ + [Math.floor(new Date('2023-06-11') / 1e3), 'Project rugged'], + ], + methodology: + "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", + arbitrum: { + ...compoundExports(unitroller, "arbitrum"), + }, +}; \ No newline at end of file diff --git a/projects/goldfinch/index.js b/projects/goldfinch/index.js index eeab932c6a..1c8f50ee7c 100644 --- a/projects/goldfinch/index.js +++ b/projects/goldfinch/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens } = require("../helper/unwrapLPs"); const abi = require("./abi.json"); @@ -8,7 +9,7 @@ const seniorPoolAddress = "0x8481a6EbAf5c7DABc3F7e09e44A89531fd31F822"; const gfFactoryAddress = "0xd20508E1E971b80EE172c73517905bfFfcBD87f9"; const poolTokensAddress = "0x57686612C601Cb5213b01AA8e80AfEb24BBd01df"; const V2_START = 13097274; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const USDC = ADDRESSES.ethereum.USDC; let _trancheAddresses const getTranchedPoolAddresses = async (api) => { diff --git a/projects/good-ghosting/index.js b/projects/good-ghosting/index.js index 4f3c4be3a7..62d1d315f1 100644 --- a/projects/good-ghosting/index.js +++ b/projects/good-ghosting/index.js @@ -1,5 +1,4 @@ -const sdk = require("@defillama/sdk"); -const { getChainTransform } = require("../helper/portedTokens"); +const { sumTokens2 } = require('../helper/unwrapLPs') const { getConfig } = require("../helper/cache"); const apiUrl = "https://goodghosting-api.com/v1/games"; @@ -8,95 +7,43 @@ const chainIdMap = { ethereum: 1, polygon: 137, celo: 42220, + base: 8453, }; const contractVersions = { - v200: ["2.0.0", "2.0.1", "2.0.2", "2.0.3", "2.0.4"], + v200: ["2.0"], v001: "0.0.1", v002: "0.0.2", v003: "0.0.3", }; const isV2Game = (contractVersion) => { - if (contractVersions.v200.includes(contractVersion)) { - return true; - } - const [derivedContractVersion] = contractVersion.split("-"); - if (contractVersions.v200.includes(derivedContractVersion)) { - return true; - } - return false; -}; - -function tvl(chain) { - return async (timestamp, ethBlock, chainBlocks) => { - const gameData = await getConfig("good-ghosting", apiUrl); + const baseContractVersion = contractVersion.slice(0, 3); - const balances = {}; - const transform = await getChainTransform(chain); + if (contractVersions.v200.indexOf(baseContractVersion) !== -1) { + return true; + } + return false; +} - const calls = Object.values(gameData) - .filter((game) => game.networkId == chainIdMap[chain]) +async function tvl(_, _b, _cb, { api, }) { + const gameData = await getConfig("good-ghosting", apiUrl) + const ownerTokens = [] + Object.values(gameData) + .filter((game) => game.networkId == chainIdMap[api.chain]) .map((game) => { - const gameParams = [ - { - target: game.depositTokenAddress, - params: [game.id], - }, - { - target: game.liquidityTokenAddress, - params: [game.id], - }, - ]; - - if (isV2Game(game.contractVersion)) { - gameParams.push({ - target: game.depositTokenAddress, - params: [game.strategyController.toLowerCase()], - }); + const tokens = [game.depositTokenAddress, game.liquidityTokenAddress, game.gaugeLiquidityTokenAddress].filter(i => i) + ownerTokens.push([tokens, game.id]) - gameParams.push({ - target: game.liquidityTokenAddress, - params: [game.strategyController.toLowerCase()], - }); - } - return gameParams; + if (isV2Game(game.contractVersion)) + ownerTokens.push([tokens, game.strategyController]) }) - .flat(); - - const gameContractBalances = await sdk.api.abi.multiCall({ - calls, - abi: "erc20:balanceOf", - chain, - }); - - sdk.util.sumMultiBalanceOf( - balances, - gameContractBalances, - false, - transform - ); - - //fix decimal issue with celo tokens - for (const representation of ["celo-dollar", "celo", "celo-euro"]) { - if (balances[representation] !== undefined) { - balances[representation] = Number(balances[representation]) / 1e18; - } - } - - return balances; - }; + return sumTokens2({ api, ownerTokens}) } module.exports = { - timetravel: true, - misrepresentedTokens: false, - methodology: - "counts the amount of interest bearing tokens owned by the smart game contract", - polygon: { - tvl: tvl("polygon"), - }, - celo: { - tvl: tvl("celo"), - }, + methodology: "counts the amount of interest bearing tokens owned by the smart game contract", + polygon: { tvl }, + celo: { tvl }, + base: {tvl} }; diff --git a/projects/gooddollar/index.js b/projects/gooddollar/index.js index 668ac06563..7691240746 100644 --- a/projects/gooddollar/index.js +++ b/projects/gooddollar/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require('./abi.json'); const BigNumber = require("bignumber.js"); @@ -5,7 +6,7 @@ const { sumTokens } = require("../helper/unwrapLPs"); const tokens = { aUSDC: "0xbcca60bb61934080951369a648fb03df4f96263c", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", + DAI: ADDRESSES.ethereum.DAI, cDAI: "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", Gfuse: "0x495d133B938596C9984d462F007B676bDc57eCEC", // GoodDollar on Fuse FUSE: "0x970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d", // Fuse on Mainnet diff --git a/projects/goodentry/index.js b/projects/goodentry/index.js new file mode 100644 index 0000000000..b5836e0447 --- /dev/null +++ b/projects/goodentry/index.js @@ -0,0 +1,50 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const abi = require('../helper/abis/aave.json'); + +const addressesProviderRegistry = '0x01b76559D512Fa28aCc03630E8954405BcBB1E02'; +const balanceOfAbi = "function balanceOf(address account) view returns (uint256)"; +const getLpAbi = "function getLendingPool() view returns (address)"; +const getReserveDataAbi = "function getReserveData(address asset) view returns (uint256 reserveConfigurationMap, uint128 liquidityIndex, uint128 variableBorrowIndex, uint128 currentLiquidityRate, uint128 currentVariableBorrowRate, uint128 currentStableBorrowRate, uint40 lastUpdateTimestamp, address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, uint8 id)"; +const getUnderlyingAbi = "function getTokenAmounts(uint amount) external view returns (uint token0Amount, uint token1Amount)"; +const token0Abi = "function TOKEN0() view returns (address token, uint8 decimals)"; +const token1Abi = "function TOKEN1() view returns (address token, uint8 decimals)"; + +// Aave helper doesnt recognize tokenized Uniswap positions, need to manually + +async function tvl(timestamp, ethBlock, _, { api }) { + const addressesProviders = await api.call({ target: addressesProviderRegistry, abi: abi["getAddressesProvidersList"], }) + const validAddressesProviders = addressesProviders.filter((ap) => ap != ADDRESSES.null) + const lendingPools = await api.multiCall({ calls: validAddressesProviders, abi: getLpAbi, }) + const aTokens = await api.multiCall({ calls: lendingPools, abi: abi["getReservesList"], }) + + const ge = {} + lendingPools.forEach((v, i) => { + ge[v] = { aTokens: aTokens[i] } + }) + + await Promise.all( + Object.keys(ge).map(async (pool) => { + const aTokens = ge[pool].aTokens; + const aTokenAddresses = (await api.multiCall({ abi: getReserveDataAbi, calls: aTokens, target: pool })).map(i => i.aTokenAddress) + const bals = (await api.multiCall({ abi: balanceOfAbi, calls: aTokenAddresses.map((v, i) => ({ target: aTokens[i], params: v })) })) + const underlyings = await api.multiCall({ abi: getUnderlyingAbi, calls: aTokens.map((v, i) => ({ target: v, params: bals[i] })), permitFailure: true, }) + const token0s = await api.multiCall({ abi: token0Abi, calls: aTokens, permitFailure: true, }) + const token1s = await api.multiCall({ abi: token1Abi, calls: aTokens, permitFailure: true, }) + underlyings.forEach((v, i) => { + if (v) { + api.add(token0s[i].token, v.token0Amount) + api.add(token1s[i].token, v.token1Amount) + } else { + api.add(aTokens[i], bals[i]) + } + }) + }) + ) +} + + +module.exports = { + methodology: + "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending", + arbitrum: { tvl, } +}; diff --git a/projects/gplx/index.js b/projects/gplx/index.js new file mode 100644 index 0000000000..1d18f4a403 --- /dev/null +++ b/projects/gplx/index.js @@ -0,0 +1,10 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + hallmarks: [ + [1687320000, "Token supply compromise"] + ], + pulse:{ + tvl: gmxExports({ vault: '0xC2311efFE60b0dC2491148Ff1bd46F08D64ADC98', }) + } +}; \ No newline at end of file diff --git a/projects/grave/index.js b/projects/grave/index.js index f0e3f3c4cb..559c5d3f71 100644 --- a/projects/grave/index.js +++ b/projects/grave/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakingPricedLP } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { pool2Exports } = require("../helper/pool2"); @@ -18,9 +19,9 @@ async function atvl(timestamp, block, chainBlocks) { await sumTokensAndLPsSharedOwners( balances, [ - ["0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", false], - ["0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", false], - ["0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd", false], + [ADDRESSES.avax.WAVAX, false], + [ADDRESSES.avax.USDC_e, false], + [ADDRESSES.avax.JOE, false], ["0x070092b3A985f9E5424351D68730c9A318ad96eb", false], ], diff --git a/projects/gravita-protocol/index.js b/projects/gravita-protocol/index.js new file mode 100644 index 0000000000..64be6b783b --- /dev/null +++ b/projects/gravita-protocol/index.js @@ -0,0 +1,28 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const ADMIN_CONTRACT_ADDRESS = "0xf7Cc67326F9A1D057c1e4b110eF6c680B13a1f53"; + +/** + * Returns an array of addresses containing the collateral tokens accepted by the platform. + */ +async function _getCollateralAddresses(api) { + return api.call({ + abi: "function getValidCollateral() external view returns (address[])", + target: ADMIN_CONTRACT_ADDRESS, + }); +} + +async function tvl(_, _1, _2, { api }) { + const collAddresses = await _getCollateralAddresses(api); + const pool = await api.call({ abi: 'address:activePool', target: ADMIN_CONTRACT_ADDRESS}) + return sumTokens2({ api, tokens: collAddresses, owner: pool}) +} + +module.exports = { + methodology: + "Adds up the total value locked as collateral on the Gravita platform", + start: 1684256400, // Tuesday, May 15, 2023 17:00 GMT + ethereum: { + tvl, + }, +}; diff --git a/projects/gravity-bridge/index.js b/projects/gravity-bridge/index.js new file mode 100644 index 0000000000..7854d1719a --- /dev/null +++ b/projects/gravity-bridge/index.js @@ -0,0 +1,79 @@ +const { getBalance2 } = require("../helper/chain/cosmos.js"); +const { sumTokensExport } = require('../helper/unwrapLPs') + +const erc20Contracts = [ + + "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT + "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", // WBTC + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH + "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", // wstETH + "0xEa5A82B35244d9e5E48781F00b11B14E627D2951", // ATOM + "0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", // WLUNC + "0xfB5c6815cA3AC72Ce9F5006869AE67f18bF77006", // pSTAKE + "0x45804880De22913dAFE09f4980848ECE6EcbAf78", // PAXG + "0xc0a4Df35568F116C370E6a6A6022Ceb908eedDaC", // UMEE + "0x44017598f2AF1bD733F9D87b5017b4E7c1B28DDE", // stkATOM + "0x817bbDbC3e8A1204f3691d14bB44992841e3dB35", // CUDOS + "0x467719aD09025FcC6cF6F8311755809d45a5E5f3", // AXL + "0x77E06c9eCCf2E797fd462A92B6D7642EF85b0A44", // WTAO + "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", // SHIB + "0x35a532d376FFd9a705d0Bb319532837337A398E7", // WDOGE + "0x93581991f68DBaE1eA105233b67f7FA0D6BDeE7b", // WEVMOS + "0x514910771AF9Ca656af840dff83E8264EcF986CA", // LINK + "0xa670d7237398238DE01267472C6f13e5B8010FD1", // SOMM + "0xd3E4Ba569045546D09CF021ECC5dFe42b1d7f6E4", // MNW + "0xd23Ed8cA350CE2631F7EcDC5E6bf80D0A1DeBB7B", // PLQ + "0x07baC35846e5eD502aA91AdF6A9e7aA210F2DcbE", // EROWAN + "0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b", // CRO + "0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30", // INJ + "0x4c11249814f11b9346808179Cf06e71ac328c1b5", // ORAI + "0x4Fabb145d64652a948d72533023f6E7A623C7C53", // BUSD + "0x147faF8De9d8D8DAAE129B187F0D02D819126750", // GEO + "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", // stETH + "0xD8912C10681D8B21Fd3742244f44658dBA12264E", // PLU + "0x4f6103BAd230295baCF30f914FDa7D4273B7F585", // KI + "0xed0d5747A9AB03a75fBfEC3228cd55848245B75d", // NGM + "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", // MATIC + "0x892A6f9dF0147e5f079b0993F486F9acA3c87881", //xFUND + "0x853d955aCEf822Db058eb8505911ED77F175b99e", //FRAX + "0xaea46A60368A7bD060eec7DF8CBa43b7EF41Ad85", //FET + "0x467719aD09025FcC6cF6F8311755809d45a5E5f3", //AXL + "0x2B89bF8ba858cd2FCee1faDa378D5cd6936968Be", //WSCRT + "0x4Fabb145d64652a948d72533023f6E7A623C7C53", //BUSD + "0x4c11249814f11b9346808179Cf06e71ac328c1b5", //ORAI + "0xa693B19d2931d498c5B318dF961919BB4aee87a5", //WUST + "0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55", //BAND + "0x4547254E6E3195cE57Bc50352193A25c2F4B8FCf", //STARS + "0x7bE48633D86AA9821284B01030b8a3F9B06eA876", //HUAHUA + "0x6982508145454Ce325dDbE47a25d4ec3d2311933", //PEPE + "0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", //WLUNC + "0x43373AE537945085Ee1001928E96204034bF55e6", //USDC2 + "0x76C4A2B59523eaE19594c630aAb43288dBB1463f", //IRIS + +]; + +const GRAVITY_BRIDGE_CONTRACT = "0xa4108aa1ec4967f8b52220a4f7e94a8201f2d906"; + +module.exports = { + methodology: 'Counts the tokens locked in the Gravity Bridge contract on Ethereum chain.', + start: 13798211, + ethereum: { + tvl: sumTokensExport({ owner: GRAVITY_BRIDGE_CONTRACT, tokens: erc20Contracts, }), + }, + gravitybridge: { + tvl, + } +}; + +async function tvl(_, _b, _cb, { api, }) { + const bals = await getBalance2({ chain: 'gravitybridge', owner: 'gravity16n3lc7cywa68mg50qhp847034w88pntqzx3ksm'}) + Object.entries(bals).forEach(([key, val]) => { + if (key.startsWith('gravity0x')) { + // these tokens are already counted on ethereum side + // api.add(key.replace('gravity', ''), val, { skipChain: true}) + } else { + api.add(key, val) + } + }) +} \ No newline at end of file diff --git a/projects/gridex/index.js b/projects/gridex/index.js index 4646c9fef4..576048cb3d 100644 --- a/projects/gridex/index.js +++ b/projects/gridex/index.js @@ -1,35 +1,48 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); -const { getLogs } = require('../helper/cache/getLogs') +const { getLogs } = require("../helper/cache/getLogs"); +const { stakings } = require("../helper/staking"); + +const stakingContract = ["0x035E9062286FD19460B3E22970ebB5691EED2C25"]; +const GDX = ["0x2F27118E3D2332aFb7d165140Cf1bB127eA6975d"]; module.exports = { methodology: `Counts the tokens locked on order book grid`, hallmarks: [ [1672531200, "GDX Airdrop #1"], - [1672531200, "GDX Airdrop #2"], + [1677628800, "GDX Airdrop #2"], [1678838400, "Maker Rewards Launch"], - [1672531200, "GDX Airdrop #3"], + [1679616000, "GDX Airdrop #3"], + [1682294400, "GDX Staking Launch"], + [1682550000, "GDX Airdrop #4"], ], }; const config = { - arbitrum: { factory: '0x32d1F0Dce675902f89D72251DB4AB1d728efa19c', fromBlock: 64404349, }, -} + arbitrum: { + factory: "0x32d1F0Dce675902f89D72251DB4AB1d728efa19c", + fromBlock: 64404349, + }, +}; -Object.keys(config).forEach(chain => { - const { factory, fromBlock, } = config[chain] +Object.keys(config).forEach((chain) => { + const { factory, fromBlock } = config[chain]; module.exports[chain] = { - tvl: async (_, _b, _cb, { api, }) => { + tvl: async (_, _b, _cb, { api }) => { const logs = await getLogs({ api, target: factory, - topics: ['0xfe23981920c53fdfe858f29ee2c426fb8bf164162938c157cdf27bac46fccab7'], - eventAbi: 'event GridCreated (address indexed token0, address indexed token1, int24 indexed resolution, address grid)', + topics: [ + "0xfe23981920c53fdfe858f29ee2c426fb8bf164162938c157cdf27bac46fccab7", + ], + eventAbi: + "event GridCreated (address indexed token0, address indexed token1, int24 indexed resolution, address grid)", onlyArgs: true, fromBlock, - }) + }); - const ownerTokens = logs.map(i => [[i.token0, i.token1], i.grid]) - return sumTokens2({ api, ownerTokens, }) - } - } -}) \ No newline at end of file + const ownerTokens = logs.map((i) => [[i.token0, i.token1], i.grid]); + return sumTokens2({ api, ownerTokens }); + }, + staking: stakings(stakingContract, GDX), + }; +}); diff --git a/projects/grim/config.json b/projects/grim/config.json new file mode 100644 index 0000000000..7594520756 --- /dev/null +++ b/projects/grim/config.json @@ -0,0 +1,538 @@ +{ + "telos": [ + "0x5E9054c2eeCB9Dd9BC5818E9aE314070c92a9Dbb", + "0x8cAC1868B06A6B53181E497611c8496a96D72A8c", + "0x4Dc1B8dEee2aA42b2e6eC2c6C53d7f7D3fac3e9A", + "0x60DC3d4a7866E1F2802Fc851aC2AF12da4D65Cf1", + "0xB3e34c8046AFC1F7dE0F6f2C0d3140647AD58b30", + "0x6272593eEE38eC7F7F80f971250F39F34FE839ab", + "0x7AfB0Bc08873219d2b8F4Ee44312102e0a1A91d5", + "0xD52C0c24F47D06C5c3Bf41A610d7b591980e201c", + "0x69FE9896f7653BB1961bfCE4D01F3416f59f803E", + "0xaa5eE9cFc6c53419845867d5c4fE361c59D2a9bc", + "0x37CE0654FA0A5D7720b488f18B7c11f5b721BEC3", + "0x9a8d575B3f1Fc91Db2F29c4E87E48F528A3510B9", + "0x0Be694BBA360a5c375622aAf9e31EE82a95b680B", + "0xEcb20d5691E4eac894F4BD8f2A84b2c76BD49f67", + "0xFB65Af3cF542E356C16065467937BF90BB7B54BB", + "0xEC45eDc98243f9DaB8E8C738Aa51910075A0d90F", + "0x87EFdAe3fE46a861ec96fD5ffB5e4C5DDc8f9e79", + "0xeDb1A44fCBC18B0bc8998112b9a987E417bbb23b", + "0xF9c03F4042d4A5F2807A93381A8F7d68e93FD9B2", + "0x173630Ff7c7763DbcD9B38b03c2870B5d51dDB80", + "0xB0c5d5b4a59Ac769f54114D836e1530991da3863", + "0x9F8F4Ffe23Ff4bD7D64F82e60B046002dDCB6684", + "0x4b742d7f8E6E6911a9674EBB00cD6DEEf3091Afa", + "0xdf86120116F04E004f7EDF9B67e40452e08D5774" + ], + "polygon": [ + "0xEfA6e06B557ECF6b328bFffC361D559F4476c26b", + "0xa12e5A6f7968AE09a28e88D978Cae050751C06A5", + "0xBcDd8E50e2109cea403c9a7b88cdBD4c6F8F2045", + "0x00187581AAD2bf25724774676a6B22021Fe8b0C9", + "0x7F37f76d390eCFf2e9832C83fA70c1A1a53C40d8", + "0xbf5953bA9CD32c44e19795c17bC50Ff7369759e5", + "0x553F75622cF944b85f17Be3B53Cd17CE40798984", + "0x289Eb918eaD4cddaeCDE64f946569115E01Ba958", + "0x94118a1752cE651e8e4Ea21620C4da46D8f143d4" + ], + "fantom": [ + "0x54369163e3dE8D993A93f45946DFdadFED1E7Eb4", + "0x5a1d96F0ee43167B58234Bb81e008d3892639f0a", + "0x8Cf9E920AEF195C8D9024269699D762b0685C89c", + "0x6ab4a69a6E43D50f265F0619962F989B6615b7BC", + "0x3ae73a25532be8a67bAa2Cf2aDB765d63443d80D", + "0xAc38fB48A022971112019a40f2AcbB5b77bFB891", + "0x3e2e5AEf7Cea5606204d79616D0cdf8D5AcE385e", + "0x23869f49B5093aaaD5EDaF839B2C37707216b741", + "0x26CE39D79C3F13c6131B8B45577C87f9bB562857", + "0xB92D48c8896965c6eA7a04725F08564A2313D101", + "0x8410903237F9929146dcE683e7921CEA50547689", + "0x053365e9aeB14424a58c14117FEb6D760c0384e9", + "0x7964cd13E81F3B72d9E24FeA428772C29048f715", + "0x7d5196ed6F7E30B43297d5356ba31f3DE7a66827", + "0x66334e72Ba358b79cC2EBd0282c1d8949BFC7564", + "0x61f5d294D71Be47BB0Cb1C2430ECE5605EBA3734", + "0x4Bd6372d9b6e76ef55268b03e80C35b5BF743B62", + "0x40c3C7E16c5faFBAcD2F4f6A58858850d59a5a8e", + "0x30D89125F2b90942Ad77a7631481E0B49f449c13", + "0xb2cf157bA7B44922B30732ba0E98B95913c266A4", + "0xfD6DDdf0C9e6C5a7A518e6Cbfbc222cb2991a2B3", + "0x462aDf50aE6195f46430177450CdFB6eC742A0E5", + "0xf990AC8242FdB9De467A6e5E2b01CC08dC654717", + "0xD94C7DEd80CfA4650Dc61Ab483AF74df0d96f745", + "0x4edC791ddE70914B2C9179934ECaedFd539e1b0c", + "0xb6662bb1b66B75bE8A0cecFe5af08A1DcD46Cf82", + "0xc6493cE516CD3586bB77b41E1A410c6d8B0A305B", + "0x91B7c20330321095668Af86Fa746A7F1852fB190", + "0x6Cec287a3bF06b0d142777B2514FA419910BBC26", + "0x937576F8D178c2ea422b71016800916a1770c439", + "0x60Eba06eD584D1F1bd6620905Da36332D85422e6", + "0x104Bc733788AF33E674a676a227d273806AD958d", + "0xa3e348136D9F8A14300380225756BA6eAF40265d", + "0x18B19e727016409d7f76B0414A84c216Acd99185", + "0x2174f2aB95368B668971f0Ec015F82392d3ceAc1", + "0x6AbAb058747283B3E95BD987AB83B95e689Be3eE", + "0xfBBb8aeB8865fd776485Fd45bc96665E239c908a", + "0x21a5484D889DdEBCb9d192b5B96A794CA4147c91", + "0x7e8D2d029199a86950c733CbbC6d8160Cd21486C", + "0x883D002b2147CE081894f74a846F81FF97b141c2", + "0x10149fDf20A92822a5cBAf21eF9a4484238769F2", + "0x3E4Ea4d16233A5D5236739a8fe632b6b5848DA9e", + "0x54788611767AF25f0De57411354F111B5D9C6DEf", + "0xec0965D89C9E237b9BF0c8f6ed1e09314f5097E0", + "0xa0E9d69249E6AF75779EaB029d1ea3BaA7F2b381", + "0x9200Ac9C17EF8Ad1Ea16fDc63B8460e1F10d8eF4", + "0x9B30315e701945eBB855326f53335F717E4921d2", + "0xE1F9d163C2Fc5761a2860ae590E748BBEfAf39dA", + "0x9f68852dD559484e6BE2d034CEBfBF5d62B54449", + "0xc68048525bfC1a49910e740424399E10eef6dff9", + "0x829C25Bb47f35C02150E2cBBD0C962E5b7B02687", + "0x7f0f5C79b64d0544549c8FfDA52576d00963B15E", + "0x5253ea466157a498d195E1aDB3e19a6F5a97dEfb", + "0xc53103820Bbbeb0BE0592022C3d4d806D07F8610", + "0x43b99CC4384b3F0B384e81D8db2C763fBD6fd314", + "0x127Da0f069bc55410E551bf574438E757Df695dc", + "0x3cfdD338061fEE8523c75e372fc7D88033141eC4", + "0xBc9cad78f31F213A7a91C6f7C589081983398733", + "0xeC6F0E53597fb2e6d4b1a2B48743D52B662CDa24", + "0xbF1fB5E256c7C8D262e866EF20beFc72eD9fA633", + "0x3d9f39Bb535650b04d4B5Eb23bbA8609C117a695", + "0x3FB82257BBBA5A56aE748f1e1BE8A06127D45069", + "0x67769663Ea046dD2F3747827755ADd1694eff9d5", + "0xe30d25c275dA2cb8a8911BFB7cE9e59E227F80E0", + "0xD2752EB1794C4a1b7891feF1e1376B9C9c2FB2DA", + "0x56AFfc8EB077182157e90106B7924e089E86adcD", + "0xeC649a0Fc3D6af24d21ae9059DA1FFF4c9e6E727", + "0x94118a1752cE651e8e4Ea21620C4da46D8f143d4", + "0xe0BA4Bd9211e840e3B7b8B46816f247484916fE2", + "0xa21dD344EA44306e32582EB372B1e91B196e62FB", + "0xEA751A395725E54251308AE2DC5741E5EB4Bb5D0", + "0x67c35B10BB74e035EE062bbCa570c42B11893c71", + "0xa8D2Bee3C6FBc33c77814C208A420A3A8862c09B", + "0x77B76f8a50b4Beb89210E1e6194299243F334B03", + "0xEd83EFF17258cbB2d2a22579D1B001A8e9ae2e83", + "0xd70755B67dE0DeDC0fa749D47fF59ff61bB46933", + "0xdFE426842d07957c9e661794822dB12adc20b856", + "0xeDb1A44fCBC18B0bc8998112b9a987E417bbb23b", + "0xc9e80a3b7D26FF46b8A2F22D4a09E94f42e33039", + "0x126905C4708E55759A63F97D4D47c9E94FcEcB24", + "0x203166db0B7bdDa7a04440c7A0C1E8a8eEd0f11f", + "0xF9cDc12e329247639AC20fC2a2B9CCcAB0d85A4e", + "0xD82d0Cd391b8A1DEa50B9b4E79F02AA66Ee4BeDE", + "0x43691B5a3099365a32644c4216d9EA65cCD41B51", + "0x61373471A5CFaA25C3C7c291d8dc9b45989a8886", + "0x26D27a565865133c8Be4b7B28A1633B4D61bA852", + "0x73f0a7723c193C365Ae413D419EfD6E8e618Bbfe", + "0xb2229CC7a41CC7e5c3564982Cd48B06afFB49a09", + "0x97Fe4cFAeeCA2d0Cb54d8c88bD2D951eEb0C8Da4", + "0x1Bfe85c94bE740C9A8bd4423CfC03EdaB01E17D1", + "0x450b1f5D7872797A5704b1DBdc4042e22E28A495", + "0x6f5362bCAd5F3028FFb9D4575ef17D3e02AaE84b", + "0xe31d2Dba9ec60D0aE5653E967775D7113F75f3bF", + "0x207EC95A4d29b0AEAc7806f3B9FDd39Ce14b5Ff9", + "0x7a1467bb7026baD391d191D49a8B22D0c1E1DDF5", + "0xe9831B5A49D0193002ef4289E8a500438D26EdcC", + "0x341292523DFC4c46300B578D8E7825a83F092a09", + "0x2CeC649c9B5373dA72eF384A8c8340eFfAdcEaE2", + "0x6300ad0C0f0658caFB4D54688aeC30566f71A631", + "0x1A15885096CFE677E2Cd36e64A5FD4f8Fe7e96E1", + "0x8aD0A5159812A3A091E52F0Ee1FDFB8808Be238A", + "0x39768e3055399f05838Fd119eda229655610428b", + "0x373070fAaC2C75eE58Fda6f951a68494219dCda2", + "0x10CA611E52EAeA024535344BD3e1d651b9FaC184", + "0x8B0717362e7ddAf29d38235EB512Fd25C7A1E068", + "0x32C761d3B89e1878753279A4852a919950d448B9", + "0xb76F8dB409F3fe3F0cAA8E4922eEa6896a1A6171", + "0x71cb11349C43b482F654E5F38DC0331B3dD991FB", + "0x0626BE90ed887BC23AF94b546b49CF49521fE0d8", + "0x6c825D8AC98B98f7Ce2d4122154ece3f14188975", + "0x4080D6A1c828456aC4a9AdC8B60df6F4DE942B25", + "0x02392c98D9460DbfD564C04cFC6621d349B90C79", + "0x17cD27740580eA4F5773d4aa50D9E93579b02Dd5", + "0x4F25b50fd0aC12169323c07B693ad9aad6771670", + "0x259a7B98b07e0A8e3d51062901827F50D1462485", + "0x315E0B4C53EDE4DD721C8aad67794678595693F7", + "0x86B9e162C777ea108e7df6461Dd2644cA3A5fe32", + "0xd9F87DeC7dE788BcFc808Cd1c309dB37D977ACCA", + "0x15800c351a38d56d012189f21231e170c48a9764", + "0x86f50144077A62e2b2dd8514B3F06a7bC416eaE6", + "0xA74C821C224A85559c5bba7B76147bBcffEE32f4", + "0x7172A3F5453f453a6D0fb77327ae9209CFC5B519", + "0xd924B1adb80bf30fA49e54EAF9631cFFbBF29fc5", + "0x553899EAf7627bD4DDe54939F5d7791cc0986a9e", + "0xA74e3842b68a71789c8861F418d4F7c61b5f4f61", + "0x4096a34E71045d7B46205dBcf537a4bABD1fbA4B", + "0x89133D25aA5a1d935C5143A3Fc129E7FBdDc9F2c", + "0x0c2AEd118c234aB8adA5a268600FCde97211E9E0", + "0x35B04ADBa055f93AfB55C4aDcb1733E027007dC0", + "0x0b9A63D20dC2F104494FdCd9EdBd7e40d572f349", + "0xE315E491676170e2bE9ebAb022892b500e88E01b", + "0x10aA9E9446ed31B75df5B7F301235A7C5087b711", + "0x4Ea0C774620de22650F15f8f62B333780381DfDD", + "0xDFB65caDda2101a7B6c0B90D296d6A9c1B724A14", + "0x940C9Ba3113fcF75B87Dd46eB03DD023fc600816", + "0x0385131a643d2Eb15765297E0b48207aadbb0A5A", + "0x9883D89F48f0B4A88039cac78eD2A3081A66c2DC", + "0x2f5e44871ccbe7F53e4a812dF76e6417A2b36665", + "0xBabEC3e43C72b85741DEe9F3b6e98af83DF62FEc", + "0x8f4ce599b7A6c647913D7Ef111295d3a4bC8c006", + "0x19F823835650524571B2Efd83971Dc827ab7364A", + "0xe524fB2ad520aF3eD9Dce6D8Ea6E81b6752beFb2", + "0xBB0e625446F7519677db2aa0B5fc9949940b3D3b", + "0xe45C42ED2fa8bC48317c75227a91D8B49198FeD3", + "0x6B889C90D0Bfb856857a83ed02214A02FEE7fA46", + "0x0Cdb6366D8aE177AA273a866865baF4e058cdeB9", + "0x70b07305d17ad51ac8A81eaeDbbc2dA5DB12Fa84", + "0x3579a2711862e561973CbF28bC492b167CEBb8CF", + "0xf44b9aBCc5100DC22B33ac719c632bd1EEC5274d", + "0xDD8ed6392AF61e76BF3f17132A071756fDd094eE", + "0x8d008Aa4FF29733Bf09032cfd45979cE63c71969", + "0x55EcC8387232729ace7b15cD4EB55aaBF392F154", + "0xF20Cd3f92B99B4Bdc21b3C2ED7608267d4089abf", + "0x2487568947Dd2d03292a7F2Bd59485AaC8F00Afc", + "0x2Cb16567F59560C8F818B2Aa5d4b3fE7ab72d6dD", + "0x8208EBc031aBA6e13E7277cea54b42b7Ff6269DE", + "0x5e0c0d6EB53E35BA899b81fdb950ccCB0afAADcc", + "0x530578de626D4F3FDD716affe2e9bEd31A3b54A1", + "0xd1144236E50D257Cc23dA09d514aE4F8eC5C3607", + "0x2561b21335aE1223c61676F73e62d139f1bC88ef", + "0x946669cCBf544D35D272A04289A9AA55E19c1520", + "0x01F62c0FdB59bD820AdB0B45Ddb239a7e7EfCD20", + "0xBBcAD6595590EFB8c4b091298619919A7a51Cf7F", + "0x2D5B68eCdb083E26441EB73C16B86e0E7680DA66", + "0xCa88601ca582F5FA7AfBA26ECc47383E6B1770C2", + "0xA99Bc656A29993C05E6bCafd19A5D4c697277E1B", + "0xEeC83505C7136b4AE8bA9819222f3755A2A8cEF7", + "0xC7d681D00CF8f0C31a8ca9636E1f7058E4a465A4", + "0x6837701b116C74072deE9D8a26B62707b72e3329", + "0xb7754aE3b8044eC15CFe3491201288f1295D40d1", + "0x449A4000d69e46326B938185FfA2a7438A0Ba44b", + "0x99DF7acF2d2A8249B7F2Be131e9911903E0Bfc38", + "0x52614De8e8e2cD217de8AFC63c464205CbDEfE48", + "0x8Ed73DC3Bccc840C43E283740331371e6faC5E88", + "0xB2d955761fB9d481a3A42F17546211447E364DB6", + "0x5bCf5D988A373Bbd591D292F689f5D43d3FDA377", + "0x796Eb8E202ff1c1Db58B1716474e5f7562B07Aac", + "0x551CfDC850427E10522881E3BAe34ee256aCB65e", + "0xf97bd1cE45BF292e1588d4F0f2F7174CC2c81690", + "0x8302a17FC82Ab4Bc7BFa9595372fc89439b413D4", + "0x78292feeac11A682483aDD73660868466b3DC66D", + "0x23C424D3492f809DC3BC473918B12D4F914E97D8", + "0xa028F33b854F58Be522A24E57C32b9226aBD4dd8", + "0xb546841A83d1e3c10E814B280419c33a9e5B7c09", + "0xCAFc0bbeec46292689D881e6dFD02656FeFDBC8a", + "0x2a3CAfeaa0d6ccAe2c99bA285B1c1D3Cf3e8e3e0", + "0xbA1cB80d6Fd52e3174B9DaA0f7752eBe4773500B", + "0x485EFB09b1cddf8750f1abB96c712305D5d7d22a", + "0x3F36BA3a1C951122c59fe8e2EEa9F25D8cd266a2", + "0x9F8230c74E0F8E3c82505eEC20dDB4bd37Fbe7e9", + "0x5Cdd4df7C06a570C2733b2621F65bccc030D22fb", + "0x094Da2a7aa92Db16979F8c740a000F017C78E586", + "0x4db4F7eB136b78a21F6a49FAB2a07AC5454358D2", + "0x534d07b6d997d56d526bB0568F5c0a0875fA7491", + "0xe72bEeDEBc22042B3c054C9d985EF70F3F21C07F", + "0x4B4AC2115c7be54858341A357438089C360D0391", + "0x42443f195F8b0E25150E48965cDa520fDEEf1EC6", + "0x52A6ED8Af9a7587CD7c8097e55Ab51EA167FD1d5", + "0xE75a233bc8d59873CD5a443A7A7a14a18f80de04", + "0xfBdfabdEE0b082f92944cBf7321D901010a05Ff6", + "0x727f490Bd0fD299B98e6118Dbe3762c60241145d", + "0xeCe1E1a00159e831786337a0369eddeb41b44ce3", + "0xC44454116b12424c3CEF37CB4Cd314Be393F4414", + "0xaa6e92d650CD1008423f9502413cD3EB382E80bF", + "0xaaC80725AF8d74B5dCD0462B54bE6959faa49106", + "0x52eca7b8a6681d3541D44677CB7bf6436efaB104", + "0x43309fFccF1ecB86273f363c04b43Da25f2B9211", + "0xf18913fA8a97f703895aFe8102c06EC48a32E543", + "0xd8dC5856143d20A1C4534EAc565805BB23f88e71", + "0x666110FEF0cCee100CD154931aa1349312cb6C86", + "0x19AC1DA1172696c10bE21a3FE8E2f917913Fa2CE", + "0xccB4A945974316E21e333D1d2e81740831caD5Fc", + "0x8594c9e8Fdfe9Fa9D725cC4894E28484675C0894", + "0xa7793ea1aD45Be33EFA1Ea3C7d4ddD6746bc2176", + "0xd60055f132862dcF3Ed08880D8E11c1650BFb5c8", + "0x8C6d98751B4f6a6727F9dFd9670B3978A5762ac5", + "0x29e15bDAE0C0375A4412A83E9f95F7DfD0643Bc5", + "0x2B4a0737e3664A38597118D140E95D56cA022d97", + "0x5707742Df139ec717348E2eBa519891a6F523DD3", + "0x4A7D10BaF5207e866D4667314227123CEF785A01", + "0x48D681d5B9ED09DE4ee2453F26f6973D70611763", + "0xbce9282fe66b7Fc1B7823B884d97492D37530a36", + "0x55b7c199Bac27abbC5ec20B3c3f84d64878e3759", + "0xc98B1FeB7C339f29ca26182e820C9b09A588eAEe", + "0x0B28F99AB08151a751a6B2d5784e68F0796e36e0", + "0x3c50858ba3b778b6dbbe0b034f7ab23dcda37468", + "0xD6B7c1135D62f6EDF2F1d1Af003f3e6baD7deB00", + "0x66AF592fB516b1d8d337B2295B1D6Bade22cb681", + "0x84b106BE2A1b2781d3D560e8304c4197B6F2B40F", + "0xd6F57998B71A8FfE4cb085Ff015f40f75aD5a79E", + "0xE72B57B0c7567a5bE542F6B5ffF1BcB591D7B251", + "0x336dd54Acef3E913D5B59cb2e6fa139e528E8c58", + "0xaF01fC708f1d9bfc07DBcC74590afD005F551AF9", + "0x95c1A7Bc770E33dC1A9AB093a5Ca618Ff96852Fb", + "0x351e0322A75D96F2072c54E22f6013ED76F55FbC", + "0x5c695cf06CC40f0e4692ad4D0b096eF7C4b7ff00", + "0x50ADF00864c443a95253AD3C9ba90E6c0232881B", + "0xE2de4D4d19f6712f0d2836b477c311B627C96565", + "0x1C4C0040c99c0CAe55a66B028ae6644585d10094", + "0x29d237174Fe36eC20c3894251335ca2254b4C4C7", + "0x9cc639E3935b7650439212EC88946580292b5D09", + "0x6b654b20C5fb665d51DEDae98E421EBb0C0348b3", + "0x88249D5728492FFaD4Fb12B0539C9B88A05C3b41", + "0xcE677B9121Ed80429855376F4187bcc24D69dBe7", + "0x922615E9CD49bEf0dcdcdA5a3D650A300fae7d2a", + "0x22cA92B6Ce964c6E64A21Dc15198253231251dA0", + "0x522564885EB8d2b7bDc55Ee289563e1d5b09e8A9", + "0xAc2eAfdBDA2ca4d264A276Ca715081FB7c5fE2AA", + "0x31C5420cB9de6F5A317Efe7c10ab1bC440536dfc", + "0x0e1C794Fb817a20246439C093EBB41321729058a", + "0x8f8854b7782E190912adb538DCecd88fCC8e0909", + "0x01d17C8038cb21A43AFE1da372119A4e18717aFF", + "0x7A1885eC42597B1783dD5754c7a42AE60a5202E1", + "0x6a8673dAF590871198fe073B09D8a3fEAc73Bd3e", + "0x3bdF1D7723bCb1B544b137d3b0C8c38336e06621", + "0x3815a4883b1050D274AFeAf73FAfa41c47941C38", + "0x44a5B6be893cf8071A83aF8c8d81587C09422867", + "0x42A34bDCF4edf2B73Af56803e10654c65aDa3DCe", + "0x47A38879E95B271f8E6DA29006e619aE11eD5A1D", + "0xb1A7c9EcA5079D8Fa7073FB4B0A1150FA67dbf63", + "0x2B6e966230dfD7312979BB754f379c172dc39994", + "0x8bc41d77d5CbD1c7d8F7833Ba08dB5e559D53098", + "0x4ed0c0D87Ed8d52Bda0FfC5eEc393486eF09E8E6", + "0x2DCC96c2ff52E8BA8728C171A581EcE8665Cd34A", + "0x95a272b0672d85330baB132272A36D381F80Af98", + "0x93a2B600aD0dFE4Ba5b464DE30D164D1827F71c7", + "0x61f97F988FAB7c18c61c42d12e2D77612D5eb852", + "0x95dB548c3b9Ec3b310c4667BB6B4c490A5445A0e", + "0x48873b66d6Ec8ed753E1eFc733dA141c87772E5D", + "0x75F38c244dcf0C9214a1a75a423b10e896E1b2eB", + "0x92F9800229eb401106bbF273ECfE7F324620C5E8", + "0x3f24344DDc1C4b0A1D0D6d25260d50E6cF43c975", + "0x92eD2703e4EBC9363b894c645359bCCA5C1950A6", + "0xfa40006daBf692ccC12a5374352509D479f8dFA1", + "0xF1933ABb109bE140c03116aE2774Cf34c3A0eb39", + "0xC31E5c0a413Db0359765F3F88ef1052f802d9ed2", + "0x045A61547d592ea8e394607e601ec81167dDB2bd", + "0x3EF9c9e59dE3F53392dD75e1d0604b3cF85620D4", + "0xa5d08837b1160E83563de264551AFc0273C34B75", + "0x33177e16213d23CbB30e18C0011F5536943AbC83", + "0x75D1Bd5c18c7c4C9362Cd1A845C8c543E27c9f69", + "0x15B83d1A952ce0aCd31C57CA27a288217893991D", + "0x3c6870b4990c8dA73eF18eF25ce34432Cf127554", + "0x9b6F180AaDdF31fe0167aE931c9988548349Fb0D", + "0x39d61795F74377A2Bb69eeF09832c08263C25cc9", + "0x6D26C46086838602E398b0b660871FB961542433", + "0xA350c82529dFdc4Bd8C40086e5aBFd2C00f405a8", + "0xBFb23Ed072c442442f0f049Aa030885483517d36", + "0xD68Bf8eCbA2bc0002F0A8C6cDBE19283b7064C3A", + "0x234eadBA601E874fcED396758875f146992Cf72B", + "0x04aD31904B7cc9d84e6d924972146ABbeB22909b", + "0x420A8E998BC2cc0df14ec8DCf4076aE560B3Ed68", + "0xbCB81BFe71478d182eE612CF71Cb8b68DEC5E84A", + "0xB08a10588E5A8e89f0FaEBfFd18f0AC9eb984022", + "0x2a8d600aa656102Df55017fBA42e404a365bEb4b", + "0xBb381e6d0F3ed77bD47ecB7e9f5C21b800B3a9C6", + "0xbB398185E4b1587F666db8913Aa039fe1663Fd23", + "0xbD76310784908874E0F1f7DfcF2A8fB02594bE6F", + "0x7A729a3B63b9360C4939f8232235801b506c7240", + "0xbCAe8d211969279Eb1e07930e7da4670fe0c10e7", + "0x82D666B8113b7f4dBA99A7982518D6f4d50e771f", + "0xf34E317438C1F6fe863128bD43AB416203c7Cc0F", + "0xF447B93c108d50dc7D52593cB753702A283319aE", + "0xEf52fA3F031235289bd3088ef37c0c9471F99338", + "0x6c9a53d7BdA34815A80cCB6d239142354F39c232", + "0xCe4c5530A150FdB155F02cE42c8791234Bd93688", + "0x3a1FC65e730e3f00a43c58d3770D8a9a38aFEAa5", + "0x4Bc563ead4469C453d526ad603E5223e5B3EDfE4", + "0x24E68643e173BE75C9847ACE5B1aB02Ff2d347B3", + "0x6b6F8CfdF536C71Cc0820387259f181026E964ad", + "0x117325Ad73BFb95e6653baAc3114EF2Ec2f142C4", + "0xAF68D39a0AE64b88AE39A7531A54131946db380E", + "0xFA1054Bb918727B36008CCA64978CD83db230ae0", + "0xc094897bcf7aF2943f439E20ED3A7DcBd7b1C843", + "0xCF3Dfe76608bC47038bB47813081689Fc9a18299", + "0x739b2ea6824Ad2d5D1aF230E9fbc13FBb2E4746a", + "0x1DDE0476FA03c89CD4797169db7034231375F164", + "0xD67C2c733D9cAe58353c49A33Af6DDC206fCee9c", + "0x30B133b801cC60D0676b4c22E961E1718DE15ac9", + "0xf4F4fFCDDAe6B7a1B5B2e0d8eA0Dfd27F013D830", + "0xAF1986Efa7080f4546c2750f08f8Eb0BC714cdb8", + "0xE7D0a4950f44D845846Dd0BA499401ef9E6C310d", + "0x75831D954222abC150359D7A6ee495895Daa26f7", + "0xA321473aE338dd6B83BD20BAeB4D31fBBf1ff34C", + "0x95373F5C8A4FdFf72Cc9E9E0c0eB3b77eF10Ebec", + "0x5086D9849CdB2529a8E1cdB5AfC467aC5018A97d", + "0x89d5410F417858576197d6659D6680b532de7cAD", + "0x1473807Bb1F4328AD27b99d7846C9Df0bB7D46A0", + "0xA2186e410F61Bf1B5f84DD0b11AF281E55825264", + "0xAAfE784942216c8cA73cb0305d6d756B64c56bE2", + "0x4272955b14A1982dc90bec2fa9026941B318809f", + "0xACE58eF4c8350a20Db8cf2f7A452057f809F942F", + "0xe476e01732779Cd1c14b6E084Eb6D7abd10E4815", + "0x8D3c7311497489eBAcF0822f185779A5C7056F8b", + "0xD76f809CDEE95E8961E185003384315191E4F391", + "0x18ef2B849789a2BC790230A8280a6C899C791397", + "0xBac80a35E86fB2c31FfaFC12dF70cfc032D2fA5E", + "0x991C2C63ABfaA999B1Cb5Cb4B05237BCfcD3E1d8", + "0xcf256e5e665ae67ecd921da7b8c983427036c769", + "0xab3c0ab53ccc8d19a93fb331579ad98101f2bd14", + "0xafdb6f52bfacf17c676873115f50f2d3ebaef771", + "0x2Bf3b14711bDc8739e65D188d48E004645C9ed41", + "0x9E58c1F325f8D1Ba6a43E808588d67Ae6b4b6d34", + "0xe08B10E92D22339785038a494E39e98A62104A91", + "0x5B51dFF90Fe87E22A9170ddB74A979bEcEd880dB", + "0xD2B0009B3a222dF065d9DE766f2b2E01bC2a9825", + "0x6D04758840C946f0BFDB98599AdA4F0f68dE2247", + "0xf8b25F0D1Cfa1cbC3dD13c8a871643D14B81e7A4", + "0x5a06B00442E8bb2F1D7E8A191a27e0455369e9ca", + "0xF2D657a80C0246D81dF0ee02Aa3799b1cCc3F251", + "0x20Ed528e8fdbDCa16423f89dDcc848FfDbF2C14d", + "0xb157A23429fB6CaF15BE8aFA001c409C21A121c2", + "0x5bd1bcA04AE6F64842C4B8bd04fb464Fb7925195", + "0xAAE38D7D9987415Ee7502d2579092c559f1E767E", + "0x6518DCa3565fb7f6328284A6fb167968BA38BAE2", + "0x55A53C8491A3CCFB8084CB4Ea48884478c57346c", + "0xcc359d3C834760E587B579607fA3351dc4253e60", + "0xEe237BC2973963d5ADC121c542E2e508A049c18D", + "0xd835e8182372416E87bD904544501F485D6687cE", + "0xa7739978e6c7DA30D858e636ad2aCea4e912f482", + "0xd226F4F0a217A73035746E657b292c88EeE7daF3", + "0xc6595CEcD11f91517c7774357A0a824472b850D5", + "0x39475a68B88415B17324d06676B550A83BF2C70b", + "0x4636E1B72076732b16ea99DE639692Ea05a34893", + "0x3ED98536D5971D4EAC1881ffc8AbDDa2E2bc2ab4", + "0xA3Af04BaA3e418c4cE64DB8bC2d6FBCb1265f824", + "0x34dC8f8136E62B9323FB434D11CE26bAeFaaD3C3", + "0xAef0652343C154662F17D8b7AA86d2b2DE01D012", + "0x62b16eBF03C5aA31aF040a4C31D2d6b67107d92e", + "0x561078c9521519a71B512FBECa07F6C06AfE2e9b", + "0xc17f3e0cc8f8c270F9665d287fceAEeb228062F7", + "0x40FcDfB0d8f1c3B70745e5d6f62611783B22Ae0F", + "0x3aDb0D0F7569D7934ebB21088031D7663427EbC0", + "0x88e2641212047313d5AE5c01E4EaB4A2eAfBbC28", + "0x08B3361d3f0d51BB7D02894b3496ed771ca811e6", + "0xd1bE0B3c6F71adcF173bF3bD38AD260569B1Ed37", + "0x039C681B4CD27243e79C447BAEa6103f4c7A18e2", + "0x3eFfEc22EF5705a0Db035FE98E55df8b0D1F5076", + "0x6086765f5eaB32E5673629d8A33D5d28671182D4", + "0x8054A73E9e641E465d92CAA16B5Fd4a214C46Be3", + "0x46EebF35206BD1D0e11e89c5AB10b5Fd9DC759B6", + "0x1F72FbbB85591Edf28C73bE614f2F83381bbB95b", + "0x3DE1633fBc6A7B7CDe144f2A805A1c68ae5048f4", + "0xcec7b076BA94378d03e13D5898F9EF0f41394BEE", + "0xdA65AEDCE13c13a98dF8b872Af3596Bd22bC26E3", + "0xb7145dE7F5537D07D7Cc3410691D105566A5E434", + "0x18C5C07a9F68c82de678470a9E9306Ffc3e9Ced6", + "0x26f47811f74f67e0Dc00494406685d07A3255C96", + "0x8582267c3a2bb11fCcF1eBB1c9Af128e94B024E0", + "0x48eF177C15d091A038176cD262638bE999E138D6", + "0x40F7E873Ebefa5BB762341a8DD63f06d9A332D56", + "0x0d5Ecb27D1574E3B574d6D8c93C628d17348c99B", + "0x52692fF7230Bb3a11B77B09a63682F6Ef4d43B1c", + "0x177Bd708eB4880d2f0e0E319F48BF1308CFe6494", + "0x55BcAe2D9797184b30D0480A1F6aC3763AEdd9a5", + "0xFDc10560bd833B763352C481f5785Dd69C803429", + "0xC7abe55e5532ddA1943bbe5A94bD837dcd96e233", + "0xCce2E2ea6169449715D1B3E74c776335Cece21d6", + "0x7216e8395C37aE8A17665Aaeb8563ef81d6041A8", + "0x662bDd5cb8Aefc78361C653117Fd9a0f896e0246", + "0xfd5E8252d377f20dc53ABDc12B7A21704CC8A566", + "0xf17C4842D9b52C733a127591296B26FaA8F0d30b", + "0xCC0C4D49E2b104a24b6b6c35660fE8e5AEe1bA47", + "0x3a5138Cd818913169E6a5506a39ff1B0A18cA880", + "0x99e76A57337192B70BeC637e75fdd60251AC7Fb9", + "0x613dcbc575034eB8dbBF3FD5AF90697C241F4C73", + "0xEddA6eEd092736B15610767C6d3D7a1D2FCCb5EF", + "0xE7d661aCa8752Ac8A3C7dA51e4D8C468FeA0a76e", + "0xDe0A2585f0b2Fe4DE98C56DAF53389dDe8C315d2", + "0x9E6f53c29870C436F4eDC200714713549ADA274f", + "0x7BE6c15780390aa8335b356693d82411Fc26B6d9", + "0x45A3cac1d1620B28b8bED91d1bc0Eaf0323916A1", + "0x184bcF123cFF6af3F5Bb39BEE3E2a882c1497d6a", + "0x5cB9f1A5A184f56DE000B5Cf7492F1839451a742", + "0x1B589B49A02960973C8A1C2F5ab6e56023a6bbca", + "0x8F73C2eB80a0A6E83C6d74161f4872d5B9076A1C", + "0xaA4d006b4062650Ab4824f5E44187F10dbc6F100", + "0xc10c76ab2fcc743b783378ad5c192ade0ad70912", + "0x5fe9F73b79106f78552d3D846776300b9aDDd535" + ], + "kava": [ + "0xE9dfDD6Db5577504630aF0d59F6DA0fE58A7A543", + "0xA58580B3Ee8997A6F351b558Ba66785AFC9cF4aD", + "0xA066F4f1B3326a24EE88e0703b480E47fA28617c", + "0xD468F11f00133f843152eFE796094cF7da3C0CeF", + "0x144779e1D5d2177084e8DC58C703C7683a41c8Ad", + "0xC1D17E608236b7338c91ef6909Ed5631823d0631", + "0x83A369A0D21cCcC9594B35eA2EDb578737e2125E", + "0xfB8eDeD3e963C1Ba0e5215DB124848400C7a69dA" + ], + "arbitrum": [ + "0xC536FEDe5427cbF80A891eCABA1F4A67104c6bBf", + "0xAA23927C9ae3061517a6AD63d2F97E40d0357638", + "0x6b66F96cA6f9b27B87682c3FA6D628d509a550D9", + "0x4e3569d91F08402a6215cfA80E2CaA646d704242", + "0xCdE69123119036D088Ef45c6A28C4cECa697f52F", + "0xCfFfE2214D71835b23b8EFCB53253C56F2E4F86C", + "0xacC52DB471106b0cb4681958B9c40A2067C9F4b1", + "0x2228E92aF2bE0adeb69Fa5DF677E442BEf9a1343", + "0x77922ECD7618a4cEE460d2e45836827f1A35dee7", + "0xD6Ce8A5021C7731119Bb7ac714408ba38eFE450A", + "0xcc4373Ff112Bc16e56Fc57C4c75b90EaD04A16a9", + "0xC37b270a403057F3Fac0BEe873D72F8AdE086a3b", + "0x155fFdab92888d2600c1ff4cEBe9dB88f546890f", + "0xD71aA46F14e8CD63a18E3BBe778752D2a5E0cDD2", + "0xF3466b8dB66A3Fc6bb7cA22E3029E3f3F9f247AB", + "0xfe71D131b449e854bA6b3173ada393D41e58275f", + "0xf07355A90b03bfbf262CfBdB5DcABA6B6D77B23f", + "0x93f4f49411284636215C4CCf9120EC9C573a4235", + "0x7692a071Ab5267656333635e97E65b6F2734421E", + "0x1D8308b7cD5eD3762E0871EC2ef6b5b7d5DcDc47", + "0xc93E5392e1F2de59c822FB105AB10d75A547C895", + "0x488F3e4582cAaf0417b1051174861235726fbAb4", + "0x13AaeDC6d4Fb37Ebb71EC5612BfCC64Ff352E948", + "0x4dfC3Cc8275e71ecB9C060e0358044910Ecd572A", + "0x114Bc9fb8c6A0a92348C0Fb59a0ec3984a469b39", + "0x43AbE4df66235Cd8F11F8ef7931ca5330EC32c80", + "0xdD35cd7Bf20e22bbf6DF92221618202259e88661", + "0x15dF484c8caE85c895AcDD9198c3c01FEcd18938", + "0x622502B553AEaCC6D82d39f6AbedAb877B502ed9", + "0x6375B4C1eF33FE9A2dD4EFf936812f93c330134e", + "0x0bcACf155ceB5F5a3A8a61049934E3D79E65c13B", + "0x7c98B83925ea2574E688808Bc1cfB1F82F3Af559", + "0x0289dfF687B38b04eaE6887D1CB68a9F08B3e4f5", + "0xF4771304A5C01E5267b4E8Bc964042485ACaE5D8", + "0x48C0069565e2265b2D5586F762577DE38dc7778D", + "0x9E89e79DF8fEb31EB0d529586201A5541978CbE5", + "0x5E173F6Bf035cFf25029dee6003e8CC18Ac65D7e" + ], + "avax": [ + "0xdFE426842d07957c9e661794822dB12adc20b856", + "0x9aBE7c2062780e7ff8cd9E48bddc54c44107bB62", + "0x852e297f5fD64bB97da1Ce0eDfFB807dDe6f3296", + "0xF9cDc12e329247639AC20fC2a2B9CCcAB0d85A4e", + "0x6D254E5a833A62119631A75A52bEE7c9fb131199", + "0x9495651be0CAE17125091E86DdEf35C4D46085E7", + "0xe7EAbBF65BE5ecFf390124e0FABf15048C4442F5", + "0xFB65Af3cF542E356C16065467937BF90BB7B54BB", + "0xBA3D12D3a11ec109504518c7C284f39fD1626B6D", + "0x87EFdAe3fE46a861ec96fD5ffB5e4C5DDc8f9e79", + "0xf7afb8BBB576E883a6f8fA178b01d9D1E6233635", + "0xF57b11637EeE8e199A1CeE403F0A9efe0B9c968f", + "0x992804e457CBa7EC1f08c8EEE2536eE4a5c38304", + "0xc9dbE91fa4306208dFa092eCc6C1952AfF964bb3", + "0x507f9CB0A7269602588c184BcEB2e0Fdb1bA62Ce", + "0xc33e491BF463F410eF530DB307c384CE4Fa5B52B", + "0xc03edF8e71170985b0E7217C530BBEab83396F32", + "0xD468F11f00133f843152eFE796094cF7da3C0CeF", + "0xEA1A8b0D746b7ab2479655fB49ddFe9381b6d96C", + "0xCD2d3dF9b116E4f8A40271aD3838cDc581B20405", + "0xBa5702F3B09F9DD43b6915D67F5f98AfA2c4ef14", + "0xa638BC40082C2233a9285580d9176E7c0784e7A8", + "0x91bABb9e0CBdc9E7b6B04c03B8DC15E1Da92E143", + "0x7848B2163f0BE2Fc7c855021a8f0A59b2697934A", + "0x7B13baABa686990746153B08D420002Aa6eA2d75", + "0x81e9C6F53aD8576Ba9D73DEad9D48be91151d3da", + "0x8c0e385725070491F42f2b453559C478d9825763" + ] +} \ No newline at end of file diff --git a/projects/grim/index.js b/projects/grim/index.js index f432d3722d..637772c25f 100644 --- a/projects/grim/index.js +++ b/projects/grim/index.js @@ -1,116 +1,14 @@ -const utils = require('../helper/utils'); -const {toUSDTBalances} = require('../helper/balances') +const { sumTokens2 } = require('../helper/unwrapLPs') +const config = require('./config.json') -async function fantom() { - const response = await utils.fetchURL('https://api.grim.finance/tvl'); - - let tvl = 0; - for (const chainId in response.data) { - const chain = response.data[chainId]; - - for (const vault in chain) { - tvl += chain[vault]; - } - } - if(tvl === 0){ - throw new Error("TVL for grim finance cannot be 0") - } - - return toUSDTBalances(tvl); -} - -async function polygon() { - const response = await utils.fetchURL('https://api.grim.finance/tvl'); - - let tvl = 0; - - const chain = response.data[137]; - - for (const vault in chain) { - tvl += chain[vault]; - } - - if(tvl === 0){ - throw new Error("TVL for grim finance cannot be 0") - } - - return toUSDTBalances(tvl); -} - -async function kava() { - const response = await utils.fetchURL('https://api.grim.finance/tvl'); - - let tvl = 0; - - const chain = response.data[2222]; - - for (const vault in chain) { - tvl += chain[vault]; +Object.keys(config).forEach(chain => { + const pools = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const tokens = await api.multiCall({ abi: 'address:want', calls: pools}) + const bals = await api.multiCall({ abi: 'uint256:balance', calls: pools}) + api.addTokens(tokens, bals) + return sumTokens2({ api, resolveLP: true, }) } - - if(tvl === 0){ - throw new Error("TVL for grim finance cannot be 0") } - - return toUSDTBalances(tvl); -} - -async function arbitrum() { - const response = await utils.fetchURL('https://api.grim.finance/tvl'); - - let tvl = 0; - - const chain = response.data[42161]; - - for (const vault in chain) { - tvl += chain[vault]; - } - - if(tvl === 0){ - throw new Error("TVL for grim finance cannot be 0") - } - - return toUSDTBalances(tvl); -} - -async function avax() { - const response = await utils.fetchURL('https://api.grim.finance/tvl'); - - let tvl = 0; - - const chain = response.data[43114]; - - for (const vault in chain) { - tvl += chain[vault]; - } - - if(tvl === 0){ - throw new Error("TVL for grim finance cannot be 0") - } - - return toUSDTBalances(tvl); -} - -module.exports = { - misrepresentedTokens: true, - hallmarks: [ - [1639785600, "Reentrancy attack"] -], - timetravel: false, - methodology: 'TVL data is pulled from the Grim Finance API "https://api.grim.finance/tvl".', - fantom: { - tvl: fantom - }, - polygon: { - tvl: polygon - }, - kava: { - tvl: kava - }, - arbitrum: { - tvl: arbitrum - }, - avax: { - tvl: avax - }, -} +}) \ No newline at end of file diff --git a/projects/grizzly-trade/index.js b/projects/grizzly-trade/index.js new file mode 100644 index 0000000000..e2f16a31bf --- /dev/null +++ b/projects/grizzly-trade/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + bsc: { + tvl: gmxExports({ vault: '0x606E4922b259fe28c10e6731e8317705AA1e253B', }) + }, +} \ No newline at end of file diff --git a/projects/grizzlyfi/index.js b/projects/grizzlyfi/index.js index 8e9bddd1fe..0a3f3a5d22 100644 --- a/projects/grizzlyfi/index.js +++ b/projects/grizzlyfi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakings } = require("../helper/staking"); const { unwrapLPsAuto } = require("../helper/unwrapLPs"); @@ -124,18 +125,18 @@ const yearnHives = [ const pcsV3 = [ { hive: "0x25223015ee4dbaf9525ddd43797cae1dcd83f6b5", - token0: "0x55d398326f99059ff775485246999027b3197955", - token1: "0xe9e7cea3dedca5984780bafc599bd69add087d56" + token0: ADDRESSES.bsc.USDT, + token1: ADDRESSES.bsc.BUSD }, { hive: "0x9eab3bf245da9b6d8705b1a906ee228382c38f93", - token0: "0x55d398326f99059ff775485246999027b3197955", - token1: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d" + token0: ADDRESSES.bsc.USDT, + token1: ADDRESSES.bsc.USDC }, { hive: "0x76ab668d93135bcd64df8e4a7ab9dd05fac4cdbf", - token0: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - token1: "0xe9e7cea3dedca5984780bafc599bd69add087d56" + token0: ADDRESSES.bsc.USDC, + token1: ADDRESSES.bsc.BUSD } ] diff --git a/projects/groprotocol/index.js b/projects/groprotocol/index.js index a0a7617b77..aaa8a6958b 100644 --- a/projects/groprotocol/index.js +++ b/projects/groprotocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // Adapter for Gro Protocol : https://gro.xyz const sdk = require("@defillama/sdk"); @@ -54,32 +55,32 @@ const labs = [ { // USDC vault: "0x57DaED1ee021BE9991F5d30CF494b6B09B5B449E", - baseToken: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", + baseToken: ADDRESSES.avax.USDC_e, }, { // DAI vault: "0x5E57E11483A3F60A76af3045303604522059dA2a", - baseToken: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", + baseToken: ADDRESSES.avax.DAI, }, { // USDT vault: "0x471F4B4b9A97F82C3a25b034B33A8E306eE9Beb5", - baseToken: "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", + baseToken: ADDRESSES.avax.USDT_e, }, { // USDC vault: "0x2Eb05cfFA24309b9aaf300392A4D8Db745d4E592", - baseToken: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", + baseToken: ADDRESSES.avax.USDC_e, }, { // DAI vault: "0x6063597B9356B246E706Fd6A48C780F897e3ef55", - baseToken: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", + baseToken: ADDRESSES.avax.DAI, }, { // USDT vault: "0x6EF44077a1F5e10cDfcCc30EFb7dCdb1d5475581", - baseToken: "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", + baseToken: ADDRESSES.avax.USDT_e, }, ]; diff --git a/projects/groveswap/index.js b/projects/groveswap/index.js new file mode 100644 index 0000000000..4367ef66bc --- /dev/null +++ b/projects/groveswap/index.js @@ -0,0 +1,16 @@ +const { getUniTVL } = require('../helper/unknownTokens') +const { stakingUnknownPricedLP } = require('../helper/staking') + +module.exports = { + misrepresentedTokens: true, + bsc: { + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x0ed713989f421ff6f702b2e4e1c93b1bb9002119', }), + staking: stakingUnknownPricedLP('0x9db65123aa185811e50f8b626a7d4799c39ea4d5', '0xf33893de6eb6ae9a67442e066ae9abd228f5290c', 'bsc', '0xe27f915a8a9ca6c31b193311ae76b8738b926d17'), + }, + ethereum: { + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x6c565c5bbdc7f023cae8a2495105a531caac6e54', }), + }, + grove: { + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x401e7e28e0C679E1a3242ac6CD93C9c56208A260', }), + } +} \ No newline at end of file diff --git a/projects/growth-defi.js b/projects/growth-defi.js deleted file mode 100644 index 63afc2d69b..0000000000 --- a/projects/growth-defi.js +++ /dev/null @@ -1,29 +0,0 @@ -const axios = require("axios"); - -async function fetch() { - const query = ` - { - totalValueLocked(id: 1) { - totalValueLockedUSD - } - } - `; - - const options = { - method: "post", - url: "https://api.thegraph.com/subgraphs/name/growthdefi/growth-defi", - data: { - query, - }, - }; - - const response = await axios(options); - - const tvl = response.data.data.totalValueLocked.totalValueLockedUSD; - - return parseFloat(tvl); -} - -module.exports = { - fetch -} diff --git a/projects/growthdefi/index.js b/projects/growthdefi/index.js index b41e51b8d2..1d1bb56c54 100644 --- a/projects/growthdefi/index.js +++ b/projects/growthdefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const clqdr = require("./abis/clqdr.json"); @@ -290,8 +291,8 @@ const psmConfig = { }; const stableConfig = { - avax: ["0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664"], - bsc: ["0xe9e7cea3dedca5984780bafc599bd69add087d56"], + avax: [ADDRESSES.avax.USDC_e], + bsc: [ADDRESSES.bsc.BUSD], fantom: [], }; @@ -302,9 +303,9 @@ const autoGem = { }; const DAI = { - avax: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", + avax: ADDRESSES.avax.DAI, bsc: "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", - fantom: "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", + fantom: ADDRESSES.fantom.DAI, }; //*** PSM staked portion as product of GrowthDefi Protocol ***// diff --git a/projects/gton.js b/projects/gton.js index 39bb4a95af..c25c3e403f 100644 --- a/projects/gton.js +++ b/projects/gton.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokensExport, nullAddress } = require("./helper/unwrapLPs"); const { staking } = require('./helper/staking') @@ -13,13 +14,13 @@ module.exports = { '0xddcb3ffd12750b45d32e084887fdf1aabab34239', '0x841fad6eae12c286d1fd18d1d525dffa75c7effe', '0x5cc61a78f164885776aa610fb0fe1257df78e59b', - '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', + ADDRESSES.fantom.WFTM, '0xb688e18f34e6e424c44b247318f22367ed7df3e2', - '0xdbf31df14b66535af65aac99c32e9ea844e14501', + ADDRESSES.fantom.renBTC, '0x1E4F97b9f9F913c46F1632781732927B9019C68b', '0x657A1861c15A3deD9AF0B6799a195a249ebdCbc6', '0xc3f069d7439baf6d4d6e9478d9cc77778e62d147', - '0x049d68029688eabf473097a2fc38ef61633a3c7a', + ADDRESSES.fantom.fUSDT, '0xf16e81dce15b08f326220742020379b855b87df9', ]}), staking: staking([stakingContract, treasury,], gton, chain), diff --git a/projects/gyro.js b/projects/gyro.js index 6264b6a20d..d9818ba516 100644 --- a/projects/gyro.js +++ b/projects/gyro.js @@ -1,8 +1,10 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { ohmTvl } = require('./helper/ohm') module.exports=ohmTvl("0x8B1522402FECe066d83E0F6C97024248Be3C8c01", [ - ["0x55d398326f99059ff775485246999027b3197955", false], - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.USDT, false], + [ADDRESSES.bsc.BUSD, false], ["0x5ca063a7e2bebefeb2bdea42158f5b825f0f9ffb", true], ["0xa5399084a5f06d308c4527517bbb781c4dce887c", true] -], "bsc", "0xe9c178cfdfeb917a46429714e5d51f6d4f296b75", "0x1b239abe619e74232c827fbe5e49a4c072bd869d") \ No newline at end of file +], "bsc", "0xe9c178cfdfeb917a46429714e5d51f6d4f296b75", "0x1b239abe619e74232c827fbe5e49a4c072bd869d") +module.exports.bsc.tvl = () => 0 \ No newline at end of file diff --git a/projects/gyroscope/index.js b/projects/gyroscope/index.js index de5d62d29a..89f84e6832 100644 --- a/projects/gyroscope/index.js +++ b/projects/gyroscope/index.js @@ -1,25 +1,25 @@ - -const { getLogs, getAddress } = require('../helper/cache/getLogs') const { transformBalances } = require('../helper/portedTokens') const sdk = require('@defillama/sdk') +const GYRO_POOL_ADDRESSES = [ + "0x17f1ef81707811ea15d9ee7c741179bbe2a63887", + "0x97469e6236bd467cd147065f77752b00efadce8a", + "0xdac42eeb17758daa38caf9a3540c808247527ae3", + "0xf0ad209e2e969eaaa8c882aac71f02d8a047d5c2", + "0xfa9ee04a5545d8e0a26b30f5ca5cbecd75ea645f", + "0xee278d943584dd8640eaf4cc6c7a5c80c0073e85" +] + async function tvl(_, _b, _cb, { api, }) { const balances = {} - const logs = await getLogs({ - api, - target: '0x90f08b3705208e41dbeeb37a42fb628dd483adda', - topics: ['0x83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc'], - fromBlock: 31556094, - }) - const pools = logs.map(i => getAddress(i.topics[1])) const poolIds = await api.multiCall({ abi: 'function getPoolId() view returns (bytes32)', - calls: pools, + calls: GYRO_POOL_ADDRESSES, }) const vault = await api.call({ - target: pools[0], + target: GYRO_POOL_ADDRESSES[0], abi: 'address:getVault', }) const data = await api.multiCall({ diff --git a/projects/gysr/index.js b/projects/gysr/index.js index 9d5d6e4d8e..ae614ad969 100644 --- a/projects/gysr/index.js +++ b/projects/gysr/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { request, gql } = require("graphql-request"); const { getBlock } = require('../helper/http') @@ -7,7 +8,7 @@ const graphUrlMainnet = "https://api.thegraph.com/subgraphs/name/gysr-io/gysr"; const graphUrlPolygon = "https://api.thegraph.com/subgraphs/name/gysr-io/gysr-polygon"; const graphQuery = gql` query GET_TVL($block: Int) { - platform(id: "0x0000000000000000000000000000000000000000", block: { number: $block }) { + platform(id: "${ADDRESSES.null}", block: { number: $block }) { tvl } } @@ -35,7 +36,7 @@ async function polygon(_, ethBlock, chainBlocks) { graphUrlPolygon, graphQuery, { - block + block: block - 200 } ); diff --git a/projects/hadesswap/index.js b/projects/hadesswap/index.js index 9d1c783763..527578196e 100644 --- a/projects/hadesswap/index.js +++ b/projects/hadesswap/index.js @@ -1,13 +1,10 @@ -const { getUniTVL } = require('../helper/unknownTokens') - module.exports = { timetravel: false, misrepresentedTokens: true, + hallmarks: [ + [Math.floor(new Date('2023-06-01')/1e3), 'Chain is abandoned'], + ], polis: { - tvl: getUniTVL({ - chain: 'polis', - factory: '0x4523ad2e05c455d0043910c84c83236a6c98b40b', - useDefaultCoreAssets: true, - }) + tvl: () => 0 }, } diff --git a/projects/hadouken-fi-dex/index.js b/projects/hadouken-fi-dex/index.js index d4b4ad1a0c..93e8eaa056 100644 --- a/projects/hadouken-fi-dex/index.js +++ b/projects/hadouken-fi-dex/index.js @@ -1,5 +1,5 @@ -const { GraphQLClient } = require("graphql-request") const { sumTokens2 } = require('../helper/unwrapLPs') +const { cachedGraphQuery } = require("../helper/cache") const endpoint = "https://graph-multi-http-hadouken.hadouken.finance/subgraphs/name/balancer-mainnet" @@ -8,8 +8,7 @@ const query = `query { }` async function tvl(_, _b, _cb, { api, }) { - const graphQLClient = new GraphQLClient(endpoint) - const { tokens } = await graphQLClient.request(query) + const { tokens } = await cachedGraphQuery('haduken-fi-dex', endpoint, query) return sumTokens2({ api, owner: '0x4f8bdf24826ebcf649658147756115ee867b7d63', tokens: tokens .filter(i => !i.symbol.startsWith('HDK-')) diff --git a/projects/hakka.js b/projects/hakka.js index 185a08f40d..62d6a4117f 100644 --- a/projects/hakka.js +++ b/projects/hakka.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens2, nullAddress, sumTokensExport } = require('./helper/unwrapLPs') const HAKKA_ADDRESSES = { @@ -20,9 +21,9 @@ async function ethereum(_, block) { [nullAddress, thirdFloorAddress], // thirdFloor // guild bank [nullAddress, hakkaGuildBank], - ['0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', hakkaGuildBank], + [ADDRESSES.ethereum.MKR, hakkaGuildBank], ['0x35101c731b1548B5e48bb23F99eDBc2f5c341935', hakkaGuildBank], - ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', hakkaGuildBank], + [ADDRESSES.ethereum.USDC, hakkaGuildBank], ] return sumTokens2({ tokensAndOwners: toa, block, }) @@ -30,8 +31,8 @@ async function ethereum(_, block) { async function bsc(_, _b, { bsc: block }) { const chain = 'bsc' const toa = [ - ['0xe9e7cea3dedca5984780bafc599bd69add087d56', BSC_BHS_ADDRESS], // thirdFloor - ['0x55d398326f99059ff775485246999027b3197955', BSC_BHS_ADDRESS], // thirdFloor + [ADDRESSES.bsc.BUSD, BSC_BHS_ADDRESS], // thirdFloor + [ADDRESSES.bsc.USDT, BSC_BHS_ADDRESS], // thirdFloor ] return sumTokens2({ tokensAndOwners: toa, block, chain }) diff --git a/projects/halodao/index.js b/projects/halodao/index.js index 352ccaa6a6..ba2fb4b419 100644 --- a/projects/halodao/index.js +++ b/projects/halodao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking.js"); const { sumTokens2 } = require('../helper/unwrapLPs') @@ -13,7 +14,7 @@ const wrnbwPolyPool = "0xc104e54803abA12f7a171a49DDC333Da39f47193"; // ETH Pool 2 pool RNBW-ETH const rnbwUniPool = { lpToken: "0x3E8E036Ddfd310B0838d3CC881A9fa827778845D", - token0: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + token0: ADDRESSES.ethereum.WETH, token1: "0xe94b97b6b43639e238c851a7e693f50033efd75c", }; @@ -22,25 +23,25 @@ const ethPools = [ // USDC:XSGD lpToken: "0x64DCbDeb83e39f152B7Faf83E5E5673faCA0D42A", token0: "0x70e8de73ce538da2beed35d14187f6959a8eca96", - token1: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + token1: ADDRESSES.ethereum.USDC, }, { // USDC:TCAD lpToken: "0xE15E50fF9d52beC41D53d3173F2ed40834D455f4", token0: "0x00000100F2A2bd000715001920eB70D229700085", - token1: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + token1: ADDRESSES.ethereum.USDC, }, { // USDC:TAUD lpToken: "0x11816335DEe6763e2A7B6080b2b2980Eac7F85E4", token0: "0x00006100F7090010005F1bd7aE6122c3C2CF0090", - token1: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + token1: ADDRESSES.ethereum.USDC, }, { // USDC:TGBP lpToken: "0x2ED09E2961D72659E4002ba8C2BaDfedC7db19B7", token0: "0x00000000441378008ea67f4284a57932b1c000a5", - token1: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + token1: ADDRESSES.ethereum.USDC, }, ]; @@ -49,25 +50,25 @@ const polyPools = [ //xSGD:USDC lpToken: "0x8123C64D6607412C7Ac9E880f12245ef22558b14", token0: "0x769434dca303597c8fc4997bf3dab233e961eda2", - token1: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + token1: ADDRESSES.polygon.USDC, }, { //wTCAD:USDC lpToken: "0xaEad273bc7E17DD6951ceD3264B1dBa8A19114C2", token0: "0x6d3cC56DFC016151eE2613BdDe0e03Af9ba885CC", - token1: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + token1: ADDRESSES.polygon.USDC, }, { //wTAUD:USDC lpToken: "0x95AB308bE1e209eB6FfdD3279B5ea71D365AD30B", token0: "0xe4F7761b541668f88d04fe9F2E9DF10CA613aEf7", - token1: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + token1: ADDRESSES.polygon.USDC, }, { //wTGBP:USDC lpToken: "0xbF772a745533f6bAd97C58D2cb6B241eF7487242", token0: "0x81A123f10C78216d32F8655eb1A88B5E9A3e9f2F", - token1: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + token1: ADDRESSES.polygon.USDC, }, ]; @@ -75,21 +76,21 @@ const arbiPools = [ { //fxPHP-USDC lpToken: "0x90b48bb20048786b167473dfeec443142d043cf7", - token0: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + token0: ADDRESSES.arbitrum.USDC, token1: "0x3d147cD9aC957B2a5F968dE9d1c6B9d0872286a0", }, { //fxAUD-USDC lpToken: "0xd5ad9eed5c5f28d83933779cd7e677e112991f51", - token0: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + token0: ADDRESSES.arbitrum.USDC, token1: "0x7E141940932E3D13bfa54B224cb4a16510519308", }, ]; //Converts Polygon tokens to ETH tokens cause CoinGecko const tokenConvert = { - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174": - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC + [ADDRESSES.polygon.USDC]: + ADDRESSES.ethereum.USDC, // USDC }; async function calcTvl(pools, block, chain) { diff --git a/projects/handlefi/index.js b/projects/handlefi/index.js index 3f1fcc8791..3af9a05cf0 100644 --- a/projects/handlefi/index.js +++ b/projects/handlefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const { sumTokens2 } = require("../helper/unwrapLPs") const {pool2 } = require("../helper/pool2") @@ -8,7 +9,7 @@ const chain = 'arbitrum' // Arbitrum TVL const transformArbitrumAddress = addr => `arbitrum:${addr}` const treasuryContract = "0x5710B75A0aA37f4Da939A61bb53c519296627994" -const WETH_arbitrum = "0x82af49447d8a07e3bd95bd0d56f35241523fbab1" +const WETH_arbitrum = ADDRESSES.arbitrum.WETH const FOREX_arbitrum = "0xDb298285FE4C5410B05390cA80e8Fbe9DE1F259B" const treasuryTokens = [WETH_arbitrum, ] const perpsVault = "0x1785e8491e7e9d771b2A6E9E389c25265F06326A" diff --git a/projects/hard.js b/projects/hard.js index 956d199214..879f419043 100644 --- a/projects/hard.js +++ b/projects/hard.js @@ -1,65 +1,26 @@ -const { get } = require('./helper/http') +const { queryV1Beta1 } = require('./helper/chain/cosmos'); +const chain = 'kava' -const KAVA_DENOM = "ukava"; -const HARD_DENOM = "hard"; -const USDX_DENOM = "usdx"; -const BNB_DENOM = "bnb"; -const BTC_DENOM = "btcb"; -const BUSD_DENOM = "busd"; -const XRPB_DENOM = "xrpb"; -const ATOM_DENOM = "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2" -const AKT_DENOM = "ibc/799FDD409719A1122586A629AE8FCA17380351A51C1F47A80A1B8E7F2A491098" -const AXLUSDC_DENOM = "erc20/axelar/usdc" -const coingeckoIds = { - [KAVA_DENOM]: 'kava', - [HARD_DENOM]:'kava-lend', - [USDX_DENOM]:'usdx', - [BNB_DENOM]:'binancecoin', - [BTC_DENOM]:'bitcoin', - [BUSD_DENOM]:'binance-usd', - [XRPB_DENOM]:'ripple', - [ATOM_DENOM]:'cosmos', - [AKT_DENOM]:'akash-network', - [AXLUSDC_DENOM]: 'axlusdc' -} -const decimals = { - [KAVA_DENOM]: 6, - [HARD_DENOM]:6, - [USDX_DENOM]:6, - [BNB_DENOM]:8, - [BTC_DENOM]:8, - [BUSD_DENOM]:8, - [XRPB_DENOM]:8, - [ATOM_DENOM]:6, - [AKT_DENOM]:6, - [AXLUSDC_DENOM]:6, +const tvl = async (_, _1, _2, { api }) => { + const [deposited, borrowed] = await Promise.all([ + queryV1Beta1({ chain, url: 'hard/v1beta1/total-deposited' }), + queryV1Beta1({ chain, url: 'hard/v1beta1/total-borrowed' }) + ]) + deposited.supplied_coins.forEach(({ denom, amount }) => api.add(denom, amount)) + borrowed.borrowed_coins.forEach(({ denom, amount }) => api.add(denom, amount * -1)) } -var tvl = async () => { - const balances = {} - const totalDeposited = await get('https://api2.kava.io/hard/total-deposited') - const totalBorrowed = await get('https://api2.kava.io/hard/total-borrowed') - for(const coin of totalDeposited.result){ - const borrowed = Number(totalBorrowed.result.find(item=>item.denom === coin.denom)?.amount || 0); - balances[coingeckoIds[coin.denom]]=(Number(coin.amount)-borrowed)/(10**decimals[coin.denom]); - } - return balances; -} -var borrowed = async () => { - const balances = {} - const totalBorrowed = await get('https://api2.kava.io/hard/total-borrowed') - for(const coin of totalBorrowed.result){ - balances[coingeckoIds[coin.denom]]=Number(coin.amount)/(10**decimals[coin.denom]); - } - return balances; -} +const borrowed = async (_, _1, _2, { api }) => { + const borrowed = await queryV1Beta1({ chain, url: 'hard/v1beta1/total-borrowed' }) + borrowed.borrowed_coins.forEach(({ denom, amount }) => api.add(denom, amount)) +} module.exports = { - timetravel: false, - kava:{ - tvl, - borrowed - } + timetravel: false, + kava: { + tvl, + borrowed + } } diff --git a/projects/harvest.js b/projects/harvest.js index 218add5ad5..1b837eb852 100644 --- a/projects/harvest.js +++ b/projects/harvest.js @@ -4,7 +4,7 @@ const { get } = require('./helper/http') const endpoint = "https://api.harvest.finance/vaults?key=41e90ced-d559-4433-b390-af424fdc76d6" const chains = { ethereum: 'eth', - bsc: 'bsc', + // bsc: 'bsc', arbitrum: 'arbitrum', polygon: 'matic' } @@ -19,11 +19,14 @@ Object.keys(chains).forEach(chain => { if (!_response) _response = get(endpoint) const response = await _response var tvl = 0; - Object.values(response[chain]).map(async item => { + Object.values(response[chain]).map(item => { + if(item.id === "convex_pETH"){ + return + } const poolTvl = parseFloat(item.totalValueLocked ?? 0) tvl += poolTvl }) return { tether: tvl } } } -}) +}) \ No newline at end of file diff --git a/projects/hashdaofinance/index.js b/projects/hashdaofinance/index.js index 32f457f92b..c7516f54d8 100644 --- a/projects/hashdaofinance/index.js +++ b/projects/hashdaofinance/index.js @@ -1,19 +1,37 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); const { staking } = require('../helper/staking') +const { pool2 } = require('../helper/pool2') -const contract = '0x90d11b8de2b30a84cB7e6cf6188581Ec08b1Bf82' -const lp = '0x8dC6EFD57A13B7ba3ff7824c9708DB24d3190703' -const chef = '0xb557c071BAe7DC3aa2366Cd0FC0477B45Eb696f1' - -async function tvl(_, _b, _cb, { api, }) { - const owners = await api.call({ target: contract, abi: "function getAllPools() public view returns(address[] memory list)" }) - const tokens = await api.multiCall({ abi: "function getPoolTokens(address _pool) public view returns(address[] memory list)", target: contract, calls: owners }) - return sumTokens2({ api, ownerTokens: tokens.map((v, i) => [v, owners[i]]) }) +const config = { + arbitrum: { + contract: '0x90d11b8de2b30a84cB7e6cf6188581Ec08b1Bf82', + lp: '0x8dC6EFD57A13B7ba3ff7824c9708DB24d3190703', + chef: '0xb557c071BAe7DC3aa2366Cd0FC0477B45Eb696f1', + vHash: '0x958882fda110febd41536e45034bebff2a815006', + hash: '0x2e80259c9071b6176205ff5f5eb6f7ec8361b93f', + }, + optimism: { + contract: '0xF96aad4942D8A0394158Fd960003397690fB795D', + lp: '0xb426aE40E43be57215ba7DAA06Cbc5d48eD35Dcf', + chef: '0xEAB4C6C26A1F296E8E0033ffB817D5311C51299d', + vHash: '0x9D66c32E137E618BEE9669Ae096FD59ba925AaA5', + hash: '0x2e80259c9071b6176205ff5f5eb6f7ec8361b93f', + isPool2: true, + }, } -module.exports = { - arbitrum: { - tvl, - pool2: staking(chef, lp), +Object.keys(config).forEach(chain => { + const { contract, lp, chef, hash, vHash, isPool2,} = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const owners = await api.call({ target: contract, abi: "function getAllPools() public view returns(address[] memory list)" }) + const tokens = await api.multiCall({ abi: "function getPoolTokens(address _pool) public view returns(address[] memory list)", target: contract, calls: owners }) + return sumTokens2({ api, ownerTokens: tokens.map((v, i) => [v, owners[i]]), }) + } } -} + if (chef && lp) + module.exports[chain].pool2 = isPool2 ? pool2(chef, lp) : staking(chef, lp) + + if (hash && vHash) + module.exports[chain].staking = staking(vHash, hash, undefined, 'arbitrum:'+config.arbitrum.hash) +}) \ No newline at end of file diff --git a/projects/hashflow/index.js b/projects/hashflow/index.js index ab5fd2b805..5c68e60201 100644 --- a/projects/hashflow/index.js +++ b/projects/hashflow/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { get } = require('../helper/http') const { chainExports } = require('../helper/exports'); const { sumTokens } = require("../helper/unwrapLPs"); @@ -15,7 +16,7 @@ const chainIds = { let dataCacheUpdating async function updateDataCache() { - const null_addr = '0x0000000000000000000000000000000000000000'; + const null_addr = ADDRESSES.null; const allChainData = {} for (const chain of Object.keys(chainIds)) { diff --git a/projects/hashking/index.js b/projects/hashking/index.js new file mode 100644 index 0000000000..036bf811ba --- /dev/null +++ b/projects/hashking/index.js @@ -0,0 +1,13 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') + +module.exports = { + filecoin: { + tvl: async (_, _1, _2, { api }) => { + const owner = '0xe012f3957226894b1a2a44b3ef5070417a069dc2' + const validators = await api.call({ target: owner, abi: 'function beneficiarys() public view returns (address [] memory)'}) + const bals = await api.multiCall({ abi: 'uint256:totalStakingFil', calls: validators}) + bals.forEach(i => api.add(nullAddress, i)) + return sumTokens2({ api, owners: [owner], tokens: [nullAddress]}) + } + } +} \ No newline at end of file diff --git a/projects/hashmix/index.js b/projects/hashmix/index.js new file mode 100644 index 0000000000..baadd361e7 --- /dev/null +++ b/projects/hashmix/index.js @@ -0,0 +1,58 @@ +const POOL = "0x587A7eaE9b461ad724391Aa7195210e0547eD11d"; +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { get } = require("../helper/http"); +const BigNumber = require("bignumber.js"); +// const { sdk } = require("@defillama/sdk"); + +// async function tvl(_, _1, _2, { api }) { +// const totalBorrows = await api.call({ target: POOL, abi: "uint256:totalBorrows", }); +// const totalReserves = await api.call({ target: POOL, abi: "uint256:totalReserves", }); +// api.add(nullAddress, totalBorrows) +// api.add(nullAddress, totalReserves * -1) + +// return sumTokens2({ api, owner: POOL, tokens: [nullAddress]}); +// } + +async function tvl(_, _1, _2, { api }) { + + let tvl = await get("https://fvm.hashmix.org/fevmapi/tvl"); + // let b = new BigNumber.BigNumber("337036288533616233281756"); + + api.add(nullAddress, tvl.data) + + return sumTokens2({ api, owner: POOL, tokens: [nullAddress] }); + + // const balances = {}; + // const bal = await sdk.api2.eth.getBalance({ target: POOL, chain: api.chain, decimals: api.decimals }); + // const totalBorrows = await sdk.api2.abi.call({ + // target: POOL, + // abi: "uint256:totalBorrows", + // chain: api.chain, + // }); + // const totalReserves = await sdk.api2.abi.call({ + // target: POOL, + // abi: "uint256:totalReserves", + // chain: api.chain, + // }); + + + // let b = new BigNumber.BigNumber(bal.output); + // b = b.plus(new BigNumber.BigNumber(totalBorrows)).minus(new BigNumber.BigNumber(totalReserves)); + + // sdk.util.sumSingleBalance( + // balances, + // nullAddress, + // b.toFixed(0), + // api.chain + // ); + + // return balances; +} + +module.exports = { + methodology: + "HashMix FIL Liquid Staking Protocol is a decentralized staking protocol on Filecoin, connecting FIL holders and miners in the ecosystem.", + filecoin: { + tvl, + }, +}; diff --git a/projects/hatom-lending/index.js b/projects/hatom-lending/index.js new file mode 100644 index 0000000000..adb9a9cb6d --- /dev/null +++ b/projects/hatom-lending/index.js @@ -0,0 +1,42 @@ +const { sumTokens, call, } = require('../helper/chain/elrond') +const { cachedGraphQuery } = require('../helper/cache') +const { nullAddress } = require('../helper/tokenMapping') + +async function getMoneyMarkets() { + const { queryMoneyMarket: res } = await cachedGraphQuery('hatom-TVLLendingProtocolQuery', 'https://mainnet-api.hatom.com/graphql', ` + query QueryMoneyMarket { + queryMoneyMarket { + address + underlying { + name + decimals + id + } + } + } + `) + res.forEach(i => { + if (i.underlying.id === 'EGLD') i.underlying.id = nullAddress + }) + return res +} + +const tvl = async () => { + const moneyMarkets = await getMoneyMarkets() + return sumTokens({ owners: moneyMarkets.map(i => i.address), }) +}; + +const borrowed = async (_, _1, _2, { api }) => { + const moneyMarkets = await getMoneyMarkets() + const tokens = moneyMarkets.map(i => i.underlying.id) + const bals = await Promise.all(moneyMarkets.map(i => call({ target: i.address, abi: 'getTotalBorrows', responseTypes: ['number'] }))) + api.addTokens(tokens, bals) +}; + +module.exports = { + timetravel: false, + elrond: { + tvl, + borrowed, + }, +}; diff --git a/projects/hatom-liquid-staking/index.js b/projects/hatom-liquid-staking/index.js new file mode 100644 index 0000000000..db9ff8b7bc --- /dev/null +++ b/projects/hatom-liquid-staking/index.js @@ -0,0 +1,14 @@ +const { call, } = require("../helper/chain/elrond"); + +const ADDRESSES = require('../helper/coreAssets.json'); + +const tvl = async () => { + return { ['elrond:' + ADDRESSES.null]: await call({ target: 'erd1qqqqqqqqqqqqqpgq4gzfcw7kmkjy8zsf04ce6dl0auhtzjx078sslvrf4e', abi: 'getCashReserve', responseTypes: ['number'] }) } +}; + +module.exports = { + timetravel: false, + elrond: { + tvl, + }, +}; diff --git a/projects/hats-v2/index.js b/projects/hats-v2/index.js new file mode 100644 index 0000000000..cb1bce3446 --- /dev/null +++ b/projects/hats-v2/index.js @@ -0,0 +1,25 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const config = { + ethereum: { masterchef: '0xc570c434ba30a2fa5c07e590833246e18aa6b0a3',}, + polygon: { masterchef: '0xa80d0a371f4d37afcc55188233bb4ad463af9e48',}, + bsc: { masterchef: '0xd978eb90eb1b11213e320f4e6e910eb98d8df1e4',}, + arbitrum: { masterchef: '0xa80d0a371f4d37afcc55188233bb4ad463af9e48',}, + optimism: { masterchef: '0xa80d0a371f4d37afcc55188233bb4ad463af9e48',}, +} + +Object.keys(config).forEach(chain => { + const { masterchef } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const vaults = await api.fetchList({ lengthAbi: 'uint256:getNumberOfVaults', itemAbi: 'function hatVaults(uint256) view returns (address)', target: masterchef}) + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults}) + const tokensAndOwners = [] + tokens.forEach((token, i) => { + tokensAndOwners.push([token, vaults[i]]) + tokensAndOwners.push([token, masterchef]) + }) + return sumTokens2({ api, tokensAndOwners,}) + } + } +}) \ No newline at end of file diff --git a/projects/hats/index.js b/projects/hats/index.js index 8502acb7b4..78e438c607 100644 --- a/projects/hats/index.js +++ b/projects/hats/index.js @@ -1,5 +1,12 @@ -const { masterChefExports, } = require("../helper/masterchef") +const { sumTokens2 } = require('../helper/unwrapLPs') +const abi = require('../helper/abis/masterchef.json') -const owner = '0x571f39d351513146248AcafA9D0509319A327C4D' // vault address -const token = "0x36f8d0d0573ae92326827c4a82fe4ce4c244cab6" // intentional wrong token TODO: find hats token -module.exports = masterChefExports(owner, "ethereum", token) \ No newline at end of file +const vault = '0x571f39d351513146248AcafA9D0509319A327C4D' // vault address +module.exports = { + ethereum: { + tvl: async (_, _1, _2, { api }) => { + const info = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: vault}) + return sumTokens2({ api, owner: vault, tokens: info.map(i => i.lpToken)}) + } + } +} \ No newline at end of file diff --git a/projects/hawksight/index.js b/projects/hawksight/index.js index b87e0570e9..d7b253f4e6 100644 --- a/projects/hawksight/index.js +++ b/projects/hawksight/index.js @@ -1,4 +1,5 @@ const { fetchURL } = require('../helper/utils') +const { sumTokens2 } = require('../helper/solana') async function tvl() { @@ -11,5 +12,6 @@ module.exports = { methodology: 'Sums the total value locked of all strategies in Hawksight', solana: { tvl, + staking: () => sumTokens2({ tokenAccounts: ['2eFeetCpZJprr67F2dToT52BbSkdeqKZT6hmVdVG14eU']}) } } \ No newline at end of file diff --git a/projects/hebeswap/index.js b/projects/hebeswap/index.js index db3c1647f1..efb2c6426e 100644 --- a/projects/hebeswap/index.js +++ b/projects/hebeswap/index.js @@ -5,7 +5,6 @@ module.exports={ methodology: "Factory address (0x09fafa5eecbc11C3e5d30369e51B7D9aab2f3F53) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", ethereumclassic: { tvl: getUniTVL({ - chain: 'ethereumclassic', factory: '0x09fafa5eecbc11C3e5d30369e51B7D9aab2f3F53', useDefaultCoreAssets: true, }) diff --git a/projects/hectagon/index.js b/projects/hectagon/index.js index 9ac185a5c2..71eef4b6fb 100644 --- a/projects/hectagon/index.js +++ b/projects/hectagon/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking'); const { sumTokens2 } = require('../helper/unwrapLPs') -const BUSD_ADDRESS = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const BUSD_ADDRESS = ADDRESSES.bsc.BUSD; const gHECTA = '0x7d31ed03c2442f9ffc4f22d90772ee1f32fa9b0d' const chain = 'bsc' const HECTA_ADDRESS = "0x343915085b919fbd4414F7046f903d194c6F60EE"; diff --git a/projects/hector/api.js b/projects/hector/api.js new file mode 100644 index 0000000000..606277d156 --- /dev/null +++ b/projects/hector/api.js @@ -0,0 +1,4 @@ +const index = require('./index') +const { ohmStaking } = require('../helper/treasury') + +module.exports = ohmStaking(index) \ No newline at end of file diff --git a/projects/hedgehog/index.js b/projects/hedgehog/index.js index 9e64a6749b..9091f1478a 100644 --- a/projects/hedgehog/index.js +++ b/projects/hedgehog/index.js @@ -1,5 +1,6 @@ -const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; -const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; +const ADDRESSES = require('../helper/coreAssets.json') +const WETH = ADDRESSES.ethereum.WETH; +const USDC = ADDRESSES.ethereum.USDC; const OSQTH = "0xf1B99e3E573A1a9C5E6B2Ce818b617F0E664E86B"; const VAULT_MATH = "0x2b1cb93B8fe1B6fB3810Ab294D681865421C4E37"; diff --git a/projects/hegic/index.js b/projects/hegic/index.js index 4945021cdb..0154a468d4 100644 --- a/projects/hegic/index.js +++ b/projects/hegic/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { token } = require("@project-serum/anchor/dist/cjs/utils"); const { sumTokens } = require("../helper/unwrapLPs"); @@ -10,10 +11,10 @@ const poolsV8888 = { }; const tokens = { - ETH: "0x0000000000000000000000000000000000000000", - WBTC: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - WETH: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - USDC: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + ETH: ADDRESSES.null, + WBTC: ADDRESSES.ethereum.WBTC, + WETH: ADDRESSES.ethereum.WETH, + USDC: ADDRESSES.ethereum.USDC, HEGIC: "0x584bc13c7d411c00c01a62e8019472de68768430", }; @@ -22,7 +23,7 @@ const arbitrum = { hergePayoff: "0x822C0E3aFbCfbD166833F44AD82f28354a57cf28", hergeOperationalTreasury: "0xec096ea6eB9aa5ea689b0CF00882366E92377371", HEGIC: "0x431402e8b9de9aa016c743880e04e517074d8cec", - USDC: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + USDC: ADDRESSES.arbitrum.USDC, hardcoreStakeAndCover: "0x60898dfA3C6e8Ba4998B5f3be25Fb0b0b69d5D5d", hardcoreOperationalTreasury: "0xB0F9F032158510cd4a926F9263Abc86bAF7b4Ab3", }; diff --git a/projects/helio-money/index.js b/projects/helio-money/index.js index 8969efde6b..2a5f63479f 100644 --- a/projects/helio-money/index.js +++ b/projects/helio-money/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require('../helper/unknownTokens') module.exports = { @@ -7,8 +8,19 @@ module.exports = { //[1670544000,"aBNBc to AnkrBNB swap & HAY buyback"] ], bsc: { - tvl: sumTokensExport({ chain: 'bsc', owner: '0x25b21472c073095bebC681001Cbf165f849eEe5E', tokens: [ - '0x52F24a5e03aee338Da5fd9Df68D2b6FAe1178827', // ankrBNB - ] }), + tvl: + sumTokensExport({ + tokensAndOwners: [ + //ankrBNB + ['0x52F24a5e03aee338Da5fd9Df68D2b6FAe1178827', '0x25b21472c073095bebC681001Cbf165f849eEe5E'], + [ADDRESSES.null, '0x25b21472c073095bebC681001Cbf165f849eEe5E'], + //stkBNB + ['0xc2E9d07F66A89c44062459A47a0D2Dc038E4fb16', '0x98CB81d921B8F5020983A46e96595471Ad4E60Be'], + //snBNB + ['0xB0b84D294e0C75A6abe60171b70edEb2EFd14A1B', '0x6F28FeC449dbd2056b76ac666350Af8773E03873'], + //BNBx + ['0x1bdd3Cf7F79cfB8EdbB955f20ad99211551BA275', '0x6ae7073d801a74eE753F19323DF320C8F5Fe2DbC'] + ] + }) } } diff --git a/projects/heliosprime/index.js b/projects/heliosprime/index.js index d24979a194..869446e715 100644 --- a/projects/heliosprime/index.js +++ b/projects/heliosprime/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); @@ -5,7 +6,7 @@ const {getComponents} = require('./abi.json'); const { sumTokens } = require("../helper/unwrapLPs"); const CoverageContract = "0x69c316563414d091c57C7Ec098523e43Baa5E175"; -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7"; +const USDT = ADDRESSES.ethereum.USDT; const EDP = "0x7633da43dfd4ee5a5da99740f077ca9d97aa0d0e" const StakingContract_BMI = "0xDfB820b95EEE42A858f50BEfbF834D2d24621153"; diff --git a/projects/heliswap/index.js b/projects/heliswap/index.js index 1adf5a5251..a6c26debbd 100644 --- a/projects/heliswap/index.js +++ b/projects/heliswap/index.js @@ -44,7 +44,7 @@ const tvl = async () => { data: { data: { poolsConsistingOf }} } = await axios(requestObject); - totalTVL = poolsConsistingOf.reduce((acc, pool) => (isNaN(+pool.tvl)) ? acc : acc + +pool.tvl, 0) + totalTVL = poolsConsistingOf.reduce((acc, pool) => (isNaN(+pool.tvl) || +pool.tvl > 1e8) ? acc : acc + +pool.tvl, 0) return { tether: totalTVL }; }; diff --git a/projects/helmetinsure/index.js b/projects/helmetinsure/index.js index b82417f137..081efa5352 100644 --- a/projects/helmetinsure/index.js +++ b/projects/helmetinsure/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { blockQuery } = require('../helper/http') const sdk = require('@defillama/sdk') const { gql } = require('graphql-request') @@ -12,7 +13,7 @@ const THEGARPH_API = { function transform(str) { switch (str) { case "bsc:0xaf90e457f4359adcc8b37e8df8a27a1ff4c3f561": // SHIB - return "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE" + return ADDRESSES.ethereum.INU case "bsc:0xf218184af829cf2b0019f8e6f0b2423498a36983": // MATH return "0x08d967bb0134f2d07f7cfb6e246680c53927dd30" case "bsc:0xbd2949f67dcdc549c6ebe98696449fa79d988a9f": diff --git a/projects/helper/aave.js b/projects/helper/aave.js index bc9c1f6bc2..744a360af3 100644 --- a/projects/helper/aave.js +++ b/projects/helper/aave.js @@ -1,3 +1,5 @@ +const { getLogs } = require('./cache/getLogs') +const ADDRESSES = require('./coreAssets.json') const sdk = require('@defillama/sdk'); const { default: BigNumber } = require('bignumber.js'); const abi = require('./abis/aave.json'); @@ -30,7 +32,7 @@ async function getV2Reserves(block, addressesProviderRegistry, chain, dataHelper validProtocolDataHelpers = protocolDataHelpers.filter( (helper) => - helper.output !== "0x0000000000000000000000000000000000000000" + helper.output !== ADDRESSES.null ).map(p => p.output); } else { validProtocolDataHelpers = dataHelperAddress @@ -101,7 +103,7 @@ async function getBorrowed(balances, block, chain, v2ReserveTokens, dataHelper, }) } -function aaveChainTvl(chain, addressesProviderRegistry, transformAddressRaw, dataHelperAddresses, borrowed, v3 = false, { abis = {}, oracle, } = {}) { +function aaveChainTvl(chain, addressesProviderRegistry, transformAddressRaw, dataHelperAddresses, borrowed, v3 = false, { abis = {}, oracle, blacklistedTokens = [], } = {}) { return async (timestamp, ethBlock, { [chain]: block }) => { const balances = {} const { transformAddress, fixBalances, v2Atokens, v2ReserveTokens, dataHelper, updateBalances } = await getData({ oracle, chain, block, addressesProviderRegistry, dataHelperAddresses, transformAddressRaw, abis, }) @@ -112,13 +114,19 @@ function aaveChainTvl(chain, addressesProviderRegistry, transformAddressRaw, dat } if (updateBalances) updateBalances(balances) fixBalances(balances) + Object.keys(balances).forEach((key) => { + if (!blacklistedTokens.length) return; + if (blacklistedTokens.some(i => new RegExp(i, 'gi').test(key))) { + delete balances[key] + } + }) return balances } } -function aaveExports(chain, addressesProviderRegistry, transform = undefined, dataHelpers = undefined, { oracle, abis } = {}) { +function aaveExports(chain, addressesProviderRegistry, transform = undefined, dataHelpers = undefined, { oracle, abis, v3 = false, blacklistedTokens = [] } = {}) { return { - tvl: aaveChainTvl(chain, addressesProviderRegistry, transform, dataHelpers, false, undefined, { oracle, abis, }), - borrowed: aaveChainTvl(chain, addressesProviderRegistry, transform, dataHelpers, true, undefined, { oracle, abis }) + tvl: aaveChainTvl(chain, addressesProviderRegistry, transform, dataHelpers, false, v3, { oracle, abis, blacklistedTokens, }), + borrowed: aaveChainTvl(chain, addressesProviderRegistry, transform, dataHelpers, true, v3, { oracle, abis, }) } } @@ -180,7 +188,7 @@ const oracleAbis = { getAssetsPrices: "function getAssetsPrices(address[] assets) view returns (uint256[])", } -function aaveV2Export(registry, { useOracle = false, baseCurrency, baseCurrencyUnit, } = {}) { +function aaveV2Export(registry, { useOracle = false, baseCurrency, baseCurrencyUnit, abis = {}, fromBlock, } = {}) { async function tvl(_, _b, _c, { api }) { const data = await getReservesData(api) @@ -218,8 +226,9 @@ function aaveV2Export(registry, { useOracle = false, baseCurrency, baseCurrencyU } async function getReservesData(api) { + if (fromBlock) return getReservesDataFromBlock(api) const tokens = await api.call({ abi: abiv2.getReservesList, target: registry }) - const data = await api.multiCall({ abi: abiv2.getReserveData, calls: tokens, target: registry, }) + const data = await api.multiCall({ abi: abis.getReserveData ?? abiv2.getReserveData, calls: tokens, target: registry, }) data.forEach((v, i) => v.underlying = tokens[i]) if (useOracle) { let currency = baseCurrency @@ -243,6 +252,18 @@ function aaveV2Export(registry, { useOracle = false, baseCurrency, baseCurrencyU return data } + async function getReservesDataFromBlock(api) { + const logs = await getLogs({ + api, + target: registry, + topics: ['0x3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f'], + fromBlock, + eventAbi: 'event ReserveInitialized (address indexed underlying, address indexed aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress)', + onlyArgs: true, + }) + return logs + } + const abiv2 = { getReservesList: "address[]:getReservesList", getAddressesProvider: "address:getAddressesProvider", diff --git a/projects/helper/abis/morpho.json b/projects/helper/abis/morpho.json index 64a079b0c4..7c74c4bf06 100644 --- a/projects/helper/abis/morpho.json +++ b/projects/helper/abis/morpho.json @@ -6,5 +6,12 @@ "getAllMarkets": "address[]:getAllMarkets", "getTotalMarketSupply": "function getTotalMarketSupply(address _poolTokenAddress) view returns (uint256 p2pSupplyAmount, uint256 poolSupplyAmount)", "getTotalMarketBorrow": "function getTotalMarketBorrow(address _poolTokenAddress) view returns (uint256 p2pBorrowAmount, uint256 poolBorrowAmount)" + }, + "morphoAaveV3": { + "marketsCreated": "address[]:marketsCreated", + "market": "function market(address underlying) returns (tuple( tuple(uint128 poolIndex, uint128 p2pIndex) supply, tuple(uint128 poolIndex, uint128 p2pIndex) borrow) indexes, tuple( tuple(uint256 scaledDelta, uint256 scaledP2PTotal) supply, tuple(uint256 scaledDelta, uint256 scaledP2PTotal) borrow) deltas, address underlying, tuple( bool isP2PDisabled, bool isSupplyPaused, bool isSupplyCollateralPaused, bool isBorrowPaused, bool isWithdrawPaused, bool isWithdrawCollateralPaused, bool isRepayPaused, bool isLiquidateCollateralPaused, bool isLiquidateBorrowPaused, bool isDeprecated) pauseStatues, bool isCollateral, address variableDebtToken, uint32 lastUpdateTimestamp, uint16 reserveFactor, uint16 p2pIndexCursor, address aToken, address stableDebtToken, uint256 idleSupply)" + }, + "pool": { + } } \ No newline at end of file diff --git a/projects/helper/ankr/chainAddresses.js b/projects/helper/ankr/chainAddresses.js index 60cc8a83fb..6f2fdbb2fe 100644 --- a/projects/helper/ankr/chainAddresses.js +++ b/projects/helper/ankr/chainAddresses.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../coreAssets.json') const coinAddresses = { - weth: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", //Ethereum - ftm: "0x4e15361fd6b4bb609fa63c81a2be19d873717870", //Fantom - matic: "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", //Matic - dot: "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", //DOT + weth: ADDRESSES.ethereum.WETH, //Ethereum + ftm: ADDRESSES.ethereum.FTM, //Fantom + matic: ADDRESSES.ethereum.MATIC, //Matic + dot: ADDRESSES.ethereum.MATIC, //DOT avax: "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", //Avalanche }; diff --git a/projects/helper/balances.js b/projects/helper/balances.js index 3f3b60d07b..3e51e08676 100644 --- a/projects/helper/balances.js +++ b/projects/helper/balances.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('./coreAssets.json') const BigNumber = require("bignumber.js"); -const usdtAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"; +const usdtAddress = ADDRESSES.ethereum.USDT; const toUSDT = (value, times = 1e6) => BigNumber(value).times(times).toFixed(0); diff --git a/projects/helper/cache.js b/projects/helper/cache.js index 887b4932bc..7ce6fc4d55 100644 --- a/projects/helper/cache.js +++ b/projects/helper/cache.js @@ -2,6 +2,7 @@ const aws = require('aws-sdk') const sdk = require('@defillama/sdk') const Bucket = "tvl-adapter-cache"; const axios = require('axios') +const graphql = require('./utils/graphql') function getKey(project, chain) { return `cache/${project}/${chain}.json` @@ -87,6 +88,27 @@ async function configPost(project, endpoint, data) { } } + +async function cachedGraphQuery(project, endpoint, query, { variables } = {}) { + if (!project || !endpoint) throw new Error('Missing parameters') + const key = 'config-cache' + const cacheKey = getKey(key, project) + if (!configCache[cacheKey]) configCache[cacheKey] = _cachedGraphQuery() + return configCache[cacheKey] + + async function _cachedGraphQuery() { + try { + const json = await graphql.request(endpoint, query, { variables }) + await setCache(key, project, json) + return json + } catch (e) { + // sdk.log(e) + sdk.log(project, 'tryng to fetch from cache, failed to fetch data from endpoint:', endpoint) + return getCache(key, project) + } + } +} + module.exports = { - getCache, setCache, getConfig, configPost, + getCache, setCache, getConfig, configPost, cachedGraphQuery, } \ No newline at end of file diff --git a/projects/helper/cache/getLogs.js b/projects/helper/cache/getLogs.js index 4b0b9d63ca..5945114250 100644 --- a/projects/helper/cache/getLogs.js +++ b/projects/helper/cache/getLogs.js @@ -7,7 +7,7 @@ const cacheFolder = 'logs' async function getLogs({ target, topic, keys = [], fromBlock, toBlock, topics, - api, eventAbi, onlyArgs = false, extraKey, }) { + api, eventAbi, onlyArgs = false, extraKey, skipCache = false, }) { if (!api) throw new Error('Missing sdk api object!') if (!target) throw new Error('Missing target!') if (!fromBlock) throw new Error('Missing fromBlock!') @@ -26,7 +26,7 @@ async function getLogs({ target, } target = target.toLowerCase() - const key = extraKey ? `${chain}/${target}-${extraKey}` : `${chain}/${target}` + const key = extraKey ? `${chain}/${target}-${extraKey}` : `${chain}/${target}` let cache = await _getCache(key) let response @@ -71,18 +71,23 @@ async function getLogs({ target, return true }) - await setCache(cacheFolder, key, cache) + if (!skipCache) + await setCache(cacheFolder, key, cache) return cache.logs } async function _getCache(key) { + const defaultRes = { + logs: [] + } + + if (skipCache) return defaultRes + let cache = await getCache(cacheFolder, key) // set initial structure if it is missing / reset if from block is moved to something older if (!cache.logs || fromBlock < cache.fromBlock) { - cache = { - logs: [] - } + return defaultRes } return cache @@ -91,5 +96,5 @@ async function getLogs({ target, module.exports = { getLogs, - getAddress: s=>"0x"+s.slice(26, 66), + getAddress: s => "0x" + s.slice(26, 66), } \ No newline at end of file diff --git a/projects/helper/cache/sumUnknownTokens.js b/projects/helper/cache/sumUnknownTokens.js index 7a05d1e584..c7dae15a2f 100644 --- a/projects/helper/cache/sumUnknownTokens.js +++ b/projects/helper/cache/sumUnknownTokens.js @@ -358,7 +358,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, + log_coreAssetPrices = [], log_minTokenValue = 1e6, owners = [], lps = [], useDefaultCoreAssets = false, cache = {}, resolveLP = false, abis, }) { if (api) { chain = api.chain ?? chain @@ -377,7 +377,7 @@ async function sumUnknownTokens({ api, tokensAndOwners = [], balances, tokensAndOwners = tokens.map(t => [t, owner]) tokensAndOwners = tokensAndOwners.filter(t => !blacklist.includes(t[0])) await sumTokens2({ api, balances, chain, block, tokensAndOwners, skipFixBalances: true, resolveLP, }) - const { updateBalances, } = await getTokenPrices({ cache, coreAssets, lps: [...tokensAndOwners.map(t => t[0]), ...lps,], chain, block, restrictTokenRatio, blacklist, log_coreAssetPrices, log_minTokenValue, minLPRatio }) + const { updateBalances, } = await getTokenPrices({ cache, coreAssets, lps: [...tokensAndOwners.map(t => t[0]), ...lps,], chain, block, restrictTokenRatio, blacklist, log_coreAssetPrices, log_minTokenValue, minLPRatio, abis, }) await updateBalances(balances, { skipConversion, onlyLPs }) const fixBalances = await getFixBalances(chain) fixBalances(balances) diff --git a/projects/helper/cache/uniswap.js b/projects/helper/cache/uniswap.js index a5fb16a5a5..933eda835e 100644 --- a/projects/helper/cache/uniswap.js +++ b/projects/helper/cache/uniswap.js @@ -2,7 +2,7 @@ const uniswapAbi = require('../abis/uniswap') const { getCache, setCache, } = require('../cache'); const { transformBalances, transformDexBalances, } = require('../portedTokens') -const { getCoreAssets, } = require('../tokenMapping') +const { getCoreAssets, normalizeAddress, } = require('../tokenMapping') const { sliceIntoChunks, sleep } = require('../utils') const sdk = require('@defillama/sdk') @@ -22,13 +22,13 @@ function getUniTVL({ coreAssets, blacklist = [], factory, blacklistedTokens, let updateCache = false const abi = { ...uniswapAbi, ...abis } - factory = factory.toLowerCase() - blacklist = (blacklistedTokens || blacklist).map(i => i.toLowerCase()) return async (_, _b, cb, { api, chain } = {}) => { if (!chain) chain = _chain + factory = normalizeAddress(factory, chain) + blacklist = (blacklistedTokens || blacklist).map(i => normalizeAddress(i, chain)) const key = `${factory}-${chain}` if (!coreAssets && useDefaultCoreAssets) @@ -142,7 +142,8 @@ function getUniTVL({ coreAssets, blacklist = [], factory, blacklistedTokens, // if (cache.pairs.includes(null) || cache.token0s.includes(null) || cache.token1s.includes(null)) // cache.pairs = undefined } - if (!cache.pairs || (hasStablePools && !cache.symbols)) { + + if (!cache.pairs || (hasStablePools && (!cache.symbols || !cache.symbols.length))) { cache = { pairs: [], token0s: [], diff --git a/projects/helper/cache/vestingHelper.js b/projects/helper/cache/vestingHelper.js index 09e59ed71e..f64477caf7 100644 --- a/projects/helper/cache/vestingHelper.js +++ b/projects/helper/cache/vestingHelper.js @@ -16,7 +16,8 @@ async function vestingHelper({ tokens = getUniqueAddresses(tokens) blacklist = getUniqueAddresses(blacklist) tokens = tokens.filter(t => !blacklist.includes(t)) - const chunks = sliceIntoChunks(tokens, 4000) + const chunkSize = chain === 'polygon' ? 250 : 500 // polygon has a lower gas limit + const chunks = sliceIntoChunks(tokens, chunkSize) const finalBalances = {} for (let i = 0; i < chunks.length; i++) { log('resolving for %s/%s of total tokens: %s (chain: %s)', i + 1, chunks.length, tokens.length, chain) diff --git a/projects/helper/cex.js b/projects/helper/cex.js index ef97cee71b..12bdbc7cd5 100644 --- a/projects/helper/cex.js +++ b/projects/helper/cex.js @@ -1,4 +1,4 @@ -const { tokensBare, } = require('./tokenMapping') +const ADDRESSES = require('./coreAssets.json') const { nullAddress } = require('./unwrapLPs') const { sumTokensExport } = require('../helper/sumTokens') const sdk = require('@defillama/sdk') @@ -6,15 +6,15 @@ const sdk = require('@defillama/sdk') const defaultTokens = { ethereum: [ nullAddress, - tokensBare.usdt, - tokensBare.usdc, - tokensBare.link, - tokensBare.dai, - tokensBare.wbtc, - '0x0000000000085d4780B73119b644AE5ecd22b376', // TUSD - '0x4fabb145d64652a948d72533023f6e7a623c7c53', // BUSD - '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0', // MATIC - '0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE', // SHIBA INU + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.LINK, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.TUSD, // TUSD + ADDRESSES.ethereum.BUSD, // BUSD + ADDRESSES.ethereum.MATIC, // MATIC + ADDRESSES.ethereum.INU, // SHIBA INU '0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b', // CRO '0x9be89d2a4cd102d8fecc6bf9da793be995c22541', // BBTC '0x7a58c0be72be218b41c608b7fe7c5bb630736c71', // PEOPLE @@ -23,12 +23,12 @@ const defaultTokens = { '0x111111111117dc0aa78b770fa6a738034120c302', // 1INCH '0x3597bfd533a99c9aa083587b074434e61eb0a258', // DENT '0x8a2279d4a90b6fe1c4b30fa660cc9f926797baa2', // CHR - '0x5a98fcbea516cf06857215779fd812ca3bef1b32', // LIDO - '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', // MKR - '0xd533a949740bb3306d119cc777fa900ba034cd52', // CRV + ADDRESSES.ethereum.LIDO, // LIDO + ADDRESSES.ethereum.MKR, // MKR + ADDRESSES.ethereum.CRV, // CRV '0x92d6c1e31e14520e676a687f0a93788b716beff5', // DYDX - '0x4e15361fd6b4bb609fa63c81a2be19d873717870', // FTM - '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2', // SUSHI + ADDRESSES.ethereum.FTM, // FTM + ADDRESSES.ethereum.SUSHI, // SUSHI '0x15d4c048f83bd7e37d49ea4c83a07267ec4203da', // GALA '0x3845badade8e6dff049820680d1f14bd3903a5d0', // SAND '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', // MANA @@ -40,8 +40,8 @@ const defaultTokens = { '0xc18360217d8f7ab5e7c516566761ea12ce7f9d72', // ENS '0x45804880de22913dafe09f4980848ece6ecbaf78', // PAXG '0xf411903cbc70a74d22900a5de66a2dda66507255', // VRA - '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', // UNI - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', // AAVE + ADDRESSES.ethereum.UNI, // UNI + ADDRESSES.ethereum.AAVE, // AAVE '0xc944e90c64b2c07662a292be6244bdf05cda44a7', // GRT '0x4a220e6096b25eadb88358cb44068a3248254675', // QNT '0xf34960d9d60be18cC1D5Afc1A6F012A723a28811', // KCS @@ -58,7 +58,7 @@ const defaultTokens = { '0xC581b735A1688071A1746c968e0798D642EDE491', //EURO-T '0x4da27a545c0c5b758a6ba100e3a049001de870f5', //aAAVE '0xa06bc25b5805d5f8d82847d191cb4af5a3e873e0', //aLINK - '0xae7ab96520de3a18e5e111b5eaab095312d7fe84', //stETH + ADDRESSES.ethereum.STETH, //stETH '0x9ee91f9f426fa633d227f7a9b000e28b9dfd8599', //STmatic '0xc00e94cb662c3520282e6f5717214004a7f26888', //COMP '0x1c48f86ae57291f7686349f12601910bd8d470bb', //USDK @@ -68,45 +68,67 @@ const defaultTokens = { '0x6be61833fc4381990e82d7d4a9f4c9b3f67ea941', // HTB (Hotbit cex token) '0x75231f58b43240c9718dd58b4967c5114342a86c', // OKB (OKX cex token) '0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3', // LEO (bitfinex cex token) - '0xB8c77482e45F1F44dE1745F52C74426C631bDD52', // WBNB + ADDRESSES.ethereum.BNB, // WBNB '0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206', // NEXO ,(Nexo cex token) '0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44', //kp3r '0xcf0c122c6b73ff809c693db761e7baebe62b6a2e', //FLOKI ETH CHAIN + '0x11eef04c884e24d9b7b4760e7476d06ddf797f36', //MX TOKEN, mecx exchange token + '0xa4be4cDC552891a6702E1aE9645EF445179a4463', //FON + '0x356A5160F2B34BC8d88FB084745465eBBbed0174', //invi + '0x9813037ee2218799597d83D4a5B6F3b6778218d9', //bone + '0xf3b9569F82B18aEf890De263B84189bd33EBe452',//caw + '0x04abeda201850ac0124161f037efd70c74ddc74c',//nest + '0x9d71CE49ab8A0E6D2a1e7BFB89374C9392FD6804',//nvir + '0x5b649C07E7Ba0a1C529DEAabEd0b47699919B4a2',//sgt + '0x4385328cc4d643ca98dfea734360c0f596c83449', + '0xbc396689893d065f41bc2c6ecbee5e0085233447', //perp + '0xd7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b', //NXM + '0xaaef88cea01475125522e117bfe45cf32044e238', // GF + '0x949d48eca67b17269629c7194f4b727d4ef9e5d6', // MC + '0xbb0e17ef65f82ab018d8edd776e8dd940327b28b', // AXS + '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0', // FXS + '0xd417144312dbf50465b1c641d016962017ef6240',// cqt + '0xcb84d72e61e383767c4dfeb2d8ff7f4fb89abc6e', //VEGA + '0xcccd1ba9f7acd6117834e0d28f25645decb1736a', //ecox ], tron: [ nullAddress, - 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', // USDT - 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8', // USDC + ADDRESSES.tron.USDT, // USDT + ADDRESSES.tron.USDC, // USDC + 'TFptbWaARrWTX5Yvy3gNG5Lm8BmhPx82Bt', //wbt + ADDRESSES.tron.TUSD ], polygon: [ nullAddress, - '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', // USDT - '0x0000000000000000000000000000000000001010', // WMATIC - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH - '0xb5c064f955d8e7f38fe0460c556a72987494ee17', // QUICK - '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', //WBTC - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', //USDC - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', //DAI + ADDRESSES.polygon.USDT, // USDT + ADDRESSES.polygon.WMATIC_1, // WMATIC + ADDRESSES.polygon.WETH_1, // WETH + ADDRESSES.polygon.QUICK, // QUICK + ADDRESSES.polygon.WBTC, //WBTC + ADDRESSES.polygon.USDC, //USDC + ADDRESSES.polygon.DAI, //DAI + '0x2AB0e9e4eE70FFf1fB9D67031E44F6410170d00e', //xen + '0x0169ec1f8f639b32eec6d923e24c2a2ff45b9dd6', //ALGB ], algorand: [], solana: [ - 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC - 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', // USDT + ADDRESSES.solana.USDC, // USDC + ADDRESSES.solana.USDT, // USDT ], bsc: [ nullAddress, - '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', // BTCB - '0x2170ed0880ac9a755fd29b2688956bd959f933f8', // BTCE + ADDRESSES.bsc.BTCB, // BTCB + ADDRESSES.bsc.ETH, // BTCE '0xfd5840cd36d94d7229439859c0112a4185bc0255', // vUSDT - '0x250632378e573c6be1ac2f97fcdf00515d0aa91b', // BETH + ADDRESSES.bsc.BETH, // BETH '0x95c78222b3d6e262426483d42cfa53685a67ab9d', // vBUSD '0x7083609fce4d1d8dc0c979aab8c869ea2c873402', // BDOT '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82', // CAKE - '0x55d398326f99059ff775485246999027b3197955', // BUSDT - '0xe9e7cea3dedca5984780bafc599bd69add087d56', // BUSD + ADDRESSES.bsc.USDT, // BUSDT + ADDRESSES.bsc.BUSD, // BUSD '0x1d2f0da169ceb9fc7b3144628db156f3f6c60dbe', // BXRP - '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', // B-USDC - '0x14016e85a25aeb13065688cafb43044c2ef86784', // B-TUSD + ADDRESSES.bsc.USDC, // B-USDC + ADDRESSES.bsc.BTUSD, // B-TUSD '0x2859e4544c4bb03966803b044a93563bd2d0dd4d', // SHIB '0x3ee2200efb3400fabb9aacf31297cbdd1d435d47', // ADA '0x4691937a7508860f876c9c0a2a617e7d9e945d4b', // WOO @@ -116,6 +138,7 @@ const defaultTokens = { '0x352Cb5E19b12FC216548a2677bD0fce83BaE434B', // BTT '0xAD29AbB318791D579433D831ed122aFeAf29dcfe', // FTM '0x02ff5065692783374947393723dba9599e59f591',// yoshi + '0x40af3827f39d0eacbf4a168f8d4ee67c121d11c9', //TUSD ], eos: [ ["eosio.token", "EOS", "eos"], @@ -123,28 +146,29 @@ const defaultTokens = { ], arbitrum: [ nullAddress, - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', // DAI + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI + '0x09e18590e8f76b6cf471b3cd75fe1a1a9d2b2c2b' //aidoge ], avax: [ nullAddress, - '0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7', // USDT - '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC - '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', // DAI + ADDRESSES.avax.USDt, // USDT + ADDRESSES.avax.USDC, // USDC + ADDRESSES.avax.DAI, // DAI '0xabc9547b534519ff73921b1fba6e672b5f58d083', // WOO - '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', //USDC.e + ADDRESSES.avax.USDC_e, //USDC.e ], near: [ 'usdt.tether-token.near', ], optimism: [ nullAddress, - '0x4200000000000000000000000000000000000042', //OP - '0x94b008aa00579c1307b0ef2c499ad98a8ce58e58', //USDT - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', //USDC - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1' // DAI + ADDRESSES.optimism.OP, //OP + ADDRESSES.optimism.USDT, //USDT + ADDRESSES.optimism.USDC, //USDC + ADDRESSES.optimism.DAI // DAI ], } diff --git a/projects/helper/chain/algorand.js b/projects/helper/chain/algorand.js index 62b53ea4a1..949dd5a9ae 100644 --- a/projects/helper/chain/algorand.js +++ b/projects/helper/chain/algorand.js @@ -4,17 +4,18 @@ const axios = require('axios') const { getApplicationAddress } = require('./algorandUtils/address') const { RateLimiter } = require("limiter"); const coreAssets = require('../coreAssets.json') +const ADDRESSES = coreAssets const sdk = require('@defillama/sdk'); const { default: BigNumber } = require('bignumber.js'); const stateCache = {} const accountCache = {} const assetCache = {} -const geckoMapping = coreAssets.algorand ?? {} +const geckoMapping = Object.values(coreAssets.algorand) const axiosObj = axios.create({ - baseURL: 'https://algoindexer.algoexplorerapi.io', + baseURL: "https://mainnet-idx.algonode.cloud", timeout: 300000, -}) +}); const indexerLimiter = new RateLimiter({ tokensPerInterval: 10, interval: "second" }); @@ -132,10 +133,18 @@ async function getAccountInfo(accountId) { const tokens = { usdc: 31566704, + usdt: 312769, + wBtc: 1058926737, + wEth: 887406851, + wBtcGoBtcLp: 1058934626, + wEthGoEthLp: 1058935051, + usdtGoUsdLp: 1081978679, goUsd: 672913181, usdcGoUsdLp: 885102318, gard: 684649988, -} + gold$: 246516580, + silver$: 246519683, +}; // store all asset ids as string Object.keys(tokens).forEach(t => tokens[t] = '' + tokens[t]) @@ -163,10 +172,10 @@ async function getPriceFromAlgoFiLP(lpAssetId, unknownAssetId) { const unknownAssetQuantity = lpInfo.reserveInfo.assets.find(i => i['asset-id'] === '' + unknownAssetId).amount for (const i of lpInfo.reserveInfo.assets) { const id = i['asset-id'] - if (geckoMapping[id]) { + if (geckoMapping.includes(id)) { return { price: i.amount / unknownAssetQuantity, - geckoId: geckoMapping[id], + geckoId: 'algorand:'+id, decimals: 0, } } @@ -187,4 +196,4 @@ module.exports = { searchAccounts: withLimiter(searchAccounts), getAppGlobalState: getAppGlobalState, getPriceFromAlgoFiLP, -} +} \ No newline at end of file diff --git a/projects/helper/chain/aptos.js b/projects/helper/chain/aptos.js index 89d130991a..d820b393e8 100644 --- a/projects/helper/chain/aptos.js +++ b/projects/helper/chain/aptos.js @@ -2,24 +2,24 @@ const sdk = require('@defillama/sdk') const http = require('../http') -const env = require('../env') +const { getEnv } = require('../env') const coreTokensAll = require('../coreAssets.json') const { transformBalances } = require('../portedTokens') const { log, getUniqueAddresses } = require('../utils') -const coreTokens = coreTokensAll.aptos +const coreTokens = Object.values(coreTokensAll.aptos) -const endpoint = env.APTOS_RPC || "https://aptos-mainnet.pontem.network" +const endpoint = () => getEnv('APTOS_RPC') async function aQuery(api) { - return http.get(`${endpoint}${api}`) + return http.get(`${endpoint()}${api}`) } async function getResources(account) { const data = [] let lastData let cursor do { - let url = `${endpoint}/v1/accounts/${account}/resources?limit=9999` + let url = `${endpoint()}/v1/accounts/${account}/resources?limit=9999` if (cursor) url += '&start=' + cursor const res = await http.getWithMetadata(url) lastData = res.data @@ -31,14 +31,14 @@ async function getResources(account) { } async function getResource(account, key) { - let url = `${endpoint}/v1/accounts/${account}/resource/${key}` + let url = `${endpoint()}/v1/accounts/${account}/resource/${key}` const { data } = await http.get(url) return data } async function getCoinInfo(address) { if (address === '0x1') return { data: { decimals: 8, name: 'Aptos' } } - return http.get(`${endpoint}/v1/accounts/${address}/resource/0x1::coin::CoinInfo%3C${address}::coin::T%3E`) + return http.get(`${endpoint()}/v1/accounts/${address}/resource/0x1::coin::CoinInfo%3C${address}::coin::T%3E`) } function dexExport({ @@ -95,12 +95,33 @@ async function sumTokens({ balances = {}, owners = [] }) { } async function getTableData({ table, data }) { - const response = await http.post(`${endpoint}/v1/tables/${table}/item`, data) + const response = await http.post(`${endpoint()}/v1/tables/${table}/item`, data) return response } +async function function_view({ functionStr, type_arguments = [], args = [] }) { + const response = await http.post(`${endpoint()}/v1/view`, { "function": functionStr, "type_arguments": type_arguments, arguments:args }) + return response +} + +function hexToString(hexString) { + if (hexString.startsWith('0x')) hexString = hexString.slice(2); + const byteLength = hexString.length / 2; + const byteArray = new Uint8Array(byteLength); + + for (let i = 0; i < byteLength; i++) { + const hexByte = hexString.substr(i * 2, 2); + byteArray[i] = parseInt(hexByte, 16); + } + + const decoder = new TextDecoder('utf-8'); + const stringValue = decoder.decode(byteArray); + + return stringValue +} + module.exports = { - endpoint, + endpoint: endpoint(), dexExport, aQuery, getCoinInfo, @@ -109,4 +130,6 @@ module.exports = { coreTokens, sumTokens, getTableData, + function_view, + hexToString, }; diff --git a/projects/helper/chain/bitcoin.js b/projects/helper/chain/bitcoin.js index bcf8cbe23e..b2a8563aeb 100644 --- a/projects/helper/chain/bitcoin.js +++ b/projects/helper/chain/bitcoin.js @@ -1,6 +1,6 @@ const sdk = require('@defillama/sdk') const { get } = require('../http') -const env = require('../env') +const { getEnv } = require('../env') const url = addr => 'https://blockstream.info/api/address/' + addr @@ -34,7 +34,7 @@ async function getBalance(addr, timestamp) { if (!timestamp || (now - timestamp) < delay) return balance - let endpoint = `https://btc.getblock.io/${env.GETBLOCK_KEY}/mainnet/blockbook/api/v2/balancehistory/${addr}?fiatcurrency=btc&groupBy=86400&from=${timestamp}` + let endpoint = `https://btc.getblock.io/${getEnv('GETBLOCK_KEY')}/mainnet/blockbook/api/v2/balancehistory/${addr}?fiatcurrency=btc&groupBy=86400&from=${timestamp}` const response = await get(endpoint) response.forEach(({ sent, received }) => balance += sent / 1e8 - received / 1e8) diff --git a/projects/helper/chain/cardano/blockfrost.js b/projects/helper/chain/cardano/blockfrost.js index d2d5cb8845..eb6d0d8b43 100644 --- a/projects/helper/chain/cardano/blockfrost.js +++ b/projects/helper/chain/cardano/blockfrost.js @@ -3,7 +3,7 @@ const axios = require('axios') const axiosObj = axios.create({ baseURL: 'https://cardano-mainnet.blockfrost.io/api/v0', headers: { - 'project_id': 'mainnet9mqP0lhGpRfqcUnVjOFaTSK67Z9UdZMM', + 'project_id': 'mai'+'nnetcxT8VaeCgVMzMTSe'+'zZijWlVkyh6XytpS', 'Content-Type': 'application/json' }, timeout: 300000, diff --git a/projects/helper/chain/cardano/index.js b/projects/helper/chain/cardano/index.js index c23e067105..5dee9cb3c3 100644 --- a/projects/helper/chain/cardano/index.js +++ b/projects/helper/chain/cardano/index.js @@ -3,7 +3,7 @@ const axios = require('axios') const axiosObj = axios.create({ baseURL: 'https://cardano-mainnet.blockfrost.io/api/v0', headers: { - 'project_id': 'mainnet9mqP0lhGpRfqcUnVjOFaTSK67Z9UdZMM', + 'project_id': 'mai'+'nnetcxT8Vae'+'CgVMzMTSezZijWlVkyh6XytpS', 'Content-Type': 'application/json' }, timeout: 300000, diff --git a/projects/helper/chain/cosmos.js b/projects/helper/chain/cosmos.js index 75fe59eee2..65de317ef8 100644 --- a/projects/helper/chain/cosmos.js +++ b/projects/helper/chain/cosmos.js @@ -10,29 +10,37 @@ const { log } = require("../utils"); // https://cosmos-chain.directory/chains/cosmoshub // https://cosmos-chain.directory/chains const endPoints = { - crescent: "https://mainnet.crescent.network:1317", osmosis: "https://lcd.osmosis.zone", cosmos: "https://cosmoshub-lcd.stakely.io", - kujira: "https://lcd.kaiyo.kujira.setten.io", + kujira: "https://rest.cosmos.directory/kujira", comdex: "https://rest.comdex.one", - terra: "https://terraclassic-lcd-server-01.stakely.io", - terra2: "https://phoenix-lcd.terra.dev", + terra: "https://rest.cosmos.directory/terra", + terra2: "https://rest.cosmos.directory/terra2", umee: "https://umee-api.polkachu.com", orai: "https://lcd.orai.io", juno: "https://lcd-juno.cosmostation.io", - cronos: 'https://lcd-crypto-org.cosmostation.io', - injective: 'https://lcd-injective.whispernode.com:443', -} + cronos: "https://lcd-crypto-org.cosmostation.io", + chihuahua: "https://rest.cosmos.directory/chihuahua", + injective: "https://lcd-injective.whispernode.com:443", + migaloo: "https://migaloo-api.polkachu.com", + fxcore: "https://fx-rest.functionx.io", + xpla: "https://dimension-lcd.xpla.dev", + kava: "https://api2.kava.io", + neutron: "https://rest-kralum.neutron-1.neutron.org", + quasar: "https://quasar-api.polkachu.com", + gravitybridge: "https://rest.cosmos.directory/gravitybridge", +}; const chainSubpaths = { crescent: "crescent", comdex: "comdex", umee: "umee", + kava: "kava", }; function getEndpoint(chain) { - if (!endPoints[chain]) throw new Error("Chain not found: "+ chain); + if (!endPoints[chain]) throw new Error("Chain not found: " + chain); return endPoints[chain]; } @@ -42,6 +50,7 @@ async function query(url, block, chain) { if (block !== undefined) { endpoint += `&height=${block - (block % 100)}`; } + console.log(endpoint); return (await axios.get(endpoint)).data.result; } @@ -64,24 +73,27 @@ async function queryV1Beta1({ chain, paginationKey, block, url } = {}) { } async function getTokenBalance({ token, owner, block, chain }) { - let denom = token.native_token?.denom - if (denom) return getDenomBalance({denom, owner, block, chain,}) - token = token.token.contract_addr - return getBalance({ token, owner, block, chain, }) + let denom = token.native_token?.denom; + if (denom) return getDenomBalance({ denom, owner, block, chain }); + token = token.token.contract_addr; + return getBalance({ token, owner, block, chain }); } function getToken(token) { - let denom = token.native_token?.denom - return denom ? denom : token.token.contract_addr + let denom = token.native_token?.denom; + return denom ? denom : token.token.contract_addr; } - async function getBalance({ token, owner, block, chain } = {}) { + const data = await queryContract({ + contract: token, + block, + chain, + data: { + balance: { address: owner }, + }, + }); - const data = await queryContract({ contract: token, block, chain, data: { - balance: { address: owner } - }}) - return Number(data.balance); } @@ -134,17 +146,9 @@ async function lpMinter({ token, block, chain } = {}) { async function queryContract({ contract, chain, data }) { if (typeof data !== "string") data = JSON.stringify(data); data = Buffer.from(data).toString("base64"); - if (chain === "terra") { - let path = `${getEndpoint( - chain - )}/terra/wasm/v1beta1/contracts/${contract}/store?query_msg=${data}`; - return (await axios.get(path)).data.query_result; - } return ( await axios.get( - `${getEndpoint( - chain - )}/cosmwasm/wasm/v1/contract/${contract}/smart/${data}` + `${getEndpoint(chain)}/cosmwasm/wasm/v1/contract/${contract}/smart/${data}` ) ).data.data; } @@ -189,7 +193,8 @@ async function queryContractStore({ return query(url, block, chain); } -async function sumTokens({ balances = {}, owners = [], chain }) { +async function sumTokens({ balances = {}, owners = [], chain, owner }) { + if (owner) owners = [owner] log(chain, "fetching balances for ", owners.length); let parallelLimit = 25; @@ -205,6 +210,7 @@ module.exports = { endPoints, totalSupply, getBalance, + getBalance2, getDenomBalance, unwrapLp, query, diff --git a/projects/helper/chain/elrond.js b/projects/helper/chain/elrond.js index ea8bd03068..c489ccff68 100644 --- a/projects/helper/chain/elrond.js +++ b/projects/helper/chain/elrond.js @@ -1,75 +1,93 @@ -const { get, graphQuery } = require('../http') -const { getCoreAssets, tokens: TOKENS } = require('../tokenMapping') +const ADDRESSES = require('../coreAssets.json') +const { get } = require('../http') const { transformBalances } = require('../portedTokens') const sdk = require('@defillama/sdk') -const chain = 'elrond' +const { post } = require('../http') +const { getEnv } = require('../env') -const API_HOST = 'https://api.multiversx.com' -const MAIAR_GRAPH = 'http://graph.xexchange.com/graphql' -const unknownTokenList = ["CYBER-489c1c", "CPA-97530a"] -let prices +const call = async ({ target, abi, params = [], responseTypes = [] }) => { + const data = await post(getEnv('MULTIVERSX_RPC') + '/query', { scAddress: target, funcName: abi, args: params, }) -async function getTokenPrices() { - if (!prices) prices = _getPrices() - return prices + const response = data.returnData.map(parseResponses) + return responseTypes.length === 1 ? response[0] : response - async function _getPrices() { - const query = `{ - tokens (identifiers: ${JSON.stringify(unknownTokenList)}){ - price - decimals - derivedEGLD - identifier - } - }` - const { tokens } = await graphQuery(MAIAR_GRAPH, query) - const res = {} - tokens.forEach(i => res[i.identifier] = i.derivedEGLD * 1e18/(10 ** i.decimals)) - return res + // https://github.com/multiversx/mx-sdk-js-core/blob/main/src/smartcontracts/resultsParser.ts + function parseResponses(item, idx) { + const buffer = Buffer.from(item || "", "base64") + switch (responseTypes[idx]) { + case 'number': return parseNumber(buffer) + default: throw new Error('Unknown/unsupported data type') + } } -} + + function parseNumber(buffer) { + // https://github.com/juanelas/bigint-conversion/blob/master/src/ts/index.ts#L63 + buffer = new Uint8Array(buffer) + let bits = 8n + + let ret = 0n + for (const i of buffer.values()) { + const bi = BigInt(i) + ret = (ret << bits) + bi + } + return ret.toString() + } +}; + +const chain = 'elrond' async function getElrondBalance(address) { - const { data: { account: { balance } } } = await get(`${API_HOST}/address/${address}`) + const { data: { account: { balance } } } = await get(`${getEnv('MULTIVERSX_RPC')}/address/${address}`) return balance } +const nullAddress = ADDRESSES.null -async function getTokens({ address, balances = {}, tokens = [], blacklistedTokens = [] }) { - const prices = await getTokenPrices() - const coreAssets = new Set(getCoreAssets('elrond')) - const res = await get(`${API_HOST}/accounts/${address}/tokens?size=1000`) +async function getTokens({ address, balances = {}, tokens = [], blacklistedTokens = [], whitelistedTokens = [], }) { + const res = await get(`${getEnv('MULTIVERSX_RPC')}/accounts/${address}/tokens?size=1000`) res.filter(i => i.type === 'FungibleESDT') .forEach(i => { const token = i.identifier if (tokens.length && !tokens.includes(token)) return; // sum only whitelistedTokens + if (whitelistedTokens.length && !whitelistedTokens.includes(token)) return; // sum only whitelistedTokens if (blacklistedTokens.includes(token)) return; // skip blacklisted tokens - if (!coreAssets.has(token)) { - if (i.valueUsd) - return sdk.util.sumSingleBalance(balances, TOKENS.usdt, i.valueUsd * 1e6) - - if (prices[token]) - return sdk.util.sumSingleBalance(balances, TOKENS.null, (prices[token] * i.balance).toFixed(0), chain) - } - return sdk.util.sumSingleBalance(balances, token, i.balance / (10 ** i.decimals), chain) + return sdk.util.sumSingleBalance(balances, token, i.balance, chain) }) return balances } -async function sumTokens({ owners = [], tokens = [], balances = {}, blacklistedTokens = [], tokensAndOwners = []}) { +async function sumTokens({ owners = [], tokens = [], balances = {}, blacklistedTokens = [], tokensAndOwners = [], whitelistedTokens = [] }) { if (tokensAndOwners.length) { - await Promise.all(tokensAndOwners.map(([token, owner]) => sumTokens({ owners: [owner], tokens: [token], balances, blacklistedTokens, }))) + await Promise.all(tokensAndOwners.map(([token, owner]) => sumTokens({ owners: [owner], tokens: [token], balances, blacklistedTokens, whitelistedTokens, }))) return balances } - await Promise.all(owners.map(i => getTokens({ address: i, balances, tokens, blacklistedTokens, }))) - if (!tokens.length || tokens.includes(TOKENS.null)) + await Promise.all(owners.map(i => getTokens({ address: i, balances, tokens, blacklistedTokens, whitelistedTokens, }))) + if (!tokens.length || tokens.includes(nullAddress)) await Promise.all(owners.map(async i => { const bal = await getElrondBalance(i) - sdk.util.sumSingleBalance(balances, TOKENS.null, bal, chain) + sdk.util.sumSingleBalance(balances, nullAddress, bal, chain) })) return transformBalances(chain, balances) } +async function getNFTs(address) { + const res = await get(`${getEnv('MULTIVERSX_RPC')}/accounts/${address}/nfts?size=1000`) + return res +} + +async function getTokenData(token) { + const data = await get(`https://api.multiversx.com/tokens/${token}`) + return data +} + +async function sumTokensExport(...args) { + return () => sumTokens(...args) +} + module.exports = { sumTokens, + call, + getNFTs, + getTokenData, + sumTokensExport, } \ No newline at end of file diff --git a/projects/helper/chain/ergo.js b/projects/helper/chain/ergo.js new file mode 100644 index 0000000000..1ca8efd45e --- /dev/null +++ b/projects/helper/chain/ergo.js @@ -0,0 +1,45 @@ +const ADDRESSES = require('../coreAssets.json') +const axios = require("axios") +const sdk = require('@defillama/sdk') +const chain = 'ergo' + +const API_HOST = 'https://api.ergoplatform.com/api/v1' + +const nullAddress = ADDRESSES.null + +async function queryTree({ address, params = {}}) { + const { data } = await axios.get(`${API_HOST}/boxes/unspent/byErgoTree/${address}`, { + params, + }) + return data +} + +async function getTokens({ address, balances = {}, tokens = [], blacklistedTokens = [] }) { + const { data: { confirmed: { nanoErgs, tokens: tokenData}}} = await axios.get(`${API_HOST}/addresses/${address}/balance/total`) + tokenData.push({ tokenId: nullAddress, amount: nanoErgs ?? 0 }) + tokenData.forEach(({ tokenId, amount }) => { + if (tokens.length && !tokens.includes(tokenId)) return; // sum only whitelistedTokens + if (blacklistedTokens.includes(tokenId)) return; // skip blacklisted tokens + sdk.util.sumSingleBalance(balances, tokenId, amount, chain) + }) +} + +async function sumTokens({ owners = [], tokens = [], balances = {}, blacklistedTokens = [], tokensAndOwners = [], owner,}) { + if (owner) owners = [owner] + if (tokensAndOwners.length) { + await Promise.all(tokensAndOwners.map(([token, owner]) => sumTokens({ owners: [owner], tokens: [token], balances, blacklistedTokens, }))) + return balances + } + + await Promise.all(owners.map(i => getTokens({ address: i, balances, tokens, blacklistedTokens, }))) + return balances +} + +function sumTokensExport(args) { + return () => sumTokens(args) +} + +module.exports = { + sumTokens, + sumTokensExport, +} \ No newline at end of file diff --git a/projects/helper/chain/injective.js b/projects/helper/chain/injective.js index 73bc86e28d..c482ba2315 100644 --- a/projects/helper/chain/injective.js +++ b/projects/helper/chain/injective.js @@ -32,7 +32,7 @@ async function getOrders({ type = TYPES.SPOT, marketIds }) { const chunks = sliceIntoChunks(marketIds, 20) const response = [] for (const chunk of chunks) - response.push(...await getClient(type).fetchOrderbooks(chunk)) + response.push(...await getClient(type).fetchOrderbooksV2(chunk)) return response } @@ -42,4 +42,4 @@ module.exports = { p2j, getMarkets, getOrders, -} \ No newline at end of file +} diff --git a/projects/helper/chain/litecoin.js b/projects/helper/chain/litecoin.js index 092c830d88..f24b942d5b 100644 --- a/projects/helper/chain/litecoin.js +++ b/projects/helper/chain/litecoin.js @@ -1,10 +1,13 @@ const sdk = require('@defillama/sdk') const { get } = require('../http') -const url = addr => 'https://chainz.cryptoid.info/ltc/api.dws?q=getbalance&a=' + addr +// const url = addr => 'https://chainz.cryptoid.info/ltc/api.dws?q=getbalance&a=' + addr +const url = addr => 'https://ltc.tokenview.io/api/address/balancetrend/ltc/' + addr async function getBalance(addr) { - return get(url(addr)) + // return get(url(addr)) + const {data} = await get(url(addr)) + return +Object.values(data[0])[0] } async function sumTokens({ balances = {}, owners = [] }) { diff --git a/projects/helper/chain/near.js b/projects/helper/chain/near.js index b36ee8c4f0..4076476ac8 100644 --- a/projects/helper/chain/near.js +++ b/projects/helper/chain/near.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../coreAssets.json') const axios = require("axios") const { default: BigNumber } = require("bignumber.js") const sdk = require('@defillama/sdk') @@ -16,7 +17,8 @@ const endpoint = "https://rpc.mainnet.near.org" const tokenMapping = { 'wrap.near': { name: 'near', decimals: 24, }, 'meta-pool.near': { name: 'staked-near', decimals: 24, }, - 'linear-protocol.near': { name: 'linear-protocol', decimals: 24, }, + [ADDRESSES.near.LINA]: { name: 'linear-protocol', decimals: 24, }, + "storage.herewallet.near": { name: 'here-staking', decimals: 24, }, 'usn': { name: 'usn', decimals: 18, }, 'aurora': { name: 'ethereum', decimals: 18, }, 'token.skyward.near': { name: 'skyward-finance', decimals: 18, }, @@ -33,11 +35,11 @@ const tokenMapping = { // '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near': { name: 'dai', decimals: 18 }, // 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near': { name: 'usd-coin', decimals: 6 }, // 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near': { name: 'tether', decimals: 6 }, - // '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near': { name: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', decimals: 0 }, + // '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near': { name: ADDRESSES.ethereum.WBTC, decimals: 0 }, // 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near': { name: 'aurora-near', decimals: 18 }, - 'token.burrow.near': { name: 'burrow', decimals: 18 }, - 'token.paras.near': { name: 'paras', decimals: 18 }, - 'token.pembrock.near': { name: 'pembrock', decimals: 18 }, + [ADDRESSES.near.BURROW]: { name: 'burrow', decimals: 18 }, + [ADDRESSES.near.PARAS]: { name: 'paras', decimals: 18 }, + [ADDRESSES.near.PEMBROCK]: { name: 'pembrock', decimals: 18 }, 'token.sweat': { name: 'sweatcoin', decimals: 18 }, 'v2-nearx.stader-labs.near': { name: 'stader-nearx', decimals: 24 }, } diff --git a/projects/helper/chain/stacks-api.js b/projects/helper/chain/stacks-api.js new file mode 100644 index 0000000000..e61045874e --- /dev/null +++ b/projects/helper/chain/stacks-api.js @@ -0,0 +1,33 @@ +const stacks = require('@stacks/transactions') +const { StacksMainnet } = require('@stacks/network') + +const { bufferCVFromString, callReadOnlyFunction, uintCV, principalCV, } = stacks +let network + +const senderAddress = 'ST2F4BK4GZH6YFBNHYDDGN4T1RKBA7DA1BJZPJEJJ' + +function getNetwork() { + if (!network) + network = new StacksMainnet() + return network +} + +async function call({ target, abi, inputArgs = [], }) { + const [contractAddress, contractName] = target.split('.') + const network = getNetwork() + const result = await callReadOnlyFunction({ network, contractAddress, contractName, functionName: abi, functionArgs: inputArgs.map(toClairty), senderAddress}); + return stacks.cvToValue(result) + + function toClairty(arg) { + switch (arg.type) { + case 'string': return bufferCVFromString(arg.value) + case 'number': return uintCV(arg.value) + case 'principal': return principalCV(arg.value) + default: throw new Error(`Unknown type ${arg.type}`) + } + } +} + +module.exports = { + call, +} diff --git a/projects/helper/chain/starknet.js b/projects/helper/chain/starknet.js index cc258826e2..80d16363e0 100644 --- a/projects/helper/chain/starknet.js +++ b/projects/helper/chain/starknet.js @@ -1,6 +1,6 @@ // https://www.starknetjs.com/docs/API/contract const { getUniqueAddresses} = require('../tokenMapping') -const { Provider, Contract, validateAndParseAddress } = require('starknet') +const { Provider, Contract, validateAndParseAddress, number, } = require('starknet') const { PromisePool } = require('@supercharge/promise-pool') let provider @@ -96,4 +96,5 @@ module.exports = { multiCall, parseAddress: validateAndParseAddress, sumTokens, + number, } \ No newline at end of file diff --git a/projects/helper/chain/sui.js b/projects/helper/chain/sui.js new file mode 100644 index 0000000000..a90941f0f2 --- /dev/null +++ b/projects/helper/chain/sui.js @@ -0,0 +1,143 @@ + +const sdk = require('@defillama/sdk') + +const http = require('../http') +const { getEnv } = require('../env') +const { transformDexBalances } = require('../portedTokens') +const { sliceIntoChunks } = require('../utils') + +//https://docs.sui.io/sui-jsonrpc + +const endpoint = () => getEnv('SUI_RPC') + +async function getObject(objectId) { + return (await call('sui_getObject', [objectId, { + "showType": true, + "showOwner": true, + "showContent": true, + }])).content +} + +async function queryEvents({ eventType, transform = i => i }) { + let filter = {} + if (eventType) filter.MoveEventType = eventType + const items = [] + let cursor = null + do { + const { data , nextCursor, hasNextPage } = await call('suix_queryEvents', [filter, cursor], { withMetadata: true, }) + cursor = hasNextPage ? nextCursor : null + items.push(...data) + } while (cursor) + return items.map(i => i.parsedJson).map(transform) +} + +async function getObjects(objectIds) { + if (objectIds.length > 49) { + const chunks = sliceIntoChunks(objectIds, 49) + const res = [] + for (const chunk of chunks) res.push(...(await getObjects(chunk))) + return res + } + const { + result + } = await http.post(endpoint(), { + jsonrpc: "2.0", id: 1, method: 'sui_multiGetObjects', params: [objectIds, { + "showType": true, + "showOwner": true, + "showContent": true, + }], + }) + return objectIds.map(i => result.find(j => j.data.objectId === i)?.data?.content) +} + +async function getDynamicFieldObject(parent, id) { + return (await call('suix_getDynamicFieldObject', [parent, { + "type": "0x2::object::ID", + "value": id + }])).content +} + +async function getDynamicFieldObjects({ parent, cursor = null, limit = 48, items = [], idFilter = i => i, addedIds = new Set() }) { + const { + result: { data, hasNextPage, nextCursor } + } = await http.post(endpoint(), { jsonrpc: "2.0", id: 1, method: 'suix_getDynamicFields', params: [parent, cursor, limit], }) + sdk.log('[sui] fetched items length', data.length, hasNextPage, nextCursor) + const fetchIds = data.filter(idFilter).map(i => i.objectId).filter(i => !addedIds.has(i)) + fetchIds.forEach(i => addedIds.add(i)) + const objects = await getObjects(fetchIds) + items.push(...objects) + if (!hasNextPage) return items + return getDynamicFieldObjects({ parent, cursor: nextCursor, items, limit, idFilter, addedIds }) +} + +async function call(method, params, { withMetadata = false} = {}) { + if (!Array.isArray(params)) params = [params] + const { + result + } = await http.post(endpoint(), { jsonrpc: "2.0", id: 1, method, params, }) + return withMetadata ? result : result.data +} + +async function multiCall(calls) { + return Promise.all(calls.map(i => call(...i))) +} + + +function dexExport({ + account, + poolStr, + token0Reserve = i => i.fields.coin_x_reserve, + token1Reserve = i => i.fields.coin_y_reserve, + getTokens = i => i.type.split('<')[1].replace('>', '').split(', '), + isAMM = true, + eventType, + eventTransform, +}) { + return { + timetravel: false, + misrepresentedTokens: true, + sui: { + tvl: async (_, _1, _2, { api }) => { + const data = [] + let pools + if (!eventType) { + pools = await getDynamicFieldObjects({ parent: account, idFilter: i => poolStr ? i.objectType.includes(poolStr) : i }) + } else { + pools = await queryEvents({ eventType, transform: eventTransform }) + pools = await getObjects(pools) + } + sdk.log(`[sui] Number of pools: ${pools.length}`) + pools.forEach(i => { + const [token0, token1] = getTokens(i) + if (isAMM) { + data.push({ + token0, + token1, + token0Bal: token0Reserve(i), + token1Bal: token1Reserve(i), + }) + } else { + api.add(token0, token0Reserve(i)) + api.add(token1, token1Reserve(i)) + } + }) + + if (!isAMM) return api.getBalances() + + return transformDexBalances({ chain: 'sui', data }) + } + } + } +} + +module.exports = { + endpoint: endpoint(), + call, + multiCall, + getObject, + getObjects, + queryEvents, + getDynamicFieldObject, + getDynamicFieldObjects, + dexExport, +}; diff --git a/projects/helper/chain/terra.js b/projects/helper/chain/terra.js deleted file mode 100644 index a1c89dc50e..0000000000 --- a/projects/helper/chain/terra.js +++ /dev/null @@ -1,165 +0,0 @@ -const axios = require('axios') -const { default: BigNumber } = require("bignumber.js") -const sdk = require('@defillama/sdk') -const env = require('../env') - -function getEndpoint(isTerra2 = false) { - if (!isTerra2) - return env.TERRA_RPC || 'https://terraclassic-lcd-server-01.stakely.io' - return env.TERRA2_RPC || 'https://phoenix-lcd.terra.dev' -} - -async function query(url, block, isTerra2 = false) { - block = undefined - let endpoint = `${getEndpoint(isTerra2)}/wasm/${url}` - if (block !== undefined) { - endpoint += `&height=${block - (block % 100)}` - } - return (await axios.get(endpoint)).data.result -} - -const fetchAssets = async (path) => { - return (await axios.get(`https://assets.terra.money${path}`)) -} - -async function queryV1Beta1(url, paginationKey, block, { isTerra2 = false } = {}) { - let endpoint = `${getEndpoint(isTerra2)}/cosmos/${url}` - if (block !== undefined) { - endpoint += `?height=${block - (block % 100)}` - } - if (paginationKey) { - const paginationQueryParam = `pagination.key=${paginationKey}` - if (block === undefined) { - endpoint += "?" - } else { - endpoint += "&" - } - endpoint += paginationQueryParam - } - return (await axios.get(endpoint)).data -} - - -async function getBalance(token, owner, block, { isTerra2 = false } = {}) { - const data = await query(`contracts/${token}/store?query_msg={"balance":{"address":"${owner}"}}`, block, isTerra2) - return Number(data.balance) -} - -async function getDenomBalance(denom, owner, block, { isTerra2 = false } = {}) { - let endpoint = `${getEndpoint(isTerra2)}/bank/balances/${owner}` - if (block !== undefined) { - endpoint += `?height=${block - (block % 100)}` - } - const data = (await axios.get(endpoint)).data.result - - const balance = data.find(balance => balance.denom === denom); - return balance ? Number(balance.amount) : 0 -} - - -// LP stuff -async function totalSupply(token, block, { isTerra2 = false } = {}) { - const data = await query(`contracts/${token}/store?query_msg={"token_info":{}}`, block, isTerra2) - return data.total_supply -} - -async function lpMinter(token, block, { isTerra2 = false } = {}) { - const data = await query(`contracts/${token}/store?query_msg={"minter":{}}`, block, isTerra2) - return data.minter -} -async function queryContract({ contract, isTerra2 = false, data }) { - if (typeof data !== 'string') data = JSON.stringify(data) - data = Buffer.from(data).toString('base64') - - if(!isTerra2) { - let path = `${getEndpoint(isTerra2)}/terra/wasm/v1beta1/contracts/${contract}/store?query_msg=${data}`; - let result = await axios.get(path) - return (result).data.query_result - } - - return (await axios.get(`${getEndpoint(isTerra2)}/cosmwasm/wasm/v1/contract/${contract}/smart/${data}`)).data.data -} - -function getAssetInfo(asset) { - return [asset.info.native_token?.denom ?? asset.info.token?.contract_addr, Number(asset.amount)] -} - -async function unwrapLp(balances, lpToken, lpBalance, block, { isTerra2 = false } = {}) { - const pair = await lpMinter(lpToken) - const { assets, total_share } = await query(`contracts/${pair}/store?query_msg={"pool":{}}`, block); - const [token0, amount0] = getAssetInfo(assets[0]) - const [token1, amount1] = getAssetInfo(assets[1]) - balances[token0] = (balances[token0] ?? 0) + (amount0 * lpBalance / total_share) - balances[token1] = (balances[token1] ?? 0) + (amount1 * lpBalance / total_share) -} - -const tokenMapping = { - 'terra1xfsdgcemqwxp4hhnyk4rle6wr22sseq7j07dnn': { label: 'KIJU', decimals: 6, }, - 'terra188w26t95tf4dz77raftme8p75rggatxjxfeknw': { label: 'sKIJU', decimals: 6, }, - 'terra15k5r9r8dl8r7xlr29pry8a9w7sghehcnv5mgp6': { coingeckoId: 'lunaverse', decimals: 6, }, - 'terra1cl7whtrqmz5ldr553q69qahck8xvk80fm33qjx': { label: 'ALTO', decimals: 6, }, - 'terra1dy9kmlm4anr92e42mrkjwzyvfqwz66un00rwr5': { coingeckoId: 'valkyrie-protocol', decimals: 6, }, - 'terra14z56l0fp2lsf86zy3hty2z47ezkhnthtr9yq76': { coingeckoId: 'anchor-protocol', decimals: 6, }, - 'terra15gwkyepfc6xgca5t5zefzwy42uts8l2m4g40k6': { coingeckoId: 'mirror-protocol', decimals: 6, }, - 'terra17y9qkl8dfkeg4py7n0g5407emqnemc3yqk5rup': { coingeckoId: 'stader-lunax', decimals: 6, }, - 'terra1hzh9vpxhsk8253se0vv5jj6etdvxu3nv8z07zu': { coingeckoId: 'anchorust', decimals: 6, }, - 'terra1kc87mu460fwkqte29rquh4hc20m54fxwtsx7gp': { coingeckoId: 'bonded-luna', decimals: 6, }, - 'uluna': { coingeckoId: 'terra-luna', decimals: 6, }, - 'uusd': { coingeckoId: 'terrausd', decimals: 6, }, - 'terra1dzhzukyezv0etz22ud940z7adyv7xgcjkahuun': { coingeckoId: 'anchor-beth-token', decimals: 6, }, - 'terra1z3e2e4jpk4n0xzzwlkgcfvc95pc5ldq0xcny58': { coingeckoId: 'avalanche-2', decimals: 6, }, - 'terra1nef5jf6c7js9x6gkntlehgywvjlpytm7pcgkn4': { label: 'LOOP', decimals: 6, }, - 'terra1vwz7t30q76s7xx6qgtxdqnu6vpr3ak3vw62ygk': { coingeckoId: 'luart', decimals: 6, }, - 'terra1xj49zyqrwpv5k928jwfpfy2ha668nwdgkwlrg3': { coingeckoId: 'astroport', decimals: 6, }, -} - -const TOKEN_LIST = Object.keys(tokenMapping).reduce((agg, key) => { - const { coingeckoId, label } = tokenMapping[key] - agg[coingeckoId || label] = key - return agg -}, {}) - -async function queryContractStore({ contract, queryParam, block, isTerra2= false, }) { - if (typeof queryParam !== 'string') queryParam = JSON.stringify(queryParam) - const url = `contracts/${contract}/store?query_msg=${queryParam}` - return query(url, block, isTerra2) -} - -function sumSingleBalance(balances, token, balance, price) { - const { coingeckoId, label, decimals = 0, } = tokenMapping[token] || {} - - if (coingeckoId || (label && price)) { - token = coingeckoId || 'terrausd' - - if (decimals) - balance = BigNumber(balance).shiftedBy(-1 * decimals) - - if (!coingeckoId) - balance = balance.multipliedBy(BigNumber(price)) // convert the value to UST - - if (!balances[token]) - balances[token] = BigNumber(0) - else if (typeof balances[token] === 'string') - balances[token] = BigNumber(balances[token]).shiftedBy(-1 * decimals) - - balances[token] = balances[token].plus(balance) - return - } - - sdk.util.sumSingleBalance(balances, token, balance) - return balances -} - -module.exports = { - totalSupply, - getBalance, - getDenomBalance, - unwrapLp, - query, - queryV1Beta1, - fetchAssets, - queryContractStore, - sumSingleBalance, - queryContract, - TOKEN_LIST, -} diff --git a/projects/helper/chain/tezos.js b/projects/helper/chain/tezos.js index b2cf45936e..4971844497 100644 --- a/projects/helper/chain/tezos.js +++ b/projects/helper/chain/tezos.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../coreAssets.json') const http = require('../http') const sdk = require('@defillama/sdk') const { PromisePool } = require('@supercharge/promise-pool') const RPC_ENDPOINT = 'https://api.tzkt.io' -const usdtAddressTezos = 'KT1XnTn74bUtxHfDtBmm2bGZAQfhPbvKWR8o' +const usdtAddressTezos = ADDRESSES.tezos.USDt const transformAddressDefault = t => 'tezos:' + t const tokenBlacklist = [ diff --git a/projects/helper/chain/ton.js b/projects/helper/chain/ton.js new file mode 100644 index 0000000000..6a7d6e0d2d --- /dev/null +++ b/projects/helper/chain/ton.js @@ -0,0 +1,10 @@ +const { get } = require('../http') + +async function getTonBalance(addr) { + const res = await get(`https://tonapi.io/v1/account/getInfo?account=${addr}`) + return res.balance +} + +module.exports = { + getTonBalance, +} \ No newline at end of file diff --git a/projects/helper/chain/tron.js b/projects/helper/chain/tron.js index b4effa4ebb..02f07792cd 100644 --- a/projects/helper/chain/tron.js +++ b/projects/helper/chain/tron.js @@ -1,180 +1,10 @@ -const axios = require('axios') -const BigNumber = require('bignumber.js') -const ethers = require('ethers') -const sdk = require('@defillama/sdk') -const { getUniqueAddresses, } = require('../utils') const { get, } = require('../http') -const { transformBalances, } = require('../portedTokens') -const { toHex, fromHex, } = require('tron-format-address') -const axiosObj = axios.create({ - baseURL: 'https://api.trongrid.io/', - headers: { - 'TRON-PRO-API-KEY': 'b5681c79-7e8e-4dcc-a290-86b4eb95157b', - 'Content-Type': 'application/json' - }, - timeout: 300000, -}) - -const AbiCoder = ethers.utils.AbiCoder; -const ADDRESS_PREFIX_REGEX = /^(41)/; -const ADDRESS_PREFIX = "41"; -const accountData = { -} async function getStakedTron(account) { const data = await get(`https://apilist.tronscan.org/api/vote?candidate=${account}`) return data.totalVotes } -async function getAccountDetails(account) { - if (!accountData[account]) - accountData[account] = get('https://apilist.tronscan.org/api/account?address=' + account) - return accountData[account] -} - -function encodeParams(inputs) { - let typesValues = inputs - let parameters = '' - - if (typesValues.length == 0) - return parameters - const abiCoder = new AbiCoder(); - let types = []; - const values = []; - - for (let i = 0; i < typesValues.length; i++) { - let { type, value } = typesValues[i]; - if (type == 'address') - value = value.replace(ADDRESS_PREFIX_REGEX, '0x'); - else if (type == 'address[]') - value = value.map(v => toHex(v).replace(ADDRESS_PREFIX_REGEX, '0x')); - types.push(type); - values.push(value); - } - - return abiCoder.encode(types, values).replace(/^(0x)/, ''); -} - -function decodeParams({types, output, ignoreMethodHash}) { - if (ignoreMethodHash && output.replace(/^0x/, '').length % 64 === 8) - output = '0x' + output.replace(/^0x/, '').substring(8); - - const abiCoder = new AbiCoder(); - - if (output.replace(/^0x/, '').length % 64) - throw new Error('The encoded string is not valid. Its length must be a multiple of 64.'); - return abiCoder.decode(types, output).reduce((obj, arg, index) => { - if (types[index] == 'address') - arg = ADDRESS_PREFIX + arg.substr(2).toLowerCase(); - obj.push(arg); - return obj; - }, []); -} - -// api reference: https://developers.tron.network/reference -const owner_address = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t' - -async function unverifiedCall({ target, abi, parameter = [], isBigNumber, types = [], isAddress }) { - var body = { - owner_address: owner_address, - contract_address: target, - function_selector: abi, - parameter: encodeParams(parameter), - visible: true, - }; - const axiosResponse = await axiosObj.post('/wallet/triggerconstantcontract', body) - if (isBigNumber) - return BigNumber("0x" + axiosResponse.data['constant_result'][0]) - if (isAddress) { - const str = '0x' + axiosResponse.data.constant_result[0].replace(/^(0+)/, '') - return fromHex(str) - } - return decodeParams({ types, output: axiosResponse.data.constant_result[0], ignoreMethodHash: true }) -} - -async function multicall({ calls, ...options }) { - const res = [] - for (const target of calls) - res.push(await unverifiedCall({ target, ...options })) - return res -} - -async function getUnverifiedTokenBalance(token, account) { - const data = await getAccountDetails(account) - const bal = data.trc20token_balances.find(i => i.tokenId === token)?.balance ?? 0 - return BigNumber(bal) -} - -async function getTokenDecimals(token, account) { - const data = await getAccountDetails(account) - return data.trc20token_balances.find(i => i.tokenId === token)?.tokenDecimal ?? 0 -} - -async function getTokenBalance(token, account) { - const [balance, decimals] = await Promise.all([ - getUnverifiedTokenBalance(token, account), - getTokenDecimals(token, account) - ]); - return Number(balance.toString()) / (10 ** decimals) -} - -async function getTrxBalance(account) { - const data = await getAccountDetails(account) - return data.balance + (data.totalFrozen || 0) -} - -const nullAddress = '0x0000000000000000000000000000000000000000' -const gasTokens = [nullAddress, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'] - -async function sumTokens({ - balances = {}, - tokensAndOwners = [], - tokens = [], - owners = [], - owner, - blacklistedTokens = [], -}) { - if (!tokensAndOwners.length) { - tokens = getUniqueAddresses(tokens, true) - owners = getUniqueAddresses(owners, true) - if (owner) tokensAndOwners = tokens.map(t => [t, owner]) - if (owners.length) tokensAndOwners = tokens.map(t => owners.map(o => [t, o])).flat() - } - tokensAndOwners = tokensAndOwners.filter(([token]) => !blacklistedTokens.includes(token)) - tokensAndOwners = getUniqueToA(tokensAndOwners) - - let tronBalanceInputs = [] - - tokensAndOwners = tokensAndOwners.filter(i => { - const token = i[0] - if (token !== nullAddress && !gasTokens.includes(token)) - return true - tronBalanceInputs.push(i[1]) - return false - }) - tronBalanceInputs = getUniqueAddresses(tronBalanceInputs, true) - - if (tronBalanceInputs.length) { - const bals = await Promise.all(tronBalanceInputs.map(getTrxBalance)) - bals.forEach(balance => sdk.util.sumSingleBalance(balances, nullAddress, balance)) - } - - const results = await Promise.all(tokensAndOwners.map(i => getUnverifiedTokenBalance(i[0], i[1]))) - - results.forEach((bal, i) => sdk.util.sumSingleBalance(balances, 'tron:' + tokensAndOwners[i][0], bal.toFixed(0))) - return transformBalances('tron', balances) - - function getUniqueToA(toa) { - toa = toa.map(i => i.join('-')) - return getUniqueAddresses(toa, true).map(i => i.split('-')) - } -} - module.exports = { - multicall, - getTokenBalance, - getTrxBalance, - unverifiedCall, - sumTokens, getStakedTron, } diff --git a/projects/helper/chains.json b/projects/helper/chains.json index b484fd5bd1..9cbc34087b 100644 --- a/projects/helper/chains.json +++ b/projects/helper/chains.json @@ -7,6 +7,7 @@ "astar", "aurora", "avax", + "base", "bifrost", "binance", "bitcoin", @@ -27,9 +28,11 @@ "carbon", "cardano", "celo", + "chihuahua", "clover", "clv", "comdex", + "concordium", "conflux", "core", "cosmos", @@ -76,6 +79,8 @@ "godwoken", "godwoken_v1", "goerli", + "gravitybridge", + "grove", "harmony", "heco", "hedera", @@ -103,14 +108,18 @@ "lamden", "lbry", "libre", + "linea", "liquidchain", "litecoin", "loop", + "lukso", "lung", + "mantle", "map", "meta", "meter", "metis", + "migaloo", "milkomeda", "milkomeda_a1", "mixin", @@ -122,6 +131,8 @@ "near", "neo", "neo3", + "neon_evm", + "neutron", "nova", "nuls", "oasis", @@ -131,14 +142,18 @@ "omax", "ontology", "ontology_evm", + "onus", "optimism", "ore", "orai", "osmosis", + "ozone", "palette", "palm", "parallel", "persistence", + "pgn", + "pokt", "polis", "polkadot", "polygon", @@ -146,12 +161,15 @@ "pool2", "posi", "proton", + "pulse", "quicksilver", + "quasar", "reef", "regen", "rei", "reichain", "ripple", + "rollux", "ronin", "rsk", "rvn", @@ -172,9 +190,11 @@ "stellar", "step", "stride", + "sui", "sx", "syscoin", "telos", + "tenet", "terra", "terra2", "tezos", @@ -201,6 +221,7 @@ "wemix", "xdai", "xdc", + "xpla", "zeniq", "zilliqa", "zksync", diff --git a/projects/helper/compound.js b/projects/helper/compound.js index 84ba262639..d819e42f83 100644 --- a/projects/helper/compound.js +++ b/projects/helper/compound.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abis/compound.json'); @@ -6,7 +7,7 @@ const { requery } = require("./requery"); const { getChainTransform, getFixBalances, } = require('./portedTokens'); const { usdtAddress } = require('./balances'); const agoraAbi = require("./../agora/abi.json"); -const { sumTokens2, nullAddress } = require('./unwrapLPs') +const { sumTokens2, nullAddress, unwrapLPsAuto, } = require('./unwrapLPs') // ask comptroller for all markets array async function getAllCTokens(comptroller, block, chain, allMarketsAbi = abi['getAllMarkets']) { return (await sdk.api.abi.call({ @@ -37,11 +38,11 @@ async function getMarkets(comptroller, block, chain, cether, cetheEquivalent, bl return; } if (cToken === '0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5'.toLowerCase()) { - markets.push({ underlying: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', cToken }) //cETH => WETH + markets.push({ underlying: ADDRESSES.ethereum.WETH, cToken }) //cETH => WETH return; } if (cToken === '0x5C0401e81Bc07Ca70fAD469b451682c0d747Ef1c'.toLowerCase() && chain === 'avax') { - markets.push({ underlying: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', cToken }) + markets.push({ underlying: ADDRESSES.avax.WAVAX, cToken }) return; } if (['0xd2ec53e8dd00d204d3d9313af5474eb9f5188ef6', '0x0aeadb9d4c6a80462a47e87e76e487fa8b9a37d7'].includes(cToken) && chain === 'rsk') { @@ -103,12 +104,13 @@ async function unwrapPuffTokens(balances, lpPositions, block) { let marketsCache = {} function getCompoundV2Tvl(comptroller, chain, transformAdress, - cether = "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", cetheEquivalent = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + cether = "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", cetheEquivalent = ADDRESSES.ethereum.WETH, borrowed = false, checkForLPTokens = undefined, { fetchBalances = false, blacklistedTokens = [], - abis = {} + abis = {}, + resolveLPs = true, } = {}) { abis = { ...abi, ...abis } blacklistedTokens = blacklistedTokens.map(i => i.toLowerCase()) @@ -169,6 +171,9 @@ function getCompoundV2Tvl(comptroller, chain, transformAdress, } else if (lpPositions.length > 0) { await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAdress) } + + if (resolveLPs) return unwrapLPsAuto({ balances, block, chain, abis}) + return balances; } } @@ -196,10 +201,12 @@ async function getUnderlyingDecimalsMultiple(block, chain, marketData, cether) { abi: "erc20:decimals", block, chain, + permitFailure: true, }) decimals.forEach(({ output }, i) => { - response[marketData[i].cToken] = output + if (output !== null) + response[marketData[i].cToken] = output }) return response @@ -263,25 +270,25 @@ function getCompoundUsdTvl(comptroller, chain, cether, borrowed, abis = { } } -function compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens = [], fetchBalances, abis = {} } = {}) { +function compoundExports(comptroller, chain, cether, cetheEquivalent, transformAdressRaw, checkForLPTokens, { blacklistedTokens = [], fetchBalances, abis = {}, resolveLPs=true } = {}) { if (cether !== undefined && cetheEquivalent === undefined) { throw new Error("You need to define the underlying for native cAsset") } return { - tvl: getCompoundV2Tvl(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, false, checkForLPTokens, { blacklistedTokens, fetchBalances, abis }), - borrowed: getCompoundV2Tvl(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, true, checkForLPTokens, { blacklistedTokens, fetchBalances, abis }) + tvl: getCompoundV2Tvl(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, false, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }), + borrowed: getCompoundV2Tvl(comptroller, chain, transformAdressRaw, cether, cetheEquivalent, true, checkForLPTokens, { blacklistedTokens, fetchBalances, abis, resolveLPs }) } } -function compoundExportsWithAsyncTransform(comptroller, chain, cether, cetheEquivalent, transformAdressConstructor) { +function compoundExportsWithAsyncTransform(comptroller, chain, cether, cetheEquivalent, options) { return { tvl: async (...args) => { const transformAddress = await getChainTransform(chain) - return getCompoundV2Tvl(comptroller, chain, transformAddress, cether, cetheEquivalent)(...args) + return getCompoundV2Tvl(comptroller, chain, transformAddress, cether, cetheEquivalent, false, undefined, options)(...args) }, borrowed: async (...args) => { const transformAddress = await getChainTransform(chain) - return getCompoundV2Tvl(comptroller, chain, transformAddress, cether, cetheEquivalent, true)(...args) + return getCompoundV2Tvl(comptroller, chain, transformAddress, cether, cetheEquivalent, true, undefined, options)(...args) }, } } diff --git a/projects/helper/compoundV3.js b/projects/helper/compoundV3.js index 306a3184c0..35ac14c2c3 100644 --- a/projects/helper/compoundV3.js +++ b/projects/helper/compoundV3.js @@ -13,7 +13,7 @@ module.exports = { methodology: `${lendingMarket}. TVL is calculated by getting the market addresses from comptroller and calling the totalsCollaterals() on-chain method to get the amount of tokens locked in each of these addresses, then we get the price of each token from coingecko.`, }; Object.keys(config).forEach(chain => { - const { markets, collaterals } = config[chain] + const { markets } = config[chain] async function borrowed(timestamp, block, _, { api }) { const balances = {} @@ -28,7 +28,8 @@ module.exports = { await Promise.all(markets.map(async (m, i) => { const items = await api.fetchList({ lengthAbi: abi.numAssets, itemAbi: abi.getAssetInfo, target: m }) const tokens = items.map(i => i.asset) - tokens.push(collaterals[i]) + const baseToken = await api.call({ abi: 'address:baseToken', target: m }) + tokens.push(baseToken) toa.push([tokens, m]) })) return sumTokens2({ api, ownerTokens: toa }) diff --git a/projects/helper/coreAssets.json b/projects/helper/coreAssets.json index 04884453f2..c704a5472e 100644 --- a/projects/helper/coreAssets.json +++ b/projects/helper/coreAssets.json @@ -1,1436 +1,1346 @@ { - "ethereum": [ - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "0x514910771af9ca656af840dff83e8264ecf986ca", - "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", - "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", - "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f", - "0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e", - "0x6b175474e89094c44da98b954eedeac495271d0f", - "0x3aada3e213abf8529606924d8d1c55cbdc70bf74", - "0xc834fa996fa3bec7aad3693af486ae53d8aa8b50", - "0xfeef77d3f69374f66429c91d732a244f074bdf74", - "0xb8c77482e45f1f44de1745f52c74426c631bdd52", - "0xeb637a9ab6be83c7f8c79fdaa62e1043b65534f0", - "0x18084fba666a33d37592fa2633fd49a74dd93a88", - "0xef779cf3d260dbe6177b30ff08b10db591a6dd9c", - "0x42ef9077d8e79689799673ae588e046f8832cb95", - "0xd3d13a578a53685b4ac36a1bab31912d2b2a2f36", - "0x94671a3cee8c7a12ea72602978d1bb84e920efb2", - "0x2fc6e9c1b2c07e18632efe51879415a580ad22e1", - "0xeff721eae19885e17f5b80187d6527aad3ffc8de", - "0xdc0b02849bb8e0f126a216a2840275da829709b0", - "0x15a629f0665a3eb97d7ae9a7ce7abf73aeb79415", - "0x808d3e6b23516967ceae4f17a5f9038383ed5311", - "0xf49764c9c5d644ece6ae2d18ffd9f1e902629777", - "0xd3b5d9a561c293fb42b446fe7e237daa9bf9aa84", - "0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655", - "0xc7d9c108d4e1dd1484d3e2568d7f74bfd763d356", - "0x65f7ba4ec257af7c55fd5854e5f6356bbd0fb8ec", - "0x0a5e677a6a24b2f1a2bf4f3bffc443231d2fdec8", - "0x2163383c1f4e74fe36c50e6154c7f18d9fd06d6f", - "0xf6b1c627e95bfc3c1b4c9b825a032ff0fbf3e07d", - "0xa80505c408c4defd9522981cd77e026f5a49fe63", - "0x97fe22e7341a0cd8db6f6c021a24dc8f4dad855f", - "0x0f83287ff768d1c1e17a42f44d644d7f22e8ee1d", - "0x9fcf418b971134625cdf38448b949c8640971671", - "0x8751d4196027d4e6da63716fa7786b5174f04c15", - "0xb1c9bc94acd2fae6aabf4ffae4429b93512a81d2", - "0x5067006f830224960fb419d7f25a3a53e9919bb0", - "0x2e9d63788249371f1dfc918a52f8d799f4a38c94", - "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", - "0x36f8d0d0573ae92326827c4a82fe4ce4c244cab6" - ], - "fantom": [ - "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", - "0x049d68029688eabf473097a2fc38ef61633a3c7a", - "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", - "0x82f0b8b456c1a451378467398982d4834b6829c1", - "0x658b0c7613e890ee50b8c4bc6a3f41ef411208ad", - "0xbf07093ccd6adfc3deb259c557b61e94c1f66945", - "0x0a03d2c1cfca48075992d810cc69bd9fe026384a", - "0x97927abfe1abbe5429cbe79260b290222fc9fbba", - "0x6dfe2aaea9daadadf0865b661b53040e842640f8", - "0x920786cff2a6f601975874bb24c63f0115df7dc8", - "0x49c68edb7aebd968f197121453e41b8704acde0c", - "0x7345a537a975d9ca588ee631befddfef34fd5e8f", - "0xdbf31df14b66535af65aac99c32e9ea844e14501", - "0x4a89338a2079a01edbf5027330eac10b615024e5", - "0xc0d9784fdba39746919bbf236eb73bc015fd351d", - "0xe3a486c1903ea794eed5d5fa0c9473c7d7708f40", - "0x8cc97b50fe87f31770bcdcd6bc8603bc1558380b", - "0x95bf7e307bc1ab0ba38ae10fc27084bc36fcd605", - "0xc5cd01e988cd0794e05ab80f2bcdbdf13ce08bd3", - "0x7f620d7d0b3479b1655cefb1b0bc67fb0ef4e443" - ], - "csc": [ - "0xe6f8988d30614afe4f7124b76477add79c665822", - "0x398dca951cd4fc18264d995dcd171aa5debda129" - ], - "europa": [ - "0x73d22d8a2D1f59Bf5Bcf62cA382481a2073FAF58", - "0xcb011E86DF014a46F4e3AC3F3cbB114A4EB80870", - "0xE0595a049d02b7674572b0d59cd4880Db60EDC50", - "0xD2Aaa00700000000000000000000000000000000", - "0x1c0491E3396AD6a35f061c62387a95d7218FC515", - "0x5F795bb52dAC3085f578f4877D450e2929D2F13d", - "0xD05C4be5f3be302d376518c9492EC0147Fa5A718" - ], - "avax": [ - "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", - "0xc7198437980c041c805a1edcba50c1ce5db95118", - "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", - "0x152b9d0fdc40c096757f570a51e494bd4b943e50", - "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", - "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", - "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", - "0x008e26068b3eb40b443d3ea88c1ff99b789c10f7", - "0xaf2c034c764d53005cc6cbc092518112cbd652bb", - "0x57319d41f71e81f3c65f2a47ca4e001ebafd4f33", - "0x574679ec54972cf6d705e0a71467bb5bb362919d", - "0x2f28add68e59733d23d5f57d94c31fb965f835d0", - "0xf04d3a8eb17b832fbebf43610e94bdc4fd5cf2dd", - "0x1b156c5c75e9df4caab2a5cc5999ac58ff4f9090", - "0xd795d70ec3c7b990ffed7a725a18be5a9579c3b9", - "0xb6767518b205ea8b312d2ef4d992a2a08c2f2416", - "0xaf9f33df60ca764307b17e62dde86e9f7090426c", - "0x808d5f0a62336917da14fa9a10e9575b1040f71c", - "0x0665ef3556520b21368754fb644ed3ebf1993ad4", - "0x90a424754ad0d72cebd440faba18cdc362bfe70a", - "0x9debca6ea3af87bf422cea9ac955618ceb56efb4" - ], - "bsc": [ - "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - "0xe9e7cea3dedca5984780bafc599bd69add087d56", - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - "0x55d398326f99059ff775485246999027b3197955", - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", - "0x23c5d1164662758b3799103effe19cc064d897d6", - "0xaec945e04baf28b135fa7c640f624f8d90f1c3a6", - "0x055dab90880613a556a5ae2903b2682f8a5b8d27", - "0x2d0e75b683e8b56243b429b24f2b08bcc1ffd8da", - "0xd32d01a43c869edcd1117c640fbdcfcfd97d9d65", - "0x702b3f41772e321aaccdea91e1fcef682d21125d", - "0x0feadcc3824e7f3c12f40e324a60c23ca51627fc", - "0x46d502fac9aea7c5bc7b13c8ec9d02378c33d36f", - "0xf83849122f769a0a7386df183e633607c890f6c0", - "0x1f534d2b1ee2933f1fdf8e4b63a44b2249d77eaf", - "0x9a3321e1acd3b9f6debee5e042dd2411a1742002", - "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", - "0xb7f8cd00c5a06c0537e2abff0b58033d02e5e094", - "0xa35d95872d8eb056eb2cbd67d25124a6add7455e", - "0x0cf8e180350253271f4b917ccfb0accc4862f262", - "0x6ded0f2c886568fb4bb6f04f179093d3d167c9d7", - "0x2f28add68e59733d23d5f57d94c31fb965f835d0", - "0xaf6162dc717cfc8818efc8d6f46a41cf7042fcba", - "0x30807d3b851a31d62415b8bb7af7dca59390434a", - "0xce86f7fcd3b40791f63b86c3ea3b8b355ce2685b", - "0xbb9858603b1fb9375f6df972650343e985186ac5", - "0xc5fb6476a6518dd35687e0ad2670cb8ab5a0d4c5", - "0xaed19dab3cd68e4267aec7b2479b1ed2144ad77f", - "0xa6fdea1655910c504e974f7f1b520b74be21857b", - "0x5f7f6cb266737b89f7af86b30f03ae94334b83e9", - "0x532197ec38756b9956190b845d99b4b0a88e4ca9", - "0x6d1b7b59e3fab85b7d3a3d86e505dd8e349ea7f3", - "0x42586ef4495bb512a86cf7496f6ef85ae7d69a64", - "0x60d01ec2d5e98ac51c8b4cf84dfcce98d527c747", - "0x0a3bb08b3a15a19b4de82f8acfc862606fb69a2d", - "0xa8bb71facdd46445644c277f9499dd22f6f0a30c", - "0x9cb73f20164e399958261c289eb5f9846f4d1404", - "0x51bd63f240fb13870550423d208452ca87c44444", - "0xaa20e8cb61299df2357561c2ac2e1172bc68bc25", - "0x13ab6739368a4e4abf24695bf52959224367391f", - "0xd7d069493685a581d27824fc46eda46b7efc0063", - "0x7c9e73d4c71dae564d41f78d56439bb4ba87592f", - "0x158da805682bdc8ee32d52833ad41e74bb951e59", - "0x08fc9ba2cac74742177e0afc3dc8aed6961c24e7", - "0xbff4a34a4644a113e8200d7f1d79b3555f723afe", - "0x3282d2a151ca00bfe7ed17aa16e42880248cd3cd", - "0xf1be8ecc990cbcb90e166b71e368299f0116d421", - "0xea7a82e0bc636667ab5c65623cd1438370620c3e", - "0x8b04e56a8cd5f4d465b784ccf564899f30aaf88c", - "0x6a46d878401f46b4c7f665f065e0667580e031ec", - "0xa4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016", - "0x37dfacfaeda801437ff648a1559d73f4c40aacb7", - "0x71be881e9c5d4465b3fff61e89c6f3651e69b5bb", - "0x316622977073bbc3df32e7d2a9b3c77596a0a603", - "0x5b1a9850f55d9282a7c4bf23a2a21b050e3beb2f", - "0xdcecf0664c33321ceca2effce701e710a2d28a3f", - "0x1ddcaa4ed761428ae348befc6718bcb12e63bfaa", - "0x4268b8f0b87b6eae5d897996e6b845ddbd99adf3", - "0x772f317ec695ce20290b56466b3f48501ba81352", - "0x3f847b01d4d498a293e3197b186356039ecd737f", - "0xe85afccdafbe7f2b096f268e31cce3da8da2990a", - "0xbb1aa6e59e5163d8722a122cd66eba614b59df0d" - ], - "polygon": [ - "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - "0xfd28c7cea3c50a060cb4c0059e453c6d4dd9829d", - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - "0x4535e52cdf3ab787b379b7b72b5990767e6747e4", - "0x22a31bd4cb694433b6de19e0acc2899e553e9481", - "0x60d01ec2d5e98ac51c8b4cf84dfcce98d527c747", - "0xaa9654becca45b5bdfa5ac646c939c62b527d394", - "0x2f28add68e59733d23d5f57d94c31fb965f835d0", - "0x9fffb2f49adfc231b44ddcff3ffcf0e81b06430a", - "0xf04d3a8eb17b832fbebf43610e94bdc4fd5cf2dd", - "0x8eb3771a43a8c45aabe6d61ed709ece652281dc9", - "0x613a489785c95afeb3b404cc41565ccff107b6e0", - "0x1ddcaa4ed761428ae348befc6718bcb12e63bfaa", - "0x794baab6b878467f93ef17e2f2851ce04e3e34c8", - "0x282d8efce846a88b159800bd4130ad77443fa1a1", - "0x769434dca303597c8fc4997bf3dab233e961eda2", - "0x6d3cc56dfc016151ee2613bdde0e03af9ba885cc", - "0xe4f7761b541668f88d04fe9f2e9df10ca613aef7", - "0x81a123f10c78216d32f8655eb1a88b5e9a3e9f2f", - "0xc5b57e9a1e7914fda753a88f24e5703e617ee50c", - "0xf826a91e8de52bc1baf40d88203e572dc2551aa3", - "0x28cead9e4ff96806c79f4189ef28fc61418e2216", - "0xfc40a4f89b410a1b855b5e205064a38fc29f5eb5", - "0x4c28f48448720e9000907bc2611f73022fdce1fa", - "0x6cacfaf65b1b1f9979acf463a393a112d0980982", - "0x14743e1c6f812154f7ecc980d890f0f5234103e7", - "0x5c4b7ccbf908e64f32e12c6650ec0c96d717f03f", - "0xb4d09ff3da7f9e9a2ba029cb0a81a989fd7b8f17", - "0x9c9e5fd8bbc25984b178fdce6117defa39d2db39", - "0x6002410dda2fb88b4d0dc3c1d562f7761191ea80" - ], - "xdai": [ - "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", - "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83", - "0x9c58bacc331c9aa871afd802db6379a98e80cedb", - "0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1", - "0x4ecaba5870353805a9f068101a40e0f32ed605c6", - "0x44fa8e6f47987339850636f88629646662444217", - "0x4537e328bf7e4efa29d05caea260d7fe26af9d74", - "0x7122d7661c4564b7c6cd4878b06766489a6028a2", - "0x8e5bbbb09ed1ebde8674cda39a0c169401db4252", - "0xec3f3e6d7907acda3a7431abd230196cda3fbb19", - "0x678df3415fc31947da4324ec63212874be5a82f8" - ], - "okexchain": [ - "0xc946daf81b08146b1c7a8da2a851ddf2b3eaaf85", - "0x8f8526dbfd6e38e3d8307702ca8469bae6c56c15", - "0x382bb369d343125bfb2117af9c149795c6c65c50", - "0x54e4622dc504176b3bb432dccaf504569699a7ff", - "0xef71ca2ee68f45b9ad6f72fbdb33d707b872315c", - "0xdf54b6c6195ea4d948d03bfd818d365cf175cfc2", - "0xab0d1578216a545532882e420a8c61ea07b00b12", - "0x8179d97eb6488860d816e3ecafe694a4153f216c", - "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c" - ], - "heco": [ - "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f", - "0xb6f4c418514dd4680f76d5caa3bb42db4a893acb", - "0xhecozzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", - "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", - "0x3d760a45d0887dfd89a2f5385a236b29cb46ed2a", - "0x9362bbef4b8313a8aa9f0c9808b80577aa26b73b", - "0xce0a5ca134fb59402b723412994b30e02f083842", - "0x1ee8382be3007bd9249a89f636506284ddef6cc0", - "0x40280e26a572745b1152a54d1d44f365daa51618", - "0x5ee41ab6edd38cdfb9f6b4e6cf7f75c87e170d98", - "0xa2f3c2446a3e20049708838a779ff8782ce6645a", - "0x843af718ef25708765a8e0942f89edeae1d88df0", - "0x90e8896b12a92d51cd213b681c2cad83a9a6bd49" - ], - "hoo": [ - "0x3eff9d389d13d6352bfb498bcf616ef9b1beac87" - ], - "harmony": [ - "0x72cb10c6bfa5624dd07ef608027e366bd690048f", - "0xd74433b187cf0ba998ad9be3486b929c76815215", - "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a", - "0x0dd740db89b9fda3baadf7396ddad702b6e8d6f5", - "0xa9ce83507d872c5e1273e745abcfda849daa654f", - "0xb12c13e66ade1f72f71834f2fc5082db8c091358", - "0xed0b4b0f0e2c17646682fc98ace09feb99af3ade", - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", - "0x799a4202c12ca952cb311598a024c80ed371a41e", - "0xea589e93ff18b1a1f1e9bac7ef3e86ab62addc79" - ], - "optimism": [ - "0x4200000000000000000000000000000000000006", - "0x5029c236320b8f15ef0a657054b84d90bfbeded3", - "0x121ab82b49b2bc4c7901ca46b8277962b4350204", - "0x35d48a789904e9b15705977192e5d95e2af7f1d3", - "0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a", - "0x67ccea5bb16181e7b4109c9c2143c24a1c2205be", - "0x2e3d870790dc77a83dd1d18184acc7439a53f475", - "0x0b5740c6b4a97f90ef2f0220651cca420b868ffb", - "0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9", - "0xc5db22719a06418028a40a9b5e9a7c02959d0d08", - "0xe405de8f52ba7559f9df3c368500b6e6ae6cee49", - "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", - "0x298b9b95708152ff6968aafd889c6586e9169f1d" - ], - "moonriver": [ - "0x98878b06940ae243284ca214f92bb71a2b032b8a", - "0xf50225a84382c74cbdea10b0c176f71fc3de0c4d", - "0xb44a9b6905af7c801311e8f4e76932ee959c663c", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", - "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", - "0xe3c7487eb01c74b73b7184d198c7fbf46b34e5af", - "0xcb4a593ce512d78162c58384f0b2fd6e802c2c47" - ], - "moonbeam": [ - "0xacc15dc74880c9944775448304b263d191c6077f", - "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", - "0x0e358838ce72d5e61e0018a2ffac4bec5f4c88d2", - "0xa649325aa7c5093d12d6f98eb4378deae68ce23f", - "0xcd3b51d98478d53f4515a306be565c6eebef1d58", - "0x322e86852e492a7ee17f28a78c663da38fb33bfb", - "0x8f552a71efe5eefc207bf75485b356a0b3f01ec9", - "0xdfa46478f9e5ea86d57387849598dbfb2e964b02", - "0x8e70cd5b4ff3f62659049e74b6649c6603a0e594", - "0x30d2a9f5fdf90ace8c17952cbb4ee48a55d916a7", - "0x1dc78acda13a8bc4408b207c9e48cdbc096d95e0", - "0xc234a67a4f840e61ade794be47de455361b52413", - "0x1d4c2a246311bb9f827f4c768e277ff5787b7d7e", - "0x5f6c5c2fb289db2228d159c69621215e354218d7", - "0x931715fee2d06333043d11f658c8ce934ac61d0c", - "0xffffffffea09fb06d082fd1275cd48b191cbcd1d", - "0xab3f0245b83feb11d15aaffefd7ad465a59817ed", - "0xe57ebd2d67b462e9926e04a8e33f01cd0d64346d", - "0x692c57641fc054c2ad6551ccc6566eba599de1ba", - "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c", - "0x6a2d262d56735dba19dd70682b39f6be9a931d98", - "0x6959027f7850adf4916ff5fdc898d958819e5375", - "0x4edf8e0778967012d46968ceadb75436d0426f88", - "0xfa36fe1da08c89ec72ea1f0143a35bfd5daea108" - ], - "arbitrum": [ - "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", - "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", - "0xf97f4df75117a78c1a5a0dbb814af92458539fb4", - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", - "0x09ad12552ec45f82be90b38dfe7b06332a680864", - "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a", - "0xdbf31df14b66535af65aac99c32e9ea844e14501", - "0x9ef758ac000a354479e538b8b2f01b917b8e89e7", - "0x31635a2a3892daec7c399102676e344f55d20da7", - "0x4a717522566c7a09fd2774ccedc5a8c43c5f9fd2", - "0x2913e812cf0dcca30fb28e6cac3d2dcff4497688", - "0x289ba1701c2f088cf0faf8b3705246331cb8a839", - "0x61a1ff55c5216b636a294a07d77c6f4df10d3b56", - "0x93c15cd7de26f07265f0272e0b831c5d7fab174f", - "0x1addd80e6039594ee970e5872d247bf0414c8903", - "0x4e971a87900b931ff39d1aad67697f49835400b6", - "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a", - "0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1" - ], - "fuse": [ - "0x0be9e53fd7edac9f859882afdda116645287c629", - "0x620fd5fa44be6af63715ef4e65ddfa0387ad13f5", - "0xa722c13135930332eb3d749b2f0906559d2c5b99", - "0x94ba7a27c7a95863d1bdc7645ac2951e0cca06ba", - "0xfadbbf8ce7d5b7041be672561bba99f79c532e10", - "0x43b17749b246fd2a96de25d9e4184e27e09765b0", - "0x0000000000000000000000000000000000000000" - ], - "evmos": [ - "0xd4949664cd82660aae99bedc034a0dea8a0bd517", - "0x51e44ffad5c2b122c8b635671fcc8139dc636e82", - "0x8d395affc1767141387fff45af88a074614e7ccf", - "0xb1a8c961385b01c3aa782fba73e151465445d319", - "0xe46910336479f254723710d57e7b683f3315b22b", - "0x63743acf2c7cfee65a5e356a4c4a005b586fc7aa", - "0x7ff4a56b32ee13d7d4d405887e0ea37d61ed919e", - "0xb72a7567847aba28a2819b855d7fe679d4f59846", - "0x5842c5532b61acf3227679a8b1bd0242a41752f2", - "0xf80699dc594e00ae7ba200c7533a07c1604a106d", - "0x28ec4b29657959f4a5052b41079fe32919ec3bd3", - "0xe03494d0033687543a80c9b1ca7d6237f2ea8bd8", - "0x3f75ceabcdfed1aca03257dc6bdc0408e2b4b026" - ], - "oasis": [ - "0x3223f17957ba502cbe71401d55a0db26e5f7c68f", - "0x4bf769b05e832fcdc9053fffbc78ca889acb5e1e", - "0xdc19a122e268128b5ee20366299fc7b5b199c8e3", - "0x80a16016cc4a2e6a2caca8a4a498b1699ff0f844", - "0x21c718c22d52d0f3a789b752d4c2fd5908a8a733", - "0x5c78a65ad6d0ec6618788b6e8e211f31729111ca", - "0x9e832cae5d19e7ff2f0d62881d1e33bb16ac9bdc", - "0x6ab6d61428fde76768d7b45d8bfeec19c6ef91a8", - "0xe8a638b3b7565ee7c5eb9755e58552afc87b94dd", - "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c" - ], - "kcc": [ - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0x4a81704d8c16d9fb0d7f61b747d0b5a272badf14", - "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", - "0xc9baa8cfdde8e328787e29b4b078abf2dadc2055", - "0x218c3c3d49d0e7b37aff0d8bb079de36ae61a4c0", - "0xf55af137a98607f7ed2efefa4cd2dfe70e4253b1", - "0x4446fc4eb47f2f6586f9faab68b3498f86c07521", - "0x2ca48b4eea5a731c2b54e7c3944dbdb87c0cfb6f", - "0x0039f574ee5cc39bdd162e9a88e3eb1f111baf48", - "0x980a5afef3d17ad98635f6c5aebcbaeded3c3430", - "0xfa93c12cd345c658bc4644d1d4e1b9615952258c", - "0x00ee2d494258d6c5a30d6b6472a09b27121ef451" - ], - "metis": [ - "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", - "0x75cb093e4d61d2a2e65d8e0bbb01de8d89b53481", - "0xbb06dca3ae6887fabf931640f67cab3e3a16f4dc", - "0x420000000000000000000000000000000000000a", - "0x5801d0e1c7d977d78e4890880b8e579eb4943276", - "0xea32a96608495e54156ae48931a7c20f0dcc1a21", - "0x2692be44a6e38b698731fddf417d060f0d20a0cb", - "0xa5b55ab1daf0f8e1efc0eb1931a957fd89b918f4", - "0x12d84f1cfe870ca9c9df9785f8954341d7fbb249", - "0xe253e0cea0cdd43d9628567d097052b33f98d611", - "0xa9109271abcf0c4106ab7366b4edb34405947eed", - "0x4651b38e7ec14bb3db731369bfe5b08f2466bd0a", - "0xfe282af5f9eb59c30a3f78789eeffa704188bdd4", - "0x6ab6d61428fde76768d7b45d8bfeec19c6ef91a8", - "0x4b9d2923d875edf43980bf5ddddede3fb20fc742", - "0x67c10c397dd0ba417329543c1a40eb48aaa7cd00", - "0x226d8bfb4da78ddc5bd8fd6c1532c58e88f9fd34", - "0x71802e8f394bb9d05a1b8e9d0562917609fd7325", - "0x433e43047b95cb83517abd7c9978bdf7005e9938", - "0xd1f0a4e5444eed0fbcd6624dcef7ef33043e6168" - ], - "celo": [ - "0x471ece3750da237f93b8e339c536989b8978a438", - "0x765de816845861e75a25fca122bb6898b8b1282a", - "0x9995cc8f20db5896943afc8ee0ba463259c931ed", - "0x7d00cd74ff385c955ea3d79e47bf06bd7386387d", - "0x918146359264c492bd6934071c6bd31c854edbc3", - "0xe273ad7ee11dcfaa87383ad5977ee1504ac07568", - "0x37f750b7cc259a2f741af45294f6a16572cf5cad", - "0x2a3684e9dc20b857375ea04235f2f7edbe818fa7", - "0xb70e0a782b058bfdb0d109a3599bec1f19328e36", - "0xcd7d7ff64746c1909e44db8e95331f9316478817", - "0x93db49be12b864019da9cb147ba75cdc0506190e", - "0xcfffe0c89a779c09df3df5624f54cdf7ef5fdd5d", - "0xbaab46e28388d2779e6e31fd00cf0e5ad95e327b", - "0x122013fd7df1c6f636a5bb8f03108e876548b455", - "0xe919f65739c26a42616b7b8eedc6b5524d1e3ac4", - "0xed193c4e69f591e42398ef54dea65aa1bb02835c", - "0x90ca507a5d4458a4c6c6249d186b6dcb02a5bccd", - "0x02de4766c272abc10bc88c220d214a26960a7e92", - "0x32a9fe697a32135bfd313a6ac28792dae4d9979d", - "0x66803fb87abd4aac3cbb3fad7c3aa01f6f3fb207", - "0x617f3112bf5397d0467d315cc709ef968d9ba546" - ], - "boba": [ - "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", - "0xa18bf3994c0cc6e3b63ac420308e5383f53120d7", - "0x66a2a913e447d6b4bf33efbec43aaef87890fbbc", - "0x5de1677344d3cb0d7d465c10b72a8f60699c062d", - "0xf74195bb8a5cf652411867c5c2c5b8c2a402be35", - "0x461d52769884ca6235b685ef2040f47d30c94eb5", - "0x7562f525106f5d54e891e005867bf489b5988cd9", - "0xd203de32170130082896b4111edf825a4774c18e", - "0xdc0486f8bf31df57a952bcd3c1d3e166e3d9ec8b", - "0xe1e2ec9a85c607092668789581251115bcbd20de", - "0x2f28add68e59733d23d5f57d94c31fb965f835d0", - "0xf04d3a8eb17b832fbebf43610e94bdc4fd5cf2dd" - ], - "findora": [ - "0xabc979788c7089b516b8f2f1b5ceabd2e27fd78b", - "0x008a628826e9470337e0cd9c0c944143a83f32f3", - "0x93edfa31d7ac69999e964dac9c25cd6402c75db3", - "0xda33ef1a7b48bebbf579ee86dfa735a9529c4950", - "0xe80eb4a234f718edc5b76bb442653827d20ebb2d", - "0x07efa82e00e458ca3d53f2cd5b162e520f46d911", - "0x0000000000000000000000000000000000001000", - "0x2e8079e0fe49626af8716fc38adea6799065d7f7", - "0x0632baa26299c9972ed4d9affa3fd057a72252ff" - ], - "milkomeda": [ - "0xae83571000af4499798d1e3b0fa0070eb3a3e3f9", - "0x80a16016cc4a2e6a2caca8a4a498b1699ff0f844", - "0x8d50a024b2f5593605d3ce8183ca8969226fcbf8", - "0x6ab6d61428fde76768d7b45d8bfeec19c6ef91a8", - "0x3795c36e7d12a8c252a20c5a7b455f7c57b60283", - "0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52", - "0x5950f9b6ef36f3127ea66799e64d0ea1f5fdb9d1", - "0x41eafc40cd5cb904157a10158f73ff2824dc1339", - "0xab58da63dfdd6b97eaab3c94165ef6f43d951fb2", - "0x5a955fddf055f2de3281d99718f5f1531744b102", - "0x48aeb7584ba26d3791f06fba360db435b3d7a174", - "0x42110a5133f91b49e32b671db86e2c44edc13832", - "0x4bf769b05e832fcdc9053fffbc78ca889acb5e1e", - "0x8c008bba2dd56b99f4a6ab276be3a478cb075f0c" - ], - "bittorrent": [ - "0xdb28719f7f938507dbfe4f0eae55668903d34a15", - "0x935faa2fcec6ab81265b301a30467bbc804b43d3", - "0x8d193c6efa90bcff940a98785d1ce9d093d3dc8a", - "0x17f235fd5974318e4e2a5e37919a209f7c37a6d1", - "0xae17940943ba9440540940db0f1877f101d39e8b", - "0xedf53026aea60f8f75fca25f8830b7e2d6200662", - "0x1249c65afb11d179ffb3ce7d4eedd1d9b98ad006", - "0xe887512ab8bc60bcc9224e1c3b5be68e26048b8b", - "0xe467f79e9869757dd818dfb8535068120f6bcb97", - "0x9888221fe6b5a2ad4ce7266c7826d2ad74d40ccf", - "0xca424b845497f7204d9301bd13ff87c0e2e86fcf", - "0x9b5f27f6ea9bbd753ce3793a07cba3c74644330d", - "0x23181f21dea5936e24163ffaba4ea3b316b57f3c" - ], - "klaytn": [ - "0xd7a4d10070a4f7bc2a015e78244ea137398c3b74", - "0x5388ce775de8f7a69d17fd5caa9f7dbfee65dfce", - "0x02cbe46fb8a1f579254a9b485788f2d86cad51aa", - "0x078db7827a5531359f6cb63f62cfa20183c4f10c", - "0x6270b58be569a7c0b8f47594f191631ae5b2c86c", - "0x0268dbed3832b87582b1fa508acf5958cbb1cd74", - "0xd6dab4cff47df175349e6e7ee2bf7c40bb8c05a3", - "0x168439b5eebe8c83db9eef44a0d76c6f54767ae4", - "0x4fa62f1f404188ce860c8f0041d6ac3765a72e67", - "0xce40569d65106c32550626822b91565643c07823", - "0x210bc03f49052169d5588a52c317f71cf2078b85", - "0xdcbacf3f7a069922e677912998c8d57423c37dfa", - "0xcd6f29dc9ca217d0973d3d21bf58edd3ca871a86", - "0xe4f05a66ec68b54a58b17c22107b02e0232cc817", - "0x5c74070fdea071359b86082bd9f9b3deaafbe32b", - "0x754288077d0ff82af7a5317c7cb8c444d421d103", - "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", - "0x16d0e1fbd024c600ca0380a4c5d57ee7a2ecbf9c", - "0x34d21b1e550d73cee41151c77f3c73359527a396", - "0xff3e7cf0c007f919807b32b30a4a9e7bd7bc4121", - "0xf6f6b8bd0ac500639148f8ca5a590341a97de0de", - "0x9eaefb09fe4aabfbe6b1ca316a3c36afc83a393f", - "0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654", - "0x98a8345bb9d3dda9d808ca1c9142a28f6b0430e1", - "0x981846be8d2d697f4dfef6689a161a25ffbab8f9", - "0x608792deb376cce1c9fa4d0e6b7b44f507cffa6a", - "0x5c13e303a62fc5dedf5b52d66873f2e59fedadc2", - "0xcb2c7998696ef7a582dfd0aafadcd008d03e791a", - "0xac9c1e4787139af4c751b1c0fadfb513c44ed833", - "0xe2765f3721dab5f080cf14ace661529e1ab9ade7", - "0x45830b92443a8f750247da2a76c85c70d0f1ebf3", - "0xfaa03a2ac2d1b8481ec3ff44a0152ea818340e6d", - "0x2b72d65941e657c1305b65fa330ffdde7b397239", - "0x61fbbfd5416c45f297a8e69ba113789c75f8841c", - "0x2eadfda6d830547b5168ba88c13d24156a026ce5", - "0x98aedff55dcc2e7a7d1899b325d1680527dd2742", - "0x2ff5371dad5c6ef76d55213b7c5a519f6654ba17", - "0xe9a88c33abf71c902f7581321d05e6516cbca761", - "0xfd844c2fca5e595004b17615f891620d1cb9bbb2", - "0x57d1a61e4fd09fbf16e35b04959e94dcf2032974", - "0xd2137fdf10bd9e4e850c17539eb24cfe28777753", - "0xe06597d02a2c3aa7a9708de2cfa587b128bd3815" - ], - "nova": [ - "0x657a66332a65b535da6c5d67b8cd1d410c161a08", - "0x1f5396f254ee25377a5c1b9c6bff5f44e9294fff", - "0x0000000000000000000000000000000000000000" - ], - "aurora": [ - "0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb", - "0xb12bfca5a55806aaf64e99521918a4bf0fc40802", - "0x4988a896b1227218e4a686fde5eabdcabd91571f", - "0xc42c30ac6cc15fac9bd938618bcaa1a1fae8501d", - "0x8bec47865ade3b172a928df8f990bc7f2a3b9f79", - "0xda2585430fef327ad8ee44af8f1f989a2a91a3d2", - "0x07379565cd8b0cae7c60dc78e7f601b34af2a21c", - "0x42cc1cbf253f89be6814a0f59f745b40b69b6220", - "0xd5e98caeb396dabe5a102bb9256b552944e3401f", - "0x274d83086c356e0cfc75933fbf838ca10a7e8274" - ], - "dfk": [ - "0xccb93dabd71c8dad03fc4ce5559dc3d89f67a260", - "0x77f2656d04e158f915bc22f07b779d94c1dc47ff", - "0x0ab87046fbb341d058f17cbc4c1133f25a20a52f", - "0x2df041186c844f8a2e2b63f16145bc6ff7d23e25" - ], - "cronos": [ - "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", - "0xc21223249ca28397b4b6541dffaecc539bff0c59", - "0x062e66477faf219f25d27dced647bf57c3107d52", - "0x654bac3ec77d6db497892478f854cf6e8245dca9", - "0x66e428c3f67a68878562e79a0234c1f83c208770", - "0xe243ccab9e66e6cf1215376980811ddf1eb7f689", - "0x87efb3ec1576dec8ed47e58b832bedcd86ee186e", - "0xca2503482e5d6d762b524978f400f03e38d5f962", - "0x45c135c1cdce8d25a3b729a28659561385c52671", - "0x39a65a74dc5a778ff93d1765ea51f57bc49c81b3", - "0xbed48612bc69fa1cab67052b42a95fb30c1bcfee", - "0xb888d8dd1733d72681b30c00ee76bde93ae7aa93", - "0x02dccaf514c98451320a9365c5b46c61d3246ff3", - "0x065de42e28e42d90c2052a1b49e7f83806af0e1f" - ], - "velas": [ - "0xc579d1f3cf86749e05cd06f7ade17856c2ce3126", - "0xe41c4324dcbd2926481101f8580d13930aff8a75", - "0x85219708c49aa701871ad330a94ea0f41dff24ca", - "0x6ab0b8c1a35f9f4ce107ccbd05049cb1dbd99ec5", - "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", - "0x2b8e9cd44c9e09d936149549a8d207c918ecb5c4", - "0xc9b3aa6e91d70f4ca0988d643ca2bb93851f3de4", - "0xe2c120f188ebd5389f71cf4d9c16d05b62a58993", - "0x01445c31581c354b7338ac35693ab2001b50b9ae", - "0xc111c29a988ae0c0087d97b33c6e6766808a3bd3", - "0x300a8be53b4b5557f48620d578e7461e3b927dd0", - "0x525bd1f949ffa2a0c5820f3b6fe61bb897466ff7", - "0x9b6fbf0ea23faf0d77b94d5699b44062e5e747ac", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0x8d9fb713587174ee97e91866050c383b5cee6209", - "0x3611fbfb06ffbcef9afb210f6ace86742e6c14a4" - ], - "telos": [ - "0xd102ce6a4db07d247fcc28f366a623df0938ca9e", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0xf390830df829cf22c53c8840554b98eafc5dcbc2", - "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", - "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73", - "0xb4b01216a5bc8f1c8a33cd990a1239030e60c905", - "0x017043607270ecbb440e20b0f0bc5e760818b3d8" - ], - "reichain": [ - "0xf8ab4aaf70cef3f3659d3f466e35dc7ea10d4a5d", - "0xdd2bb4e845bd97580020d8f9f58ec95bf549c3d9" - ], - "solana": [ - "So11111111111111111111111111111111111111112", - "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX", - "6LNeTYMqtNm1pBFN8PfhQaoLyegAH8GD32WmHU9erXKN", - "EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o", - "eqKJTf1Do4MDPyKisMYqVaUFpkEFAs3riGF3ceDH2Ca", - "FCqfQSujuPxy6V42UvafBhsysWtEq1vhjfMN1PUbgaxA", - "DdFPRnccQqLD4zCHrBqdY95D6hvw6PLWp9DEXj1fLCL9", - "8Yv9Jz4z7BUHP68dz8E8m3tMe6NKgpMUKn8KVqrPA6Fr", - "Grk6b4UMRWkgyq4Y6S1BnNRF4hRgtnMFp7Sorkv6Ez4u", - "8XSsNvaKU9FDhYWAv7Yc7qSNwuJSzVrXBNEk7AFiWF69", - "8qJSyQprMC57TWKaYEmetUR3UUiTP2M3hXdcvFhkZdmv", - "E77cpQ4VncGmcAXX16LHFFzNBEBb2U7Ar7LBmZNfCgwL", - "Bn113WT6rbdgwrm12UJtnmNqGqZjY4it2WoUQuQopFVn", - "FwEHs3kJEdMa2qZHv7SgzCiFXUQPEycEXksfBkwmS8gj", - "5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2", - "PUhuAtMHsKavMTwZsLaDeKy2jb7ciETHJP7rhbKLJGY" - ], - "astar": [ - "0xaeaaf0e2c81af264101b9129c00f4440ccf0f720", - "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c", - "0xad543f18cff85c77e140e3e5e3c3392f6ba9d5ca", - "0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52", - "0x75364d4f779d0bd0facd9a218c67f87dd9aff3b4", - "0xdd90e5e87a2081dcf0391920868ebc2ffb81a1af", - "0x6a2d262d56735dba19dd70682b39f6be9a931d98", - "0x3795c36e7d12a8c252a20c5a7b455f7c57b60283", - "0xde2578edec4669ba7f41c5d5d2386300bcea4678", - "0xffffffffffffffffffffffffffffffffffffffff", - "0x6de33698e9e9b787e09d3bd7771ef63557e148bb", - "0xcdb32eed99aa19d39e5d6ec45ba74dc4afec549f", - "0xc5bcac31cf55806646017395ad119af2441aee37", - "0x6df98e5fbff3041105cb986b9d44c572a43fcd22", - "0x29f6e49c6e3397c3a84f715885f9f233a441165c", - "0x257f1a047948f73158dadd03eb84b34498bcdc60", - "0xc4335b1b76fa6d52877b3046eca68f6e708a27dd", - "0x430d50963d9635bbef5a2ff27bd0bddc26ed691f", - "0x19574c3c8fafc875051b665ec131b7e60773d2c9", - "0xe511ed88575c57767bafb72bfd10775413e3f2b0", - "0xecc867de9f5090f55908aaa1352950b9eed390cd", - "0xb361dad0cc1a03404b650a69d9a5adb5af8a531f", - "0xc404e12d3466accb625c67dbab2e1a8a457def3c", - "0x4dd9c468a44f3fef662c35c1e9a6108b70415c2c", - "0xdbd71969ac2583a9a20af3fb81fe9c20547f30f3", - "0x9914bff0437f914549c673b34808af6020e2b453", - "0x347e53263f8fb843ec605a1577ec7c8c0cac7a58", - "0x02dac4898b2c2ca9d50ff8d6a7726166cf7bcfd0", - "0x4bf769b05e832fcdc9053fffbc78ca889acb5e1e", - "0xb7ab962c42a8bb443e0362f58a5a43814c573ffb", - "0x733ebcc6df85f8266349defd0980f8ced9b45f35", - "0x5271d85ce4241b310c0b34b7c2f1f036686a6d7c", - "0x431d5dff03120afa4bdf332c61a6e1766ef37bdb" - ], - "cardano": [ - "ADA" - ], - "functionx": [ - "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd", - "0xd567b3d7b8fe3c79a1ad8da978812cfc4fa05e75", - "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", - "0xeceeefcee421d8062ef8d6b4d814efe4dc898265" - ], - "clv": [ - "0x6d6ad95425fcf315c39fa6f3226471d4f16f27b3", - "0x1376c97c5c512d2d6f9173a9a3a016b6140b4536", - "0xa1c3767c93e7b51ecb445fdbae1494dfc654e524", - "0x30bebbc0b6b357945ac30660e025c1532b9c7804", - "0xf91193a62879279d6b8f209f89b6418e3c0e5cbf", - "0x4a52f069cb00905d996a0d7b811d78e60b4cb09e" - ], - "tron": [ - "0x0000000000000000000000000000000000000000", - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", - "TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8", - "TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn", - "TVHH59uHVpHzLDMFFpUgCx2dNAQqCzPhcR", - "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9", - "TR3DLthpnDdCGabhVDbD3VMsiJoCXY3bZd", - "THbVQp8kMjStKNnf2iCY6NEzThKMK5aBHg", - "THb4CqiFdwNHsWsQCs4JhzwjMWys4aqCbF" - ], - "lachain": [ - "0x3a898d596840c6b6b586d722bfadcc8c4761bf41" - ], - "theta": [ - "0x4dc08b15ea0e10b96c41aec22fab934ba15c983e", - "0x1336739b05c7ab8a526d40dcc0d04a826b5f8b03" - ], - "zyx": [ - "0xc9e1aea009b0bae9141f3dc7523fb42fd48c8656" - ], - "ubiq": [ - "0x1fa6a37c64804c0d797ba6bc1955e50068fbf362" - ], - "cosmos": [ - "uatom" - ], - "terra2": [ - "uluna", - "terra1nsuqsk6kh58ulczatwev87ttq2z6r3pusulg9r24mfj2fvtzd4uq3exn26" - ], - "terra": [ - "uluna", - "uusd" - ], - "crescent": [ - "ubcre", - "ucre" - ], - "orai": [ - "orai", - "orai12hzjxfh77wl572gdzct2fxv2arxcwh6gykc7qh" - ], - "juno": [ - "ujuno" - ], - "osmosis": [ - "uion" - ], - "kujira": [ - "ukuji", - "factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk" - ], - "injective": [ - "inj", - "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", - "factory/inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk/inj1q6zlut7gtkzknkk773jecujwsdkgq882akqksk" - ], - "comdex": [ - "ucmdx", - "ucmst" - ], - "near": [ - "token.jumbo_exchange.near", - "token.paras.near", - "marmaj.tkn.near", - "linear-protocol.near", - "token.pembrock.near", - "token.burrow.near", - "token.marmaj.near" - ], - "multivac": [ - "0x8e321596267a4727746b2f48bc8736db5da26977", - "0x2f9c74d3c42023c533437c9ee743d4a6329e78df", - "0xea1199d50ee09fa8062fd9da3d55c6f90c1babd2" - ], - "tomochain": [ - "0xb1f66997a5760428d3a87d68b90bfe0ae64121cc" - ], - "ethereumclassic": [ - "0x82a618305706b14e7bcf2592d4b9324a366b6dad", - "0x1953cab0e5bfa6d4a9bad6e05fd46c1cc6527a5a", - "0x35e9a89e43e45904684325970b2e2d258463e072" - ], - "cube": [ - "0x9d3f61338d6eb394e378d28c1fd17d5909ac6591", - "0x57eea49ec1087695274a9c4f341e414eb64328c2", - "0x040ea5c10e6ba4badb6c433a365ccc4968697230", - "0x79f1520268a20c879ef44d169a4e3812d223c6de", - "0x00f0d8595797943c12605cd59bc0d9f63d750ccf", - "0x3a1f6e3e6f26e92bb0d07841eb68f8e84f39751e", - "0xee9801669c6138e84bd50deb500827b776777d28" - ], - "elastos": [ - "0x517e9e5d46c1ea8ab6f78677d6114ef47f71f6c4", - "0x9f1d0ed4e041c503bd487e5dc9fc935ab57f9a57" - ], - "energyweb": [ - "0x6b3bd0478df0ec4984b168db0e12a539cc0c83cd" - ], - "milkomeda_a1": [ - "0xaf86e6c5fd9daf53e5100ed38bab2572609fca27", - "0xbc31960a049fe10297ed8432fb61dd734fead4ea", - "0x32564ae38e5dbf316958ce25a6ad2a2249ebcc2d", - "0x522b61755b5ff8176b2931da7bf1a5f9414eb710", - "0xc9baa8cfdde8e328787e29b4b078abf2dadc2055", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73", - "0x2421db204968a367cc2c866cd057fa754cb84edf", - "0x8dc0dfa2aec0d4410c8c60c5f9cd0cd37b05a06a", - "0x150d2421e09eea31beaa68b7a248700eeceda87a" - ], - "ultron": [ - "0x3a4f06431457de873b588846d139ec0d86275d54", - "0x2318bf5809a72aabadd15a3453a18e50bbd651cd", - "0xd2b86a80a8f30b83843e247a50ecdc8d843d87dd", - "0xc7cac85c1779d2b8ada94effff49a4754865e2e4", - "0x97fdd294024f50c388e39e73f1705a35cfe87656", - "0x3c4e0fded74876295ca36f62da289f69e3929cc4" - ], - "bitgert": [ - "0x0eb9036cbe0f052386f36170c6b07ef0a0e3f710", - "0xc3b730dd10a7e9a69204bdf6cb5a426e4f1f09e3", - "0x11203a00a9134db8586381c4b2fca0816476b3fd" - ], - "echelon": [ - "0xadee5159f4f82a35b9068a6c810bdc6c599ba6a8" - ], - "rei": [ - "0x2545af3d8b11e295bb7aedd5826021ab54f71630", - "0x988a631caf24e14bb77ee0f5ca881e8b5dcfcec7", - "0x8059e671be1e76f8db5155bf4520f86acfdc5561", - "0x5b07f2582d0cc26e400d56266aebb201c93560ed" - ], - "tombchain": [ - "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", - "0x4200000000000000000000000000000000000108", - "0x4200000000000000000000000000000000000006", - "0x4200000000000000000000000000000000000101", - "0x4200000000000000000000000000000000000100", - "0x4200000000000000000000000000000000000109" - ], - "rsk": [ - "0x542fda317318ebf1d3deaf76e0b632741a7e677d", - "0x967f8799af07df1534d48a95a5c9febe92c53ae0", - "0x1d931bf8656d795e50ef6d639562c5bd8ac2b78f" - ], - "polis": [ - "0x6fc851b8d66116627fb1137b9d5fe4e2e1bea978" - ], - "kekchain": [ - "0x71ec0cb8f7dd4f4c5bd4204015c4c287fbdaa04a", - "0x54bd9d8d758ac3717b37b7dc726877a23aff1b89" - ], - "aptos": [ - "0x1::aptos_coin::AptosCoin", - "0x5e156f1207d0ebfa19a9eeff00d62a282278fb8719f4fab3a586a0a2c0fffbea::coin::T", - "0xa2eda21a58856fda86451436513b867c97eecb4ba099da5775520e0f7492e852::coin::T", - "0xae478ff7d83ed072dbc5e264250e67ef58f57c99d89b447efd8a0a2e8b2be76e::coin::T", - "0xcc8a89c8dce9693d354449f1f73e60e14e347417854f029db5bc8e7454008abb::coin::T", - "0xc91d826e29a3183eb3b6f6aa3a722089fdffb8e9642b94c5fcd4c48d035c0080::coin::T", - "0x1000000fa32d122c18a6a31c009ce5e71674f22d06a581bb0a15575e6addadcc::usda::USDA", - "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDC", - "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDT", - "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WETH", - "0xdd89c0e695df0692205912fb69fc290418bed0dbe6e4573d744a6d5e6bab6c13::coin::T", - "0x84d7aeef42d38a5ffc3ccef853e1b82e4958659d16a7de736a29c55fbbeb0114::staked_aptos_coin::StakedAptosCoin", - "0xd11107bdf0d6d7040c6c0bfbdecb6545191fdf13e8d8d259952f53e1713f61b5::staked_coin::StakedAptos", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::BnbCoin", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::BusdCoin", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::UsdcCoin", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::UsdtCoin", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::DaiCoin", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WethCoin", - "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WbtcCoin" - ], - "dogechain": [ - "0xb7ddc6414bf4f5515b52d8bdd69973ae205ff101", - "0x7b4328c127b85369d9f82ca0503b000d09cf9180", - "0x765277eebeca2e31912c9946eae1021199b39c61", - "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", - "0xb44a9b6905af7c801311e8f4e76932ee959c663c", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0xf27ee99622c3c9b264583dacb2cce056e194494f", - "0x97513e975a7fa9072c72c92d8000b0db90b163c5", - "0x332730a4f6e03d9c55829435f10360e13cfa41ff", - "0xa649325aa7c5093d12d6f98eb4378deae68ce23f", - "0xb12c13e66ade1f72f71834f2fc5082db8c091358", - "0xdc42728b0ea910349ed3c6e1c9dc06b5fb591f98", - "0x85c2d3bebffd83025910985389ab8ad655abc946", - "0xb3306f03595490e5cc3a1b1704a5a158d3436ffc", - "0x9f4614e4ea4a0d7c4b1f946057ec030bee416cbb", - "0x7f8e71dd5a7e445725f0ef94c7f01806299e877a", - "0xd0c6179c43c00221915f1a61f8ec06a5aa32f9ec", - "0x10d70831f9c3c11c5fe683b2f1be334503880db6", - "0x1fc532187b4848d2f9c564531b776a4f8e11201d", - "0x7264610a66eca758a8ce95cf11ff5741e1fd0455", - "0xbfbb7b1d22ff521a541170cafe0c9a7f20d09c3b", - "0x1df5c9b7789bd1416d005c15a42762481c95edc2" - ], - "canto": [ - "0x826551890dc65655a0aceca109ab11abdbd7a07b", - "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd", - "0xd567b3d7b8fe3c79a1ad8da978812cfc4fa05e75", - "0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503", - "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", - "0xeceeefcee421d8062ef8d6b4d814efe4dc898265", - "0x7264610a66eca758a8ce95cf11ff5741e1fd0455" - ], - "ontology_evm": [ - "0xd8bc24cfd45452ef2c8bc7618e32330b61f2691b" - ], - "algorand": [ - "1", - "163650", - "312769", - "2751733", - "6547014", - "27165954", - "31566704", - "137020565", - "137594422", - "226701642", - "230946361", - "239444645", - "283820866", - "287867876", - "297995609", - "300208676", - "342889824", - "386192725", - "386195940", - "403499324", - "441139422", - "444035862", - "463554836", - "465865291", - "470842789", - "511484048", - "559219992", - "571576867", - "607591690", - "657291910", - "663905154", - "684649988", - "692085161", - "700965019", - "724480511", - "744665252", - "792313023", - "793124631", - "841126810", - "871930188" - ], - "shiden": [ - "0x0f933dc137d21ca519ae4c7e93f87a4c8ef365ef", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", - "0x735abe48e8782948a37c7765ecb76b98cde97b0f", - "0x722377a047e89ca735f09eb7cccab780943c4cb4", - "0xb4bca5955f26d2fa6b57842655d7acf2380ac854", - "0x765277eebeca2e31912c9946eae1021199b39c61", - "0x332730a4f6e03d9c55829435f10360e13cfa41ff", - "0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a" - ], - "tezos": [ - "tezos", - "KT1UpeXdK6AJbX58GJ92pLZVCucn2DR8Nu4b", - "KT1VYsVfmobT7rsMVivvZ4J8i3bPiqz12NaH", - "KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b", - "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", - "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", - "KT1JkoE42rrMBP9b2oDhbx6EUr26GcySZMUH", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-19", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-17", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-11", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-10", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-1", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-20", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-5", - "KT19DUSZw7mfeEATrbWVPHRrWNVbNnmfFAE6", - "KT1TgmD7kXQzofpuc9VbTRMdZCS2e6JDuTtc", - "KT1TwzD6zV3WeJ39ukuqxcfK2fJCnhvrdN1X", - "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", - "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-18", - "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", - "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", - "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", - "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", - "KT1XRPEPXBZK25R3HTZP2O1X7XDMMMFOCKNW-0", - "KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL", - "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW-2", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-0", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-1", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-2", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-3", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-4", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-5", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-6", - "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-7", - "KT1XnTn74bUtxHfDtBmm2bGZAQfhPbvKWR8o", - "KT1F1mn2jbqQCJcsNgYKVAQjvenecNMY2oPK", - "KT193D4vozYnhGJQVtw7CoxxqphqUEEwK6Vb", - "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", - "KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", - "KT1XTxpQvo7oRCqp85LikEZgAZ22uDxhbWJv", - "KT1A5P4ejnLix13jtadsfV9GCnXLMNnab8UT", - "KT1LRboPna9yQY9BrjtQYDS1DVxhKESK4VVd", - "KT1REEb5VxWRjcHm5GzDMwErMmNFftsE5Gpf", - "KT1AEfeckNbdEYwaMKkytBwPJPycz7jdSGea", - "KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR", - "KT19y6R8x53uDKiM46ahgguS6Tjqhdj2rSzZ" - ], - "hpb": [ - "0xbe05ac1fb417c9ea435b37a9cecd39bc70359d31" - ], - "godwoken": [ - "0xe934f463d026d97f6ce0a10215d0ac4224f0a930", - "0xc3b946c53e2e62200515d284249f2a91d9df7954", - "0xa21b19d660917c1de263ad040ba552737cfcef50", - "0x07a388453944bb54be709ae505f14aeb5d5cbb2c", - "0x5c30d9396a97f2279737e63b2bf64cc823046591", - "0x7818fa4c71dc3b60049fb0b6066f18ff8c720f33", - "0x3f8d2b24c6fa7b190f368c3701ffcb2bd919af37" - ], - "godwoken_v1": [ - "0xc296f806d15e97243a08334256c705ba5c5754cd", - "0x7538c85cae4e4673253ffd2568c1f1b48a71558a", - "0x9e858a7aaedf9fdb1026ab1f77f627be2791e98a", - "0xbadb9b25150ee75bb794198658a4d0448e43e528", - "0x82455018f2c32943b3f12f4e59d0da2faf2257ef", - "0xef2439e020509259fa603c34b35a81ffe676cfb4", - "0xb66954619363145a05ef835547449eb9050d82f6", - "0x186181e225dc1ad85a4a94164232bd261e351c33", - "0xfa307cfdea89dc197a346c338a98ac85d517af6e", - "0xdff2facdfe47c1d5b51f18231f900949f1d5988f", - "0x53bb26dc8c5efc6c95c37155aca487d1d043436a", - "0x2c9fc6087875646112f66a3c92fef2d158faa76e", - "0x317f8d18fb16e49a958becd0ea72f8e153d25654", - "0x8e019acb11c7d17c26d334901fa2ac41c1f44d50", - "0x3c790b38f466514ffcb4230e7b2334e52b64c942", - "0xcd7bc9fc617a4f82ec1c8359d1c8610b90e3b44c", - "0x1c428a6539a40ec5bb481631266a51cd19b233b1", - "0xb44a9b6905af7c801311e8f4e76932ee959c663c", - "0x765277eebeca2e31912c9946eae1021199b39c61", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f" - ], - "waves": [ - "5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR", - "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", - "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on", - "474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu", - "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ", - "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS", - "WAVES", - "2Fh9m3dNQXycHdnytEaETN3P1gDT7ij5U4HjMqQBeaqN", - "4GZH8rk5vDmMXJ81Xqfm3ovFaczqMnQ11r7aELiNxWBV", - "3KhNcHo4We1G5EWps7b1e5DTdLgWDzctc8S6ynu37KAb", - "GVxGPBtgVWMW1wHiFnfaCakbJ6sKgZgowJgW5Dqrd7JH", - "HcHacFH51pY91zjJa3ZiUVWBww54LnsL4EP3s7hVGo9L", - "4YmM7mj3Av4DPvpNpbtK4jHbpzYDcZuY6UUnYpqTbzLj", - "6QUVF8nVVVvM7do7JT2eJ5o5ehnZgXUg13ysiB9JiQrZ", - "7TMu26hAs7B2oW6c5sfx45KSZT7GQA3TZNYuCav8Dcqt", - "E4rss7qLUcawCvD2uMrbLeTMPGkX15kS3okWCbUhLNKL", - "HLckRcg7hJ3Syf3PrGftFijKqQMJipf81WY3fwvHCJbe", - "8zUYbdB8Q6mDhpcXYv52ji8ycfj4SDX4gJXS7YY3dA4R", - "8DLiYZjo3UUaRBTHU7Ayoqg4ihwb6YH1AfXrrhdjQ7K1", - "47cyc68FWJszCWEwMWVsD9CadjS2M1XtgANuRGbEW8UH", - "2bbGhKo5C31iEiB4CwGuqMYwjD7gCA9eXmm51fe2v8vT", - "BLRxWVJWaVuR2CsCoTvTw2bDZ3sQLeTbCofcJv7dP5J4", - "A1uMqYTzBdakuSNDv7CruWXP8mRZ4EkHwmip2RCauyZH", - "2thtesXvnVMcCnih9iZbJL3d2NQZMfzENJo8YFj6r5jU", - "2GBgdhqMjUPqreqPziXvZFSmDiQVrxNuGxR1z7ZVsm4Z", - "Aug9ccbPApb1hxXSue8fHuvbyMf1FV1BYBtLUuS5LZnU", - "ATQdLbehsMrmHZLNFhUm1r6s14NBT5JCFcSJGpaMrkAr", - "8YyrMfuBdZ5gtMWkynLTveRvGb6LJ4Aff9rpz46UUMW", - "EfwRV6MuUCGgAUchdsF4dDFnSpKrDW3UYshdaDy4VBeB", - "5zoDNRdwVXwe7DveruJGxuJnqo7SYhveDeKb8ggAuC34", - "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p", - "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8", - "6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g", - "Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT", - "7LMV3s1J4dKpMQZqge5sKYoFkZRLojnnU49aerqos4yg", - "9sQutD5HnRvjM1uui5cVC4w9xkMPAfYEV8ymug3Mon2Y", - "DHgwrRvVyqJsepd32YbBqUeDH4GJ1N984X8QoekjgH8J", - "HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk", - "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" - ], - "songbird": [ - "0x02f0826ef6ad107cfc861152b32b52fd11bab9ed", - "0x70ad7172ef0b131a1428d0c1f66457eb041f2176", - "0xc348f894d0e939fe72c467156e6d7dcbd6f16e21" - ], - "energi": [ - "0x7a86173daa4fda903c9a4c0517735a7d34b9ec39", - "0xa55f26319462355474a9f2c8790860776a329aa4" - ], - "nahmii": [ - "0x4200000000000000000000000000000000000006", - "0x595dba438a1bf109953f945437c1584319515d88" - ], - "curio": [ - "0x134ebab7883dfa9d04d20674dd8a8a995fb40ced" - ], - "gochain": [ - "0xcc237fa0a4b80ba47992d102352572db7b96a6b5", - "0x97a19ad887262d7eca45515814cdef75acc4f713", - "0x67bbb47f6942486184f08a671155fcfa6cad8d71" - ], - "smartbch": [ - "0x3743ec0673453e5009310c727ba4eaf7b3a1cc04", - "0x0b00366fbf7037e9d75e4a569ab27dab84759302", - "0x7b2b3c5308ab5b2a1d9a94d20d35ccdf61e05b72", - "0x24d8d5cbc14fa6a740c3375733f0287188f8df3b", - "0xbc2f884680c95a02cea099da2f524b366d9028ba", - "0x265bd28d79400d55a1665707fa14a72978fa6043" - ], - "palm": [ - "0x4c1f6fcbd233241bf2f4d02811e3bf8429bc27b8", - "0x726138359c17f1e56ba8c4f737a7caf724f6010b" - ], - "syscoin": [ - "0xd3e822f3ef011ca5f17d82c956d952d8d7c3a1bb", - "0x2bf9b864cdc97b08b6d79ad4663e71b8ab65c45c", - "0x7c598c96d02398d89fbcb9d41eab3df0c16f227d", - "0x922d641a426dcffaef11680e5358f34d97d112e1" - ], - "vision": [ - "0x1db6cdc620388a0b6046b20cd59503a0839adcff", - "0x4dE4B92C12dD4584873e72447573382C41da5597", - "0x9261Bb697FE632dd4746c78406E955123085Bf4C", - "0xf6515Ce2ab3482C84Daaef961793bdFa3266b8ad", - "0x79ffbc4fff98b821d59dbd7b33f91a2783006b6f" - ], - "kava": [ - "0xc86c7c0efbd6a49b35e8714c5f59d99de09a225b", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0xb44a9b6905af7c801311e8f4e76932ee959c663c", - "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", - "0x765277eebeca2e31912c9946eae1021199b39c61", - "0x7c598c96d02398d89fbcb9d41eab3df0c16f227d", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0x332730a4f6e03d9c55829435f10360e13cfa41ff", - "0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a", - "0xc13791da84f43525189456cfe2026c60d3b7f706", - "0x472402d47da0587c1cf515dafbafc7bce6223106", - "0xeb466342c4d449bc9f53a865d5cb90586f405215", - "0x7f5373ae26c3e8ffc4c77b7255df7ec1a9af52a6", - "0x5c7e299cf531eb66f2a1df637d37abb78e6200c7", - "0xa0eeda2e3075092d66384fe8c91a1da4bca21788", - "0xdb0e1e86b01c4ad25241b1843e407efc4d615248", - "0xea616011e5ac9a5b91e22cac59b4ec6f562b83f9" - ], - "sx": [ - "0xaa99be3356a11ee92c3f099bd7a038399633566f", - "0xa173954cc4b1810c0dbdb007522adbc182dab380", - "0xe2aa35c2039bd0ff196a6ef99523cc0d3972ae3e", - "0xfa6f64dfbad14e6883321c2f756f5b22ff658f9c", - "0x53813cd4acd7145a716b4686b195511fa93e4cb7", - "0x7dc31a2fcbfbad1ed4519111fd33f78316bcbc81" - ], - "meter": [ - "0x5729cb3716a315d0bde3b5e489163bf8b9659436", - "0x228ebbee999c6a7ad74a6130e81b12f9fe237ba3", - "0x160361ce13ec33c993b5cca8f62b6864943eb083", - "0xd86e243fc0007e6226b07c9a50c9d70d78299eb5", - "0x6abaedab0ba368f1df52d857f24154cc76c8c972", - "0x24aa189dfaa76c671c279262f94434770f557c35", - "0x75fd6f7edcc5e7a8100ead3d29ccd844153ef0f3", - "0x5fa41671c48e3c951afc30816947126ccc8c162e" - ], - "callisto": [ - "0xf5ad6f6edec824c7fd54a66d241a227f6503ad3a", - "0xbf6c50889d3a620eb42c0f188b65ade90de958c4", - "0xccc766f97629a4e14b3af8c91ec54f0b5664a69f", - "0xcc208c32cc6919af5d8026dab7a3ec7a57cd1796", - "0xccde29903e621ca12df33bb0ad9d1add7261ace9", - "0x9fae2529863bd691b4a7171bdfcf33c7ebb10a65" - ], - "thundercore": [ - "0x0000000000000000000000000000000000000000", - "0x413cefea29f2d07b8f2acfa69d92466b9535f717", - "0x4f3c8e20942461e2c3bdd8311ac57b0c222f2b82", - "0x6576bb918709906dcbfdceae4bb1e6df7c8a1077", - "0x22e89898a04eaf43379beb70bf4e38b1faf8a31e", - "0xbeb0131d95ac3f03fd15894d0ade5dbf7451d171" - ], - "conflux": [ - "0x14b2d3bc65e74dae1030eafd8ac30c533c976a9b", - "0x1f545487c62e5acfea45dcadd9c627361d1616d8", - "0xa47f43de2f9623acb395ca4905746496d2014d57", - "0x6963efed0ab40f6c3d7bda44a05dcf1437c44372 ", - "0xfe97e85d13abd9c1c33384e796f10b73905637ce" - ], - "muuchain": [ - "0x875358f6194d7c622d6355455f3137cceb2955c4" - ], - "iotex": [ - "0xa00744882684c3e4747faefd68d283ea44099d03", - "0x3fe04320885e6124231254c802004871be681218", - "0xe1ce1c0fa22ec693baca6f5076bcdc4d0183de1c", - "0x6fbcdc1169b5130c59e72e51ed68a84841c98cd1", - "0x3cdb7c48e70b854ed2fa392e21687501d84b3afc", - "0x3b2bf2b523f54c4e454f08aa286d03115aff326c", - "0xc04da3a99d17135857bb937d2fbb321d3b6c6a81", - "0x42c9255d5e522e83b16ea11a3ba04c2d3afca079", - "0x037346e5a5722957ac2cab6ceb8c74fc18cea91d", - "0x84abcb2832be606341a50128aeb1db43aa017449", - "0xacee9b11cd4b3f57e58880277ac72c8c41abe4e4", - "0x62a9d987cbf4c45a550deed5b57b200d7a319632", - "0x1cbad85aa66ff3c12dc84c5881886eeb29c1bb9b", - "0xd6070ae98b8069de6b494332d1a1a81b6179d960", - "0xec690cdd448e3cbb51ed135df72301c3265a8f80", - "0x4d7b88403aa2f502bf289584160db01ca442426c", - "0x0258866edaf84d6081df17660357ab20a07d0c80", - "0xc7b93720f73b037394ce00f954f849ed484a3dea", - "0x17df9fbfc1cdab0f90eddc318c4f6fcada730cf2", - "0x4752456e00def6025c77b55a88a2f8a1701f92f9", - "0x490cfbf9b9c43633ddd1968d062996227ef438a9", - "0x97e6c48867fdc391a8dfe9d169ecd005d1d90283", - "0x86702a7f8898b172de396eb304d7d81207127915", - "0x8e66c0d6b70c0b23d39f4b21a1eac52bba8ed89a", - "0x176cb5113b4885b3a194bd69056ac3fe37a4b95c", - "0x99b2b0efb56e62e36960c20cd5ca8ec6abd5557a" - ], - "ronin": [ - "0xe514d9deb7966c8be0ca922de8a064264ea6bcd4", - "0x97a9107c1793bc407d6f527b77e7fff4d812bece", - "0xa8754b9fa15fc18bb59458815510e40a12cd2014", - "0xc99a6a985ed2cac1ef41640596c5a5f9f4e19ef5", - "0x0b7007c13325c48911f73a2dad5fa5dcbf808adc" - ], - "arbitrum_nova": [ - "0x722e8bdd2ce80a4422e880164f2079488e115365", - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", - "0x52484e1ab2e2b22420a25c20fa49e173a26202cd", - "0x750ba8b76187092b0d1e87e28daaf484d1b5273b" - ], - "ethpow": [ - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "0x0c9f28fbdfd79f7c00b805d8c63d053c146d282c", - "0x7bf88d2c0e32de92cdaf2d43ccdc23e8edfd5990", - "0x11bbb41b3e8baf7f75773db7428d5acee25fec75", - "0x8a496486f4c7cb840555bc2be327cba1447027c3", - "0x5df101f56ea643e06066392d266e9f4366b9186d", - "0xaf3ccfd9b59b36628cc2f659a09d6440795b2520", - "0x312b15d6d531ea0fe91ddd212db8c0f37e4cc698", - "0x2ad7868ca212135c6119fd7ad1ce51cfc5702892", - "0x34a9c05b638020a07bb153bf624c8763bf8b4a86", - "0xbd1563046a90f18127fd39f3481fd8d6ab22877f", - "0xf61eb8999f2f222f425d41da4c2ff4b6d8320c87", - "0x4bbd68d8b1f25ae7b460e3347c637fe9e7338e0c", - "0x25de68ef588cb0c2c8f3537861e828ae699cd0db", - "0x0b35d852dcb8b59eb1e8d3182ebad4e96e2df8f0" - ], - "xdc": [ - "0xd4b5f10d61916bd6e0860144a91ac658de8a1437", - "0x951857744785e80e2de051c32ee7b25f9c458c42", - "0x36726235dadbdb4658d33e62a249dca7c4b2bc68", - "0x5d5f074837f5d4618b3916ba74de1bf9662a3fed", - "0xd04275e2fd2875beaade6a80b39a75d4fe267df6", - "0xff7412ea7c8445c46a8254dfb557ac1e48094391" - ], - "kardia": [ - "0xaf984e23eaa3e7967f3c5e007fbe397d8566d23d", - "0x551a5dcac57c66aa010940c2dcff5da9c53aa53b", - "0x92364ec610efa050d296f1eeb131f2139fb8810e" - ], - "empire": [ - "0xc61a71c75ed4742dcae74b8cac27a37d46fc6751" - ], - "boba_bnb": [ - "0x9f98f9f312d23d078061962837042b8918e6aff2", - "0x4200000000000000000000000000000000000006", - "0x4200000000000000000000000000000000000023" - ], - "boba_avax": [ - "0x126969743a6d300bab08f303f104f0f7dbafbe20", - "0x26c319b7b2cf823365414d082698c8ac90cbba63", - "0x4200000000000000000000000000000000000023" - ], - "omax": [ - "0xfebabc6a9b2ec46d6357879b8bf39b593f11a5b9" - ], - "wemix": [ - "0x7d72b22a74a216af4a002a1095c8c707d6ec1c5f", - "0x8e81fcc2d4a3baa0ee9044e0d7e36f59c9bba9c1", - "0x461d52769884ca6235b685ef2040f47d30c94eb5", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d" - ], - "tlchain": [ - "0x422b6cdf97c750a0edcddc39c88f25379e59e96e" - ], - "zeniq": [ - "0x74dc1c4ec10abe9f5c8a3eabf1a90b97cdc3ead8" - ], - "dexit": [ - "0x414b8baf9950c87804cf7e23bb43a58ae7e1e202" - ], - "step": [ - "0xb58a9d5920af6ac1a9522b0b10f55df16686d1b6", - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", - "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73" - ], - "flare": [ - "0x1d80c49bbbcd1c0911346656b529df9e5c2f783d" - ], - "ibc": [ - "CA1261224952DF089EFD363D8DBB30A8AB6D8CD181E60EE9E68E432F8DE14FE3", - "5A76568E079A31FA12165E4559BA9F1E9D4C97F9C2060B538C84DCD503815E30", - "6F4968A73F90CF7DE6394BF937D6DF7C7D162D74D839C13F53B41157D315E05F", - "C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", - "4627AD2524E3E0523047E35BB76CC90E37D9D57ACF14F0FCBCEB2480705F3CB8", - "C950356239AD2A205DE09FDF066B1F9FF19A7CA7145EA48A5B19B76EE47E52F7", - "DBF5FA602C46392DE9F4796A0FC7D02F3A8A3D32CA3FAA50B761D4AA6F619E95", - "CD01034D6749F20AAC5330EF4FD8B8CA7C40F7527AB8C4A302FBD2A070852EE1", - "F1806958CA98757B91C3FA1573ECECD24F6FA3804F074A6977658914A49E65A3", - "BFF0D3805B50D93E2FA5C0B2DDF7E0B30A631076CD80BC12A48C0E95404B4A41", - "11F940BCDFD7CFBFD7EDA13F25DA95D308286D441209D780C9863FD4271514EB", - "295548A78785A1007F232DE286149A6FF512F180AF5657780FC89C009E2C348F", - "27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", - "961FA3E54F5DCCA639F37A7C45F7BBE41815579EF1513B5AFBEFCFEB8F256352", - "799FDD409719A1122586A629AE8FCA17380351A51C1F47A80A1B8E7F2A491098", - "B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395", - "DA59C009A0B3B95E0549E6BF7B075C8239285989FF457A8EDDBB56F10B2A6986", - "0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B", - "47BD209179859CDE4A2806763D7189B6E6FE13A17880FE2B42DE1E6C1E329E23", - "EA7DF7F779C7F14E07172E5713E07356B55F01496CA649DDE46CF8FBF1A8466D", - "F3AA7EF362EC5E791FE78A0F4CCC69FEE1F9A7485EB1A8CAB3F6601C00522F10", - "EFF323CC632EC4F747C61BCE238A758EFDB7699C3226565F7C20DA06509D59A5", - "167E3D88D71B7D2F6308D3EF93FC3DD51932B2D9672D72B71418F61CBC5F5717", - "B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C", - "A358D7F19237777AF6D8AD0E0F53268F8B18AE8A53ED318095C14D6D7F3B2DB5", - "1B38805B1C75352B28169284F96DF56BDEBD9E8FAC005BDCC8CF0378C82AA8E7", - "4F393C3FCA4190C0A6756CE7F6D897D5D1BE57D6CCB80D0BC87393566A7B6602", - "987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4", - "3607EB5B5E64DD1C0E12E07F077FF470D5BC4706AFCBC98FE1BA960E5AE4CE07", - "EA3E1640F9B1532AB129A571203A0B9F789A7F14BB66E350DCBFA18E1A1931F0", - "9EC8A1701813BB7B73BFED2496009ABB2C8BF187E6CDFA788D77F68E08BC05CD", - "F2331645B9683116188EF36FC04A809C28BD36B54555E8705A37146D0182F045", - "CBF67A2BCF6CAE343FDF251E510C8E18C361FC02B23430C121116E0811835DEF", - "B3504E092456BA618CC28AC671A71FB08C6CA0FD0BE7C8A5B5A3E2DD933CC9E4", - "E1616E7C19EA474C565737709A628D6F8A23FF9D3E9A7A6871306CF5E0A5341E", - "903A61A498756EA560B85A85132D3AEE21B5DEDD41213725D22ABF276EA6945E", - "C01154C2547F4CB10A985EA78E7CD4BA891C1504360703A37E1D7043F06B5E1F", - "E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB", - "16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821", - "B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB", - "624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4", - "3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25", - "B37E4D9FB5B30F3E1E20A4B2DE2A005E584C5C822C44527546556AE2470B4539", - "EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034", - "DADB399E742FCEE71853E98225D13E44E90292852CD0033DF5CABAB96F80B833" - ], - "starknet": [ - "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8", - "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8", - "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac", - "0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3", - "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" - ], - "ton": [ - "0x0000000000000000000000000000000000000000", - "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c", - "Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF", - "EQDQoc5M3Bh8eWFephi9bClhevelbZZvWhkqdo80XuY_0qXv", - "EQAW42HutyDem98Be1f27PoXobghh81umTQ-cGgaKVmRLS7-", - "EQC61IQRl0_la95t27xhIpjxZt32vl1QQVF2UgTNuvD18W-4", - "EQC_1YoM8RBixN95lz7odcF3Vrkc_N8Ne7gQi7Abtlet_Efi" - ], - "defichain": [ - "DFI", - "DUSD", - "ETH", - "BTC", - "USDC", - "USDT" - ], - "elrond": [ - "0x0000000000000000000000000000000000000000", - "AERO-458bbf", - "RIDE-7d18e9", - "ZPAY-247875", - "UTK-2f80e9", - "KOSON-5dd4fa", - "ASH-a642d1", - "BSK-baa025", - "BHAT-c1fde3", - "CRT-52decf", - "CTP-298075", - "CHECKR-60108b", - "CYC-b4ed61", - "LPAD-84628f", - "EVLD-43f56f", - "FITY-73f8fc", - "ISET-84e55e", - "ITHEUM-df6f26", - "erd1hmfwpvsqn8ktzw3dqd0ltpcyfyasgv8mr9w0qecnmpexyp280y8q47ca9d", - "KRO-df97ec", - "LAND-40f26f", - "QWT-46ac01", - "SUPER-507aa6", - "TLC-1a2357", - "UPARK-982dd6", - "erd1qqqqqqqqqqqqqpgq3ahw8fctzfnwgvq2g4hjsqzkkvgl9ksr2jps646dnj", - "WEGLD-bd4d79", - "MEX-455c57" - ], - "bitindi": [ - "0x15E162205421dc3A47b15A1A740FbF5EAbB77921" - ], - "core": [ - "0x191E94fa59739e188dcE837F7f6978d84727AD01", - "0x900101d06a7426441ae63e9ab3b9b0f63be145f1", - "0xa4151b2b3e269645181dccf2d426ce75fcbdeca9", - "0x40375c92d9faf44d2f9db9bd9ba41a3317a2404f" - ], - "crab": [ - "0x2d2b97ea380b0185e9fdf8271d1afb5d2bf18329" - ], - "lung": [ - "0xf51666bcb4b787df919395258fb1d9556f4e357b" - ], - "loop": [ - "0x3936D20a39eD4b0d44EaBfC91757B182f14A38d5" - ], - "rpg": [ - "0x8bb3887ab4fec66eb9aadd7836b6944215008355", - "0x71d9cfd1b7adb1e8eb4c193ce6ffbe19b4aee0db" - ], - "map": [ - "0x13cb04d4a5dfb6398fc5ab005a6c84337256ee23", - "0x9f722b2cb30093f766221fd0d37964949ed66918", - "0x05ab928d446d8ce6761e368c8e7be03c3168a9ec", - "0x35bf4004c3fc9f509259d4942da6bae3669e1db1" - ], - "bone": [ - "0xcda1fa23ff3b9b7172be82237bf662efb69437e9" - ], - "era": [ - "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", - "0x3355df6d4c9c3035724fd0e3914de96a5a83aaf4" - ], - "polygon_zkevm": [ - "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9", - "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035" - ], - "eos_evm": [ - "0xc00592aA41D32D137dC480d9f6d0Df19b860104F", - "0x922d641a426dcffaef11680e5358f34d97d112e1", - "0x765277eebeca2e31912c9946eae1021199b39c61", - "0xfa9343c3897324496a05fc75abed6bac29f8a40f", - "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73" - ], - "oas": [ - "0x5200000000000000000000000000000000000001" - ] + "null": "0x0000000000000000000000000000000000000000", + "ethereum": { + "WETH": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "WSTETH": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", + "STETH": "0xae7ab96520de3a18e5e111b5eaab095312d7fe84", + "sfrxETH": "0xac3e018457b222d93114458476f3e3416abbe38f", + "USDC": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "LINK": "0x514910771af9ca656af840dff83e8264ecf986ca", + "MATIC": "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", + "BAT": "0x0d8775f648430679a709e98d2b0cb6250d2887ef", + "RETH": "0xae78736cd615f374d3085123a210448e74fc6393", + "USDT": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "UNI": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", + "AAVE": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", + "WBTC": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", + "SNX": "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f", + "YFI": "0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e", + "DAI": "0x6b175474e89094c44da98b954eedeac495271d0f", + "SAI": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359", + "cvxFXS": "0xfeef77d3f69374f66429c91d732a244f074bdf74", + "cvxCRV": "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", + "vlCVX": "0x72a19342e8f1838460ebfccef09f6585e32db86e", + "CVX": "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", + "FRAX": "0x853d955aCEf822Db058eb8505911ED77F175b99e", + "BNB": "0xb8c77482e45f1f44de1745f52c74426c631bdd52", + "tBTC": "0x18084fba666a33d37592fa2633fd49a74dd93a88", + "USX": "0x0a5e677a6a24b2f1a2bf4f3bffc443231d2fdec8", + "SAFE": "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", + "TOKE": "0x2e9d63788249371f1dfc918a52f8d799f4a38c94", + "TUSD": "0x0000000000085d4780B73119b644AE5ecd22b376", + "BUSD": "0x4fabb145d64652a948d72533023f6e7a623c7c53", + "INU": "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", + "LIDO": "0x5a98fcbea516cf06857215779fd812ca3bef1b32", + "MKR": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", + "CRV": "0xd533a949740bb3306d119cc777fa900ba034cd52", + "FTM": "0x4e15361fd6b4bb609fa63c81a2be19d873717870", + "GNO": "0x6810e776880C02933D47DB1b9fc05908e5386b96", + "LUSD": "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0", + "sUSD_OLD": "0x57ab1e02fee23774580c119740129eac7081e9d3", + "sUSD": "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", + "SUSHI": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2" + }, + "fantom": { + "WFTM": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", + "USDC": "0x04068da6c83afcfa0e13ba15a6696662335d5b75", + "fUSDT": "0x049d68029688eabf473097a2fc38ef61633a3c7a", + "DAI": "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", + "MIM": "0x82f0b8b456c1a451378467398982d4834b6829c1", + "renBTC": "0xdbf31df14b66535af65aac99c32e9ea844e14501", + "cUSD": "0xe3a486c1903ea794eed5d5fa0c9473c7d7708f40", + "anyUSDC": "0x95bf7e307bc1ab0ba38ae10fc27084bc36fcd605", + "nUSD": "0xc5cd01e988cd0794e05ab80f2bcdbdf13ce08bd3", + "nICE": "0x7f620d7d0b3479b1655cefb1b0bc67fb0ef4e443" + }, + "csc": { + "WCET": "0xe6f8988d30614afe4f7124b76477add79c665822", + "USDT": "0x398dca951cd4fc18264d995dcd171aa5debda129" + }, + "europa": { + "USDP": "0x73d22d8a2D1f59Bf5Bcf62cA382481a2073FAF58", + "WBTC": "0xcb011E86DF014a46F4e3AC3F3cbB114A4EB80870", + "SKL": "0xE0595a049d02b7674572b0d59cd4880Db60EDC50", + "ETHC": "0xD2Aaa00700000000000000000000000000000000", + "USDT": "0x1c0491E3396AD6a35f061c62387a95d7218FC515", + "USDC": "0x5F795bb52dAC3085f578f4877D450e2929D2F13d", + "DAI": "0xD05C4be5f3be302d376518c9492EC0147Fa5A718" + }, + "avax": { + "WAVAX": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + "USDC": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", + "DAI": "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", + "USDT_e": "0xc7198437980c041c805a1edcba50c1ce5db95118", + "USDt": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", + "BTC_b": "0x152b9d0fdc40c096757f570a51e494bd4b943e50", + "USDC_e": "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", + "WETH_e": "0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", + "JOE": "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", + "ZERO": "0x008e26068b3eb40b443d3ea88c1ff99b789c10f7", + "qiAVAX": "0xaf2c034c764d53005cc6cbc092518112cbd652bb", + "xJOE": "0x57319d41f71e81f3c65f2a47ca4e001ebafd4f33", + "LVTX": "0x574679ec54972cf6d705e0a71467bb5bb362919d", + "sUSDC": "0x2f28add68e59733d23d5f57d94c31fb965f835d0", + "sBUSD": "0xf04d3a8eb17b832fbebf43610e94bdc4fd5cf2dd" + }, + "bsc": { + "WBNB": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + "BTCB": "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", + "BETH": "0x250632378e573c6be1ac2f97fcdf00515d0aa91b", + "BUSD": "0xe9e7cea3dedca5984780bafc599bd69add087d56", + "BTUSD": "0x14016e85a25aeb13065688cafb43044c2ef86784", + "USDC": "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + "USDT": "0x55d398326f99059ff775485246999027b3197955", + "ETH": "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + "AURA": "0x23c5d1164662758b3799103effe19cc064d897d6", + "C98": "0xaec945e04baf28b135fa7c640f624f8d90f1c3a6", + "NMX": "0xd32d01a43c869edcd1117c640fbdcfcfd97d9d65", + "sUSDC": "0x2f28add68e59733d23d5f57d94c31fb965f835d0", + "MAHA": "0xce86f7fcd3b40791f63b86c3ea3b8b355ce2685b", + "valBUSD": "0xaed19dab3cd68e4267aec7b2479b1ed2144ad77f", + "valUSDC": "0xa6fdea1655910c504e974f7f1b520b74be21857b", + "valUSDT": "0x5f7f6cb266737b89f7af86b30f03ae94334b83e9", + "SPICE": "0x42586ef4495bb512a86cf7496f6ef85ae7d69a64", + "iZi": "0x60d01ec2d5e98ac51c8b4cf84dfcce98d527c747", + "iUSD": "0x0a3bb08b3a15a19b4de82f8acfc862606fb69a2d", + "beltBNB": "0xa8bb71facdd46445644c277f9499dd22f6f0a30c", + "Belt4": "0x9cb73f20164e399958261c289eb5f9846f4d1404", + "beltBTC": "0x51bd63f240fb13870550423d208452ca87c44444", + "beltETH": "0xaa20e8cb61299df2357561c2ac2e1172bc68bc25", + "YGG": "0x13ab6739368a4e4abf24695bf52959224367391f", + "IVN": "0x6a46d878401f46b4c7f665f065e0667580e031ec", + "ankrBNB": "0xe85afccdafbe7f2b096f268e31cce3da8da2990a", + "aBNBb": "0xbb1aa6e59e5163d8722a122cd66eba614b59df0d", + "TUSD": "0x40af3827f39d0eacbf4a168f8d4ee67c121d11c9" + }, + "polygon": { + "WMATIC": "0xfd28c7cea3c50a060cb4c0059e453c6d4dd9829d", + "WMATIC_1": "0x0000000000000000000000000000000000001010", + "WMATIC_2": "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "MATICX": "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6", + "USDC": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + "QUICK": "0xb5c064f955d8e7f38fe0460c556a72987494ee17", + "WBTC": "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", + "USDT": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + "DAI": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", + "WETH": "0x6cacfaf65b1b1f9979acf463a393a112d0980982", + "WETH_1": "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + "WSTETH": "0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD", + "DINO": "0xaa9654becca45b5bdfa5ac646c939c62b527d394", + "sUSDC": "0x2f28add68e59733d23d5f57d94c31fb965f835d0", + "sBUSD": "0xf04d3a8eb17b832fbebf43610e94bdc4fd5cf2dd", + "RADIO": "0x613a489785c95afeb3b404cc41565ccff107b6e0", + "YIN": "0x794baab6b878467f93ef17e2f2851ce04e3e34c8", + "BNB": "0x5c4b7ccbf908e64f32e12c6650ec0c96d717f03f", + "BUSD": "0x9c9e5fd8bbc25984b178fdce6117defa39d2db39", + "WORK": "0x6002410dda2fb88b4d0dc3c1d562f7761191ea80" + }, + "xdai": { + "WXDAI": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", + "USDC": "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83", + "GNO": "0x9c58bacc331c9aa871afd802db6379a98e80cedb", + "WETH": "0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1", + "USDT": "0x4ecaba5870353805a9f068101a40e0f32ed605c6", + "DAI": "0x44fa8e6f47987339850636f88629646662444217", + "UNI": "0x4537e328bf7e4efa29d05caea260d7fe26af9d74", + "MATIC": "0x7122d7661c4564b7c6cd4878b06766489a6028a2", + "WBTC": "0x8e5bbbb09ed1ebde8674cda39a0c169401db4252", + "ETHIX": "0xec3f3e6d7907acda3a7431abd230196cda3fbb19", + "DAI_1": "0x678df3415fc31947da4324ec63212874be5a82f8" + }, + "okexchain": { + "USDC": "0xc946daf81b08146b1c7a8da2a851ddf2b3eaaf85", + "WOKT": "0x8f8526dbfd6e38e3d8307702ca8469bae6c56c15", + "USDT": "0x382bb369d343125bfb2117af9c149795c6c65c50", + "BTCK": "0x54e4622dc504176b3bb432dccaf504569699a7ff", + "ETHK": "0xef71ca2ee68f45b9ad6f72fbdb33d707b872315c", + "OKB": "0xdf54b6c6195ea4d948d03bfd818d365cf175cfc2", + "CHE": "0x8179d97eb6488860d816e3ecafe694a4153f216c", + "ELK": "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c" + }, + "heco": { + "WHT": "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f", + "BETH": "0xb6f4c418514dd4680f76d5caa3bb42db4a893acb", + "ELK": "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", + "DAI_HECO": "0x3d760a45d0887dfd89a2f5385a236b29cb46ed2a", + "USDC_HECO": "0x9362bbef4b8313a8aa9f0c9808b80577aa26b73b", + "COMP": "0xce0a5ca134fb59402b723412994b30e02f083842", + "DOGE": "0x40280e26a572745b1152a54d1d44f365daa51618", + "TUSD": "0x5ee41ab6edd38cdfb9f6b4e6cf7f75c87e170d98", + "XRP": "0xa2f3c2446a3e20049708838a779ff8782ce6645a", + "USDT": "0xa71edc38d189767582c38a3145b5873052c3e47a", + "ADA": "0x843af718ef25708765a8e0942f89edeae1d88df0" + }, + "hoo": { + "wHOO": "0x3eff9d389d13d6352bfb498bcf616ef9b1beac87" + }, + "harmony": { + "JEWEL": "0x72cb10c6bfa5624dd07ef608027e366bd690048f", + "MIS": "0xd74433b187cf0ba998ad9be3486b929c76815215", + "WONE": "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a", + "xJEWEL": "0xa9ce83507d872c5e1273e745abcfda849daa654f", + "AVAX": "0xb12c13e66ade1f72f71834f2fc5082db8c091358", + "VIPER": "0xea589e93ff18b1a1f1e9bac7ef3e86ab62addc79" + }, + "optimism": { + "OP": "0x4200000000000000000000000000000000000042", + "WETH": "0x121ab82b49b2bc4c7901ca46b8277962b4350204", + "WETH_1": "0x4200000000000000000000000000000000000006", + "BitANT": "0x5029c236320b8f15ef0a657054b84d90bfbeded3", + "FEI": "0x35d48a789904e9b15705977192e5d95e2af7f1d3", + "alUSD": "0xcb8fa9a76b8e203d8c3797bf438d8fb81ea3326a", + "FXS": "0x67ccea5bb16181e7b4109c9c2143c24a1c2205be", + "FRAX": "0x2e3d870790dc77a83dd1d18184acc7439a53f475", + "gOHM": "0x0b5740c6b4a97f90ef2f0220651cca420b868ffb", + "sUSD": "0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9", + "sETH": "0xe405de8f52ba7559f9df3c368500b6e6ae6cee49", + "USDT": "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", + "USDC": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", + "DAI": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1" + }, + "moonriver": { + "WMOVR": "0xe3c7487eb01c74b73b7184d198c7fbf46b34e5af", + "USDT": "0xb44a9b6905af7c801311e8f4e76932ee959c663c", + "USDC": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", + "ETH": "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", + "ELK": "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", + "BEPRO": "0xcb4a593ce512d78162c58384f0b2fd6e802c2c47" + }, + "moonbeam": { + "WGLMR": "0x5f6c5c2fb289db2228d159c69621215e354218d7", + "USDC": "0x6a2d262d56735dba19dd70682b39f6be9a931d98", + "STELLA": "0x0e358838ce72d5e61e0018a2ffac4bec5f4c88d2", + "BUSD": "0x692c57641fc054c2ad6551ccc6566eba599de1ba", + "GLINT": "0xcd3b51d98478d53f4515a306be565c6eebef1d58", + "FRAX": "0x322e86852e492a7ee17f28a78c663da38fb33bfb", + "MAI": "0xdfa46478f9e5ea86d57387849598dbfb2e964b02", + "USDT": "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c", + "WETH": "0x6959027f7850adf4916ff5fdc898d958819e5375", + "WBTC": "0xe57ebd2d67b462e9926e04a8e33f01cd0d64346d", + "MOVR": "0x1d4c2a246311bb9f827f4c768e277ff5787b7d7e", + "xcUSDT": "0xffffffffea09fb06d082fd1275cd48b191cbcd1d", + "BEPRO": "0x4edf8e0778967012d46968ceadb75436d0426f88", + "stDOT": "0xfa36fe1da08c89ec72ea1f0143a35bfd5daea108" + }, + "arbitrum": { + "WETH": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + "WBTC": "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", + "DAI": "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", + "USDC": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", + "USDC_CIRCLE": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + "LINK": "0xf97f4df75117a78c1a5a0dbb814af92458539fb4", + "USDT": "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", + "ARBY": "0x09ad12552ec45f82be90b38dfe7b06332a680864", + "ARB": "0x912ce59144191c1204e64559fe8253a0e49e6548", + "MIM": "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a", + "renBTC": "0xdbf31df14b66535af65aac99c32e9ea844e14501", + "DFL": "0x31635a2a3892daec7c399102676e344f55d20da7", + "FEI": "0x4a717522566c7a09fd2774ccedc5a8c43c5f9fd2", + "nUSD": "0x2913e812cf0dcca30fb28e6cac3d2dcff4497688", + "LPT": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "APEX": "0x61a1ff55c5216b636a294a07d77c6f4df10d3b56", + "LIQD": "0x93c15cd7de26f07265f0272e0b831c5d7fab174f", + "fsGLP": "0x1addd80e6039594ee970e5872d247bf0414c8903", + "fGLP": "0x4e971a87900b931ff39d1aad67697f49835400b6", + "GMX": "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a", + "plvGLP": "0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1" + }, + "fuse": { + "WFUSE": "0x0be9e53fd7edac9f859882afdda116645287c629", + "USDC": "0x620fd5fa44be6af63715ef4e65ddfa0387ad13f5", + "WETH": "0xa722c13135930332eb3d749b2f0906559d2c5b99", + "DAI": "0x94ba7a27c7a95863d1bdc7645ac2951e0cca06ba", + "USDT": "0xfadbbf8ce7d5b7041be672561bba99f79c532e10", + "KNC": "0x43b17749b246fd2a96de25d9e4184e27e09765b0", + "null": "0x0000000000000000000000000000000000000000" + }, + "evmos": { + "WEVMOS": "0xd4949664cd82660aae99bedc034a0dea8a0bd517", + "STEVMOS": "0x2c68d1d6ab986ff4640b51e1f14c716a076e44c4", + "STATOM": "0xb5124fa2b2cf92b2d469b249433ba1c96bdf536d", + "ATOM": "0xc5e00d3b04563950941f7137b5afa3a534f0d6d6", + "STRIDE": "0x8fa78ceb7f04118ec6d06aac37ca854691d8e963", + "axlRETH": "0xe60ce2dfa6d4ad37ade1dcb7ac4d6c3a093b3a7e", + "USDT_CEL": "0xb72a7567847aba28a2819b855d7fe679d4f59846", + "AXL_WETH": "0x50de24b3f0b3136c50fa8a3b8ebc8bd80a269ce5", + "USDC": "0x51e44ffad5c2b122c8b635671fcc8139dc636e82", + "tBTC": "0x8d395affc1767141387fff45af88a074614e7ccf", + "renBTC": "0xb1a8c961385b01c3aa782fba73e151465445d319", + "ceUSDC": "0xe46910336479f254723710d57e7b683f3315b22b", + "DAI": "0x63743acf2c7cfee65a5e356a4c4a005b586fc7aa", + "USDT": "0x7ff4a56b32ee13d7d4d405887e0ea37d61ed919e", + "ceUSDT": "0xb72a7567847aba28a2819b855d7fe679d4f59846", + "WETH": "0x5842c5532b61acf3227679a8b1bd0242a41752f2", + "WBTC": "0xf80699dc594e00ae7ba200c7533a07c1604a106d", + "FRAX": "0xe03494d0033687543a80c9b1ca7d6237f2ea8bd8", + "DIFF": "0x3f75ceabcdfed1aca03257dc6bdc0408e2b4b026", + "AXL_USDC": "0x15c3eb3b621d1bff62cba1c9536b7c1ae9149b57" + }, + "oasis": { + "WETH": "0x3223f17957ba502cbe71401d55a0db26e5f7c68f", + "ceUSDT": "0x4bf769b05e832fcdc9053fffbc78ca889acb5e1e", + "USDT": "0x6ab6d61428fde76768d7b45d8bfeec19c6ef91a8", + "USDC": "0xe8a638b3b7565ee7c5eb9755e58552afc87b94dd", + "wROSE": "0x21c718c22d52d0f3a789b752d4c2fd5908a8a733", + "WROSE": "0x5c78a65ad6d0ec6618788b6e8e211f31729111ca", + "TULIP": "0x9e832cae5d19e7ff2f0d62881d1e33bb16ac9bdc", + "ceUSDC": "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c" + }, + "kcc": { + "BUSD": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", + "KUS": "0x4a81704d8c16d9fb0d7f61b747d0b5a272badf14", + "ELK": "0xe1c110e1b1b4a1ded0caf3e42bfbdbb7b5d7ce1c", + "BNB": "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", + "DAI": "0xc9baa8cfdde8e328787e29b4b078abf2dadc2055", + "WBTC": "0x218c3c3d49d0e7b37aff0d8bb079de36ae61a4c0", + "ETH": "0xf55af137a98607f7ed2efefa4cd2dfe70e4253b1", + "WKCS": "0x4446fc4eb47f2f6586f9faab68b3498f86c07521", + "MJT": "0x2ca48b4eea5a731c2b54e7c3944dbdb87c0cfb6f", + "USDT": "0x0039f574ee5cc39bdd162e9a88e3eb1f111baf48", + "USDC": "0x980a5afef3d17ad98635f6c5aebcbaeded3c3430", + "BTCK": "0xfa93c12cd345c658bc4644d1d4e1b9615952258c", + "sKCS": "0x00ee2d494258d6c5a30d6b6472a09b27121ef451" + }, + "metis": { + "Metis": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", + "WMETIS": "0x71802e8f394bb9d05a1b8e9d0562917609fd7325", + "m_USDT": "0xbb06dca3ae6887fabf931640f67cab3e3a16f4dc", + "WETH": "0x420000000000000000000000000000000000000a", + "m_USDC": "0xea32a96608495e54156ae48931a7c20f0dcc1a21", + "BNB": "0x2692be44a6e38b698731fddf417d060f0d20a0cb", + "WBTC": "0xa5b55ab1daf0f8e1efc0eb1931a957fd89b918f4", + "BUSD": "0x12d84f1cfe870ca9c9df9785f8954341d7fbb249", + "rAVAX": "0xe253e0cea0cdd43d9628567d097052b33f98d611", + "rFTM": "0xa9109271abcf0c4106ab7366b4edb34405947eed", + "DAI": "0x4651b38e7ec14bb3db731369bfe5b08f2466bd0a", + "RELAY": "0xfe282af5f9eb59c30a3f78789eeffa704188bdd4", + "FTM": "0x6ab6d61428fde76768d7b45d8bfeec19c6ef91a8", + "MATIC": "0x4b9d2923d875edf43980bf5ddddede3fb20fc742", + "SYN": "0x67c10c397dd0ba417329543c1a40eb48aaa7cd00", + "BORING": "0x226d8bfb4da78ddc5bd8fd6c1532c58e88f9fd34", + "m_WBTC": "0x433e43047b95cb83517abd7c9978bdf7005e9938", + "m_AAVE": "0xd1f0a4e5444eed0fbcd6624dcef7ef33043e6168" + }, + "celo": { + "CELO": "0x471ece3750da237f93b8e339c536989b8978a438", + "cUSD": "0x765de816845861e75a25fca122bb6898b8b1282a", + "ETHIX": "0x9995cc8f20db5896943afc8ee0ba463259c931ed", + "mCELO": "0x7d00cd74ff385c955ea3d79e47bf06bd7386387d", + "mcUSD": "0x918146359264c492bd6934071c6bd31c854edbc3", + "mCEUR": "0xe273ad7ee11dcfaa87383ad5977ee1504ac07568", + "USDC": "0x2a3684e9dc20b857375ea04235f2f7edbe818fa7", + "aaUSDC": "0xb70e0a782b058bfdb0d109a3599bec1f19328e36", + "asUSDC": "0xcd7d7ff64746c1909e44db8e95331f9316478817", + "cUSDC": "0x93db49be12b864019da9cb147ba75cdc0506190e", + "cUSDT": "0xcfffe0c89a779c09df3df5624f54cdf7ef5fdd5d", + "WBTC": "0xbaab46e28388d2779e6e31fd00cf0e5ad95e327b", + "WETH": "0x66803fb87abd4aac3cbb3fad7c3aa01f6f3fb207", + "atUST": "0xed193c4e69f591e42398ef54dea65aa1bb02835c", + "DAI": "0x90ca507a5d4458a4c6c6249d186b6dcb02a5bccd", + "NCT": "0x02de4766c272abc10bc88c220d214a26960a7e92", + "cMCO2": "0x32a9fe697a32135bfd313a6ac28792dae4d9979d", + "USDT": "0x617f3112bf5397d0467d315cc709ef968d9ba546" + }, + "boba": { + "WETH": "0xd203de32170130082896b4111edf825a4774c18e", + "BOBA": "0xa18bf3994c0cc6e3b63ac420308e5383f53120d7", + "USDC": "0x66a2a913e447d6b4bf33efbec43aaef87890fbbc", + "USDT": "0x5de1677344d3cb0d7d465c10b72a8f60699c062d", + "DAI": "0xf74195bb8a5cf652411867c5c2c5b8c2a402be35", + "BUSD": "0x461d52769884ca6235b685ef2040f47d30c94eb5", + "FRAX": "0x7562f525106f5d54e891e005867bf489b5988cd9", + "WBTC": "0xdc0486f8bf31df57a952bcd3c1d3e166e3d9ec8b", + "OMG": "0xe1e2ec9a85c607092668789581251115bcbd20de", + "sUSDC": "0x2f28add68e59733d23d5f57d94c31fb965f835d0", + "sBUSD": "0xf04d3a8eb17b832fbebf43610e94bdc4fd5cf2dd" + }, + "findora": { + "WBNB_b": "0xabc979788c7089b516b8f2f1b5ceabd2e27fd78b", + "WETH_b": "0x008a628826e9470337e0cd9c0c944143a83f32f3", + "USDT_b": "0x93edfa31d7ac69999e964dac9c25cd6402c75db3", + "USDC_b": "0xda33ef1a7b48bebbf579ee86dfa735a9529c4950", + "BUSD_b": "0xe80eb4a234f718edc5b76bb442653827d20ebb2d", + "WBTC_b": "0x07efa82e00e458ca3d53f2cd5b162e520f46d911", + "FRA": "0x0000000000000000000000000000000000001000", + "USDC_e": "0x2e8079e0fe49626af8716fc38adea6799065d7f7", + "USDT_e": "0x0632baa26299c9972ed4d9affa3fd057a72252ff" + }, + "milkomeda": { + "WADA": "0xae83571000af4499798d1e3b0fa0070eb3a3e3f9", + "USDT": "0xab58da63dfdd6b97eaab3c94165ef6f43d951fb2", + "WBTC": "0x48aeb7584ba26d3791f06fba360db435b3d7a174", + "BNB": "0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52", + "WETH": "0x5950f9b6ef36f3127ea66799e64d0ea1f5fdb9d1", + "DAI": "0x41eafc40cd5cb904157a10158f73ff2824dc1339", + "USDC": "0x5a955fddf055f2de3281d99718f5f1531744b102", + "sUSDC": "0x42110a5133f91b49e32b671db86e2c44edc13832", + "BUSD": "0x4bf769b05e832fcdc9053fffbc78ca889acb5e1e", + "BLUES": "0x8c008bba2dd56b99f4a6ab276be3a478cb075f0c" + }, + "bittorrent": { + "USDT_t": "0xdb28719f7f938507dbfe4f0eae55668903d34a15", + "USDC_t": "0x935faa2fcec6ab81265b301a30467bbc804b43d3", + "WBTT": "0x23181f21dea5936e24163ffaba4ea3b316b57f3c", + "USDD_t": "0x17f235fd5974318e4e2a5e37919a209f7c37a6d1", + "USDC_e": "0xae17940943ba9440540940db0f1877f101d39e8b", + "TRX": "0xedf53026aea60f8f75fca25f8830b7e2d6200662", + "ETH": "0x1249c65afb11d179ffb3ce7d4eedd1d9b98ad006", + "USDT_e": "0xe887512ab8bc60bcc9224e1c3b5be68e26048b8b", + "KNC_e": "0xe467f79e9869757dd818dfb8535068120f6bcb97", + "WBTC_e": "0x9888221fe6b5a2ad4ce7266c7826d2ad74d40ccf", + "USDC_b": "0xca424b845497f7204d9301bd13ff87c0e2e86fcf", + "USDT_b": "0x9b5f27f6ea9bbd753ce3793a07cba3c74644330d" + }, + "klaytn": { + "WKLAY": "0x57d1a61e4fd09fbf16e35b04959e94dcf2032974", + "BORA": "0x02cbe46fb8a1f579254a9b485788f2d86cad51aa", + "DAI": "0xcb2c7998696ef7a582dfd0aafadcd008d03e791a", + "USDC": "0x608792deb376cce1c9fa4d0e6b7b44f507cffa6a", + "USDT": "0x5c13e303a62fc5dedf5b52d66873f2e59fedadc2", + "pUSD": "0x168439b5eebe8c83db9eef44a0d76c6f54767ae4", + "KSD": "0x4fa62f1f404188ce860c8f0041d6ac3765a72e67", + "KASH": "0xce40569d65106c32550626822b91565643c07823", + "oBUSD": "0x210bc03f49052169d5588a52c317f71cf2078b85", + "WBTC": "0x981846be8d2d697f4dfef6689a161a25ffbab8f9", + "WETH": "0x98a8345bb9d3dda9d808ca1c9142a28f6b0430e1", + "KDAI": "0x5c74070fdea071359b86082bd9f9b3deaafbe32b", + "oUSDC": "0x754288077d0ff82af7a5317c7cb8c444d421d103", + "oUSDT": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", + "oWBTC": "0x16d0e1fbd024c600ca0380a4c5d57ee7a2ecbf9c", + "oETH": "0x34d21b1e550d73cee41151c77f3c73359527a396", + "oXRP": "0x9eaefb09fe4aabfbe6b1ca316a3c36afc83a393f", + "KSP": "0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654", + "WBNB": "0xac9c1e4787139af4c751b1c0fadfb513c44ed833", + "BUSD": "0xe2765f3721dab5f080cf14ace661529e1ab9ade7", + "WAVAX": "0x45830b92443a8f750247da2a76c85c70d0f1ebf3", + "SOL": "0xfaa03a2ac2d1b8481ec3ff44a0152ea818340e6d", + "aUSDC_Wormhole_": "0x2b72d65941e657c1305b65fa330ffdde7b397239", + "aUSDC": "0x61fbbfd5416c45f297a8e69ba113789c75f8841c", + "aUSDT": "0x2eadfda6d830547b5168ba88c13d24156a026ce5", + "aUSDT_Wormhole_": "0x98aedff55dcc2e7a7d1899b325d1680527dd2742", + "aDAI": "0x2ff5371dad5c6ef76d55213b7c5a519f6654ba17", + "aDAI_Wormhole_": "0xe9a88c33abf71c902f7581321d05e6516cbca761", + "USDK": "0xd2137fdf10bd9e4e850c17539eb24cfe28777753", + "NPT": "0xe06597d02a2c3aa7a9708de2cfa587b128bd3815" + }, + "nova": { + "NUSD": "0x1f5396f254ee25377a5c1b9c6bff5f44e9294fff" + }, + "aurora": { + "WETH": "0x274d83086c356e0cfc75933fbf838ca10a7e8274", + "USDC_e": "0xb12bfca5a55806aaf64e99521918a4bf0fc40802", + "USDT_e": "0x4988a896b1227218e4a686fde5eabdcabd91571f", + "NEAR": "0xc42c30ac6cc15fac9bd938618bcaa1a1fae8501d", + "AURORA": "0x8bec47865ade3b172a928df8f990bc7f2a3b9f79", + "FRAX": "0xda2585430fef327ad8ee44af8f1f989a2a91a3d2", + "nUSD": "0x07379565cd8b0cae7c60dc78e7f601b34af2a21c", + "sUSDC": "0x42cc1cbf253f89be6814a0f59f745b40b69b6220", + "sBUSD": "0xd5e98caeb396dabe5a102bb9256b552944e3401f" + }, + "dfk": { + "WJEWEL": "0xccb93dabd71c8dad03fc4ce5559dc3d89f67a260", + "xJEWEL": "0x77f2656d04e158f915bc22f07b779d94c1dc47ff", + "FTM": "0x2df041186c844f8a2e2b63f16145bc6ff7d23e25" + }, + "cronos": { + "WCRO": "0xca2503482e5d6d762b524978f400f03e38d5f962", + "USDC": "0xc21223249ca28397b4b6541dffaecc539bff0c59", + "WBTC": "0x062e66477faf219f25d27dced647bf57c3107d52", + "SVN": "0x654bac3ec77d6db497892478f854cf6e8245dca9", + "USDT": "0x66e428c3f67a68878562e79a0234c1f83c208770", + "CRX": "0xe243ccab9e66e6cf1215376980811ddf1eb7f689", + "TUSD": "0x87efb3ec1576dec8ed47e58b832bedcd86ee186e", + "ALI": "0x45c135c1cdce8d25a3b729a28659561385c52671", + "AKT": "0x39a65a74dc5a778ff93d1765ea51f57bc49c81b3", + "SHIB": "0xbed48612bc69fa1cab67052b42a95fb30c1bcfee", + "ATOM": "0xb888d8dd1733d72681b30c00ee76bde93ae7aa93", + "ELON": "0x02dccaf514c98451320a9365c5b46c61d3246ff3" + }, + "velas": { + "WVLX": "0xe41c4324dcbd2926481101f8580d13930aff8a75", + "ETH": "0x85219708c49aa701871ad330a94ea0f41dff24ca", + "_MATIC": "0x6ab0b8c1a35f9f4ce107ccbd05049cb1dbd99ec5", + "WBTC": "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", + "_BNB": "0x2b8e9cd44c9e09d936149549a8d207c918ecb5c4", + "FTM": "0xc9b3aa6e91d70f4ca0988d643ca2bb93851f3de4", + "USDC": "0xe2c120f188ebd5389f71cf4d9c16d05b62a58993", + "USDT": "0x01445c31581c354b7338ac35693ab2001b50b9ae", + "BUSD": "0xc111c29a988ae0c0087d97b33c6e6766808a3bd3", + "BAMBOO": "0x300a8be53b4b5557f48620d578e7461e3b927dd0", + "_AVAX": "0x525bd1f949ffa2a0c5820f3b6fe61bb897466ff7", + "SWAPZ": "0x9b6fbf0ea23faf0d77b94d5699b44062e5e747ac", + "DAI": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", + "SCAR": "0x8d9fb713587174ee97e91866050c383b5cee6209", + "ADA": "0x3611fbfb06ffbcef9afb210f6ace86742e6c14a4" + }, + "telos": { + "WTLOS": "0xd102ce6a4db07d247fcc28f366a623df0938ca9e", + "ETH": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "WBTC": "0xf390830df829cf22c53c8840554b98eafc5dcbc2", + "USDC": "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", + "USDT": "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73", + "STLOS": "0xb4b01216a5bc8f1c8a33cd990a1239030e60c905", + "sBUSD": "0x017043607270ecbb440e20b0f0bc5e760818b3d8" + }, + "reichain": { + "BNB": "0xf8ab4aaf70cef3f3659d3f466e35dc7ea10d4a5d", + "kBUSD": "0xdd2bb4e845bd97580020d8f9f58ec95bf549c3d9" + }, + "solana": { + "SOL": "So11111111111111111111111111111111111111112", + "BONK": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", + "USDC": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", + "USDT": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + "pSOL": "9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX", + "APT": "6LNeTYMqtNm1pBFN8PfhQaoLyegAH8GD32WmHU9erXKN", + "DAI": "EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o", + "apUSDC": "eqKJTf1Do4MDPyKisMYqVaUFpkEFAs3riGF3ceDH2Ca", + "USDCbs": "FCqfQSujuPxy6V42UvafBhsysWtEq1vhjfMN1PUbgaxA", + "aeUSDC": "DdFPRnccQqLD4zCHrBqdY95D6hvw6PLWp9DEXj1fLCL9", + "aaUSDC": "8Yv9Jz4z7BUHP68dz8E8m3tMe6NKgpMUKn8KVqrPA6Fr", + "afUSDC": "Grk6b4UMRWkgyq4Y6S1BnNRF4hRgtnMFp7Sorkv6Ez4u", + "abUSDC": "8XSsNvaKU9FDhYWAv7Yc7qSNwuJSzVrXBNEk7AFiWF69", + "USDTbs": "8qJSyQprMC57TWKaYEmetUR3UUiTP2M3hXdcvFhkZdmv", + "abUSDT": "E77cpQ4VncGmcAXX16LHFFzNBEBb2U7Ar7LBmZNfCgwL", + "aeUSDT": "Bn113WT6rbdgwrm12UJtnmNqGqZjY4it2WoUQuQopFVn", + "aaUSDT": "FwEHs3kJEdMa2qZHv7SgzCiFXUQPEycEXksfBkwmS8gj", + "BUSDbs": "5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2" + }, + "astar": { + "WASTR": "0xecc867de9f5090f55908aaa1352950b9eed390cd", + "WETH": "0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c", + "WBTC": "0xad543f18cff85c77e140e3e5e3c3392f6ba9d5ca", + "BNB": "0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52", + "SDN": "0x75364d4f779d0bd0facd9a218c67f87dd9aff3b4", + "MATIC": "0xdd90e5e87a2081dcf0391920868ebc2ffb81a1af", + "USDC": "0x6a2d262d56735dba19dd70682b39f6be9a931d98", + "USDT": "0x3795c36e7d12a8c252a20c5a7b455f7c57b60283", + "nativeUSDT": "0xffffffff000000000000000000000001000007c0", + "ARSW": "0xde2578edec4669ba7f41c5d5d2386300bcea4678", + "DOT": "0xffffffffffffffffffffffffffffffffffffffff", + "DAI": "0x6de33698e9e9b787e09d3bd7771ef63557e148bb", + "MUUU": "0xc5bcac31cf55806646017395ad119af2441aee37", + "NIKA": "0x6df98e5fbff3041105cb986b9d44c572a43fcd22", + "oUSD": "0x29f6e49c6e3397c3a84f715885f9f233a441165c", + "KGL": "0x257f1a047948f73158dadd03eb84b34498bcdc60", + "LAY": "0xc4335b1b76fa6d52877b3046eca68f6e708a27dd", + "lUSDT": "0x430d50963d9635bbef5a2ff27bd0bddc26ed691f", + "nASTR": "0xe511ed88575c57767bafb72bfd10775413e3f2b0", + "lUSDC": "0xc404e12d3466accb625c67dbab2e1a8a457def3c", + "lDAI": "0x4dd9c468a44f3fef662c35c1e9a6108b70415c2c", + "aBaiUsdc": "0xdbd71969ac2583a9a20af3fb81fe9c20547f30f3", + "aDaiUsdc": "0x9914bff0437f914549c673b34808af6020e2b453", + "aBusdUsdc": "0x347e53263f8fb843ec605a1577ec7c8c0cac7a58", + "aUsdtUsdc": "0x02dac4898b2c2ca9d50ff8d6a7726166cf7bcfd0", + "BUSD": "0x4bf769b05e832fcdc9053fffbc78ca889acb5e1e", + "lBUSD": "0xb7ab962c42a8bb443e0362f58a5a43814c573ffb", + "BAI": "0x733ebcc6df85f8266349defd0980f8ced9b45f35", + "ATID": "0x5271d85ce4241b310c0b34b7c2f1f036686a6d7c", + "JPYC": "0x431d5dff03120afa4bdf332c61a6e1766ef37bdb", + "aUSD": "0xffffffff00000000000000010000000000000001" + }, + "cardano": { + "ADA": "ADA" + }, + "functionx": { + "WFX": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd", + "PUNDIX": "0xd567b3d7b8fe3c79a1ad8da978812cfc4fa05e75", + "PURSE": "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", + "USDT": "0xeceeefcee421d8062ef8d6b4d814efe4dc898265" + }, + "clv": { + "WCLV": "0x1376c97c5c512d2d6f9173a9a3a016b6140b4536", + "WETH": "0xa1c3767c93e7b51ecb445fdbae1494dfc654e524", + "WBTC": "0x30bebbc0b6b357945ac30660e025c1532b9c7804", + "USDT": "0xf91193a62879279d6b8f209f89b6418e3c0e5cbf", + "USDC": "0x4a52f069cb00905d996a0d7b811d78e60b4cb09e" + }, + "tron": { + "null": "0x0000000000000000000000000000000000000000", + "USDT": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", + "USDC": "TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8", + "USDD": "TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn", + "JM": "TVHH59uHVpHzLDMFFpUgCx2dNAQqCzPhcR", + "JST": "TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9", + "BTC": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9", + "LTC": "TR3DLthpnDdCGabhVDbD3VMsiJoCXY3bZd", + "DOGE": "THbVQp8kMjStKNnf2iCY6NEzThKMK5aBHg", + "SUN": "TSSMHYeV2uE9qYH95DqyoCuNCzEL1NvU3S", + "SUN_1": "TKkeiboTkxXKJpbmVFbv4a8ov5rAfRDMf9", + "WBTT": "TKfjV9RNKJJCqPvBtK8L7Knykh7DNWvnYt", + "BUSD": "TMz2SWatiAtZVVcH2ebpsbVtYwUPT9EdjH", + "WTRX": "TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR", + "BTT": "TAFjULxiVgT4qWk6UZwjqwZXTSaGaqnVp4", + "TUSD": "TUpMhErZL2fhh4sVNULAbNKLokS4GjC1F4", + "USDJ": "TMwFHYXLJaRUPeW6421aqXL4ZEzPRFGkGT", + "ETH": "THb4CqiFdwNHsWsQCs4JhzwjMWys4aqCbF" + }, + "lachain": { + "wLA": "0x3a898d596840c6b6b586d722bfadcc8c4761bf41" + }, + "theta": { + "WTFUEL": "0x4dc08b15ea0e10b96c41aec22fab934ba15c983e", + "TDROP": "0x1336739b05c7ab8a526d40dcc0d04a826b5f8b03" + }, + "zyx": { + "WZYX": "0xc9e1aea009b0bae9141f3dc7523fb42fd48c8656" + }, + "ubiq": { + "WUBQ": "0x1fa6a37c64804c0d797ba6bc1955e50068fbf362" + }, + "cosmos": { + "ATOM": "uatom" + }, + "terra2": { + "LUNA": "uluna", + "ASTRO": "terra1nsuqsk6kh58ulczatwev87ttq2z6r3pusulg9r24mfj2fvtzd4uq3exn26" + }, + "terra": { + "LUNA": "uluna", + "UST": "uusd" + }, + "crescent": { + "BCRE": "ubcre", + "CRE": "ucre" + }, + "orai": { + "ORAI": "orai", + "USDT": "orai12hzjxfh77wl572gdzct2fxv2arxcwh6gykc7qh" + }, + "juno": { + "JUNO": "ujuno" + }, + "osmosis": { + "ION": "uion" + }, + "kujira": { + "KUJI": "ukuji", + "USK": "factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk" + }, + "injective": { + "INJ": "inj", + "ATOM": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "USDT": "factory/inj14ejqjyq8um4p3xfqj74yld5waqljf88f9eneuk/inj1q6zlut7gtkzknkk773jecujwsdkgq882akqksk" + }, + "comdex": { + "CMDX": "ucmdx", + "CMST": "ucmst" + }, + "near": { + "JUMBO": "token.jumbo_exchange.near", + "PARAS": "token.paras.near", + "LINA": "linear-protocol.near", + "PEMBROCK": "token.pembrock.near", + "BURROW": "token.burrow.near" + }, + "multivac": { + "WMTV": "0x8e321596267a4727746b2f48bc8736db5da26977", + "USDT": "0x2f9c74d3c42023c533437c9ee743d4a6329e78df", + "USDC": "0xea1199d50ee09fa8062fd9da3d55c6f90c1babd2" + }, + "tomochain": { + "WTOMO": "0xb1f66997a5760428d3a87d68b90bfe0ae64121cc" + }, + "ethereumclassic": { + "WETC": "0x82A618305706B14e7bcf2592D4B9324A366b6dAd" + }, + "cube": { + "WCUBE": "0x9d3f61338d6eb394e378d28c1fd17d5909ac6591", + "ETH": "0x57eea49ec1087695274a9c4f341e414eb64328c2", + "BTC": "0x040ea5c10e6ba4badb6c433a365ccc4968697230", + "USDT": "0x79f1520268a20c879ef44d169a4e3812d223c6de", + "USDC": "0x00f0d8595797943c12605cd59bc0d9f63d750ccf", + "DAI": "0x3a1f6e3e6f26e92bb0d07841eb68f8e84f39751e", + "O3": "0xee9801669c6138e84bd50deb500827b776777d28" + }, + "elastos": { + "WELA": "0x517e9e5d46c1ea8ab6f78677d6114ef47f71f6c4", + "bnbBUSD": "0x9f1d0ed4e041c503bd487e5dc9fc935ab57f9a57" + }, + "energyweb": { + "WEWT": "0x6b3bd0478df0ec4984b168db0e12a539cc0c83cd" + }, + "milkomeda_a1": { + "WALGO": "0xaf86e6c5fd9daf53e5100ed38bab2572609fca27", + "USDC": "0x2421db204968a367cc2c866cd057fa754cb84edf", + "USDt": "0x32564ae38e5dbf316958ce25a6ad2a2249ebcc2d", + "USDT": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "BLUES": "0xc9baa8cfdde8e328787e29b4b078abf2dadc2055", + "BUSD": "0x8dc0dfa2aec0d4410c8c60c5f9cd0cd37b05a06a", + "DAI": "0x150d2421e09eea31beaa68b7a248700eeceda87a" + }, + "ultron": { + "wULX": "0x3a4f06431457de873b588846d139ec0d86275d54", + "wULX_1": "0xb1183357745d3fd7d291e42a2c4b478cdb5710c6", + "wETH": "0x2318bf5809a72aabadd15a3453a18e50bbd651cd", + "wBTC": "0xd2b86a80a8f30b83843e247a50ecdc8d843d87dd", + "BUSD": "0xc7cac85c1779d2b8ada94effff49a4754865e2e4", + "uUSDT": "0x97fdd294024f50c388e39e73f1705a35cfe87656", + "uUSDC": "0x3c4e0fded74876295ca36f62da289f69e3929cc4" + }, + "bitgert": { + "WBRISE": "0x0eb9036cbe0f052386f36170c6b07ef0a0e3f710", + "LUNG": "0xc3b730dd10a7e9a69204bdf6cb5a426e4f1f09e3", + "YPC": "0x11203a00a9134db8586381c4b2fca0816476b3fd" + }, + "echelon": { + "WECH": "0xadee5159f4f82a35b9068a6c810bdc6c599ba6a8" + }, + "rei": { + "WREI": "0x2545af3d8b11e295bb7aedd5826021ab54f71630", + "USDT": "0x988a631caf24e14bb77ee0f5ca881e8b5dcfcec7", + "WBTC": "0x8059e671be1e76f8db5155bf4520f86acfdc5561", + "fWETH": "0x5b07f2582d0cc26e400d56266aebb201c93560ed" + }, + "tombchain": { + "TOMB": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", + "LIF3": "0x4200000000000000000000000000000000000108", + "FTM": "0x4200000000000000000000000000000000000006", + "TSHARE": "0x4200000000000000000000000000000000000101", + "USDC": "0x4200000000000000000000000000000000000100", + "LSHARE": "0x4200000000000000000000000000000000000109" + }, + "rsk": { + "WRBTC": "0x967f8799af07df1534d48a95a5c9febe92c53ae0", + "ETHs": "0x1d931bf8656d795e50ef6d639562c5bd8ac2b78f" + }, + "polis": { + "WPOLIS": "0x6fc851b8d66116627fb1137b9d5fe4e2e1bea978" + }, + "kekchain": { + "wKEK": "0x54bd9d8d758ac3717b37b7dc726877a23aff1b89" + }, + "aptos": { + "APT": "0x1::aptos_coin::AptosCoin", + "USDC": "0x5e156f1207d0ebfa19a9eeff00d62a282278fb8719f4fab3a586a0a2c0fffbea::coin::T", + "USDT": "0xa2eda21a58856fda86451436513b867c97eecb4ba099da5775520e0f7492e852::coin::T", + "WBTC": "0xae478ff7d83ed072dbc5e264250e67ef58f57c99d89b447efd8a0a2e8b2be76e::coin::T", + "ETH": "0xcc8a89c8dce9693d354449f1f73e60e14e347417854f029db5bc8e7454008abb::coin::T", + "USDC_1": "0xc91d826e29a3183eb3b6f6aa3a722089fdffb8e9642b94c5fcd4c48d035c0080::coin::T", + "USDA": "0x1000000fa32d122c18a6a31c009ce5e71674f22d06a581bb0a15575e6addadcc::usda::USDA", + "USDC_2": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDC", + "USDT_2": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDT", + "WETH": "0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WETH", + "SOL": "0xdd89c0e695df0692205912fb69fc290418bed0dbe6e4573d744a6d5e6bab6c13::coin::T", + "ST_APT": "0x84d7aeef42d38a5ffc3ccef853e1b82e4958659d16a7de736a29c55fbbeb0114::staked_aptos_coin::StakedAptosCoin", + "ST_APT2": "0xd11107bdf0d6d7040c6c0bfbdecb6545191fdf13e8d8d259952f53e1713f61b5::staked_coin::StakedAptos", + "CELER_BNB": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::BnbCoin", + "CELER_BUSD": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::BusdCoin", + "CELER_USDC": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::UsdcCoin", + "CELER_USDT": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::UsdtCoin", + "CELER_DAI": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::DaiCoin", + "CELER_ETH": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WethCoin", + "CELER_WBTC": "0x8d87a65ba30e09357fa2edea2c80dbac296e5dec2b18287113500b902942929d::celer_coin_manager::WbtcCoin" + }, + "dogechain": { + "WWDOGE": "0xb7ddc6414bf4f5515b52d8bdd69973ae205ff101", + "DC": "0x7b4328c127b85369d9f82ca0503b000d09cf9180", + "USDC": "0x85c2d3bebffd83025910985389ab8ad655abc946", + "DAI": "0xb3306f03595490e5cc3a1b1704a5a158d3436ffc", + "ETH": "0xb44a9b6905af7c801311e8f4e76932ee959c663c", + "USDT": "0x7f8e71dd5a7e445725f0ef94c7f01806299e877a", + "WBTC": "0xd0c6179c43c00221915f1a61f8ec06a5aa32f9ec", + "FRAX": "0x10d70831f9c3c11c5fe683b2f1be334503880db6", + "BUSD": "0x332730a4f6e03d9c55829435f10360e13cfa41ff", + "BNB": "0x1fc532187b4848d2f9c564531b776a4f8e11201d", + "QUICK": "0xb12c13e66ade1f72f71834f2fc5082db8c091358", + "MATIC": "0xdc42728b0ea910349ed3c6e1c9dc06b5fb591f98", + "WETH": "0x9f4614e4ea4a0d7c4b1f946057ec030bee416cbb" + }, + "canto": { + "WCANTO": "0x826551890dc65655a0aceca109ab11abdbd7a07b", + "USDC": "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd", + "USDT": "0xd567b3d7b8fe3c79a1ad8da978812cfc4fa05e75", + "NOTE": "0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503", + "ETH": "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", + "ATOM": "0xeceeefcee421d8062ef8d6b4d814efe4dc898265", + "cINU": "0x7264610a66eca758a8ce95cf11ff5741e1fd0455" + }, + "ontology_evm": { + "WONG": "0xd8bc24cfd45452ef2c8bc7618e32330b61f2691b" + }, + "algorand": { + "XET": "283820866", + "SMILE": "300208676", + "ALGF": "463554836", + "GOMINT": "441139422", + "STKE": "511484048", + "YLDY": "226701642", + "COSG": "571576867", + "PBTC": "744665252", + "USDC": "31566704", + "HDL": "137594422", + "VEST": "700965019", + "CCT": "657291910", + "BUY": "137020565", + "STBL": "841126810", + "STBL_1": "465865291", + "GOBTC": "386192725", + "ARCC": "163650", + "ZONE": "444035862", + "PLANETS": "27165954", + "GALGO": "793124631", + "GOETH": "386195940", + "OPUL": "287867876", + "B3X": "663905154", + "OCTO": "559219992", + "MCAU": "6547014", + "RIO": "2751733", + "BOARD": "342889824", + "ALGO": "1", + "XGLI": "607591690", + "NXS": "403499324", + "ADAO": "692085161", + "DEFLY": "470842789", + "CHOICE": "297995609", + "USDT": "312769", + "GARD": "684649988" + }, + "shiden": { + "WSDN": "0x0f933dc137d21ca519ae4c7e93f87a4c8ef365ef", + "USDC": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "USDT": "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", + "JPYC": "0x735abe48e8782948a37c7765ecb76b98cde97b0f", + "STND": "0x722377a047e89ca735f09eb7cccab780943c4cb4", + "ETH": "0x765277eebeca2e31912c9946eae1021199b39c61", + "BNB": "0x332730a4f6e03d9c55829435f10360e13cfa41ff", + "BUSD": "0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a" + }, + "tezos": { + "USDtz": "KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9", + "CTez": "KT1SjXiUX63QvdNMcM2m492f7kuf8JxXRLp4", + "UP": "KT1TgmD7kXQzofpuc9VbTRMdZCS2e6JDuTtc", + "KALAM": "KT1A5P4ejnLix13jtadsfV9GCnXLMNnab8UT", + "wWBTC": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-19", + "wMATIC": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-11", + "MYH": "KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR", + "kUSD": "KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV", + "USDT_e": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-3", + "PXL": "KT1F1mn2jbqQCJcsNgYKVAQjvenecNMY2oPK", + "WBTC_e": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-1", + "kDAO": "KT1JkoE42rrMBP9b2oDhbx6EUr26GcySZMUH", + "STKR": "KT1AEfeckNbdEYwaMKkytBwPJPycz7jdSGea", + "wXTZ": "KT1VYsVfmobT7rsMVivvZ4J8i3bPiqz12NaH", + "MATIC_e": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-4", + "hDAO": "KT1AFA2mwNUMNd4SsujE1YYp29vd8BZejyKW", + "WRAP": "KT1LRboPna9yQY9BrjtQYDS1DVxhKESK4VVd", + "wBUSD": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-1", + "USDt": "KT1XnTn74bUtxHfDtBmm2bGZAQfhPbvKWR8o", + "ETHtz": "KT19at7rQUvyjxnZ2fBv7D9zc8rkyG7gAoU8", + "wUSDC": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-17", + "QUIPU": "KT193D4vozYnhGJQVtw7CoxxqphqUEEwK6Vb", + "wWETH": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-20", + "USDC_e": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-2", + "PLENTY": "KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b", + "wUSDT": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-18", + "wDAI": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-5", + "SMAK": "KT1TwzD6zV3WeJ39ukuqxcfK2fJCnhvrdN1X", + "LINK_e": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-5", + "DOGA": "KT1Ha4yFVeyzw6KRAdkzq6TxDHB97KG4pZe8", + "WETH_e": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY", + "INSTA": "KT19y6R8x53uDKiM46ahgguS6Tjqhdj2rSzZ", + "GIF": "KT1XTxpQvo7oRCqp85LikEZgAZ22uDxhbWJv", + "UNO": "KT1ErKVqEhG9jxXgUG2KGLW3bNM7zXHX8SDF", + "uUSD": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW", + "YOU": "KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL", + "USDS": "KT1REEb5VxWRjcHm5GzDMwErMmNFftsE5Gpf", + "tzBTC": "KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn", + "BUSD": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-7", + "DAI": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-6", + "PAUL": "KT19DUSZw7mfeEATrbWVPHRrWNVbNnmfFAE6", + "XTZ": "tezos", + "XTZ_1": "KT1UpeXdK6AJbX58GJ92pLZVCucn2DR8Nu4b", + "LINK": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ-10", + "AAVE": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ", + "WBTC": "KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW-2", + "UUSD": "KT1XRPEPXBZK25R3HTZP2O1X7XDMMMFOCKNW-0", + "ETH": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY-0" + }, + "hpb": { + "WHPB": "0xbe05ac1fb417c9ea435b37a9cecd39bc70359d31" + }, + "godwoken": { + "WCKB": "0xe934f463d026d97f6ce0a10215d0ac4224f0a930", + "USDC": "0xc3b946c53e2e62200515d284249f2a91d9df7954", + "USDC_bsc": "0xa21b19d660917c1de263ad040ba552737cfcef50", + "USDT": "0x07a388453944bb54be709ae505f14aeb5d5cbb2c", + "USDT_bsc": "0x5c30d9396a97f2279737e63b2bf64cc823046591", + "WBTC_eth": "0x7818fa4c71dc3b60049fb0b6066f18ff8c720f33", + "BTCB_bsc": "0x3f8d2b24c6fa7b190f368c3701ffcb2bd919af37" + }, + "godwoken_v1": { + "WCKB": "0xc296f806d15e97243a08334256c705ba5c5754cd", + "pCKB": "0x7538c85cae4e4673253ffd2568c1f1b48a71558a", + "ETH": "0x9e858a7aaedf9fdb1026ab1f77f627be2791e98a", + "BNB_bsc": "0xbadb9b25150ee75bb794198658a4d0448e43e528", + "WBTC_eth": "0x82455018f2c32943b3f12f4e59d0da2faf2257ef", + "BTCB_bsc": "0xef2439e020509259fa603c34b35a81ffe676cfb4", + "WETH": "0xb66954619363145a05ef835547449eb9050d82f6", + "USDC": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", + "USDC_bsc": "0xfa307cfdea89dc197a346c338a98ac85d517af6e", + "USDT_bsc": "0xdff2facdfe47c1d5b51f18231f900949f1d5988f", + "DAI": "0x765277eebeca2e31912c9946eae1021199b39c61", + "USDT": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "BUSD": "0xcd7bc9fc617a4f82ec1c8359d1c8610b90e3b44c", + "WBTC": "0xb44a9b6905af7c801311e8f4e76932ee959c663c" + }, + "waves": { + "BNB": "5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR", + "BUSD": "8DLiYZjo3UUaRBTHU7Ayoqg4ihwb6YH1AfXrrhdjQ7K1", + "SWOP": "Ehie5xYpeN8op1Cctc6aGUrqx8jq3jtf1DSjXDbfm7aT", + "MKR": "E4rss7qLUcawCvD2uMrbLeTMPGkX15kS3okWCbUhLNKL", + "VIRES": "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p", + "ENJ": "EfwRV6MuUCGgAUchdsF4dDFnSpKrDW3UYshdaDy4VBeB", + "BTC": "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS", + "DAI": "8zUYbdB8Q6mDhpcXYv52ji8ycfj4SDX4gJXS7YY3dA4R", + "WEST": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8", + "FTM": "4GZH8rk5vDmMXJ81Xqfm3ovFaczqMnQ11r7aELiNxWBV", + "ATOM": "47cyc68FWJszCWEwMWVsD9CadjS2M1XtgANuRGbEW8UH", + "CRO": "HLckRcg7hJ3Syf3PrGftFijKqQMJipf81WY3fwvHCJbe", + "YFI": "BLRxWVJWaVuR2CsCoTvTw2bDZ3sQLeTbCofcJv7dP5J4", + "APE": "2GBgdhqMjUPqreqPziXvZFSmDiQVrxNuGxR1z7ZVsm4Z", + "CRV": "3KhNcHo4We1G5EWps7b1e5DTdLgWDzctc8S6ynu37KAb", + "USDC": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ", + "LINK": "2bbGhKo5C31iEiB4CwGuqMYwjD7gCA9eXmm51fe2v8vT", + "AAVE": "7TMu26hAs7B2oW6c5sfx45KSZT7GQA3TZNYuCav8Dcqt", + "NSBT": "6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g", + "WBTC": "5zoDNRdwVXwe7DveruJGxuJnqo7SYhveDeKb8ggAuC34", + "MANA": "Aug9ccbPApb1hxXSue8fHuvbyMf1FV1BYBtLUuS5LZnU", + "SHIB": "GVxGPBtgVWMW1wHiFnfaCakbJ6sKgZgowJgW5Dqrd7JH", + "FTT": "2Fh9m3dNQXycHdnytEaETN3P1gDT7ij5U4HjMqQBeaqN", + "UNI": "4YmM7mj3Av4DPvpNpbtK4jHbpzYDcZuY6UUnYpqTbzLj", + "SAND": "8YyrMfuBdZ5gtMWkynLTveRvGb6LJ4Aff9rpz46UUMW", + "MATIC": "HcHacFH51pY91zjJa3ZiUVWBww54LnsL4EP3s7hVGo9L", + "GRT": "A1uMqYTzBdakuSNDv7CruWXP8mRZ4EkHwmip2RCauyZH", + "ENNO": "7LMV3s1J4dKpMQZqge5sKYoFkZRLojnnU49aerqos4yg", + "ETH": "474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu", + "LTC": "HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk", + "WX": "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on", + "AXS": "ATQdLbehsMrmHZLNFhUm1r6s14NBT5JCFcSJGpaMrkAr", + "USDN": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", + "UST": "2thtesXvnVMcCnih9iZbJL3d2NQZMfzENJo8YFj6r5jU", + "LUNA": "6QUVF8nVVVvM7do7JT2eJ5o5ehnZgXUg13ysiB9JiQrZ", + "USDT": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ", + "WAVES": "WAVES" + }, + "songbird": { + "WSGB": "0x02f0826ef6ad107cfc861152b32b52fd11bab9ed", + "CAND": "0x70ad7172ef0b131a1428d0c1f66457eb041f2176", + "SFIN": "0x0D94e59332732D18CF3a3D457A8886A2AE29eA1B", + "EXFI": "0xc348f894d0e939fe72c467156e6d7dcbd6f16e21" + }, + "energi": { + "WNRG": "0xa55f26319462355474a9f2c8790860776a329aa4" + }, + "nahmii": { + "ETH": "0x4200000000000000000000000000000000000006", + "NII": "0x595dba438a1bf109953f945437c1584319515d88" + }, + "curio": { + "CGT": "0x134ebab7883dfa9d04d20674dd8a8a995fb40ced" + }, + "gochain": { + "WGO": "0xcc237fa0a4b80ba47992d102352572db7b96a6b5", + "USDC": "0x97a19ad887262d7eca45515814cdef75acc4f713", + "FAST": "0x67bbb47f6942486184f08a671155fcfa6cad8d71" + }, + "smartbch": { + "WBCH": "0x3743ec0673453e5009310c727ba4eaf7b3a1cc04", + "LAW": "0x0b00366fbf7037e9d75e4a569ab27dab84759302", + "flexUSD": "0x7b2b3c5308ab5b2a1d9a94d20d35ccdf61e05b72", + "DAIQUIRI": "0x24d8d5cbc14fa6a740c3375733f0287188f8df3b", + "bcUSDT": "0xbc2f884680c95a02cea099da2f524b366d9028ba", + "_CATS": "0x265bd28d79400d55a1665707fa14a72978fa6043" + }, + "palm": { + "DAI": "0x4c1f6fcbd233241bf2f4d02811e3bf8429bc27b8", + "WETH": "0x726138359c17f1e56ba8c4f737a7caf724f6010b" + }, + "syscoin": { + "WSYS": "0xd3e822f3ef011ca5f17d82c956d952d8d7c3a1bb", + "USDC": "0x2bf9b864cdc97b08b6d79ad4663e71b8ab65c45c", + "ETH": "0x7c598c96d02398d89fbcb9d41eab3df0c16f227d", + "USDT": "0x922d641a426dcffaef11680e5358f34d97d112e1" + }, + "vision": { + "USDT": "0x1db6cdc620388a0b6046b20cd59503a0839adcff", + "VBTC": "0x4dE4B92C12dD4584873e72447573382C41da5597", + "VETH": "0x9261Bb697FE632dd4746c78406E955123085Bf4C", + "VBNB": "0xf6515Ce2ab3482C84Daaef961793bdFa3266b8ad", + "WVS": "0x79ffbc4fff98b821d59dbd7b33f91a2783006b6f" + }, + "kava": { + "WKAVA": "0xc86c7c0efbd6a49b35e8714c5f59d99de09a225b", + "USDC": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "USDT": "0xb44a9b6905af7c801311e8f4e76932ee959c663c", + "USDt": "0x919C1c267BC06a7039e03fcc2eF738525769109c", + "WBTC": "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", + "DAI": "0x765277eebeca2e31912c9946eae1021199b39c61", + "SUSHI": "0x7c598c96d02398d89fbcb9d41eab3df0c16f227d", + "ETH": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", + "BUSD": "0x332730a4f6e03d9c55829435f10360e13cfa41ff", + "BNB": "0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a", + "WETH": "0xc13791da84f43525189456cfe2026c60d3b7f706", + "USDk": "0x472402d47da0587c1cf515dafbafc7bce6223106", + "axlUSDC": "0xeb466342c4d449bc9f53a865d5cb90586f405215", + "axlUSDT": "0x7f5373ae26c3e8ffc4c77b7255df7ec1a9af52a6", + "axlDAI": "0x5c7e299cf531eb66f2a1df637d37abb78e6200c7", + "KFT": "0xa0eeda2e3075092d66384fe8c91a1da4bca21788", + "USX": "0xdb0e1e86b01c4ad25241b1843e407efc4d615248", + "kBRISE": "0xea616011e5ac9a5b91e22cac59b4ec6f562b83f9" + }, + "sx": { + "WSX": "0xaa99be3356a11ee92c3f099bd7a038399633566f", + "WETH": "0xa173954cc4b1810c0dbdb007522adbc182dab380", + "USDC": "0xe2aa35c2039bd0ff196a6ef99523cc0d3972ae3e", + "WMATIC": "0xfa6f64dfbad14e6883321c2f756f5b22ff658f9c", + "DAI": "0x53813cd4acd7145a716b4686b195511fa93e4cb7", + "SHARK": "0x7dc31a2fcbfbad1ed4519111fd33f78316bcbc81" + }, + "meter": { + "MTRG": "0x228ebbee999c6a7ad74a6130e81b12f9fe237ba3", + "WMTR": "0x160361ce13ec33c993b5cca8f62b6864943eb083", + "USDC_eth": "0xd86e243fc0007e6226b07c9a50c9d70d78299eb5", + "MTR": "0x6abaedab0ba368f1df52d857f24154cc76c8c972", + "BUSD_bsc": "0x24aa189dfaa76c671c279262f94434770f557c35", + "TFUEL": "0x75fd6f7edcc5e7a8100ead3d29ccd844153ef0f3", + "USDT_eth": "0x5fa41671c48e3c951afc30816947126ccc8c162e" + }, + "callisto": { + "WCLO": "0xf5ad6f6edec824c7fd54a66d241a227f6503ad3a", + "BUSDT": "0xbf6c50889d3a620eb42c0f188b65ade90de958c4", + "ccETC": "0xccc766f97629a4e14b3af8c91ec54f0b5664a69f", + "ccETH": "0xcc208c32cc6919af5d8026dab7a3ec7a57cd1796", + "ccBNB": "0xccde29903e621ca12df33bb0ad9d1add7261ace9", + "SOY": "0x9fae2529863bd691b4a7171bdfcf33c7ebb10a65" + }, + "thundercore": { + "null": "0x0000000000000000000000000000000000000000", + "WTT": "0x413cefea29f2d07b8f2acfa69d92466b9535f717", + "TT_USDT": "0x4f3c8e20942461e2c3bdd8311ac57b0c222f2b82", + "TT_ETH": "0x6576bb918709906dcbfdceae4bb1e6df7c8a1077", + "TT_USDC": "0x22e89898a04eaf43379beb70bf4e38b1faf8a31e", + "TT_BUSD": "0xbeb0131d95ac3f03fd15894d0ade5dbf7451d171" + }, + "conflux": { + "WCFX": "0x14b2d3bc65e74dae1030eafd8ac30c533c976a9b", + "USDC": "0x6963efed0ab40f6c3d7bda44a05dcf1437c44372", + "USDT": "0xfe97e85d13abd9c1c33384e796f10b73905637ce", + "WBTC": "0x1f545487c62e5acfea45dcadd9c627361d1616d8", + "ETH": "0xa47f43de2f9623acb395ca4905746496d2014d57" + }, + "muuchain": { + "WMUU": "0x875358f6194d7c622d6355455f3137cceb2955c4" + }, + "iotex": { + "WIOTX": "0xa00744882684c3e4747faefd68d283ea44099d03", + "ELK": "0xe1ce1c0fa22ec693baca6f5076bcdc4d0183de1c", + "ioUSDT": "0x6fbcdc1169b5130c59e72e51ed68a84841c98cd1", + "USDT_matic": "0x3cdb7c48e70b854ed2fa392e21687501d84b3afc", + "ioUSDC": "0x3b2bf2b523f54c4e454f08aa286d03115aff326c", + "USDC_matic": "0xc04da3a99d17135857bb937d2fbb321d3b6c6a81", + "USDT_b": "0x42c9255d5e522e83b16ea11a3ba04c2d3afca079", + "USDC_b": "0x037346e5a5722957ac2cab6ceb8c74fc18cea91d", + "BUSD_bsc": "0x84abcb2832be606341a50128aeb1db43aa017449", + "ioBUSD": "0xacee9b11cd4b3f57e58880277ac72c8c41abe4e4", + "DAI_matic": "0x62a9d987cbf4c45a550deed5b57b200d7a319632", + "ioDAI": "0x1cbad85aa66ff3c12dc84c5881886eeb29c1bb9b", + "anyXIM": "0xd6070ae98b8069de6b494332d1a1a81b6179d960", + "XIM": "0xec690cdd448e3cbb51ed135df72301c3265a8f80", + "CYC": "0x4d7b88403aa2f502bf289584160db01ca442426c", + "ioETH": "0x0258866edaf84d6081df17660357ab20a07d0c80", + "ioWBTC": "0xc7b93720f73b037394ce00f954f849ed484a3dea", + "GFT": "0x17df9fbfc1cdab0f90eddc318c4f6fcada730cf2", + "METX": "0x4752456e00def6025c77b55a88a2f8a1701f92f9", + "iMAGIC": "0x490cfbf9b9c43633ddd1968d062996227ef438a9", + "BNB_bsc": "0x97e6c48867fdc391a8dfe9d169ecd005d1d90283", + "ZOOM": "0x86702a7f8898b172de396eb304d7d81207127915", + "WMATIC": "0x8e66c0d6b70c0b23d39f4b21a1eac52bba8ed89a", + "CIOTX": "0x99b2b0efb56e62e36960c20cd5ca8ec6abd5557a" + }, + "ronin": { + "WRON": "0xe514d9deb7966c8be0ca922de8a064264ea6bcd4", + "AXS": "0x97a9107c1793bc407d6f527b77e7fff4d812bece", + "SLP": "0xa8754b9fa15fc18bb59458815510e40a12cd2014", + "WETH": "0xc99a6a985ed2cac1ef41640596c5a5f9f4e19ef5", + "USDC": "0x0b7007c13325c48911f73a2dad5fa5dcbf808adc" + }, + "arbitrum_nova": { + "WETH": "0x722e8bdd2ce80a4422e880164f2079488e115365", + "DAI": "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", + "USDT": "0x52484e1ab2e2b22420a25c20fa49e173a26202cd", + "USDC": "0x750ba8b76187092b0d1e87e28daaf484d1b5273b" + }, + "ethpow": { + "WETH": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "BHC": "0x0c9f28fbdfd79f7c00b805d8c63d053c146d282c", + "WETHW": "0x7bf88d2c0e32de92cdaf2d43ccdc23e8edfd5990", + "USDC": "0x25de68ef588cb0c2c8f3537861e828ae699cd0db", + "USDT": "0x2ad7868ca212135c6119fd7ad1ce51cfc5702892", + "WBTC": "0x4bbd68d8b1f25ae7b460e3347c637fe9e7338e0c", + "ETH": "0x34a9c05b638020a07bb153bf624c8763bf8b4a86", + "DAI": "0x0b35d852dcb8b59eb1e8d3182ebad4e96e2df8f0", + "BNB": "0xbd1563046a90f18127fd39f3481fd8d6ab22877f", + "BUSD": "0xf61eb8999f2f222f425d41da4c2ff4b6d8320c87" + }, + "xdc": { + "xUSDT": "0xd4b5f10d61916bd6e0860144a91ac658de8a1437", + "WXDC": "0x951857744785e80e2de051c32ee7b25f9c458c42", + "XSP": "0x36726235dadbdb4658d33e62a249dca7c4b2bc68", + "SRX": "0x5d5f074837f5d4618b3916ba74de1bf9662a3fed", + "USNOTA": "0xd04275e2fd2875beaade6a80b39a75d4fe267df6", + "PLI": "0xff7412ea7c8445c46a8254dfb557ac1e48094391" + }, + "kardia": { + "WKAI": "0xaf984e23eaa3e7967f3c5e007fbe397d8566d23d", + "USDT": "0x551a5dcac57c66aa010940c2dcff5da9c53aa53b", + "KUSD_T": "0x92364ec610efa050d296f1eeb131f2139fb8810e" + }, + "empire": { + "USDC": "0xc61a71c75ed4742dcae74b8cac27a37d46fc6751" + }, + "boba_bnb": { + "USDC": "0x9f98f9f312d23d078061962837042b8918e6aff2", + "BOBA": "0x4200000000000000000000000000000000000006", + "BNB": "0x4200000000000000000000000000000000000023" + }, + "boba_avax": { + "USDC_e": "0x126969743a6d300bab08f303f104f0f7dbafbe20", + "WBOBA": "0x26c319b7b2cf823365414d082698c8ac90cbba63", + "AVAX": "0x4200000000000000000000000000000000000023" + }, + "omax": { + "WOMAX": "0xfebabc6a9b2ec46d6357879b8bf39b593f11a5b9" + }, + "wemix": { + "WWEMIX": "0x7d72b22a74a216af4a002a1095c8c707d6ec1c5f", + "WEMIX_": "0x8e81fcc2d4a3baa0ee9044e0d7e36f59c9bba9c1", + "KLAY": "0x461d52769884ca6235b685ef2040f47d30c94eb5", + "ETH": "0x765277EebeCA2e31912C9946eAe1021199B39C61", + "USDC": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d" + }, + "tlchain": { + "WTLC": "0x422b6cdf97c750a0edcddc39c88f25379e59e96e" + }, + "zeniq": { + "WZENIQ": "0x74dc1c4ec10abe9f5c8a3eabf1a90b97cdc3ead8" + }, + "dexit": { + "WDXT": "0x414b8baf9950c87804cf7e23bb43a58ae7e1e202" + }, + "step": { + "WFITFI": "0xb58a9d5920af6ac1a9522b0b10f55df16686d1b6", + "USDC": "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", + "USDT": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "ETH": "0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b", + "BNB": "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73" + }, + "flare": { + "WFLR": "0x1d80c49bbbcd1c0911346656b529df9e5c2f783d" + }, + "ibc": { + "JUNO": "EFF323CC632EC4F747C61BCE238A758EFDB7699C3226565F7C20DA06509D59A5", + "JUNO_1": "167E3D88D71B7D2F6308D3EF93FC3DD51932B2D9672D72B71418F61CBC5F5717", + "AXL_2": "C0E66D1C81D8AAF0E6896E05190FDFBC222367148F86AC3EA679C28327A763CD", + "STRD": "3FDD002A3A4019B05A33D324B2F29748E77AF501BEA5C96D1F28B2D6755F9F25", + "BNB": "DADB399E742FCEE71853E98225D13E44E90292852CD0033DF5CABAB96F80B833", + "AXLWETH": "F1806958CA98757B91C3FA1573ECECD24F6FA3804F074A6977658914A49E65A3", + "AKT": "799FDD409719A1122586A629AE8FCA17380351A51C1F47A80A1B8E7F2A491098", + "HUA": "E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB", + "ATOM": "961FA3E54F5DCCA639F37A7C45F7BBE41815579EF1513B5AFBEFCFEB8F256352", + "ATOM_1": "C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "ATOM_2": "27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", + "USDC": "B3504E092456BA618CC28AC671A71FB08C6CA0FD0BE7C8A5B5A3E2DD933CC9E4", + "USDC_1": "E1616E7C19EA474C565737709A628D6F8A23FF9D3E9A7A6871306CF5E0A5341E", + "GRAV": "C950356239AD2A205DE09FDF066B1F9FF19A7CA7145EA48A5B19B76EE47E52F7", + "SCRT": "A358D7F19237777AF6D8AD0E0F53268F8B18AE8A53ED318095C14D6D7F3B2DB5", + "AXL": "903A61A498756EA560B85A85132D3AEE21B5DEDD41213725D22ABF276EA6945E", + "AXL_1": "C01154C2547F4CB10A985EA78E7CD4BA891C1504360703A37E1D7043F06B5E1F", + "DOT": "624BA9DD171915A2B9EA70F69638B2CEA179959850C1A586F6C485498F29EDD4", + "DOT_1": "B37E4D9FB5B30F3E1E20A4B2DE2A005E584C5C822C44527546556AE2470B4539", + "ETH": "1B38805B1C75352B28169284F96DF56BDEBD9E8FAC005BDCC8CF0378C82AA8E7", + "CMST": "9EC8A1701813BB7B73BFED2496009ABB2C8BF187E6CDFA788D77F68E08BC05CD", + "OSMO": "EA7DF7F779C7F14E07172E5713E07356B55F01496CA649DDE46CF8FBF1A8466D", + "OSMO_1": "47BD209179859CDE4A2806763D7189B6E6FE13A17880FE2B42DE1E6C1E329E23", + "OSMO_2": "0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B", + "INJ": "5A76568E079A31FA12165E4559BA9F1E9D4C97F9C2060B538C84DCD503815E30", + "XPRT": "B786E7CBBF026F6F15A8DA248E0F18C62A0F7A70CB2DABD9239398C8B5150ABB", + "G-USDC": "CD01034D6749F20AAC5330EF4FD8B8CA7C40F7527AB8C4A302FBD2A070852EE1", + "STARS": "987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4", + "STARS_1": "4F393C3FCA4190C0A6756CE7F6D897D5D1BE57D6CCB80D0BC87393566A7B6602", + "CMDX": "3607EB5B5E64DD1C0E12E07F077FF470D5BC4706AFCBC98FE1BA960E5AE4CE07", + "CMDX_1": "EA3E1640F9B1532AB129A571203A0B9F789A7F14BB66E350DCBFA18E1A1931F0", + "EVMOS": "F3AA7EF362EC5E791FE78A0F4CCC69FEE1F9A7485EB1A8CAB3F6601C00522F10", + "EVMOS_1": "16618B7F7AC551F48C057A13F4CA5503693FBFF507719A85BC6876B8BD75F821", + "LUNA": "DA59C009A0B3B95E0549E6BF7B075C8239285989FF457A8EDDBB56F10B2A6986", + "AXLUSDC": "BFF0D3805B50D93E2FA5C0B2DDF7E0B30A631076CD80BC12A48C0E95404B4A41", + "AXLUSDC_1": "EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034", + "AXLUSDC_2": "295548A78785A1007F232DE286149A6FF512F180AF5657780FC89C009E2C348F", + "UST": "B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C", + "UST_1": "6F4968A73F90CF7DE6394BF937D6DF7C7D162D74D839C13F53B41157D315E05F", + "G-WETH": "DBF5FA602C46392DE9F4796A0FC7D02F3A8A3D32CA3FAA50B761D4AA6F619E95", + "LUNA_1": "4627AD2524E3E0523047E35BB76CC90E37D9D57ACF14F0FCBCEB2480705F3CB8", + "LUNC": "B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395", + "IST": "CA1261224952DF089EFD363D8DBB30A8AB6D8CD181E60EE9E68E432F8DE14FE3", + "USDT": "CBF67A2BCF6CAE343FDF251E510C8E18C361FC02B23430C121116E0811835DEF", + "USDT_1": "F2331645B9683116188EF36FC04A809C28BD36B54555E8705A37146D0182F045", + "ATOM_3": "27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", + "AKT_1": "799FDD409719A1122586A629AE8FCA17380351A51C1F47A80A1B8E7F2A491098", + "LUNA_2": "B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395", + "OSMO_3": "0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B", + "UST_2": "B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C", + "AXL_USDC_1": "F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349", + "BLD": "11F940BCDFD7CFBFD7EDA13F25DA95D308286D441209D780C9863FD4271514EB" + }, + "starknet": { + "DAI": "0x00da114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3", + "USDC": "0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8", + "USDT": "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8", + "WBTC": "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac", + "ETH": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" + }, + "ton": { + "TON": "0x0000000000000000000000000000000000000000", + "TON_1": "EQDQoc5M3Bh8eWFephi9bClhevelbZZvWhkqdo80XuY_0qXv", + "TON_2": "Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF", + "TON_3": "EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c", + "USDC": "EQC61IQRl0_la95t27xhIpjxZt32vl1QQVF2UgTNuvD18W-4", + "USDT": "EQC_1YoM8RBixN95lz7odcF3Vrkc_N8Ne7gQi7Abtlet_Efi", + "ETH": "EQAW42HutyDem98Be1f27PoXobghh81umTQ-cGgaKVmRLS7-" + }, + "defichain": { + "DFI": "DFI", + "DUSD": "DUSD", + "ETH": "ETH", + "BTC": "BTC", + "USDC": "USDC", + "USDT": "USDT" + }, + "elrond": { + "WEGLD": "WEGLD-bd4d79", + "USDC": "USDC-c76f1f" + }, + "bitindi": { + "WBNI": "0x15E162205421dc3A47b15A1A740FbF5EAbB77921" + }, + "core": { + "WCORE": "0x40375c92d9faf44d2f9db9bd9ba41a3317a2404f", + "USDT": "0x900101d06a7426441ae63e9ab3b9b0f63be145f1", + "USDC": "0xa4151b2b3e269645181dccf2d426ce75fcbdeca9" + }, + "crab": { + "WCRAB": "0x2d2b97ea380b0185e9fdf8271d1afb5d2bf18329" + }, + "lung": { + "WLUNG": "0xf51666bcb4b787df919395258fb1d9556f4e357b" + }, + "loop": { + "WLOOP": "0x3936D20a39eD4b0d44EaBfC91757B182f14A38d5" + }, + "rpg": { + "WRPG": "0x71d9cfd1b7adb1e8eb4c193ce6ffbe19b4aee0db", + "USDT": "0x8e8816a1747fddc5f8b45d2e140a425d3788f659" + }, + "map": { + "BUSD": "0x35bf4004c3fc9f509259d4942da6bae3669e1db1", + "WMAPO": "0x13cb04d4a5dfb6398fc5ab005a6c84337256ee23", + "USDC": "0x9f722b2cb30093f766221fd0d37964949ed66918", + "ETH": "0x05ab928d446d8ce6761e368c8e7be03c3168a9ec" + }, + "bone": { + "WBONE": "0xcda1fa23ff3b9b7172be82237bf662efb69437e9" + }, + "era": { + "WETH": "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", + "USDC": "0x3355df6d4c9c3035724fd0e3914de96a5a83aaf4", + "WBTC": "0xBBeB516fb02a01611cBBE0453Fe3c580D7281011", + "USDT": "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C", + "BUSD": "0x2039bb4116B4EFc145Ec4f0e2eA75012D6C0f181" + }, + "polygon_zkevm": { + "WETH": "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9", + "USDC": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035" + }, + "eos_evm": { + "WEOS": "0xc00592aA41D32D137dC480d9f6d0Df19b860104F", + "ETH": "0x922d641a426dcffaef11680e5358f34d97d112e1", + "USDC": "0x765277eebeca2e31912c9946eae1021199b39c61", + "USDT": "0xfa9343c3897324496a05fc75abed6bac29f8a40f", + "WBTC": "0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73" + }, + "oas": { + "WOAS": "0x5200000000000000000000000000000000000001" + }, + "enuls": { + "WNULS": "0x217dffF57E3b855803CE88a1374C90759Ea071bD" + }, + "sui": { + "USDC": "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN", + "CELO": "0xa198f3be41cda8c07b3bf3fee02263526e535d682499806979a111e88a5a8d0f::coin::COIN", + "WMATIC": "0xdbe380b13a6d0f5cdedd58de8f04625263f113b3f9db32b3e1983f49e2841676::coin::COIN", + "BNB": "0xb848cce11ef3a8f62eccea6eb5b35a12c4c2b1ee1af7755d02d7bd6218e8226f::coin::COIN", + "WETH": "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN", + "USDT": "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN", + "WBTC": "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN", + "WAVAX": "0x1e8b532cca6569cab9f9b9ebc73f8c13885012ade714729aa3b450e0339ac766::coin::COIN", + "WFTM": "0x6081300950a4f1e2081580e919c210436a1bed49080502834950d31ee55a2396::coin::COIN", + "WGLMR": "0x66f87084e49c38f76502d17f87d17f943f183bb94117561eb573e075fdc5ff75::coin::COIN", + "SOL": "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8::coin::COIN", + "USDC_SOL": "0xb231fcda8bbddb31f2ef02e6161444aec64a514e2c89279584ac9806ce9cf037::coin::COIN", + "USDC_ARB": "0xe32d3ebafa42e6011b87ef1087bbc6053b499bf6f095807b9013aff5a6ecd7bb::coin::COIN", + "USDC_BNB": "0x909cba62ce96d54de25bec9502de5ca7b4f28901747bbf96b76c2e63ec5f1cba::coin::COIN", + "SUI": "0x2::sui::SUI" + }, + "grove": { + "WGRV": "0xE85f139488c689038028a3EB8fC38dcC29D4C340" + }, + "fxcore": { + "FX": "FX", + "USDT": "usdt" + }, + "xpla": { + "XPLA": "axpla" + }, + "chihuahua": { + "HUAHUA": "uhuahua" + }, + "filecoin": { + "WFIL": "0xce5805cf6c84f71d2897f632e0aa60d2430ccd2a", + "USDT": "0x422849B355039bC58F2780cc4854919fC9cfaF94" + }, + "pulse": { + "WPLS": "0xa1077a294dde1b09bb078844df40758a5d0f9a27", + "ETH": "0x02dcdd04e3f455d838cd1249292c58f3b79e3c3c", + "USDC": "0x15D38573d2feeb82e7ad5187aB8c1D52810B1f07", + "USDT": "0x0Cb6F5a34ad42ec934882A05265A7d5F59b51A2f", + "HEX": "0x2b591e99afe9f32eaa6214f7b7629768c40eeb39", + "DAI": "0xefd766ccb38eaf1dfd701853bfce31359239f305" + }, + "onus": { + "WONUS": "0x4c761e48d1e735af551cc38abcbdce1d7faac6e4", + "BUSD": "0xdfB5E8a4AC08E46258A12AbE737bba5D8c452508", + "BNB": "0xbdce8c50c1e6f6501c2af8232d2d76ec75cda51d", + "USDT": "0xff276c6bca1f66fd54a8915e830735d6ab0c7b09", + "BTC": "0x935765ad27a1af00f73097c998a9fb721d2d7790", + "ETH": "0xb4373ebb073a4dcba47e567d075a9583fa3c763e" + }, + "stacks": { + "WSTX": "SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275.wstx-token-v4a", + "WBTC": "SP3DX3H4FEYZJZ586MFBS25ZW3HZDMEW92260R2PR.Wrapped-Bitcoin::wrapped-bitcoin" + }, + "neon_evm": { + "WNEON": "0xb14760c064a1b9eaf9ec5a8a421971e40a51b59c" + }, + "tenet": { + "WTENET": "0xd6cb8a253e12893b0cf39ca78f7d858652cca1fe" + }, + "mantle": { + "WMNT": "0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8", + "WETH": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead1111", + "USDT": "0x201eba5cc46d216ce6dc03f6a759e8e766e956ae", + "USDC": "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9" + }, + "linea": { + "WETH": "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f" + } } diff --git a/projects/helper/curvePools.js b/projects/helper/curvePools.js index 3457dee958..4c4cd6f354 100644 --- a/projects/helper/curvePools.js +++ b/projects/helper/curvePools.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./coreAssets.json') module.exports = { // Curve.fi Factory USD Metapool: moUSD '0x162b21ba1a90dd9384c615192fa4053217d2a8db': { @@ -32,7 +33,7 @@ module.exports = { // val3PS '0x5b5bd8913d766d005859ce002533d4838b0ebbb5': { swapContract: '0x19ec9e3f7b21dd27598e7ad5aae7dc0db00a806d', - underlyingTokens: ['0xaed19dab3cd68e4267aec7b2479b1ed2144ad77f', '0xa6fdea1655910c504e974f7f1b520b74be21857b', '0x5f7f6cb266737b89f7af86b30f03ae94334b83e9'], + underlyingTokens: [ADDRESSES.bsc.valBUSD, ADDRESSES.bsc.valUSDC, ADDRESSES.bsc.valUSDT], }, // ARTHu3PS '0xb38b49bae104bbb6a82640094fd61b341a858f78': { @@ -42,37 +43,37 @@ module.exports = { // 3EPS '0xaf4de8e872131ae328ce21d909c74705d3aaf452': { swapContract: '0x160caed03795365f3a589f10c379ffa7d75d4e76', - underlyingTokens: ['0xe9e7cea3dedca5984780bafc599bd69add087d56', '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', '0x55d398326f99059ff775485246999027b3197955'], + underlyingTokens: [ADDRESSES.bsc.BUSD, ADDRESSES.bsc.USDC, ADDRESSES.bsc.USDT], }, '0x6c3f90f043a72fa612cbac8115ee7e52bde6e490': { swapContract: '0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7', - underlyingTokens: ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '0x6b175474e89094c44da98b954eedeac495271d0f'], + underlyingTokens: [ADDRESSES.ethereum.USDT, ADDRESSES.ethereum.USDC, ADDRESSES.ethereum.DAI], }, '0x075b1bb99792c9e1041ba13afef80c91a1e70fb3': { swapContract: '0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714', - underlyingTokens: ['0xeb4c2781e4eba804ce9a9803c67d0893436bb27d', '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', '0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6'], + underlyingTokens: ['0xeb4c2781e4eba804ce9a9803c67d0893436bb27d', ADDRESSES.ethereum.WBTC, '0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6'], }, // Nerve '0xf2511b5e4fb0e5e2d123004b672ba14850478c14': { swapContract: '0x1B3771a66ee31180906972580adE9b81AFc5fCDc', - underlyingTokens: ['0xe9e7cea3dedca5984780bafc599bd69add087d56', '0x55d398326f99059ff775485246999027b3197955', '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d'], + underlyingTokens: [ADDRESSES.bsc.BUSD, ADDRESSES.bsc.USDT, ADDRESSES.bsc.USDC], }, // DOP-LP BSC '0x9116f04092828390799514bac9986529d70c3791': { swapContract: '0x5162f992EDF7101637446ecCcD5943A9dcC63A8A', underlyingTokens: [ '0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x55d398326f99059fF775485246999027B3197955', - '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d' + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.USDC ], }, // DOP-2P-LP BSC '0x124166103814e5a033869c88e0f40c61700fca17': { swapContract: '0x449256e20ac3ed7F9AE81c2583068f7508d15c02', underlyingTokens: [ - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x55d398326f99059fF775485246999027B3197955' + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT ], }, // DOP-UST-LP BSC @@ -80,16 +81,16 @@ module.exports = { swapContract: '0x830e287ac5947B1C0DA865dfB3Afd7CdF7900464', underlyingTokens: [ '0x23396cF899Ca06c4472205fC903bDB4de249D6fC', - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x55d398326f99059fF775485246999027B3197955' + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT ], }, // DOP-3P-LP BSC '0xaa5509ce0ecea324bff504a46fc61eb75cb68b0c': { swapContract: '0x61f864a7dFE66Cc818a4Fd0baabe845323D70454', underlyingTokens: [ - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x55d398326f99059fF775485246999027B3197955', + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT, '0xfF54da7CAF3BC3D34664891fC8f3c9B6DeA6c7A5' ], }, @@ -97,18 +98,18 @@ module.exports = { '0xb0f0983b32352a1cfaec143731ddd8a5f6e78b1f': { swapContract: '0x3ED4b2070E3DB5eF5092F504145FB8150CfFE5Ea', underlyingTokens: [ - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x55d398326f99059fF775485246999027B3197955', - '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d' + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.USDC ], }, // IS3USD Polygon '0xb4d09ff3dA7f9e9A2BA029cb0A81A989fd7B8f17': { swapContract: '0x837503e8A8753ae17fB8C8151B8e6f586defCb57', underlyingTokens: [ - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174' + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.USDC ] }, // am3CRV Polygon @@ -124,10 +125,10 @@ module.exports = { '0xc25a3a3b969415c80451098fa907ec722572917f': { swapContract: '0xA5407eAE9Ba41422680e2e00537571bcC53efBfD', underlyingTokens: [ - '0xdac17f958d2ee523a2206206994597c13d831ec7', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - '0x6b175474e89094c44da98b954eedeac495271d0f', - '0x57ab1ec28d129707052df4df418d58a2d46d5f51' + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.sUSD, ] }, // renBTC Eth @@ -135,27 +136,27 @@ module.exports = { swapContract: '0x93054188d876f558f4a66B2EF1d97d16eDf0895B', underlyingTokens: [ '0xeb4c2781e4eba804ce9a9803c67d0893436bb27d', - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599' + ADDRESSES.ethereum.WBTC ] }, // lusd Eth '0xed279fdd11ca84beef15af5d39bb4d4bee23f0ca': { swapContract: '0xed279fdd11ca84beef15af5d39bb4d4bee23f0ca', underlyingTokens: [ - '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0', + ADDRESSES.ethereum.LUSD, '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490' ] }, // steCRV Eth '0x06325440d014e39736583c165c2963ba99faf14e': { swapContract: '0xdc24316b9ae028f1497c275eb9192a3ea0f67022', - underlyingTokens: ['0xae7ab96520de3a18e5e111b5eaab095312d7fe84'] + underlyingTokens: [ADDRESSES.ethereum.STETH] }, // fraxCRV Eth '0xd632f22692fac7611d2aa1c0d552930d43caed3b': { swapContract: '0xd632f22692fac7611d2aa1c0d552930d43caed3b', underlyingTokens: [ - '0x853d955acef822db058eb8505911ed77f175b99e', + ADDRESSES.ethereum.FRAX, '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490' ] }, @@ -169,7 +170,7 @@ module.exports = { swapContract: '0xC2d95EEF97Ec6C17551d45e77B590dc1F9117C67', underlyingTokens: [ '0x5c2ed810328349100A66B82b78a1791B101C9D61', - '0xDBf31dF14B66535aF65AaC99C32e9eA844e14501' + ADDRESSES.fantom.renBTC ] }, // tricryptoCRV v1 Polygon @@ -213,8 +214,8 @@ module.exports = { '0xd7d4a4c67e9c1f5a913bc38e87e228f4b8820e8a': { swapContract: '0xCF97190fAAfea63523055eBd139c008cdb4468eB', underlyingTokens: [ - '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', - '0xc7198437980c041c805a1edcba50c1ce5db95118' + ADDRESSES.avax.DAI, + ADDRESSES.avax.USDT_e ] }, // gondolaYAKPool Avax @@ -229,8 +230,8 @@ module.exports = { '0x4dc5a6308338e540aa97faab7fd2e03876075413': { swapContract: '0x4b941276eb39d114c89514791d073a085acba3c0', underlyingTokens: [ - '0xc7198437980c041c805a1edcba50c1ce5db95118', - '0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664' + ADDRESSES.avax.USDT_e, + ADDRESSES.avax.USDC_e ] }, // av3CRV Avax @@ -246,17 +247,17 @@ module.exports = { '0x2dd7c9371965472e5a5fd28fbe165007c61439e1': { swapContract: '0x2dd7C9371965472E5A5fD28fbE165007c61439E1', underlyingTokens: [ - '0x82f0B8B456c1A451378467398982d4834b6829c1', - '0x049d68029688eAbF473097a2fC38ef61633A3C7A', - '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75' + ADDRESSES.fantom.MIM, + ADDRESSES.fantom.fUSDT, + ADDRESSES.fantom.USDC ] }, // Dai-Usdc Fantom '0x27e611fd27b276acbd5ffd632e5eaebec9761e40': { swapContract: '0x27E611FD27b276ACbd5Ffd632E5eAEBEC9761E40', underlyingTokens: [ - '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', - '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E' + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.DAI ] }, // gDai-gUSDC-gUSDT Fantom @@ -274,14 +275,14 @@ module.exports = { underlyingTokens: [ '0x74b23882a30290451A17c44f4F05243b6b58C76d', '0x321162Cd933E2Be498Cd2267a90534A804051b11', - '0x049d68029688eAbF473097a2fC38ef61633A3C7A' + ADDRESSES.fantom.fUSDT ] }, // btc-renbtc Fantom '0x5b5cfe992adac0c9d48e05854b2d91c73a003858': { swapContract: '0x3eF6A01A0f81D6046290f3e2A8c5b843e738E604', underlyingTokens: [ - '0xDBf31dF14B66535aF65AaC99C32e9eA844e14501', + ADDRESSES.fantom.renBTC, '0x321162Cd933E2Be498Cd2267a90534A804051b11' ] }, @@ -289,8 +290,8 @@ module.exports = { '0xaea2e71b631fa93683bcf256a8689dfa0e094fcd': { swapContract: '0xaea2e71b631fa93683bcf256a8689dfa0e094fcd', underlyingTokens: [ - '0xc7198437980c041c805a1edcba50c1ce5db95118', - '0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664', + ADDRESSES.avax.USDT_e, + ADDRESSES.avax.USDC_e, '0x130966628846bfd36ff31a822705796e8cb8c18d', ] }, @@ -328,7 +329,7 @@ module.exports = { '0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a': { swapContract: '0xF178C0b5Bb7e7aBF4e12A4838C7b7c5bA2C623c0', underlyingTokens: [ - '0x514910771AF9Ca656af840dff83E8264EcF986CA', + ADDRESSES.ethereum.LINK, '0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6', ], }, @@ -364,7 +365,7 @@ module.exports = { }, '0x50b0d9171160d6eb8aa39e090da51e7e078e81c4': { swapContract: '0x50b0d9171160d6eb8aa39e090da51e7e078e81c4', - underlyingTokens: ['0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F'] + underlyingTokens: [ADDRESSES.ethereum.SNX] }, '0xcaf8703f8664731ced11f63bb0570e53ab4600a9': { swapContract: '0xcaf8703f8664731ced11f63bb0570e53ab4600a9', @@ -380,7 +381,7 @@ module.exports = { }, '0x0437ac6109e8a366a1f4816edf312a36952db856': { swapContract: '0x0437ac6109e8a366a1f4816edf312a36952db856', - underlyingTokens: ['0x6B3595068778DD592e39A122f4f5a5cF09C90fE2'] + underlyingTokens: [ADDRESSES.ethereum.SUSHI] }, '0x9001a452d39a8710d27ed5c2e10431c13f5fba74': { swapContract: '0x9001a452d39a8710d27ed5c2e10431c13f5fba74', diff --git a/projects/helper/dexpad.js b/projects/helper/dexpad.js index 724bfc23f2..def2795bf5 100644 --- a/projects/helper/dexpad.js +++ b/projects/helper/dexpad.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./coreAssets.json') const BigNumber = require("bignumber.js"); const sdk = require("@defillama/sdk"); @@ -102,7 +103,7 @@ async function generateWhitelistedPairs(trackedTokens, factory, block, chain) { basePairs.forEach(pair => { if (pair.success) { const basePair = pair.output.toLowerCase(); - if (basePair != "0x0000000000000000000000000000000000000000") + if (basePair != ADDRESSES.null) whitelistedBasePairs.add(basePair); } }); diff --git a/projects/helper/env.js b/projects/helper/env.js index 53850d2f01..d1cd406d5c 100644 --- a/projects/helper/env.js +++ b/projects/helper/env.js @@ -1,14 +1,39 @@ -const env = process.env +const BOOL_KEYS = [ + 'HISTORICAL', + 'LLAMA_DEBUG_MODE', +] + +const DEFAULTS = { + COVALENT_KEY: 'ckey_72cd3b74b4a048c9bc671f7c5a6', + SOLANA_RPC: 'https://try-rpc.mainnet.solana.blockdaemon.tech', + APTOS_RPC: 'https://aptos-mainnet.pontem.network', + SUI_RPC: 'https://fullnode.mainnet.sui.io/', + MULTIVERSX_RPC: 'https://api.multiversx.com', + PGN_RPC: 'https://rpc.publicgoods.network', +} + +const ENV_KEYS = [ + ...BOOL_KEYS, + ...Object.keys(DEFAULTS), + 'GETBLOCK_KEY', + 'LOFTY_API', + 'OLYMPUS_GRAPH_API_KEY', + 'SUMMER_HISTORY_ENDPOINT', + 'SUMMER_AJNA_ENDPOINT', + 'SUMMER_CONFIRMED_VAULTS_ENDPOINT', +] + +Object.keys(DEFAULTS).forEach(i => { + if (!process.env[i]) process.env[i] = DEFAULTS[i] // this is done to set the chain RPC details in @defillama/sdk +}) + + +function getEnv(key) { + if (!ENV_KEYS.includes(key)) throw new Error(`Unknown env key: ${key}`) + const value = process.env[key] ?? DEFAULTS[key] + return BOOL_KEYS.includes(key) ? !!value : value +} module.exports = { - HISTORICAL: !!env.HISTORICAL, - LLAMA_DEBUG_MODE: !!env.LLAMA_DEBUG_MODE, - GETBLOCK_KEY: env.GETBLOCK_KEY, - SOLANA_RPC: env.SOLANA_RPC, - APTOS_RPC: env.APTOS_RPC, - TERRA_RPC: env.TERRA_RPC, - TERRA2_RPC: env.TERRA2_RPC, - LOFTY_API: env.LOFTY_API, - COVALENT_KEY: env.COVALENT_KEY, - OLYMPUS_GRAPH_API_KEY: env.OLYMPUS_GRAPH_API_KEY, + getEnv, } \ No newline at end of file diff --git a/projects/helper/erc4626.js b/projects/helper/erc4626.js new file mode 100644 index 0000000000..145f12a4a6 --- /dev/null +++ b/projects/helper/erc4626.js @@ -0,0 +1,18 @@ + +async function sumERC4626Vaults({ api, vaults, abi = {} }) { + const tokens = await api.multiCall({ abi: abi.asset ?? 'address:asset', calls: vaults}) + const bals = await api.multiCall({ abi: abi.balance ?? 'uint256:totalAssets', calls: vaults}) + api.addTokens(tokens, bals) + return api.getBalances() +} + +function sumERC4626VaultsExport({ vaults, ...options}) { + return async (timestamp, ethBlock, chainBlocks, { api }) => { + return sumERC4626Vaults({ ...options, api, vaults }) + } +} + +module.exports = { + sumERC4626Vaults, + sumERC4626VaultsExport, +} \ No newline at end of file diff --git a/projects/helper/gmx.js b/projects/helper/gmx.js index d56c7076d6..07295c3c56 100644 --- a/projects/helper/gmx.js +++ b/projects/helper/gmx.js @@ -1,6 +1,7 @@ const { sumTokens2 } = require('./unwrapLPs') -function gmxExports({ vault, }) { +function gmxExports({ vault, blacklistedTokens = [], abis = {} }) { + abis = { ...defaultAbis, ...abis} return async (ts, _block, _, { api }) => { const tokenAddresses = await api.fetchList({ target: vault, @@ -8,11 +9,11 @@ function gmxExports({ vault, }) { itemAbi: abis.allWhitelistedTokens, }) - return sumTokens2({ api, owner: vault, tokens: tokenAddresses, }) + return sumTokens2({ api, owner: vault, tokens: tokenAddresses, blacklistedTokens, }) } } -const abis = { +const defaultAbis = { allWhitelistedTokensLength: 'uint256:allWhitelistedTokensLength', allWhitelistedTokens: 'function allWhitelistedTokens(uint256) view returns (address)' } diff --git a/projects/helper/http.js b/projects/helper/http.js index 5078f7362f..09a9bb3eb2 100644 --- a/projects/helper/http.js +++ b/projects/helper/http.js @@ -1,9 +1,8 @@ const axios = require("axios") const { request, GraphQLClient, } = require("graphql-request") const sdk = require('@defillama/sdk') -const env = require('./env') +const { getEnv } = require('./env') const { getCache: cGetCache, setCache } = require('./cache') -const COVALENT_KEY = env.COVALENT_KEY ?? 'ckey_72cd3b74b4a048c9bc671f7c5a6' const chainIds = { 'ethereum': 1, @@ -23,7 +22,7 @@ async function getCache(endpoint) { } async function getBlock(timestamp, chain, chainBlocks, undefinedOk = false) { - if (chainBlocks[chain] || (!env.HISTORICAL && undefinedOk)) { + if (chainBlocks[chain] || (!getEnv('HISTORICAL') && undefinedOk)) { return chainBlocks[chain] } else { if (chain === "celo") { @@ -74,7 +73,7 @@ async function covalentGetTokens(address, chain = 'ethereum') { async function _covalentGetTokens() { const { data: { items } - } = await get(`https://api.covalenthq.com/v1/${chainId}/address/${address}/balances_v2/?&key=${COVALENT_KEY}`) + } = await get(`https://api.covalenthq.com/v1/${chainId}/address/${address}/balances_v2/?&key=${getEnv('COVALENT_KEY')}`) let table = {} items .filter(i => +i.balance > 0) @@ -105,9 +104,9 @@ async function blockQuery(endpoint, query, { api, blockCatchupLimit = 500, }) { } } -async function graphFetchById({ endpoint, query, params = {}, options: { timestamp, chain, chainBlocks, useBlock = false } = {} }) { +async function graphFetchById({ endpoint, query, params = {}, api, options: { useBlock = false, safeBlockLimit = 100 } = {} }) { if (useBlock && !params.block) - params.block = await getBlock(timestamp, chain, chainBlocks) - 100 + params.block = await api.getBlock() - safeBlockLimit let data = [] let lastId = "" diff --git a/projects/helper/portedTokens.js b/projects/helper/portedTokens.js index 4f7e0d77d2..47fac2291b 100644 --- a/projects/helper/portedTokens.js +++ b/projects/helper/portedTokens.js @@ -140,10 +140,12 @@ async function getChainTransform(chain) { if ([...ibcChains, 'ton', 'defichain', 'waves'].includes(chain)) return chainStr if (chain === 'cardano' && addr === 'ADA') return 'coingecko:cardano' if (chain === 'near' && addr.endsWith('.near')) return chainStr + if (chain === 'tron' && addr.startsWith('T')) return chainStr + if (chain === 'stacks' && addr.startsWith('SP')) return chainStr if (chain === 'tezos' && addr.startsWith('KT1')) return chainStr if (chain === 'terra2' && addr.startsWith('terra1')) return chainStr if (chain === 'algorand' && /^\d+$/.test(addr)) return chainStr - if (addr.startsWith('0x') || ['solana'].includes(chain)) return chainStr + if (addr.startsWith('0x') || ['solana', 'kava'].includes(chain)) return chainStr return addr }; } @@ -190,8 +192,8 @@ async function transformDexBalances({ chain, data, balances = {}, restrictTokenR } function addTokens({ token0, token0Bal, token1, token1Bal }) { - const isCoreToken0 = coreTokens.has(token0) - const isCoreToken1 = coreTokens.has(token1) + const isCoreToken0 = coreTokens.has(token0.replace('ibc/', '')) + const isCoreToken1 = coreTokens.has(token1.replace('ibc/', '')) if ((isCoreToken0 && isCoreToken1) || (!isCoreToken0 && !isCoreToken1)) { sdk.util.sumSingleBalance(balances, token0, token0Bal) sdk.util.sumSingleBalance(balances, token1, token1Bal) diff --git a/projects/helper/solana.js b/projects/helper/solana.js index ee2edf1866..e7e2a77312 100644 --- a/projects/helper/solana.js +++ b/projects/helper/solana.js @@ -1,27 +1,30 @@ +const ADDRESSES = require('./coreAssets.json') const axios = require("axios"); const http = require('./http') -const cache = require('./cache') -const env = require('./env') +const { getEnv } = require('./env') const { transformBalances: transformBalancesOrig, transformDexBalances, } = require('./portedTokens.js') -const { tokens, getUniqueAddresses } = require('./tokenMapping') +const { getUniqueAddresses } = require('./tokenMapping') const { Connection, PublicKey, Keypair } = require("@solana/web3.js") const { AnchorProvider: Provider, Wallet, } = require("@project-serum/anchor"); const { sleep, sliceIntoChunks, log, } = require('./utils') const { decodeAccount } = require('./utils/solana/layout') const sdk = require('@defillama/sdk') -const tokenMapping = tokens -const blacklistedTokens = [ +const blacklistedTokens_default = [ 'CowKesoLUaHSbAMaUxJUj7eodHHsaLsS65cy8NFyRDGP', + '674PmuiDtgKx3uKuJ1B16f9m5L84eFvNwj3xDMvHcbo7', // $WOOD + 'SNSNkV9zfG5ZKWQs6x4hxvBRV6s8SqMfSGCtECDvdMd', // SNS + 'A7rqejP8LKN8syXMr4tvcKjs2iJ4WtZjXNs1e6qP3m9g', // ZION + '2HeykdKjzHKGm2LKHw8pDYwjKPiFEoXAz74dirhUgQvq', // SAO ] let connection, provider -const endpoint = env.SOLANA_RPC || "https://api.mainnet-beta.solana.com/" +const endpoint = () => getEnv('SOLANA_RPC') function getConnection() { - if (!connection) connection = new Connection(endpoint) + if (!connection) connection = new Connection(endpoint()) return connection } @@ -43,7 +46,7 @@ async function getSolBalances(accounts) { const tokenBalances = [] const chunks = sliceIntoChunks(accounts, 99) for (let chunk of chunks) { - const bal = await axios.post(endpoint, chunk.map(formBody)) + const bal = await axios.post(endpoint(), chunk.map(formBody)) tokenBalances.push(...bal.data) } return tokenBalances.reduce((a, i) => a + i.result.value, 0) @@ -56,7 +59,7 @@ async function getSolBalance(account) { const TOKEN_LIST_URL = "https://cdn.jsdelivr.net/gh/solana-labs/token-list@main/src/tokens/solana.tokenlist.json" async function getTokenSupply(token) { - const tokenSupply = await axios.post(endpoint, { + const tokenSupply = await axios.post(endpoint(), { jsonrpc: "2.0", id: 1, method: "getTokenSupply", @@ -68,7 +71,15 @@ async function getTokenSupply(token) { async function getGeckoSolTokens() { const tokens = await getTokenList() const tokenSet = new Set() - tokens.filter(i => i.extensions?.coingeckoId).forEach(i => tokenSet.add(i.address)) + tokens.filter(i => i.extensions?.coingeckoId && i.chainId === 101).forEach(i => tokenSet.add(i.address)) + return tokenSet +} + + +async function getValidGeckoSolTokens() { + const tokens = await getTokenList() + const tokenSet = new Set() + tokens.filter(i => i.extensions?.coingeckoId && i.chainId === 101 && !i.name.includes('(Wormhole v1)')).forEach(i => tokenSet.add(i.address)) return tokenSet } @@ -77,7 +88,7 @@ async function getTokenDecimals(tokens) { const res = {} const chunks = sliceIntoChunks(tokens, 99) for (const chunk of chunks) { - const tokenSupply = await axios.post(endpoint, calls(chunk)) + const tokenSupply = await axios.post(endpoint(), calls(chunk)) tokenSupply.data.forEach(({ id, result }) => res[id] = result.value.decimals) } return res @@ -96,7 +107,7 @@ function formTokenBalanceQuery(token, account) { } } async function getTokenBalance(token, account) { - const tokenBalance = await axios.post(endpoint, formTokenBalanceQuery(token, account)); + const tokenBalance = await axios.post(endpoint(), formTokenBalanceQuery(token, account)); return tokenBalance.data.result.value.reduce( (total, account) => total + account.account.data.parsed.info.tokenAmount.uiAmount, @@ -106,8 +117,11 @@ async function getTokenBalance(token, account) { async function getTokenBalances(tokensAndAccounts) { const body = tokensAndAccounts.map(([token, account]) => formTokenBalanceQuery(token, account)) - const tokenBalances = await axios.post(endpoint, body); + const tokenBalances = await axios.post(endpoint(), body); const balances = {} + tokenBalances.data.forEach((v, i )=> { + if (!v.result) console.log(v, tokensAndAccounts[i]) + } ) tokenBalances.data.forEach(({ result: { value } }) => { value.forEach(({ account: { data: { parsed: { info: { mint, tokenAmount: { amount } } } } } }) => { sdk.util.sumSingleBalance(balances, mint, amount) @@ -124,7 +138,7 @@ async function getTokenAccountBalances(tokenAccounts, { individual = false, chun const chunks = sliceIntoChunks(tokenAccounts, chunkSize) for (const chunk of chunks) { const body = chunk.map(formBody) - const data = await axios.post(endpoint, body); + const data = await axios.post(endpoint(), body); data.data.forEach(({ result: { value } }, i) => { if (!value || !value.data.parsed) { if (tokenAccounts[i].toString() === '11111111111111111111111111111111') { @@ -150,7 +164,7 @@ async function getTokenAccountBalances(tokenAccounts, { individual = false, chun async function getTokenAccountBalance(account) { const tokenBalance = await axios.post( - endpoint, + endpoint(), { jsonrpc: "2.0", id: 1, @@ -196,7 +210,7 @@ async function getMultipleAccountsRaw(accountsArray) { const res = [] const chunks = sliceIntoChunks(accountsArray, 99) for (const chunk of chunks) { - const accountsInfo = await axios.post(endpoint, { + const accountsInfo = await axios.post(endpoint(), { jsonrpc: "2.0", id: 1, method: "getMultipleAccounts", @@ -276,7 +290,7 @@ function exportDexTVL(DEX_PROGRAM_ID, getTokenAccounts) { } const coreTokens = await getGeckoSolTokens() - return transformDexBalances({ chain: 'solana', data, blacklistedTokens, coreTokens, }) + return transformDexBalances({ chain: 'solana', data, blacklistedTokens: blacklistedTokens_default, coreTokens, }) } async function _getTokenAccounts() { @@ -312,10 +326,12 @@ async function sumTokens2({ if (owner) tokensAndOwners = tokens.map(t => [t, owner]) if (owners.length) tokensAndOwners = tokens.map(t => owners.map(o => [t, o])).flat() } + blacklistedTokens.push(...blacklistedTokens_default) tokensAndOwners = tokensAndOwners.filter(([token]) => !blacklistedTokens.includes(token)) if (tokensAndOwners.length) { + tokensAndOwners = getUnique(tokensAndOwners) log('total balance queries: ', tokensAndOwners.length) const chunks = sliceIntoChunks(tokensAndOwners, 99) for (const chunk of chunks) { @@ -335,7 +351,7 @@ async function sumTokens2({ if (solOwners.length) { const solBalance = await getSolBalances(solOwners) - sdk.util.sumSingleBalance(balances, tokenMapping.solana, solBalance) + sdk.util.sumSingleBalance(balances, 'solana:' + ADDRESSES.solana.SOL, solBalance) } blacklistedTokens.forEach(i => delete balances['solana:'+i]) @@ -346,6 +362,14 @@ async function sumTokens2({ const tokenBalances = await getTokenBalances(tokensAndAccounts) return transformBalances({ tokenBalances, balances, }) } + + function getUnique(tokensAndOwners) { + const set = new Set() + tokensAndOwners.forEach(i => { + set.add(i.join('$')) + }) + return [...set].map(i => i.split('$')) + } } async function transformBalances({ tokenBalances, balances = {}, }) { @@ -367,8 +391,7 @@ function readBigUInt64LE(buffer, offset) { } module.exports = { - endpoint, - tokens, + endpoint: endpoint(), getTokenSupply, getTokenBalance, getTokenAccountBalance, @@ -391,4 +414,5 @@ module.exports = { getTokenList, readBigUInt64LE, decodeAccount, + getValidGeckoSolTokens, }; diff --git a/projects/helper/streamingHelper.js b/projects/helper/streamingHelper.js index 6d8f36a651..0b440f0b24 100644 --- a/projects/helper/streamingHelper.js +++ b/projects/helper/streamingHelper.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./coreAssets.json') let stableTokens = ['USDC', 'USDT', 'DAI', 'WETH', 'WFTM', 'WGLMR', 'WBNB', 'WAVAX', 'JCHF', 'JEUR', 'WBTC', 'AGDAI', 'JPYC', 'MIMATIC', 'WXDAI', 'EURS', 'JGBP', 'CNT', 'USD+', 'AMUSDC', 'RAI', 'SLP', 'SDAM3CRV', 'AMDAI', 'TUSD', 'RAI', 'UNI-V2', 'SLP', 'ScUSDC', 'cUSDC', 'iDAI', 'FTM', 'yUSDC', 'cDAI', 'MATIC', 'UST', 'stETH', 'USD', 'mUSD', 'iUSDC', 'aDAI', 'AGEUR', 'BCT', 'WMATIC', @@ -15,68 +16,68 @@ function isWhitelistedToken(symbol, address, isVesting) { const stableTokenAddresses = [ // native token - '0x0000000000000000000000000000000000000000', + ADDRESSES.null, // metis - '0xEA32A96608495e54156Ae48931A7c20f0dcc1a21', - '0x12D84f1CFe870cA9C9dF9785f8954341d7fbb249', + ADDRESSES.metis.m_USDC, + ADDRESSES.metis.BUSD, // avax - '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', - '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', - '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', + ADDRESSES.avax.DAI, + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.USDC, '0x0f577433Bf59560Ef2a79c124E9Ff99fCa258948', // xdai - '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', - '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', + ADDRESSES.xdai.WXDAI, + ADDRESSES.xdai.USDT, '0x91f8490eC27cbB1b2FaEdd29c2eC23011d7355FB', // fantom - '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E', + ADDRESSES.fantom.DAI, '0x6Fc9383486c163fA48becdEC79d6058f984f62cA', - '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', - '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.WFTM, // ethereum - '0x6B175474E89094C44Da98b954EedeAC495271d0F', - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - '0xdAC17F958D2ee523a2206206994597C13D831ec7', - '0x853d955aCEf822Db058eb8505911ED77F175b99e', + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.FRAX, '0xe2f2a5C287993345a840Db3B0845fbC70f5935a5', - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', + ADDRESSES.ethereum.WETH, // polygon - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', - '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.USDC, '0xC2DbaAEA2EfA47EBda3E572aa0e55B742E408BF6', - '0x0000000000000000000000000000000000001010', + ADDRESSES.polygon.WMATIC_1, '0x4198A31A98dB56b48AEBa6103F7C23679B9794F3', // bsc '0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', - '0x55d398326f99059fF775485246999027B3197955', - '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.USDC, // arbitrum - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + ADDRESSES.optimism.DAI, + ADDRESSES.arbitrum.WETH, '0x662d0f9Ff837A51cF89A1FE7E0882a906dAC08a3', - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + ADDRESSES.arbitrum.USDC, '0x64343594Ab9b56e99087BfA6F2335Db24c2d1F17', - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + ADDRESSES.arbitrum.USDT, // optimism - '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + ADDRESSES.optimism.DAI, + ADDRESSES.optimism.USDC, // meter - '0x6ABAEDAB0Ba368F1DF52D857f24154CC76c8c972', - '0xD86e243FC0007e6226B07c9A50C9d70D78299EB5', - '0x24aA189DfAa76c671c279262F94434770F557c35', - '0x5Fa41671c48e3C951AfC30816947126CCC8C162e', + ADDRESSES.meter.MTR, + ADDRESSES.meter.USDC_eth, + ADDRESSES.meter.BUSD_bsc, + ADDRESSES.meter.USDT_eth, '0x687A6294D0D6d63e751A059bf1ca68E4AE7B13E2', ].map(i => i.toLowerCase()) diff --git a/projects/helper/sumTokens.js b/projects/helper/sumTokens.js index 24dedab24f..79e40ad52c 100644 --- a/projects/helper/sumTokens.js +++ b/projects/helper/sumTokens.js @@ -4,8 +4,8 @@ const { sumTokens2: sumTokensEVM, nullAddress, } = require('./unwrapLPs') const sdk = require('@defillama/sdk') const helpers = { - "tron": require("./chain/tron"), "eos": require("./chain/eos"), + "ergo": require("./chain/ergo"), "elrond": require("./chain/elrond"), "cardano":require("./chain/cardano"), "algorand":require("./chain/algorand"), @@ -45,7 +45,10 @@ function sumTokensExport(options) { } async function sumTokens(options) { - let { chain, owner, owners = [], tokens = [], tokensAndOwners = [], blacklistedTokens = [], balances = {}, token, } = options + let { chain, owner, owners = [], tokens = [], tokensAndOwners = [], blacklistedTokens = [], balances = {}, token, api } = options + if (api && !specialChains.includes(chain)) { + chain = api.chain + } if (token) tokens = [token] if (owner) owners = [owner] diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index f71239c23e..4689c04b1c 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -1,5 +1,8 @@ -const coreAssets = require('./coreAssets.json') -const nullAddress = '0x0000000000000000000000000000000000000000' +let coreAssets = require('./coreAssets.json') +const ADDRESSES = coreAssets +const nullAddress = ADDRESSES.null + +coreAssets = JSON.parse(JSON.stringify(coreAssets)) // Multichain bridge info: https://bridgeapi.anyswap.exchange/v2/serverInfo/all // IBC info - https://github.com/PulsarDefi/IBC-Cosmos/blob/main/ibc_data.json @@ -13,45 +16,25 @@ const nullAddress = '0x0000000000000000000000000000000000000000' // carbon: https://api-insights.carbon.network/info/denom_gecko_map // orbit brige: https://bridge.orbitchain.io/open/v1/api/monitor/rawTokenList -const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'stargaze', 'umee', 'orai', 'persistence', ] -const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks'] - -const tokens = { - null: nullAddress, - aave: 'ethereum:0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', - matic: 'ethereum:0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0', - bat: 'ethereum:0x0d8775f648430679a709e98d2b0cb6250d2887ef', - reth: 'ethereum:0xae78736cd615f374d3085123a210448e74fc6393', - steth: 'ethereum:0xae7ab96520de3a18e5e111b5eaab095312d7fe84', - solana: 'solana:So11111111111111111111111111111111111111112', - dai: 'ethereum:0x6b175474e89094c44da98b954eedeac495271d0f', - usdt: 'ethereum:0xdac17f958d2ee523a2206206994597c13d831ec7', - usdc: 'ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - ethereum: 'ethereum:' + nullAddress, - weth: 'ethereum:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - busd: 'bsc:0xe9e7cea3dedca5984780bafc599bd69add087d56', - bsc: 'bsc:' + nullAddress, - bnb: 'bsc:0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', - link: 'ethereum:0x514910771af9ca656af840dff83e8264ecf986ca', - wbtc: 'ethereum:0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', - wsteth: 'ethereum:0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', -} -const tokensBare = {} -for (const [label, value] of Object.entries(tokens)) - tokensBare[label] = value.split(':')[1] +const ibcChains = ['ibc', 'terra', 'terra2', 'crescent', 'osmosis', 'kujira', 'stargaze', 'juno', 'injective', 'cosmos', 'comdex', 'stargaze', 'umee', 'orai', 'persistence', 'fxcore', 'neutron', 'quasar', 'chihuahua',] +const caseSensitiveChains = [...ibcChains, 'solana', 'tezos', 'ton', 'algorand', 'aptos', 'near', 'bitcoin', 'waves', 'tron', 'litecoin', 'polkadot', 'ripple', 'elrond', 'cardano', 'stacks', 'sui', 'ergo',] const distressedAssts = new Set(Object.values({ CRK: '0x065de42e28e42d90c2052a1b49e7f83806af0e1f', - aBNBc: '0xe85afccdafbe7f2b096f268e31cce3da8da2990a', - aBNBb: '0xbb1aa6e59e5163d8722a122cd66eba614b59df0d', + aBNBc: ADDRESSES.bsc.ankrBNB, + aBNBb: ADDRESSES.bsc.aBNBb, XRPC: '0xd4ca5c2aff1eefb0bea9e9eab16f88db2990c183', }).map(i => i.toLowerCase())) const transformTokens = { + ethereum: { + '0xe0b469cb3eda0ece9e425cfeda4df986a55ea9f8': ADDRESSES.ethereum.WETH, + [ADDRESSES.ethereum.vlCVX]: ADDRESSES.ethereum.CVX, + }, // Sample Code // cronos: { // "0x065de42e28e42d90c2052a1b49e7f83806af0e1f": "0x123", // CRK token is mispriced - // "0x87EFB3ec1576Dec8ED47e58B832bEdCd86eE186e": "0x0000000000085d4780B73119b644AE5ecd22b376", + // [ADDRESSES.cronos.TUSD]: ADDRESSES.ethereum.TUSD, // }, } const ibcMappings = { @@ -62,12 +45,15 @@ const ibcMappings = { const fixBalancesTokens = { // Sample Code - // arbitrum_nova: { - // [nullAddress]: { coingeckoId: "ethereum", decimals: 18 }, - // '0x722E8BdD2ce80A4422E880164f2079488e115365': { coingeckoId: "ethereum", decimals: 18 }, - // '0x52484e1ab2e2b22420a25c20fa49e173a26202cd': { coingeckoId: "tether", decimals: 6 }, - // '0x750ba8b76187092b0d1e87e28daaf484d1b5273b': { coingeckoId: "usd-coin", decimals: 6 }, - // }, + ozone: { + // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain + }, + telos: { + '0xdc2393dc10734bf153153038943a5deb42b209cd': { coingeckoId: "telos", decimals: 18 }, + }, + base: { + '0x4200000000000000000000000000000000000006': { coingeckoId: "ethereum", decimals: 18 }, + }, } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) @@ -93,7 +79,7 @@ for (const [chain, mapping] of Object.entries(fixBalancesTokens)) normalizeMapping(mapping, chain) for (const [chain, mapping] of Object.entries(coreAssets)) - coreAssets[chain] = mapping.map(i => stripTokenHeader(i, chain)) + coreAssets[chain] = Object.values(mapping).map(i => stripTokenHeader(i, chain)) function getCoreAssets(chain = 'ethereum') { const tokens = [ @@ -101,8 +87,9 @@ function getCoreAssets(chain = 'ethereum') { Object.keys(transformTokens[chain] || {}), Object.keys(fixBalancesTokens[chain] || {}), ].flat() - const addresses = getUniqueAddresses(tokens, chain) + let addresses = getUniqueAddresses(tokens, chain) if (ibcChains.includes(chain)) addresses.push(...coreAssets.ibc) + if (anyswapTokenBlacklist[chain]) addresses = addresses.filter(i => !anyswapTokenBlacklist[chain].includes(i)) return addresses } @@ -133,10 +120,96 @@ const eulerTokens = [ "0xbd1bd5c956684f7eb79da40f582cbe1373a1d593", ] +const anyswapTokenBlacklist = { + ethereum: ['0x4e15361fd6b4bb609fa63c81a2be19d873717870'], + fantom: [ + '0x95bf7e307bc1ab0ba38ae10fc27084bc36fcd605', + '0x049d68029688eabf473097a2fc38ef61633a3c7a', + '0x04068da6c83afcfa0e13ba15a6696662335d5b75', + '0x049d68029688eabf473097a2fc38ef61633a3c7a', + '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e', + '0x82f0b8b456c1a451378467398982d4834b6829c1', + '0x7f620d7d0b3479b1655cefb1b0bc67fb0ef4e443' + ], + harmony: ['0xb12c13e66ade1f72f71834f2fc5082db8c091358'], + kcc: [ + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', + '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c', + '0xc9baa8cfdde8e328787e29b4b078abf2dadc2055', + '0x218c3c3d49d0e7b37aff0d8bb079de36ae61a4c0' + ], + moonriver: [ + '0xb44a9b6905af7c801311e8f4e76932ee959c663c', + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', + '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c' + ], + arbitrum: ['0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a'], + shiden: [ + '0xfa9343c3897324496a05fc75abed6bac29f8a40f', + '0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b', + '0x735abe48e8782948a37c7765ecb76b98cde97b0f', + '0x765277eebeca2e31912c9946eae1021199b39c61', + '0x332730a4f6e03d9c55829435f10360e13cfa41ff', + '0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a' + ], + telos: [ + '0xfa9343c3897324496a05fc75abed6bac29f8a40f', + '0xf390830df829cf22c53c8840554b98eafc5dcbc2', + '0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b', + '0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73' + ], + syscoin: [ + '0x2bf9b864cdc97b08b6d79ad4663e71b8ab65c45c', + '0x7c598c96d02398d89fbcb9d41eab3df0c16f227d', + '0x922d641a426dcffaef11680e5358f34d97d112e1' + ], + boba: ['0x461d52769884ca6235b685ef2040f47d30c94eb5'], + velas: [ + '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c', + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d' + ], + dogechain: [ + '0xb44a9b6905af7c801311e8f4e76932ee959c663c', + '0x332730a4f6e03d9c55829435f10360e13cfa41ff', + '0xdc42728b0ea910349ed3c6e1c9dc06b5fb591f98' + ], + kava: [ + '0xfa9343c3897324496a05fc75abed6bac29f8a40f', + '0xb44a9b6905af7c801311e8f4e76932ee959c663c', + '0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b', + '0x765277eebeca2e31912c9946eae1021199b39c61', + '0x7c598c96d02398d89fbcb9d41eab3df0c16f227d', + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', + '0x332730a4f6e03d9c55829435f10360e13cfa41ff' + ], + step: [ + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', + '0xfa9343c3897324496a05fc75abed6bac29f8a40f', + '0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b', + '0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73' + ], + godwoken_v1: [ + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', + '0x765277eebeca2e31912c9946eae1021199b39c61', + '0xfa9343c3897324496a05fc75abed6bac29f8a40f', + '0xb44a9b6905af7c801311e8f4e76932ee959c663c' + ], + milkomeda_a1: ['0xfa9343c3897324496a05fc75abed6bac29f8a40f'], + wemix: [ + '0x461d52769884ca6235b685ef2040f47d30c94eb5', + '0x765277eebeca2e31912c9946eae1021199b39c61', + '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d' + ], + eos_evm: [ + '0x922d641a426dcffaef11680e5358f34d97d112e1', + '0x765277eebeca2e31912c9946eae1021199b39c61', + '0xfa9343c3897324496a05fc75abed6bac29f8a40f', + '0xefaeee334f0fd1712f9a8cc375f427d9cdd40d73' + ] +} + module.exports = { nullAddress, - tokens, - tokensBare, caseSensitiveChains, transformTokens, fixBalancesTokens, diff --git a/projects/helper/treasury.js b/projects/helper/treasury.js index 509f75ed0b..227afc1df5 100644 --- a/projects/helper/treasury.js +++ b/projects/helper/treasury.js @@ -8,11 +8,11 @@ function treasuryExports(config) { const chains = Object.keys(config) const exportObj = { } chains.forEach(chain => { - let { ownTokenOwners = [], ownTokens, owners = [], fetchTokens = false, tokens = [] } = config[chain] + let { ownTokenOwners = [], ownTokens = [], owners = [], fetchTokens = false, tokens = [], blacklistedTokens = [] } = config[chain] if (chain === 'solana') config[chain].solOwners = owners if (chain === 'solana') config[chain].solOwners = owners const tvlConfig = { ...config[chain] } - tvlConfig.blacklistedTokens = ownTokens + tvlConfig.blacklistedTokens = [...ownTokens, ...blacklistedTokens] if(fetchTokens === true){ exportObj[chain] = { tvl: async (_, _b, _cb, { api }) => { const tokens = await Promise.all(owners.map(address=>covalentGetTokens(address, chain))) @@ -27,9 +27,9 @@ function treasuryExports(config) { exportObj[chain] = { tvl: sumTokensExport(tvlConfig) } } - if (ownTokens) { + if (ownTokens.length > 0) { const { solOwners, ...otherOptions } = config[chain] - const options = { ...otherOptions, owners: [...owners, ...ownTokenOwners], tokens: ownTokens, chain, resolveUniV3: false, } + const options = { ...otherOptions, owners: [...owners, ...ownTokenOwners], tokens: ownTokens, chain, uniV3WhitelistedTokens: ownTokens} exportObj[chain].ownTokens = sumTokensExport(options) } }) @@ -51,8 +51,37 @@ async function getComplexTreasury(owners){ return sum } +function ohmStaking(exports) { + const dummyTvl = () => ({}) + const newExports = {} + Object.entries(exports).forEach(([chain, value]) => { + if (typeof value === 'object' && typeof value.tvl === 'function') { + newExports[chain] = { ...value, tvl: dummyTvl} + } else { + newExports[chain] = value + } + }) + return newExports +} + +function ohmTreasury(exports) { + const dummyTvl = () => ({}) + const newExports = {} + Object.entries(exports).forEach(([chain, value]) => { + if (typeof value === 'object' && typeof value.staking === 'function') { + newExports[chain] = { ...value,} + delete newExports[chain].staking + } else { + newExports[chain] = value + } + }) + return newExports +} + module.exports = { nullAddress, treasuryExports, - getComplexTreasury + getComplexTreasury, + ohmTreasury, + ohmStaking, } diff --git a/projects/helper/uniswapV3.js b/projects/helper/uniswapV3.js index c99843f972..1075b062b8 100644 --- a/projects/helper/uniswapV3.js +++ b/projects/helper/uniswapV3.js @@ -16,7 +16,7 @@ function uniV3Export(config) { const exports = {} Object.keys(config).forEach(chain => { - let { factory: target, fromBlock, topics, eventAbi, isAlgebra } = config[chain] + let { factory: target, fromBlock, topics, eventAbi, isAlgebra, blacklistedTokens = [] } = config[chain] if (!topics) topics = isAlgebra ? algebraConfig.topics : uniswapConfig.topics if (!eventAbi) eventAbi = isAlgebra ? algebraConfig.eventAbi : uniswapConfig.eventAbi @@ -31,7 +31,7 @@ function uniV3Export(config) { onlyArgs: true, }) - return sumTokens2({ api, ownerTokens: logs.map(i => [[i.token0, i.token1], i.pool]), }) + return sumTokens2({ api, ownerTokens: logs.map(i => [[i.token0, i.token1], i.pool]), blacklistedTokens, permitFailure: logs.length > 5000 }) } } }) diff --git a/projects/helper/unknownTokens.js b/projects/helper/unknownTokens.js index c7a17dabf2..8eb44efb5b 100644 --- a/projects/helper/unknownTokens.js +++ b/projects/helper/unknownTokens.js @@ -93,9 +93,9 @@ function pool2({ stakingContract, lpToken, chain, transformAddress, coreAssets = function sumTokensExport({ tokensAndOwners = [], coreAssets = [], owner, tokens, restrictTokenRatio, blacklist = [], skipConversion = false, onlyLPs, minLPRatio, - log_coreAssetPrices = [], log_minTokenValue = 1e6, owners = [], lps = [], useDefaultCoreAssets = false, + log_coreAssetPrices = [], log_minTokenValue = 1e6, owners = [], lps = [], useDefaultCoreAssets = false, abis, }) { - return (_, _b, _cb, { api }) => sumUnknownTokens({ api, tokensAndOwners, onlyLPs, minLPRatio, coreAssets, owner, tokens, restrictTokenRatio, blacklist, skipConversion, log_coreAssetPrices, log_minTokenValue, owners, lps, useDefaultCoreAssets, }) + return (_, _b, _cb, { api }) => sumUnknownTokens({ api, tokensAndOwners, onlyLPs, minLPRatio, coreAssets, owner, tokens, restrictTokenRatio, blacklist, skipConversion, log_coreAssetPrices, log_minTokenValue, owners, lps, useDefaultCoreAssets, abis, }) } function staking({ tokensAndOwners = [], diff --git a/projects/helper/unwrapLPs.js b/projects/helper/unwrapLPs.js index 75112e364e..ffe169255a 100644 --- a/projects/helper/unwrapLPs.js +++ b/projects/helper/unwrapLPs.js @@ -1,15 +1,18 @@ +const ADDRESSES = require('./coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const token0 = 'address:token0' const symbol = 'string:symbol' -const { getPoolTokens, getPoolId, bPool, getCurrentTokens, getVault: getBalancerVault, } = require('./abis/balancer.json') +const { getPoolTokens, getPoolId, bPool, getCurrentTokens, } = require('./abis/balancer.json') const { requery } = require('./requery') const { getChainTransform, getFixBalances } = require('./portedTokens') +const { getUniqueAddresses, normalizeAddress } = require('./tokenMapping') const creamAbi = require('./abis/cream.json') -const { isLP, getUniqueAddresses, log, } = require('./utils') +const { isLP, log, } = require('./utils') const { sumArtBlocks, whitelistedNFTs, } = require('./nft') const wildCreditABI = require('../wildcredit/abi.json'); -const { covalentGetTokens } = require("./http"); +const { covalentGetTokens, get } = require("./http"); +const { sliceIntoChunks } = require('@defillama/sdk/build/util'); const lpReservesAbi = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)' const lpSuppliesAbi = "uint256:totalSupply" @@ -186,7 +189,9 @@ async function sumLPWithOnlyOneTokenOtherThanKnown(balances, lpToken, owner, tok } await sumLPWithOnlyOneToken(balances, lpToken, owner, listedToken, block, chain, transformAddress) } -async function unwrapUniswapV3NFTs({ balances = {}, nftsAndOwners = [], block, chain = 'ethereum', transformAddress, owner, nftAddress, owners }) { + +const PANCAKE_NFT_ADDRESS = '0x46A15B0b27311cedF172AB29E4f4766fbE7F4364' +async function unwrapUniswapV3NFTs({ balances = {}, nftsAndOwners = [], block, chain = 'ethereum', owner, nftAddress, owners, blacklistedTokens = [], whitelistedTokens = [], }) { if (!nftsAndOwners.length) { if (!nftAddress) switch (chain) { @@ -194,22 +199,26 @@ async function unwrapUniswapV3NFTs({ balances = {}, nftsAndOwners = [], block, c case 'polygon': case 'optimism': case 'arbitrum': nftAddress = '0xC36442b4a4522E871399CD717aBDD847Ab11FE88'; break; - case 'bsc': nftAddress = '0x7b8a01b39d58278b5de7e48c8449c9f4f5170613'; break; + case 'bsc': nftAddress = [PANCAKE_NFT_ADDRESS, '0x7b8a01b39d58278b5de7e48c8449c9f4f5170613']; break; + case 'evmos': nftAddress = '0x5fe5daaa011673289847da4f76d63246ddb2965d'; break; default: throw new Error('missing default uniswap nft address') } if ((!owners || !owners.length) && owner) owners = [owner] - owners = getUniqueAddresses(owners) - nftsAndOwners = owners.map(o => [nftAddress, o]) + owners = getUniqueAddresses(owners, chain) + if (Array.isArray(nftAddress)) + nftsAndOwners = nftAddress.map(nft => owners.map(o => [nft, o])).flat() + else + nftsAndOwners = owners.map(o => [nftAddress, o]) } - await Promise.all(nftsAndOwners.map(([nftAddress, owner]) => unwrapUniswapV3NFT({ balances, owner, nftAddress, block, chain, transformAddress }))) + await Promise.all(nftsAndOwners.map(([nftAddress, owner]) => unwrapUniswapV3NFT({ balances, owner, nftAddress, block, chain, blacklistedTokens, whitelistedTokens, }))) return balances } -async function unwrapUniswapV3NFT({ balances, owner, nftAddress, block, chain = 'ethereum', transformAddress }) { - if (!transformAddress) - transformAddress = await getChainTransform(chain) +async function unwrapUniswapV3NFT({ balances, owner, nftAddress, block, chain = 'ethereum', blacklistedTokens = [], whitelistedTokens = [], }) { + blacklistedTokens = getUniqueAddresses(blacklistedTokens, chain) + whitelistedTokens = getUniqueAddresses(whitelistedTokens, chain) const nftPositions = (await sdk.api.erc20.balanceOf({ target: nftAddress, owner, block, chain })).output const factory = (await sdk.api.abi.call({ target: nftAddress, abi: wildCreditABI.factory, block, chain })).output @@ -274,11 +283,18 @@ async function unwrapUniswapV3NFT({ balances, owner, nftAddress, block, chain = amount1 = liquidity * (sb - sa) } - sdk.util.sumSingleBalance(balances, transformAddress(token0), new BigNumber(amount0).toFixed(0)) - sdk.util.sumSingleBalance(balances, transformAddress(token1), new BigNumber(amount1).toFixed(0)) + addToken({ balances, token: token0, amount: amount0, chain, blacklistedTokens, whitelistedTokens }) + addToken({ balances, token: token1, amount: amount1, chain, blacklistedTokens, whitelistedTokens }) } } +function addToken({ balances, token, amount, chain, blacklistedTokens = [], whitelistedTokens = [] }) { + const addr = normalizeAddress(token, chain) + if (blacklistedTokens.length && blacklistedTokens.includes(addr)) return; + if (whitelistedTokens.length && !whitelistedTokens.includes(addr)) return; + sdk.util.sumSingleBalance(balances, token, amount, chain) +} + /* tokens [ [token, owner, isLP] - eg ["0xaaa", "0xbbb", true] @@ -359,32 +375,42 @@ async function sumBalancerLps(balances, tokensAndOwners, block, chain, transform }) } -const nullAddress = '0x0000000000000000000000000000000000000000' +async function getTrxBalance(account) { + const data = await get('https://apilist.tronscan.org/api/account?address=' + account) + return data.balance + (data.totalFrozen || 0) +} + +const nullAddress = ADDRESSES.null const gasTokens = [nullAddress, '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'] /* tokensAndOwners [ [token, owner] - eg ["0xaaa", "0xbbb"] ] */ -async function sumTokens(balances = {}, tokensAndOwners, block, chain = "ethereum", transformAddress, { resolveLP = false, unwrapAll = false, blacklistedLPs = [], skipFixBalances = false, abis = {}, ignoreFailed = false } = {}) { +async function sumTokens(balances = {}, tokensAndOwners, block, chain = "ethereum", transformAddress, { resolveLP = false, unwrapAll = false, blacklistedLPs = [], skipFixBalances = false, abis = {}, permitFailure = false } = {}) { if (!transformAddress) transformAddress = await getChainTransform(chain) let ethBalanceInputs = [] tokensAndOwners = tokensAndOwners.filter(i => { - const token = i[0].toLowerCase() + const token = normalizeAddress(i[0], chain) if (token !== nullAddress && !gasTokens.includes(token)) return true ethBalanceInputs.push(i[1]) return false }) - ethBalanceInputs = getUniqueAddresses(ethBalanceInputs) + ethBalanceInputs = getUniqueAddresses(ethBalanceInputs, chain) if (ethBalanceInputs.length) { - const { output: ethBalances } = await sdk.api.eth.getBalances({ targets: ethBalanceInputs, chain, block }) - ethBalances.forEach(({ balance }) => sdk.util.sumSingleBalance(balances, transformAddress(nullAddress), balance)) + if (chain === "tron") { + const ethBalances = await Promise.all(ethBalanceInputs.map(getTrxBalance)) + ethBalances.forEach(balance => sdk.util.sumSingleBalance(balances, transformAddress(nullAddress), balance)) + } else { + const { output: ethBalances } = await sdk.api.eth.getBalances({ targets: ethBalanceInputs, chain, block }) + ethBalances.forEach(({ balance }) => sdk.util.sumSingleBalance(balances, transformAddress(nullAddress), balance)) + } } const balanceOfTokens = await sdk.api.abi.multiCall({ @@ -392,6 +418,7 @@ async function sumTokens(balances = {}, tokensAndOwners, block, chain = "ethereu target: t[0], params: t[1] })), + permitFailure, abi: 'erc20:balanceOf', block, chain @@ -401,7 +428,7 @@ async function sumTokens(balances = {}, tokensAndOwners, block, chain = "ethereu let balance = BigNumber(result.output) if (result.output === null || isNaN(+result.output)) { sdk.log('failed for', token, balance, balances[token]) - if (ignoreFailed) balance = BigNumber(0) + if (permitFailure) balance = BigNumber(0) else throw new Error('Unable to fetch balance for: ' + result.input.target) } balances[token] = BigNumber(balances[token] || 0).plus(balance).toFixed(0) @@ -498,6 +525,26 @@ async function genericUnwrapCvx(balances, holder, cvx_BaseRewardPool, block, cha return balances } +async function genericUnwrapCvxDeposit({ api, owner, token, balances }) { + if (!balances) balances = await api.getBalances() + const [bal, cToken] = await api.batchCall([ + { target: token, params: owner, abi: 'erc20:balanceOf' }, + { target: token, abi: 'address:curveToken' }, + ]) + sdk.util.sumSingleBalance(balances, cToken, bal, api.chain) + return balances +} + +async function genericUnwrapCvxRewardPool({ api, owner, pool, balances }) { + if (!balances) balances = await api.getBalances() + const [bal, cToken] = await api.batchCall([ + { target: pool, params: owner, abi: 'erc20:balanceOf' }, + { target: pool, abi: 'address:stakingToken' }, + ]) + sdk.util.sumSingleBalance(balances, cToken, bal, api.chain) + return balances +} + async function unwrapLPsAuto({ api, balances, block, chain = "ethereum", transformAddress, excludePool2 = false, onlyPool2 = false, pool2Tokens = [], blacklistedLPs = [], abis = {}, }) { if (api) { chain = api.chain ?? chain @@ -624,9 +671,12 @@ async function sumTokens2({ abis = {}, api, resolveUniV3 = false, + uniV3WhitelistedTokens = [], + uniV3nftsAndOwners = [], resolveArtBlocks = false, resolveNFTs = false, - ignoreFailed = false, + permitFailure = false, + fetchCoValentTokens = false, }) { if (api) { chain = api.chain ?? chain @@ -641,6 +691,14 @@ async function sumTokens2({ await sumArtBlocks({ balances, api, owner, owners, }) } + if (fetchCoValentTokens) { + if (!api) throw new Error('Missing arg: api') + if (!owners || !owners.length) owners = [owner] + const cTokens = (await Promise.all(owners.map(i => covalentGetTokens(i, api.chain)))).flat() + tokens = [...cTokens, ...tokens] + console.log('cTokens', cTokens.length) + } + if (resolveNFTs) { if (!api) throw new Error('Missing arg: api') if (!owners || !owners.length) owners = [owner] @@ -649,8 +707,8 @@ async function sumTokens2({ } if (!tokensAndOwners.length) { - tokens = getUniqueAddresses(tokens) - owners = getUniqueAddresses(owners) + tokens = getUniqueAddresses(tokens, chain) + owners = getUniqueAddresses(owners, chain) if (owner) tokensAndOwners = tokens.map(t => [t, owner]) if (owners.length) tokensAndOwners = tokens.map(t => owners.map(o => [t, o])).flat() if (ownerTokens.length) { @@ -666,15 +724,22 @@ async function sumTokens2({ } } - if (resolveUniV3) - await unwrapUniswapV3NFTs({ balances, chain, block, owner, owners, }) + if (resolveUniV3 || uniV3nftsAndOwners.length) + await unwrapUniswapV3NFTs({ balances, chain, block, owner, owners, blacklistedTokens, whitelistedTokens: uniV3WhitelistedTokens, nftsAndOwners: uniV3nftsAndOwners, }) - blacklistedTokens = blacklistedTokens.map(t => t.toLowerCase()) - tokensAndOwners = tokensAndOwners.map(([t, o]) => [t.toLowerCase(), o]).filter(([token]) => !blacklistedTokens.includes(token)) + blacklistedTokens = blacklistedTokens.map(t => normalizeAddress(t, chain)) + tokensAndOwners = tokensAndOwners.map(([t, o]) => [normalizeAddress(t, chain), o]).filter(([token]) => !blacklistedTokens.includes(token)) tokensAndOwners = getUniqueToA(tokensAndOwners) log(chain, 'summing tokens', tokensAndOwners.length) - await sumTokens(balances, tokensAndOwners, block, chain, transformAddress, { resolveLP, unwrapAll, blacklistedLPs, skipFixBalances: true, abis, ignoreFailed, }) + if (chain === 'tron') { + const tokensAndOwnersChunks = sliceIntoChunks(tokensAndOwners, 3) + for (const toa of tokensAndOwnersChunks) { + await sumTokens(balances, toa, block, chain, transformAddress, { resolveLP, unwrapAll, blacklistedLPs, skipFixBalances: true, abis, permitFailure, }) + } + } else { + await sumTokens(balances, tokensAndOwners, block, chain, transformAddress, { resolveLP, unwrapAll, blacklistedLPs, skipFixBalances: true, abis, permitFailure, }) + } if (!skipFixBalances) { const fixBalances = await getFixBalances(chain) @@ -685,48 +750,98 @@ async function sumTokens2({ function getUniqueToA(toa) { toa = toa.map(i => i.join('-')) - return getUniqueAddresses(toa).map(i => i.split('-')) + return getUniqueAddresses(toa, chain).map(i => i.split('-')) } } -function sumTokensExport({ balances, tokensAndOwners, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveArtBlocks, resolveNFTs, }) { - return async (_, _b, _cb, { api }) => sumTokens2({ api, balances, tokensAndOwners, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveArtBlocks, resolveNFTs, }) +function sumTokensExport({ balances, tokensAndOwners, tokensAndOwners2, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveArtBlocks, resolveNFTs, fetchCoValentTokens, ...args }) { + return async (_, _b, _cb, { api }) => sumTokens2({ api, balances, tokensAndOwners, tokensAndOwners2, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveArtBlocks, resolveNFTs, fetchCoValentTokens, ...args,}) } -async function unwrapBalancerToken({ chain, block, balancerToken, owner, balances = {}, isBPool = false, }) { - const { output: lpTokens } = await sdk.api.erc20.balanceOf({ target: balancerToken, owner, chain, block, }) - const { output: lpSupply } = await sdk.api.erc20.totalSupply({ target: balancerToken, chain, block, }) - let underlyingPool = balancerToken - if (!isBPool) - underlyingPool = await sdk.api2.abi.call({ target: balancerToken, abi: bPool, chain, block, }) - const { output: underlyingTokens } = await sdk.api.abi.call({ target: underlyingPool, abi: getCurrentTokens, chain, block, }) - +async function unwrapBalancerToken({ api, chain, block, balancerToken, owner, balances = {}, isBPool = false, isV2 = true }) { + if (!api) { + api = new sdk.ChainApi({ chain, block, }) + } + const [lpSupply, lpTokens] = await api.batchCall([ + { abi: 'erc20:totalSupply', target: balancerToken }, + { abi: 'erc20:balanceOf', target: balancerToken, params: owner }, + ]) + if (+lpTokens === 0) return balances const ratio = lpTokens / lpSupply - const tempBalances = await sumTokens2({ owner: underlyingPool, tokens: underlyingTokens, chain, block, }) - for (const [token, value] of Object.entries(tempBalances)) { - const newValue = BigNumber(value * ratio).toFixed(0) - sdk.util.sumSingleBalance(balances, token, newValue) + + if (isV2) { + const poolId = await api.call({ abi: 'function getPoolId() view returns (bytes32)', target: balancerToken }) + const vault = await api.call({ abi: 'address:getVault', target: balancerToken }) + const [tokens, bals] = await api.call({ abi: 'function getPoolTokens(bytes32) view returns (address[], uint256[],uint256)', target: vault, params: poolId }) + tokens.forEach((v, i) => { + sdk.util.sumSingleBalance(balances, v, bals[i] * ratio, api.chain) + }) + } else { + let underlyingPool = balancerToken + if (!isBPool) + underlyingPool = await api.call({ target: balancerToken, abi: bPool, }) + + const underlyingTokens = await api.call({ target: underlyingPool, abi: getCurrentTokens, }) + + const tempBalances = await sumTokens2({ owner: underlyingPool, tokens: underlyingTokens, api, }) + for (const [token, value] of Object.entries(tempBalances)) { + const newValue = BigNumber(value * ratio).toFixed(0) + sdk.util.sumSingleBalance(balances, token, newValue) + } } return balances } -async function unwrapBalancerPool({ chain = 'ethereum', block, balancerPool, owner, balances = {} }) { - const { output: vault } = await sdk.api.abi.call({ target: balancerPool, abi: getBalancerVault, chain, block, }) - const { output: poolId } = await sdk.api.abi.call({ target: balancerPool, abi: getPoolId, chain, block, }) - const { output: poolTokens } = await sdk.api.abi.call({ target: vault, params: [poolId], abi: getPoolTokens, chain, block, }) - const transform = await getChainTransform(chain) +async function unwrapMakerPositions({ api, blacklistedTokens = [], whitelistedTokens = [], owner, skipDebt = false }) { + const vaultIds = [] + const chain = api.chain + if (chain && chain !== 'ethereum') throw new Error('Maker protocol not found in chain') + blacklistedTokens = getUniqueAddresses(blacklistedTokens, chain) + whitelistedTokens = getUniqueAddresses(whitelistedTokens, chain) + // taken from https://maker.defiexplore.com/api/users/0x849d52316331967b6ff1198e5e32a0eb168d039d?orderTx=DESC&order=DESC&sortBy=debt + // https://docs.makerdao.com/smart-contract-modules/proxy-module/cdp-manager-detailed-documentation + const PROXY_REGISTRY = '0x4678f0a6958e4D2Bc4F1BAF7Bc52E8F3564f3fE4' + const ds_proxy = await api.call({ abi: 'function proxies(address) view returns (address)', target: PROXY_REGISTRY, params: owner }) + const CDP_MANAGER = '0x5ef30b9986345249bc32d8928b7ee64de9435e39' + const ILK_REGISTRY = '0x5a464C28D19848f44199D003BeF5ecc87d090F87' + const vaultCount = await api.call({ abi: 'function count(address) view returns (uint256)', target: CDP_MANAGER, params: ds_proxy }) + if (vaultCount < 1) return api.getBalances() + vaultIds.push(await api.call({ abi: 'function first(address) view returns (uint256)', target: CDP_MANAGER, params: ds_proxy })) + for (let i = 0; i < vaultCount - 1; i++) { + const [_, nextId] = await api.call({ abi: 'function list(uint256) view returns (uint256,uint256)', target: CDP_MANAGER, params: vaultIds[i] }) + vaultIds.push(nextId) + } + const ilks = await api.multiCall({ abi: 'function ilks(uint256) view returns (bytes32)', calls: vaultIds, target: CDP_MANAGER }) + const urns = await api.multiCall({ abi: 'function urns(uint256) view returns (address)', calls: vaultIds, target: CDP_MANAGER }) + let collaterals = await api.multiCall({ abi: 'function gem(bytes32) view returns (address)', calls: ilks, target: ILK_REGISTRY }) + const vat = await api.call({ abi: 'address:vat', target: CDP_MANAGER }) + const cdpData = await api.multiCall({ abi: 'function urns(bytes32, address) view returns (uint256 collateralBal, uint256 debt)', calls: urns.map((v, i) => ({ params: [ilks[i], v] })), target: vat }) + collaterals = collaterals.map(i => normalizeAddress(i, chain)) + cdpData.forEach(({ collateralBal, debt }, i) => { + if (!skipDebt) + api.add(ADDRESSES.ethereum.DAI, debt * -1) + const collateral = collaterals[i] + if (blacklistedTokens.length && blacklistedTokens.includes(collateral, chain)) return; + if (whitelistedTokens.length && !whitelistedTokens.includes(collateral, chain)) return; + api.add(collateral, collateralBal) + }) + return api.getBalances() +} - const { output: lpTokens } = await sdk.api.erc20.balanceOf({ target: balancerPool, owner, chain, block, }) - const { output: lpSupply } = await sdk.api.erc20.totalSupply({ target: balancerPool, chain, block, }) +async function unwrap4626Tokens({ api, tokensAndOwners, }) { + const tokens = tokensAndOwners.map(i => i[0]) + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: tokensAndOwners.map(i => ({ target: i[0], params: i[1] })), }) + const assets = await api.multiCall({ abi: 'address:asset', calls: tokens, }) + api.addTokens(assets, bals) + return api.getBalances() +} - const ratio = lpTokens / lpSupply - const { tokens, balances: bal, } = poolTokens - tokens.forEach((token, i) => { - const newValue = BigNumber(+bal[i] * ratio).toFixed(0) - sdk.util.sumSingleBalance(balances, transform(token), newValue) - }) - return balances +async function unwrapConvexRewardPools({ api, tokensAndOwners }) { + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: tokensAndOwners.map(([t, o]) => ({ target: t, params: o })) }) + const tokens = await api.multiCall({ abi: 'address:stakingToken', calls: tokensAndOwners.map(i => i[0]) }) + api.addTokens(tokens, bals) + return api.getBalances() } module.exports = { @@ -747,6 +862,10 @@ module.exports = { nullAddress, sumTokens2, unwrapBalancerToken, - unwrapBalancerPool, sumTokensExport, + genericUnwrapCvxDeposit, + genericUnwrapCvxRewardPool, + unwrapMakerPositions, + unwrap4626Tokens, + unwrapConvexRewardPools, } diff --git a/projects/helper/utils.js b/projects/helper/utils.js index a9330313bd..b97c5129d2 100644 --- a/projects/helper/utils.js +++ b/projects/helper/utils.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('./coreAssets.json') const BigNumber = require("bignumber.js"); const axios = require("axios"); const sdk = require('@defillama/sdk') const http = require('./http') -const env = require('./env') +const { getEnv } = require('./env') const erc20 = require('./abis/erc20.json') async function returnBalance(token, address, block, chain) { @@ -51,18 +52,24 @@ function isLP(symbol, token, chain) { // console.log(symbol, chain, token) if (!symbol) return false if (token && blacklisted_LPS.includes(token.toLowerCase()) || symbol.includes('HOP-LP-')) return false - if (chain === 'bsc' && ['OLP', 'DLP', 'MLP', 'LP'].includes(symbol)) return false - if (chain === 'bsc' && ['WLP', 'FstLP', 'BLP',].includes(symbol)) return true + if (chain === 'bsc' && ['OLP', 'DLP', 'MLP', 'LP', 'Stable-LP'].includes(symbol)) return false + if (chain === 'bsc' && ['WLP', 'FstLP', 'BLP', 'DsgLP'].includes(symbol)) return true + if (chain === 'pulse' && ['PLP', 'PLT'].includes(symbol)) return true if (chain === 'avax' && ['ELP', 'EPT', 'CRL', 'YSL', 'BGL', 'PLP'].includes(symbol)) return true if (chain === 'ethereum' && ['SSLP'].includes(symbol)) return true if (chain === 'polygon' && ['WLP', 'FLP'].includes(symbol)) return true if (chain === 'moonriver' && ['HBLP'].includes(symbol)) return true if (chain === 'ethpow' && ['LFG_LP'].includes(symbol)) return true + if (chain === 'aurora' && ['wLP'].includes(symbol)) return true + if (chain === 'oasis' && ['LPT'].includes(symbol)) return true + if (chain === 'wan' && ['WSLP'].includes(symbol)) return true + if (chain === 'polygon' && ['MbtLP'].includes(symbol)) return true if (chain === 'ethereum' && ['SUDO-LP'].includes(symbol)) return false if (chain === 'dogechain' && ['DST-V2'].includes(symbol)) return true if (chain === 'harmony' && ['HLP'].includes(symbol)) return true if (chain === 'klaytn' && ['NLP'].includes(symbol)) return true - if (chain === 'fantom' && ['HLP'].includes(symbol)) return true + if (chain === 'fantom' && ['HLP', 'WLP'].includes(symbol)) return true + if (chain === 'era' && /(cSLP|sSLP)$/.test(symbol)) return true // for syncswap if (chain === 'songbird' && ['FLRX', 'OLP'].includes(symbol)) return true if (chain === 'arbitrum' && ['DXS', 'ZLP',].includes(symbol)) return true if (chain === 'metis' && ['NLP', 'ALP'].includes(symbol)) return true // Netswap/Agora LP Token @@ -141,7 +148,7 @@ function getUniqueAddresses(addresses, isCaseSensitive = false) { return [...set] } -const DEBUG_MODE = env.LLAMA_DEBUG_MODE +const DEBUG_MODE = () => getEnv('LLAMA_DEBUG_MODE') const log = sdk.log function sliceIntoChunks(arr, chunkSize = 100) { @@ -164,7 +171,7 @@ function stripTokenHeader(token) { } async function diplayUnknownTable({ tvlResults = {}, tvlBalances = {}, storedKey = 'ethereum', tableLabel = 'Unrecognized tokens' }) { - if (!DEBUG_MODE) return; + if (!DEBUG_MODE()) return; const balances = {} storedKey = storedKey.split('-')[0] Object.entries(tvlResults.tokenBalances).forEach(([label, balance]) => { @@ -177,11 +184,12 @@ async function diplayUnknownTable({ tvlResults = {}, tvlBalances = {}, storedKey try { await debugBalances({ balances, chain: storedKey, log, tableLabel, withETH: false, }) } catch (e) { + // console.log(e) log('failed to fetch prices for', balances) } } -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null async function getSymbols(chain, tokens) { tokens = tokens.filter(i => i.includes('0x')).map(i => i.slice(i.indexOf('0x'))).filter(i => i !== nullAddress) const calls = tokens.map(i => ({ target: i })) @@ -211,14 +219,20 @@ async function getDecimals(chain, tokens) { } async function debugBalances({ balances = {}, chain, log = false, tableLabel = '', withETH = true }) { - if (!DEBUG_MODE && !log) return; + if (!DEBUG_MODE() && !log) return; if (!Object.keys(balances).length) return; const labelMapping = {} const tokens = [] const ethTokens = [] Object.keys(balances).forEach(label => { - const token = stripTokenHeader(label) + let token = stripTokenHeader(label) + if (chain === 'tron') { + token = label.slice(5) + tokens.push(token) + labelMapping[label] = token + return + } if (!token.startsWith('0x')) return; if (!label.startsWith(chain)) ethTokens.push(token) @@ -232,52 +246,27 @@ async function debugBalances({ balances = {}, chain, log = false, tableLabel = ' return; } + const api = new sdk.ChainApi({ chain }) - const { output: symbols } = await sdk.api.abi.multiCall({ - abi: 'erc20:symbol', - calls: tokens.map(i => ({ target: i })), - chain, - permitFailure: true, - }) - const { output: decimals } = await sdk.api.abi.multiCall({ - abi: 'erc20:decimals', - calls: tokens.map(i => ({ target: i })), - chain, - permitFailure: true, - }) - - const { output: name } = await sdk.api.abi.multiCall({ - abi: erc20.name, - calls: tokens.map(i => ({ target: i })), - chain, - permitFailure: true, - }) + const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: tokens, permitFailure: true, }) + const decimals = await api.multiCall({ abi: 'erc20:decimals', calls: tokens, permitFailure: true, }) + let name = await api.multiCall({ abi: erc20.name, calls: tokens, permitFailure: true, }) + name = name.map(i => i && i.length > 50 ? i.slice(0, 50) + '...' : i) let symbolsETH, nameETH if (withETH) { - symbolsETH = await sdk.api.abi.multiCall({ - abi: 'erc20:symbol', - calls: ethTokens.map(i => ({ target: i })), - permitFailure: true, - }) - - nameETH = await sdk.api.abi.multiCall({ - abi: erc20.name, - calls: ethTokens.map(i => ({ target: i })), - permitFailure: true, - }) - - symbolsETH = symbolsETH.output - nameETH = nameETH.output + const ethApi = new sdk.ChainApi() + symbolsETH = await ethApi.multiCall({ abi: 'erc20:symbol', calls: ethTokens, permitFailure: true, }) + nameETH = await ethApi.multiCall({ abi: erc20.name, calls: ethTokens, permitFailure: true, }) } - let symbolMapping = symbols.reduce((a, i) => ({ ...a, [i.input.target]: i.output }), {}) - let decimalsMapping = decimals.reduce((a, i) => ({ ...a, [i.input.target]: i.output }), {}) - let nameMapping = name.reduce((a, i) => ({ ...a, [i.input.target]: i.output }), {}) + let symbolMapping = symbols.reduce((a, i, y) => ({ ...a, [tokens[y]]: i }), {}) + let decimalsMapping = decimals.reduce((a, i, y) => ({ ...a, [tokens[y]]: i }), {}) + let nameMapping = name.reduce((a, i, y) => ({ ...a, [tokens[y]]: i }), {}) if (withETH) { - symbolMapping = symbolsETH.reduce((a, i) => ({ ...a, [i.input.target]: i.output }), symbolMapping) - nameMapping = nameETH.reduce((a, i) => ({ ...a, [i.input.target]: i.output }), nameMapping) + symbolMapping = symbolsETH.reduce((a, i, y) => ({ ...a, [ethTokens[y]]: i }), symbolMapping) + nameMapping = nameETH.reduce((a, i, y) => ({ ...a, [ethTokens[y]]: i }), nameMapping) } const logObj = [] Object.entries(balances).forEach(([label, balance]) => { diff --git a/projects/helper/utils/graphql.js b/projects/helper/utils/graphql.js new file mode 100644 index 0000000000..88400d8efa --- /dev/null +++ b/projects/helper/utils/graphql.js @@ -0,0 +1,8 @@ +const axios = require("axios"); + +async function request(endpoint, query, { variables, withMetadata = false } = {}) { + const { data: result } = await axios.post(endpoint, { query, variables }) + return withMetadata ? result : result.data +} + +module.exports = { request } \ No newline at end of file diff --git a/projects/helper/utils/solana/layout.js b/projects/helper/utils/solana/layout.js index 0861110ae0..bf14f62c90 100644 --- a/projects/helper/utils/solana/layout.js +++ b/projects/helper/utils/solana/layout.js @@ -1,494 +1,13 @@ -const { deserializeUnchecked } = require('borsh'); -const BufferLayout = require("buffer-layout"); const { PublicKey } = require("@solana/web3.js"); -const BN = require("bn.js"); -const { parseLido, parseLidoValidatorList } = require('./lido') -const { struct, u8, u16, seq, blob, Layout, bits, u32, } = BufferLayout +const { parseLido, parseLidoValidatorList } = require('./layouts/lido') +const { parsePhoenix } = require('./layouts/phoenix-dex') +const { RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM, RAYDIUM_STABLE_STATE_LAYOUT_V1, } = require('./layouts/raydium-layout') +const { INVESTIN_FUND_DATA, } = require('./layouts/investin-layout') +const { MARKET_STATE_LAYOUT_V3, } = require('./layouts/openbook-layout') +const { ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, } = require('./layouts/mixed-layout') -const publicKey = (property = "publicKey") => { - const publicKeyLayout = BufferLayout.blob(32, property); - - const _decode = publicKeyLayout.decode.bind(publicKeyLayout); - const _encode = publicKeyLayout.encode.bind(publicKeyLayout); - - publicKeyLayout.decode = (buffer, offset) => { - const data = _decode(buffer, offset); - return new PublicKey(data); - }; - - publicKeyLayout.encode = (key, buffer, offset) => - _encode(key.toBuffer(), buffer, offset); - - return publicKeyLayout; -}; - -/** - * Layout for a 64bit unsigned value - */ -const uint64 = (property = "uint64") => { - const layout = BufferLayout.blob(8, property); - - const _decode = layout.decode.bind(layout); - const _encode = layout.encode.bind(layout); - - layout.decode = (buffer, offset) => { - const data = _decode(buffer, offset); - return new BN( - [...data] - .reverse() - .map((i) => `00${i.toString(16)}`.slice(-2)) - .join(""), - 16 - ); - }; - - layout.encode = (num, buffer, offset) => { - const a = num.toArray().reverse(); - let b = Buffer.from(a); - if (b.length !== 8) { - const zeroPad = Buffer.alloc(8); - b.copy(zeroPad); - b = zeroPad; - } - return _encode(b, buffer, offset); - }; - - return layout; -}; - -const u64 = uint64 - -const uint128 = (property = "uint128") => { - const layout = BufferLayout.blob(16, property); - - const _decode = layout.decode.bind(layout); - const _encode = layout.encode.bind(layout); - - layout.decode = (buffer, offset) => { - const data = _decode(buffer, offset); - return new BN( - [...data] - .reverse() - .map((i) => `00${i.toString(16)}`.slice(-2)) - .join(""), - 16 - ); - }; - - layout.encode = (num, buffer, offset) => { - const a = num.toArray().reverse(); - let b = Buffer.from(a); - if (b.length !== 16) { - const zeroPad = Buffer.alloc(16); - b.copy(zeroPad); - b = zeroPad; - } - - return _encode(b, buffer, offset); - }; - - return layout; -}; - -class WideBits extends Layout { - constructor(property) { - super(8, property); - this._lower = bits(u32(), false); - this._upper = bits(u32(), false); - } - - addBoolean(property) { - if (this._lower.fields.length < 32) { - this._lower.addBoolean(property); - } else { - this._upper.addBoolean(property); - } - } - - decode(b, offset = 0) { - const lowerDecoded = this._lower.decode(b, offset); - const upperDecoded = this._upper.decode(b, offset + this._lower.span); - return { ...lowerDecoded, ...upperDecoded }; - } - - encode(src, b, offset = 0) { - return ( - this._lower.encode(src, b, offset) + - this._upper.encode(src, b, offset + this._lower.span) - ); - } -} - -const ACCOUNT_FLAGS_LAYOUT = new WideBits(); -ACCOUNT_FLAGS_LAYOUT.addBoolean('initialized'); -ACCOUNT_FLAGS_LAYOUT.addBoolean('market'); -ACCOUNT_FLAGS_LAYOUT.addBoolean('openOrders'); -ACCOUNT_FLAGS_LAYOUT.addBoolean('requestQueue'); -ACCOUNT_FLAGS_LAYOUT.addBoolean('eventQueue'); -ACCOUNT_FLAGS_LAYOUT.addBoolean('bids'); -ACCOUNT_FLAGS_LAYOUT.addBoolean('asks'); - -function accountFlagsLayout(property = 'accountFlags') { - return ACCOUNT_FLAGS_LAYOUT.replicate(property); -} - -const LastUpdateLayout = BufferLayout.struct( - [uint64("slot"), BufferLayout.u8("stale")], - "lastUpdate" -); - -const ReserveLayout = BufferLayout.struct([ - BufferLayout.u8("version"), - - LastUpdateLayout, - - publicKey("lendingMarket"), - - BufferLayout.struct( - [ - publicKey("mintPubkey"), - BufferLayout.u8("mintDecimals"), - publicKey("supplyPubkey"), - // @FIXME: oracle option - // TODO: replace u32 option with generic equivalent - // BufferLayout.u32('oracleOption'), - publicKey("pythOracle"), - publicKey("switchboardOracle"), - uint64("availableAmount"), - uint128("borrowedAmountWads"), - uint128("cumulativeBorrowRateWads"), - uint128("marketPrice"), - ], - "liquidity" - ), - - BufferLayout.struct( - [ - publicKey("mintPubkey"), - uint64("mintTotalSupply"), - publicKey("supplyPubkey"), - ], - "collateral" - ), - - BufferLayout.struct( - [ - BufferLayout.u8("optimalUtilizationRate"), - BufferLayout.u8("loanToValueRatio"), - BufferLayout.u8("liquidationBonus"), - BufferLayout.u8("liquidationThreshold"), - BufferLayout.u8("minBorrowRate"), - BufferLayout.u8("optimalBorrowRate"), - BufferLayout.u8("maxBorrowRate"), - BufferLayout.struct( - [ - uint64("borrowFeeWad"), - uint64("flashLoanFeeWad"), - BufferLayout.u8("hostFeePercentage"), - ], - "fees" - ), - uint64("depositLimit"), - uint64("borrowLimit"), - publicKey("feeReceiver"), - ], - "config" - ), - - BufferLayout.blob(256, "padding"), -]); - -const ReserveLayoutLarix = BufferLayout.struct( - [ - BufferLayout.u8('version'), - - LastUpdateLayout, - - publicKey('lendingMarket'), - - BufferLayout.struct( - [ - publicKey('mintPubkey'), - BufferLayout.u8('mintDecimals'), - publicKey('supplyPubkey'), - publicKey('feeReceiver'), - BufferLayout.u8("usePythOracle"), - publicKey('params_1'), - publicKey("params_2"), - uint64('availableAmount'), - uint128('borrowedAmountWads'), - uint128('cumulativeBorrowRateWads'), - uint128('marketPrice'), - uint128('ownerUnclaimed'), - ], - 'liquidity', - ), - - BufferLayout.struct( - [ - publicKey('mintPubkey'), - uint64('mintTotalSupply'), - publicKey('supplyPubkey'), - ], - 'collateral' - ), - - BufferLayout.struct( - [ - BufferLayout.u8('optimalUtilizationRate'), - BufferLayout.u8('loanToValueRatio'), - BufferLayout.u8('liquidationBonus'), - BufferLayout.u8('liquidationThreshold'), - BufferLayout.u8('minBorrowRate'), - BufferLayout.u8('optimalBorrowRate'), - BufferLayout.u8('maxBorrowRate'), - BufferLayout.struct( - // TODO: fix flash loan fee wad - [ - uint64('borrowFeeWad'), - uint64('borrowInterestFeeWad'), - uint64("flashLoanFeeWad"), - BufferLayout.u8('hostFeePercentage'), - BufferLayout.u8('hostFeeReceiverCount'), - BufferLayout.blob(32 * 5, 'hostFeeReceivers'), - ], - 'fees', - ), - BufferLayout.u8("depositPaused"), - BufferLayout.u8("borrowPaused"), - BufferLayout.u8("liquidationPaused"), - ], - 'config' - ), - BufferLayout.struct( - [ - publicKey("unCollSupply"), - uint128('lTokenMiningIndex'), - uint128('borrowMiningIndex'), - uint64("totalMiningSpeed"), - uint64("kinkUtilRate"), - ], - 'bonus' - ), - BufferLayout.u8("reentry"), - uint64("depositLimit"), - BufferLayout.u8("isLP"), - BufferLayout.blob(239, 'padding'), - ], -); - -const MintLayout = BufferLayout.struct([ - BufferLayout.u32('mintAuthorityOption'), - publicKey("mintAuthority"), - uint64('supply'), - BufferLayout.u8("decimals"), - BufferLayout.u8("isInitialized"), - BufferLayout.u32("freezeAuthorityOption"), - publicKey("freezeAuthority"), -]); - -const AccountLayout = BufferLayout.struct([ - publicKey('mint'), - publicKey('owner'), - uint64('amount'), - BufferLayout.u32('delegateOption'), - publicKey('delegate'), - BufferLayout.u8('state'), - BufferLayout.u32('isNativeOption'), - uint64('isNative'), - uint64('delegatedAmount'), - BufferLayout.u32('closeAuthorityOption'), - publicKey('closeAuthority'), -]); - -const TokenSwapLayout = BufferLayout.struct([ - BufferLayout.u8("version"), - BufferLayout.u8("isInitialized"), - BufferLayout.u8("bumpSeed"), - publicKey("tokenProgramId"), - publicKey("tokenAccountA"), - publicKey("tokenAccountB"), - publicKey("tokenPool"), - publicKey("mintA"), - publicKey("mintB"), - publicKey("feeAccount"), - BufferLayout.blob(8, "tradeFeeNumerator"), - BufferLayout.blob(8, "tradeFeeDenominator"), - BufferLayout.blob(8, "ownerTradeFeeNumerator"), - BufferLayout.blob(8, "ownerTradeFeeDenominator"), - BufferLayout.blob(8, "ownerWithdrawFeeNumerator"), - BufferLayout.blob(8, "ownerWithdrawFeeDenominator"), - BufferLayout.blob(8, "hostFeeNumerator"), - BufferLayout.blob(8, "hostFeeDenominator"), - BufferLayout.u8("curveType"), - publicKey("curveParameters"), -]) - -function U64F64(property = "u64F64") { - - const layout = BufferLayout.blob(16, property); - - const _decode = layout.decode.bind(layout); - const _encode = layout.encode.bind(layout); - - layout.decode = (buffer, offset) => { - const raw = new BN(_decode(buffer, offset), 10, 'le'); - - return raw / Math.pow(2, 64); - }; - - layout.encode = (key, buffer, offset) => - _encode(key.toBuffer(), buffer, offset); - - return layout; -} - -const INVESTIN_FUND_DATA = struct([ - u8('is_initialized'), - u8('number_of_active_investments'), - u8('no_of_investments'), - u8('signer_nonce'), - u8('no_of_margin_positions'), - u8('no_of_assets'), - u16('position_count'), - - u8('version'), - u8('is_private'), - u16('fund_v3_index'), - seq(u8(), 4, 'padding'), - - u64('min_amount'), - U64F64('min_return'), - U64F64('performance_fee_percentage'), - U64F64('total_amount'), - U64F64('prev_performance'), - - u64('amount_in_router'), - U64F64('performance_fee'), - publicKey('manager_account'), - publicKey('fund_pda'), - seq( - struct([ - u8('is_active'), - seq(u8(), 3, 'index'), - u8('mux'), - u8('is_on_mango'), - seq(u8(), 2, 'padding'), - u64('balance'), - u64('debt'), - publicKey('vault') - ]), - 8, 'tokens' - ), - seq(publicKey(), 10, 'investors'), - - struct([ - publicKey('mango_account'), - seq(u8(), 3, 'perp_markets'), - u8('padding'), - u8('deposit_index'), - u8('markets_active'), - u8('deposits_active'), - u8('xpadding'), - seq(u64(), 2, 'investor_debts'), - seq(u8('padding'), 24), - ], 'mango_positions'), - - - struct([ - u8('is_active'), - u8('is_split'), - u8('hop'), - u8('count'), - u8('token_in_slot'), - u8('token_out_slot'), - seq(u8('padding'), 2), - - publicKey('token_in'), - publicKey('token_out'), - u64('amount_in'), - u64('min_amount_out'), - ], 'guard'), - - seq( - struct([ - u64('price'), - u64('max_base_quantity'), - u64('max_quote_quantity'), - u64('client_order_id'), - u64('expiry_timestamp'), - u8('is_repost_processing'), - u8('perp_market_id'), - u8('side'), - u8('reduce_only'), - u8('limit'), - seq(u8(), 3, 'padding'), - ]), - 2, 'limit_orders' - ), - - struct([ - u64('last_updated'), - publicKey('volt_vault_id'), - u64('total_value_in_ul'), - u64('fc_token_balance'), - u64('ul_token_balance'), - u64('fc_token_debt'), - u64('ul_debt'), - u8('ul_token_slot'), - u8('is_active'), - seq(u8('padding'), 6), - ], 'friktion_vault'), - - seq(u8(), 1864, 'migration_additonal_padding'), -]) - -const MARKET_STATE_LAYOUT_V3 = struct([ - blob(5), - - accountFlagsLayout('accountFlags'), - - publicKey('ownAddress'), - - u64('vaultSignerNonce'), - - publicKey('baseMint'), - publicKey('quoteMint'), - - publicKey('baseVault'), - u64('baseDepositsTotal'), - u64('baseFeesAccrued'), - - publicKey('quoteVault'), - u64('quoteDepositsTotal'), - u64('quoteFeesAccrued'), - - u64('quoteDustThreshold'), - - publicKey('requestQueue'), - publicKey('eventQueue'), - - publicKey('bids'), - publicKey('asks'), - - u64('baseLotSize'), - u64('quoteLotSize'), - - u64('feeRateBps'), - - u64('referrerRebatesAccrued'), - - publicKey('authority'), - publicKey('pruneAuthority'), - publicKey('consumeEventsAuthority'), - - blob(992), - - blob(7), -]); - -// console.log(INVESTIN_FUND_DATA.span) +// console.log(RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM.span, 'RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM') const parseReserve = (info) => { const pubkey = PublicKey.default @@ -527,6 +46,11 @@ const customDecoders = { larixReserve: defaultParseLayout(ReserveLayoutLarix), investinFund: defaultParseLayout(INVESTIN_FUND_DATA), openbook: defaultParseLayout(MARKET_STATE_LAYOUT_V3), + // raydiumLPv4: defaultParseLayout(RAYDIUM_LIQUIDITY_STATE_LAYOUT_V4), + raydiumCLMM: defaultParseLayout(RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM), + raydiumLPStable: defaultParseLayout(RAYDIUM_STABLE_STATE_LAYOUT_V1), + fluxbeam: defaultParseLayout(TokenSwapLayout), + phoenix: parsePhoenix, } function decodeAccount(layout, accountInfo) { diff --git a/projects/helper/utils/solana/layouts/investin-layout.js b/projects/helper/utils/solana/layouts/investin-layout.js new file mode 100644 index 0000000000..3e8fe2799c --- /dev/null +++ b/projects/helper/utils/solana/layouts/investin-layout.js @@ -0,0 +1,129 @@ +const { + struct, s32, u8, u16, seq, blob, Layout, bits, u32, publicKey, uint64, u64, uint128, u128, BufferLayout, +} = require('./layout-base') +const BN = require("bn.js"); + +function U64F64(property = "u64F64") { + + const layout = BufferLayout.blob(16, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer, offset) => { + const raw = new BN(_decode(buffer, offset), 10, 'le'); + + return raw / Math.pow(2, 64); + }; + + layout.encode = (key, buffer, offset) => + _encode(key.toBuffer(), buffer, offset); + + return layout; +} + +const INVESTIN_FUND_DATA = struct([ + u8('is_initialized'), + u8('number_of_active_investments'), + u8('no_of_investments'), + u8('signer_nonce'), + u8('no_of_margin_positions'), + u8('no_of_assets'), + u16('position_count'), + + u8('version'), + u8('is_private'), + u16('fund_v3_index'), + seq(u8(), 4, 'padding'), + + u64('min_amount'), + U64F64('min_return'), + U64F64('performance_fee_percentage'), + U64F64('total_amount'), + U64F64('prev_performance'), + + u64('amount_in_router'), + U64F64('performance_fee'), + publicKey('manager_account'), + publicKey('fund_pda'), + seq( + struct([ + u8('is_active'), + seq(u8(), 3, 'index'), + u8('mux'), + u8('is_on_mango'), + seq(u8(), 2, 'padding'), + u64('balance'), + u64('debt'), + publicKey('vault') + ]), + 8, 'tokens' + ), + seq(publicKey(), 10, 'investors'), + + struct([ + publicKey('mango_account'), + seq(u8(), 3, 'perp_markets'), + u8('padding'), + u8('deposit_index'), + u8('markets_active'), + u8('deposits_active'), + u8('xpadding'), + seq(u64(), 2, 'investor_debts'), + seq(u8('padding'), 24), + ], 'mango_positions'), + + + struct([ + u8('is_active'), + u8('is_split'), + u8('hop'), + u8('count'), + u8('token_in_slot'), + u8('token_out_slot'), + seq(u8('padding'), 2), + + publicKey('token_in'), + publicKey('token_out'), + u64('amount_in'), + u64('min_amount_out'), + ], 'guard'), + + seq( + struct([ + u64('price'), + u64('max_base_quantity'), + u64('max_quote_quantity'), + u64('client_order_id'), + u64('expiry_timestamp'), + u8('is_repost_processing'), + u8('perp_market_id'), + u8('side'), + u8('reduce_only'), + u8('limit'), + seq(u8(), 3, 'padding'), + ]), + 2, 'limit_orders' + ), + + struct([ + u64('last_updated'), + publicKey('volt_vault_id'), + u64('total_value_in_ul'), + u64('fc_token_balance'), + u64('ul_token_balance'), + u64('fc_token_debt'), + u64('ul_debt'), + u8('ul_token_slot'), + u8('is_active'), + seq(u8('padding'), 6), + ], 'friktion_vault'), + + seq(u8(), 1864, 'migration_additonal_padding'), +]) + + +module.exports = { + INVESTIN_FUND_DATA, +} + diff --git a/projects/helper/utils/solana/layouts/layout-base.js b/projects/helper/utils/solana/layouts/layout-base.js new file mode 100644 index 0000000000..cc1f069786 --- /dev/null +++ b/projects/helper/utils/solana/layouts/layout-base.js @@ -0,0 +1,95 @@ + +const BufferLayout = require("buffer-layout"); +const { PublicKey } = require("@solana/web3.js"); +const BN = require("bn.js"); +const { struct, s32, u8, u16, seq, blob, Layout, bits, u32, } = BufferLayout + +const publicKey = (property = "publicKey") => { + const publicKeyLayout = BufferLayout.blob(32, property); + + const _decode = publicKeyLayout.decode.bind(publicKeyLayout); + const _encode = publicKeyLayout.encode.bind(publicKeyLayout); + + publicKeyLayout.decode = (buffer, offset) => { + const data = _decode(buffer, offset); + return new PublicKey(data); + }; + + publicKeyLayout.encode = (key, buffer, offset) => + _encode(key.toBuffer(), buffer, offset); + + return publicKeyLayout; +}; + +/** + * Layout for a 64bit unsigned value + */ +const uint64 = (property = "uint64") => { + const layout = BufferLayout.blob(8, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer, offset) => { + const data = _decode(buffer, offset); + return new BN( + [...data] + .reverse() + .map((i) => `00${i.toString(16)}`.slice(-2)) + .join(""), + 16 + ); + }; + + layout.encode = (num, buffer, offset) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 8) { + const zeroPad = Buffer.alloc(8); + b.copy(zeroPad); + b = zeroPad; + } + return _encode(b, buffer, offset); + }; + + return layout; +}; + +const u64 = uint64 + +const uint128 = (property = "uint128") => { + const layout = BufferLayout.blob(16, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer, offset) => { + const data = _decode(buffer, offset); + return new BN( + [...data] + .reverse() + .map((i) => `00${i.toString(16)}`.slice(-2)) + .join(""), + 16 + ); + }; + + layout.encode = (num, buffer, offset) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 16) { + const zeroPad = Buffer.alloc(16); + b.copy(zeroPad); + b = zeroPad; + } + + return _encode(b, buffer, offset); + }; + + return layout; +}; +const u128 = uint128 + +module.exports = { + struct, s32, u8, u16, seq, blob, Layout, bits, u32, publicKey, uint64, u64, uint128, u128, BufferLayout, +} \ No newline at end of file diff --git a/projects/helper/utils/solana/lido.js b/projects/helper/utils/solana/layouts/lido.js similarity index 100% rename from projects/helper/utils/solana/lido.js rename to projects/helper/utils/solana/layouts/lido.js diff --git a/projects/helper/utils/solana/layouts/mixed-layout.js b/projects/helper/utils/solana/layouts/mixed-layout.js new file mode 100644 index 0000000000..92b0b6f71c --- /dev/null +++ b/projects/helper/utils/solana/layouts/mixed-layout.js @@ -0,0 +1,201 @@ +const { + struct, s32, u8, u16, seq, blob, Layout, bits, u32, publicKey, uint64, u64, uint128, u128, BufferLayout, +} = require('./layout-base') + +const LastUpdateLayout = BufferLayout.struct( + [uint64("slot"), BufferLayout.u8("stale")], + "lastUpdate" +); + +const ReserveLayout = BufferLayout.struct([ + BufferLayout.u8("version"), + + LastUpdateLayout, + + publicKey("lendingMarket"), + + BufferLayout.struct( + [ + publicKey("mintPubkey"), + BufferLayout.u8("mintDecimals"), + publicKey("supplyPubkey"), + // @FIXME: oracle option + // TODO: replace u32 option with generic equivalent + // BufferLayout.u32('oracleOption'), + publicKey("pythOracle"), + publicKey("switchboardOracle"), + uint64("availableAmount"), + uint128("borrowedAmountWads"), + uint128("cumulativeBorrowRateWads"), + uint128("marketPrice"), + ], + "liquidity" + ), + + BufferLayout.struct( + [ + publicKey("mintPubkey"), + uint64("mintTotalSupply"), + publicKey("supplyPubkey"), + ], + "collateral" + ), + + BufferLayout.struct( + [ + BufferLayout.u8("optimalUtilizationRate"), + BufferLayout.u8("loanToValueRatio"), + BufferLayout.u8("liquidationBonus"), + BufferLayout.u8("liquidationThreshold"), + BufferLayout.u8("minBorrowRate"), + BufferLayout.u8("optimalBorrowRate"), + BufferLayout.u8("maxBorrowRate"), + BufferLayout.struct( + [ + uint64("borrowFeeWad"), + uint64("flashLoanFeeWad"), + BufferLayout.u8("hostFeePercentage"), + ], + "fees" + ), + uint64("depositLimit"), + uint64("borrowLimit"), + publicKey("feeReceiver"), + ], + "config" + ), + + BufferLayout.blob(256, "padding"), +]); + +const ReserveLayoutLarix = BufferLayout.struct( + [ + BufferLayout.u8('version'), + + LastUpdateLayout, + + publicKey('lendingMarket'), + + BufferLayout.struct( + [ + publicKey('mintPubkey'), + BufferLayout.u8('mintDecimals'), + publicKey('supplyPubkey'), + publicKey('feeReceiver'), + BufferLayout.u8("usePythOracle"), + publicKey('params_1'), + publicKey("params_2"), + uint64('availableAmount'), + uint128('borrowedAmountWads'), + uint128('cumulativeBorrowRateWads'), + uint128('marketPrice'), + uint128('ownerUnclaimed'), + ], + 'liquidity', + ), + + BufferLayout.struct( + [ + publicKey('mintPubkey'), + uint64('mintTotalSupply'), + publicKey('supplyPubkey'), + ], + 'collateral' + ), + + BufferLayout.struct( + [ + BufferLayout.u8('optimalUtilizationRate'), + BufferLayout.u8('loanToValueRatio'), + BufferLayout.u8('liquidationBonus'), + BufferLayout.u8('liquidationThreshold'), + BufferLayout.u8('minBorrowRate'), + BufferLayout.u8('optimalBorrowRate'), + BufferLayout.u8('maxBorrowRate'), + BufferLayout.struct( + // TODO: fix flash loan fee wad + [ + uint64('borrowFeeWad'), + uint64('borrowInterestFeeWad'), + uint64("flashLoanFeeWad"), + BufferLayout.u8('hostFeePercentage'), + BufferLayout.u8('hostFeeReceiverCount'), + BufferLayout.blob(32 * 5, 'hostFeeReceivers'), + ], + 'fees', + ), + BufferLayout.u8("depositPaused"), + BufferLayout.u8("borrowPaused"), + BufferLayout.u8("liquidationPaused"), + ], + 'config' + ), + BufferLayout.struct( + [ + publicKey("unCollSupply"), + uint128('lTokenMiningIndex'), + uint128('borrowMiningIndex'), + uint64("totalMiningSpeed"), + uint64("kinkUtilRate"), + ], + 'bonus' + ), + BufferLayout.u8("reentry"), + uint64("depositLimit"), + BufferLayout.u8("isLP"), + BufferLayout.blob(239, 'padding'), + ], +); + +const MintLayout = BufferLayout.struct([ + BufferLayout.u32('mintAuthorityOption'), + publicKey("mintAuthority"), + uint64('supply'), + BufferLayout.u8("decimals"), + BufferLayout.u8("isInitialized"), + BufferLayout.u32("freezeAuthorityOption"), + publicKey("freezeAuthority"), +]); + +const AccountLayout = BufferLayout.struct([ + publicKey('mint'), + publicKey('owner'), + uint64('amount'), + BufferLayout.u32('delegateOption'), + publicKey('delegate'), + BufferLayout.u8('state'), + BufferLayout.u32('isNativeOption'), + uint64('isNative'), + uint64('delegatedAmount'), + BufferLayout.u32('closeAuthorityOption'), + publicKey('closeAuthority'), +]); + +const TokenSwapLayout = BufferLayout.struct([ + BufferLayout.u8("version"), + BufferLayout.u8("isInitialized"), + BufferLayout.u8("bumpSeed"), + publicKey("tokenProgramId"), + publicKey("tokenAccountA"), + publicKey("tokenAccountB"), + publicKey("tokenPool"), + publicKey("mintA"), + publicKey("mintB"), + publicKey("feeAccount"), + BufferLayout.blob(8, "tradeFeeNumerator"), + BufferLayout.blob(8, "tradeFeeDenominator"), + BufferLayout.blob(8, "ownerTradeFeeNumerator"), + BufferLayout.blob(8, "ownerTradeFeeDenominator"), + BufferLayout.blob(8, "ownerWithdrawFeeNumerator"), + BufferLayout.blob(8, "ownerWithdrawFeeDenominator"), + BufferLayout.blob(8, "hostFeeNumerator"), + BufferLayout.blob(8, "hostFeeDenominator"), + BufferLayout.u8("curveType"), + publicKey("curveParameters"), +]) + + +module.exports = { + ReserveLayout, ReserveLayoutLarix, MintLayout, AccountLayout, TokenSwapLayout, +} + diff --git a/projects/helper/utils/solana/layouts/openbook-layout.js b/projects/helper/utils/solana/layouts/openbook-layout.js new file mode 100644 index 0000000000..13295c6a4e --- /dev/null +++ b/projects/helper/utils/solana/layouts/openbook-layout.js @@ -0,0 +1,96 @@ +const { + struct, s32, u8, u16, seq, blob, Layout, bits, u32, publicKey, uint64, u64, uint128, u128, +} = require('./layout-base') + + +class WideBits extends Layout { + constructor(property) { + super(8, property); + this._lower = bits(u32(), false); + this._upper = bits(u32(), false); + } + + addBoolean(property) { + if (this._lower.fields.length < 32) { + this._lower.addBoolean(property); + } else { + this._upper.addBoolean(property); + } + } + + decode(b, offset = 0) { + const lowerDecoded = this._lower.decode(b, offset); + const upperDecoded = this._upper.decode(b, offset + this._lower.span); + return { ...lowerDecoded, ...upperDecoded }; + } + + encode(src, b, offset = 0) { + return ( + this._lower.encode(src, b, offset) + + this._upper.encode(src, b, offset + this._lower.span) + ); + } +} + +const ACCOUNT_FLAGS_LAYOUT = new WideBits(); +ACCOUNT_FLAGS_LAYOUT.addBoolean('initialized'); +ACCOUNT_FLAGS_LAYOUT.addBoolean('market'); +ACCOUNT_FLAGS_LAYOUT.addBoolean('openOrders'); +ACCOUNT_FLAGS_LAYOUT.addBoolean('requestQueue'); +ACCOUNT_FLAGS_LAYOUT.addBoolean('eventQueue'); +ACCOUNT_FLAGS_LAYOUT.addBoolean('bids'); +ACCOUNT_FLAGS_LAYOUT.addBoolean('asks'); + +function accountFlagsLayout(property = 'accountFlags') { + return ACCOUNT_FLAGS_LAYOUT.replicate(property); +} + +const MARKET_STATE_LAYOUT_V3 = struct([ + blob(5), + + accountFlagsLayout('accountFlags'), + + publicKey('ownAddress'), + + u64('vaultSignerNonce'), + + publicKey('baseMint'), + publicKey('quoteMint'), + + publicKey('baseVault'), + u64('baseDepositsTotal'), + u64('baseFeesAccrued'), + + publicKey('quoteVault'), + u64('quoteDepositsTotal'), + u64('quoteFeesAccrued'), + + u64('quoteDustThreshold'), + + publicKey('requestQueue'), + publicKey('eventQueue'), + + publicKey('bids'), + publicKey('asks'), + + u64('baseLotSize'), + u64('quoteLotSize'), + + u64('feeRateBps'), + + u64('referrerRebatesAccrued'), + + publicKey('authority'), + publicKey('pruneAuthority'), + publicKey('consumeEventsAuthority'), + + blob(992), + + blob(7), +]); + + +module.exports = { + MARKET_STATE_LAYOUT_V3, +} + diff --git a/projects/helper/utils/solana/layouts/phoenix-dex.js b/projects/helper/utils/solana/layouts/phoenix-dex.js new file mode 100644 index 0000000000..9df740147d --- /dev/null +++ b/projects/helper/utils/solana/layouts/phoenix-dex.js @@ -0,0 +1,37 @@ +const { + struct, s32, u8, u16, seq, blob, Layout, bits, u32, publicKey, uint64, u64, uint128, u128, +} = require('./layout-base') + +const TOKEN_PARAMS = [ + u32('decimals'), + u32('vaultBump'), + publicKey('mintKey'), + publicKey('vaultKey'), +] + +// https://github.com/Ellipsis-Labs/phoenix-sdk/blob/4663c670bb8951b4cbf5a062c54de5cd638b231c/typescript/phoenix-sdk/src/types/MarketHeader.ts#L35 +const MARKET_STATE_HEADER = struct([ + + u64('discriminant'), + u64('status'), + + struct([ + u64('bidsSize'), + u64('asksSize'), + u64('numSeats'), + ], 'marketSizeParams'), + struct(TOKEN_PARAMS, 'baseParams'), + u64('baseLotSize'), + struct(TOKEN_PARAMS, 'quoteParams'), + u64('quoteLotSize'), +]); + +const parsePhoenix = (account) => { + const { data } = account; + const buffer = Buffer.from(data.slice(0, MARKET_STATE_HEADER.span)); + return MARKET_STATE_HEADER.decode(buffer); +} + +module.exports = { + parsePhoenix, +} \ No newline at end of file diff --git a/projects/helper/utils/solana/layouts/raydium-layout.js b/projects/helper/utils/solana/layouts/raydium-layout.js new file mode 100644 index 0000000000..07190779ec --- /dev/null +++ b/projects/helper/utils/solana/layouts/raydium-layout.js @@ -0,0 +1,187 @@ +const { + struct, s32, u8, u16, seq, blob, Layout, bits, u32, publicKey, uint64, u64, uint128, u128, +} = require('./layout-base') + +const RAYDIUM_LIQUIDITY_STATE_LAYOUT_V4 = struct([ + u64("status"), + u64("nonce"), + u64("maxOrder"), + u64("depth"), + u64("baseDecimal"), + u64("quoteDecimal"), + u64("state"), + u64("resetFlag"), + u64("minSize"), + u64("volMaxCutRatio"), + u64("amountWaveRatio"), + u64("baseLotSize"), + u64("quoteLotSize"), + u64("minPriceMultiplier"), + u64("maxPriceMultiplier"), + u64("systemDecimalValue"), + u64("minSeparateNumerator"), + u64("minSeparateDenominator"), + u64("tradeFeeNumerator"), + u64("tradeFeeDenominator"), + u64("pnlNumerator"), + u64("pnlDenominator"), + u64("swapFeeNumerator"), + u64("swapFeeDenominator"), + u64("baseNeedTakePnl"), + u64("quoteNeedTakePnl"), + u64("quoteTotalPnl"), + u64("baseTotalPnl"), + u128("quoteTotalDeposited"), + u128("baseTotalDeposited"), + u128("swapBaseInAmount"), + u128("swapQuoteOutAmount"), + u64("swapBase2QuoteFee"), + u128("swapQuoteInAmount"), + u128("swapBaseOutAmount"), + u64("swapQuote2BaseFee"), + // amm vault + publicKey("baseVault"), + publicKey("quoteVault"), + // mint + publicKey("baseMint"), + publicKey("quoteMint"), + publicKey("lpMint"), + // market + publicKey("openOrders"), + publicKey("marketId"), + publicKey("marketProgramId"), + publicKey("targetOrders"), + publicKey("withdrawQueue"), + publicKey("lpVault"), + publicKey("owner"), + // true circulating supply without lock up + u64("lpReserve"), + seq(u64(), 3, "padding"), +]) + +const RAYDIUM_REWARD_INFO = struct([ + u8("rewardState"), + u64("openTime"), + u64("endTime"), + u64("lastUpdateTime"), + u128("emissionsPerSecondX64"), + u64("rewardTotalEmissioned"), + u64("rewardClaimed"), + publicKey("tokenMint"), + publicKey("tokenVault"), + publicKey("creator"), + u128("rewardGrowthGlobalX64"), +]) + +const RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM = struct([ + blob(8), + u8("bump"), + publicKey("ammConfig"), + publicKey("creator"), + publicKey("mintA"), + publicKey("mintB"), + publicKey("vaultA"), + publicKey("vaultB"), + publicKey("observationId"), + u8("mintDecimalsA"), + u8("mintDecimalsB"), + u16("tickSpacing"), + u128("liquidity"), + u128("sqrtPriceX64"), + s32("tickCurrent"), + u16("observationIndex"), + u16("observationUpdateDuration"), + u128("feeGrowthGlobalX64A"), + u128("feeGrowthGlobalX64B"), + u64("protocolFeesTokenA"), + u64("protocolFeesTokenB"), + + u128("swapInAmountTokenA"), + u128("swapOutAmountTokenB"), + u128("swapInAmountTokenB"), + u128("swapOutAmountTokenA"), + + u8("status"), + + seq(u8(), 7, ""), + + seq(RAYDIUM_REWARD_INFO, 3, "rewardInfos"), + seq(u64(), 16, 'tickArrayBitmap'), + + u64("totalFeesTokenA"), + u64("totalFeesClaimedTokenA"), + u64("totalFeesTokenB"), + u64("totalFeesClaimedTokenB"), + + u64("fundFeesTokenA"), + u64("fundFeesTokenB"), + + u64("startTime"), + + seq(u64(), 15 * 4 - 3, "padding"), +]) + +const RAYDIUM_STABLE_STATE_LAYOUT_V1 = struct([ + u64("accountType"), + u64("status"), + u64("nonce"), + u64("maxOrder"), + u64("depth"), + u64("baseDecimal"), + u64("quoteDecimal"), + u64("state"), + u64("resetFlag"), + u64("minSize"), + u64("volMaxCutRatio"), + u64("amountWaveRatio"), + u64("baseLotSize"), + u64("quoteLotSize"), + u64("minPriceMultiplier"), + u64("maxPriceMultiplier"), + u64("systemDecimalsValue"), + u64("abortTradeFactor"), + u64("priceTickMultiplier"), + u64("priceTick"), + // Fees + u64("minSeparateNumerator"), + u64("minSeparateDenominator"), + u64("tradeFeeNumerator"), + u64("tradeFeeDenominator"), + u64("pnlNumerator"), + u64("pnlDenominator"), + u64("swapFeeNumerator"), + u64("swapFeeDenominator"), + // OutPutData + u64("baseNeedTakePnl"), + u64("quoteNeedTakePnl"), + u64("quoteTotalPnl"), + u64("baseTotalPnl"), + u64("poolOpenTime"), + u64("punishPcAmount"), + u64("punishCoinAmount"), + u64("orderbookToInitTime"), + u128("swapBaseInAmount"), + u128("swapQuoteOutAmount"), + u128("swapQuoteInAmount"), + u128("swapBaseOutAmount"), + u64("swapQuote2BaseFee"), + u64("swapBase2QuoteFee"), + + publicKey("baseVault"), + publicKey("quoteVault"), + publicKey("baseMint"), + publicKey("quoteMint"), + publicKey("lpMint"), + + publicKey("modelDataAccount"), + publicKey("openOrders"), + publicKey("marketId"), + publicKey("marketProgramId"), + publicKey("targetOrders"), + publicKey("owner"), + seq(u64("padding"), 64, "padding"), +]) + +module.exports = { + RAYDIUM_LIQUIDITY_STATE_LAYOUT_CLMM, RAYDIUM_STABLE_STATE_LAYOUT_V1, +} \ No newline at end of file diff --git a/projects/helper/yieldHelper.js b/projects/helper/yieldHelper.js index b8bf7a252c..452e56237e 100644 --- a/projects/helper/yieldHelper.js +++ b/projects/helper/yieldHelper.js @@ -1,8 +1,8 @@ +const ADDRESSES = require('./coreAssets.json') const abi = require("../tenfinance/abi.json") -const { getUniqueAddresses, log, } = require('../helper/utils') -const { getLPData, } = require('../helper/unknownTokens') -const { getChainTransform, getFixBalancesSync, } = require('../helper/portedTokens') +const { getUniqueAddresses, } = require('../helper/utils') +const { getLPData, getTokenPrices } = require('../helper/unknownTokens') const sdk = require('@defillama/sdk') const { unwrapLPsAuto } = require("./unwrapLPs") @@ -20,11 +20,13 @@ function yieldHelper({ getPoolIds, getTokens, getTokenBalances, + useDefaultCoreAssets = false, + getPoolsFn, }) { blacklistedTokens = getUniqueAddresses(blacklistedTokens) - nativeTokens = getUniqueAddresses(blacklistedTokens) + if (nativeToken) nativeTokens.push(nativeToken) + nativeTokens = getUniqueAddresses(nativeTokens) if (!project) throw new Error('Missing project name') - if (nativeToken) nativeTokens = [nativeToken] async function getAllTVL(api) { const key = `${project}-${chain}-${api.block}` @@ -32,21 +34,25 @@ function yieldHelper({ return allData[key] async function _getAllTVL() { - const transform = await getChainTransform(chain) - const fixBalances = getFixBalancesSync(chain) + const transform = i => `${chain}:${i.toLowerCase()}` const balances = { tvl: {}, pool2: {}, staking: {}, } - let poolInfos = await api.fetchList({ - lengthAbi: abis.poolLength || abi.poolLength, - itemAbi: abis.poolInfo || abi.poolInfo, - target: masterchef, - }) + let poolInfos + if (getPoolsFn) { + poolInfos = await getPoolsFn(api) + } else { + poolInfos = await api.fetchList({ + lengthAbi: abis.poolLength || abi.poolLength, + itemAbi: abis.poolInfo || abi.poolInfo, + target: masterchef, + }) + } - let _poolFilter = i => !blacklistedTokens.includes(i.want.toLowerCase()) && !blacklistedTokens.includes(i.strat.toLowerCase()) && i.strat !== '0x0000000000000000000000000000000000000000' + let _poolFilter = i => !blacklistedTokens.includes(i.want.toLowerCase()) && !blacklistedTokens.includes(i.strat?.toLowerCase()) && i.strat !== ADDRESSES.null let _getPoolIds = i => i.strat if (getPoolIds) _getPoolIds = getPoolIds @@ -70,7 +76,7 @@ function yieldHelper({ tokens = await getTokens({ poolInfos, api }) } else tokens = poolInfos.map(i => i.want.toLowerCase()) - const pairInfos = await getLPData({ lps: tokens, ...api }) + const pairInfos = await getLPData({ lps: tokens, ...api, abis, }) const blacklistedSet = new Set(...(blacklistedTokens.map(i => i.toLowerCase()))) tokens.forEach((token, i) => { if (nativeTokens.includes(token)) { @@ -86,19 +92,24 @@ function yieldHelper({ }) await Promise.all([ - unwrapLPsAuto({ api, balances: balances.tvl, transformAddress: transform, }), - unwrapLPsAuto({ api, balances: balances.pool2, transformAddress: transform, }), + unwrapLPsAuto({ api, balances: balances.tvl, transformAddress: transform, abis, }), + unwrapLPsAuto({ api, balances: balances.pool2, transformAddress: transform, abis, }), ]) - fixBalances(balances.tvl) - fixBalances(balances.pool2) - fixBalances(balances.staking) + const lps = Object.keys(pairInfos) + if (lps.length && useDefaultCoreAssets) { + const { updateBalances } = await getTokenPrices({ lps, ...api, abis, useDefaultCoreAssets, }) + balances.tvl = await updateBalances(balances.tvl) + balances.pool2 = await updateBalances(balances.pool2) + balances.staking = await updateBalances(balances.staking) + } return balances } } return { + misrepresentedTokens: useDefaultCoreAssets, [chain]: { tvl: async (_, _b, _cb, { api }) => (await getAllTVL(api)).tvl, pool2: async (_, _b, _cb, { api }) => (await getAllTVL(api)).pool2, diff --git a/projects/heraswap/index.js b/projects/heraswap/index.js new file mode 100644 index 0000000000..485c0d0d80 --- /dev/null +++ b/projects/heraswap/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + onus: { + tvl: getUniTVL({ factory: '0x6CD368495D90b9Ba81660e2b35f7Ea2AcE2B8cD6', useDefaultCoreAssets: true }), + } +} \ No newline at end of file diff --git a/projects/here-staking/index.js b/projects/here-staking/index.js new file mode 100644 index 0000000000..e0d77de715 --- /dev/null +++ b/projects/here-staking/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { call } = require('../helper/chain/near') + +async function tvl() { + const here_balance = await call("storage.herewallet.near", 'ft_total_supply', {}); + return { + near: (here_balance / 1e24) + }; +} + +module.exports = { + near: { + tvl + }, + timetravel: false, +}; \ No newline at end of file diff --git a/projects/hexal/index.js b/projects/hexal/index.js index f655c43f03..043012525d 100644 --- a/projects/hexal/index.js +++ b/projects/hexal/index.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasury = "0xC06A7e21289E35eA94cE67C0f7AfAD4e972117D8"; const stakingContract = "0x2f6A0D592f7F24D71c4EcA815c94d43AbE190fc3"; const hexal = "0x57612d60b415ad812da9a7cf5672084796a4ab81"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], - ["0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", false], + [ADDRESSES.bsc.BUSD, false], + [ADDRESSES.bsc.USDC, false], ["0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", false], ["0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", false], - ["0x55d398326f99059ff775485246999027b3197955", false], - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], + [ADDRESSES.bsc.USDT, false], + [ADDRESSES.bsc.WBNB, false], ["0xc94364d0ffd3c015689f55e167ac359eb93c617e", true] ] diff --git a/projects/hidden-hand/index.js b/projects/hidden-hand/index.js new file mode 100644 index 0000000000..8f9deeb7af --- /dev/null +++ b/projects/hidden-hand/index.js @@ -0,0 +1,84 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { cachedGraphQuery } = require('../helper/cache') + +const protocol_contracts = { + ethereum: { + v1: { + distributor: "0x0b139682d5c9df3e735063f46fb98c689540cf3a", + vault: "0x9DDb2da7Dd76612e0df237B89AF2CF4413733212", + }, + v2: { + distributor: "0xa9b08B4CeEC1EF29EdEC7F9C94583270337D6416", + vault: "0xE00fe722e5bE7ad45b1A16066E431E47Df476CeC", + harvester: "0xd23aa7EdF42CD3Fc4CD391faAbc0c207B1c86542", + }, + }, + optimism: { + v1: { + distributor: "0x0b139682d5c9df3e735063f46fb98c689540cf3a", + vault: "0x9DDb2da7Dd76612e0df237B89AF2CF4413733212", + }, + v2: { + distributor: "0x7354BB6842E421773E7b78f8875A1B85991677c0", + vault: "0xa9b08B4CeEC1EF29EdEC7F9C94583270337D6416", + harvester: "0x4573F58461acd1a6C743d9CDE34A142Ca18B6873", + }, + }, + arbitrum: { + v2: { + distributor: "0x0A390DE04B7717B078CF5c8A7Eb891130d4a843b", + vault: "0x8d89593c199Cb763bDEF04529F978f82503E4669", + harvester: "0xcA795Dc6f668add4801D2B92cF36C8FBcBEb8Ac4", + }, + }, +}; + +const subgraphs = { + ethereum: { + v1: "https://api.thegraph.com/subgraphs/name/albuquerque-rafael/hidden-hand", + v2: "https://api.thegraph.com/subgraphs/name/albuquerque-rafael/hidden-hand-v2", + }, + optimism: { + v1: "https://api.thegraph.com/subgraphs/name/albuquerque-rafael/hidden-hand-v1-optimism", + v2: "https://api.thegraph.com/subgraphs/name/albuquerque-rafael/hidden-hand-v2-optimism", + }, + arbitrum: { + v2: "https://api.thegraph.com/subgraphs/name/albuquerque-rafael/hidden-hand-v2-arbitrum", + }, +}; + +async function getTokens(chain, version) { + const graphQuery = ` + { + tokens { + address + } + } + `; + + const { tokens } = await cachedGraphQuery(`hidden-hand/${chain}-${version}`, subgraphs[chain][version], graphQuery); + const addresses = tokens.map((token) => token.address); + + return addresses; +} + +async function tvl(ts, block, _, { api }) { + const { chain } = api + const ownerTokens = [] + + for (const version of Object.keys(protocol_contracts[chain])) { + const tokens = await getTokens(chain, version); + for (const owner of Object.values(protocol_contracts[chain][version])) { + ownerTokens.push([tokens, owner]) + } + } + + return sumTokens2({ api, ownerTokens, permitFailure: true, }); +} + +module.exports = { + methodology: `Sums bribe tokens deposited on Hidden Hand Reward Distributors, Bribe Vaults and Harvester contracts.`, + ethereum: { tvl }, + optimism: { tvl }, + arbitrum: { tvl }, +}; diff --git a/projects/holdstation/index.js b/projects/holdstation/index.js new file mode 100644 index 0000000000..b3998098a4 --- /dev/null +++ b/projects/holdstation/index.js @@ -0,0 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const vault = "0xaf08a9d918f16332F22cf8Dc9ABE9D9E14DdcbC2"; +const usdc = ADDRESSES.era.USDC; + +async function tvl(_, _b, _cb, { api }) { + return sumTokens2({ api, tokens: [usdc], owners: [vault] }); +} + +module.exports = { + era: { + tvl, + }, +}; diff --git a/projects/homecoin/index.js b/projects/homecoin/index.js index 0e0f855532..5d912559f5 100644 --- a/projects/homecoin/index.js +++ b/projects/homecoin/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens } = require("../helper/unwrapLPs"); const abi = require("./abi.json"); const BigNumber = require("bignumber.js"); const HOME = "0xb8919522331C59f5C16bDfAA6A121a6E03A91F62"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const USDC = ADDRESSES.ethereum.USDC; const HOME_START = 13313474 /** diff --git a/projects/honkswap/index.js b/projects/honkswap/index.js index b4628b5635..b3ecdb1906 100644 --- a/projects/honkswap/index.js +++ b/projects/honkswap/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const HONK = "0xF2d4D9c65C2d1080ac9e1895F6a32045741831Cd"; -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; +const WBCH = ADDRESSES.smartbch.WBCH; const FACTORY = "0x34D7ffF45108De08Ca9744aCdf2e8C50AAC1C73C"; module.exports = { diff --git a/projects/hop/index.js b/projects/hop/index.js index 9ee18e17d8..cf62bfc65d 100644 --- a/projects/hop/index.js +++ b/projects/hop/index.js @@ -1,14 +1,21 @@ const { chainExports } = require('../helper/exports') const { default: axios } = require('axios') const { sumTokens2 } = require('../helper/unwrapLPs') +const { getConfig } = require('../helper/cache') + +const chainMapping = { + xdai: 'gnosis', + arbitrum_nova: 'nova' +} +const getChainKey = chain => chainMapping[chain] ?? chain // node test.js projects/hop/index.js function chainTvl(chain) { return async (_, _b, {[chain]: block}) => { const toa = [] - const tokens = await axios('https://raw.githubusercontent.com/hop-protocol/hop/develop/packages/core/build/addresses/mainnet.json') - for (const tokenConstants of Object.values(tokens.data.bridges)) { - const chainConstants = (chain == 'xdai' ? tokenConstants['gnosis'] : tokenConstants[chain]) + const { bridges, bonders } = await getConfig('hop-protocol', 'https://raw.githubusercontent.com/hop-protocol/hop/develop/packages/core/build/addresses/mainnet.json') + for (const tokenConstants of Object.values(bridges)) { + const chainConstants = tokenConstants[getChainKey(chain)] if (chainConstants === undefined) continue @@ -17,7 +24,7 @@ function chainTvl(chain) { toa.push([token, bridge]) } if (chain === "ethereum") { - for (const bonder of Object.entries(tokens.data.bonders)) { + for (const bonder of Object.entries(bonders)) { const tokenName = bonder[0] let contractList = [] for (let i of Object.values(bonder[1])) { @@ -30,7 +37,7 @@ function chainTvl(chain) { } } for (const contract of contractList) { - const token = tokens.data.bridges[tokenName].ethereum.l1CanonicalToken + const token = bridges[tokenName].ethereum.l1CanonicalToken toa.push([token, contract]) } } @@ -39,4 +46,4 @@ function chainTvl(chain) { } } -module.exports = chainExports(chainTvl, ['ethereum', 'xdai', 'polygon', 'optimism', 'arbitrum']) \ No newline at end of file +module.exports = chainExports(chainTvl, ['ethereum', 'polygon', 'optimism', 'arbitrum', ...Object.keys(chainMapping)]) \ No newline at end of file diff --git a/projects/hope-swap/index.js b/projects/hope-swap/index.js new file mode 100644 index 0000000000..1c8fabe0c4 --- /dev/null +++ b/projects/hope-swap/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + ethereum: { + tvl: getUniTVL({ factory: '0x26F53fbADeEb777fb2A122dC703433d79241b64e', useDefaultCoreAssets: true, fetchBalances: true }), + }, +}; \ No newline at end of file diff --git a/projects/horizondex/index.js b/projects/horizondex/index.js new file mode 100644 index 0000000000..1b26ea1d43 --- /dev/null +++ b/projects/horizondex/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + linea: { + factory: "0x9Fe607e5dCd0Ea318dBB4D8a7B04fa553d6cB2c5", + fromBlock: 1150, + }, +}); \ No newline at end of file diff --git a/projects/hotfries/index.js b/projects/hotfries/index.js index 3d7a35cc06..d81e6f3e81 100644 --- a/projects/hotfries/index.js +++ b/projects/hotfries/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {staking} = require('../helper/staking') module.exports={ bsc:{ - tvl: staking("0x849741B79bc1618b46CF9ec600E94E771DEde601", "0xe9e7cea3dedca5984780bafc599bd69add087d56", "bsc") + tvl: staking("0x849741B79bc1618b46CF9ec600E94E771DEde601", ADDRESSES.bsc.BUSD, "bsc") } } \ No newline at end of file diff --git a/projects/houdiniswap/index.js b/projects/houdiniswap/index.js new file mode 100644 index 0000000000..837ba71d33 --- /dev/null +++ b/projects/houdiniswap/index.js @@ -0,0 +1,15 @@ +const { stakings } = require("../helper/staking") + +module.exports={ + ethereum:{ + tvl:()=>({}), + staking: stakings([ + "0x488B813ED84aB52857cA90ade050f8ca126bEda6", + "0xf9FA02cC165dBd70fF34d27b5AC9E0AE6D74D756", + "0xE42aDCB4B9F2e3E6acb70399c420Cb6D6795B09d", + "0xE3507B38342CCB9Aa03E5AF2deA6C1F54351F553", + "0xf7E1edF3E4EC64360aFB739EBD2c0F40A5CC57D3", + "0x979a7307Dd7Ba386b52F08a9A35a26807affbCC9" + ], "0x888cea2bbdd5d47a4032cf63668d7525c74af57a") + } +} \ No newline at end of file diff --git a/projects/hubble-exchange/index.js b/projects/hubble-exchange/index.js index 0c9353c4c2..659c0ec06b 100644 --- a/projects/hubble-exchange/index.js +++ b/projects/hubble-exchange/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const chain = 'avax' const toa = [ - ['0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e', '0x5c6fc0aaf35a55e7a43fff45575380bcedb5cbc2'], // USDC used for HUSD minting - ['0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', '0x7648675ca85dfb9e2f9c764ebc5e9661ef46055d'], // AVAX used as collateral - ['0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', '0x7648675ca85dfb9e2f9c764ebc5e9661ef46055d'], // WETH used as collateral + [ADDRESSES.avax.USDC, '0x5c6fc0aaf35a55e7a43fff45575380bcedb5cbc2'], // USDC used for HUSD minting + [ADDRESSES.avax.WAVAX, '0x7648675ca85dfb9e2f9c764ebc5e9661ef46055d'], // AVAX used as collateral + [ADDRESSES.avax.WETH_e, '0x7648675ca85dfb9e2f9c764ebc5e9661ef46055d'], // WETH used as collateral ] module.exports = { diff --git a/projects/hubble/index.js b/projects/hubble/index.js index ae4bebcb16..4ea4c00f83 100644 --- a/projects/hubble/index.js +++ b/projects/hubble/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/solana"); const ignoreBadTokens = true; @@ -9,7 +10,7 @@ async function tvl() { SRM: 'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt', RAY: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R', FTT: 'AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3', - WSOL: 'So11111111111111111111111111111111111111112', + WSOL: ADDRESSES.solana.SOL, MSOL: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', stSOL: '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj', LDO: 'HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p', @@ -18,7 +19,7 @@ async function tvl() { const collateralTokensAndOwners = Object.values(collateralTokens).map((mint) => [mint, collateralVaultAuthority]) const psmTokens = { - USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' + USDC: ADDRESSES.solana.USDC } const psmVaultAuthority = '8WrqMitrgjzfqaPJ5PK6X3VT6B1Z8rDgQQny2aWwvJ8q' const psmTokensAndOwners = Object.values(psmTokens).map((mint) => [mint, psmVaultAuthority]) diff --git a/projects/hummus/constants.js b/projects/hummus/constants.js index 0e2d384483..6b780dd5b4 100644 --- a/projects/hummus/constants.js +++ b/projects/hummus/constants.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /** * lp token addresses */ @@ -14,12 +15,12 @@ const USD2_MAI_LP = "0x3Eaa426861a283F0E46b6411aeB3C3608B090E0e"; /** * token addresses */ -const mUSDC = "0xEA32A96608495e54156Ae48931A7c20f0dcc1a21"; -const mUSDT = "0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC"; +const mUSDC = ADDRESSES.metis.m_USDC; +const mUSDT = ADDRESSES.metis.m_USDT; const mDAI = "0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0"; const mBUSD = "0xb809cda0c2f79f43248C32b5DcB09d5cD26BbF10" -const DAI = "0x4651B38e7ec14BB3db731369BFE5B08F2466Bd0A"; // deprecated -const MAI = "0xdFA46478F9e5EA86d57387849598dbFB2e964b02" +const DAI = ADDRESSES.metis.DAI; // deprecated +const MAI = ADDRESSES.moonbeam.MAI module.exports = { mBUSD: { diff --git a/projects/hundredfinance/index.js b/projects/hundredfinance/index.js index 401499d1cf..54510aaca7 100644 --- a/projects/hundredfinance/index.js +++ b/projects/hundredfinance/index.js @@ -1,17 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {compoundExports, compoundExportsWithAsyncTransform} = require('../helper/compound') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const comptroller = "0x0f390559f258eb8591c8e31cf0905e97cf36ace2" -const usdcEth = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" -const usdcFantom = "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75" -const usdcArbitrum = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" +const usdcEth = ADDRESSES.ethereum.USDC +const usdcFantom = ADDRESSES.fantom.USDC +const usdcArbitrum = ADDRESSES.arbitrum.USDC -const daiEth = "0x6b175474e89094c44da98b954eedeac495271d0f" -const daiFantom = "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e" +const daiEth = ADDRESSES.ethereum.DAI +const daiFantom = ADDRESSES.fantom.DAI -const usdtEth = "0xdac17f958d2ee523a2206206994597c13d831ec7" -const usdtArbitrum = "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9" +const usdtEth = ADDRESSES.ethereum.USDT +const usdtArbitrum = ADDRESSES.arbitrum.USDT const usdcFantomBAMM = "0xEDC7905a491fF335685e2F2F1552541705138A3D" const daiFantomBAMM = "0x6d62d6Af9b82CDfA3A7d16601DDbCF8970634d22" @@ -64,12 +65,12 @@ module.exports={ [1681541920, "Protocol hacked (oc Optimism)"], ], - ethereum:compoundExports(comptroller, "ethereum", "0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"), - arbitrum:tvlWithBamm(comptroller, "arbitrum", "0x8e15a22853A0A60a0FBB0d875055A8E66cff0235", "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"), - fantom:tvlWithBamm(comptroller, "fantom", "0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D", "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"), - harmony:compoundExportsWithAsyncTransform(comptroller, "harmony", "0xbb93C7F378B9b531216f9aD7b5748be189A55807", "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a"), + ethereum:compoundExports(comptroller, "ethereum", "0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D", ADDRESSES.ethereum.WETH), + arbitrum:tvlWithBamm(comptroller, "arbitrum", "0x8e15a22853A0A60a0FBB0d875055A8E66cff0235", ADDRESSES.arbitrum.WETH), + fantom:tvlWithBamm(comptroller, "fantom", "0xfCD8570AD81e6c77b8D252bEbEBA62ed980BD64D", ADDRESSES.fantom.WFTM), + harmony:compoundExportsWithAsyncTransform(comptroller, "harmony", "0xbb93C7F378B9b531216f9aD7b5748be189A55807", ADDRESSES.harmony.WONE), moonriver:compoundExportsWithAsyncTransform("0x7d166777bd19a916c2edf5f1fc1ec138b37e7391", "moonriver", "0xd6fcBCcfC375c2C61d7eE2952B329DcEbA2D4e10", "0x98878b06940ae243284ca214f92bb71a2b032b8a"), - xdai:compoundExportsWithAsyncTransform("0x6bb6ebCf3aC808E26545d59EA60F27A202cE8586", "xdai", "0x6eDCB931168C9F7C20144f201537c0243b19dCA4", "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d"), - polygon:compoundExportsWithAsyncTransform("0xedba32185baf7fef9a26ca567bc4a6cbe426e499", "polygon", "0xEbd7f3349AbA8bB15b897e03D6c1a4Ba95B55e31", "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"), - optimism:compoundExportsWithAsyncTransform("0x5a5755E1916F547D04eF43176d4cbe0de4503d5d", "optimism", "0x1A61A72F5Cf5e857f15ee502210b81f8B3a66263", "0x4200000000000000000000000000000000000006"), + xdai:compoundExportsWithAsyncTransform("0x6bb6ebCf3aC808E26545d59EA60F27A202cE8586", "xdai", "0x6eDCB931168C9F7C20144f201537c0243b19dCA4", ADDRESSES.xdai.WXDAI), + polygon:compoundExportsWithAsyncTransform("0xedba32185baf7fef9a26ca567bc4a6cbe426e499", "polygon", "0xEbd7f3349AbA8bB15b897e03D6c1a4Ba95B55e31", ADDRESSES.polygon.WMATIC_2), + optimism:compoundExportsWithAsyncTransform("0x5a5755E1916F547D04eF43176d4cbe0de4503d5d", "optimism", "0x1A61A72F5Cf5e857f15ee502210b81f8B3a66263", ADDRESSES.tombchain.FTM), } diff --git a/projects/hunnyfinance/index.js b/projects/hunnyfinance/index.js index 51ceb1db88..0e040bb768 100644 --- a/projects/hunnyfinance/index.js +++ b/projects/hunnyfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { unwrapUniswapLPs, sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -53,10 +54,10 @@ const dao = "0x650eC6f59b64AcAC97A33C1F2F34c646659FF8b4" const loveStaking = "0x31dd9Be51cC7A96359cAaE6Cb4f5583C89D81985" const treasury = "0x631Fb1f772b8A20e775D1d4F3F87BfCaBA317527"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ["0x9e8Ae3a26536582823Ef82c155B69637a4A753F8", true], // LOVE-BUSD Cake-LP - ["0x55d398326f99059fF775485246999027B3197955", false], // USDT - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], // WBNB + [ADDRESSES.bsc.USDT, false], // USDT + [ADDRESSES.bsc.WBNB, false], // WBNB ["0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", false], // CAKE ["0x565b72163f17849832a692a3c5928cc502f46d69", false], // HUNNY ] diff --git a/projects/huobi/index.js b/projects/huobi/index.js index 930ee55c8d..b9c5b0d2be 100644 --- a/projects/huobi/index.js +++ b/projects/huobi/index.js @@ -8,6 +8,7 @@ const config = { '1KVpuCfhftkzJ67ZUegaMuaYey7qni7pPj', //These 3 addresses has 48,555 #Bitcoin. This is only less than 3% of the total high value assets we have, including btc, usd, stablecoins, T-bills.. According to Justin Sun https://twitter.com/justinsuntron/status/1590311559242612743 '14XKsv8tT6tt8P8mfDQZgNF8wtN5erNu5D', + '1LXzGrDQqKqVBqxfGDUyhC6rTRBN5s8Sbj' ], }, ethereum: { @@ -54,7 +55,10 @@ const config = { }, eos: { owners: ['vuniyuoxoeub'], - } + }, + ripple: { + owners: ['rKUDvXFJMFu65LqPTH3Yfpii4rbKT9bSQT'], + }, } module.exports = cexExports(config) diff --git a/projects/hurricaneswap.js b/projects/hurricaneswap.js index f8ad1ddc0b..d89b079189 100644 --- a/projects/hurricaneswap.js +++ b/projects/hurricaneswap.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking, stakings } = require("./helper/staking"); @@ -5,7 +6,7 @@ const { getUniTVL } = require('./helper/unknownTokens') const masterChefV1 = "0x9984d70D5Ab32E8e552974A5A24661BFEfE81DbE"; const masterChefV2 = "0x1c9F36FE608190D1fe99e001b596c31871696b24"; -const AVAX = "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"; +const AVAX = ADDRESSES.avax.WAVAX; const stakingConttract_xhctBar = "0x75B797a0ed87F77bB546F3A3556F18fC35a01140"; const stakingConttract_shctBar = "0xE4aE2E8648B8E84c4A487a559b04e884B822a350"; diff --git a/projects/hydradex-v3/api.js b/projects/hydradex-v3/api.js new file mode 100644 index 0000000000..4645e33814 --- /dev/null +++ b/projects/hydradex-v3/api.js @@ -0,0 +1,7 @@ +const { getExports } = require('../helper/heroku-api') + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + ...getExports("hydradex-v3", ['hydra']), +} diff --git a/projects/hydradex-v3/index.js b/projects/hydradex-v3/index.js new file mode 100644 index 0000000000..f55e95c581 --- /dev/null +++ b/projects/hydradex-v3/index.js @@ -0,0 +1,27 @@ +const { blockQuery } = require('../helper/http') +const { getBlock } = require('../hydradex/getHydraV3SubgraphTvl') + +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 = { + misrepresentedTokens: true, + methodology: "We count liquidity on the dex, pulling data from subgraph", + 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/api.js b/projects/hydradex/api.js index 9b31da47f1..9a1b91f36f 100644 --- a/projects/hydradex/api.js +++ b/projects/hydradex/api.js @@ -1,3 +1,5 @@ + +const hydraExport = require('../hydradex.js') const { getExports } = require('../helper/heroku-api') module.exports = { diff --git a/projects/hydradex/getHydraV3SubgraphTvl.js b/projects/hydradex/getHydraV3SubgraphTvl.js new file mode 100644 index 0000000000..2f0373bde2 --- /dev/null +++ b/projects/hydradex/getHydraV3SubgraphTvl.js @@ -0,0 +1,22 @@ +const { graphQuery, } = require("../helper/http"); + +const HOURS_12 = 12 * 3600 + +async function getBlock(endpoint, timestamp) { + const params = { + timestamp_from: timestamp - HOURS_12 * 2, + timestamp_to: timestamp + HOURS_12 * 2, + } + 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 = { + getBlock, +}; diff --git a/projects/hyperliquid/index.js b/projects/hyperliquid/index.js index 752b72e1dd..69d940c35d 100644 --- a/projects/hyperliquid/index.js +++ b/projects/hyperliquid/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); module.exports = { arbitrum: { - tvl: sumTokensExport({ owner: '0xc67e9efdb8a66a4b91b1f3731c75f500130373a4', tokens: ['0xff970a61a04b1ca14834a43f5de4533ebddb5cc8'] }) + tvl: sumTokensExport({ owner: '0xc67e9efdb8a66a4b91b1f3731c75f500130373a4', tokens: [ADDRESSES.arbitrum.USDC] }) } } \ No newline at end of file diff --git a/projects/iTrustfinance/index.js b/projects/iTrustfinance/index.js index c709ae2d43..3b82c128a9 100644 --- a/projects/iTrustfinance/index.js +++ b/projects/iTrustfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -22,7 +23,7 @@ const erc20Tokens = [ //IDLE "0x875773784Af8135eA0ef43b5a374AaD105c5D39e", //WETH - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + ADDRESSES.ethereum.WETH, //VISR "0xf938424f7210f31df2aee3011291b658f872e91e", //BOND diff --git a/projects/ibcx/index.js b/projects/ibcx/index.js new file mode 100644 index 0000000000..f56f733457 --- /dev/null +++ b/projects/ibcx/index.js @@ -0,0 +1,42 @@ +const axios = require('axios') + +const contractAddresses = [ + "osmo1yhd9tzp09d833u7ray4pc6wwp72aewtt2xwakszn3lzlf2klnlwscjwhxt", // uibcx + "osmo1fw7wc4x7leyf3keud4zdhdnyaanw0sajudg5sgnr93ydjhzmxk6sx84rxe", + "osmo1xqw2sl9zk8a6pch0csaw78n4swg5ws8t62wc5qta4gnjxfqg6v2qcs243k", // stIBCX + "osmo1fd33mtk06awg0v2hhd6djcjvvzcv90s8u03qujcjnlu87wm65xjs305mr4", + "osmo1w2dqd98hzu4ydku5hhv3f0gc468jdlayrqeqedrjxwrq62m7yekqrgvlyu", + "osmo14klwqgkmackvx2tqa0trtg69dmy0nrg4ntq4gjgw2za4734r5seqjqm4gm", +] + +async function tvl() { + const { api } = arguments[3] + for (const contractAddress of contractAddresses) { + const contractBalances = (await axios.get(`https://lcd.osmosis.zone/cosmos/bank/v1beta1/balances/${contractAddress}`)).data.balances + for (const coin of contractBalances) { + // stUMEE not be listed on coingecko so we convert stUMEE to the corresponding amount of UMEE base on pool stUMEE/UMEE + if (coin.denom == "ibc/02F196DA6FD0917DD5FEA249EE61880F4D941EE9059E7964C5C9B50AF103800F") { + const spotPrice = (await axios.get(`https://lcd.osmosis.zone/osmosis/gamm/v2/pools/1035/prices?base_asset_denom=ibc/67795E528DF67C5606FC20F824EA39A6EF55BA133F4DC79C90A8C47A0901E17C"e_asset_denom=${coin.denom}`)).data.spot_price + coin.denom = "ibc/67795E528DF67C5606FC20F824EA39A6EF55BA133F4DC79C90A8C47A0901E17C" // UMEE + coin.amount = coin.amount * spotPrice + } + // stEVMOS not be listed on coingecko so we convert stEVMOS to the corresponding amount of EVMOS base on pool stEVMOS/EVMOS + if (coin.denom == "ibc/C5579A9595790017C600DD726276D978B9BF314CF82406CE342720A9C7911A01") { + const spotPrice = (await axios.get(`https://lcd.osmosis.zone/osmosis/gamm/v2/pools/922/prices?base_asset_denom=ibc/6AE98883D4D5D5FF9E50D7130F1305DA2FFA0C652D1DD9C123657C6B4EB2DF8A"e_asset_denom=${coin.denom}`)).data.spot_price + coin.denom = "ibc/6AE98883D4D5D5FF9E50D7130F1305DA2FFA0C652D1DD9C123657C6B4EB2DF8A" // EVMOS + coin.amount = coin.amount * spotPrice + } + api.add(coin.denom, coin.amount) + } + + } +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + methodology: "Total TVL on vaults", + osmosis: { + tvl, + }, +} \ No newline at end of file diff --git a/projects/ice-dao/index.js b/projects/ice-dao/index.js index 58a8facb74..09c22e9df5 100644 --- a/projects/ice-dao/index.js +++ b/projects/ice-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0x935AEf514141B0CA32849e9686d22CB8b6f1dCAF"; @@ -5,7 +6,7 @@ module.exports = ohmTvl(treasuryAddress, [ //MIM ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], //WAVAX - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], + [ADDRESSES.avax.WAVAX, false], // ICY MIM JLP ["0x453B5415Fe883f15686A5fF2aC6FF35ca6702628", true], // MEMO diff --git a/projects/icecreamswap/index.js b/projects/icecreamswap/index.js index 21d724c552..17f13c17f2 100644 --- a/projects/icecreamswap/index.js +++ b/projects/icecreamswap/index.js @@ -32,4 +32,10 @@ module.exports = { useDefaultCoreAssets: true, }) }, + telos: { + tvl: getUniTVL({ + factory: '0x9E6d21E759A7A288b80eef94E4737D313D31c13f', + useDefaultCoreAssets: true, + }) + }, }; diff --git a/projects/ichifarm/index.js b/projects/ichifarm/index.js index f9b7eef444..9d491c42b5 100644 --- a/projects/ichifarm/index.js +++ b/projects/ichifarm/index.js @@ -1,233 +1,117 @@ -const sdk = require("@defillama/sdk"); +const { getLogs } = require('../helper/cache/getLogs') +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); -const { transformBalances } = require('../helper/portedTokens') const abi = require("./abi.json"); -const { createIncrementArray } = require('../helper/utils'); -const { sumTokens2, unwrapUniswapV3NFTs } = require('../helper/unwrapLPs'); -const { GraphQLClient, gql } = require('graphql-request'); - +const { sumTokens2, } = require('../helper/unwrapLPs'); const ichiLegacy = "0x903bEF1736CDdf2A537176cf3C64579C3867A881"; const ichi = "0x111111517e4929D3dcbdfa7CCe55d30d4B6BC4d6"; const xIchi = "0x70605a6457B0A8fBf1EEE896911895296eAB467E"; -const tokenFactory = "0xD0092632B9Ac5A7856664eeC1abb6E3403a6A36a"; const farmContract = "0x275dFE03bc036257Cd0a713EE819Dbd4529739c8"; const ichiLending = "0xaFf95ac1b0A78Bd8E4f1a2933E373c66CC89C0Ce"; -const unilps = [ - // SLP - "0x9cD028B1287803250B1e226F0180EB725428d069", - // UNI-V2 lP - "0xd07D430Db20d2D7E0c4C11759256adBCC355B20C" -] const poolWithTokens = [ // BANCOR ["0x4a2F0Ca5E03B2cF81AebD936328CF2085037b63B", ["0x903bEF1736CDdf2A537176cf3C64579C3867A881", "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C"]], // ONE INCH ["0x1dcE26F543E591c27717e25294AEbbF59AD9f3a5", ["0x903bEF1736CDdf2A537176cf3C64579C3867A881", "0x111111111117dC0aa78b770fA6A738034120C302"]], // BALANCER - ["0x58378f5F8Ca85144ebD8e1E5e2ad95B02D29d2BB", ["0x903bEF1736CDdf2A537176cf3C64579C3867A881", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"]] + ["0x58378f5F8Ca85144ebD8e1E5e2ad95B02D29d2BB", ["0x903bEF1736CDdf2A537176cf3C64579C3867A881", ADDRESSES.ethereum.WETH]] ] -const graphUrl = { - 'ethereum': 'https://api.thegraph.com/subgraphs/name/ichi-org/v1', - 'polygon': 'https://api.thegraph.com/subgraphs/name/ichi-org/polygon-v1' -} - -const graphQuery = gql` -query { - ichiVaults { - id - tokenA - tokenB - } -} -`; - -async function getVaultsByGraph(chain = 'ethereum') { - const graphQLClient = new GraphQLClient(graphUrl[chain]); - - const data = await graphQLClient.request(graphQuery); - - const vaults = []; - data.ichiVaults.forEach( v => vaults.push({address: v.id, tokenA: v.tokenA, tokenB: v.tokenB})); - - return vaults; -} - -async function vaultBalances(block, chain = 'ethereum', oneTokenList){ - const vaults = await getVaultsByGraph(chain) - - const poolsCalls = vaults.map(i => ({ target: i.address })) - - const { output: vaultBalances } = await sdk.api.abi.multiCall({ - abi: abi.getTotalAmounts, - calls: poolsCalls, - chain, block, - }) - - const balances = {} - vaultBalances.forEach((data, i) => { - addBalance(vaults[i].tokenA, data.output.total0) - addBalance(vaults[i].tokenB, data.output.total1) - }) - - return balances; - - function addBalance(token, balance) { - if (oneTokenList.includes(token.toLowerCase())) - return; - sdk.util.sumSingleBalance(balances, token, balance) - } -} - -const oneFactory = { - 'ethereum': '0xD0092632B9Ac5A7856664eeC1abb6E3403a6A36a', - 'polygon': '0x101eB16BdbA37979a771c86e1CAAfbaDbABfc879' -} - -async function oneTokenBalances(block, chain='ethereum') { - - // get list of all oneTokens in system - const { output: oneTokenCount } = await sdk.api.abi.call({ - target: oneFactory[chain], - abi: abi.oneTokenCount, - chain, block, - }) - - const oneTokenParams = createIncrementArray(oneTokenCount).map(i => ({ params: i })) - const { output: oneTokens } = await sdk.api.abi.multiCall({ - target: oneFactory[chain], - abi: abi.oneTokenAtIndex, - calls: oneTokenParams, - chain, block, - }) - - const oneTokenList = oneTokens.map(i => ( i.output.toLowerCase() )) - - // get list of all tokens in the system - const { output: foreignTokenCount } = await sdk.api.abi.call({ - target: oneFactory[chain], - abi: abi.foreignTokenCount, - chain, block, - }) - - const foreignTokenParams = createIncrementArray(foreignTokenCount).map(i => ({ params: i})) - const { output: foreignTokens } = await sdk.api.abi.multiCall({ - target: oneFactory[chain], - abi: abi.foreignTokenAtIndex, - calls: foreignTokenParams, - chain, block, - }) - - const foreignTokenList = foreignTokens.map(i => (i.output)) - - // ICHI is not admited as foreign token to polygon oneToken Factory but it is used to back oneToken treasury - if (chain == 'polygon') { - foreignTokenList.push(ichi) - } - - // get list of all strategies in the system - const { output: moduleCount } = await sdk.api.abi.call({ - target: oneFactory[chain], - abi: abi.moduleCount, - chain, block, - }) - - const strategyParams = createIncrementArray(moduleCount).map(i => ({ params: i})) - const { output: moduleAtIndex } = await sdk.api.abi.multiCall({ - target: oneFactory[chain], - abi: abi.moduleAtIndex, - calls: strategyParams, - chain, block, - }) - - const modulesList = moduleAtIndex.map(i => ( {params: i.output })) - - const { output: moduleDetails } = await sdk.api.abi.multiCall({ - target: oneFactory[chain], - abi: abi.modules, - calls: modulesList, - chain, block, - }) - - const strategiesList = [] - moduleDetails.forEach((data, i) => { - if (data.output.moduleType == 2) { //modeuleType 2 are strategies - strategiesList.push(modulesList[i].params) - } - }) - - // get list of all owners of oneTokens - const ownerCalls = oneTokens.map(i => ( { target: i.output })) - const { output: oneTokenOwners } = await sdk.api.abi.multiCall({ - abi: abi.owner, - calls: ownerCalls, - chain, block, - }) - - const oneTokenOwnersList = oneTokenOwners.map(i => (i.output)) - - // create large list of tokens and owners list; - // owners are all onetokens, strategies, and owners of onetokens - // tokens are all tokens in the system but will exclude onetokens in the strategies - - const toa = [] - - oneTokenList.forEach( oneToken => foreignTokenList.forEach( foreignToken => toa.push([foreignToken, oneToken]))) - strategiesList.forEach( strategy => foreignTokenList.forEach( foreignToken => toa.push([foreignToken, strategy]))) - oneTokenOwnersList.forEach( owner => foreignTokenList.forEach( foreignToken => toa.push([foreignToken, owner]))) - - const balances = await sumTokens2({ tokensAndOwners: toa, block, chain, blacklistedTokens: oneTokenList }) - - const uniV3NFTHolders = [...strategiesList, ...oneTokenOwnersList] - - await unwrapUniswapV3NFTs({ balances, owners: uniV3NFTHolders, chain, block }) - - return { balances, oneTokenList }; -} - -async function tvl(timestamp, block) { - - const { balances, oneTokenList } = await oneTokenBalances(block) - - const vBalances = await vaultBalances(block, undefined, oneTokenList) - - for(var token in vBalances) - sdk.util.sumSingleBalance(balances, token, vBalances[token]) - - return balances -} - -async function polygonTvl(_, _b, { polygon: block }){ - const chain = 'polygon' - - const { balances, oneTokenList } = await oneTokenBalances(block, chain) - - const vBalances = await vaultBalances(block, chain, oneTokenList) - const vBalancesTransformed = await transformBalances(chain,vBalances) - for(var token in vBalancesTransformed) - sdk.util.sumSingleBalance(balances, token, vBalancesTransformed[token]) - - return balances; -} - module.exports = { methodology: "Tokens deposited to mint oneTokens excluding oneTokens , Vault deposits", misrepresentedTokens: true, + doublecounted: true, +} // node test.js projects/ichifarm/index.js + +const defaultEvent = 'event ICHIVaultCreated (address indexed sender, address ichiVault, address tokenA, bool allowTokenA, address tokenB, bool allowTokenB, uint24 fee, uint256 count)' +const defaultTopic = '0xde147f43b6837f282eee187234c866cf001806167325f3ea883e36bed0c16a20' + +const config = { ethereum: { - tvl, - pool2: async (_, block) => { - const toa = [ - ['0x9cd028b1287803250b1e226f0180eb725428d069', farmContract], - ['0xd07d430db20d2d7e0c4c11759256adbcc355b20c', farmContract], - ] - poolWithTokens.forEach(([o, tokens]) => tokens.forEach(t => toa.push([t, o]))) - return sumTokens2({ tokensAndOwners: toa, block, resolveLP: true, }) - }, - staking: stakings([xIchi, ichiLending] , ichiLegacy) + vaultConfigs: [ + { factory: '0x5a40DFaF8C1115196A1CDF529F97122030F26112', fromBlock: 13671610, }, + ], + oneFactory: '0xD0092632B9Ac5A7856664eeC1abb6E3403a6A36a', + }, + arbitrum: { + vaultConfigs: [ + { factory: '0xfBf38920cCbCFF7268Ad714ae5F9Fad6dF607065', fromBlock: 102858581, }, + ], + }, + bsc: { + vaultConfigs: [ + { factory: '0xbBB97d634460DACCA0d41E249510Bb741ef46ad3', fromBlock: 29702590, }, + ], }, polygon: { - tvl: polygonTvl + vaultConfigs: [ + { factory: '0x2d2c72c4dc71aa32d64e5142e336741131a73fc0', fromBlock: 25697834, }, + { factory: '0xb2f44D8545315cDd0bAaB4AC7233218b932a5dA7', fromBlock: 44370370, }, // v2-retro + ], + oneFactory: '0x101eB16BdbA37979a771c86e1CAAfbaDbABfc879', + }, +} + +Object.keys(config).forEach(chain => { + const { vaultConfigs = [], oneFactory } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const blacklistedTokens = [] + if (oneFactory) { + const oneTokens = await api.fetchList({ lengthAbi: abi.oneTokenCount, itemAbi: abi.oneTokenAtIndex, target: oneFactory }) + const oneTokenOwners = await api.multiCall({ abi: abi.owner, calls: oneTokens }) + const foreignTokens = await api.fetchList({ lengthAbi: abi.foreignTokenCount, itemAbi: abi.foreignTokenAtIndex, target: oneFactory }) + const modulesList = await api.fetchList({ lengthAbi: abi.moduleCount, itemAbi: abi.moduleAtIndex, target: oneFactory }) + const moduleDetails = await api.multiCall({ abi: abi.modules, calls: modulesList, target: oneFactory }) + + const strategiesList = [] + moduleDetails.forEach((data, i) => { + if (data.moduleType == 2) { //modeuleType 2 are strategies + strategiesList.push(modulesList[i]) + } + }) + if (api.chain === 'polygon') { + foreignTokens.push(ichi) + } + + blacklistedTokens.push(...oneTokens.map(i => i.toLowerCase())) + await sumTokens2({ api, tokens: foreignTokens, owners: [oneTokens, strategiesList].flat(), blacklistedTokens }) + const uniV3NFTHolders = [...strategiesList, ...oneTokenOwners] + + await sumTokens2({ api, owners: uniV3NFTHolders, resolveUniV3: true, blacklistedTokens, }) + } + + for (const { factory, fromBlock, topic = defaultTopic, eventAbi = defaultEvent } of vaultConfigs) { + const logs = await getLogs({ + api, + target: factory, + topics: [topic], + eventAbi: eventAbi, + onlyArgs: true, + fromBlock, + }) + const vaultBalances = await api.multiCall({ abi: abi.getTotalAmounts, calls: logs.map(l => l.ichiVault) }) + vaultBalances.forEach((b, i) => { + const { tokenA, tokenB } = logs[i] + if (!blacklistedTokens.includes(tokenA.toLowerCase())) api.add(tokenA, b.total0) + if (!blacklistedTokens.includes(tokenB.toLowerCase())) api.add(tokenB, b.total1) + }) + } + + return api.getBalances() + } } -} // node test.js projects/ichifarm/index.js \ No newline at end of file +}) + +module.exports.ethereum.pool2 = async (_, block) => { + const toa = [ + ['0x9cd028b1287803250b1e226f0180eb725428d069', farmContract], + ['0xd07d430db20d2d7e0c4c11759256adbcc355b20c', farmContract], + ] + poolWithTokens.forEach(([o, tokens]) => tokens.forEach(t => toa.push([t, o]))) + return sumTokens2({ tokensAndOwners: toa, block, }) +} + +module.exports.ethereum.staking = stakings([xIchi, ichiLending], ichiLegacy) diff --git a/projects/icpswap/index.js b/projects/icpswap/index.js new file mode 100644 index 0000000000..245162d3f0 --- /dev/null +++ b/projects/icpswap/index.js @@ -0,0 +1,27 @@ + +const { get } = require('../helper/http') +const { toUSDTBalances } = require('../helper/balances') +const { PromisePool } = require('@supercharge/promise-pool') + +module.exports = { + misrepresentedTokens: true, + icp: { tvl }, +} + +async function tvl() { + let tvl = 0 + const pairs = await get('https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/pairs') + + const { errors } = await PromisePool.withConcurrency(15) + .for(pairs) + .process(async ({ pool_id }) => { + const res = await get(`https://uvevg-iyaaa-aaaak-ac27q-cai.raw.ic0.app/pool_tvl?poolId=${pool_id}&limit=1`) + if (res.length > 0) + tvl += +res[0].tvlUSD + }) + + if (errors && errors.length) + throw errors[0] + + return toUSDTBalances(tvl) +} diff --git a/projects/ideamarket/index.js b/projects/ideamarket/index.js index 05a59fe23a..8ecc1adfe4 100644 --- a/projects/ideamarket/index.js +++ b/projects/ideamarket/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const stateContract = "0x4e908F706f8935f10C101Ea3D7B2DEfc78df284e" -const dai = "0x6b175474e89094c44da98b954eedeac495271d0f" +const dai = ADDRESSES.ethereum.DAI async function tvl(timestamp, ethBlock, chainBlocks) { const daiDeposited = await sdk.api.abi.call({ diff --git a/projects/idex/index.js b/projects/idex/index.js index a8c9e3a309..5934dddce8 100644 --- a/projects/idex/index.js +++ b/projects/idex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -14,7 +15,7 @@ const IDEX_POLYGON_CUSTODY_CONTRACT = "0x3bcc4eca0a40358558ca8d1bcd2d1dbde63eb46 ==================================================*/ async function tvl(_timestamp, block, chain) { - let tokens = ['0x0000000000000000000000000000000000000000'] + let tokens = [ADDRESSES.null] let owner switch (chain) { diff --git a/projects/idle/index.js b/projects/idle/index.js index 421d3da0c4..4f336a5c54 100644 --- a/projects/idle/index.js +++ b/projects/idle/index.js @@ -1,6 +1,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { eulerTokens } = require('../helper/tokenMapping') const { getLogs } = require('../helper/cache/getLogs') +const BigNumber = require("bignumber.js"); const contracts = { ethereum: { @@ -34,7 +35,8 @@ const contracts = { '0xa14ea0e11121e6e951e87c66afe460a00bcd6a16', // idleDAISafe ], cdos: [ - '0xF87ec7e1Ee467d7d78862089B92dd40497cBa5B8', + "0xF87ec7e1Ee467d7d78862089B92dd40497cBa5B8", // MATIC + "0xDcE26B2c78609b983cF91cCcD43E238353653b0E", // IdleCDO_clearpool_DAI ] }, polygon: { @@ -55,7 +57,9 @@ const trancheConfig = { const getCurrentAllocationsABI = 'function getCurrentAllocations() returns (address[] tokenAddresses, uint256[] amounts, uint256 total)' async function tvl(time, ethBlock, chainBlocks, { api }) { const { v1 = [], v3 = [], safe = [], cdos = [] } = contracts[api.chain] + const balances = {} const ownerTokens = [] + const [tokenAllocations, allTokens, token, tokenV3, tokenSafe, allocations] = await Promise.all([ api.multiCall({ abi: getCurrentAllocationsABI, calls: v3 }), api.multiCall({ abi: 'address[]:getAllAvailableTokens', calls: v1 }), @@ -70,16 +74,18 @@ async function tvl(time, ethBlock, chainBlocks, { api }) { aSafeTokens.forEach((v, i) => ownerTokens.push([[v], calls[i].target])) tokenSafe.forEach((v, i) => ownerTokens.push([[v], safe[i]])) - allTokens.forEach((tokens, i) => { - tokens.push(token[i]) - ownerTokens.push([tokens, v1[i]]) - }) - tokenAllocations.forEach((tokens, i) => { - tokens.tokenAddresses.push(tokenV3[i]) - ownerTokens.push([tokens.tokenAddresses, v3[i]]) - }) + // Load tokens decimals + const callsDecimals = token.map( t => ({ target: t, params: [] }) ) + const decimalsResults = await api.multiCall({abi: 'erc20:decimals', calls: callsDecimals}) + const tokensDecimals = decimalsResults.reduce( (tokensDecimals, decimals, i) => { + const call = callsDecimals[i] + tokensDecimals[call.target] = decimals + return tokensDecimals + }, {}) + + const trancheTokensMapping = {} + const blacklistedTokens = [...eulerTokens] - let blacklistedTokens = [...eulerTokens] const { factory, fromBlock } = trancheConfig[api.chain] ?? {} if (factory) { const logs = await getLogs({ @@ -91,16 +97,60 @@ async function tvl(time, ethBlock, chainBlocks, { api }) { fromBlock, }) cdos.push(...logs.map(i => i.proxy)) - const [strategyToken, token, aatrances, bbtrances] = await Promise.all(['address:strategyToken', "address:token", "address:AATranche", "address:BBTranche"].map(abi => api.multiCall({ abi, calls: cdos }))) + + const [strategyToken, token, aatrances, bbtrances, aaprices, bbprices] = await Promise.all(['address:strategyToken', "address:token", "address:AATranche", "address:BBTranche", "uint256:priceAA", "uint256:priceBB"].map(abi => api.multiCall({ abi, calls: cdos }))) blacklistedTokens.push(...cdos) blacklistedTokens.push(...aatrances) blacklistedTokens.push(...bbtrances) + + // Get CDOs contract values + const contractValue = await api.multiCall({ abi: 'uint256:getContractValue', calls: cdos }) cdos.forEach((cdo, i) => { - ownerTokens.push([[strategyToken[i], token[i]], cdo]) + const tokenDecimals = tokensDecimals[token[i]] || 18 + trancheTokensMapping[aatrances[i]] = { + token: token[i], + decimals: tokenDecimals, + price: BigNumber(aaprices[i]).div(`1e${tokenDecimals}`).toFixed() + } + trancheTokensMapping[bbtrances[i]] = { + token: token[i], + decimals: tokenDecimals, + price: BigNumber(bbprices[i]).div(`1e${tokenDecimals}`).toFixed() + } + // Get CDOs underlying tokens balances + balances[token[i]] = BigNumber(balances[token[i]] || 0).plus(BigNumber(contractValue[i] || 0)) + }) + } + + const trancheTokensBalancesCalls = [] + + allTokens.forEach((tokens, i) => { + tokens.push(token[i]) + const blackListedTrancheTokens = tokens.filter( blacklistedToken => blacklistedTokens.includes(blacklistedToken) && trancheTokensMapping[blacklistedToken] ).forEach( trancheToken => { + trancheTokensBalancesCalls.push({ target: trancheToken, params: [v1[i]] }) + }) + ownerTokens.push([tokens, v1[i]]) + }) + + tokenAllocations.forEach((tokens, i) => { + tokens.tokenAddresses.push(tokenV3[i]) + ownerTokens.push([tokens.tokenAddresses, v3[i]]) + }) + + // Process tranche tokens BY balances + if (trancheTokensBalancesCalls.length){ + const trancheTokensBalancesResults = await api.multiCall({ abi: 'erc20:balanceOf', calls: trancheTokensBalancesCalls }) + trancheTokensBalancesResults.forEach( (trancheTokenBalance, i) => { + const trancheToken = trancheTokensBalancesCalls[i].target + const decimals = trancheTokensMapping[trancheToken].decimals + const trancheTokenPrice = trancheTokensMapping[trancheToken].price || 1 + const underlyingToken = trancheTokensMapping[trancheToken].token + const underlyingTokenBalance = BigNumber(trancheTokenBalance || 0).times(trancheTokenPrice).div(`1e18`).times(`1e${decimals}`).toFixed(0) + balances[underlyingToken] = BigNumber(balances[underlyingToken] || 0).plus(underlyingTokenBalance) }) } - return sumTokens2({ api, ownerTokens, blacklistedTokens, }) + return sumTokens2({ api, balances, ownerTokens, blacklistedTokens, }) } module.exports = { diff --git a/projects/ifpool/index.js b/projects/ifpool/index.js index a69f8cfed9..6716432b65 100644 --- a/projects/ifpool/index.js +++ b/projects/ifpool/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); -const validatorContract = "0x0000000000000000000000000000000000001000"; +const validatorContract = ADDRESSES.findora.FRA; const validatorAddress = "0xb0dC7A676Ab09868eBef78E16e6AEA9e79F0f9Cf"; const CHAIN = "csc"; diff --git a/projects/illuminate-fi/index.js b/projects/illuminate-fi/index.js index a011f782dc..b541fe9699 100644 --- a/projects/illuminate-fi/index.js +++ b/projects/illuminate-fi/index.js @@ -14,21 +14,27 @@ async function tvl(_, _b, _cb, { api, }) { const calls = createMarketLogs.map(i => ({ params: [i.underlying, +i.maturity] })) const pools = await api.multiCall({ abi: 'function pools(address, uint256) view returns (address)', calls, target: market }) - // Get the TVL of the base (using the shares token balance) + // Get the TVL of the base (using the shares token balance) - this counts the amount of base tokens locked in the AMM const baseTokens = await api.multiCall({ abi: 'address:baseToken', calls: pools }) const sharesTokens = await api.multiCall({ abi: 'address:sharesToken', calls: pools }) const ownerTokens = pools.map((v, i) => [[baseTokens[i], sharesTokens[i]], v]) await sumTokens2({ api, ownerTokens, }) - // Get the TVL of the PTs in the pool + // Get the TVL of the PTs - this counts the value of the iPTs lent out const principalTokens = await api.multiCall({ abi: 'address:fyToken', calls: pools }) const principalTokenDecimals = await api.multiCall({ abi: 'uint256:decimals', calls: pools }) const oneCalls = principalTokenDecimals.map((v, i) => ({ params: 10 ** v, target: pools[i] })) - const balanceOfCalls = pools.map((v, i) => ({ params: v, target: principalTokens[i] })) - const principalTokenPrices = await api.multiCall({ abi: 'function sellFYTokenPreview(uint128) view returns (uint128)', calls: oneCalls }) - const principalTokenBalances = await api.multiCall({ abi: 'erc20:balanceOf', calls: balanceOfCalls }) + let principalTokenPrices = await api.multiCall({ abi: 'function sellFYTokenPreview(uint128) view returns (uint128)', calls: oneCalls, permitFailure: true }) + let i = 0 + for (const pt of principalTokenPrices) { + if (!pt) { + principalTokenPrices[i] = await api.call({ abi: 'function unwrapPreview(uint256) view returns (uint256)', ...oneCalls[i] }) + } + i++ + } + const principalTokenSupplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: principalTokens }) - principalTokenBalances.forEach((balance, i) => api.add(baseTokens[i], balance * +principalTokenPrices[i] / 10 ** principalTokenDecimals[i])) + principalTokenSupplies.forEach((supply, i) => api.add(baseTokens[i], supply * +principalTokenPrices[i] / 10 ** principalTokenDecimals[i])) } module.exports = { diff --git a/projects/illuvium/index.js b/projects/illuvium/index.js index bf075b9fb9..f891a37210 100644 --- a/projects/illuvium/index.js +++ b/projects/illuvium/index.js @@ -1,47 +1,30 @@ -const {sumTokensAndLPs} = require('../helper/unwrapLPs') +const { api } = require("@defillama/sdk") -const slp = "0x6a091a3406E0073C3CD6340122143009aDac0EDa" -const ilvstk = "0x25121EDDf746c884ddE4619b573A7B10714E2a36" -const ilv = "0x767fe9edc9e0df98e07454847909b5e959d7ca0e" -const slpstk = "0x8B4d8443a0229349A9892D4F7CbE89eF5f843F72" -const snxstk = "0x9898d72c2901D09E72A426d1c24b6ab90eB100e7" -const snx = "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f" -const axsstk = "0x099A3B242dceC87e729cEfc6157632d7D5F1c4ef" -const axs = "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b" +const { staking } = require("../helper/staking") -async function getTvl(tokens, block){ - const balances = {} - await sumTokensAndLPs(balances, tokens, block) +const ILV_POOL_V2_ADDRESS = "0x7f5f854FfB6b7701540a00C69c4AB2De2B34291D" +const ILV_TOKEN_ADDRESS = "0x767FE9EDC9E0dF98E07454847909b5E959D7ca0E" +const SLP_TOKEN_ADDRESS = "0x6a091a3406E0073C3CD6340122143009aDac0EDa" +const LP_POOL_V1_ADDRESS = "0x8B4d8443a0229349A9892D4F7CbE89eF5f843F72" +const LP_POOL_V2_ADDRESS = "0xe98477bDc16126bB0877c6e3882e3Edd72571Cc2" - return balances -} - -async function staking(timestamp, block) { - return getTvl([ - [ilv, ilvstk], - ], block) -} - -async function pool2(timestamp, block) { - return getTvl([ - [slp, slpstk, true], - ], block) -} +async function ilvStaking() { + const { output: ilvPoolTvl } = await api.abi.call({ + abi: "function getTotalReserves() view returns (uint256 totalReserves)", + target: ILV_POOL_V2_ADDRESS, + }) -async function tvl(timestamp, block) { - return getTvl([ - [snx, snxstk], - [axs, axsstk] - ], block) + return { + [ILV_TOKEN_ADDRESS]: ilvPoolTvl, + } } module.exports = { timetravel: true, - methodology: `Counts the tokens staked on the flash pools, currently SNX on 0x9898d72c2901D09E72A426d1c24b6ab90eB100e7 and AXS on 0x099A3B242dceC87e729cEfc6157632d7D5F1c4ef - pool2 are the SLP tokens locked on 0x8B4d8443a0229349A9892D4F7CbE89eF5f843F72 and staking are the ILV tokens on 0x25121EDDf746c884ddE4619b573A7B10714E2a36`, + methodology: `Based on ILV reserves in the ILVPool contract and SLP in SushiLPPool contracts.`, ethereum:{ - tvl, - pool2, - staking + tvl: () => 0, + pool2: staking([LP_POOL_V1_ADDRESS, LP_POOL_V2_ADDRESS], SLP_TOKEN_ADDRESS), + staking: ilvStaking, }, } \ No newline at end of file diff --git a/projects/immortal/api.js b/projects/immortal/api.js new file mode 100644 index 0000000000..a2a6e489ab --- /dev/null +++ b/projects/immortal/api.js @@ -0,0 +1,8 @@ +const index = require('./index') + +module.exports = { + celo: { + tvl: () => 0, + staking: index.celo.staking, + } +} \ No newline at end of file diff --git a/projects/immortal/index.js b/projects/immortal/index.js index fe36dad803..ff0a7601f9 100644 --- a/projects/immortal/index.js +++ b/projects/immortal/index.js @@ -1,13 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const immo = "0xE685d21b7B0FC7A248a6A8E03b8Db22d013Aa2eE"; const stakingContract = "0xA02F4e8dE9A226E8f2F2fe27B9b207fC85CFEED2"; const treasury = "0xe2adCd126b4275cD75e72Ff7ddC8cF7e43fc13D4"; const tokens = [ - ["0x918146359264C492BD6934071c6Bd31C854EDBc3", false], // CUSD + [ADDRESSES.celo.mcUSD, false], // CUSD ["0x7d63809EBF83EF54c7CE8dEd3591D4E8Fc2102eE", true] // IMMO-CUSD ] -module.exports = { - ...ohmTvl(treasury, tokens, "celo", stakingContract, immo) -} +module.exports =ohmTvl(treasury, tokens, "celo", stakingContract, immo) diff --git a/projects/immutablex/index.js b/projects/immutablex/index.js new file mode 100644 index 0000000000..b13c4128c7 --- /dev/null +++ b/projects/immutablex/index.js @@ -0,0 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require('../helper/sumTokens'); + +const owners = [ + '0x5FDCCA53617f4d2b9134B29090C87D01058e27e9', +]; + +const tokens = [ + ADDRESSES.null, + ADDRESSES.ethereum.USDC, + "0xeD35af169aF46a02eE13b9d79Eb57d6D68C1749e", // OMI + "0xccC8cb5229B0ac8069C51fd58367Fd1e622aFD97", // GODS +]; + +module.exports = { + ethereum: { tvl: sumTokensExport({ owners, tokens }) }, +}; diff --git a/projects/impact-market/index.js b/projects/impact-market/index.js index 98d8d9866b..cfcb95a47c 100644 --- a/projects/impact-market/index.js +++ b/projects/impact-market/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const PACTTokenAddress = "0x46c9757C5497c5B1f2eb73aE79b6B67D119B0B58" -const CELOTokenAddress = "0x471EcE3750Da237f93B8E339c536989b8978a438" +const CELOTokenAddress = ADDRESSES.celo.CELO const ARITokenAddress = "0x20677d4f3d0F08e735aB512393524A3CfCEb250C" const pactDelegatorContract = "0x8f8BB984e652Cb8D0aa7C9D6712Ec2020EB1BAb4" diff --git a/projects/inbuilt-finance/index.js b/projects/inbuilt-finance/index.js index d9aa5e5283..c50b8bac67 100644 --- a/projects/inbuilt-finance/index.js +++ b/projects/inbuilt-finance/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); -const token_USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f"; -const token_USDT = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; -const token_Knit_KFT = "0xa0EEDa2e3075092d66384fe8c91A1Da4bcA21788"; +const token_USDC = ADDRESSES.telos.ETH; +const token_USDT = ADDRESSES.moonriver.USDT; +const token_Knit_KFT = ADDRESSES.kava.KFT; const masterchef = "0x68DB81eAB568174D54F3fd0d9e035eDe9AAEd3e2"; module.exports = { diff --git a/projects/indexcoop/index.js b/projects/indexcoop/index.js index 78fd23d14e..cd168d8a82 100644 --- a/projects/indexcoop/index.js +++ b/projects/indexcoop/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const sdk = require("@defillama/sdk") @@ -12,7 +13,7 @@ const gmiAddress = "0x47110d43175f7f2c2425e7d15792acc5817eb44f"; const icethAddress = "0x7c07f7abe10ce8e33dc6c5ad68fe033085256a84"; const dsETH = "0x341c05c0E9b33C0E38d64de76516b2Ce970bB3BE"; const aaveDebtToken = "0xf63b34710400cad3e044cffdcab00a0f32e33ecf"; -const USDC = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' +const USDC = ADDRESSES.ethereum.USDC const gtcETH = '0x36c833Eed0D376f75D1ff9dFDeE260191336065e' const sets = [ dpiAddress, diff --git a/projects/infy/index.js b/projects/infy/index.js index eee098fc6c..5a30ffef97 100644 --- a/projects/infy/index.js +++ b/projects/infy/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') async function tvlPolygon(time, ethB, { polygon: block }) { const escrows = ["0xCf311a6606c909Cc5E048FE1f3FF1e63dEec6a26", "0x4fF4C17F24d03Faf9d5097D7E71310AeF71a0f70", "0x9C5dA47ED0281aF302ED1E77a1B961ed980d5385"] const tokens = [ - "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", //weth - "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", //dai - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", //usdc - "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", //usdt + ADDRESSES.polygon.WETH_1, //weth + ADDRESSES.polygon.DAI, //dai + ADDRESSES.polygon.USDC, //usdc + ADDRESSES.polygon.USDT, //usdt "0x2e1AD108fF1D8C782fcBbB89AAd783aC49586756", //tusd ] return sumTokens2({ owners: escrows, tokens, chain: 'polygon', block, }) @@ -19,10 +20,10 @@ async function tvlKava(time, ethB, { kava: block }) { "0xEc12AB0306A3bbDa93aACC2BE931F8A8343bCEA3" ] const tokens = [ - "0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D", //weth - "0x765277EebeCA2e31912C9946eAe1021199B39C61", //dai - "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f", //usdc - "0xB44a9B6905aF7c801311e8F4E76932ee959c663C", //usdt + ADDRESSES.moonriver.USDC, //weth + ADDRESSES.shiden.ETH, //dai + ADDRESSES.telos.ETH, //usdc + ADDRESSES.moonriver.USDT, //usdt ] return sumTokens2({ owners: escrows, tokens, chain: 'kava', block, }) } diff --git a/projects/injective/index.js b/projects/injective/index.js index 4db5e76921..b3a9626f82 100644 --- a/projects/injective/index.js +++ b/projects/injective/index.js @@ -1,30 +1,32 @@ -const { sumTokensExport } = require('../helper/unwrapLPs') -const { tokensBare: tokens } = require('../helper/tokenMapping') +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') const newHolder = '0xf955c57f9ea9dc8781965feae0b6a2ace2bad6f3' module.exports = { ethereum: { - tvl: sumTokensExport({ owner: newHolder, tokens: [ - tokens.weth, - tokens.dai, - tokens.usdc, - tokens.usdt, - tokens.link, - tokens.wbtc , - '0xaaef88cea01475125522e117bfe45cf32044e238', - '0x4a220e6096b25eadb88358cb44068a3248254675', - '0xde4c5a791913838027a2185709e98c5c6027ea63', - '0x92d6c1e31e14520e676a687f0a93788b716beff5', - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', - '0xBB0E17EF65F82Ab018d8EDd776e8DD940327B28b', - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', - '0x4d224452801ACEd8B2F0aebE155379bb5D594381', - '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', - '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', - '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', - '0x45804880De22913dAFE09f4980848ECE6EcbAf78', - '0x6B3595068778DD592e39A122f4f5a5cF09C90fE2', - '0xc944E90C64B2c07662A292be6244BDf05Cda44a7', - ]}) + tvl: sumTokensExport({ + owner: newHolder, tokens: [ + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.LINK, + ADDRESSES.ethereum.WBTC, + '0xaaef88cea01475125522e117bfe45cf32044e238', + '0x4a220e6096b25eadb88358cb44068a3248254675', + '0xde4c5a791913838027a2185709e98c5c6027ea63', + '0x92d6c1e31e14520e676a687f0a93788b716beff5', + ADDRESSES.ethereum.UNI, + '0xBB0E17EF65F82Ab018d8EDd776e8DD940327B28b', + ADDRESSES.ethereum.STETH, + '0x4d224452801ACEd8B2F0aebE155379bb5D594381', + ADDRESSES.ethereum.MATIC, + ADDRESSES.ethereum.AAVE, + ADDRESSES.ethereum.SNX, + '0x45804880De22913dAFE09f4980848ECE6EcbAf78', + ADDRESSES.ethereum.SUSHI, + '0xc944E90C64B2c07662A292be6244BDf05Cda44a7' + ] + }) } } diff --git a/projects/ink-protocol/index.js b/projects/ink-protocol/index.js index 9575c7e4cd..f81a89d070 100644 --- a/projects/ink-protocol/index.js +++ b/projects/ink-protocol/index.js @@ -15,7 +15,7 @@ async function tvl() { module.exports = { methodology: 'TVL counts the UST that users deposited into Ink Protocol', terra: { - tvl + tvl: () => ({}), }, hallmarks:[ [1651881600, "UST depeg"], diff --git a/projects/insrt_finance/index.js b/projects/insrt_finance/index.js index 0ce0a09f40..ecf863c740 100644 --- a/projects/insrt_finance/index.js +++ b/projects/insrt_finance/index.js @@ -1,14 +1,17 @@ -const { sumTokens2 } = require('../helper/unwrapLPs') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') const fidenzavault = '0xfCEed70c8E9f38A0c3A0062D40d0Ab06493063a1' const rockvault = '0x185B6B13Be7cEfa99262AF1F78ae87213E4DDD3d' const baycvault2 = '0x417c53C3B63a03aeb614b7b625ae84Cfc7eecD1c' const squigglevault = '0x5D40A087cec071cd3b8A7AF4B45b3D56D6c3f952' -const insrtVaults = [ fidenzavault, rockvault, baycvault2, squigglevault ] +const penguvault = '0x8facab18b9f4cd1a9f90876290c9bfa238cd4e45' +const miladyvault = '0x861ff455dcd810895cb4050460e4b6a47fec3304' +const insrtVaults = [ fidenzavault, rockvault, baycvault2, squigglevault, penguvault, miladyvault ] +const vaulttokens = [nullAddress, '0xa3f5998047579334607c47a6a2889bf87a17fc02', '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d', '0xbd3531da5cf5857e7cfaa92426877b022e612cf8', '0x524cab2ec69124574082676e6f654a18df49a048', '0x062e691c2054de82f28008a8ccc6d7a1c8ce060d', '0x5Af0D9827E0c53E4799BB226655A1de152A425a5' ] async function tvl(_, _b, _cb, { api, }) { await vaultTvl(api, [punkvault, baycvault, ]) - return sumTokens2({ api, owners: insrtVaults , tokens: ['0xa3f5998047579334607c47a6a2889bf87a17fc02', '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d'], resolveArtBlocks: true, }) + return sumTokens2({ api, owners: insrtVaults , tokens: vaulttokens, resolveArtBlocks: true, }) } // ERC721 Vaults diff --git a/projects/insurace/index.js b/projects/insurace/index.js index 96af66a2e3..cbd0b055de 100644 --- a/projects/insurace/index.js +++ b/projects/insurace/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); @@ -33,7 +34,7 @@ async function eth(timestamp, ethBlock) { _tvlList.forEach((element) => { let address = element.input.params[0].toLowerCase(); if (address == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { - address = "0x0000000000000000000000000000000000000000"; + address = ADDRESSES.null; } let balance = element.output; if (BigNumber(balance).toNumber() <= 0) { @@ -78,7 +79,7 @@ async function bsc(timestamp, ethBlock, chainBlocks){ _tvlList.forEach((element) => { let address = element.input.params[0].toLowerCase(); if (address == "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") { - address = "bsc:0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"; + address = "bsc:" + ADDRESSES.bsc.WBNB; }else if (address == "0x3192ccddf1cdce4ff055ebc80f3f0231b86a7e30") { address = "0x544c42fbb96b39b21df61cf322b5edc285ee7429"; }else{ @@ -110,7 +111,7 @@ async function polygon(timestamp, ethBlock, chainBlocks) { _tvlList.forEach((element) => { let address = element.input.params[0].toLowerCase(); if(address === "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"){ - address = "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270" + address = ADDRESSES.polygon.WMATIC_2 } let balance = element.output; sdk.util.sumSingleBalance(balances, 'polygon:'+address, balance) @@ -136,7 +137,7 @@ async function avax(timestamp, ethBlock, chainBlocks) { _tvlList.forEach((element) => { let address = element.input.params[0].toLowerCase(); if(address === "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"){ - address = "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" + address = ADDRESSES.avax.WAVAX } let balance = element.output; sdk.util.sumSingleBalance(balances, address===INSUR?INSUR:'avax:'+address, balance) diff --git a/projects/insuredao/index.js b/projects/insuredao/index.js index a6ded6b1ee..110466914c 100644 --- a/projects/insuredao/index.js +++ b/projects/insuredao/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokensAndLPs, } = require('../helper/unwrapLPs'); // addresses pools -const usdc = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const usdc = ADDRESSES.ethereum.USDC; const insure = "0xd83AE04c9eD29d6D3E6Bf720C71bc7BeB424393E"; const VotingEscrow = "0x3dc07E60ecB3d064d20c386217ceeF8e3905916b"; diff --git a/projects/intercroneswap/index.js b/projects/intercroneswap/index.js new file mode 100644 index 0000000000..d03be82b2c --- /dev/null +++ b/projects/intercroneswap/index.js @@ -0,0 +1,29 @@ +const sdk = require('@defillama/sdk') +const { getUniTVL } = require('../helper/unknownTokens.js') + +const TRON_FACTORY_V2 = 'TPvaMEL5oY2gWsJv7MDjNQh2dohwvwwVwx' +const TRON_FACTORY_V1 = 'TJL9Tj2rf5WPUkaYMzbvWErn6M8wYRiHG7' +const factories = { + bsc: "0xFa51B0746eb96deBC619Fd2EA88d5D8B43BD8230", + bittorrent: "0x0cEE0dFb5C680e3CcAA46FA28D5057f204E24F0a", +} + +function chainTvl(chain) { + module.exports[chain] = { + tvl: getUniTVL({ factory: factories[chain], useDefaultCoreAssets: true, }) + } +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true +} + +Object.keys(factories).map(chainTvl) + +module.exports.tron = { + tvl: sdk.util.sumChainTvls([ + getUniTVL({ factory: TRON_FACTORY_V1, useDefaultCoreAssets: true, }), + getUniTVL({ factory: TRON_FACTORY_V2, useDefaultCoreAssets: true, }), + ]) +} \ No newline at end of file diff --git a/projects/interest-protocol/index.js b/projects/interest-protocol/index.js new file mode 100644 index 0000000000..084c407d8b --- /dev/null +++ b/projects/interest-protocol/index.js @@ -0,0 +1,16 @@ +const { dexExport } = require('../helper/chain/sui'); + +const getTokens = (pool) => { + const type = pool.type.split('Pool'); + const poolArgs = type[1]; + const tokens = poolArgs.split(','); + return [tokens[1].trim(), tokens[2].split('>')[0].trim()]; +}; + +module.exports = dexExport({ + account: '0x108779144605a44e4b5447118b711f0b17adf6168cc9b08551d33daca58098e3', + poolStr: 'core::Pool', + token0Reserve: i => i.fields.balance_x, + token1Reserve: i => i.fields.balance_y, + getTokens +}); \ No newline at end of file diff --git a/projects/interport-finance/index.js b/projects/interport-finance/index.js index 9e23c1d0eb..def75747fb 100644 --- a/projects/interport-finance/index.js +++ b/projects/interport-finance/index.js @@ -1,20 +1,26 @@ const { sumTokens2 } = require('../helper/unwrapLPs'); const { staking } = require('../helper/staking'); -const vault = '0xEc8DDCb498b44C35EFaD7e5e43E0Caf6D16A66E8'; +const usdtVault = '0xEc8DDCb498b44C35EFaD7e5e43E0Caf6D16A66E8'; +const usdcVault = '0x5b45B414c6CD2a3341bE70Ba22BE786b0124003F'; +const defaultVaults = [usdtVault, usdcVault]; +const config = { + era: { vaults: ['0xc724832c5ed81599aE3E4EBC0eC4f87A285B5838'] }, +} module.exports = { - methodology: 'Interport TVL is calculated by summing the USDT balance of the vaults contracts, ITP token balance in the ITP Revenue Share contract and LP token balance in the LP Revenue Share contract.', + methodology: 'Interport TVL is calculated by summing the USDT and USDC balance of the vaults contracts, ITP token balance in the ITP Revenue Share contract and LP token balance in the LP Revenue Share contract.', }; -['ethereum', 'avax', 'bsc', 'fantom', 'arbitrum', 'polygon'].forEach(chain => { +['ethereum', 'avax', 'bsc', 'fantom', 'arbitrum', 'polygon', 'polygon_zkevm', 'era'].forEach(chain => { module.exports[chain] = { tvl: async (_, _1, _2, { api }) => { - const token = await api.call({ abi: 'address:asset', target: vault}) - return sumTokens2({ api, owner: vault, tokens: [token]}) + const vaults = config[chain]?.vaults || defaultVaults + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + return sumTokens2({ api, tokensAndOwners2: [tokens, vaults]}) } } -}) +}); module.exports.ethereum.staking = staking('0x5DC6796Adc2420BD0f48e05f70f34B30F2AaD313', '0x2b1D36f5B61AdDAf7DA7ebbd11B35FD8cfb0DE31') -module.exports.ethereum.pool2 = staking('0x5F51A04c271C395994F156172cDe451a0188Ca75', '0x152E2502c22F73a7493df8B856836efBc69E3718') \ No newline at end of file +module.exports.ethereum.pool2 = staking('0x5F51A04c271C395994F156172cDe451a0188Ca75', '0x152E2502c22F73a7493df8B856836efBc69E3718') diff --git a/projects/inuswap/index.js b/projects/inuswap/index.js index 0a20aeec9a..0d55175478 100644 --- a/projects/inuswap/index.js +++ b/projects/inuswap/index.js @@ -5,6 +5,9 @@ const { const chain = 'dogechain' module.exports = { + hallmarks: [ + [1663200000, "Rug Pull"] + ], dogechain: { tvl: getUniTVL({ chain, diff --git a/projects/invar-finance/index.js b/projects/invar-finance/index.js index a2f8b4f758..a909807781 100644 --- a/projects/invar-finance/index.js +++ b/projects/invar-finance/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abis = require("./abis.js"); const BigNumber = require("bignumber.js"); -const USDC_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; +const USDC_ADDRESS = ADDRESSES.ethereum.USDC; const RE_NFT = "0x502818ec5767570F7fdEe5a568443dc792c4496b"; const INVARIA2222 = "0x10a92B12Da3DEE9a3916Dbaa8F0e141a75F07126"; diff --git a/projects/inverse-finance-firm/index.js b/projects/inverse-finance-firm/index.js index edf5a21bc3..a6bad2bfe7 100644 --- a/projects/inverse-finance-firm/index.js +++ b/projects/inverse-finance-firm/index.js @@ -2,6 +2,7 @@ const abi = require("./abi.json"); const { getLogs } = require('../helper/cache/getLogs') const { sumTokens2 } = require('../helper/unwrapLPs') +const sdk = require("@defillama/sdk") // Firm const firmStart = 16159015; @@ -30,8 +31,13 @@ async function tvl(timestamp, block, _, { api }) { }) ); escrows = escrows.flat() - const tokens = await api.multiCall({ abi: 'address:token', calls: escrows}) - return sumTokens2({ api, tokensAndOwners: tokens.map((t, i) => ([t, escrows[i]]))}) + const tokens = await api.multiCall({ abi: 'address:token', calls: escrows}) + const tokenBalances = await api.multiCall({ abi: 'uint256:balance', calls: escrows}) + const balances = {} + tokens.forEach((t,i)=>{ + sdk.util.sumSingleBalance(balances, t, tokenBalances[i]) + }) + return balances } module.exports = { diff --git a/projects/inverse/index.js b/projects/inverse/index.js index 18b4ec0aaf..65aeaeb582 100644 --- a/projects/inverse/index.js +++ b/projects/inverse/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -9,11 +10,11 @@ const anchorStart = 11915867; const comptroller = "0x4dcf7407ae5c07f8681e1659f626e114a7667339"; const ignore = ["0x7Fcb7DAC61eE35b3D4a51117A7c58D53f0a8a670"]; // anDOLA will be counted through the stabilizer const anETH = "0x697b4acAa24430F254224eB794d2a85ba1Fa1FB8"; -const wETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const wETH = ADDRESSES.ethereum.WETH; // Stabilizer const stabilizer = "0x7eC0D931AFFBa01b77711C2cD07c76B970795CDd"; -const dai = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; +const dai = ADDRESSES.ethereum.DAI; // Vaults const vaults = [ @@ -48,6 +49,7 @@ async function getAllUnderlying(block, tokens) { }) ), abi: abi["underlying"], + permitFailure: true, }) ).output; diff --git a/projects/invictus/index.js b/projects/invictus/index.js index c6b954e3ff..d1ce0d9e03 100644 --- a/projects/invictus/index.js +++ b/projects/invictus/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getTokenAccountBalance, getTokenBalance } = require('../helper/solana') async function staking() { @@ -10,7 +11,7 @@ async function staking() { const treasury = "6qfyGvoUqGB6AQ7xLc4pVwFNdgJSbAMkTtKkBXhLRiV1" async function tvl() { const [usdc,] = await Promise.all([ - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", //usdc + ADDRESSES.solana.USDC, //usdc ].map(t => getTokenBalance(t, treasury))) return { "usd-coin": usdc, diff --git a/projects/iotube/index.js b/projects/iotube/index.js index 41432eb30b..bda759defe 100644 --- a/projects/iotube/index.js +++ b/projects/iotube/index.js @@ -1,229 +1,25 @@ -const { request, gql } = require("graphql-request"); +const { sumTokens2 } = require('../helper/unwrapLPs') -const apiURL = "https://smart-graph.iotex.me/iotube/graphql"; - -const query = gql` - query ( - $iotexTokens: [String!]! - $ethTokens: [String!]! - $bscTokens: [String!]! - $polygonTokens: [String!]! - ) { - iotex: IoTeX { - chainId - CIOTX: ERC20(address: ["0x99B2B0eFb56E62E36960c20cD5ca8eC6ABD5557A"]) { - address - symbol - decimals - totalSupply - balance: market_cap - } - CYC: ERC20(address: ["0x4d7b88403aa2f502bf289584160db01ca442426c"]) { - address - symbol - decimals - totalSupply - balance: market_cap - } - Tokens: ERC20(address: $iotexTokens) { - address - symbol - decimals - totalSupply - balance: market_cap - } - TokenSafe: ERC20( - address: ["0xa00744882684c3e4747faefd68d283ea44099d03"] - ) { - address - symbol - decimals - balance: balanceUSD(account: "0xc4a29a94f12be03033daa4e6ce9b9678c26275a2") - } - } - ethereum: ETH { - chainId - CYC: ERC20(address: ["0x8861cfF2366C1128fd699B68304aD99a0764Ef9a"]) { - address - symbol - decimals - totalSupply - balance: market_cap - } - TokenSafe: ERC20(address: $ethTokens) { - address - symbol - decimals - balance: balanceUSD(account: "0xc2e0f31d739cb3153ba5760a203b3bd7c27f0d7a") - } - } - bsc: BSC { - chainId - CIOTX: ERC20(address: ["0x2aaF50869739e317AB80A57Bf87cAA35F5b60598"]) { - address - symbol - decimals - totalSupply - balance: market_cap - } - CYC: ERC20(address: ["0x810ee35443639348adbbc467b33310d2ab43c168"]) { - address - symbol - decimals - totalSupply - balance: market_cap - } - TokenSafe: ERC20(address: $bscTokens) { - address - symbol - decimals - balance: balanceUSD(account: "0xfbe9a4138afdf1fa639a8c2818a0c4513fc4ce4b") - } - } - polygon: Polygon { - chainId - CIOTX: ERC20(address: ["0x300211Def2a644b036A9bdd3e58159bb2074d388"]) { - address - symbol - decimals - totalSupply - balance: market_cap - } - CYC: ERC20(address: ["0xcFb54a6D2dA14ABeCD231174FC5735B4436965D8"]) { - address - symbol - decimals - totalSupply - balance: market_cap - - } - TokenSafe: ERC20(address: $polygonTokens) { - address - symbol - decimals - balance: balanceUSD(account: "0xa239f03cda98a7d2aaaa51e7bf408e5d73399e45") - } - } - } -`; - -const variables = { - iotexTokens: [ - "0x0258866edaf84d6081df17660357ab20a07d0c80", - "0xc7b93720f73b037394ce00f954f849ed484a3dea", - "0xacee9b11cd4b3f57e58880277ac72c8c41abe4e4", - "0xedeefaca6a1581fe2349cdfc3083d4efa8188e55", - "0x2a6003e4b618ff3457a4a2080d028b0249b51c80", - "0x6fbCdc1169B5130C59E72E51Ed68A84841C98cd1", - "0x3B2bf2b523f54C4E454F08Aa286D03115aFF326c", - "0x1CbAd85Aa66Ff3C12dc84C5881886EEB29C1bb9b", - "0x97e6c48867fdc391a8dfe9d169ecd005d1d90283", - "0x84abcb2832be606341a50128aeb1db43aa017449", - "0x42C9255D5e522e83B16ea11a3BA04c2D3AfCA079", - "0x037346E5a5722957Ac2cAb6ceb8c74fC18Cea91D", - "0x0bDF82F276309E2efd4947Ee8E0A248b2726E8Df", - "0x8e66c0d6b70c0b23d39f4b21a1eac52bba8ed89a", - "0x653656f84381e8a359a268f3002621bbb14c62f8", - "0x7f0ad63c902c67b1fa1b1102b0daffb889f5d5cb", - "0x62a9d987cbf4c45a550deed5b57b200d7a319632", - "0x3cdb7c48e70b854ed2fa392e21687501d84b3afc", - "0xc04da3a99d17135857bb937d2fbb321d3b6c6a81", - "0x295ebb8c782e186bcb70d9a8124053043d1adf5c", - "0xe46ba98a87dca989725e9a2389975c0bbbb8f985", - "0xaadc74127109d944e36cbd70f71fc5f0c921fc6c", - "0x0499a3ec965136bea01e4350113a2105724785dc", - "0x28873cEA8c26F603b15937f9985A888C5DA5Fd90", - "0xc1B58620aD839383c662BFe80dB4514344DeC6d7", - ], - ethTokens: [ - "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69", - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69", - "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "0x8861cfF2366C1128fd699B68304aD99a0764Ef9a", - "0x4Fabb145d64652a948d72533023f6E7A623C7C53", - "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", - "0x45804880de22913dafe09f4980848ece6ecbaf78", - "0xdAC17F958D2ee523a2206206994597C13D831ec7", - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "0x6b175474e89094c44da98b954eedeac495271d0f", - "0xD227c3e4f3F8dE94180269eF9DC221a6efc1F4C4", - "0xf79deaBc1406a3AD07c70877fBaEb90777B77E68", - ], - bscTokens: [ - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", - "0xe9e7cea3dedca5984780bafc599bd69add087d56", - "0x810ee35443639348adbbc467b33310d2ab43c168", - "0x2aaF50869739e317AB80A57Bf87cAA35F5b60598", - "0x55d398326f99059ff775485246999027b3197955", - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - "0x7e544f2fEDDc69b1cB12555779c824CFe100ee34", - "0x049Dd7532148826CdE956c7B45fec8c30b514052", - "0x049Dd7532148826CdE956c7B45fec8c30b514052", - "0xab951271F025D93c278516e3d131e017e8a3089D", - ], - polygonTokens: [ - "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", - "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6", - "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a", - "0x831753DD7087CaC61aB5644b308642cc1c33Dc13", - "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", - "0xcFb54a6D2dA14ABeCD231174FC5735B4436965D8", - "0x300211Def2a644b036A9bdd3e58159bb2074d388", - ], -}; -let cache = null; - -const loadTvl = async () => { - const result = cache - ? cache - : await request(apiURL, query, variables).then( - (res) => { - Object.entries(res).forEach(([k, v]) => { - res[k] = [ - ...(v.CIOTX?.filter((i) => i.balance > 0).map((i) => - Number(i.balance) - ) || []), - ...(v.Tokens?.filter((i) => i.balance > 0).map((i) => - Number(i.balance) - ) || []), - ...(v.CYC?.filter((i) => i.balance > 0).map((i) => - Number(i.balance) - ) || []), - ...(v.TokenSafe?.filter((i) => i.balance > 0).map((i) => - Number(i.balance) - ) || []), - ].reduce((acc, i) => acc + i, 0) - if (!cache) cache = {}; - cache[res] = res[k]; - }); - return res; - } - ); - return result; -}; - -const allChains = ["iotex", "ethereum", "bsc", "polygon"].reduce((p, c) => { - p[c] = { - fetch: async () => { - const tvl = await loadTvl(); - return tvl[c]; - }, - }; - return p; -}, {}); +const config = { + ethereum: { tokenSafe: '0xc2e0f31d739cb3153ba5760a203b3bd7c27f0d7a', tokenList: '0x7c0bef36e1b1cbeb1f1a5541300786a7b608aede', }, + iotex: { tokenSafe: '0xc4a29a94f12be03033daa4e6ce9b9678c26275a2', tokenList: '0x59caeb8dc448df0e070b803062cfd9351ad39390', }, + bsc: { tokenSafe: '0xFBe9A4138AFDF1fA639a8c2818a0C4513fc4CE4B', tokenList: '0x0d793F4D4287265B9bdA86b7a4083193E8743b34', }, + polygon: { tokenSafe: '0xA239F03Cda98A7d2AaAA51e7bF408e5d73399e45', tokenList: '0xDe9395d2f4940aA501f9a27B98592589D14Bb0f7', }, +} module.exports = { - ...allChains, - fetch: async () => { - const tvl = await loadTvl(); - return Object.values(tvl).reduce((acc, i) => acc + i, 0) - }, - hallmarks:[ + hallmarks: [ [1651881600, "UST depeg"], ], }; + +Object.keys(config).forEach(chain => { + const { tokenList, tokenSafe, } = config[chain] + module.exports[chain] = { + tvl: async (_0, _b, _cb, { api, }) => { + const [_, tokens] = await api.call({ abi: 'function getActiveItems(uint256 offset, uint8 limit) view returns (uint256 count, address[] items)', target: tokenList, params: [0, 99] }) + return sumTokens2({ api, tokens, owner: tokenSafe }) + } + } +}) + diff --git a/projects/ip/index.js b/projects/ip/index.js index b5d089a2f2..2921426354 100644 --- a/projects/ip/index.js +++ b/projects/ip/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { sumTokens2 } = require('../helper/unwrapLPs') const {lendingMarket} = require('../helper/methodologies') @@ -8,7 +9,7 @@ const vaultSummaryAbi = 'function vaultSummaries(uint96 start, uint96 stop) view const cappedTokens = { "0x5aC39Ed42e14Cf330A864d7D1B82690B4D1B9E61": { - address: '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', + address: ADDRESSES.ethereum.MATIC, symbol: 'MATIC', }, "0xfb42f5AFb722d2b01548F77C31AC05bf80e03381": { @@ -20,11 +21,11 @@ const cappedTokens = { symbol: 'BAL', }, "0xd3bd7a8777c042De830965de1C1BCC9784135DD2": { - address: '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', + address: ADDRESSES.ethereum.AAVE, symbol: 'AAVE', }, "0x7C1Caa71943Ef43e9b203B02678000755a4eCdE9": { - address: '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32', + address: ADDRESSES.ethereum.LIDO, symbol: 'LDO', }, "0xDDB3BCFe0304C970E263bf1366db8ed4DE0e357a": { @@ -32,11 +33,11 @@ const cappedTokens = { symbol: 'DYDX', }, "0x9d878eC06F628e883D2F9F1D793adbcfd52822A8": { - address: '0xD533a949740bb3306d119CC777fa900bA034cd52', + address: ADDRESSES.ethereum.CRV, symbol: 'CRV', }, "0x64eA012919FD9e53bDcCDc0Fc89201F484731f41": { - address: '0xae78736cd615f374d3085123a210448e74fc6393', + address: ADDRESSES.ethereum.RETH, symbol: 'rETH', }, "0x99bd1f28a5A7feCbE39a53463a916794Be798FC3": { @@ -55,7 +56,7 @@ async function tvl(_, _b, _cb, { api, }) { sdk.util.sumSingleBalance(balances,token,vault.tokenBalances[i]) }) }) - return sumTokens2({ api, balances, owner: '0x2A54bA2964C8Cd459Dc568853F79813a60761B58', tokens: ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48']}) + return sumTokens2({ api, balances, owner: '0x2A54bA2964C8Cd459Dc568853F79813a60761B58', tokens: [ADDRESSES.ethereum.USDC]}) } module.exports = { diff --git a/projects/ironfinance/index.js b/projects/ironfinance/index.js index 02426ac060..85508e9c28 100644 --- a/projects/ironfinance/index.js +++ b/projects/ironfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abiPolygon = require('./abi-polygon.json'); const { transformAddress } = require('./utils'); @@ -15,7 +16,7 @@ const Contracts = { lend: { ironController: '0xF20fcd005AFDd3AD48C85d0222210fe168DDd10c', }, - wrappedNative: '0x0000000000000000000000000000000000001010', + wrappedNative: ADDRESSES.polygon.WMATIC_1, }, avax: { pools: { @@ -29,7 +30,7 @@ const Contracts = { lend: { ironController: '0xDc4C597E36Fc80876801df0309Cc11A7C12E0764', }, - wrappedNative: '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', + wrappedNative: ADDRESSES.fantom.WFTM, }, }; diff --git a/projects/izumi-iziswap/index.js b/projects/izumi-iziswap/index.js index 725f7aaf4b..538de53bfd 100644 --- a/projects/izumi-iziswap/index.js +++ b/projects/izumi-iziswap/index.js @@ -1,60 +1,81 @@ +const ADDRESSES = require('../helper/coreAssets.json') let abi = require('./abi') const { sumTokens2, } = require('../helper/unwrapLPs') -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null const poolHelpers = { - 'bsc': '0x93C22Fbeff4448F2fb6e432579b0638838Ff9581', - 'arbitrum': '0x611575eE1fbd4F7915D0eABCC518eD396fF78F0c', - 'era': '0x936c9A1B8f88BFDbd5066ad08e5d773BC82EB15F', + 'bsc': ['0x93C22Fbeff4448F2fb6e432579b0638838Ff9581', + '0xBF55ef05412f1528DbD96ED9E7181f87d8C9F453'], + 'arbitrum': ['0xAD1F11FBB288Cd13819cCB9397E59FAAB4Cdc16F'], + 'era': ['0x936c9A1B8f88BFDbd5066ad08e5d773BC82EB15F', + '0x483FDE31bcE3DCc168E23a870831b50Ce2cCd1F1'], + 'meter': ['0x07aBf894D5C25E626bb30f75eFC728a1d86BEeDC'], + 'aurora': ['0x61A41182CD6e94f2A026aE3c0D1b73B1AA579aEa', + '0xE78e7447223aaED59301b44513D1d3A892ECF212'], + // 'ethereumclassic': '0x1D377311b342633A970e71a787C50F83858BFC1B', + 'cronos': ['0x33531bDBFE34fa6Fd5963D0423f7699775AacaaF'], + 'polygon': ['0x33531bDBFE34fa6Fd5963D0423f7699775AacaaF'], + // 'conflux': '0x1502d025BfA624469892289D45C0352997251728', + 'mantle': ['0x611575eE1fbd4F7915D0eABCC518eD396fF78F0c'], + 'ethereum': ['0x19b683A2F45012318d9B2aE1280d68d3eC54D663'], + 'ontology_evm': ['0x110dE362cc436D7f54210f96b8C7652C2617887D'], + 'ultron' : ['0xcA7e21764CD8f7c1Ec40e651E25Da68AeD096037'], + 'linea': ['0x1CB60033F61e4fc171c963f0d2d3F63Ece24319c'], } const blacklistedTokens = [ - '0x0a3bb08b3a15a19b4de82f8acfc862606fb69a2d', + ADDRESSES.bsc.iUSD, '0x1382628e018010035999A1FF330447a0751aa84f', ] const tvl = async (_, _1, _2, { api }) => { const chain = api.chain - const toa = [] - let i = 1 - let foundLastPool = false + const toa = [] const chunkSize = 10 - const poolMetaData = [] - - do { - const calls = [] - for (let j = i; j < i + chunkSize; j++) - calls.push(j) - i += chunkSize - const poolMetas = await api.multiCall({ - target: poolHelpers[chain], - abi: abi.poolMetas, - calls, - }) - for (const output of poolMetas) { - if (output.tokenX === nullAddress && output.fee === '0') { - foundLastPool = true - break; + const bTokens = [...blacklistedTokens] + const allPools = [] + const allPoolMetas = [] + + for(const manager of poolHelpers[chain]) { + let i = 1 + let foundLastPool = false + const poolMetaData = [] + do { + const calls = [] + for (let j = i; j < i + chunkSize; j++) + calls.push(j) + i += chunkSize + const poolMetas = await api.multiCall({ + target: manager, + abi: abi.poolMetas, + calls, + }) + for (const output of poolMetas) { + if (output.tokenX === nullAddress && output.fee === '0') { + foundLastPool = true + break; + } + poolMetaData.push(output) } - poolMetaData.push(output) - } - } while (!foundLastPool) - - const poolCalls = poolMetaData.map(i => ({params: [i.tokenX, i.tokenY, i.fee]})) - const pools = await api.multiCall({ - target: poolHelpers[chain], - abi: abi.pool, - calls: poolCalls, - }) - pools.forEach((output, i) => toa.push([poolMetaData[i].tokenX, output], [poolMetaData[i].tokenY, output],)) - - return sumTokens2({ tokensAndOwners: toa, api, blacklistedTokens, }) -} + } while (!foundLastPool) + + const poolCalls = poolMetaData.map(i => ({ params: [i.tokenX, i.tokenY, i.fee] })) + const pools = await api.multiCall({ + target: manager, + abi: abi.pool, + calls: poolCalls, + }) + + allPools.push(...pools) + allPoolMetas.push(...poolMetaData) + } -module.exports = { - era: { tvl }, - arbitrum: { tvl }, - bsc: { tvl }, - // ownTokens: ['IZI', 'IUSD'], + allPools.forEach((output, i) => toa.push([allPoolMetas[i].tokenX, output], [allPoolMetas[i].tokenY, output],)) + // if (chain === 'era') bTokens.push(ADDRESSES.arbitrum.WETH) + return sumTokens2({ tokensAndOwners: toa, api, blacklistedTokens: bTokens, permitFailure: true}) } + +Object.keys(poolHelpers).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/izumi/utils.js b/projects/izumi/utils.js index b672f0012f..786fb7d6df 100644 --- a/projects/izumi/utils.js +++ b/projects/izumi/utils.js @@ -3,7 +3,8 @@ const { unwrapUniswapV3NFTs } = require('../helper/unwrapLPs') const sdk = require("@defillama/sdk"); const abi = require('./abi.json'); const BigNumber = require('bignumber.js'); -const { get } = require('../helper/http') +const { get } = require('../helper/http'); +const { nullAddress } = require('../helper/tokenMapping'); function point2PoolPriceUndecimalSqrt(point) { return (1.0001 ** point) ** 0.5; @@ -155,6 +156,7 @@ async function unwrapiZiswapFixNFT({ balances, owner, nftAddress, block, chain = const poolInfo = (await sdk.api.abi.call({ target: factory, abi: abi.pool, block, chain, params: [miningInfo.tokenX_, miningInfo.tokenY_, miningInfo.fee_] })).output + if (poolInfo == nullAddress) return balances const state = (await sdk.api.abi.call({ target: poolInfo, abi: abi.state, block, chain })).output let params = { diff --git a/projects/jadeswap/index.js b/projects/jadeswap/index.js new file mode 100644 index 0000000000..a1dde66f40 --- /dev/null +++ b/projects/jadeswap/index.js @@ -0,0 +1,28 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { getUniTVL, staking } = require("../helper/unknownTokens"); +const sdk = require("@defillama/sdk"); +const uniTvl = getUniTVL({ + factory: "0xb20a6389cA872d094f3c7A8180fE5BAb431BD794", + useDefaultCoreAssets: true, + fetchBalances: true, +}); +const masterchef = "0xcC507803A4b832684154C4E395D92A6EDbEAfE52"; +const jade = "0x7c70229F108D3d506Cff8Ea243FFA57344Fc4cE1"; +const wmnt = ADDRESSES.mantle.WMNT; + +module.exports = { + misrepresentedTokens: true, + mantle: { + tvl: sdk.util.sumChainTvls([ + uniTvl, + staking({ + owners: [masterchef], + tokens: [wmnt], + }), + ]), + staking: staking({ + owners: [masterchef], + tokens: [jade], + }), + }, +}; diff --git a/projects/jbc/index.js b/projects/jbc/index.js index 744712f9a1..0f32be4f1e 100644 --- a/projects/jbc/index.js +++ b/projects/jbc/index.js @@ -1,15 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { pool2, staking } = require("../helper/unknownTokens"); const { nullAddress, sumTokensExport, } = require("../helper/unwrapLPs"); const tokensAndOwners = [ - ['0x1addd80e6039594ee970e5872d247bf0414c8903', '0xe964b6083F24dBC06e94C662b195c22C76923b22'], // GLP + [ADDRESSES.arbitrum.fsGLP, '0xe964b6083F24dBC06e94C662b195c22C76923b22'], // GLP [nullAddress, '0x64f688cACeFe6D4809f1A829c1d0286100196bE0'], // ETH - ['0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f', '0xCC13E077F54577cE3Ea52916fDd70305C461A3ED'], // WBTC - ['0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', '0xcA2F482B067D354B3cdB6926911f42F5d1f0e872'], // USDC + [ADDRESSES.arbitrum.WBTC, '0xCC13E077F54577cE3Ea52916fDd70305C461A3ED'], // WBTC + [ADDRESSES.arbitrum.USDC, '0xcA2F482B067D354B3cdB6926911f42F5d1f0e872'], // USDC ] const lpToken = '0x85c6da933a7451bf2a6d836304b30967f3e76e11' module.exports = { + hallmarks: [ + [1681516800, "Rug Pull"] + ], arbitrum: { tvl: sumTokensExport({ tokensAndOwners }), pool2: pool2({ stakingContract: '0x0F6f73c7ecCE4FB9861E25dabde79CBA112550b3', lpToken, useDefaultCoreAssets: true, }), diff --git a/projects/jelly/index.js b/projects/jelly/index.js index 86ef5e94f9..7d0115f23f 100644 --- a/projects/jelly/index.js +++ b/projects/jelly/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const jelly = "0xf5f06fFa53Ad7F5914F493F16E57B56C8dd2eA80" -const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" +const USDC = ADDRESSES.ethereum.USDC const jellyUsdcLP = "0x64C2F792038f1FB55da1A9a22749971eAC94463E" const sweetPool = '0xF897C014a57298DA3453f474312079cC6cB140c0' const royalPool = '0xcC43331067234a0014d298b5226A1c22cb0ac66a' diff --git a/projects/jet-protocol-v2-fixed-term/idl.json b/projects/jet-protocol-v2-fixed-term/idl.json new file mode 100644 index 0000000000..2ef08b5344 --- /dev/null +++ b/projects/jet-protocol-v2-fixed-term/idl.json @@ -0,0 +1,209 @@ +{ + "version": "0.1.0", + "name": "jet_fixed_term", + "constants": [ + { + "name": "MARKET", + "type": "bytes", + "value": "[109, 97, 114, 107, 101, 116]" + }, + { + "name": "TICKET_ACCOUNT", + "type": "bytes", + "value": "[116, 105, 99, 107, 101, 116, 95, 97, 99, 99, 111, 117, 110, 116]" + }, + { + "name": "TICKET_MINT", + "type": "bytes", + "value": "[116, 105, 99, 107, 101, 116, 95, 109, 105, 110, 116]" + }, + { + "name": "CRANK_AUTHORIZATION", + "type": "bytes", + "value": "[99, 114, 97, 110, 107, 95, 97, 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110]" + }, + { + "name": "CLAIM_NOTES", + "type": "bytes", + "value": "[99, 108, 97, 105, 109, 95, 110, 111, 116, 101, 115]" + }, + { + "name": "TICKET_COLLATERAL_NOTES", + "type": "bytes", + "value": "[116, 105, 99, 107, 101, 116, 95, 99, 111, 108, 108, 97, 116, 101, 114, 97, 108, 95, 110, 111, 116, 101, 115]" + }, + { + "name": "UNDERLYING_COLLATERAL_NOTES", + "type": "bytes", + "value": "[117, 110, 100, 101, 114, 108, 121, 105, 110, 103, 95, 99, 111, 108, 108, 97, 116, 101, 114, 97, 108, 95, 110, 111, 116, 101, 115]" + }, + { + "name": "EVENT_ADAPTER", + "type": "bytes", + "value": "[101, 118, 101, 110, 116, 95, 97, 100, 97, 112, 116, 101, 114]" + }, + { + "name": "TERM_LOAN", + "type": "bytes", + "value": "[116, 101, 114, 109, 95, 108, 111, 97, 110]" + }, + { + "name": "TERM_DEPOSIT", + "type": "bytes", + "value": "[116, 101, 114, 109, 95, 100, 101, 112, 111, 115, 105, 116]" + }, + { + "name": "USER", + "type": "bytes", + "value": "[117, 115, 101, 114]" + }, + { + "name": "ORDERBOOK_MARKET_STATE", + "type": "bytes", + "value": "[111, 114, 100, 101, 114, 98, 111, 111, 107, 95, 109, 97, 114, 107, 101, 116, 95, 115, 116, 97, 116, 101]" + }, + { + "name": "MARGIN_USER", + "type": "bytes", + "value": "[109, 97, 114, 103, 105, 110, 95, 117, 115, 101, 114]" + }, + { + "name": "UNDERLYING_TOKEN_VAULT", + "type": "bytes", + "value": "[117, 110, 100, 101, 114, 108, 121, 105, 110, 103, 95, 116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]" + }, + { + "name": "FEE_VAULT", + "type": "bytes", + "value": "[102, 101, 101, 95, 118, 97, 117, 108, 116]" + } + ], + "instructions": [], + "accounts": [ + { + "name": "Market", + "type": { + "kind": "struct", + "fields": [ + { + "name": "versionTag", + "type": "u64" + }, + { + "name": "airspace", + "type": "publicKey" + }, + { + "name": "orderbookMarketState", + "type": "publicKey" + }, + { + "name": "eventQueue", + "type": "publicKey" + }, + { + "name": "asks", + "type": "publicKey" + }, + { + "name": "bids", + "type": "publicKey" + }, + { + "name": "underlyingTokenMint", + "type": "publicKey" + }, + { + "name": "underlyingTokenVault", + "type": "publicKey" + }, + { + "name": "ticketMint", + "type": "publicKey" + }, + { + "name": "claimsMint", + "type": "publicKey" + }, + { + "name": "ticketCollateralMint", + "type": "publicKey" + }, + { + "name": "underlyingCollateralMint", + "type": "publicKey" + }, + { + "name": "underlyingOracle", + "type": "publicKey" + }, + { + "name": "ticketOracle", + "type": "publicKey" + }, + { + "name": "feeVault", + "type": "publicKey" + }, + { + "name": "feeDestination", + "type": "publicKey" + }, + { + "name": "seed", + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "bump", + "type": { + "array": [ + "u8", + 1 + ] + } + }, + { + "name": "orderbookPaused", + "type": "bool" + }, + { + "name": "ticketsPaused", + "type": "bool" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 29 + ] + } + }, + { + "name": "borrowTenor", + "type": "u64" + }, + { + "name": "lendTenor", + "type": "u64" + }, + { + "name": "originationFee", + "type": "u64" + }, + { + "name": "nonce", + "type": "u64" + } + ] + } + } + ], + "types": [], + "errors": [] +} \ No newline at end of file diff --git a/projects/jet-protocol-v2-fixed-term/index.js b/projects/jet-protocol-v2-fixed-term/index.js new file mode 100644 index 0000000000..8ebc7367d5 --- /dev/null +++ b/projects/jet-protocol-v2-fixed-term/index.js @@ -0,0 +1,19 @@ +const { Program } = require("@project-serum/anchor"); +const { getProvider, sumTokens2, } = require("../helper/solana"); +const programId = 'JPTermEg2DwrV39xb1Fs7z1VUxcvdPT7mE7cyGsQ4xt'; +const idl = require('./idl.json') + +async function tvl() { + const provider = getProvider() + const program = new Program(idl, programId, provider) + const accounts = await program.account.market.all() + return sumTokens2({ tokenAccounts: accounts.map(i => i.account.underlyingTokenVault.toString()) }) +} + +module.exports = { + methodology: 'Add all the SOL in the pools, NFT value is not included in tvl', + timetravel: false, + solana: { + tvl, + }, +}; diff --git a/projects/jetfuelfinance/index.js b/projects/jetfuelfinance/index.js index 478c87a4d6..75a48a0cc4 100644 --- a/projects/jetfuelfinance/index.js +++ b/projects/jetfuelfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -45,9 +46,9 @@ const single_side_vault = [ ]; const single_side_assets = [ - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", - "0x250632378e573c6be1ac2f97fcdf00515d0aa91b", - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.BETH, + ADDRESSES.bsc.BTCB, ]; //const factoryTvl = uniTvlExport(factory, 'bsc') @@ -110,7 +111,7 @@ const bscTvl = async (timestamp, block, chainBlocks) => { return balances; }; -const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "bsc", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c") +const {tvl:lendingTvl, borrowed} = compoundExports("0x67340bd16ee5649a37015138b3393eb5ad17c195", "bsc", "0xE24146585E882B6b59ca9bFaaaFfED201E4E5491", ADDRESSES.bsc.WBNB) module.exports = { bsc: { diff --git a/projects/jetprotocol-v2-margin/index.js b/projects/jetprotocol-v2-margin/index.js new file mode 100644 index 0000000000..fd21e9d9b8 --- /dev/null +++ b/projects/jetprotocol-v2-margin/index.js @@ -0,0 +1,20 @@ +const { Program } = require("@project-serum/anchor"); +const { getProvider, sumTokens2, } = require("../helper/solana"); +const programId = 'JPPooLEqRo3NCSx82EdE2VZY5vUaSsgskpZPBHNGVLZ'; + +async function tvl() { + const provider = getProvider() + const program = new Program(idl, programId, provider) + const accounts = await program.account.marginPool.all() + return sumTokens2({ tokenAccounts: accounts.map(i => i.account.vault.toString()), }) +} + +module.exports = { + methodology: 'Add all the SOL in the pools, NFT value is not included in tvl', + timetravel: false, + solana: { + tvl, + }, +}; + +const idl = {"version":"1.0.0","name":"jet_margin_pool","instructions":[],"accounts":[{"name":"MarginPool","type":{"kind":"struct","fields":[{"name":"version","type":"u8"},{"name":"poolBump","type":{"array":["u8",1]}},{"name":"vault","type":"publicKey"},{"name":"feeDestination","type":"publicKey"},{"name":"depositNoteMint","type":"publicKey"},{"name":"loanNoteMint","type":"publicKey"},{"name":"tokenMint","type":"publicKey"},{"name":"tokenPriceOracle","type":"publicKey"},{"name":"address","type":"publicKey"},{"name":"config","type":{"defined":"MarginPoolConfig"}},{"name":"borrowedTokens","type":{"array":["u8",24]}},{"name":"uncollectedFees","type":{"array":["u8",24]}},{"name":"depositTokens","type":"u64"},{"name":"depositNotes","type":"u64"},{"name":"loanNotes","type":"u64"},{"name":"accruedUntil","type":"i64"}]}}],"types":[{"name":"MarginPoolConfig","type":{"kind":"struct","fields":[{"name":"flags","type":"u64"},{"name":"utilizationRate1","type":"u16"},{"name":"utilizationRate2","type":"u16"},{"name":"borrowRate0","type":"u16"},{"name":"borrowRate1","type":"u16"},{"name":"borrowRate2","type":"u16"},{"name":"borrowRate3","type":"u16"},{"name":"managementFeeRate","type":"u16"},{"name":"reserved","type":"u64"}]}}],"events":[],"errors":[]} \ No newline at end of file diff --git a/projects/jetprotocol.js b/projects/jetprotocol.js index 7696e36d0c..cc04fc43e1 100644 --- a/projects/jetprotocol.js +++ b/projects/jetprotocol.js @@ -1,4 +1,5 @@ -const { getTokenBalance } = require("./helper/solana"); +const ADDRESSES = require('./helper/coreAssets.json') +const { getTokenBalance, sumTokens2 } = require("./helper/solana"); async function borrowed() { const [usdcAmount, ethAmount, solAmount, btcAmount] = await Promise.all([ @@ -28,32 +29,16 @@ async function borrowed() { } async function tvl() { - const [usdcAmount, ethAmount, solAmount, btcAmount] = await Promise.all([ - getTokenBalance( - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "7gpj9cpzBBW9Ci1yMwWz7iGbQYpm5fZmadNQyrYsqch8" - ), - getTokenBalance( - "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", - "7gpj9cpzBBW9Ci1yMwWz7iGbQYpm5fZmadNQyrYsqch8" - ), - getTokenBalance( - "So11111111111111111111111111111111111111112", - "7gpj9cpzBBW9Ci1yMwWz7iGbQYpm5fZmadNQyrYsqch8" - ), - getTokenBalance( - "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", - "7gpj9cpzBBW9Ci1yMwWz7iGbQYpm5fZmadNQyrYsqch8" - ), - ]); - return { - bitcoin: btcAmount, - "usd-coin": usdcAmount, - ethereum: ethAmount, - solana: solAmount, - }; + return sumTokens2({ owner: '7gpj9cpzBBW9Ci1yMwWz7iGbQYpm5fZmadNQyrYsqch8', tokens: [ + ADDRESSES.solana.USDC, + '2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk', + ADDRESSES.solana.SOL, + '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E', + ]}); } +// JPv1rCqrhagNNmJVM5J1he7msQ5ybtvE1nNuHpDHMNU +// https://docs.jetprotocol.io/jet-protocol/protocol/smart-contracts module.exports = { timetravel: false, solana: { diff --git a/projects/jewelswap-lev-farming/api.js b/projects/jewelswap-lev-farming/api.js new file mode 100644 index 0000000000..8e562c21b0 --- /dev/null +++ b/projects/jewelswap-lev-farming/api.js @@ -0,0 +1,6 @@ +const { getExports } = require('../helper/heroku-api') + +module.exports = { + timetravel: false, + ...getExports("jewelswap-lev-farming", ['elrond']), +} diff --git a/projects/jewelswap-lev-farming/index.js b/projects/jewelswap-lev-farming/index.js new file mode 100644 index 0000000000..4d78f06a9d --- /dev/null +++ b/projects/jewelswap-lev-farming/index.js @@ -0,0 +1,96 @@ +const { getNFTs, sumTokens } = require("../helper/chain/elrond"); +const { ResultsParser, AbiRegistry, SmartContract, Address, } = require("@multiversx/sdk-core/out"); +const { ProxyNetworkProvider } = require("@multiversx/sdk-network-providers/out"); +const JEWEL_ONEDEX_FARM_SC_ABI = require("./jewel-onedex-farm.abi.json"); + + +const JEWEL_ONEDEX_FARM_SC_ADDRESS = "erd1qqqqqqqqqqqqqpgqm7exdla3rzshywy99pvlxzkr45wt9kjsdfys7qqpn0"; +const LENDING_POOL_FARMS = "erd1qqqqqqqqqqqqqpgq96n4gxvmw8nxgxud8nv8qmms5namspc5vmusg930sh"; + +const FARMS = "erd1qqqqqqqqqqqqqpgqlnxy2hmvs8qxr6ezq2wmggn7ev62cjp6vmusvdral4"; + +const jewelOnedexFarmAbiRegistry = AbiRegistry.create(JEWEL_ONEDEX_FARM_SC_ABI); +const jewelOnedexFarmSmartContract = new SmartContract({ + address: new Address(JEWEL_ONEDEX_FARM_SC_ADDRESS), + abi: jewelOnedexFarmAbiRegistry +}); + + +const networkConfigs = { + mainnet: { + id: "mainnet", + chainId: "1", + apiUrl: "https://api.multiversx.com", + gatewayUrl: "https://gateway.multiversx.com", + explorerUrl: "https://explorer.multiversx.com", + apiTimeout: 10000 + } +}; + + +const ELROND_NETWORK = "mainnet"; +const networkConfig = networkConfigs[ELROND_NETWORK]; + +const proxyProvider = new ProxyNetworkProvider(networkConfig.gatewayUrl, { + timeout: networkConfig.apiTimeout +}); + + +async function tvl() { + const { api } = arguments[3] + + const nfts = await getNFTs(FARMS) + nfts.forEach(nft => { + let lpToken + switch (nft.collection) { + case "FARM-e5ffde": lpToken = "ALP-2d0cf8"; break; + case "FARM-9ed1f9": lpToken = "ALP-5f9191"; break; + case "FARM-ccefc2": lpToken = "ALP-0fe50a"; break; + case "FARM-795466": lpToken = "ALP-afc922"; break; + default: lpToken = null; + } + if (lpToken) api.add(lpToken, nft.balance) + }) + await oneDexFarm(api) + return sumTokens({ owners: [LENDING_POOL_FARMS], balances: api.getBalances() }) +} + +async function oneDexFarm(api) { + const interaction = + jewelOnedexFarmSmartContract.methodsExplicit.viewFarms(); + const query = interaction.check().buildQuery(); + const queryResponse = + await proxyProvider.queryContract(query); + const endpointDefinition = interaction.getEndpoint(); + const { firstValue, returnCode, returnMessage } = + new ResultsParser().parseQueryResponse( + queryResponse, + endpointDefinition + ); + + if (!firstValue || !returnCode.isSuccess()) { + throw Error(returnMessage); + } + + const values = firstValue.valueOf(); + const decoded = values.map((value) => ({ + token0: value.first_token_id.toString(), + token1: value.second_token_id.toString(), + lpAmount: value.lp_token_amount.toFixed(0), + lpSupply: value.lp_token_supply.toFixed(0), + token0Supply: value.first_token_reserve.toFixed(0), + token1Supply: value.second_token_reserve.toFixed(0) + })); + decoded.forEach(({ token0, token1, lpAmount, lpSupply, token0Supply, token1Supply}) => { + const ratio = lpAmount / lpSupply + api.add(token0, token0Supply * ratio) + api.add(token1, token1Supply * ratio) + }) +} + +module.exports = { + timetravel: false, + elrond: { + tvl + } +}; diff --git a/projects/jewelswap-lev-farming/jewel-onedex-farm.abi.json b/projects/jewelswap-lev-farming/jewel-onedex-farm.abi.json new file mode 100644 index 0000000000..8af49b3471 --- /dev/null +++ b/projects/jewelswap-lev-farming/jewel-onedex-farm.abi.json @@ -0,0 +1,115 @@ +{ + "buildInfo": { + }, + "name": "JewelOnedexFarm", + "constructor": { + "inputs": [], + "outputs": [] + }, + "endpoints": [ + { + "name": "viewFarms", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "List" + } + ] + } + ], + "events": [], + "hasCallback": false, + "types": { + "FarmContext": { + "type": "struct", + "fields": [ + { + "name": "farm_id", + "type": "u32" + }, + { + "name": "dex_swap_pool_id", + "type": "u32" + }, + { + "name": "dex_farm_pool_id", + "type": "u32" + }, + { + "name": "min_deposit_base_token", + "type": "TokenIdentifier" + }, + { + "name": "min_deposit_base_amount", + "type": "BigUint" + }, + { + "name": "min_compound_rewards_amount", + "type": "BigUint" + }, + { + "name": "fee_percent", + "type": "u64" + }, + { + "name": "first_token_id", + "type": "TokenIdentifier" + }, + { + "name": "second_token_id", + "type": "TokenIdentifier" + }, + { + "name": "lp_token_id", + "type": "TokenIdentifier" + }, + { + "name": "rewards_token_id", + "type": "TokenIdentifier" + }, + { + "name": "pending_first_token_amount", + "type": "BigUint" + }, + { + "name": "pending_second_token_amount", + "type": "BigUint" + }, + { + "name": "farm_share", + "type": "BigUint" + }, + { + "name": "lp_token_amount", + "type": "BigUint" + }, + { + "name": "current_rewards_amount", + "type": "BigUint" + }, + { + "name": "farm_yearly_reward_amount", + "type": "BigUint" + }, + { + "name": "lp_token_supply", + "type": "BigUint" + }, + { + "name": "first_token_reserve", + "type": "BigUint" + }, + { + "name": "second_token_reserve", + "type": "BigUint" + }, + { + "name": "opened_position_count", + "type": "u32" + } + ] + } + + } +} diff --git a/projects/jewelswap-liq-staking/index.js b/projects/jewelswap-liq-staking/index.js new file mode 100644 index 0000000000..18faf36c92 --- /dev/null +++ b/projects/jewelswap-liq-staking/index.js @@ -0,0 +1,14 @@ +const { getTokenData, sumTokens, } = require('../helper/chain/elrond') +const { nullAddress } = require('../helper/tokenMapping') + +module.exports = { + elrond: { tvl} +} + +async function tvl(_, _b, _cb, { api, }) { + const data = await getTokenData('JWLEGLD-023462') + const data2 = await getTokenData('JWLASH-f362b9') + api.add(nullAddress, data.minted - data.burnt) + api.add('JWLASH-f362b9', data2.minted - data2.burnt) +} + diff --git a/projects/jewelswap-nft/api.js b/projects/jewelswap-nft/api.js new file mode 100644 index 0000000000..a3af2c0031 --- /dev/null +++ b/projects/jewelswap-nft/api.js @@ -0,0 +1,6 @@ +const { getExports } = require('../helper/heroku-api') + +module.exports = { + timetravel: false, + ...getExports("jewelswap-nft", ['elrond'], ['borrowed']), +} diff --git a/projects/jewelswap-nft/index.js b/projects/jewelswap-nft/index.js new file mode 100644 index 0000000000..fd0502fa3e --- /dev/null +++ b/projects/jewelswap-nft/index.js @@ -0,0 +1,79 @@ +const { ResultsParser, AbiRegistry, SmartContract, Address, OptionalValue } = require("@multiversx/sdk-core/out"); +const { ProxyNetworkProvider } = require("@multiversx/sdk-network-providers/out"); +const NFT_LENDING_SC_ABI_JSON = require("./jewel-nft-lending.abi.json"); +const { sumTokens } = require("../helper/chain/elrond"); +const { nullAddress } = require("../helper/tokenMapping"); + + +const LENDING_POOL = "erd1qqqqqqqqqqqqqpgqhpauarfmx75nf4pwxh2fuy520ym03p8e8jcqt466up"; + +const abi = AbiRegistry.create(NFT_LENDING_SC_ABI_JSON); +const nftLendingSmartContract = new SmartContract({ + address: new Address(LENDING_POOL), + abi: abi +}); + +const networkConfigs = { + mainnet: { + id: "mainnet", + chainId: "1", + apiUrl: "https://api.multiversx.com", + gatewayUrl: "https://gateway.multiversx.com", + explorerUrl: "https://explorer.multiversx.com", + apiTimeout: 10000 + } +}; + + +const ELROND_NETWORK = "mainnet"; +const networkConfig = networkConfigs[ELROND_NETWORK]; + +const proxyProvider = new ProxyNetworkProvider(networkConfig.gatewayUrl, { + timeout: networkConfig.apiTimeout +}); + + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + elrond: { + tvl: () => sumTokens({ owners: [LENDING_POOL] }), + borrowed, + } +}; + +async function borrowed() { + const { api } = arguments[3] + const commonSettings = await queryNFTDataFromSc(); + api.add(nullAddress, commonSettings.total_loan_amount) + + return api.getBalances() +} + +async function queryNFTDataFromSc() { + const args = [ + OptionalValue.newMissing() + ]; + const interaction = nftLendingSmartContract.methodsExplicit.viewCommonSettings(args); + const query = interaction.check().buildQuery(); + const queryResponse = await proxyProvider.queryContract(query); + const endpointDefinition = interaction.getEndpoint(); + const { + firstValue, + returnCode, + returnMessage + } = new ResultsParser().parseQueryResponse(queryResponse, endpointDefinition); + + if (!firstValue || !returnCode.isSuccess()) { + console.error(returnMessage); + return undefined; + } + + const value = firstValue.valueOf(); + const decoded = { + total_lending_amount: value.total_lending_amount.toFixed(), + total_collateral_amount: value.total_collateral_amount.toFixed(), + total_loan_amount: value.total_loan_amount.toFixed(), + }; + return decoded; +} diff --git a/projects/jewelswap-nft/jewel-nft-lending.abi.json b/projects/jewelswap-nft/jewel-nft-lending.abi.json new file mode 100644 index 0000000000..6c12f761ed --- /dev/null +++ b/projects/jewelswap-nft/jewel-nft-lending.abi.json @@ -0,0 +1,183 @@ +{ + "buildInfo": { + }, + "name": "EpunksNftLending", + "constructor": { + "inputs": [], + "outputs": [] + }, + "endpoints": [ + { + "name": "viewCommonSettings", + "mutability": "readonly", + "inputs": [ + { + "name": "opt_user_address", + "type": "optional
", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "CommonSettings" + } + ] + } + ], + "hasCallback": true, + "types": { + "CommonSettings": { + "type": "struct", + "fields": [ + { + "name": "rewards_pool_rate", + "type": "u64" + }, + { + "name": "epunks_buyback_rate", + "type": "u64" + }, + { + "name": "team_rate", + "type": "u64" + }, + { + "name": "epunks_buyback_wallet", + "type": "Address" + }, + { + "name": "team_wallet", + "type": "Address" + }, + { + "name": "liquidation_wallet", + "type": "Address" + }, + { + "name": "lend_epoch_length", + "type": "u64" + }, + { + "name": "lend_lock_period", + "type": "u64" + }, + { + "name": "liquidation_threshold", + "type": "u64" + }, + { + "name": "lend_grace_period", + "type": "u64" + }, + { + "name": "liquidation_fee", + "type": "u64" + }, + { + "name": "total_lending_amount", + "type": "BigUint" + }, + { + "name": "lend_users", + "type": "u32" + }, + { + "name": "current_lend_epoch_id", + "type": "u32" + }, + { + "name": "lend_epoch_start_timestamp", + "type": "u64" + }, + { + "name": "lend_rewards_pool_amount", + "type": "BigUint" + }, + { + "name": "global_liquidation_rate", + "type": "u64" + }, + { + "name": "global_max_borrow_amount", + "type": "BigUint" + }, + { + "name": "global_collection_max_lend_cap_percent", + "type": "u64" + }, + { + "name": "global_max_borrower_cap_percent", + "type": "u64" + }, + { + "name": "borrow_plan_count", + "type": "u32" + }, + { + "name": "max_borrow_periods", + "type": "List" + }, + { + "name": "borrow_rates", + "type": "List" + }, + { + "name": "accumulated_loan_amount", + "type": "BigUint" + }, + { + "name": "total_loan_amount", + "type": "BigUint" + }, + { + "name": "total_collateral_amount", + "type": "BigUint" + }, + { + "name": "opened_loan_count", + "type": "u32" + }, + { + "name": "loan_owners", + "type": "u32" + }, + { + "name": "last_loan_id", + "type": "u32" + }, + { + "name": "collection_ids", + "type": "List" + }, + { + "name": "collection_collateral_rates", + "type": "List" + }, + { + "name": "collection_trait_counts", + "type": "List" + }, + { + "name": "collection_supplies", + "type": "List" + }, + { + "name": "collection_max_borrow_amounts", + "type": "List" + }, + { + "name": "collection_borrow_amounts", + "type": "List" + }, + { + "name": "collection_max_lend_cap_percents", + "type": "List" + }, + { + "name": "user_borrow_status", + "type": "bool" + } + ] + } + } +} diff --git a/projects/jexchange/index.js b/projects/jexchange/index.js index 22b0802dfd..e3c5ac34ec 100644 --- a/projects/jexchange/index.js +++ b/projects/jexchange/index.js @@ -3,6 +3,6 @@ const { sumTokensExport } = require('../helper/sumTokens') module.exports = { timetravel: false, elrond: { - tvl: sumTokensExport({ chain: 'elrond', owner: 'erd1qqqqqqqqqqqqqpgqawkm2tlyyz6vtg02fcr5w02dyejp8yrw0y8qlucnj2', }) + tvl: sumTokensExport({ chain: 'elrond', owner: 'erd1qqqqqqqqqqqqqpgqmmxzmktd09gq0hldtczerlv444ykt3pz6avsnys6m9', }) } } \ No newline at end of file diff --git a/projects/jojo/index.js b/projects/jojo/index.js index 782750c094..532f4d57fb 100644 --- a/projects/jojo/index.js +++ b/projects/jojo/index.js @@ -1,13 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') -const contracts = [ - '0x25173BB47CB712cFCDFc13ECBebDAd753090801E' -]; - -const tokens = [ - '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d' -]; - module.exports = { - bsc: { tvl: sumTokensExport({ tokens, chain: 'bsc', owners: contracts, }) } + era: { tvl: sumTokensExport({ tokens: [ADDRESSES.era.USDC], owners: ['0x47eAD228547db8397398C1D3aAfd0847CBEbddeC'], }) }, + bsc: { tvl: sumTokensExport({ tokens: [ADDRESSES.bsc.USDC], owners: ['0x25173BB47CB712cFCDFc13ECBebDAd753090801E'], }) }, }; diff --git a/projects/jones-dao/addresses.json b/projects/jones-dao/addresses.json index 3defe0d5d0..7f71b93152 100644 --- a/projects/jones-dao/addresses.json +++ b/projects/jones-dao/addresses.json @@ -51,5 +51,6 @@ }, "strategy": "0x15df56a82c194FeFEC9337C37A41964B69b584d5", "glpCompound": "0x7241bC8035b65865156DDb5EdEf3eB32874a3AF6", - "glp": "0x1aDDD80E6039594eE970E5872D247bf0414C8903" + "glp": "0x1aDDD80E6039594eE970E5872D247bf0414C8903", + "jonesGlpVaultRouter": "0x2F43c6475f1ecBD051cE486A9f3Ccc4b03F3d713" } \ No newline at end of file diff --git a/projects/jones-dao/index.js b/projects/jones-dao/index.js index ddb6b35fd0..447995f782 100644 --- a/projects/jones-dao/index.js +++ b/projects/jones-dao/index.js @@ -1,19 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { pool2s } = require("../helper/pool2"); const { stakings } = require("../helper/staking"); const addresses = require("./addresses.json"); const { sumTokens2 } = require("../helper/unwrapLPs"); const lockerABI = require("./locked.json"); -const sdk = require('@defillama/sdk') +const sdk = require('@defillama/sdk'); const jTokenToToken = { - "0x662d0f9ff837a51cf89a1fe7e0882a906dac08a3": "arbitrum:0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // jETH + "0x662d0f9ff837a51cf89a1fe7e0882a906dac08a3": "arbitrum:" + ADDRESSES.arbitrum.WETH, // jETH "0x5375616bb6c52a90439ff96882a986d8fcdce421": "arbitrum:0x8d9ba570d6cb60c7e3e0f31343efe75ab8e65fb1", // jgOHM, "0xf018865b26ffab9cd1735dcca549d95b0cb9ea19": "arbitrum:0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55", // jDPX "0x1f6fa7a58701b3773b08a1a16d06b656b0eccb23": "arbitrum:0x32eb7902d4134bf98a28b963d26de779af92a212" // jrdpx } const AURA = '0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF' const AURALocker = '0x3Fa73f1E5d8A792C80F426fc8F84FBF7Ce9bBCAC' -const USDC = '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'; +const USDC = ADDRESSES.arbitrum.USDC; const jAuraStrategy = '0x7629fc134e5a7feBEf6340438D96881C8D121f2c'; async function tvl(timestamp, block, chainBlocks, { api }) { @@ -28,18 +29,18 @@ async function tvl(timestamp, block, chainBlocks, { api }) { api.multiCall({ abi: 'uint256:totalAssets', calls: addresses.vaults }), ]) - const usdcBalance = await sdk.api.erc20.balanceOf({ - target: USDC, - owner: addresses.trackers.uvert.token, - chain: 'arbitrum', - block: chainBlocks['arbitrum'] + const uvrtBalance = await sdk.api.erc20.balanceOf({ + target: addresses.trackers.uvert.token, + owner: addresses.jonesGlpVaultRouter, + chain: 'arbitrum', + block: chainBlocks['arbitrum'] }).then(result => result.output) const toa = [] api.addTokens(tokens,bals) api.addTokens(vAssets,vBals) - api.addToken(USDC, usdcBalance) + api.addToken(addresses.trackers.uvert.token, uvrtBalance) Object.values(addresses.trackers).map(tracker => toa.push([tracker.token, tracker.holder])) toa.push([addresses.glp, addresses.strategy,]) diff --git a/projects/jpeg-d/helper/abis.js b/projects/jpeg-d/helper/abis.js index 6028ec821f..1eb21f5306 100644 --- a/projects/jpeg-d/helper/abis.js +++ b/projects/jpeg-d/helper/abis.js @@ -17,18 +17,25 @@ const APE_STAKING = { stakedTotal: "function stakedTotal(address) external view returns (uint256)", }; +const P2P_APE_STAKING_ABI = { + nextNonce: "function nextNonce() external view returns (uint256)", + offers: "function offers(uint24) view returns (uint8 offerType, tuple(uint8 collection, uint16 tokenId) mainNft, uint16 bakcTokenId, uint80 apeAmount, uint16 apeRewardShareBps, uint16 bakcRewardShareBps, bool isPaired, uint80 lastSingleStakingRewardPerShare)" +}; + const ERC721 = { tokenOfOwnerByIndex: "function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)", }; const PROVIDER_ABI = { - "nftType": "function nftTypes(uint256) view returns (bytes32)", - "nftTypeValueMultiplier": "function nftTypeValueMultiplier(bytes32) view returns (uint128 numerator, uint128 denominator)" -} + nftType: "function nftTypes(uint256) view returns (bytes32)", + nftTypeValueMultiplier: + "function nftTypeValueMultiplier(bytes32) view returns (uint128 numerator, uint128 denominator)", +}; module.exports = { VAULT_ABI, + P2P_APE_STAKING_ABI, PROVIDER_ABI, STRATEGY_ABI, APE_STAKING, diff --git a/projects/jpeg-d/helper/addresses.js b/projects/jpeg-d/helper/addresses.js index 46b8804587..282b30da45 100644 --- a/projects/jpeg-d/helper/addresses.js +++ b/projects/jpeg-d/helper/addresses.js @@ -14,6 +14,7 @@ const SQUIGGLES_PUSD_VAULT = "0x266d98307469f86f134ab884afefa98d3b4835b1"; const OTHERDEED_PUSD_VAULT = "0x09765190845c35fb81efd6952e19c995f6bd6a72"; const MEEBITS_PUSD_VAULT = "0xf7Fa42b692b8132311B02F9d72af69f9587c447E"; const BAKC_PUSD_VAULT = "0x3A90dB2E3392A26904da1aA632B4C26A824d296e"; +const MILADY_PUSD_VAULT = "0xDc6634879CEf6eD24EF0273DaA4a12b34e3D09Cc"; // NFT pETH vaults const CRYPTO_PUNK_PETH_VAULT = "0x4e5f305bfca77b17f804635a9ba669e187d51719"; @@ -35,6 +36,7 @@ const SQUIGGLES_PETH_VAULT = "0x2a8d4e3bb2e09541bf5d79a1cf8b9dd2b3a1c6ab"; const OTHERDEED_PETH_VAULT = "0x525a3999b65a7d06dbe1de9b0b5faab1dc72e83c"; const MEEBITS_PETH_VAULT = "0xD5a4FF073fB6BA54B52CEC0747a69a2EBeD08D3F"; const BAKC_PETH_VAULT = "0xBF3624e8E72737d632C27eaF814668200F3B0e09"; +const MILADY_PETH_VAULT = "0xdda32416E87c475A0bCBc6C2e74190e7c49c1E5f"; const VAULTS_ADDRESSES = [ // pUSD vaults @@ -53,6 +55,7 @@ const VAULTS_ADDRESSES = [ OTHERDEED_PUSD_VAULT, MEEBITS_PUSD_VAULT, BAKC_PUSD_VAULT, + MILADY_PUSD_VAULT, // pETH vaults CRYPTO_PUNK_PETH_VAULT, CRYPTO_PUNK_PETH_VAULT_B, @@ -73,17 +76,16 @@ const VAULTS_ADDRESSES = [ OTHERDEED_PETH_VAULT, MEEBITS_PETH_VAULT, BAKC_PETH_VAULT, + MILADY_PETH_VAULT, ]; const BAYC_VAULTS = [BAYC_PUSD_VAULT, BAYC_PETH_VAULT, BAYC_PETH_VAULT]; const MAYC_VAULTS = [MAYC_PUSD_VAULT, MAYC_PETH_VAULT, MAYC_PETH_VAULT_B]; +const P2P_APE_STAKING = "0xD4b06218C545C047ac3ACc7cE49d124C172DB409"; const BAYC_APE_STAKING_STRATEGY = "0x6b2e47560CC810C2Dce3bf2C0Da4310eC0af8831"; const MAYC_APE_STAKING_STRATEGY = "0x6b2e47560CC810C2Dce3bf2C0Da4310eC0af8831"; -const BAKC_BAYC_STAKING_STRATEGY = "0xA0a4D16f2aD04dDFB627359601998a6Fd0f1f1e4"; -const BAKC_MAYC_STAKING_STRATEGY = "0x30dff12b9416b232fa536d48959a02bc4d3c15ba"; const APE_STAKING = "0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9"; const APE = "0x4d224452801aced8b2f0aebe155379bb5d594381"; -const BAKC = "0xba30E5F9Bb24caa003E9f2f0497Ad287FDF95623"; const PETH_ETH_PAIR = "0x9848482da3Ee3076165ce6497eDA906E66bB85C5"; const PETH_ETH_VAULT = "0x56D1b6Ac326e152C9fAad749F1F4f9737a049d46"; @@ -118,21 +120,21 @@ module.exports = { VAULTS_ADDRESSES, BAYC_VAULTS, MAYC_VAULTS, + P2P_APE_STAKING, BAYC_APE_STAKING_STRATEGY, MAYC_APE_STAKING_STRATEGY, - BAKC_BAYC_STAKING_STRATEGY, - BAKC_MAYC_STAKING_STRATEGY, APE_STAKING, APE, - BAKC, JPEG, STAKING_CONTRACT, JPEG_WETH_SLP, PETH_ETH_PAIR, PETH_ETH_VAULT, LP_STAKING, - PETH_ETH_F: '0x56D1b6Ac326e152C9fAad749F1F4f9737a049d46', - PUSD_USD_F: '0xF6Cbf5e56a8575797069c7A7FBED218aDF17e3b2', + PETH_ETH_F: "0x56D1b6Ac326e152C9fAad749F1F4f9737a049d46", + PETH_POOL: "0x9848482da3ee3076165ce6497eda906e66bb85c5", + PUSD_USD_F: "0xF6Cbf5e56a8575797069c7A7FBED218aDF17e3b2", + USD_POOL: "0x8ee017541375f6bcd802ba119bddc94dad6911a1", helperToNftMapping, artBlockOwners, }; diff --git a/projects/jpeg-d/helper/index.js b/projects/jpeg-d/helper/index.js index 21daa5b786..2ca5ed7c02 100644 --- a/projects/jpeg-d/helper/index.js +++ b/projects/jpeg-d/helper/index.js @@ -1,4 +1,4 @@ -const { sumTokens2 } = require("../../helper/unwrapLPs"); +const { sumTokens2, nullAddress } = require("../../helper/unwrapLPs"); const abi = require("./abis"); const { VAULTS_ADDRESSES, @@ -6,15 +6,18 @@ const { MAYC_VAULTS, BAYC_APE_STAKING_STRATEGY, MAYC_APE_STAKING_STRATEGY, - BAKC_BAYC_STAKING_STRATEGY, - BAKC_MAYC_STAKING_STRATEGY, APE_STAKING, + P2P_APE_STAKING, STAKING_CONTRACT, APE, - BAKC, JPEG, - helperToNftMapping, + PETH_POOL, + USD_POOL, + PETH_ETH_F, + PUSD_USD_F, artBlockOwners, + LP_STAKING, + helperToNftMapping, } = require("./addresses"); /** @@ -89,97 +92,91 @@ async function stakingJPEGD(_, _1, _2, { api }) { calls: VAULTS_ADDRESSES, }); - providersAddresses.push(STAKING_CONTRACT) + providersAddresses.push(STAKING_CONTRACT); - return sumTokens2({ owners: providersAddresses, tokens: [JPEG], api }) + return sumTokens2({ owners: providersAddresses, tokens: [JPEG], api }); } /** * @returns the amount of $APE tokens staked on JPEG'd */ async function getStakedApeAmount(api) { - const apeDepositAddresses = await getApeDepositAddresses(api); - const apeStakes = await api.multiCall({ - abi: abi.APE_STAKING.stakedTotal, - target: APE_STAKING, - calls: apeDepositAddresses, - }) - apeStakes.forEach(v => api.add(APE, v)) -} - -/** - * @returns the amount of wallet staked BAKC NFTs on JPEG'd - */ -async function getWalletStakedBakcCount(api) { - const apeDepositAddresses = await getApeDepositAddresses(api); - - const bakcBalances = await api.multiCall({ - abi: "erc20:balanceOf", - target: BAKC, - calls: apeDepositAddresses, - }); - - const bakcIdsBN = await api.multiCall({ - abi: abi.ERC721.tokenOfOwnerByIndex, - target: BAKC, - calls: apeDepositAddresses - .map((owner, i) => - Array.from({ length: bakcBalances[i].toString() }).map((_, j) => ({ - params: [owner, j], - })) - ) - .flat(), - }); - - const bakcIds = Array.from(new Set(bakcIdsBN.map((id) => id.toString()))); - const ownerBakcIndexTuples = bakcIds.map((bakcId) => [ - "0x0000000000000000000000000000000000000000", // random owner address, it's not used. just for consistent parameters - bakcId.toString(), + const [apeDepositAddresses, lastNonce] = await Promise.all([ + getApeDepositAddresses(api), + api.call({ + target: P2P_APE_STAKING, + abi: abi.P2P_APE_STAKING_ABI.nextNonce, + }), ]); - const [isNonLegacyBaycStaked, isNonLegacyMaycStaked] = await Promise.all([ + const [apeStakes, offers] = await Promise.all([ api.multiCall({ - abi: abi.STRATEGY_ABI.isDeposited, - calls: ownerBakcIndexTuples.map((params) => ({ - target: BAKC_BAYC_STAKING_STRATEGY, - params, - })), + abi: abi.APE_STAKING.stakedTotal, + target: APE_STAKING, + calls: apeDepositAddresses, }), api.multiCall({ - abi: abi.STRATEGY_ABI.isDeposited, - calls: ownerBakcIndexTuples.map((params) => ({ - target: BAKC_MAYC_STAKING_STRATEGY, - params, - })), + abi: abi.P2P_APE_STAKING_ABI.offers, + target: P2P_APE_STAKING, + calls: new Array(Number(lastNonce)).fill(null).map((_, i) => i), }), ]); - bakcIds.forEach((_, i) => { - const legacyBakc = !isNonLegacyBaycStaked[i] && !isNonLegacyMaycStaked[i]; - if (legacyBakc) api.add(BAKC, 1) - }); + apeStakes.forEach((v) => api.add(APE, v)); + offers.forEach((v) => api.add(APE, v.apeAmount)); } async function vaultsTvl(api) { // Fetch positions from vaults - const positions = await api.multiCall({ calls: VAULTS_ADDRESSES, abi: abi.VAULT_ABI.totalPositions, }) - let tokens = await api.multiCall({ abi: 'address:nftContract', calls: VAULTS_ADDRESSES }) - tokens = tokens.map(i => i.toLowerCase()) - const transform = t => helperToNftMapping[t.toLowerCase()] || t + const positions = await api.multiCall({ + calls: VAULTS_ADDRESSES, + abi: abi.VAULT_ABI.totalPositions, + }); + let tokens = await api.multiCall({ + abi: "address:nftContract", + calls: VAULTS_ADDRESSES, + }); + tokens = tokens.map((i) => i.toLowerCase()); + const transform = (t) => helperToNftMapping[t.toLowerCase()] || t; tokens.forEach((v, i) => { if (artBlockOwners.has(v)) return; - api.add(transform(v), positions[i]) - }) + api.add(transform(v), positions[i]); + }); +} + +async function autocompoundingTvl(api) { + const curveBalApi = "function balances(uint256) view returns (uint256)"; + const [ + ethInPETHFactory, + pethGaugeSupply, + pethGaugeBalance, + usdInPUSDFactory, + pusdGaugeSupply, + pusdGaugeBalance, + ] = await api.batchCall([ + { target: PETH_POOL, abi: curveBalApi, params: [0] }, + { target: PETH_POOL, abi: "erc20:totalSupply" }, + { target: PETH_ETH_F, abi: "erc20:balanceOf", params: [LP_STAKING] }, + { target: USD_POOL, abi: curveBalApi, params: [1] }, + { target: USD_POOL, abi: "erc20:totalSupply" }, + { target: PUSD_USD_F, abi: "erc20:balanceOf", params: [LP_STAKING] }, + ]); + + api.add(nullAddress, (ethInPETHFactory * pethGaugeSupply) / pethGaugeSupply); + api.add( + "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", + (usdInPUSDFactory * pusdGaugeBalance) / pusdGaugeSupply + ); } async function tvl(ts, b, cb, { api }) { await Promise.all([ getStakedApeAmount(api), - getWalletStakedBakcCount(api), vaultsTvl(api), - sumTokens2({ api, resolveArtBlocks: true, owners: [...artBlockOwners], }), + autocompoundingTvl(api), + sumTokens2({ api, resolveArtBlocks: true, owners: [...artBlockOwners] }), ]); } -module.exports = { tvl, stakingJPEGD, }; +module.exports = { tvl, stakingJPEGD }; diff --git a/projects/jpeg-d/index.js b/projects/jpeg-d/index.js index 3b14659b3f..0637c36923 100644 --- a/projects/jpeg-d/index.js +++ b/projects/jpeg-d/index.js @@ -1,23 +1,18 @@ const { staking } = require("../helper/staking"); const { tvl, stakingJPEGD } = require("./helper/index"); -const { - LP_STAKING, - JPEG_WETH_SLP, - PETH_ETH_F, - PUSD_USD_F, -} = require("./helper/addresses"); +const { LP_STAKING, JPEG_WETH_SLP } = require("./helper/addresses"); module.exports = { methodology: `Counts the floor value of all NFTs supplied in the protocol vaults`, ethereum: { tvl, staking: stakingJPEGD, - pool2: staking(LP_STAKING, [JPEG_WETH_SLP, PETH_ETH_F, PUSD_USD_F, ]), + pool2: staking(LP_STAKING, [JPEG_WETH_SLP]), }, hallmarks: [ [1666003500, "pETH borrows"], [1669551000, "JPEG LTV boost"], - [1670518800, "APE staking"], - [1674669600, "Autoglyphs & Fidenza support"], + [1683662400, "P2P Ape Staking"], + [1690730000, "pETH-ETH Curve pool drained"], ], }; diff --git a/projects/juicebox-v1/index.js b/projects/juicebox-v1/index.js index cf26db7797..ff731630f6 100644 --- a/projects/juicebox-v1/index.js +++ b/projects/juicebox-v1/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') // V1 Juicebox Terminals const Terminal_V1 = "0xd569D3CCE55b71a8a3f3C418c329A66e5f714431"; const Terminal_v1_1 = "0x981c8ECD009E3E84eE1fF99266BF1461a12e5c68"; // Tokens -const ETH = '0x0000000000000000000000000000000000000000' +const ETH = ADDRESSES.null module.exports = { timetravel: true, diff --git a/projects/juicebox-v2/index.js b/projects/juicebox-v2/index.js index 317fb6d600..581e168f3e 100644 --- a/projects/juicebox-v2/index.js +++ b/projects/juicebox-v2/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') // V2 Juicebox Terminals const Terminal_V2 = "0x7Ae63FBa045Fec7CaE1a75cF7Aa14183483b8397"; // Tokens -const ETH = '0x0000000000000000000000000000000000000000' +const ETH = ADDRESSES.null module.exports = { timetravel: true, diff --git a/projects/juicebox-v3/index.js b/projects/juicebox-v3/index.js index 9adad53181..278432b263 100644 --- a/projects/juicebox-v3/index.js +++ b/projects/juicebox-v3/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') // V3 Juicebox Terminals const Terminal_V3 = "0x594Cb208b5BB48db1bcbC9354d1694998864ec63"; const Terminal_V3_1 = "0xFA391De95Fcbcd3157268B91d8c7af083E607A5C"; // Tokens -const ETH = '0x0000000000000000000000000000000000000000' +const ETH = ADDRESSES.null module.exports = { timetravel: true, diff --git a/projects/jupiterswap/index.js b/projects/jupiterswap/index.js index 70c4c723db..ae008a5404 100644 --- a/projects/jupiterswap/index.js +++ b/projects/jupiterswap/index.js @@ -1,6 +1,9 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + hallmarks: [ + [1660521600, "incentives not given"] + ], misrepresentedTokens: true, methodology: "Factory addresses (0xc08BAEA14C14f25bcafe3e3E05550715505eF3dE for kava) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", kava: { diff --git a/projects/justlend.js b/projects/justlend.js index 13ce516008..f609798c85 100644 --- a/projects/justlend.js +++ b/projects/justlend.js @@ -1,23 +1,6 @@ -const { get } = require('./helper/http') -const { toUSDTBalances } = require('./helper/balances'); - -function core(borrowed){ -return async () => { - const response = ( - await get( - 'https://labc.ablesdxd.link/justlend/markets/dashboard') - ).data; - - const tvl = response.totalDepositedUSD - response.totalBorrowedUSD; - - return toUSDTBalances(borrowed? response.totalBorrowedUSD : tvl); -}; -} +const { compoundExports2 } = require('./helper/compound') +const ADDRESSES = require('./helper/coreAssets.json') module.exports = { - misrepresentedTokens: true, - tron: { - tvl: core(false), - borrowed: core(true), - }, + tron: compoundExports2({ comptroller: 'TGjYzgCyPobsNS9n6WcbdLVR9dH7mWqFx7', cether: '0x2c7c9963111905d29eb8da37d28b0f53a7bb5c28', cetheEquivalent: ADDRESSES.tron.WTRX, transformAdressRaw: i => 'tron:' + i }), }; diff --git a/projects/justmoney/index.js b/projects/justmoney/index.js index 0606a8b799..af8ef28f6b 100644 --- a/projects/justmoney/index.js +++ b/projects/justmoney/index.js @@ -1,139 +1,34 @@ -const sdk = require('@defillama/sdk') -const { getTokenBalance } = require('../helper/chain/tron') const { getUniTVL } = require('../helper/unknownTokens') -const tokens = { - ACTIV: { 'address': 'TVoxBVmFuBM7dsRnfi1V8v1iupv4uyPifN', 'id': '_activ' }, - BBT: { 'address': 'TGyZUWrL97mmmYJwrC7ZCLVrhbzvHmmWPL', 'id': '_bbt' }, - BCN: { 'address': 'TAoA331n3iKDkR62kAZ4H2n3vNL7y3d8x9', 'id': 'bemchain' }, - BEMT: { 'address': 'TBp6ZMzkxci5o4sJjFa6Fo9Wy36gcubQLW', 'id': 'bem' }, - BTT: { 'address': 'TAFjULxiVgT4qWk6UZwjqwZXTSaGaqnVp4', 'id': 'bittorrent' }, - CREED: { 'address': 'TM2fhs1CFiS696VW13s3oBuDdPazCEGcfJ', 'id': '_creed' }, - CREEDX: { 'address': 'TQSC8P2nLsawUZHF6iMAD6KPH8HdJXFWYi', 'id': '_creedx' }, - CUBE: { 'address': 'TQxzbBVFRFUgHXnhyCRiatrkwX9BAJnHam', 'id': '_cube' }, - CYFM: { 'address': 'TZ5jA9F5zGRgi9qk9ATMu6D7wyEpnxQGJh', 'id': 'cyberfm' }, - ICR: { 'address': 'TKqvrVG7a2zJvQ3VysLoiz9ijuMNDehwy7', 'id': 'intercrone' }, - JM: { 'address': 'TVHH59uHVpHzLDMFFpUgCx2dNAQqCzPhcR', 'id': 'justmoney-2' }, - JST: { 'address': 'TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9', 'id': 'just' }, - KLV: { 'address': 'TVj7RNVHy6thbM7BWdSe9G6gXwKhjhdNZS', 'id': 'klever' }, - KODX: { 'address': 'TTUwzoZAK6rpDjpSh8B2XFTnxGfbMLHJaq', 'id': 'kodx' }, - KTY: { 'address': 'TTroZqb95vmsw4kppupQ8tVEzkNDDP2bcG', 'id': '_kty' }, - LDA: { 'address': 'TNP1D18nJCqQHhv4i38qiNtUUuL5VyNoC1', 'id': '_lda' }, - LUMI: { 'address': 'TDBNKiYQ8yfJtT5MDP3byu7f1npJuG2DBN', 'id': 'lumi-credits' }, - MEOX: { 'address': 'TQy3PRQda43yb3Ku35AktG549KMQLCJVDb', 'id': '_meox' }, - NFT: { 'address': 'TFczxzPhnThNSqr5by8tvxsdCFRRz6cPNq', 'id': 'apenft' }, - NOLE: { 'address': 'TPt8DTDBZYfJ9fuyRjdWJr4PP68tRfptLG', 'id': '_nole' }, - OLDJM: { 'address': 'TT8VkSkW6igkiRsV5WiJgLrsbVwY5bLLjA', 'id': 'justmoney' }, - PROS: { 'address': 'TFf1aBoNFqxN32V2NQdvNrXVyYCy9qY8p1', 'id': '_pros' }, - SafeMoney: { 'address': 'TNBrVEzuVYbNbGF2ua3ivSX5Y5V9N4xhax', 'id': 'safemoney' }, - SFI: { 'address': 'TVGiaML3hJE7sv9NEEVjqLbF5DcXJgHSfy', 'id': 'strx-finance' }, - SUN: { 'address': 'TSSMHYeV2uE9qYH95DqyoCuNCzEL1NvU3S', 'id': 'sun-token' }, - TBT: { 'address': 'TJpCQC2gJRAbqG9nuQHvzYBmCuYJQzP3SS', 'id': '_tbt' }, - TNT: { 'address': 'TL33cN6t22RcKyqPKkb14iVrPHDFaFMH7t', 'id': '_tnt' }, - TRX: { 'address': 'TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR', 'id': 'tron' }, - turu: { 'address': 'TK8K7HFDLkhYS6XnFC8MKQkVK6Xq8D13qJ', 'id': '_turu' }, - TREX: { 'address': 'THyYjzy42cy83Nwg6pbsUTcV1GBrPPqGE5', 'id': '_trex' }, - TWJ: { 'address': 'TNq5PbSssK5XfmSYU4Aox4XkgTdpDoEDiY', 'id': '_twj' }, - USDD: { 'address': 'TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn', 'id': 'usdd' }, - USDT: { 'address': 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', 'id': 'tether' }, - USTX: { 'address': 'TYX2iy3i3793YgKU5vqKxDnLpiBMSa5EdV', 'id': 'upstabletoken' }, - VBS: { 'address': 'TJRc6ZTMhHEPrWPtfsVvXW1mxHPLw1arZo', 'id': '_vbs' }, - WOX: { 'address': 'TYVFMntFj7xLMxp1CvuXwg9LpPw1dPwWhM', 'id': '_wox' }, - ZLF: { 'address': 'TXoPCbHtWTerfiNjFBpJdMQqQJoXoT87pq', 'id': '_zlf' }, -} - -const pairs = [ - [tokens.TRX, tokens.OLDJM, 'TFijK2dCUsrXoZM7PYhFqnM9F4Tac8uBJt'], - [tokens.TRX, tokens.USDT, 'TYA7DfE44XFsZEpBm7M2HAmEgU5kCtDDXg'], - [tokens.USDT, tokens.OLDJM, 'TSGv8is6ZMeHRwMQCvq6f16YFTLbw2bpmr'], - [tokens.SafeMoney, tokens.TRX, 'TTqB2CRJ2PF9qbCRkSVVGsFbx9mZUFNZS3'], - [tokens.NOLE, tokens.USDT, 'TEg25qPxj9zecferiUbf2Senqmbuae7p55'], - [tokens.TRX, tokens.SUN, 'TGzv3DHcsbxmCNj1Cd1W6P3Ao37fs2mot8'], - [tokens.LUMI, tokens.USDT, 'TWEee7dNN7Zc2M8f13M28KhBGrroVrdGxM'], - [tokens.BBT, tokens.TRX, 'TTFYn18KrMxpdoQCxsp5SYjmDgS6dDEQTv'], - [tokens.ICR, tokens.TRX, 'TTHoKhr85UiMPSHmdTukLkv3mAjjSdsiH5'], - [tokens.CREED, tokens.TRX, 'TVcbypQLttW96yHzBraXBVnhcKC7HDRSfD'], - [tokens.TRX, tokens.CREEDX, 'TN4BUph6ubYbmBDy2u9wpqoNg3DR1vrZRN'], - [tokens.USDT, tokens.CYFM, 'TYNTeRHHbqH4sm5GcrwhQqa89ZaBGipEuG'], - [tokens.USDT, tokens.KLV, 'TBB26dZsWFPDfYNyPWpD8LtdKCCRr3aDbY'], - [tokens.TRX, tokens.KTY, 'TGMgXjSEzf5h7qK7cMZPuvu4wAk9x21Vwu'], - [tokens.NFT, tokens.TRX, 'TQy4L8yguUXEsxUZmyrLfADgtwRhL6GgWH'], - [tokens.JST, tokens.TRX, 'TJAZ6MvFBUnRw8vVDvgvGRMWGzDVaS6eqr'], - [tokens.TNT, tokens.TRX, 'TFT7z2ELWzPuUeP8FgPTEAYe7syQ4TTYfo'], - [tokens.TRX, tokens.ZLF, 'TEwbxEXNd3P7fVP6v4W91mRhGCYeGUkEdE'], - [tokens.turu, tokens.TRX, 'TVBdRMsCnaNmY7jDVRm6VJxfeZZW3qKWoE'], - [tokens.TRX, tokens.KLV, 'TNMUT9h6zZDnxouGf1EfXQ4yt1nHhnM4Ae'], - [tokens.TWJ, tokens.USDT, 'TA95HcnsqfzKarHJzfB4V4JvrnZnqnBvWU'], - [tokens.BTT, tokens.TRX, 'TMz4JoDPUv8rgqUaZCkaSrH7kQ819z2Vd9'], - [tokens.TRX, tokens.ACTIV, 'TG2ZRTv3WX9cD53TEcTyjuuHd8pWCAg11X'], - [tokens.TRX, tokens.KODX, 'TL8wEwke3gGrnw4zEBxisSG2RxehZT7xXs'], - [tokens.BEMT, tokens.TRX, 'TWXEXQyEwSzSBENrWyiGu69Dd3yU8QREHV'], - [tokens.TRX, tokens.WOX, 'TG1CirSZHqQ3yGJBMfXHjBcWVctfihciQL'], - [tokens.TREX, tokens.TRX, 'TVzgLYrKSf2ZrPkWP7SbFXk6iKfR7PNHtR'], - [tokens.LDA, tokens.TRX, 'TDV1P9ZpN3VaE8Rti6PXDZ3gAWUNMbRfa2'], - [tokens.TRX, tokens.CUBE, 'TCqsrTUsBHBFoDRwjvjn6zooj6Cp6e1wUk'], - [tokens.TRX, tokens.JM, 'TR7SpMHzp5ZfsBedbXzQ5CJsqBmg8oxzzr'], - [tokens.USDT, tokens.JM, 'THTWV7R3U7XQsHWQt8YHgsqirvY9QttB7u'], - [tokens.USDD, tokens.USDT, 'TNR1gJVMjE47uZxCrQaQe1xat2uBs3jAHr'], - [tokens.TBT, tokens.TRX, 'TWwbk4ypVR6aKb2CS8TvERg1rxATUfWavP'], - [tokens.TRX, tokens.USTX, 'TUFeu1WbJwL4jCAyu9pcotuASnbxEUbphn'], - [tokens.BBT, tokens.VBS, 'TH6yNkvtthsPJLqVE1M8ri7zX9G7pi3fRR'], - [tokens.TRX, tokens.USDD, 'TAQTQvDWBvHmfjHDn8cPaPUUxqdGQK9UjS'], - [tokens.TRX, tokens.MEOX, 'TJLz2jF3aF6yLL27sdmfjakrcLyY29qfxL'], - [tokens.PROS, tokens.TRX, 'TA7hPWMWPWoadfFKWpTAdPYVZd3SNdtBDE'], - [tokens.PROS, tokens.USDT, 'TEApbrCXg4q6ccTvwLRNNh9N1wN4gfxTtd'], - // [tokens.GOLC, tokens.USDT, 'TPEZJ7Jm3FqzigM2PZ7tGxg6FMphfwVLn2'], - [tokens.MEOX, tokens.JM, 'TMS2EaT8oKQcNmrbjArhi1umN1kFStRqrj'], - [tokens.ICR, tokens.MEOX, 'TUetV2cVNwyeG24TKa1Vbdoom5Acu7Vuw2'], - [tokens.BCN, tokens.TRX, 'TTJVUzQnGcPcgkWHBmBBqGBtdEvaHdmVmG'], - // [tokens.THANX, tokens.USDT, 'TLht8w4xJMBsCn7keucn3PXzFyuGnQdjTS'], - [tokens.turu, tokens.USDT, 'TMGpNrSJvFeQSGtoLa3msFtKYmLAs3phAv'], - // [tokens.TRX, tokens.STRX, 'TTjMrfeaSivubKPNGTLJNKLrdffxh1Rq7v'], - [tokens.TRX, tokens.SFI, 'TUgeA5NHe9i8abXDUGn6YF29cfqNhY1P27'], -] - -async function tronTvl() { - const balances = {} - - await Promise.all(pairs.map(addPairs)) - return balances - - async function addPairs([tokenA, tokenB, pool]) { - if (!tokenA.id.startsWith('_')) sdk.util.sumSingleBalance(balances, tokenA.id, await getTokenBalance(tokenA.address, pool)) - if (!tokenB.id.startsWith('_')) sdk.util.sumSingleBalance(balances, tokenB.id, await getTokenBalance(tokenB.address, pool)) - } -} - module.exports = { bsc: { tvl: getUniTVL({ - chain: 'bsc', factory: '0xF2Fb1b5Be475E7E1b3C31082C958e781f73a1712', useDefaultCoreAssets: true, }), }, bittorrent: { tvl: getUniTVL({ - chain: 'bittorrent', factory: '0x4dEb2f0976DC3Bf351555524B3A24A4feA4e137E', useDefaultCoreAssets: true, }), }, ethereum: { tvl: getUniTVL({ - chain: 'ethereum', factory: '0xd36Aba9Ec96523b0A89886c76065852aDFE2Eb39', useDefaultCoreAssets: true, }), }, polygon: { tvl: getUniTVL({ - chain: 'polygon', factory: '0xD36ABA9EC96523B0A89886C76065852ADFE2EB39', useDefaultCoreAssets: true, }), }, tron: { - tvl: tronTvl + tvl: getUniTVL({ + factory: 'TBfTeNjh7k8PbkTad8z6WS2vqh7SQZUfQ8', + useDefaultCoreAssets: true, + }), }, } diff --git a/projects/juststable/index.js b/projects/juststable/index.js index a7d6175d43..bbba4e37fb 100644 --- a/projects/juststable/index.js +++ b/projects/juststable/index.js @@ -1,27 +1,9 @@ -const axios = require('axios') -const {getApiTvl} = require('../helper/historicalApi') -const { usdtAddress } = require('../helper/balances') - -async function tvl(timestamp){ - const balances = await getApiTvl(timestamp, async ()=>{ - const r = (await axios.get("https://abc.ablesdxd.link/scan/collInfo/timeLine")).data.data - return Number(r[r.length-1].wtrxLocked)/1e12 - }, async()=>{ - const r = await axios.get("https://abc.ablesdxd.link/scan/collInfo/timeLine") - // {liquidity: "0.000000000000000000", time: 1597492800000} - return r.data.data.map(d=>({ - date: d.t/1000, - totalLiquidityUSD: Number(d.wtrxLocked)/1e12 - })) - }); - return { - "tron": Number(balances[usdtAddress]) - } -} +const { sumTokensExport } = require('../helper/unwrapLPs'); +const ADDRESSES = require('../helper/coreAssets.json'); module.exports = { - timetravel: true, - tron:{ - tvl - } + timetravel: false, + tron: { + tvl: sumTokensExport({ owner: 'TRrY9fXGnfLmcp7ytkLmHiTpvYMHG6zUGF', tokens: [ADDRESSES.tron.WTRX] }) + } } diff --git a/projects/kaDefi/index.js b/projects/kaDefi/index.js index 0904e4be7c..c38d70cbd0 100644 --- a/projects/kaDefi/index.js +++ b/projects/kaDefi/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unknownTokens'); const WkavaKafiLpAddress = "0xA4Bea6f776f483a304FD6980F8F8c861AB24DE07"; -const ERC20ContractWkavaAddress = "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b"; +const ERC20ContractWkavaAddress = ADDRESSES.kava.WKAVA; const ERC20ContractKafiAddress = "0x7356deD08af181869B492fcd641f4aEfB74De3E7"; const POL_Pool_One = "0xdf65B85E43dBa1F153325e7e4A0682B7DeBBFe0f"; const POL_Pool_Two = "0x738d2b4b59A0A3AA4086bC44C40a45845bB73FCC"; diff --git a/projects/kaco/index.js b/projects/kaco/index.js index 4d0f8211eb..ca5117962a 100644 --- a/projects/kaco/index.js +++ b/projects/kaco/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { uniTvlExport } = require("../helper/calculateUniTvl.js"); @@ -13,7 +14,7 @@ const KACFactory = { }; const KAC = { bsc: "0xf96429A7aE52dA7d07E60BE95A3ece8B042016fB", - shiden: "0xb12c13e66ade1f72f71834f2fc5082db8c091358", + shiden: ADDRESSES.harmony.AVAX, }; module.exports = { diff --git a/projects/kagla/addresses.js b/projects/kagla/addresses.js index 7f037e9d04..b51f3ce4cb 100644 --- a/projects/kagla/addresses.js +++ b/projects/kagla/addresses.js @@ -1,54 +1,11 @@ -const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" +const ADDRESSES = require('../helper/coreAssets.json') const ADDRESS_PROVIDER_ADDRESS = "0x5a0ad8337E5C6895b3893E80c8333859DAcf7c01" -const KGL_ADDRESS = "0x257f1a047948f73158DaDd03eB84b34498bCDc60" +const KGL_ADDRESS = ADDRESSES.astar.KGL const VOTING_ESCROW_ADDRESS = "0x432c8199F548425F7d5746416D98126E521e8174" -const transformTokenAddress = (address) => TOKENS[address] - -const TOKEN_INFO = { - ausd: { key: "acala-dollar", decimals: 12 } -} - -const TOKENS = { - // KGL - [KGL_ADDRESS]: "kagla-finance", - // muKGL: staked KGL by Muuu Finance - "0x5eaAe8435B178d4677904430BAc5079e73aFa56e": "kagla-finance", - // USDC - "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - // Starlay lUSDC -> USDC - "0xC404E12D3466acCB625c67dbAb2E1a8a457DEf3c": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - // USDT - "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283": "0xdac17f958d2ee523a2206206994597c13d831ec7", - // Starlay lUSDT -> USDT - "0x430D50963d9635bBef5a2fF27BD0bDDc26ed691F": "0xdac17f958d2ee523a2206206994597c13d831ec7", - // DAI - "0x6De33698e9e9b787e09d3Bd7771ef63557E148bb": "0x6b175474e89094c44da98b954eedeac495271d0f", - // Starlay lDAI -> DAI - "0x4dd9c468A44F3FEF662c35c1E9a6108B70415C2c": "0x6b175474e89094c44da98b954eedeac495271d0f", - // BUSD - "0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E": "binance-usd", - // BAI - "0x733ebcC6DF85f8266349DEFD0980f8Ced9B45f35": "bai-stablecoin", - // aUSD - "0xfFFFFfFF00000000000000010000000000000001": TOKEN_INFO.ausd.key, - // ASTR - "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" : "astar", - // nASTR: staked ASTR by Algem - "0xE511ED88575C57767BAfb72BfD10775413E3F2b0": "astar", - // LAY - "0xc4335B1b76fA6d52877b3046ECA68F6E708a27dd": "starlay-finance", - // muLAY: staked LAY by Muuu Finance - "0xDDF2ad1d9bFA208228166311FC22e76Ea7a4C44D": "starlay-finance", -}; - - module.exports = { - ZERO_ADDRESS, ADDRESS_PROVIDER_ADDRESS, VOTING_ESCROW_ADDRESS, KGL_ADDRESS, - TOKEN_INFO, - transformTokenAddress } diff --git a/projects/kagla/index.js b/projects/kagla/index.js index 0eda07aca0..560f32dd17 100644 --- a/projects/kagla/index.js +++ b/projects/kagla/index.js @@ -1,26 +1,17 @@ const { getBalances } = require("./pools"); -const { getStaked } = require("./staking"); +const { VOTING_ESCROW_ADDRESS, KGL_ADDRESS, } = require("./addresses"); +const { staking } = require('../helper/staking') const START_BLOCK = 724359 -async function astar(_timestamp, _block, {astar: block}) { - const chain = "astar" - const balances = await getBalances(chain, block) - return balances -} - -async function staking(_timestamp, _block, {astar: block}) { - const chain = "astar" - const staked = await getStaked(chain, block) - return staked +async function astar(_timestamp, _block, {astar: block}, { api }) { + return getBalances(api) } module.exports = { - timetravel: true, - misrepresentedTokens: true, start: START_BLOCK, astar: { tvl: astar, - staking: staking + staking: staking(VOTING_ESCROW_ADDRESS, KGL_ADDRESS) }, }; diff --git a/projects/kagla/pools.js b/projects/kagla/pools.js index eef4140280..183c19b00a 100644 --- a/projects/kagla/pools.js +++ b/projects/kagla/pools.js @@ -1,76 +1,16 @@ -const sdk = require("@defillama/sdk"); -const { toBigNumberJsOrZero } = require("./utils.js"); +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') const addressProviderABI = require("./abi/addressProvider.json"); const registryABI = require("./abi/registry.json"); -const { ADDRESS_PROVIDER_ADDRESS, ZERO_ADDRESS, transformTokenAddress, TOKEN_INFO } = require("./addresses"); +const { ADDRESS_PROVIDER_ADDRESS, } = require("./addresses"); -const getBalances = async (chain, block) => { - const registryAddress = (await sdk.api.abi.call({ - target: ADDRESS_PROVIDER_ADDRESS, - abi: addressProviderABI["get_registry"], - block, - chain, - })).output +const getBalances = async (api) => { + const registry = await api.call({ target: ADDRESS_PROVIDER_ADDRESS, abi: addressProviderABI["get_registry"], }) + const poolAddresses = await api.fetchList({ lengthAbi: registryABI["pool_count"], itemAbi: registryABI["pool_list"], target: registry }) - const poolAddresses = await listPoolAddresses(chain, block, registryAddress) - - const poolCoinsArray = (await sdk.api.abi.multiCall({ - calls: poolAddresses.map(address => ({ target: registryAddress, params: address })), - abi: registryABI["get_coins"], - block, - chain, - })).output.map(({ output }) => output.filter(address => address !== ZERO_ADDRESS)) - - const poolBalancesArray = (await sdk.api.abi.multiCall({ - calls: poolAddresses.map(address => ({ target: registryAddress, params: address })), - abi: registryABI["get_balances"], - block, - chain, - })).output.map(({ output }) => output) - - const balanceBNRecord = poolCoinsArray.reduce( - (result, coins, poolIndex) => - coins.reduce((coinsResult, coin, coinIndex) => { - const balance = toBigNumberJsOrZero(poolBalancesArray[poolIndex][coinIndex]) - const transformedCoin = transformTokenAddress(coin) - const exisitingBalance = coinsResult[transformedCoin] - if(!transformedCoin) return coinsResult - if(!exisitingBalance) - return { ...coinsResult, [transformedCoin]: balance } - return { ...coinsResult, [transformedCoin]: exisitingBalance.plus(balance) } - }, result), - {} - ) - - return Object.keys(balanceBNRecord).reduce((result, key) => { - if (key.startsWith("0x")) - return { ...result, [key]: balanceBNRecord[key].toString() } - for (const token of Object.values(TOKEN_INFO)) { - if (key === token.key) - return {...result, [key]: balanceBNRecord[key].shiftedBy(-token.decimals).toFixed(0) } - } - return ({ ...result, [key]: balanceBNRecord[key].shiftedBy(-18).toFixed(0) }) - }, {}) -} - -const listPoolAddresses = async (chain, block, registryAddress) => { - const numOfPools = (await sdk.api.abi.call({ - target: registryAddress, - abi: registryABI["pool_count"], - block, - chain, - })).output - const poolAddressesCalls = [] - for (let i = 0; i < numOfPools; i++) { - poolAddressesCalls.push({ target: registryAddress, params: i }) - } - return (await sdk.api.abi.multiCall({ - calls: poolAddressesCalls, - abi: registryABI["pool_list"], - block, - chain, - })).output.map(({ output }) => output) + const poolCoinsArray = await api.multiCall({ target: registry, calls: poolAddresses, abi: registryABI["get_coins"], }) + const ownerTokens = poolCoinsArray.map((v, i) => [v.filter(i => i !== nullAddress), poolAddresses[i]]) + return sumTokens2({ api, ownerTokens, blacklistedTokens: poolAddresses }) } module.exports = { diff --git a/projects/kagla/staking.js b/projects/kagla/staking.js deleted file mode 100644 index d28b721476..0000000000 --- a/projects/kagla/staking.js +++ /dev/null @@ -1,22 +0,0 @@ -const sdk = require("@defillama/sdk"); -const { toBigNumberJsOrZero } = require("./utils.js"); - -const { VOTING_ESCROW_ADDRESS, KGL_ADDRESS, transformTokenAddress } = require("./addresses"); - -const getStaked = async (chain, block) => { - const lockedKGLBalance = (await sdk.api.abi.call({ - target: KGL_ADDRESS, - abi: 'erc20:balanceOf', - params: [VOTING_ESCROW_ADDRESS], - block, - chain, - })).output - - return { - [transformTokenAddress(KGL_ADDRESS)]: toBigNumberJsOrZero(lockedKGLBalance).shiftedBy(-18).toFixed(0) - } -} - -module.exports = { - getStaked -} diff --git a/projects/kagla/utils.js b/projects/kagla/utils.js deleted file mode 100644 index 696def55e5..0000000000 --- a/projects/kagla/utils.js +++ /dev/null @@ -1,11 +0,0 @@ -const BigNumberJs = require("bignumber.js"); -BigNumberJs.config({ EXPONENTIAL_AT: 1e9 }) - -const toBigNumberJsOrZero = (value) => { - const bn = new BigNumberJs(value) - return bn.isNaN() ? new BigNumberJs('0') : bn -} - -module.exports = { - toBigNumberJsOrZero -} diff --git a/projects/kalata/index.js b/projects/kalata/index.js index eb0d994204..d2e07e1a1e 100644 --- a/projects/kalata/index.js +++ b/projects/kalata/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { staking } = require('../helper/staking') const { getUniTVL } = require('../helper/unknownTokens') @@ -9,15 +10,15 @@ const masterchef = '0x565bCba3eA730ac6987edE126B29DCf499fccEA1' async function tvl(time, ethBlock, chainBlocks, { api }) { return sumTokens2({ api, ownerTokens: [ - [['0xe9e7cea3dedca5984780bafc599bd69add087d56'], '0x2d067575BE1f719f0b0865D357e67925B6f461C5'], // BUSD mint + [[ADDRESSES.bsc.BUSD], '0x2d067575BE1f719f0b0865D357e67925B6f461C5'], // BUSD mint [[ - "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", - "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + ADDRESSES.bsc.BTCB, + ADDRESSES.bsc.ETH, "0x23396cf899ca06c4472205fc903bdb4de249d6fc", - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + ADDRESSES.bsc.USDC, "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "0x55d398326f99059ff775485246999027b3197955", - "0xe9e7cea3dedca5984780bafc599bd69add087d56", + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BUSD, "0x5066c68cae3b9bdacd6a1a37c90f2d1723559d18",], masterchef], ] }) diff --git a/projects/kannagi-finance/abi.json b/projects/kannagi-finance/abi.json new file mode 100644 index 0000000000..bc8ebbfe26 --- /dev/null +++ b/projects/kannagi-finance/abi.json @@ -0,0 +1,4 @@ +{ + "poolTvlInfo":"function totalTvl() view returns (tuple(uint256 pid, address want, uint256 tvl)[])", + "reserves":"function getReserves() external view returns (uint _reserve0, uint _reserve1)" +} \ No newline at end of file diff --git a/projects/kannagi-finance/index.js b/projects/kannagi-finance/index.js new file mode 100644 index 0000000000..f46bb61a46 --- /dev/null +++ b/projects/kannagi-finance/index.js @@ -0,0 +1,37 @@ +const abi = require("./abi.json"); +const {yieldHelper} = require('../helper/yieldHelper'); +const KANA_ADDRESS = "0x26aC1D9945f65392B8E4E6b895969b5c01A7B414"; +const YIELD_ADDRESS= "0x6E415ba5a37761256D13E84B45f4822c179DEF47"; +const USDT_ADDRESS = "era:0x493257fd37edb34451f62edf8d2a0c418852ba4c"; + + +function yieldHelperWrapper(){ + const helperReturn = yieldHelper({ + project: 'kannagi-finance', + chain: 'era', + masterchef: YIELD_ADDRESS, + nativeToken: KANA_ADDRESS, + getPoolsFn: async (api) => api.call({ target: YIELD_ADDRESS, abi: abi.poolTvlInfo }), + getTokenBalances: async ({ poolInfos }) => poolInfos.map(poolInfo => poolInfo.tvl), + abis: { + getReservesABI: abi.reserves, + } +}) + +const tvlFun = helperReturn.era.tvl; + +const tvlFunWrapper =async function(_, _b, _cb, { api }){ + const tvlBalances = await tvlFun(_, _b, _cb, { api }) + if(tvlBalances[USDT_ADDRESS]!=='0'&&tvlBalances[USDT_ADDRESS]!==undefined){ + let balance = (tvlBalances[USDT_ADDRESS])/1e6; + tvlBalances["tether"] = balance; + delete tvlBalances[USDT_ADDRESS]; + } + return tvlBalances; +} +helperReturn.era.tvl = tvlFunWrapper + +return helperReturn; +} + +module.exports = {...yieldHelperWrapper(), hallmarks:[[1690589340, "Rug"]]} diff --git a/projects/kanvas/index.js b/projects/kanvas/index.js index ee273d52d7..30323e346c 100644 --- a/projects/kanvas/index.js +++ b/projects/kanvas/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const token0Abi = 'address:token0' @@ -10,7 +11,7 @@ const stakingAddress = "0x34d2Cfb257cCf7EFDC41DB9a824ac314da80Bae8"; const artStudio = "0xf15Bf479A5711f9411595C6289a9e7C36F24ad2F"; const transform = { -"0x150410ebbccc3be87997462ea7a44449b7c0dbf2":"kava:0x765277EebeCA2e31912C9946eAe1021199B39C61" +"0x150410ebbccc3be87997462ea7a44449b7c0dbf2":"kava:" + ADDRESSES.shiden.ETH } async function calcTvl(block, chain, pool2) { diff --git a/projects/kapinus/index.js b/projects/kapinus/index.js new file mode 100644 index 0000000000..601109737a --- /dev/null +++ b/projects/kapinus/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + bsc: { + tvl: getUniTVL({ + factory: '0x70e881fa43a7124e36639b54162395451cef1922', + abi: 'uint256:allPairs', + useDefaultCoreAssets: true, + fetchBalances: true, + }) + }, +}; diff --git a/projects/kasavadex/index.js b/projects/kasavadex/index.js index 889b273cf4..0300bb05d9 100644 --- a/projects/kasavadex/index.js +++ b/projects/kasavadex/index.js @@ -1,6 +1,9 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + hallmarks: [ + [1660521600, "incentives not given"] + ], misrepresentedTokens: true, methodology: "Factory addresses (0x8F1fD6Ed57B0806FF114135F5b50B5f76e9542F2 for kava) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", kava: { diff --git a/projects/kassandra/index.js b/projects/kassandra/index.js index e24bb1eb02..a9d8d4acb8 100644 --- a/projects/kassandra/index.js +++ b/projects/kassandra/index.js @@ -1,19 +1,73 @@ -const { postURL } = require('../helper/utils') +const sdk = require('@defillama/sdk') +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') +const abi = require('../aura-finance/abi.json') +const { stripTokenHeader } = require('../helper/tokenMapping') -async function fetch() { - const data = { - operationName: "TotalValueLocked", - variables: {}, - query: "query TotalValueLocked { factory (id: \"0x958c051B55a173e393af696EcB4C4FF3D6C13930\") { total_value_locked_usd } }" - } - const response = await postURL("https://graph.kassandra.finance/subgraphs/name/KassandraAvalanche", data); - return response.data.data.factory.total_value_locked_usd +const config = { + avax: { factory: '0x878fa1ef7d9c7453ea493c2424449d32f1dbd846', fromBlock: 10087927 }, } -module.exports = { - timetravel: false, - fetch, - avax: { - fetch, - } +const configBalancer = { + polygon: { factory: '0x228885c9d0440Ae640B88fBeE31522CC6a59Fd2F', fromBlock: 42020509 }, } + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x2dcffae760adbb49d27552cdcd6cf9835c1a8e4545a5b123f8cac6d5a968b11b'], + eventAbi: 'event LogNewPool(address indexed caller, address indexed pool)', + onlyArgs: true, + fromBlock, + }) + const pools = logs.map(log => log.pool) + const tokens = await api.multiCall({ abi: 'address[]:getCurrentTokens', calls: pools }) + await sumTokens2({ api, ownerTokens: pools.map((pool, i) => [tokens[i], pool]) }) + if (chain === 'avax') { + const balances = api.getBalances() + const allTokens = tokens.flat().map(i => i.toLowerCase()) + const symbols = await api.multiCall({ abi: 'string:symbol', calls: allTokens, }) + const yrtTokens = allTokens.filter((token, i) => symbols[i] === 'YRT') + const depositTokens = await api.multiCall({ abi: 'address:depositToken', calls: yrtTokens}) + const deposits = await api.multiCall({ abi: 'uint256:totalDeposits', calls: yrtTokens}) + const supply = await api.multiCall({ abi: 'uint256:totalSupply', calls: yrtTokens}) + Object.entries(balances).forEach(([token, balance]) => { + const t = stripTokenHeader(token) + yrtTokens.forEach((yToken, i) => { + if (yToken === t) { + delete balances[token] + sdk.util.sumSingleBalance(balances, depositTokens[i], balance * deposits[i] / supply[i], api.chain) + } + }) + }) + return balances + } + } + } +}) + +Object.keys(configBalancer).forEach(chain => { + const { factory, fromBlock } = configBalancer[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const managedPoolFactory = await api.call({ target: factory, abi: 'address:managedPoolFactory'}) + const vault = await api.call({ target: managedPoolFactory, abi: 'address:getVault'}) + const logs = await getLogs({ + api, + target: factory, + topics: ['0x3bccd8755c586fb977facb52bc850861b8588643edb28cbfef711671791710e9'], + eventAbi: 'event KassandraPoolCreatedTokens (bytes32 indexed vaultPoolId, string tokenName, string tokenSymbol, address[] tokens)', + onlyArgs: true, + fromBlock, + }) + const poolIds = logs.map(log => log.vaultPoolId) + const data = await api.multiCall({ abi: abi.getPoolTokens, calls: poolIds, target: vault}) + data.forEach(({ tokens, balances}) => api.addTokens(tokens.slice(1), balances.slice(1))) + return api.getBalances() + } + } +}) \ No newline at end of file diff --git a/projects/kava-boost/index.js b/projects/kava-boost/index.js index a6c9be3dcc..166bb75044 100644 --- a/projects/kava-boost/index.js +++ b/projects/kava-boost/index.js @@ -1,44 +1,16 @@ -const utils = require("../helper/utils"); -const sdk = require("@defillama/sdk"); +const { queryV1Beta1 } = require('../helper/chain/cosmos'); -async function tvl() { - let balances = {}; - let url = `https://api2.kava.io/kava/savings/v1beta1/total_supply`; +const chain = 'kava' +const blacklisted = new Set(['kava', 'ukava', 'bkava']) - const response = await utils.fetchURL(url); - - for (let coin of response.data.result) { - const tokenInfo = generic(coin.denom); - if (!tokenInfo) { - sdk.log("unknown token", coin.denom); - continue; - } - const tokenName = tokenInfo[0]; - if (tokenName !== 'kava') - sdk.util.sumSingleBalance(balances,tokenName,coin.amount / 10 ** tokenInfo[1]) - } - - return balances; -} - -function generic(ticker) { - switch (ticker) { - case "bkava": - return ["kava", 6]; - case "ukava": - return ["kava", 6]; - case "erc20/multichain/usdc": - return ["usd-coin", 6]; - case "erc20/multichain/usdt": - return ["tether", 6]; - case "erc20/multichain/dai": - return ["dai", 18]; - case "bnb": - return ["binancecoin", 8] - } +async function tvl(_, _1, _2, { api }) { + const { result: pools } = await queryV1Beta1({ chain, url: '/savings/v1beta1/total_supply' }); + pools + .filter(({ denom }) => !blacklisted.has(denom)) + .forEach(({ denom, amount }) => api.add(denom, amount)) } module.exports = { timetravel: false, kava: { tvl } -}; +}; \ No newline at end of file diff --git a/projects/kava-earn/index.js b/projects/kava-earn/index.js index 6dc6f5a6a8..07bab0a106 100644 --- a/projects/kava-earn/index.js +++ b/projects/kava-earn/index.js @@ -1,41 +1,13 @@ -const utils = require("../helper/utils"); -const sdk = require("@defillama/sdk"); +const { queryV1Beta1 } = require('../helper/chain/cosmos'); -async function tvl() { - const balances = {}; - let url = `https://api2.kava.io/kava/earn/v1beta1/total_supply`; +const chain = 'kava' - const response = await utils.fetchURL(url); - - for (let coin of response.data.result) { - const tokenInfo = generic(coin.denom); - if (!tokenInfo) { - utils.log("unknown token", coin.denom); - continue; - } - const tokenName = tokenInfo[0]; - sdk.util.sumSingleBalance(balances,tokenName,coin.amount / 10 ** tokenInfo[1]) - } - - return balances; -} - -function generic(ticker) { - switch (ticker) { - case "bkava": - return ["kava", 6]; - case "ukava": - return ["kava", 6]; - case "erc20/multichain/usdc": - return ["usd-coin", 6]; - case "erc20/multichain/usdt": - return ["tether", 6]; - case "erc20/multichain/dai": - return ["dai", 18]; - } +async function tvl(_, _1, _2, { api }) { + const { result: pools } = await queryV1Beta1({ chain, url: '/earn/v1beta1/total_supply' }); + pools.forEach(({ denom, amount }) => api.add(denom, amount)) } module.exports = { timetravel: false, kava: { tvl } -}; +}; \ No newline at end of file diff --git a/projects/kava-liquid/index.js b/projects/kava-liquid/index.js index 32ade01563..de7e1d7ae2 100644 --- a/projects/kava-liquid/index.js +++ b/projects/kava-liquid/index.js @@ -1,37 +1,13 @@ -const utils = require("../helper/utils"); -// const sdk = require("@defillama/sdk"); +const { queryV1Beta1 } = require('../helper/chain/cosmos'); +const { transformBalances } = require('../helper/portedTokens') -async function tvl(timestamp) { - let totalValueLocked = {}; - let url = `https://api2.kava.io/kava/liquid/v1beta1/total_supply`; - // if (Math.abs(Date.now() / 1000 - timestamp) > 3600) { - // const block = await sdk.api.util.lookupBlock(timestamp, { chain: "kava" }); - // url += `?height=${block.block}`; - // } +const chain = 'kava' - const response = await utils.fetchURL(url); - - for (let coin of response.data.result) { - const tokenInfo = generic(coin.denom); - if (!tokenInfo) { - utils.log("unknown token", coin.denom); - continue; - } - - totalValueLocked[tokenInfo[0]] = coin.amount / 10 ** tokenInfo[1]; - } - return totalValueLocked; -} - - -function generic(ticker) { - switch (ticker) { - case "ukava": - return ["kava", 6]; - } +async function tvl(_, _1, _2, { api }) { + const { result: pools } = await queryV1Beta1({ chain, url: '/liquid/v1beta1/total_supply' }); + pools.forEach(({ denom, amount }) => api.add(denom, amount)) } - module.exports = { timetravel: false, kava: { tvl } diff --git a/projects/kava.js b/projects/kava.js index aca65536ce..74450f74c0 100644 --- a/projects/kava.js +++ b/projects/kava.js @@ -1,45 +1,9 @@ -const { get } = require('./helper/http') +const { queryV1Beta1 } = require('./helper/chain/cosmos'); -async function tvl() { - let balances = {}; - - let deposits = (await get('https://api2.kava.io/cdp/totalCollateral')).result; - for (let i = 0; i < deposits.length; i++) { - const info = convertSymbol(deposits[i].amount.denom); - if (info.id in balances) { - balances[info.id] = Number(balances[info.id]) + - Number(deposits[i].amount.amount / 10 ** info.decimals); - } else { - balances[info.id] = deposits[i].amount.amount / 10 ** info.decimals; - } - } - - return balances; -} - -function convertSymbol(symbol) { - switch (symbol) { - case 'bnb': - return {id: 'binancecoin', decimals: 8}; - case 'btcb': - return {id: 'bitcoin', decimals: 8}; - case 'busd': - return {id: 'binance-usd', decimals: 8}; - case 'hard': - return {id: 'kava-lend', decimals: 6}; - case 'hbtc': - return {id: 'huobi-btc', decimals: 8}; - case 'swp': - return {id: 'kava-swap', decimals: 6}; - case 'ukava': - return {id: 'kava', decimals: 6}; - case 'xrpb': - return {id: 'ripple', decimals: 8}; - case 'ibc/B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C': - return {id: 'terra-usd', decimals: 6}; - default: - console.log(symbol); - } +const chain = 'kava' +async function tvl(_, _1, _2, { api }) { + const { total_collateral: pools } = await queryV1Beta1({ chain, url: 'cdp/v1beta1/totalCollateral' }); + pools.forEach(({ amount: { denom, amount} }) => api.add(denom, amount)) } module.exports = { diff --git a/projects/kavacave/index.js b/projects/kavacave/index.js index 53906d3d03..fd5cfc7840 100644 --- a/projects/kavacave/index.js +++ b/projects/kavacave/index.js @@ -6,7 +6,7 @@ const { getFixBalances } = require("../helper/portedTokens"); const masterChef = { - kava:"0xf17BBB9698b50156Ee437E01e22D7C2080184934" + kava: "0xf17BBB9698b50156Ee437E01e22D7C2080184934" }; const abi = { kava: kavaabi, @@ -14,8 +14,8 @@ const abi = { async function getTokensInMasterChef(time, ethBlock, chainBlocks, chain) { const block = chainBlocks[chain]; - - const transformAddress = (addr) => `${chain}:${addr}`; + + const transformAddress = (addr) => `${chain}:${addr}`; // const transformAddress=(addr)=>kavaFixMapping[addr]; const balances = {}; const poolLength = ( @@ -66,7 +66,7 @@ async function getTokensInMasterChef(time, ethBlock, chainBlocks, chain) { await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAddress); // console.log(balances) - const fixbalances=await getFixBalances(chain); + const fixbalances = await getFixBalances(chain); fixbalances(balances); return balances; } @@ -76,6 +76,9 @@ async function kavaTvl(timestamp, block, chainBlocks) { } module.exports = { + hallmarks: [ + [1660521600, "incentives not given"] + ], methodology: "Staked LP is counted as TVL.", kava: { diff --git a/projects/kavastarter/index.js b/projects/kavastarter/index.js index 6727f76f29..f92076b965 100644 --- a/projects/kavastarter/index.js +++ b/projects/kavastarter/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unknownTokens'); const KAST_LP = "0x821dd423c744cAa452C0Ae1651a9388009efbE5b"; -const WKAVA = "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b"; +const WKAVA = ADDRESSES.kava.WKAVA; const KAVASTARTER = "0x32a57dCa514Cc601d3DDEe974f57Db9Dc2CfE83b"; const POL_Pool_One = "0x12450E12A7eC069b51b46C92Ac122D90DbD9A99D"; diff --git a/projects/kavaswap.js b/projects/kavaswap.js index 13527e7327..dd16b263bf 100644 --- a/projects/kavaswap.js +++ b/projects/kavaswap.js @@ -1,48 +1,18 @@ -const utils = require('./helper/utils'); -const sdk = require('@defillama/sdk') +const { queryV1Beta1 } = require('./helper/chain/cosmos'); +const { transformDexBalances } = require('./helper/portedTokens') -async function tvl(timestamp, ethBlock, chainBlocks) { - let balances = {}; - let url = `https://api2.kava.io/swap/pools` - if(Math.abs(Date.now()/1000 - timestamp) > 3600){ - const block = await sdk.api.util.lookupBlock(timestamp, {chain:'kava'}) - url += `?height=${block.block}` - } +const chain = 'kava' - const response = await utils.fetchURL(url); +async function tvl() { + const { pools } = await queryV1Beta1({ chain, url: 'swap/v1beta1/pools' }); - for (let pool of response.data.result) { - for (let coin of pool.coins) { - let tokenInfo = generic(coin.denom); - if(!tokenInfo) { - sdk.log('unknown token', coin.denom) - continue; - } - if (balances[tokenInfo[0]]) { - balances[tokenInfo[0]] += coin.amount / 10**tokenInfo[1]; - } else { - balances[tokenInfo[0]] = coin.amount / 10**tokenInfo[1]; - } - } - } -return balances; -} -function generic(ticker) { - switch(ticker) { - case 'bnb': return ['binancecoin',8]; - case 'btcb': return ['bitcoin',8]; - case 'busd': return ['binance-usd',8]; - case 'hard': return ['kava-lend',6]; - case 'swp': return ['kava-swap',6]; - case 'ukava': return ['kava',6]; - case 'xrpb': return ['ripple',8]; - case 'usdx': return ['usdx',6]; - case 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2': return ['cosmos',6]; - case 'ibc/799FDD409719A1122586A629AE8FCA17380351A51C1F47A80A1B8E7F2A491098': return ['akash-network',6]; - case 'ibc/B8AF5D92165F35AB31F3FC7C7B444B9D240760FA5D406C49D24862BD0284E395': return ['terra-luna',6]; - case 'ibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B': return ['osmosis',6]; - case 'ibc/B448C0CA358B958301D328CCDC5D5AD642FC30A6D3AE106FF721DB315F3DDE5C': return ['terrausd',6]; - } + const data = pools.map(({ coins }) => ({ + token0: coins[0].denom, + token1: coins[1].denom, + token0Bal: coins[0].amount, + token1Bal: coins[1].amount + })) + return transformDexBalances({ chain, data }) } module.exports = { diff --git a/projects/kccguru/index.js b/projects/kccguru/index.js index d3d1039719..b4185ed040 100644 --- a/projects/kccguru/index.js +++ b/projects/kccguru/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const ITVL = { pool2: "uint256:pool2", @@ -6,7 +7,7 @@ const ITVL = { usd: "address:usd", } const tvlGuru = "0x426a4A4B73d4CD173C9aB78d18c0d79d1717eaA9"; //On-Chain Universal TVL Finder -const USD = "kcc:0x0039f574eE5cC39bdD162E9A88e3EB1f111bAF48"; //same as abi.call({target:tvlGuru,abi:ITVL["usd"]}) +const USD = "kcc:" + ADDRESSES.kcc.USDT; //same as abi.call({target:tvlGuru,abi:ITVL["usd"]}) //NOTE: USD===kcc:USDT is used explicitly to reduce EVM calls by this adapter. It makes this process faster. async function pool2(timestamp,_, {kcc: block}) { let _pool2 = await sdk.api.abi.call({ diff --git a/projects/keep3r/registry.js b/projects/keep3r/registry.js index 296c71b0de..edbe91be21 100644 --- a/projects/keep3r/registry.js +++ b/projects/keep3r/registry.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') exports.registry = { KP3R: "0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44", KP3RV2: "0xeb02addCfD8B773A5FFA6B9d1FE99c566f8c44CC", @@ -20,14 +21,14 @@ exports.registry = { SJPY: "0xF6b1C627e95BFc3c1b4c9B825a032Ff0fBf3e07d", SCHF: "0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d", MIM: "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", - CVX: "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", - SUSHI: "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", - CRV: "0xD533a949740bb3306d119CC777fa900bA034cd52", - CVXCRV: "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", + CVX: ADDRESSES.ethereum.CVX, + DAI: ADDRESSES.ethereum.DAI, + SUSHI: ADDRESSES.ethereum.SUSHI, + CRV: ADDRESSES.ethereum.CRV, + CVXCRV: ADDRESSES.ethereum.cvxCRV, SPELL: "0x090185f2135308BaD17527004364eBcC2D37e5F6", - WETH: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - LDO: "0x5a98fcbea516cf06857215779fd812ca3bef1b32", + WETH: ADDRESSES.ethereum.WETH, + LDO: ADDRESSES.ethereum.LIDO, ARMOR: "0x1337def16f9b486faed0293eb623dc8395dfe46a", HEGIC: "0x584bc13c7d411c00c01a62e8019472de68768430", MM: "0xa283aA7CfBB27EF0cfBcb2493dD9F4330E0fd304", diff --git a/projects/keeper-dao/index.js b/projects/keeper-dao/index.js index 0ff296c537..da4296bca9 100644 --- a/projects/keeper-dao/index.js +++ b/projects/keeper-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); @@ -83,7 +84,7 @@ async function getHidingVaultBalances(timestamp, block) { // get the underlying token address const isCEth = cTokenAddress.toLowerCase() === "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5" const { output: token } = isCEth - ? { output: '0x0000000000000000000000000000000000000000' } // ETH has no underlying asset on Compound + ? { output: ADDRESSES.null } // ETH has no underlying asset on Compound : await sdk.api.abi.call( { block, diff --git a/projects/kefirswap/index.js b/projects/kefirswap/index.js index ac9a2ee490..b2d98d9fae 100644 --- a/projects/kefirswap/index.js +++ b/projects/kefirswap/index.js @@ -1,10 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') // const KEFIR = "0xf5E547C683f5d72D6A463542d3e2cC13C5470D71" const FACTORY = "0xeEAbe2F15266B19f3aCF743E69105016277756Fb" -const WKAVA = "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b" +const WKAVA = ADDRESSES.kava.WKAVA module.exports = { + hallmarks: [ + [1656806400, "Rug Pull"] + ], methodology: "Count TVL as liquidity on the dex", misrepresentedTokens: true, kava: { diff --git a/projects/kei-finance/index.js b/projects/kei-finance/index.js new file mode 100644 index 0000000000..6c29579d47 --- /dev/null +++ b/projects/kei-finance/index.js @@ -0,0 +1,38 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require("@defillama/sdk"); +const { request, } = require("graphql-request"); +const { BigNumber } = require("bignumber.js"); + +const TOKEN_ADDRESS = "0xF75C7a59bCD9bd207C4Ab1BEB0b32EEd3B6392f3"; +const TREASURY_ADDRESS = "0x3D027824a9Eb4cc5E8f24D97FD8495eA9DC7026F"; +const WETH_ADDRESS = ADDRESSES.ethereum.WETH; + +const config = { + ethereum: { + subgraph: 'https://api.thegraph.com/subgraphs/name/kei-finance/core', + } +} + +const graphQuery = ` + query GetStakingDetails { + staking(id:"staking") { + totalPrincipal + totalRewards + } + } +`; + +module.exports = { + ethereum: { + tvl: () => 0, + staking: () => 0, + /* staking: async () => { + const { staking } = await request( + config.ethereum.subgraph, + graphQuery + ) + + return { [TOKEN_ADDRESS]: BigNumber(staking.totalPrincipal).plus(BigNumber(staking.totalRewards)) }; + }, */ + } +}; diff --git a/projects/key/index.js b/projects/key/index.js new file mode 100644 index 0000000000..b8e2201d51 --- /dev/null +++ b/projects/key/index.js @@ -0,0 +1,89 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { BigNumber, constants } = require('ethers') +const { getBlock } = require('../helper/http') + +const GmxkeyToken = '0xc5369c88440AB1FC842bCc60d3d087Bd459f20e4' +const EsGmxkeyToken = '0x3a924611895F8484194C9a791fceFb6fC07ddb85' +const MpkeyToken = '0x40a03B30D0c4D9e5E71164e041EC28CEe6dD9b36' +const GMXkeyGmxMarket = '0xC2e764eBEa35F079b03522D8C9cf7394De4EE15e' +const EsGMXkeyGmxMarket = '0x48dFF3e21843C2A81a4C5CE55535Ac444B55bDbf' +const MPkeyGmxMarket = '0x09861D732Af36Ee33490A09f24A0a3Cb06e035c1' +const UniswapGmxEthPool = '0x80A9ae39310abf666A87C743d6ebBD0E8C42158E' + +function getMarketPrice(api, fromBlock) { + return async (market, defaultPrice) => { + const logs = await getLogs({ + api, + target: market, + topic: 'TakeOrder(address,uint256,address,address,address,uint256,uint256,uint256,bool,uint256)', + eventAbi: 'event TakeOrder(address indexed account, uint256 indexed orderId, address indexed maker, address token, address currency, uint256 price, uint256 amount, uint256 filled, bool bidAsk, uint256 timestamp)', + onlyArgs: true, + skipCache: true, + fromBlock, + }) + + const targetLogs = logs + .map(({ timestamp, price }) => ({ timestamp, price })) + .sort((a, b) => a.timestamp > b.timestamp ? -1 : 1) + .slice(0, 5) + + const sum = targetLogs.reduce((prev, curr) => { + return prev.add(curr.price) + }, constants.Zero) + + if (sum.eq(constants.Zero)) { + return defaultPrice + } + + return sum.div(targetLogs.length).toNumber() / 10**4 + } +} + +function getTvl(gmxPrice, tokenPrice, totalSupply){ + const tokenSupply = totalSupply / 10**18 + return gmxPrice * tokenPrice * tokenSupply +} + +async function getGmxPrice(slot0) { + const priceSqrt = BigNumber.from(slot0[0]) + const gmxPriceInEth = priceSqrt.pow(2).mul(1000).div(BigNumber.from(2).pow(192)).toNumber() / 1000 + + return 1 / gmxPriceInEth +} + +async function tvl(timestamp, _, chainBlocks, { api }) { + const fromBlock = await getBlock(timestamp - (48 * 60 * 60), 'arbitrum', chainBlocks) + + const slot0 = await api.call({ + abi: 'function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)', + target: UniswapGmxEthPool, + }) + + const [totalSupplyOfGmxkey, totalSupplyOfEsGmxkey, totalSupplyOfMpkey] = await api.multiCall({ + abi: 'erc20:totalSupply', + calls: [GmxkeyToken, EsGmxkeyToken, MpkeyToken], + }) + + const gmxPrice = await getGmxPrice(slot0) + + const marketPrice = getMarketPrice(api, fromBlock) + + const gmxkeyPrice = await marketPrice(GMXkeyGmxMarket, 0.95) + const gmxkeyTvl = getTvl(gmxPrice, gmxkeyPrice, totalSupplyOfGmxkey) + + const esGmxkeyPrice = await marketPrice(EsGMXkeyGmxMarket, 0.5) + const esGmxkeyTvl = getTvl(gmxPrice, esGmxkeyPrice, totalSupplyOfEsGmxkey) + + const mpkeyPrice = await marketPrice(MPkeyGmxMarket, 0.1) + const mpkeyTvl = getTvl(gmxPrice, mpkeyPrice, totalSupplyOfMpkey) + + return { + ethereum: gmxkeyTvl + esGmxkeyTvl + mpkeyTvl, + } +} + +module.exports = { + arbitrum: { + tvl, + } +} diff --git a/projects/kimberlite/config.js b/projects/kimberlite/config.js index 0d8477c57a..4da89a31c9 100644 --- a/projects/kimberlite/config.js +++ b/projects/kimberlite/config.js @@ -9,6 +9,11 @@ const config = { locker: "0xFb22A44FF24D599600A90eea13B14b5662b10353", startBlock: 25521834 }, + kimberliteSafePLS: { + chain: "pulse", + locker: "0x5752Ed96a3Bfe6bdA9A290230e02E5e9E3A6e955", + startBlock: 17366715 + }, kimberliteSafeMETIS: { chain: "metis", locker: "0xE4E56E5e234783BCb77A80e19C8B3B5b42588AAb", @@ -34,6 +39,16 @@ const config = { locker: "0xE4E56E5e234783BCb77A80e19C8B3B5b42588AAb", startBlock: 49220342 }, + kimberliteSafeZkEVM: { + chain: "polygon_zkevm", + locker: "0xE4E56E5e234783BCb77A80e19C8B3B5b42588AAb", + startBlock: 279366 + }, + kimberliteSafeKAVA: { + chain: "kava", + locker: "0xE4E56E5e234783BCb77A80e19C8B3B5b42588AAb", + startBlock: 4533304 + }, } module.exports = { diff --git a/projects/kimberlite/index.js b/projects/kimberlite/index.js index 497169f55c..a7dae25a41 100644 --- a/projects/kimberlite/index.js +++ b/projects/kimberlite/index.js @@ -3,15 +3,13 @@ const abi = require('./abi.json') const { sumUnknownTokens, } = require('../helper/unknownTokens') module.exports = { + methodology: 'Counts TVL of all the tokens locked on the Kimberlite Safe locker smart contracts' }; Object.values(config).forEach(({ chain, locker, startBlock }) => { module.exports[chain] = { tvl: async (_, _b, _cb, { api, }) => { - const length = await api.call({ abi: abi.depositId, target: locker}) - const calls = [] - for (let i = 0;i <=length;i++) calls.push(i) - const data = await api.multiCall({ abi: abi.lockedToken, calls, target: locker, }) + const data = await api.fetchList({ lengthAbi: abi.depositId, itemAbi: abi.lockedToken, target: locker, startFromOne: true, }) const tokensAndOwners = data // .filter(i => !i.withdrawn) .map((i) => [i.tokenAddress, locker]) diff --git a/projects/kinefinance/index.js b/projects/kinefinance/index.js index cdffeb48dc..de73216bd9 100644 --- a/projects/kinefinance/index.js +++ b/projects/kinefinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { BigNumber } = require("bignumber.js"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -123,14 +124,14 @@ async function getBorrowed(block, chain, kMcd) { chain })).output; - sdk.util.sumSingleBalance(balances, "0xdac17f958d2ee523a2206206994597c13d831ec7", BigNumber(totalBorrows).div(1e12).toFixed(0)); + sdk.util.sumSingleBalance(balances, ADDRESSES.ethereum.USDT, BigNumber(totalBorrows).div(1e12).toFixed(0)); return balances; } const ethUnitroller = "0xbb7d94a423f4978545ecf73161f0678e8afd1a92"; const keth = "0xa58e822de1517aae7114714fb354ee853cd35780"; -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const weth = ADDRESSES.ethereum.WETH; const ethXKine = "0xa8d7643324df0f38764f514eb1a99d8f379cc692"; const ethKine = "0xcbfef8fdd706cde6f208460f2bf39aa9c785f05d"; const ethkMcd = "0xaf2617aa6fd98581bb8cb099a16af74510b6555f"; @@ -145,7 +146,7 @@ async function ethBorrow(timestamp, block) { const bscUnitroller = "0x3c2ddd486c07343b711a4415cdc9ab90ed32b571"; const kbnb = "0x5fbe4eb536dadbcee54d5b55ed6559e29c60b055"; -const wbnb = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"; +const wbnb = ADDRESSES.bsc.WBNB; const bscXKine = "0x8f5abd0d891d293b13f854700ff89210da3d5ba3"; const bscKine = "0xbfa9df9ed8805e657d0feab5d186c6a567752d7f"; const bsckMcd = "0x4f1ab95b798084e44d512b8b0fed3ef933177986"; @@ -160,7 +161,7 @@ async function bscBorrowed(timestamp, block, chainBlocks) { const polygonUnitroller = "0xdff18ac4146d67bf2ccbe98e7db1e4fa32b96881"; const kmatic = "0xf186a66c2bd0509beaafca2a16d6c39ba02425f9"; -const wmatic = "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"; +const wmatic = ADDRESSES.polygon.WMATIC_2; const polygonXKine = "0x66a782c9a077f5adc988cc0b5fb1cdcc9d7adeda"; const polygonKine = "0xa9c1740fa56e4c0f6ce5a792fd27095c8b6ccd87"; const polygonkMcd = "0xcd6b46443becad4996a70ee3d8665c0b86a0c54c"; @@ -175,7 +176,7 @@ async function polygonBorrowed(timestamp, block, chainBlocks) { const avaxUnitroller = "0x0ec3126390c606be63a0fa6585e68075f06679c6"; const kavax = "0x0544be6693763d64c02f49f16986ba1390a2fc39"; -const wavax = "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"; +const wavax = ADDRESSES.avax.WAVAX; const avaxXKine = "0x68b9737ae74cf1a169890042f1aa359647aa3e47"; const avaxKine = "0xa9c1740fa56e4c0f6ce5a792fd27095c8b6ccd87"; const avaxkMcd = "0xcd6b46443becad4996a70ee3d8665c0b86a0c54c"; diff --git a/projects/kinesis/index.js b/projects/kinesis/index.js index ff82d203fa..380dad6823 100644 --- a/projects/kinesis/index.js +++ b/projects/kinesis/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -34,14 +35,14 @@ const poolAddresses_evmos = [ ]; // Bridged Nomad Stablecoins -const madUSDC = "0x51e44FfaD5C2B122C8b635671FCC8139dc636E82"; -const madUSDT = "0x7FF4a56B32ee13D7D4D405887E0eA37d61Ed919e"; -const FRAX = "0xE03494D0033687543a80c9B1ca7D6237F2EA8BD8"; +const madUSDC = ADDRESSES.evmos.USDC; +const madUSDT = ADDRESSES.evmos.USDT; +const FRAX = ADDRESSES.evmos.FRAX; // Bridged Celer Stablecoins const ceDAI = "0x940dAAbA3F713abFabD79CdD991466fe698CBe54"; -const ceUSDC = "0xe46910336479F254723710D57e7b683F3315b22B"; -const ceUSDT = "0xb72A7567847abA28A2819B855D7fE679D4f59846"; +const ceUSDC = ADDRESSES.evmos.ceUSDC; +const ceUSDT = ADDRESSES.evmos.ceUSDT; // Bridged Axelar Stablecoins const axlDAI = "0x4A2a90D444DbB7163B5861b772f882BbA394Ca67"; @@ -49,9 +50,9 @@ const axlUSDC = "0x15C3Eb3B621d1Bff62CbA1c9536B7c1AE9149b57"; const axlUSDT = "0xe01C6D4987Fc8dCE22988DADa92d56dA701d0Fe0"; // Bridged Gravity Stablecoins -const gravDAI = "0xd567B3d7B8FE3C79a1AD8dA978812cfC4Fa05e75"; -const gravUSDC = "0x5FD55A1B9FC24967C4dB09C513C3BA0DFa7FF687"; -const gravUSDT = "0xecEEEfCEE421D8062EF8d6b4D814efe4dc898265"; +const gravDAI = ADDRESSES.functionx.PUNDIX; +const gravUSDC = ADDRESSES.functionx.PURSE; +const gravUSDT = ADDRESSES.functionx.USDT; async function tvl(timestamp, chainBlocks) { const balances = {}; diff --git a/projects/kinza/index.js b/projects/kinza/index.js new file mode 100644 index 0000000000..d40ac2057c --- /dev/null +++ b/projects/kinza/index.js @@ -0,0 +1,11 @@ +const { aaveExports } = require("../helper/aave"); + +module.exports = { + methodology: + "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending", + bsc: { + ...aaveExports('bsc', '0x37D7Eb561E189895E5c8601Cd03EEAB67C269189', undefined, ['0x09ddc4ae826601b0f9671b9edffdf75e7e6f5d61'], { + v3: true, + }), + }, +}; diff --git a/projects/klaylend/index.js b/projects/klaylend/index.js index 983265dded..e0eb6d0f59 100644 --- a/projects/klaylend/index.js +++ b/projects/klaylend/index.js @@ -9,4 +9,7 @@ module.exports = masterchefExports({ masterchef: contract, nativeToken: kld, useDefaultCoreAssets: true, -}) \ No newline at end of file +}) +module.exports.hallmarks = [ + [1662336000, "Rug Pull"] +] \ No newline at end of file diff --git a/projects/klayswap-v3/index.js b/projects/klayswap-v3/index.js new file mode 100644 index 0000000000..df1ef1630f --- /dev/null +++ b/projects/klayswap-v3/index.js @@ -0,0 +1,36 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +async function v3Tvl(_, _b, _cb, { api, }) { + const factory = '0xA15Be7e90df29A4aeaD0C7Fc86f7a9fBe6502Ac9'; + const wklay = '0x19aac5f612f524b754ca7e7c41cbfa2e981a4432'; + const klay = ADDRESSES.null; + + const fromBlock = 124342981; + const eventAbi = 'event PoolCreated(address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool, uint256 exid)'; + const topics = [ + '0x20a108faf9dc51ca2b459a109d08568e65a9cb87569b6b3a334c275d504ff94f', + ]; + + const logs = await getLogs({ + api, + target: factory, + topics, + fromBlock, + eventAbi, + onlyArgs: true, + }) + + return sumTokens2({ + api, ownerTokens: logs.map(i => { + return [[(i.token0.toLowerCase() == wklay) ? klay : i.token0, i.token1], i.pool] + }), + }) +} + +module.exports = { + klaytn: { + tvl: v3Tvl, + }, +} \ No newline at end of file diff --git a/projects/klayswap/index.js b/projects/klayswap/index.js index 2ee2b63d49..a60058b1f4 100644 --- a/projects/klayswap/index.js +++ b/projects/klayswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { getUniTVL } = require('../helper/unknownTokens'); const kslp = require('../helper/abis/kslp'); @@ -15,7 +16,7 @@ async function singlePoolTvl(_, _b, _cb, { api, }) { const dexTVL = getUniTVL({ useDefaultCoreAssets: true, - factory: '0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654', + factory: ADDRESSES.klaytn.KSP, abis: { allPairsLength: kslp.getPoolCount, allPairs: kslp.pools, @@ -30,7 +31,7 @@ module.exports = { methodology: 'TVL counts the liquidity of KlaySwap DEX and staking counts the KSP that has been staked', klaytn: { tvl: sdk.util.sumChainTvls([singlePoolTvl, dexTVL,]), - staking: staking('0x2f3713f388bc4b8b364a7a2d8d57c5ff4e054830', '0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654') + staking: staking('0x2f3713f388bc4b8b364a7a2d8d57c5ff4e054830', ADDRESSES.klaytn.KSP) }, misrepresentedTokens: true, } \ No newline at end of file diff --git a/projects/klend/index.js b/projects/klend/index.js index 7a4875d1ec..14b9faf543 100644 --- a/projects/klend/index.js +++ b/projects/klend/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const {compoundExports} = require('../helper/compound'); const {unwrapUniswapLPs} = require('../helper/unwrapLPs'); @@ -5,7 +6,7 @@ const {unwrapUniswapLPs} = require('../helper/unwrapLPs'); // BSC const unitroller = "0xA6bEd5B7320941eA185A315D1292492F7Fdd1e5c"; const kBnb = "0x2C334c6cBC0547e759084bD8D469f933B17Ff481"; -const wbnb = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c" +const wbnb = ADDRESSES.bsc.WBNB const bscPools = [ "0xf1D447656692d51d4DB7057104Ac6E97029A7790", "0x95D4D2D88C96cE96c97A912Aa7122715716013D4" @@ -18,7 +19,7 @@ const lpAbi = 'address:lp' // OKEX const okexUnitroller = "0x9589c9c9b7A484F57d69aC09c14EcE4b6d785710"; const kOkt = "0x4923abEe988f7bB7A9ae136BEBE4A8455e8dE229"; -const wokt = "0x8f8526dbfd6e38e3d8307702ca8469bae6c56c15" +const wokt = ADDRESSES.okexchain.WOKT async function pool2Tvl(balances, chainBlocks, chain, pools) { diff --git a/projects/kleva/index.js b/projects/kleva/index.js index 4fd5256c7e..af03f8240a 100644 --- a/projects/kleva/index.js +++ b/projects/kleva/index.js @@ -5,6 +5,7 @@ const { userInfos } = require('./FairLaunch') const { getChainTransform, getFixBalances } = require('../helper/portedTokens') const { getTokenPrices } = require('../helper/unknownTokens') +const kExports = require('../kleva-lend') const chain = 'klaytn' // const TOKEN_PRICE_QUERY_URL = "https://api.kltalchemy.com/klay/ksInfo" @@ -59,6 +60,6 @@ async function fetchLiquidity() { } module.exports = { - klaytn: { tvl: fetchLiquidity }, + klaytn: { tvl: sdk.util.sumChainTvls([fetchLiquidity, kExports.klaytn.tvl]) }, doublecounted: true, } \ No newline at end of file diff --git a/projects/klima-dao/index.js b/projects/klima-dao/index.js index bb619f4713..f630499ac7 100644 --- a/projects/klima-dao/index.js +++ b/projects/klima-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') const { transformPolygonAddress } = require('../helper/portedTokens') @@ -12,7 +13,7 @@ async function tvl(time, ethBlock, chainBlocks) { await sumTokensAndLPsSharedOwners(balances, [ ["0x2f800db0fdb5223b3c3f354886d907a671414a7f", false], // BCT ["0xD838290e877E0188a4A44700463419ED96c16107", false], // NCT - ["0x2791bca1f2de4661ed88a30c99a7a9449aa84174", false], // USDC + [ADDRESSES.polygon.USDC, false], // USDC ["0x03E3369af9390493CB7CC599Cd5233D50e674Da4", false], // MOSS ["0x6BCa3B77C1909Ce1a4Ba1A20d1103bDe8d222E48", false], // NBO ["0x1E67124681b402064CD0ABE8ed1B5c79D2e02f64", true], // USDC-BCT @@ -25,7 +26,7 @@ async function tvl(time, ethBlock, chainBlocks) { module.exports = { polygon: { - tvl, + tvl: () => 0, staking: staking("0x25d28a24Ceb6F81015bB0b2007D795ACAc411b4d", "0x4e78011ce80ee02d2c3e649fb657e45898257815", "polygon") } } \ No newline at end of file diff --git a/projects/know-to-earn.js b/projects/know-to-earn.js index 67c3759801..4bc3a4655a 100644 --- a/projects/know-to-earn.js +++ b/projects/know-to-earn.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') // 0x515343ed04b054d098a0c15cbd7f98b0250d0b38 KNOW token // 0x767eded9032ce68dc4e475addf0059baab936585 lp token // 0xEA934138CFEF2c5efedf2b670B93Fb6827295cC4 owner @@ -5,7 +6,7 @@ const { sumLPWithOnlyOneToken } = require("./helper/unwrapLPs"); const iotx = "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69"; -const wiotx = "0xA00744882684C3e4747faEFD68D283eA44099D03"; +const wiotx = ADDRESSES.iotex.WIOTX; function pool2(chain, gasToken) { return async (timestamp, _block, {[chain]: block}) => { diff --git a/projects/kogefarm/helper.js b/projects/kogefarm/helper.js index 337b21139e..da16dff3bf 100644 --- a/projects/kogefarm/helper.js +++ b/projects/kogefarm/helper.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const BigNumber = require('bignumber.js') const sdk = require('@defillama/sdk') const abi = require('./abi.json') @@ -5,15 +6,15 @@ const abi = require('./abi.json') function transformAddressKF(chain = 'polygon') { return (addr) => { // WETH - if (addr.toLowerCase() === '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619') { - return '0x0000000000000000000000000000000000000000' + if (addr.toLowerCase() === ADDRESSES.polygon.WETH_1) { + return ADDRESSES.null } // Special cases since coingecko doesn't find them if ( // fUSDT (chain === 'fantom' && - addr.toLowerCase() === '0x049d68029688eabf473097a2fc38ef61633a3c7a') || + addr.toLowerCase() === ADDRESSES.fantom.fUSDT) || (chain === 'moonriver' && addr.toLowerCase() === '0xe936caa7f6d9f5c9e907111fcaf7c351c184cda7') ) { @@ -23,7 +24,7 @@ function transformAddressKF(chain = 'polygon') { if ( // renbtc on Fantom (chain === 'fantom' && - addr.toLowerCase() === '0xdbf31df14b66535af65aac99c32e9ea844e14501') + addr.toLowerCase() === ADDRESSES.fantom.renBTC) ) { // renbtc on Polygon return `polygon:0xDBf31dF14B66535aF65AaC99C32e9eA844e14501` @@ -39,7 +40,7 @@ function transformAddressKF(chain = 'polygon') { if ( // Dai on Fantom (chain === 'fantom' && - addr.toLowerCase() === '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e') + addr.toLowerCase() === ADDRESSES.fantom.DAI) ) { // Dai on Eth return `ethereum:0x6b175474e89094c44da98b954eedeac495271d0f` @@ -102,7 +103,7 @@ function transformAddressKF(chain = 'polygon') { return `avax:0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7` } // Special case for MIM, since coingecko doesn't find - if (addr.toLowerCase() === '0x82f0b8b456c1a451378467398982d4834b6829c1') { + if (addr.toLowerCase() === ADDRESSES.fantom.MIM) { // MIM return `ethereum:0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3` } diff --git a/projects/kokonut-swap/abi.json b/projects/kokonut-swap/abi.json index 8b72fe568a..fbcc0eb5af 100644 --- a/projects/kokonut-swap/abi.json +++ b/projects/kokonut-swap/abi.json @@ -1,5 +1,6 @@ { "getPoolPriceInfo": "function getPoolPriceInfo(address swap) view returns (address[] tokens, uint256[] balances, uint256[] prices)", "getStakedEyePriceInfo": "function getStakedEyePriceInfo() view returns (uint256 balance, uint256 price)", + "getRegisteredPools": "function getRegisteredPools() view returns (tuple(address addr,string name,string symbol,address lpTokenAddress,uint256 lpTokenVirtualPrice,uint256 lpTokenTotalSupply,uint256 adminFee,tuple(address addr,string name,string symbol,uint8 decimals,uint256 balance,uint256 nativeBalance,uint256 allowance,bool isLpToken)[] liquidity,uint256 xcpProfit,uint256 priceScale,uint256 priceOracle)[])", "getPoolList": "address[]:getPoolList" } \ No newline at end of file diff --git a/projects/kokonut-swap/index.js b/projects/kokonut-swap/index.js index d4d37c4d1b..bd3d46276b 100644 --- a/projects/kokonut-swap/index.js +++ b/projects/kokonut-swap/index.js @@ -1,12 +1,13 @@ const abi = require("./abi.json"); const sdk = require("@defillama/sdk"); const { requery } = require('../helper/requery.js'); +const { sumTokens2 } = require("../helper/unwrapLPs"); const registry_addr = "0xBd21dD5BCFE28475D26154935894d4F515A7b1C0"; const helper_addr = "0x1A09643f4D70B9Aa9da5737568C1935ED37423aa"; const chain = 'klaytn'; -async function tvl(timestamp, _, { klaytn: block }) { +async function klaytn_tvl(timestamp, _, { klaytn: block }) { const balances = {}; const poolList = (await sdk.api.abi.call({ @@ -63,6 +64,19 @@ async function tvl(timestamp, _, { klaytn: block }) { return balances; } +async function polygon_zkevm_tvl(_, _b, _cb, { api }) { + const ownerTokens = []; + const poolList = (await sdk.api.abi.call({ + target: "0x677bBBAd41D784a4731d902c613f8af43AAb4feb", + abi: abi.getRegisteredPools, + chain: 'polygon_zkevm' + })).output; + for (const pool of poolList) { + ownerTokens.push([pool.liquidity.map(t => t.addr), pool.addr]); + } + return sumTokens2({ api, ownerTokens }); +} + async function staking(timestamp, _, { klaytn: block }) { const info = (await sdk.api.abi.call({ target: helper_addr, @@ -78,7 +92,10 @@ module.exports = { misrepresentedTokens: true, klaytn: { staking, - tvl + tvl: klaytn_tvl + }, + polygon_zkevm: { + tvl: polygon_zkevm_tvl }, methodology: "tvl is calculated using the total value of protocol's liquidity pool. Staked tokens include staked EYE values. Pool2 includes staked lp tokens eligible for KOKOS emissions" diff --git a/projects/kommunitas/index.js b/projects/kommunitas/index.js index cda342866b..83a58fa243 100644 --- a/projects/kommunitas/index.js +++ b/projects/kommunitas/index.js @@ -1,18 +1,20 @@ const { stakings } = require("../helper/staking"); -const KOM_TOKEN_CONTRACT = '0xC004e2318722EA2b15499D6375905d75Ee5390B8'; -const KOM_STAKING_CONTRACT = [ +const KOM_TOKEN_CONTRACT_POLYGON = '0xC004e2318722EA2b15499D6375905d75Ee5390B8'; +const KOM_STAKING_CONTRACT_POLYGON = [ "0x453d0a593d0af91e77e590a7935894f7ab1b87ec", - "0x8d37b12DB32E07d6ddF10979c7e3cDECCac3dC13" + "0x8d37b12DB32E07d6ddF10979c7e3cDECCac3dC13", + "0x8d34Bb43429c124E55ef52b5B1539bfd121B0C8D" ]; +const KOM_TOKEN_CONTRACT_ARBITRUM = '0xA58663FAEF461761e44066ea26c1FCddF2927B80'; +const KOM_STAKING_CONTRACT_ARBITRUM = ["0x5b63bdb6051CcB9c387252D8bd2364D7A86eFC70"]; module.exports = { polygon: { tvl: () => ({}), - staking: stakings( - KOM_STAKING_CONTRACT, - KOM_TOKEN_CONTRACT, - "polygon", - `polygon:${KOM_TOKEN_CONTRACT}` - ) - } -}; \ No newline at end of file + staking: stakings(KOM_STAKING_CONTRACT_POLYGON, KOM_TOKEN_CONTRACT_POLYGON) + }, + arbitrum: { + tvl: () => ({}), + staking: stakings(KOM_STAKING_CONTRACT_ARBITRUM, KOM_TOKEN_CONTRACT_ARBITRUM) + }, +}; diff --git a/projects/konverter/contracts.json b/projects/konverter/contracts.json new file mode 100644 index 0000000000..383135ab3c --- /dev/null +++ b/projects/konverter/contracts.json @@ -0,0 +1,31 @@ +{ + "wemix": { + "priceCalculator": "0xdc9cd9f7a3b962857854120dC3a8c75ed8A48b9e", + "stableSwapHelper": "0x164056263dBB527D06B008F263780fC8f1Bd22F5", + "pools": { + "0xa60448B0621335905a65753173D7e6FDFe494Da2": { + "name": "k3Pool", + "isMetaPool": false, + "n_coins": 3, + "poolToken": "0x7D57CeF121AC2371472214d100FF01eC6ddD5fAa", + "underlyingTokens": [ + "0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D", + "0xA649325Aa7C5093d12D6F98EB4378deAe68CE23F", + "0x8E81fCc2d4A3bAa0eE9044E0D7E36F59C9BbA9c1" + ] + }, + "0xDacaD9ddF713496012748D35496c0FB09c8d8c15": { + "name": "wcd-k3Pool", + "isMetaPool": true, + "n_coins": 2, + "poolToken": "0xf7FA632AbeEDAD21E59089c5174C47735903506F", + "underlyingTokens": [ + "0x2ec6Fc5c495aF0C439E17268d595286d5f897dD0", + "0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D", + "0xA649325Aa7C5093d12D6F98EB4378deAe68CE23F", + "0x8E81fCc2d4A3bAa0eE9044E0D7E36F59C9BbA9c1" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/konverter/index.js b/projects/konverter/index.js new file mode 100644 index 0000000000..9641ea22a5 --- /dev/null +++ b/projects/konverter/index.js @@ -0,0 +1,16 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const contracts = require("./contracts.json"); + +async function tvl(_, _b, _cb, { api, }) { + const ownerTokens = Object.entries(contracts[api.chain].pools).map(([pool, { underlyingTokens }]) => [underlyingTokens, pool]) + const blacklistedTokens = ownerTokens.map(i => i[1]) + return sumTokens2({ api, ownerTokens, blacklistedTokens }) +} + +module.exports = { + methodology: + "Sum of each liquidity pool's value", + wemix: { + tvl + } +}; diff --git a/projects/koyo/constants.js b/projects/koyo/constants.js index b761511b27..0e6898c9e2 100644 --- a/projects/koyo/constants.js +++ b/projects/koyo/constants.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const addresses = { boba: { treasury: "0x559dBda9Eb1E02c0235E245D9B175eb8DcC08398", @@ -6,17 +7,17 @@ const addresses = { tokens: { KYO: "0x618CC6549ddf12de637d46CDDadaFC0C2951131C", BREW: "0x3a93bd0fa10050d206370eea53276542a105c885", - BOBA: "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7", - FRAX: "0x7562F525106F5d54E891e005867Bf489B5988CD9", - USDC: "0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc", - USDT: "0x5DE1677344D3Cb0D7D465c10b72A8f60699C062d", - DAI: "0xf74195Bb8a5cf652411867c5C2C5b8C2a402be35", + BOBA: ADDRESSES.boba.BOBA, + FRAX: ADDRESSES.boba.FRAX, + USDC: ADDRESSES.boba.USDC, + USDT: ADDRESSES.boba.USDT, + DAI: ADDRESSES.boba.DAI, }, vault: '0x2a4409cc7d2ae7ca1e3d915337d1b6ba2350d6a3', }, ethereum: { treasury: "0x47BbF992a25B7fe1D532F8128D514524462731eF", - USDC: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + USDC: ADDRESSES.ethereum.USDC, } }; diff --git a/projects/kriya-dex/index.js b/projects/kriya-dex/index.js new file mode 100644 index 0000000000..7590c8fb94 --- /dev/null +++ b/projects/kriya-dex/index.js @@ -0,0 +1,21 @@ +const sui = require('../helper/chain/sui') + +const EVENT_FILTER = "0xa0eba10b173538c8fecca1dff298e488402cc9ff374f8a12ca7758eebe830b66::spot_dex::PoolCreatedEvent"; + +async function kriyaTVL(_, _1, _2, { api }) { + const poolIds = await sui.queryEvents({ eventType: EVENT_FILTER, transform: i => i.pool_id}); + const pools = await sui.getObjects(poolIds) + pools.forEach(i => { + const [token0, token1] = i.type.split('<')[1].replace('>', '').split(', ') + api.add(token0, i.fields.token_x) + api.add(token1, i.fields.token_y) + }) +} + +module.exports = { + timetravel: false, + methodology: "Collects TVL for all pools created on KriyaDEX", + sui: { + tvl: kriyaTVL, + } +} \ No newline at end of file diff --git a/projects/kromatika/index.js b/projects/kromatika/index.js index dce4f8b3c9..e7d6fbb0d6 100644 --- a/projects/kromatika/index.js +++ b/projects/kromatika/index.js @@ -15,10 +15,10 @@ const contracts = { KROM: "0x55ff62567f09906a85183b866df84bf599a4bf70", position: "0x02c282f60fb2f3299458c2b85eb7e303b25fc6f0", }, - // polygon: { - // KROM: "0x14Af1F2f02DCcB1e43402339099A05a5E363b83c", - // position: "0xD1fDF0144be118C30a53E1d08Cc1E61d600E508e", - // }, + polygon: { + KROM: "0x14Af1F2f02DCcB1e43402339099A05a5E363b83c", + position: "0x03F490aE5b59E428E6692059d0Dca1B87ED42aE1", + }, }; async function opTvl(api, position) { diff --git a/projects/kronos/index.js b/projects/kronos/index.js index ce74a40677..42e422342b 100644 --- a/projects/kronos/index.js +++ b/projects/kronos/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getChainTransform, getFixBalances } = require("../helper/portedTokens") -const KDAI = "0x5c74070fdea071359b86082bd9f9b3deaafbe32b"; -const KSD = "0x4fa62f1f404188ce860c8f0041d6ac3765a72e67"; +const KDAI = ADDRESSES.klaytn.KDAI; +const KSD = ADDRESSES.klaytn.KSD; const wrappedKlay = '0xd7a4d10070a4f7bc2a015e78244ea137398c3b74' const TREASURY = "0x03c812eE50e244909efE72e8c729976ACc5C16bb"; const token = "0xd676e57ca65b827feb112ad81ff738e7b6c1048d"; @@ -28,7 +29,7 @@ const LPs = [ { address: '0x2febbaed702b9a1d9f6ffccd67701550ac546115', // KRNO_KSP_LP tokens: [ - '0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654', + ADDRESSES.klaytn.KSP, ] } ] diff --git a/projects/ktx/index.js b/projects/ktx/index.js new file mode 100644 index 0000000000..e145a2d40e --- /dev/null +++ b/projects/ktx/index.js @@ -0,0 +1,13 @@ +const { staking } = require("../helper/staking"); +const { gmxExports } = require("../helper/gmx"); + +const bscVault = "0xd98b46C6c4D3DBc6a9Cc965F385BDDDf7a660856"; +const bscStaking = "0x5d1459517ab9FfD60f8aDECdD497ac94DD62d3FD"; +const bscKTC = "0x545356d4d69d8cD1213Ee7e339867574738751CA"; + +module.exports = { + bsc: { + staking: staking(bscStaking, bscKTC, "bsc"), + tvl: gmxExports({ vault: bscVault }), + }, +}; diff --git a/projects/kujira/index.js b/projects/kujira/index.js index bbb08be112..193ad071e4 100644 --- a/projects/kujira/index.js +++ b/projects/kujira/index.js @@ -1,26 +1,12 @@ -const { get } = require("../helper/http"); -const { sumTokens, endPoints } = require('../helper/chain/cosmos') +const { sumTokens } = require('../helper/chain/cosmos') +const { getConfig } = require("../helper/cache"); +const chain = "kujira"; async function tvl() { - const uskCDPs = [ - "kujira1ecgazyd0waaj3g7l9cmy5gulhxkps2gmxu9ghducvuypjq68mq2smfdslf", - "kujira1f2jt3f9gzajp5uupeq6xm20h90uzy6l8klvrx52ujaznc8xu8d7s6av27t", - "kujira1eydneup86kyhew5zqt5r7tkxefr3w5qcsn3ssrpcw9hm4npt3wmqa7as3u", - "kujira1fjews4jcm2yx7una77ds7jjjzlx5vgsessguve8jd8v5rc4cgw9s8rlff8", - "kujira1r80rh4t7zrlt8d6da4k8xptwywuv39esnt4ax7p7ca7ga7646xssrcu5uf", - "kujira1m0z0kk0qqug74n9u9ul23e28x5fszr628h20xwt6jywjpp64xn4qkxmjq3", - "kujira1pep6vkkjexjlsw3y5h4tj27g7s58vkypy8zg7f9qdvlh2992pncqduz84n", - "kujira1hjyjafrt09p4hwsnwch29nrrs40lprfgesqdy44wnp27td872hsse2rree", - "kujira1m4ves3ymz5hyrj3war3t7uxu9ewt8rwpunja87960n0gre3a5pzspgry4g", - "kujira1722g2rudg0rlw45nuuvjhg4a365xztfrdfjgyyfuzlmqmtu2plas34y6x3", - "kujira1twc28l5njc07xuxrs85yahy44y9lw5euwa7kpajc2zdh98w6uyksvjvruq", - "kujira1mjdmut3vq7n7zv6p9kdkdng0zpk2286qww0yy0ay4e8cvxd5p2zqvh9aqs" - ] - const owners = [ - ...uskCDPs, - ] - return sumTokens({ owners, chain: 'kujira' }) + const contracts = await getConfig("kujira/contracts", "https://raw.githubusercontent.com/Team-Kujira/kujira.js/master/src/resources/contracts.json"); + const uskContracts = contracts["kaiyo-1"].uskMarket.map(x => x.address) + return sumTokens({ owners: uskContracts, chain }) } module.exports = { diff --git a/projects/kumu-finance/index.js b/projects/kumu-finance/index.js index 8de174d576..f2c9a5ed31 100644 --- a/projects/kumu-finance/index.js +++ b/projects/kumu-finance/index.js @@ -41,6 +41,9 @@ async function staking(_, _b, { [chain]: block }) { } module.exports = { + hallmarks: [ + [1662336000, "Rug Pull"] + ], klaytn: { tvl, staking } diff --git a/projects/kurrency/index.js b/projects/kurrency/index.js new file mode 100644 index 0000000000..90a91a83c1 --- /dev/null +++ b/projects/kurrency/index.js @@ -0,0 +1,23 @@ +async function tvl(_, _b, _cb, { api, }) { + const cdpManager = '0x1B18d5a2f35B431aACa02B58eE9E4B7FBa9b098d' + const PSM = '0xbdd0b6212505bcD15C38839cf338E40aeCd95b13' + const ids = await api.call({ abi: abi.getCollateralIds, target: cdpManager }) + const psmTokens = await api.call({ abi: abi.getPSMTokens, target: PSM }) + const psmInfos = await api.multiCall({ abi: abi.getPSMTokenInfo, calls: psmTokens, target: PSM }) + const infos = await api.multiCall({ abi: abi.getCollateralInfo, calls: ids, target: cdpManager }) + infos.forEach(info => api.add(info.token, info.balance)) + psmInfos.forEach((info, i) => api.add(psmTokens[i], info.balance)) +} + +module.exports = { + wemix: { + tvl + } +}; + +const abi = { + "getCollateralIds": "uint256[]:getCollateralIds", + "getPSMTokenInfo": "function getPSMTokenInfo(address token) view returns (tuple(uint256 mintLimit, uint256 minReserve, uint256 balance, uint256 mintAmount, uint256 collateralId, address investor) tokenInfo)", + "getPSMTokens": "address[]:getPSMTokens", + "getCollateralInfo": "function getCollateralInfo(uint256 collateralId) view returns (tuple(address token, address investor, uint256 balance, uint256 maxLTV, uint256 liquidationLTV, uint256 debtCeiling, uint256 interestRate, uint256 liquidationBonusRate, uint256 lastUpdateTime, uint256 lastVaultId, tuple(uint256 originalDebt, uint256 debt, uint256 debtShare) debtInfo) collateralInfo)", +} \ No newline at end of file diff --git a/projects/kuufinance/index.js b/projects/kuufinance/index.js index 364d7de912..6461825496 100644 --- a/projects/kuufinance/index.js +++ b/projects/kuufinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') @@ -5,15 +6,18 @@ const JITU_CONTRACT_ADDRESS = "0x037BB12721A8876386411dAE5E31ff0c5bA991A8"; module.exports = { deadFrom: 1648765747, + hallmarks: [ + [1633737600, "pausing liquidations program indefinitely"] + ], avax:{ tvl: sumTokensExport({ owner: JITU_CONTRACT_ADDRESS, tokens: [ '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', - '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', + ADDRESSES.avax.WETH_e, '0x50b7545627a5162F82A992c33b87aDc75187B218', - '0xc7198437980c041c805A1EDcbA50c1Ce5db95118', - '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', + ADDRESSES.avax.USDT_e, + ADDRESSES.avax.DAI, '0x5947BB275c521040051D82396192181b413227A3' ] }), diff --git a/projects/l2fibank-xyz/index.js b/projects/l2fibank-xyz/index.js new file mode 100644 index 0000000000..f72ad4f0bc --- /dev/null +++ b/projects/l2fibank-xyz/index.js @@ -0,0 +1,9 @@ +const { compoundV3Exports } = require('../helper/compoundV3') + +module.exports = compoundV3Exports({ + arbitrum: { + markets: [ + "0x0596355e1d3a467a7b22a9e96e5b0fba494b9f89", // USDT Market + ], + } +}) \ No newline at end of file diff --git a/projects/l2finance/index.js b/projects/l2finance/index.js index 1fe926770e..007887c62a 100644 --- a/projects/l2finance/index.js +++ b/projects/l2finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const abi = require('./abi.json') const { getLogs } = require('../helper/cache/getLogs') @@ -15,10 +16,10 @@ async function tvl(timestamp, block, _, { api }) { const [syncBalances, tokens] = await Promise.all([abi.syncBalance, abi.supplyToken].map(abiMethod => api.multiCall({ abi: abiMethod, calls: strategies }))) api.addTokens(tokens, syncBalances) return sumTokens2({ api, owner: rollupChain, tokens: [ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", //usdc - "0x6b175474e89094c44da98b954eedeac495271d0f", //dai - "0x4fabb145d64652a948d72533023f6e7a623c7c53", //busd - "0xdac17f958d2ee523a2206206994597c13d831ec7", //usdt + ADDRESSES.ethereum.USDC, //usdc + ADDRESSES.ethereum.DAI, //dai + ADDRESSES.ethereum.BUSD, //busd + ADDRESSES.ethereum.USDT, //usdt ]}) } diff --git a/projects/lachainBridge.js b/projects/lachainBridge.js index ff16706916..950a84c1a5 100644 --- a/projects/lachainBridge.js +++ b/projects/lachainBridge.js @@ -1,37 +1,38 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens } = require('./helper/unwrapLPs') const { getChainTransform } = require('./helper/portedTokens') const config = { polygon: { - nativeBridge: ['0xE372D290F83c7487bdc925ddA187671bfF9e347b'], tokenBridge: ['0x82E4d5d7F36a22f2FEaaF87eCcDcDA7e0EFc98C3'], tokens: ['0xc2132D05D31c914a87C6611C10748AEb04B58e8F'], + nativeBridge: ['0xE372D290F83c7487bdc925ddA187671bfF9e347b'], tokenBridge: ['0x82E4d5d7F36a22f2FEaaF87eCcDcDA7e0EFc98C3'], tokens: [ADDRESSES.polygon.USDT], }, bsc: { - nativeBridge: ['0xC926f267418d69147c88Edf88e93E78F2153f923'], tokenBridge: ['0x6571DD15430a455118EC6e24Dc7820489ED7019b'], tokens: ['0x55d398326f99059fF775485246999027B3197955'], + nativeBridge: ['0xC926f267418d69147c88Edf88e93E78F2153f923'], tokenBridge: ['0x6571DD15430a455118EC6e24Dc7820489ED7019b'], tokens: [ADDRESSES.bsc.USDT], }, ethereum: { - nativeBridge: ['0xc7fc91a0a93d570738b2af6efb1595c3183809d7'], tokenBridge: ['0xAB49eb8Ca42f42fd7e8b745F2CC5BeDfb78d2D3E'], tokens: ['0xdAC17F958D2ee523a2206206994597C13D831ec7'], + nativeBridge: ['0xc7fc91a0a93d570738b2af6efb1595c3183809d7'], tokenBridge: ['0xAB49eb8Ca42f42fd7e8b745F2CC5BeDfb78d2D3E'], tokens: [ADDRESSES.ethereum.USDT], }, avax: { - nativeBridge: ['0xD4aE8F772dcf2e20b103c740AfD9D9f9E78dbfFC'], tokenBridge: ['0x8783256443217856B716464A068aabdecc3F0b95'], tokens: ['0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7'], + nativeBridge: ['0xD4aE8F772dcf2e20b103c740AfD9D9f9E78dbfFC'], tokenBridge: ['0x8783256443217856B716464A068aabdecc3F0b95'], tokens: [ADDRESSES.avax.USDt], }, fantom: { - nativeBridge: ['0x012cebA65fD071473a9E0d3C5048702734a1eE5e'], tokenBridge: ['0x73Ec53a1Ee3Ea275D95212b41Dcce8cb9e0206Cd'], tokens: ['0x049d68029688eabf473097a2fc38ef61633a3c7a'], + nativeBridge: ['0x012cebA65fD071473a9E0d3C5048702734a1eE5e'], tokenBridge: ['0x73Ec53a1Ee3Ea275D95212b41Dcce8cb9e0206Cd'], tokens: [ADDRESSES.fantom.fUSDT], }, arbitrum: { - nativeBridge: ['0xD4aE8F772dcf2e20b103c740AfD9D9f9E78dbfFC'], tokenBridge: ['0x43d92690D302C0e9f2fBD624eb9589F52b5AD115'], tokens: ['0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9'], + nativeBridge: ['0xD4aE8F772dcf2e20b103c740AfD9D9f9E78dbfFC'], tokenBridge: ['0x43d92690D302C0e9f2fBD624eb9589F52b5AD115'], tokens: [ADDRESSES.arbitrum.USDT], }, harmony: { nativeBridge: ['0x0A19afbE4519A40Df3b48BE46EDc0720724B4A6B'], tokenBridge: ['0x5DDDc78C8a59CeD4d25a8FD96BF9D9FdA561D0FF'], tokens: ['0x3c2b8be99c50593081eaa2a724f0b8285f5aba8f'], }, heco: { - nativeBridge: ['0xbBF0b12A0Be425Db284905A3Cb0Ab72b178b6A4F'], tokenBridge: ['0x334d6D6c5EaE4bf5ec7De39a1547e6bDBdDcfbf3'], tokens: ['0xa71edc38d189767582c38a3145b5873052c3e47a'], + nativeBridge: ['0xbBF0b12A0Be425Db284905A3Cb0Ab72b178b6A4F'], tokenBridge: ['0x334d6D6c5EaE4bf5ec7De39a1547e6bDBdDcfbf3'], tokens: [ADDRESSES.heco.USDT], }, } module.exports = {}; -const nullAddress = "0x0000000000000000000000000000000000000000" +const nullAddress = ADDRESSES.null Object.keys(config).forEach(chain => { const { nativeBridge, tokenBridge, tokens} = config[chain] diff --git a/projects/ladao-xocolatl/index.js b/projects/ladao-xocolatl/index.js index 3c8e0b9d80..5b76269ae8 100644 --- a/projects/ladao-xocolatl/index.js +++ b/projects/ladao-xocolatl/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); module.exports = { @@ -5,10 +6,20 @@ module.exports = { polygon: { tvl: sumTokensExport({ tokensAndOwners: [ - ['0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', '0xd411BE9A105Ea7701FabBe58C2834b7033EBC203'], - ['0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', '0x09dFC327364701d73683aCe049B8A5a8Ea27F3E8'], - ['0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6','0x983A0eC44bf1BB11592a8bD5F91f05adE4F44D81'], - ['0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270','0xdB9Dd25660240415d95144C6CE4f21f00Edf8168'] + [ADDRESSES.polygon.WETH_1, '0xd411BE9A105Ea7701FabBe58C2834b7033EBC203'], + [ADDRESSES.polygon.WETH_1, '0x09dFC327364701d73683aCe049B8A5a8Ea27F3E8'], + [ADDRESSES.polygon.WBTC,'0x983A0eC44bf1BB11592a8bD5F91f05adE4F44D81'], + [ADDRESSES.polygon.WMATIC_2,'0xdB9Dd25660240415d95144C6CE4f21f00Edf8168'], + [ADDRESSES.polygon.WSTETH, '0x28C7DF27e5bC7Cb004c8D4bb2C2D91f246D0A2C9'], + [ADDRESSES.polygon.MATICX, '0x102dda5f4621a08dafD327f29f9c815f851846dC'], + ] + }) + }, + bsc: { + tvl: sumTokensExport({ + tokensAndOwners: [ + [ADDRESSES.bsc.ETH,'0xd411BE9A105Ea7701FabBe58C2834b7033EBC203'], + [ADDRESSES.bsc.WBNB,'0x070ccE6887E70b75015F948b12601D1E759D2024'] ] }) }, diff --git a/projects/lagobridge/index.js b/projects/lagobridge/index.js index 6d7241d8b7..34c5d062b0 100644 --- a/projects/lagobridge/index.js +++ b/projects/lagobridge/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const bridgecontract = '0xc6895a02F9dFe64341c7B1d03e77018E24Db15eD'; -const usdc = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' -const wbtc = '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599' +const usdc = ADDRESSES.ethereum.USDC +const wbtc = ADDRESSES.ethereum.WBTC module.exports = { methodology: "Tracks funds locked in the Lago Bridge contract on Ethereum", diff --git a/projects/lanternswap/index.js b/projects/lanternswap/index.js index 247186667b..6b56c31939 100644 --- a/projects/lanternswap/index.js +++ b/projects/lanternswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -16,9 +17,9 @@ const poolAddressesKava = [ "0x9076e914D94431A38311B247b289B7274E08d6f9", ]; -const DAI = "0x765277EebeCA2e31912C9946eAe1021199B39C61" -const USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f" -const USDT = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C" +const DAI = ADDRESSES.shiden.ETH +const USDC = ADDRESSES.telos.ETH +const USDT = ADDRESSES.moonriver.USDT async function tvl(timestamp, chainBlocks) { const balances = {}; diff --git a/projects/latoken/index.js b/projects/latoken/index.js new file mode 100644 index 0000000000..fe04fb0fe9 --- /dev/null +++ b/projects/latoken/index.js @@ -0,0 +1,142 @@ +const { cexExports } = require("../helper/cex"); + +const config = { + bitcoin: { + owners: [ + "bc1q48amr6l7dvacdppgucvnswwuyleaqh4dus8z8h", + "bc1q2cgh9nxn7cqmqhk4hc5fu6mju8nzy9a20qqqh8", //cold + "bc1qw5fc9ml9vm4xq5c6xkcdu3vtwyw4gdn8lw0uwq" + ] + }, + ethereum: { + owners: [ + "0x8D056D457a52c4dAF71CEf45F540a040c143Ea05", //eth hot wallet + "0x7891b20c690605f4e370d6944c8a5dbfac5a451c", //eth cold wallet + "0xeE61F5fB0dB81d3A09392375Ee96f723C0620E07", //erc20 hot wallet + "0xc00EEbe4E2bE29679781fc5fC350057eE8132BaB", //erc20 subsidy wallet + "0x4114d8D509503592175A8E044594b29EC081dbe0", //eth custody wallet + "0x00343217B01188388C0E3242278231Ace35E1b61", //eth custody2 wallet + "0x9976c40e8186a5E0C2a9D50d55b51F905d10ce52", //eth custody3 wallet + ], + }, + polygon: { + owners: [ + "0x235e8ceD6b42eE6E226837EB551E86D810d49f22", //hot wallet + "0xA614180C69aBF82f3E7AAbB53AD9976EC90aeAC6", //subsidy wallet + "0x235e8ceD6b42eE6E226837EB551E86D810d49f22", //hot wallet + "0xA614180C69aBF82f3E7AAbB53AD9976EC90aeAC6", //subsidy wallet + ], + }, + avax: { + owners: ["0xeD8D8f4Ff53915D80987BCD51C2DE582a05b2322"], + }, + cardano: { + owners: [ + "addr1vx6kespckg27xu879kf40mpv4pmjxl0ad5hewq067e3d50crylyhc", //hot wallet + "addr1v804l0u7q4ju4eyrd8ykvvdehryn6qyz3n4nh8ucfr8s3pgeskjvu", //subsidy wallet + ], + }, + algorand: { + owners: ["FQQQS3UJFSNYCII2KE5XSCUB5ZIV2HUFVQ22QYLGI3ONFTPOFMAF5HLLZE"], + }, + cosmos: { + owners: [ + "cosmos1wt5sdluapdqrp8wljyesl7s3x5vzq5z76t4nuj", //hot wallet + ], + }, + bsc: { + owners: [ + "0xBA6C98f1cc6869ECCbeB892b7A603F8F02Db3b29", //cold wallet + "0xCE55977E7B33E4e5534Bd370eE31504Fc7Ac9ADc", //hot wallet + "0x9480D1cc3fd4cb7936D114f7d63124107870A7b8", //custody wallet + "0xd76D939B455743e96adbCdf800627b11F3446780", //swap wallet + "0xBA6C98f1cc6869ECCbeB892b7A603F8F02Db3b29", //token cold wallet + "0xCE55977E7B33E4e5534Bd370eE31504Fc7Ac9ADc", //token hot wallet + "0x9480D1cc3fd4cb7936D114f7d63124107870A7b8", //token custody wallet + "0xd76D939B455743e96adbCdf800627b11F3446780", //token swap wallet + ], + }, + // celo: { + // owners: ["0xEeC02a6D1a7F9f534b9609c8EE30B9cF9A7fe1B3"], + // }, + elrond: { + owners: ["erd1z5xjeu4xw32jkckhj9jpc9dymj6a9h8yxtch96e43ncp6fhuzpnqshqutj"], + }, + eos: { + owners: ["latokenabbc1", "latokeneos11"], + }, + // energyweb: { + // owners: [ + // "0x26b52C889FCf3B8f449aD1c0F07b8572E6ACE262", //hot wallet + // "0x0F307b17d41acE555620DF5a55Dd5A01637e3b42", //cold wallet + // "0x6fb194fc9806fE320E0CBD658e31F13B1bAa3925", //custody wallet + // ], + // }, + ethereumclassic: { + owners: [ + "0xE69963CE13ED742639C8287913682bC008B3e622", //hot wallet + ], + }, + // lachain: { + // owners: ["0xEFf6E17Fdc68d56812DA40f7d05FC8cDfd212440"], + // }, + // filecoin: { + // owners: ["f1iy5dvp6ggzhtraxodbfdkbiw5s67mhff4w43pai"], //hot wallet + // }, + // gochain: { + // owners: [ + // "0xA1a0538D556B3E77f7E1340E3Ebd70C649c4bb84", //hot wallet + // "0x1771C9c8d5AF830d322c2E1D2161D002844679EF", //subsidy wallet + // ], + // }, + // injective: { + // owners: [ + // "inj1uyc234cek2ja9ru7a870cmx2lcavt5um2nk6hh", //hot wallet + // ], + // }, + // neo3: { + // owners: ["NMngTcDdCq3cFNHiPBvtim73HLuG3Dzkwb"], + // }, + // proton: { + // owners: ["protonla"], + // }, + polkadot: { + owners: ["1347e3PfJKKcJL4XJhFeZ5UmZYRnk26Vs9aGjZ8RZLPkWWNY"], + }, + solana: { + owners: [ + "51AASorYCLPcUHnuQQaau6DfsfFRixzh4HsoQwsc5Ara", //hot wallet + ], + }, + optimism: { + owners: [ + "0xecabeA0fB22f82F3A5a5D6043D7cCf65F3640c85", //hot wallet + "0x3b28358e9CDde80A24f0f811daD13aB9fc2A0d2A", //subsidy wallet + ], + }, + terra: { + owners: ["terra14rvsrmq47pr9v5pkdkttftgh526jeeluyumalk"], + }, + terra2: { + owners: ["terra13x5jkljx69vyak47k9e9u9qetu0sckxpfysrp7"], + }, + tezos: { + owners: [ + "tz2QLHkGgaXqoeqUFxUJXAvZ9pdQ2HQDhTe4", //hot wallet + ], + }, + tron: { + owners: [ + "TT2YwaJ8DXsrpycgBGDWEei1FUQm6YT85T", //hot wallet + "TUJrDuFr6ALjtZehcpFRKnBCCo79Gs76ww", //cold wallet + "TVNdyXbcJ5ZwwFsjnScrNXSv9d435guynT", //subsidy wallet + ], + }, + zilliqa: { + owners: [ + "zil1rklazrfy5spul4tqzc2jqfvuneszcjrdya6a8y", //hot wallet + ], + }, +}; + +module.exports = cexExports(config); diff --git a/projects/leNFT/index.js b/projects/leNFT/index.js new file mode 100644 index 0000000000..2309f5b714 --- /dev/null +++ b/projects/leNFT/index.js @@ -0,0 +1,51 @@ +const { getLogs } = require("../helper/cache/getLogs"); +const { sumTokens2 } = require("../helper/unwrapLPs"); + +async function tvl(_, _b, _cb, { api }) { + const tradingPoolFactory = "0x197456A4f5c3B3605033270Bc04Bc599916CaBA0"; + const lendingMarket = "0xFAE8371d6b22F6451A64026785e79Bd7B438306F"; + + // Get the logs of trading pool creation + const tradingPoolFactoryLogs = await getLogs({ + api, + target: tradingPoolFactory, + topics: [ + "0xa1311e5e3c1c2207844ec9211cb2439ea0bce2a76c6ea09d9343f0d0eaddd9f6", + ], + fromBlock: 17605911, + eventAbi: + "event CreateTradingPool(address indexed pool, address indexed nft, address indexed token)", + onlyArgs: true, + }); + var ownerTokens = []; + + // Add trading pools + for (const log of tradingPoolFactoryLogs) { + ownerTokens.push([[log.token, log.nft], log.pool]); + } + + // Get the logs of lending pool creation + const lendingMarketLogs = await getLogs({ + api, + target: lendingMarket, + topics: [ + "0xe981a0f3e894fa2788c75d5d18601ca14c7b544c96311cc7c0a022bcc5900ee8", + ], + fromBlock: 17605911, + eventAbi: + "event CreateLendingPool(address indexed lendingPool, address indexed collection, address indexed asset)", + onlyArgs: true, + }); + + // Add lending pools + for (const log of lendingMarketLogs) { + ownerTokens.push([[log.asset, log.collection], log.lendingPool]); + } + + return sumTokens2({ ownerTokens, api }); +} + +module.exports = { + misrepresentedTokens: false, + ethereum: { tvl }, +}; diff --git a/projects/leaguedao/api.js b/projects/leaguedao/api.js new file mode 100644 index 0000000000..b83e37f250 --- /dev/null +++ b/projects/leaguedao/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/leaguedao/index.js b/projects/leaguedao/index.js index ceaa353291..9e86c25fd7 100644 --- a/projects/leaguedao/index.js +++ b/projects/leaguedao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const leag = "0x7b39917f9562C8Bc83c7a6c2950FF571375D505D"; @@ -5,10 +6,10 @@ const stakingContract = "0x67F60dA0F409AB8427e8a408efc4B137D0BD4e7B"; const yieldFarmStakingContract = "0x43921eb2E5C78D9e887d3Ecd4620a3Bd606f4F95"; //Tokens in Yield Farm Contract -const link = "0x514910771af9ca656af840dff83e8264ecf986ca"; -const snx = "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f"; +const link = ADDRESSES.ethereum.LINK; +const snx = ADDRESSES.ethereum.SNX; const ilv = "0x767fe9edc9e0df98e07454847909b5e959d7ca0e"; -const sushi = "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2"; +const sushi = ADDRESSES.ethereum.SUSHI; const bond = "0x0391D2021f89DC339F60Fff84546EA23E337750f"; const xyz = "0x618679df9efcd19694bb1daa8d00718eacfa2883"; const ionx = "0x02d3a27ac3f55d5d91fb0f52759842696a864217"; @@ -27,7 +28,7 @@ module.exports = { [xyz, false], [ionx, false], [entr, false], - [leagUsdc, true], + [leagUsdc, false], ], "ethereum", stakingContract, diff --git a/projects/leetswap/index.js b/projects/leetswap/index.js index 3eecf3a37a..fb9ab444a6 100644 --- a/projects/leetswap/index.js +++ b/projects/leetswap/index.js @@ -4,4 +4,6 @@ module.exports = { misrepresentedTokens: true, polygon_zkevm: { tvl: getUniTVL({ factory: '0xcE87E0960f4e2702f4bFFE277655E993Ae720e84', useDefaultCoreAssets: true, }), }, canto: { tvl: getUniTVL({ factory: '0x116e8a41E8B0A5A87058AF110C0Ddd55a0ed82B7', useDefaultCoreAssets: true, }), }, + linea: { tvl: getUniTVL({ factory: '0x4DDf0fa98B5f9Bd7Cb0645c25bA89A574fe9Be8c', useDefaultCoreAssets: true, }), }, + base: { tvl: getUniTVL({ factory: '0x169C06b4cfB09bFD73A81e6f2Bb1eB514D75bB19', useDefaultCoreAssets: true, hasStablePools: true, stablePoolSymbol: 'sLS2', fetchBalances: true, }), }, } diff --git a/projects/lemma/index.js b/projects/lemma/index.js index 65a0d3714e..34c94851cf 100644 --- a/projects/lemma/index.js +++ b/projects/lemma/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { transformOptimismAddress } = require('../helper/portedTokens'); const perpV2VaultABI = require('./abis/perpV2Vault.json'); const perpLemmaWrapperABI = require('./abis/perpLemmaWrapper.json'); -const USDC = "0x7F5c764cBc14f9669B88837ca1490cCa17c31607"; +const USDC = ADDRESSES.optimism.USDC; const PERP_V2_VAULT = "0xAD7b4C162707E0B2b5f6fdDbD3f8538A5fbA0d60"; const tokens = [ - "0x4200000000000000000000000000000000000006", + ADDRESSES.tombchain.FTM, "0x68f180fcce6836688e9084f035309e29bf0a2095", "0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6", "0x76FB31fb4af56892A25e32cFC43De717950c9278", diff --git a/projects/lendexe/index.js b/projects/lendexe/index.js index bbb90cd4b4..6161994b1e 100644 --- a/projects/lendexe/index.js +++ b/projects/lendexe/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require('../helper/compound') const { nullAddress } = require('../helper/tokenMapping') const { lendingMarket } = require("../helper/methodologies"); @@ -7,16 +8,19 @@ const u = undefined const { tvl, borrowed } = compoundExports('0x2c7b7A776b5c3517B77D05B9313f4699Fb38a8d3',u,'0x36e66547e27a5953f6ca3d46cc2663d9d6bdc59e', nullAddress, undefined, undefined, { fetchBalances: true, blacklistedTokens: ['0x53011e93f21ec7a74cdfbb7e6548f1abce306833'] }) const mapping = { - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 6, - '0xdac17f958d2ee523a2206206994597c13d831ec7': 6, - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599': 8, + [ADDRESSES.ethereum.USDC]: 6, + [ADDRESSES.ethereum.USDT]: 6, + [ADDRESSES.ethereum.WBTC]: 8, } async function borrowedWrapped(_, _1, _2, { api }) { const borrowedRes = await borrowed(_, _1, _2, { api }) Object.entries(mapping).forEach(([t, decimals]) => { - const token = 'ethereum:'+t - if (!borrowedRes[token]) return; - borrowedRes[token] /= 10 ** (18 - decimals) + const regex = new RegExp(t, 'gi') + Object.keys(borrowedRes).forEach(key => { + if (regex.test(key)) { + borrowedRes[key] /= 10 ** (18 - decimals) + } + }) }) return borrowedRes } diff --git a/projects/lendhub/index.js b/projects/lendhub/index.js index 672db729e2..422c81c8e0 100644 --- a/projects/lendhub/index.js +++ b/projects/lendhub/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const cAbis = require('./abi.json'); @@ -22,7 +23,7 @@ async function getMarkets(block) { const calls = [] for (const cToken of allCTokens) { if (cToken.toLowerCase() === '0x99a2114B282acC9dd25804782ACb4D3a2b1Ad215'.toLowerCase()) - markets.push({ cToken, underlying: '0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f' }) + markets.push({ cToken, underlying: ADDRESSES.heco.WHT }) else calls.push({ target: cToken }) } diff --git a/projects/lendle/index.js b/projects/lendle/index.js new file mode 100644 index 0000000000..d332dc1e49 --- /dev/null +++ b/projects/lendle/index.js @@ -0,0 +1,15 @@ +const { aaveV2Export } = require("../helper/aave"); +const { staking } = require("../helper/staking"); + +const LPConfiguratorContract = "0x30D990834539E1CE8Be816631b73a534e5044856"; +const StakingContract = "0x5C75A733656c3E42E44AFFf1aCa1913611F49230"; +const TokenContract = "0x25356aeca4210eF7553140edb9b8026089E49396"; + +module.exports = { + mantle: { + ...aaveV2Export(LPConfiguratorContract, { + fromBlock: 56556, + }), + staking: staking(StakingContract, TokenContract), + }, +}; diff --git a/projects/lenlen/index.js b/projects/lenlen/index.js index 71c0b7769a..93fd933f3c 100644 --- a/projects/lenlen/index.js +++ b/projects/lenlen/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundV3Exports } = require('../helper/compoundV3') @@ -6,7 +7,7 @@ const markets = [ ] const collaterals = [ - '0x1db6cdc620388a0b6046b20cd59503a0839adcff', + ADDRESSES.vision.USDT, ] module.exports = compoundV3Exports({ diff --git a/projects/letsfil/index.js b/projects/letsfil/index.js new file mode 100644 index 0000000000..dc1bcf22a3 --- /dev/null +++ b/projects/letsfil/index.js @@ -0,0 +1,28 @@ +const sdk = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json') +const LETSFIL_CONTRACT = "0x74a37AC5f124d25284ffEc0107cB93a6f9A2E433"; + + +async function tvl(_, _1, _2, { api }) { + + const collateralBalance = await api.call({ + abi: 'function getTvl() external view returns (uint256)', + target: LETSFIL_CONTRACT, + }); + + // await sdk.util.sumSingleBalance(balances, LETSFIL_CONTRACT, collateralBalance, api.chain) + // return balances; + + api.add(ADDRESSES.null,collateralBalance) +} + + + +module.exports = { + timetravel: false, + misrepresentedTokens: false, + methodology: 'counts the number of pledge filecoins in the letsfil contract', + filecoin: { + tvl + } +}; diff --git a/projects/level/index.js b/projects/level/index.js index d3dd617cd5..ce27610d12 100644 --- a/projects/level/index.js +++ b/projects/level/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs"); const { pool2 } = require("../helper/pool2"); @@ -5,16 +6,30 @@ const Contracts = { Pool: "0xA5aBFB56a78D2BD4689b25B8A77fd49Bb0675874", Chef: "0x5ae081b6647aef897dec738642089d4bda93c0e7", Tokens: { - BTC: "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", - ETH: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", - WBNB: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + BTC: ADDRESSES.bsc.BTCB, + ETH: ADDRESSES.bsc.ETH, + WBNB: ADDRESSES.bsc.WBNB, CAKE: "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - BUSD: "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", - USDT: "0x55d398326f99059fF775485246999027B3197955" + BUSD: ADDRESSES.bsc.BUSD, + USDT: ADDRESSES.bsc.USDT }, LVL_BNB_LP: "0x70f16782010fa7ddf032a6aacdeed05ac6b0bc85" } +const ContractsArb = { + Pool: "0x32B7bF19cb8b95C27E644183837813d4b595dcc6", + Chef: "0x0180dee5Df18eBF76642e50FaaEF426f7b2874f7", + Tokens: { + ETH: ADDRESSES.arbitrum.WETH, + USDT: ADDRESSES.arbitrum.USDT, + USDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + BTC: ADDRESSES.arbitrum.WBTC, + ARB: "0x912CE59144191C1204E64559FE8253a0e49E6548" + } +} +async function arbtvl(_,b, _cb, { api, }) { + return sumTokens2({ api, owner: ContractsArb.Pool, tokens: Object.values(ContractsArb.Tokens)}) +} async function tvl(_, _b, _cb, { api, }) { return sumTokens2({ api, owner: Contracts.Pool, tokens: Object.values(Contracts.Tokens) }) } @@ -24,4 +39,8 @@ module.exports = { tvl, pool2: pool2(Contracts.Chef, Contracts.LVL_BNB_LP) }, + arbitrum: { tvl: arbtvl }, + hallmarks: [ + [Math.floor(new Date('2023-05-01')/1e3), 'Referral contract exploited'], + ], }; diff --git a/projects/levvy-fi/index.js b/projects/levvy-fi/index.js new file mode 100644 index 0000000000..29c72ff891 --- /dev/null +++ b/projects/levvy-fi/index.js @@ -0,0 +1,19 @@ +const { post } = require('../helper/http') + +module.exports = { + misrepresentedTokens: true, + cardano: { + tvl: async () => { + const data = await post('https://citizens.theapesociety.io/api/getLevvyData', {}) + return { + cardano: data.adaTVL, + } + }, + borrowed: async () => { + const data = await post('https://citizens.theapesociety.io/api/getLevvyData', {}) + return { + cardano: data.borrowed, + } + } + }, +} diff --git a/projects/lido/index.js b/projects/lido/index.js index baf8be6255..e0a21458a9 100644 --- a/projects/lido/index.js +++ b/projects/lido/index.js @@ -1,17 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') const axios = require('axios'); const sdk = require('@defillama/sdk') const sol = require('./sol-helpers'); const { getConnection } = require('../helper/solana'); -const ethContract = '0xae7ab96520de3a18e5e111b5eaab095312d7fe84'; +const ethContract = ADDRESSES.ethereum.STETH; async function terra(timestamp, ethBlock, chainBlocks) { - const { total_bond_amount } = ( - await axios.get(`https://lcd.terra.dev/wasm/contracts/terra1mtwph2juhj0rvjz7dy92gvl6xvukaxu8rfv8ts/store?query_msg=%7B%22state%22%3A%20%7B%7D%7D`) - ).data.result; - return { - 'terra-luna': total_bond_amount / 1000000 - } + return {} + // const { total_bond_amount } = ( + // await axios.get(`https://lcd.terra.dev/wasm/contracts/terra1mtwph2juhj0rvjz7dy92gvl6xvukaxu8rfv8ts/store?query_msg=%7B%22state%22%3A%20%7B%7D%7D`) + // ).data.result; + // return { + // 'terra-luna': total_bond_amount / 1000000 + // } } async function eth(timestamp, ethBlock, chainBlocks) { @@ -28,8 +30,8 @@ async function eth(timestamp, ethBlock, chainBlocks) { }) return { - '0x0000000000000000000000000000000000000000': pooledETH.output, - "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0": pooledMatic.output, + [ADDRESSES.null]: pooledETH.output, + [ADDRESSES.ethereum.MATIC]: pooledMatic.output, } } @@ -52,7 +54,7 @@ async function dot(timestamp, ethBlock, {moonbeam: block}) { const pooledCoin = await sdk.api.abi.call({ block, chain, - target: "0xfa36fe1da08c89ec72ea1f0143a35bfd5daea108", + target: ADDRESSES.moonbeam.stDOT, abi: "uint256:getTotalPooledKSM", }) @@ -76,7 +78,8 @@ module.exports = { hallmarks: [ [1610496000, "Start of incentives for curve pool"], [1651881600,"UST depeg"], - [1667865600, "FTX collapse"] + [1667865600, "FTX collapse"], + [1684108800, "ETH Withdrawal Activation"] ], methodology: 'Staked tokens are counted as TVL based on the chain that they are staked on and where the liquidity tokens are issued, stMATIC is counted as Ethereum TVL since MATIC is staked in Ethereum and the liquidity token is also issued on Ethereum', timetravel: false, // solana diff --git a/projects/lien/index.js b/projects/lien/index.js index 993f289e64..ff7c6e0b89 100644 --- a/projects/lien/index.js +++ b/projects/lien/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); -const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; +const ZERO_ADDRESS = ADDRESSES.null; const contracts = [ "0xE446158503d0F5c70579FCCE774C00E8Db544559", // aggregator1 "0x5F3b6405dfcF8b21f8dEB4eb6DA44a89a652aCb0", // aggregator2 diff --git a/projects/lifedao/index.js b/projects/lifedao/index.js index f0ab0d04b5..6c7f1cbf0e 100644 --- a/projects/lifedao/index.js +++ b/projects/lifedao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x1e63a2eB2827db56d3CB1e1FF17ef1040B2d3D3f" @@ -5,7 +6,7 @@ module.exports = ohmTvl(treasury, [ //MIM ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], //wAVAX - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], + [ADDRESSES.avax.WAVAX, false], //joe LP ["0xd7cdc2e47ab29a6b651704e39374bb9857f02e02", true], //joe LP diff --git a/projects/lineabank/index.js b/projects/lineabank/index.js new file mode 100644 index 0000000000..90636a7dda --- /dev/null +++ b/projects/lineabank/index.js @@ -0,0 +1,12 @@ +const { compoundExports2 } = require("../helper/compound"); + +module.exports = { + linea: compoundExports2({ + comptroller: "0x009a0b7C38B542208936F1179151CD08E2943833", + fetchBalances: true, + abis: { + getAllMarkets: "address[]:allMarkets", + totalBorrows: "uint256:totalBorrow", + }, + }), +}; diff --git a/projects/linear.js b/projects/linear.js index ac4a40df67..3e1bb6a1c9 100644 --- a/projects/linear.js +++ b/projects/linear.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { call } = require('./helper/chain/near') async function tvl() { return { near: (await call( - 'linear-protocol.near', + ADDRESSES.near.LINA, 'get_total_staked_balance', {} ) / 1e24 ) diff --git a/projects/linear/index.js b/projects/linear/index.js index 1779ddcff4..b3ddc8b186 100644 --- a/projects/linear/index.js +++ b/projects/linear/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); @@ -10,7 +11,7 @@ const LnRewardLockerAddress = "0x66D60EDc3876b8aFefD324d4edf105fd5c4aBeDc"; const tokens = { lUSD: "0x23e8a70534308a4aaf76fb8c32ec13d17a3bd89e", LINA: "0x762539b45A1dCcE3D36d080F74d1AED37844b878", - bUSD: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + bUSD: ADDRESSES.bsc.BUSD, LPTOKEN: "0x392f351fc02a3b74f7900de81a9aaac13ec28e95", }; diff --git a/projects/liondex/index.js b/projects/liondex/index.js new file mode 100644 index 0000000000..aac66e14ab --- /dev/null +++ b/projects/liondex/index.js @@ -0,0 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { staking } = require('../helper/staking') +const { sumTokens2,sumTokensExport } = require('../helper/unwrapLPs') + +//const treasure = "0x7fca3bf8adc4e143bd789aecda36c0ce34f1d75b"; +const lionDEXVault = "0x8eF99304eb88Af9BDe85d58a35339Cb0e2a557B6"; +const lionStaking = "0x154E2b1dBE9F493fF7938E5d686366138ddCE017"; +const LION = "0x8ebb85d53e6955e557b7c53acde1d42fd68561ec"; +const fsGLP = ADDRESSES.arbitrum.fsGLP; +const USDC = ADDRESSES.arbitrum.USDC; + + +module.exports = { + methodology: `Counts fsGLP and USDC deposited to lionDEXVault. Staking counts Lion deposited to stakingPool.`, + arbitrum: { + tvl: sumTokensExport({ chain: 'arbitrum', owners: [lionDEXVault], tokens: [ fsGLP, USDC]}), + staking: staking(lionStaking, LION, 'arbitrum') + } +} diff --git a/projects/liquid-finance/index.js b/projects/liquid-finance/index.js index 4a33b56850..5621859c94 100644 --- a/projects/liquid-finance/index.js +++ b/projects/liquid-finance/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumUnknownTokens, sumTokensExport, staking } = require('../helper/unknownTokens') -const LIQD_TOKEN = '0x93C15cd7DE26f07265f0272E0b831C5D7fAb174f' +const LIQD_TOKEN = ADDRESSES.arbitrum.LIQD const LIQD_ETH_TOKEN = '0x73700aeCfC4621E112304B6eDC5BA9e36D7743D3' const masterchef = '0x2582fFEa547509472B3F12d94a558bB83A48c007' const WETH_POOL = '0x705ea996D53Ff5bdEB3463dFf1890F83f57CDe97' const LIQD_STAKING = '0xA1A988A22a03CbE0cF089e3E7d2e6Fcf9BD585A9' const TREASURY = '0x61fb28d32447ef7F4e85Cf247CB9135b4E9886C2' -const WETH = '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' +const WETH = ADDRESSES.arbitrum.WETH const chain = 'arbitrum' const LPs = [ '0x5dcf474814515b58ca0ca5e80bbb00d18c5b5cf8', diff --git a/projects/liquiddriver/index.js b/projects/liquiddriver/index.js index a0d6fb6568..58f10a3419 100644 --- a/projects/liquiddriver/index.js +++ b/projects/liquiddriver/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { unwrapUniswapLPs, sumTokens2 } = require("../helper/unwrapLPs"); @@ -10,8 +11,8 @@ const BigNumber = require("bignumber.js"); const MASTERCHEF = "0x742474dae70fa2ab063ab786b1fbe5704e861a0c"; const MINICHEF = "0x6e2ad6527901c9664f016466b8DA1357a004db0f"; const BSCMINICHEF = "0xD46db083De31c64AF3F680f139A31fF37bac004f"; -const usdcTokenAddress = "0x04068da6c83afcfa0e13ba15a6696662335d5b75"; -const wftmTokenAddress = "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"; +const usdcTokenAddress = ADDRESSES.fantom.USDC; +const wftmTokenAddress = ADDRESSES.fantom.WFTM; const beethovenVaultAddress = "0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce"; const LQDR = "0x10b620b2dbac4faa7d7ffd71da486f5d44cd86f9"; @@ -130,7 +131,7 @@ async function getMinichefTvl(api, minichef, balances = {}) { const calls = [] const callTokens = [] strategies.forEach((val, i) => { - if (val === '0x0000000000000000000000000000000000000000') return; + if (val === ADDRESSES.null) return; calls.push(val) callTokens.push(lpTokens[i].toLowerCase()) } ) @@ -161,7 +162,7 @@ async function shadowChefTvl(_, _1, _2, { api, }) { const calls = [] const callTokens = [] strategies.forEach((val, i) => { - if (val === '0x0000000000000000000000000000000000000000') return; + if (val === ADDRESSES.null) return; calls.push(val) callTokens.push(lpTokens[i].toLowerCase()) } ) diff --git a/projects/liquidity-book/index.js b/projects/liquidity-book/index.js deleted file mode 100644 index 8c22f7abb8..0000000000 --- a/projects/liquidity-book/index.js +++ /dev/null @@ -1,21 +0,0 @@ -const sdk = require('@defillama/sdk'); -const { staking } = require('../helper/staking'); -const joeBar = "0x57319d41F71E81F3c65F2a47CA4e001EbAFd4F33"; -const joeToken = "0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd"; -const { getChainTvl } = require('../helper/getUniSubgraphTvl'); -const graphUrls = { - avax: 'https://api.thegraph.com/subgraphs/name/traderjoe-xyz/joe-v2', -}; - -module.exports = { - timetravel: true, - misrepresentedTokens: true, - methodology: 'We count liquidity on the pairs and we get that information from the "traderjoe-xyz/joe-v2" subgraph.', - avax:{ - tvl: getChainTvl( - graphUrls, - "lbfactories", - "totalValueLockedUSD" - )('avax'), - } -}; diff --git a/projects/liquidrium/vaults.js b/projects/liquidrium/vaults.js index 9c398fdf08..b49294e83c 100644 --- a/projects/liquidrium/vaults.js +++ b/projects/liquidrium/vaults.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const vaults = [ { name: "usdc-eth", address: "0xF82aeDC7faA3Fe1F412C71fe5E432690C46cd1bb", - token1: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - token2: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + token1: ADDRESSES.ethereum.USDC, + token2: ADDRESSES.ethereum.WETH, token1decimal: 6, token2decimal: 18, token1Name: "usd-coin", @@ -14,8 +15,8 @@ const vaults = [ { name: "wbtc-eth", address: "0x3FeE1B1C829DB1250B0e6B8605741E944Ed3A41e", - token1: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", - token2: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + token1: ADDRESSES.ethereum.WBTC, + token2: ADDRESSES.ethereum.WETH, token1decimal: 8, token2decimal: 18, token1Name: "wrapped-bitcoin", @@ -25,8 +26,8 @@ const vaults = [ { name: "eth-usdc", address: "0x7F6d25dE79559e548f0417aeB1953Ab6D3D85b14", - token1: "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", - token2: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", + token1: ADDRESSES.arbitrum.WETH, + token2: ADDRESSES.arbitrum.USDC, token1decimal: 18, token2decimal: 6, token1Name: "ethereum", @@ -36,8 +37,8 @@ const vaults = [ { name: "wbtc-eth", address: "0x849668517a74535EC5ECc09Fa9A22e0CEf91443E", - token1: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", - token2: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + token1: ADDRESSES.arbitrum.WBTC, + token2: ADDRESSES.arbitrum.WETH, token1decimal: 8, token2decimal: 18, token1Name: "wrapped-bitcoin", @@ -47,8 +48,8 @@ const vaults = [ { name: "matic-usdc", address: "0xB19e59b77E173363FB7Ce674f1279c76ee237c7A", - token1: "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - token2: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + token1: ADDRESSES.polygon.WMATIC_2, + token2: ADDRESSES.polygon.USDC, token1decimal: 18, token2decimal: 6, token1Name: "wmatic", @@ -58,8 +59,8 @@ const vaults = [ { name: "matic-weth", address: "0x249403E3163aAA88259e0e79A513E999EF8AbEc3", - token1: "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - token2: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + token1: ADDRESSES.polygon.WMATIC_2, + token2: ADDRESSES.polygon.WETH_1, token1decimal: 18, token2decimal: 18, token1Name: "wmatic", diff --git a/projects/liquidswap-aptos/index.js b/projects/liquidswap-aptos/index.js index e5022a26f1..d47064d816 100644 --- a/projects/liquidswap-aptos/index.js +++ b/projects/liquidswap-aptos/index.js @@ -1,6 +1,17 @@ const { dexExport } = require('../helper/chain/aptos') +const sdk = require('@defillama/sdk') -module.exports = dexExport({ - account: '0x05a97986a9d031c4567e15b797be516910cfcb4156312482efc6a19c0a30c948', - poolStr: 'liquidity_pool::LiquidityPool', -}) +module.exports = { + aptos: { + tvl: sdk.util.sumChainTvls([ + dexExport({ + account: '0x05a97986a9d031c4567e15b797be516910cfcb4156312482efc6a19c0a30c948', + poolStr: 'liquidity_pool::LiquidityPool', + }).aptos.tvl, + dexExport({ + account: '0x61d2c22a6cb7831bee0f48363b0eec92369357aece0d1142062f7d5d85c7bef8', + poolStr: 'liquidity_pool::LiquidityPool', + }).aptos.tvl + ]) + } +} diff --git a/projects/liquity/index.js b/projects/liquity/index.js index ad81a5d1cb..d0d923fb07 100644 --- a/projects/liquity/index.js +++ b/projects/liquity/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); -const ETH_ADDRESS = "0x0000000000000000000000000000000000000000"; +const ETH_ADDRESS = ADDRESSES.null; // TroveManager holds total system collateral (deposited ETH) const TROVE_MANAGER_ADDRESS = "0xA39739EF8b0231DbFA0DcdA07d7e29faAbCf4bb2"; diff --git a/projects/liqwid/index.js b/projects/liqwid/index.js index 230a95224c..cb366728f2 100644 --- a/projects/liqwid/index.js +++ b/projects/liqwid/index.js @@ -1,4 +1,5 @@ const { sumTokensExport } = require('../helper/chain/cardano'); +const { graphQuery } = require('../helper/http'); const scriptAddresses = [ // Ada Market @@ -28,11 +29,73 @@ const scriptAddresses = [ "addr1wyw3ap36lnepstpjadwg8cg73llvmju4y94kmfld23lkzjggq4hyj", "addr1wxrxa3ucywn3lqpkzlyucak0a7aavkudh49fqt06yc05sws4l4zs2", "addr1wy6e9jukn8fpx7kesrpmapsnmz0cgq6lnskuff0xc0junggv6gd8l", + // iUSD Market + "addr1wyslq7j0q9kq2ve28yzfgv5fdz4nzfay6cup2r634zr5zdqlhptgt", // action + "addr1wxwwjr76m4cgn6768p9ljg2jrg08evhrvh0wdq0q60327rqfenh4g", // batch + "addr1w9p7xj8wxvgpfjs532a8nmue69zj73k8644zes7vmg7c72s8symwu", // batchFinal ]; module.exports = { cardano: { - tvl: sumTokensExport({ scripts: scriptAddresses, }), + // tvl: sumTokensExport({ scripts: scriptAddresses, }), + tvl, + borrowed, + staking: sumTokensExport({ scripts: ["addr1w8arvq7j9qlrmt0wpdvpp7h4jr4fmfk8l653p9t907v2nsss7w7r4"], }), methodology: 'Adds up the Ada in the 16 action tokens and batch final token.' } }; + + +const endpoint = 'https://api.liqwiddev.net/graphql' + +const query = `{ + markets { + asset { + marketId + name + } + totalSupply + marketId + decimals + qTokenId + qTokenPolicyId + utilization + market { + scripts { + actionToken { + script { + value0 { + value0 + } + } + } + } + } + } +}` + +const tokenMapping = { + ADA: 'lovelace', + DJED: '8db269c3ec630e06ae29f74bc39edd1f87c819f1056206e879a1cd61446a65644d6963726f555344', + SHEN: '8db269c3ec630e06ae29f74bc39edd1f87c819f1056206e879a1cd615368656e4d6963726f555344', + IUSD: 'f66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b6988069555344', +} +const getToken = market => tokenMapping[market.marketId.toUpperCase()] + + +async function tvl(_, _b, _cb, { api, }) { + const {markets} = await graphQuery(endpoint, query) + + markets.filter(getToken).forEach(market => api.add(getToken(market) , market.totalSupply)) +} + +async function borrowed(_, _b, _cb, { api, }) { + const {markets} = await graphQuery(endpoint, query) + + markets.filter(getToken).forEach(market => { + const utilization = market.utilization + const availability = 1 - utilization + const totalBorrowed = market.totalSupply * utilization / availability + api.add(getToken(market), totalBorrowed) + }) +} diff --git a/projects/litxswap/index.js b/projects/litxswap/index.js new file mode 100644 index 0000000000..fbe2ba3b8f --- /dev/null +++ b/projects/litxswap/index.js @@ -0,0 +1,14 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + pulse: { + factory: "0x24398b6ea5434339934D999E431807B1C157b4Fd", + fromBlock: 17449439, + isAlgebra: true, + }, + bsc: { + factory: "0xbbc7f5605c9cb341d9c41e46ae6ceb30511bdfcf", + fromBlock: 29291639, + isAlgebra: true, + }, +}); diff --git a/projects/lobis.js b/projects/lobis.js index d35143c0bc..5ca84c1985 100644 --- a/projects/lobis.js +++ b/projects/lobis.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { ohmTvl } = require('./helper/ohm') const treasury = "0x873ad91fA4F2aA0d557C0919eC3F6c9D240cDd05" module.exports = ohmTvl(treasury, [ //curve - ["0xD533a949740bb3306d119CC777fa900bA034cd52", false], + [ADDRESSES.ethereum.CRV, false], //frax ["0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", false], //Sushi LP diff --git a/projects/lobsterswap/index.js b/projects/lobsterswap/index.js new file mode 100644 index 0000000000..59d75516bb --- /dev/null +++ b/projects/lobsterswap/index.js @@ -0,0 +1,19 @@ +const { getUniTVL } = require('../helper/unknownTokens') +const ethers = require("ethers") +const { config } = require('@defillama/sdk/build/api'); + +config.setProvider("ozone", new ethers.providers.StaticJsonRpcProvider("https://node1.ozonechain.io", { name: "ozone", chainId: 4000, })) + +module.exports = { + misrepresentedTokens: true, + bsc: { + tvl: getUniTVL({ factory: '0xF936CDe5138282eDC6370F9f5ac70d9a1AFC6F78', useDefaultCoreAssets: true }), + }, + ozone: { + tvl: getUniTVL({ factory: '0xE6E64C926af9ABEc9D819f52c9572AB961CEF6C1', useDefaultCoreAssets: true }), + }, +} + +//https://github.com/lobster-swap +// https://app.lobsterswap.com/ +// https://twitter.com/lobster_swap diff --git a/projects/lodestar-v1/index.js b/projects/lodestar-v1/index.js new file mode 100644 index 0000000000..ca0bb507b1 --- /dev/null +++ b/projects/lodestar-v1/index.js @@ -0,0 +1,52 @@ +const sdk = require('@defillama/sdk') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { transformBalances } = require('../helper/portedTokens') +const chain = 'arbitrum' +const controller = '0xa86dd95c210dd186fa7639f93e4177e97d057576' +const cETHER = '0x2193c45244AF12C280941281c8aa67dD08be0a64'.toLowerCase() + +async function getMarkets(block) { + let markets = await sdk.api2.abi.call({ target: controller, abi: abis.getAllMarkets, chain, block }) + markets = markets.filter(i => i.toLowerCase() !== cETHER) + + const tokens = await sdk.api2.abi.multiCall({ + abi: abis.underlying, + calls: markets, + chain, block, + }) + + markets.push(cETHER) + tokens.push(nullAddress) + return { markets, tokens } +} + +async function tvl(_, _b, { arbitrum: block }) { + const { markets, tokens } = await getMarkets(block) + const tokensAndOwners = tokens.map((t, i) => ([t, markets[i]])) + return sumTokens2({ tokensAndOwners, chain, block, }) +} + +async function borrowed(_, _b, { arbitrum: block }) { + const { markets, tokens } = await getMarkets(block) + const balances = {} + const borrows = await sdk.api2.abi.multiCall({ + abi: abis.totalBorrows, + calls: markets, + chain, block, + }) + borrows.forEach((a, i) => sdk.util.sumSingleBalance(balances, tokens[i], a)) + return transformBalances(chain, balances) +} + +module.exports = { + arbitrum: { + tvl, + borrowed, + } +}; + +const abis = { + getAllMarkets: "address[]:getAllMarkets", + underlying: "address:underlying", + totalBorrows: "uint256:totalBorrows", +} \ No newline at end of file diff --git a/projects/lofty/index.js b/projects/lofty/index.js index a91bbd652f..c3597c946f 100644 --- a/projects/lofty/index.js +++ b/projects/lofty/index.js @@ -1,6 +1,6 @@ const { toUSDTBalances } = require('../helper/balances'); -const { LOFTY_API } = require('../helper/env'); +const { getEnv } = require('../helper/env'); const axios = require("axios"); const LoftyTVLApi = "https://partners.lofty.ai/properties/v2/valuations"; @@ -9,7 +9,7 @@ async function loftyTVL() { const response = ( await axios.get(LoftyTVLApi, { headers: { - 'X-API-Key': LOFTY_API + 'X-API-Key': getEnv('LOFTY_API') } }) ).data.data; diff --git a/projects/logium/index.js b/projects/logium/index.js index 9f5f0601c3..de8afe8321 100644 --- a/projects/logium/index.js +++ b/projects/logium/index.js @@ -1,18 +1,24 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getBlock } = require('../helper/http') -const { providers } = require('@defillama/sdk/build/general'); +const sdk = require('@defillama/sdk') const { Contract } = require('ethers') const { sumTokens2 } = require('../helper/unwrapLPs') -const USDC = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' +const USDC = ADDRESSES.ethereum.USDC const LOGIUM_CORE = '0xc61d1dcceeec03c94d729d8f8344ce3be75d09fe' const ONE_DAY = 24 * 60 * 60 const usdcABI = 'event Transfer(address indexed from, address indexed to, uint256 value)' +function getProvider(network) { + const chainApi = new sdk.ChainApi(network) + return chainApi.provider +} + async function tvl(ts, block) { const fromBlock = await getBlock(ts - (31 * ONE_DAY), 'ethereum', {}, false) //33 days ago - const usdcContract = new Contract(USDC, [usdcABI], providers.ethereum) + const usdcContract = new Contract(USDC, [usdcABI], getProvider('ethereum')) const eventFilter = usdcContract.filters.Transfer(LOGIUM_CORE); const events = await usdcContract.queryFilter(eventFilter, fromBlock, block); const owners = [LOGIUM_CORE] diff --git a/projects/loopring/index.js b/projects/loopring/index.js index fd3944b1fc..f7512b56f0 100644 --- a/projects/loopring/index.js +++ b/projects/loopring/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -15,12 +16,12 @@ const listedTokens = [ '0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD', // LRC - '0xdac17f958d2ee523a2206206994597c13d831ec7', // USDT - '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI - '0x514910771AF9Ca656af840dff83E8264EcF986CA', // LINK - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC - '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', // MKR + ADDRESSES.ethereum.USDT, // USDT + ADDRESSES.ethereum.DAI, // DAI + ADDRESSES.ethereum.LINK, // LINK + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.WBTC, // WBTC + ADDRESSES.ethereum.MKR, // MKR ]; /*================================================== @@ -33,7 +34,7 @@ let ethBlanaceTotal = BigNumber(ethBalanceOld.output || 0).plus(ethBalanceNew.output); let balances = { - '0x0000000000000000000000000000000000000000': ethBlanaceTotal + [ADDRESSES.null]: ethBlanaceTotal }; let calls = []; diff --git a/projects/loterra/index.js b/projects/loterra/index.js index d8cf75df67..948783eb17 100644 --- a/projects/loterra/index.js +++ b/projects/loterra/index.js @@ -1,36 +1,8 @@ -const { sumSingleBalance, TOKEN_LIST, getBalance, } = require('../helper/chain/terra') - -// Source: https://docs.loterra.io/resources/contract-addresses -const contracts = { - multiSig: 'terra1s4twvkqy0eel5saah64wxezpckm7v9535jjshy', - dogether: 'terra19h4xk8xxxew0ne6fuw0mvuf7ltmjmxjxssj5ts' -} - -async function tvl(timestamp, ethBlock, { terra: block }) { - const balances = {} - - // Add aUST tokens in the multi-sig - const aUSTBalance = await getBalance(TOKEN_LIST.anchorust, contracts.dogether, block) - sumSingleBalance(balances, TOKEN_LIST.anchorust, aUSTBalance) - - return balances -} - -async function treasury(timestamp, ethBlock, { terra: block }) { - const balances = {} - - // Add aUST tokens in the multi-sig - const aUSTBalance = await getBalance(TOKEN_LIST.anchorust, contracts.multiSig, block) - sumSingleBalance(balances, TOKEN_LIST.anchorust, aUSTBalance) - - return balances -} module.exports = { methodology: 'TVL counts the UST that is available as a prize on the protocol.', terra: { - tvl, - treasury, + tvl: () => ({}), }, timetravel: false, hallmarks:[ diff --git a/projects/lsdx/index.js b/projects/lsdx/index.js index 89ddbd7da0..1bf4d30a4b 100644 --- a/projects/lsdx/index.js +++ b/projects/lsdx/index.js @@ -1,8 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); const FACTORY_CONTRACT = "0x3B4b6B14d07A645005658E6Ea697edb0BD7bf2b1"; -const LSD_LP = '0x3322f41dfa379B6D3050C1e271B0b435b3Ee3303' +const ETHx = '0x21ead867c8c5181854f6f8ce71f75b173d2bc16a' +const LSD = '0xfac77a24e52b463ba9857d6b758ba41ae20e31ff' +const LSD_LPs = ['0x3322f41dfa379B6D3050C1e271B0b435b3Ee3303', '0x3ab2ebbe52f4a80098a461cf9ecdade2ed645fc4'] const abis = { "getStakingTokens": "function getStakingTokens() view returns (address[])", "getStakingPoolAddress": "function getStakingPoolAddress(address) view returns (address)", @@ -13,17 +16,18 @@ async function tvl(_, _1, _2, { api }) { const owners = await api.multiCall({ abi: abis.getStakingPoolAddress, target: FACTORY_CONTRACT, calls: tokens }) tokens.forEach((v, i) => { if (v === nullAddress) { - tokens.push('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2') + tokens.push(ADDRESSES.ethereum.WETH) owners.push(owners[i]) } }) - return sumTokens2({ api, tokensAndOwners2: [tokens, owners], blacklistedTokens: [LSD_LP] }) + return sumTokens2({ api, tokensAndOwners2: [tokens, owners], blacklistedTokens: [...LSD_LPs, ETHx, LSD] }) } module.exports = { start: 16831303, ethereum: { tvl, - staking: staking('0x1D31755E03119311c7F00ae107874dddEC7573f3', LSD_LP) + pool2: staking(['0x1D31755E03119311c7F00ae107874dddEC7573f3', '0xE05630Da82604591F002b61F7116429CfDC4B542'], LSD_LPs), + staking: staking(['0xcA73C2aBA8EECb37EA1648999A7b08787b808ee2'], ETHx), } }; diff --git a/projects/luchadores/index.js b/projects/luchadores/index.js index fb1c345ef4..db8609511e 100644 --- a/projects/luchadores/index.js +++ b/projects/luchadores/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking'); const { pool2s } = require('../helper/pool2'); const {sumTokensAndLPsSharedOwners} = require('../helper/unwrapLPs'); @@ -20,12 +21,12 @@ const luchaMustStk = "0xe11f861dD5cE8407bb24dFD13b9710c0295276D6"; // ERC20 const LUCHA_polygon = "0x6749441Fdc8650b5b5a854ed255C82EF361f1596"; -const MATIC_polygon = "0x0000000000000000000000000000000000001010"; +const MATIC_polygon = ADDRESSES.polygon.WMATIC_1; const QI_polygon = "0x580A84C73811E1839F75d86d75d88cCa0c241fF4"; const MUST_polygon = "0x9C78EE466D6Cb57A4d01Fd887D2b5dFb2D46288f"; const PSP_polygon = "0x42d61D766B85431666B39B89C43011f24451bFf6"; const LINK_polygon = "0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39"; -const WETH_polygon = "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"; +const WETH_polygon = ADDRESSES.polygon.WETH_1; const WMATIC_LUCHA_Balancer_polygon = "0x924EC7ed38080E40396c46F6206A6d77D0B9f72d"; async function tvl(time, ethBlock, chainBlocks){ diff --git a/projects/luckychip/index.js b/projects/luckychip/index.js index 6f56b90ebd..249858c4a6 100644 --- a/projects/luckychip/index.js +++ b/projects/luckychip/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') const { transformBscAddress } = require('../helper/portedTokens'); @@ -12,14 +13,14 @@ const tokenHolderMap = [ checkETHBalance: true, }, { - tokens: '0x55d398326f99059fF775485246999027B3197955', // USDT + tokens: ADDRESSES.bsc.USDT, // USDT holders: [ "0x682ce0e340A0248B4554E14e834969F2E421dB2D" // USDT table ], } ] -const WBNB = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" +const WBNB = ADDRESSES.bsc.WBNB function normalizeArray(arrayOrString){ if(Array.isArray(arrayOrString)){ diff --git a/projects/luminous/index.js b/projects/luminous/index.js index 070e658019..a9e75a125a 100644 --- a/projects/luminous/index.js +++ b/projects/luminous/index.js @@ -1,8 +1,6 @@ -const { - getTokenBalance, - getTrxBalance, - unverifiedCall, -} = require("../helper/chain/tron") +const sdk = require('@defillama/sdk') +const { sumTokensExport } = require('../helper/unwrapLPs') +const { nullAddress } = require("../helper/tokenMapping"); const stakingWaterContract = "THyHbFrG5wnxdp9Lv7AgwJ4k7Nt1dp2pzj"; const WATER = "TFMUZn349bztRCCkL2PAmkWfy23Gyn5g5r"; @@ -10,13 +8,6 @@ const WATER = "TFMUZn349bztRCCkL2PAmkWfy23Gyn5g5r"; const stakingLumiContract = "TZD4xS3AFUixUwE28omTjeepCF6qUuxjCh"; const LUMI = "TDBNKiYQ8yfJtT5MDP3byu7f1npJuG2DBN"; -async function Staking() { - return { - water: await getTokenBalance(WATER, stakingWaterContract), - "lumi-credits": await getTokenBalance(LUMI, stakingLumiContract), - }; -} - const lumiFarm = "TJ6cgPpkri8cfrEh79TLdU2S16ugKHwAcW"; const waterLpToken = "TWH6NQ9tr28YoRdKuvcuQquVoEGrscPix4"; @@ -24,39 +15,46 @@ const waterFarm = "TY9mGUA8q1V9R9kmfUERpcG62SZ42gYuHW"; const lumiLpToken = "TUhZUbJaVicbQeNXHGBKxVsVuNL94usuoU"; async function Pool2() { + const { api } = arguments[3] + const [ waterLpTokenAmount, lumiLpTokenAmount, waterInLp, lumiInLp, - trxInWaterLp, - trxInLumiLp, waterLpTotalSupply, lumiLpTotalSupply, + ] = await api.batchCall([ + { abi: 'erc20:balanceOf', target: waterLpToken, params: lumiFarm }, + { abi: 'erc20:balanceOf', target: lumiLpToken, params: waterFarm }, + { abi: 'erc20:balanceOf', target: WATER, params: waterLpToken }, + { abi: 'erc20:balanceOf', target: LUMI, params: lumiLpToken }, + { abi: 'erc20:totalSupply', target: waterLpToken, }, + { abi: 'erc20:totalSupply', target: lumiLpToken, }, + ]) + + const [ + { output: trxInWaterLp}, + { output: trxInLumiLp}, ] = await Promise.all([ - getTokenBalance(waterLpToken, lumiFarm), - getTokenBalance(lumiLpToken, waterFarm), - getTokenBalance(WATER, waterLpToken), - getTokenBalance(LUMI, lumiLpToken), - getTrxBalance(waterLpToken), - getTrxBalance(lumiLpToken), - unverifiedCall({ target: waterLpToken, abi: 'totalSupply()', isBigNumber: true }), - unverifiedCall({ target: lumiLpToken, abi: 'totalSupply()', isBigNumber: true }), + sdk.api.eth.getBalance({ target: waterLpToken, chain: 'tron'}), + sdk.api.eth.getBalance({ target: lumiLpToken, chain: 'tron'}), ]); - return { - water: (waterInLp * waterLpTokenAmount) / (waterLpTotalSupply / 10 ** 6), - tron: - (trxInWaterLp * waterLpTokenAmount) / waterLpTotalSupply + - (trxInLumiLp * lumiLpTokenAmount) / lumiLpTotalSupply, - "lumi-credits": - (lumiInLp * lumiLpTokenAmount) / (lumiLpTotalSupply / 10 ** 6), - }; + api.add(WATER, (waterInLp * waterLpTokenAmount) / waterLpTotalSupply) + api.add(LUMI, (lumiInLp * lumiLpTokenAmount) / lumiLpTotalSupply) + api.add(nullAddress, (trxInWaterLp * waterLpTokenAmount) / waterLpTotalSupply) + api.add(nullAddress, (trxInLumiLp * lumiLpTokenAmount) / waterLpTotalSupply) } module.exports = { tron: { - staking: Staking, + staking: sumTokensExport({ + tokensAndOwners: [ + [WATER, stakingWaterContract], + [LUMI, stakingLumiContract], + ] + }), pool2: Pool2, tvl: (async) => ({}), }, diff --git a/projects/lunafi/index.js b/projects/lunafi/index.js index c97361d56c..46a1a5b239 100644 --- a/projects/lunafi/index.js +++ b/projects/lunafi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking'); const { pool2 } = require('../helper/pool2'); const { sumTokensExport } = require('../helper/unwrapLPs'); @@ -6,9 +7,9 @@ module.exports = { polygon: { tvl: sumTokensExport({ tokensAndOwners: [ - ['0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', '0x1311DCADf3330dD0AEB4d03177F9568880Febb34'], - ['0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', '0x2Bb91032F277BDc0DA7De271Ba03B3341B73b4c1'], - ['0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', '0x14e849B39CA7De7197763b6254EE57eDBE0F3375'], + [ADDRESSES.polygon.WBTC, '0x1311DCADf3330dD0AEB4d03177F9568880Febb34'], + [ADDRESSES.polygon.WETH_1, '0x2Bb91032F277BDc0DA7De271Ba03B3341B73b4c1'], + [ADDRESSES.polygon.USDC, '0x14e849B39CA7De7197763b6254EE57eDBE0F3375'], ] }), pool2: pool2('0x4175acd3d7f128cf41d42826cce2185a5ade7c82', ['0x72CF5ee9ee918a529b25BBcB0372594008178535', '0xE3108CDCfb18E7B3e558b37bfD4473CBDE1Fd05c']), diff --git a/projects/lusd-chickenbonds/index.js b/projects/lusd-chickenbonds/index.js index 9f91ca80c3..abd8486671 100644 --- a/projects/lusd-chickenbonds/index.js +++ b/projects/lusd-chickenbonds/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require("bignumber.js"); const CHICKEN_BOND_MANAGER_CONTRACT = '0x57619FE9C539f890b19c61812226F9703ce37137'; -const LUSD_ADDRESS = '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0'; +const LUSD_ADDRESS = ADDRESSES.ethereum.LUSD; async function tvl(_, block) { const bucketAmounts = (await sdk.api.abi.call({ diff --git a/projects/luxor/api.js b/projects/luxor/api.js new file mode 100644 index 0000000000..1a05bc80e7 --- /dev/null +++ b/projects/luxor/api.js @@ -0,0 +1,8 @@ +const index = require('./index') + +module.exports = { + fantom: { + tvl: () => 0, + staking: index.fantom.staking, + } +} \ No newline at end of file diff --git a/projects/luxor/index.js b/projects/luxor/index.js index b79b84bb74..4a73eb027c 100644 --- a/projects/luxor/index.js +++ b/projects/luxor/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasury = "0xDF2A28Cc2878422354A93fEb05B41Bd57d71DB24" @@ -6,8 +7,8 @@ const LUX = "0x6671e20b83ba463f270c8c75dae57e3cc246cb2b" module.exports=ohmTvl( treasury, [ - ["0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", false], - ["0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", false], + [ADDRESSES.fantom.DAI, false], + [ADDRESSES.fantom.WFTM, false], ["0x46729c2AeeabE7774a0E710867df80a6E19Ef851", true], ["0x951BBB838e49F7081072895947735b0892cCcbCD", true] ], @@ -15,8 +16,8 @@ module.exports=ohmTvl( "0xf3F0BCFd430085e198466cdCA4Db8C2Af47f0802", LUX, (addr) => { - if (addr.toLowerCase() === "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e") { - return "0x6b175474e89094c44da98b954eedeac495271d0f"; + if (addr.toLowerCase() === ADDRESSES.fantom.DAI) { + return ADDRESSES.ethereum.DAI; } return `fantom:${addr}`; } diff --git a/projects/luxs.fi/index.js b/projects/luxs.fi/index.js new file mode 100755 index 0000000000..4647fc18d6 --- /dev/null +++ b/projects/luxs.fi/index.js @@ -0,0 +1,52 @@ +const sdk = require("@defillama/sdk"); + +const facades = { + polygon: "0x0708542D895C2559001Fa9e4Bc49C3343735e6e2", + arbitrum: "0xE75254f298a5145438595Aa9d6D4327fCD14418D", + bsc: "0xD187937762c6fd4d7a58C71fD810CbfE22E64a84", + optimism: "0x285cAee14514f30bB178FB56c985e43A47d68E75", +}; + +async function tvl(_, _b, _cb, { api }) { + const vaults = await api.call({ + abi: " function getVaults() external view returns (address[] memory) ", + target: facades[api.chain], + }); + + const balances = {}; + const tokens = await api.multiCall({ + abi: "address:token", + calls: vaults, + }); + + const totalBalance = await api.multiCall({ + abi: "function getVaultValueLocked(address _vault) external view returns (uint256)", + calls: vaults.map((address) => ({ + target: facades[api.chain], + params: [address], + })), + chain: api.chain, + }); + + tokens.forEach((t, i) => + sdk.util.sumSingleBalance(balances, t, totalBalance[i], api.chain) + ); + return balances; +} + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + tvl: tvl, + }, + optimism: { + tvl: tvl, + }, + polygon: { + tvl: tvl, + }, + bsc: { + tvl: tvl, + }, + methodology: "TVL is counted from the LuxsFi vaults contracts", +}; \ No newline at end of file diff --git a/projects/lybra/index.js b/projects/lybra/index.js new file mode 100644 index 0000000000..848b7bf64d --- /dev/null +++ b/projects/lybra/index.js @@ -0,0 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +// Lybra holds total stake collateral (deposited ETH) +const LYBRA_CONTRACT = "0x97de57eC338AB5d51557DA3434828C5DbFaDA371"; + +module.exports = { + start: 1682265600, + ethereum: { + tvl: sumTokensExport({ owner: LYBRA_CONTRACT, tokens: [ADDRESSES.ethereum.STETH]}), + } +}; diff --git a/projects/lyra/index.js b/projects/lyra/index.js index dac523d74a..954e559f99 100644 --- a/projects/lyra/index.js +++ b/projects/lyra/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { sumTokens } = require('../helper/unwrapLPs') @@ -34,19 +35,34 @@ const v1_3_arb_LiquidityPool = [ '0xec6f3ef9481e7b8484290edbae2cedcdb0ce790e', //WBTC ] -const op_pools = [...new Set([...v1_0_Pools, ...v1_1_LiquidityPool, ...v1_1_ShortCollateral, ...v1_2_LiquidityPool, ...v1_2_ShortCollateral].map(t=>t.toLowerCase()))] +const v2_op_ShortCollateral = [ + '0x8512028339bb67aee47c06a298031d91bb7d15ba', //WETH + '0xa95c6d6a2765627a854960e9ee96f607b857385a', //WBTC + '0x292a5929bd150d28eda3c17d9b7c754968b2899d', //OP + '0xa49f2ea43b445f9a2467b7279cfa1f6a0c2e3f4f', //ARB + ] +const v2_op_LiquidityPool = [ + '0xb8e90fd247700de65450aacd4a47b2948dc59fc1', //WETH + '0xacacff03241256304e841e89c13319eae09f14b3', //WBTC + '0x12a4fd54aa321eb16b45310ccb177bd87c6ae447', //OP + '0xdd0d125475453767e65f1a4dd30b62699fdcc9f5', //ARB + ] + +const op_pools = [...new Set([...v1_0_Pools, ...v1_1_LiquidityPool, ...v1_1_ShortCollateral, ...v1_2_LiquidityPool, ...v1_2_ShortCollateral, ...v2_op_ShortCollateral, ...v2_op_LiquidityPool].map(t=>t.toLowerCase()))] const arb_pools = [...new Set([...v1_3_arb_ShortCollateral, ...v1_3_arb_LiquidityPool].map(t=>t.toLowerCase()))] -const op_tokens = ['0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9', '0xe405de8f52ba7559f9df3c368500b6e6ae6cee49', - '0xc5db22719a06418028a40a9b5e9a7c02959d0d08', '0x298b9b95708152ff6968aafd889c6586e9169f1d'] +const op_tokens = [ADDRESSES.optimism.sUSD, ADDRESSES.optimism.sETH, + '0xc5db22719a06418028a40a9b5e9a7c02959d0d08', '0x298b9b95708152ff6968aafd889c6586e9169f1d', + ADDRESSES.optimism.OP, '0x68f180fcce6836688e9084f035309e29bf0a2095', + ADDRESSES.optimism.WETH, ADDRESSES.optimism.USDC] -const arb_tokens = ['0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', - '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f'] +const arb_tokens = [ADDRESSES.arbitrum.USDC, ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.WBTC] const L2toL1Synths = { - '0xe405de8f52ba7559f9df3c368500b6e6ae6cee49': '0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb', - '0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9': '0x57ab1ec28d129707052df4df418d58a2d46d5f51', + [ADDRESSES.optimism.sETH]: '0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb', + [ADDRESSES.optimism.sUSD]: ADDRESSES.ethereum.sUSD, '0x298b9b95708152ff6968aafd889c6586e9169f1d': '0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6', '0xc5db22719a06418028a40a9b5e9a7c02959d0d08': '0xbbc455cb4f1b9e4bfc4b73970d360c8f032efee6' } @@ -56,7 +72,7 @@ async function tvlOptimism(ttimestamp, _b, {optimism: block}){ const transform = (addr)=>{ return L2toL1Synths[addr] || addr; } - await sumTokens(balances, op_tokens.map(t=>op_pools.map(p=>[t,p])).flat(), block, 'optimism', transform) + await sumTokens(balances, op_tokens.map(t=>op_pools.map(p=>[t,p])).flat(), block, 'optimism') return balances } @@ -75,7 +91,7 @@ module.exports = { tvl:tvlArbitrum }, ethereum:{ - tvl: staking("0x54d59c4596c7ea66fd62188ba1e16db39e6f5472", "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "ethereum"), + tvl: staking("0x54d59c4596c7ea66fd62188ba1e16db39e6f5472", ADDRESSES.ethereum.USDC, "ethereum"), staking: staking("0xcb9f85730f57732fc899fb158164b9ed60c77d49", "0x01ba67aac7f75f647d94220cc98fb30fcc5105bf", "ethereum") }, hallmarks:[ diff --git a/projects/macaron/config.js b/projects/macaron/config.js index 84f5766cad..15ca85d9a0 100644 --- a/projects/macaron/config.js +++ b/projects/macaron/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const vaults_bsc = [ { "sousId": 0, @@ -558,7 +559,7 @@ const choco_pools_bsc = [ "earningToken": { "symbol": "wBNB", "address": { - "56": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", + "56": ADDRESSES.bsc.WBNB, "97": "0xae13d989dac2f0debff460ac112a837c89baa7cd" }, "decimals": 18, @@ -950,7 +951,7 @@ const choco_pools_polygon = [ "earningToken": { "symbol": "wMATIC", "address": { - "137": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + "137": ADDRESSES.polygon.WMATIC_2, "80001": "" }, "decimals": 18, diff --git a/projects/magicfox-vault/index.js b/projects/magicfox-vault/index.js new file mode 100644 index 0000000000..b1e46316ff --- /dev/null +++ b/projects/magicfox-vault/index.js @@ -0,0 +1,45 @@ +const { unwrapLPsAuto } = require('../helper/unwrapLPs') + +const config = { + bsc: { voters: ['0x3Bb920C4875411C40981f6eb6959d4e169877A66', '0xaE0439eC64985D4165d12dDE7F514D092B4C0E23'] }, + arbitrum: { voters: ['0x01A07719596713bE5aB1C3AeEA76e3f5fde0885d', '0xF995f72445B14ae8D56523C9A0dE3F03334BFE2C'] }, + polygon: { voters: ['0x3F316559EB4f493C75638425106144261e20F3a2', '0xf999009fF931749a0930B8db02C6Cd888c7DC5ED'] }, +} + +const totalAmountAbi = "function getTotalAmounts() view returns (uint256 total0, uint256 total1)" +const guageAbiBsc = "function gaugeListExtended() view returns (address[], address[], uint16[])" +const guageAbi = "function gaugeListExtended() view returns (address[], address[])" + +Object.keys(config).forEach(chain => { + const { voters } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const res = await api.multiCall({ abi: chain === 'bsc' ? guageAbiBsc : guageAbi, calls: voters }) + let gauges = res.flatMap(i => i[0]) + gauges = [...new Set(gauges.map(i => i.toLowerCase()))] + const tokens = await api.multiCall({ abi: 'address:TOKEN', calls: gauges }) + const bals = (await api.multiCall({ abi: 'uint256:balance', calls: gauges, permitFailure: true })).map(i => i ?? 0) + const isHypervisor = await api.multiCall({ abi: totalAmountAbi, calls: tokens, permitFailure: true }) + const items = gauges.map((gauge, i) => ({ + gauge, + token: tokens[i], + balance: bals[i], + isHypervisor: !!isHypervisor[i] + })).filter(i => i.balance > 0) + const hypervisorItems = items.filter(i => i.isHypervisor) + const lpItems = items.filter(i => !i.isHypervisor) + lpItems.forEach(i => api.add(i.token, i.balance)) + const hypTokens = hypervisorItems.map(i => i.token) + const hypToken0s = await api.multiCall({ abi: 'address:token0', calls: hypTokens }) + const hypToken1s = await api.multiCall({ abi: 'address:token1', calls: hypTokens }) + const hypTotalSupplies = await api.multiCall({ abi: 'uint256:totalSupply', calls: hypTokens }) + const hypTokenBals = await api.multiCall({ abi: totalAmountAbi, calls: hypTokens }) + hypTokens.forEach((_, i) => { + const ratio = hypervisorItems[i].balance / hypTotalSupplies[i] + api.add(hypToken0s[i], hypTokenBals[i][0] * ratio) + api.add(hypToken1s[i], hypTokenBals[i][1] * ratio) + }) + return unwrapLPsAuto({ api,}) + } + } +}) \ No newline at end of file diff --git a/projects/magicfox/index.js b/projects/magicfox/index.js new file mode 100644 index 0000000000..8ac1d75910 --- /dev/null +++ b/projects/magicfox/index.js @@ -0,0 +1,13 @@ +const { uniTvlExport } = require("../helper/unknownTokens"); + +module.exports = { + ...uniTvlExport("bsc", "0xcEDa3234D7D5b36114d886682A399c6d126A03e0", { + hasStablePools: true, + }), + ...uniTvlExport("arbitrum", "0xBd7A8c05D0eB214e3C5cc63D4B77C2Ea38bDe440", { + hasStablePools: true, + }), + ...uniTvlExport("polygon", "0xa2d23C7Ca6D360D5B0b30CaFF79dbBfa242B4811", { + hasStablePools: true, + }), +}; diff --git a/projects/magicianmv/index.js b/projects/magicianmv/index.js new file mode 100644 index 0000000000..05f52d0903 --- /dev/null +++ b/projects/magicianmv/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +module.exports = { + misrepresentedTokens: true, + polygon: { + tvl: getUniTVL({ + factory: "0xf08ae17c2a2728a788bb1b6c243fe7eb3e5bbadc", + useDefaultCoreAssets: true, + }), + }, +}; diff --git a/projects/magik-farm/config/vault/aurora_pools.js b/projects/magik-farm/config/vault/aurora_pools.js index 5980982a7e..317e52b7b0 100644 --- a/projects/magik-farm/config/vault/aurora_pools.js +++ b/projects/magik-farm/config/vault/aurora_pools.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../../helper/coreAssets.json') const auroraPools = [ { id: 'carbon-carbon-near', diff --git a/projects/magik-farm/config/vault/avalanche_pools.js b/projects/magik-farm/config/vault/avalanche_pools.js index 7348014b39..2da1cbbbd8 100644 --- a/projects/magik-farm/config/vault/avalanche_pools.js +++ b/projects/magik-farm/config/vault/avalanche_pools.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../../helper/coreAssets.json') const avalanchePools = [ { id: "cham-avic-usdc", diff --git a/projects/magik-farm/config/vault/bsc_pools.js b/projects/magik-farm/config/vault/bsc_pools.js index 329f29ab29..4be092cda1 100644 --- a/projects/magik-farm/config/vault/bsc_pools.js +++ b/projects/magik-farm/config/vault/bsc_pools.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../../helper/coreAssets.json') const bscPools = [ { id: 'orb-orb-magik', diff --git a/projects/magik-farm/config/vault/fantom_pools.js b/projects/magik-farm/config/vault/fantom_pools.js index 390bcca0fc..50529ecaf0 100644 --- a/projects/magik-farm/config/vault/fantom_pools.js +++ b/projects/magik-farm/config/vault/fantom_pools.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../../helper/coreAssets.json') const fantomPools = [ { id: 'lif3-tomb', diff --git a/projects/magpiexyz/config.js b/projects/magpiexyz/config.js index 70a18a4410..8301676618 100644 --- a/projects/magpiexyz/config.js +++ b/projects/magpiexyz/config.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { bsc: { MasterMagpieAddress: "0xa3B615667CBd33cfc69843Bf11Fbb2A1D926BD46", VlMGPAddress: "0x9B69b06272980FA6BAd9D88680a71e3c3BeB32c6", - MWOMSVAddress: "0x0000000000000000000000000000000000000000", + MWOMSVAddress: ADDRESSES.null, MGPAddress: "0xD06716E1Ff2E492Cc5034c2E81805562dd3b45fa", WOMAddress: "0xAD6742A35fB341A9Cc6ad674738Dd8da98b94Fb1", MWOMAddress: "0x027a9d301FB747cd972CFB29A63f3BDA551DFc5c", diff --git a/projects/magpiexyz/index.js b/projects/magpiexyz/index.js index 644c4ae754..a80b2858e3 100644 --- a/projects/magpiexyz/index.js +++ b/projects/magpiexyz/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { staking } = require('../helper/staking') const WombatPoolHelperAbi = require("./abis/wombatPoolHelper.json") @@ -6,8 +7,8 @@ const config = require("./config") async function getPoolList(api, MasterMagpieAddress, VlMGPAddress, MWOMAddress, MWOMSVAddress) { let poolTokens = await api.fetchList({ lengthAbi: MasterMagpieAbi.poolLength, itemAbi: MasterMagpieAbi.registeredToken, target: MasterMagpieAddress }) - const customPools = new Set([MWOMAddress, VlMGPAddress, MWOMSVAddress]) - poolTokens = poolTokens.filter(i => !customPools.has(i)) + const customPools = new Set([MWOMAddress, VlMGPAddress, MWOMSVAddress, '0x2130Df9dba40AfeFcA4C9b145f5ed095335c5FA3'].map(i => i.toLowerCase())) + poolTokens = poolTokens.filter(i => !customPools.has(i.toLowerCase())) const infos = await api.multiCall({ calls: poolTokens, abi: MasterMagpieAbi.tokenToPoolInfo, target: MasterMagpieAddress }) const depositTokens = await api.multiCall({ calls: infos.map(i => i.helper), abi: WombatPoolHelperAbi.depositToken, }) return [poolTokens, depositTokens] @@ -20,7 +21,7 @@ async function tvl(timestamp, block, chainBlocks, { api }) { const balances = {}; const womBal = await api.call({ abi: 'erc20:balanceOf', target: MWOMAddress, params: MasterMagpieAddress }) sdk.util.sumSingleBalance(balances, WOMAddress, womBal, api.chain) - if (MWOMSVAddress != "0x0000000000000000000000000000000000000000") { + if (MWOMSVAddress != ADDRESSES.null) { const mWomSVBal = await api.call({ abi: 'erc20:balanceOf', target: MWOMAddress, params: MWOMSVAddress }) sdk.util.sumSingleBalance(balances, WOMAddress, mWomSVBal, api.chain) } diff --git a/projects/mahadao/bsc.js b/projects/mahadao/bsc.js index aa1070babd..27e063b088 100644 --- a/projects/mahadao/bsc.js +++ b/projects/mahadao/bsc.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require("../helper/unwrapLPs.js"); const chain = "bsc"; const bsc = { - busd: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + busd: ADDRESSES.bsc.BUSD, arth: "0x85daB10c3BA20148cA60C2eb955e1F8ffE9eAa79", arthBusdPool: "0x21de718bcb36f649e1a7a7874692b530aa6f986d", diff --git a/projects/mahadao/ethereum.js b/projects/mahadao/ethereum.js index 048b06fd8f..4f91f18cdb 100644 --- a/projects/mahadao/ethereum.js +++ b/projects/mahadao/ethereum.js @@ -1,14 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, sumTokens2 } = require("../helper/unwrapLPs.js"); const { staking } = require("../helper/staking"); const activePoolAbi = "address:activePool" const eth = { - dai: "0x6b175474e89094c44da98b954eedeac495271d0f", + dai: ADDRESSES.ethereum.DAI, maha: "0x745407c86df8db893011912d3ab28e68b62e49b0", - weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + weth: ADDRESSES.ethereum.WETH, arth: "0x8CC0F052fff7eaD7f2EdCCcaC895502E884a8a71", crv3: "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", - usdc: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + usdc: ADDRESSES.ethereum.USDC, mahax: "0xbdd8f4daf71c2cb16cce7e54bb81ef3cfcf5aacb", diff --git a/projects/mahadao/polygon.js b/projects/mahadao/polygon.js index a750cb51bc..3f177a1272 100644 --- a/projects/mahadao/polygon.js +++ b/projects/mahadao/polygon.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require("../helper/unwrapLPs.js"); const chain = "polygon"; const polygon = { - usdc: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + usdc: ADDRESSES.polygon.USDC, arthRedeemer: "0x394f4f7db617a1e4612072345f9601235f64b326", }; diff --git a/projects/maia-dao/api.js b/projects/maia-dao/api.js new file mode 100644 index 0000000000..55e19de8f5 --- /dev/null +++ b/projects/maia-dao/api.js @@ -0,0 +1,8 @@ +const { staking } = require('../helper/staking') + +module.exports = { + metis: { + tvl: () => 0, + staking: staking('0xD7a586CE5250bEfaB2cc2239F7226B9602536E6A', '0x72c232D56542Ba082592DEE7C77b1C6CFA758BCD') + } +} \ No newline at end of file diff --git a/projects/maia-dao/index.js b/projects/maia-dao/index.js index 81997d6442..7b1ebdd7e6 100644 --- a/projects/maia-dao/index.js +++ b/projects/maia-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getChainTransform } = require('../helper/portedTokens'); const { unwrapUniswapLPs, sumTokens2, } = require('../helper/unwrapLPs'); @@ -6,7 +7,7 @@ const abis = require("./abis.json"); const HERMES = '0xb27bbeaaca2c00d6258c3118bab6b5b6975161c8'; const excludedTokens = ["0xa3e8e7eb4649ffc6f3cbe42b4c2ecf6625d3e802"]; const multisig = '0x77314eAA8D99C2Ad55f3ca6dF4300CFC50BdBC7F'; -const tokens = ['0x420000000000000000000000000000000000000A', '0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000', '0xEA32A96608495e54156Ae48931A7c20f0dcc1a21', '0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC', '0x4651B38e7ec14BB3db731369BFE5B08F2466Bd0A', '0xEfFEC28996aAff6D55B6D108a46446d45C3a2E71', '0x5ab390084812E145b619ECAA8671d39174a1a6d1',]; +const tokens = [ADDRESSES.metis.WETH, ADDRESSES.metis.Metis, ADDRESSES.metis.m_USDC, ADDRESSES.metis.m_USDT, ADDRESSES.metis.DAI, '0xEfFEC28996aAff6D55B6D108a46446d45C3a2E71', '0x5ab390084812E145b619ECAA8671d39174a1a6d1',]; async function tvl(timestamp, _, { metis: block }) { const chain = 'metis' diff --git a/projects/maker/abis/maker-mcd.js b/projects/maker/abis/maker-mcd.js index 9224afe22e..326221c7a0 100644 --- a/projects/maker/abis/maker-mcd.js +++ b/projects/maker/abis/maker-mcd.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../../helper/coreAssets.json') module.exports = { // addresses for kovan version 0.2.17 KOVANVAT: "0xba987bdb501d131f766fee8180da5d81b34b69d9", @@ -7,7 +8,7 @@ module.exports = { VAT: "0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b", POT: "0x197e90f9fad81970ba7976f33cbd77088e5d7cf7", JUG: "0x19c0976f590d67707e62397c87829d896dc0f1f1", - DAI: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + DAI: ADDRESSES.ethereum.DAI, STARTBLOCK: 8928152, ilk: "function ilk() view returns (bytes32)", gem: "address:gem", diff --git a/projects/maker/abis/makerdao.js b/projects/maker/abis/makerdao.js index d7c2af872c..18ab2c20ff 100755 --- a/projects/maker/abis/makerdao.js +++ b/projects/maker/abis/makerdao.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../../helper/coreAssets.json') module.exports = { TUB_ADDRESS: "0x448a5065aebb8e423f0896e6c5d525c040f59af3", - DAI_ADDRESS: "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", - WETH_ADDRESS: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + DAI_ADDRESS: ADDRESSES.ethereum.SAI, + WETH_ADDRESS: ADDRESSES.ethereum.WETH }; \ No newline at end of file diff --git a/projects/maker/index.js b/projects/maker/index.js index a907826c02..2dc14f6257 100644 --- a/projects/maker/index.js +++ b/projects/maker/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // const utils = require('web3-utils'); const sdk = require('@defillama/sdk'); const MakerSCDConstants = require("./abis/makerdao.js"); @@ -27,6 +28,7 @@ async function getJoins(block, api) { const ilks = await api.multiCall({ abi: MakerMCDConstants.ilk, calls: auths, + permitFailure: true, }); ilks.forEach((_, i) => { @@ -57,6 +59,7 @@ async function tvl(timestamp, block, _, { api }) { const { output: gems } = await sdk.api.abi.multiCall({ abi: MakerMCDConstants.gem, block, calls: joins.map(i => ({ target: i })), + permitFailure: true, }) const dogCalls = dogs.map(i => ({ target: i })) @@ -73,6 +76,7 @@ async function tvl(timestamp, block, _, { api }) { const { output: dogRes } = await sdk.api.abi.multiCall({ abi: MakerMCDConstants.dog, calls: dogCalls, block, + permitFailure: true, }) const failedCalls = dogRes.filter(i => !i.success) @@ -82,7 +86,7 @@ async function tvl(timestamp, block, _, { api }) { } } - toa = toa.filter(i => i[0].toLowerCase() !== '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359') + toa = toa.filter(i => i[0].toLowerCase() !== ADDRESSES.ethereum.SAI.toLowerCase()) const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: toa.map(t => t[0]) }) const gUNIToa = toa.filter((_, i) => symbols[i] === 'G-UNI') toa = toa.filter((_, i) => symbols[i] !== 'G-UNI') @@ -111,7 +115,7 @@ async function unwrapGunis({ api, toa, balances = {} }) { sdk.util.sumSingleBalance(balances, token0s[i], token0Bal) sdk.util.sumSingleBalance(balances, token1s[i], token1Bal) }) - sdk.util.removeTokenBalance(balances, '0x6b175474e89094c44da98b954eedeac495271d0f') // remove dai balances + sdk.util.removeTokenBalance(balances, ADDRESSES.ethereum.DAI) // remove dai balances return balances } diff --git a/projects/mama-dao/index.js b/projects/mama-dao/index.js index c9863d8638..9a1b1bd662 100644 --- a/projects/mama-dao/index.js +++ b/projects/mama-dao/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {ohmTvl} = require("../helper/ohm"); const treasury = "0x884f6A98477b0F689f1da280A83a963f2B768972"; const treasuryTokens = [ - ["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", false], // DAI + [ADDRESSES.polygon.DAI, false], // DAI ["0xBdDB96D54E1434654f8E46Dba41120cd652039bb", true] // MAMA-DAI UNI LP ] const stakingAddress = "0xe1B64E20921a38c20BE98f953F758e9DeD80F89b" diff --git a/projects/mango-farmers-club/index.js b/projects/mango-farmers-club/index.js index 6a7b7c7226..dc633f71d2 100644 --- a/projects/mango-farmers-club/index.js +++ b/projects/mango-farmers-club/index.js @@ -1,7 +1,18 @@ -const { sumTokensExport } = require('../helper/unwrapLPs'); +const { fetchURL } = require("../helper/utils"); module.exports = { polygon_zkevm: { - tvl: sumTokensExport({ owner: '0x05Cd3c8Ded966BE2556A8A83190aEF845f24eB76', tokens: ['0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035']}) + staking: async (_, _1, _2, { api }) => { + const stakingBalance = await api.call({ + abi: 'erc20:balanceOf', + target: '0x1fa03edb1b8839a5319a7d2c1ae6aae492342bad', + params: "0xdd38211f2973dc41cd6fC4DB681596Fd6118D894", + }); + const { price : mangoPrice } = (await fetchURL('https://prod.clober-api.com/1101/markets/0x1FC38BA10E741F357b1c8B69DC08eA654c21Ae37/trades?limit=1')).data.trades[0] + return { + tether: mangoPrice * stakingBalance /1e18 + } + }, + tvl: () => ({}) } }; diff --git a/projects/mango-markets-v4/idl.json b/projects/mango-markets-v4/idl.json new file mode 100644 index 0000000000..c5414b0c9c --- /dev/null +++ b/projects/mango-markets-v4/idl.json @@ -0,0 +1,361 @@ +{ + "version": "0.16.0", + "name": "mango_v4", + "instructions": [], + "accounts": [ + { + "name": "Bank", + "type": { + "kind": "struct", + "fields": [ + { + "name": "group", + "type": "publicKey" + }, + { + "name": "name", + "type": { + "array": [ + "u8", + 16 + ] + } + }, + { + "name": "mint", + "type": "publicKey" + }, + { + "name": "vault", + "type": "publicKey" + }, + { + "name": "oracle", + "type": "publicKey" + }, + { + "name": "oracleConfig", + "type": { + "defined": "OracleConfig" + } + }, + { + "name": "stablePriceModel", + "type": { + "defined": "StablePriceModel" + } + }, + { + "name": "depositIndex", + "type": { + "defined": "I80F48" + } + }, + { + "name": "borrowIndex", + "type": { + "defined": "I80F48" + } + }, + { + "name": "indexedDeposits", + "type": { + "defined": "I80F48" + } + }, + { + "name": "indexedBorrows", + "type": { + "defined": "I80F48" + } + }, + { + "name": "indexLastUpdated", + "type": "u64" + }, + { + "name": "bankRateLastUpdated", + "type": "u64" + }, + { + "name": "avgUtilization", + "type": { + "defined": "I80F48" + } + }, + { + "name": "adjustmentFactor", + "type": { + "defined": "I80F48" + } + }, + { + "name": "util0", + "type": { + "defined": "I80F48" + } + }, + { + "name": "rate0", + "type": { + "defined": "I80F48" + } + }, + { + "name": "util1", + "type": { + "defined": "I80F48" + } + }, + { + "name": "rate1", + "type": { + "defined": "I80F48" + } + }, + { + "name": "maxRate", + "type": { + "defined": "I80F48" + } + }, + { + "name": "collectedFeesNative", + "type": { + "defined": "I80F48" + } + }, + { + "name": "loanOriginationFeeRate", + "type": { + "defined": "I80F48" + } + }, + { + "name": "loanFeeRate", + "type": { + "defined": "I80F48" + } + }, + { + "name": "maintAssetWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "initAssetWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "maintLiabWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "initLiabWeight", + "type": { + "defined": "I80F48" + } + }, + { + "name": "liquidationFee", + "type": { + "defined": "I80F48" + } + }, + { + "name": "dust", + "type": { + "defined": "I80F48" + } + }, + { + "name": "flashLoanTokenAccountInitial", + "type": "u64" + }, + { + "name": "flashLoanApprovedAmount", + "type": "u64" + }, + { + "name": "tokenIndex", + "type": "u16" + }, + { + "name": "bump", + "type": "u8" + }, + { + "name": "mintDecimals", + "type": "u8" + }, + { + "name": "bankNum", + "type": "u32" + }, + { + "name": "minVaultToDepositsRatio", + "type": "f64" + }, + { + "name": "netBorrowLimitWindowSizeTs", + "type": "u64" + }, + { + "name": "lastNetBorrowsWindowStartTs", + "type": "u64" + }, + { + "name": "netBorrowLimitPerWindowQuote", + "type": "i64" + }, + { + "name": "netBorrowsInWindow", + "type": "i64" + }, + { + "name": "borrowWeightScaleStartQuote", + "type": "f64" + }, + { + "name": "depositWeightScaleStartQuote", + "type": "f64" + }, + { + "name": "reduceOnly", + "type": "u8" + }, + { + "name": "forceClose", + "type": "u8" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 2118 + ] + } + } + ] + } + } + ], + "types": [ + + { + "name": "OracleConfig", + "type": { + "kind": "struct", + "fields": [ + { + "name": "confFilter", + "type": { + "defined": "I80F48" + } + }, + { + "name": "maxStalenessSlots", + "type": "i64" + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 72 + ] + } + } + ] + } + }, + { + "name": "I80F48", + "type": { + "kind": "struct", + "fields": [ + { + "name": "val", + "type": "i128" + } + ] + } + }, + + { + "name": "StablePriceModel", + "type": { + "kind": "struct", + "fields": [ + { + "name": "stablePrice", + "type": "f64" + }, + { + "name": "lastUpdateTimestamp", + "type": "u64" + }, + { + "name": "delayPrices", + "type": { + "array": [ + "f64", + 24 + ] + } + }, + { + "name": "delayAccumulatorPrice", + "type": "f64" + }, + { + "name": "delayAccumulatorTime", + "type": "u32" + }, + { + "name": "delayIntervalSeconds", + "type": "u32" + }, + { + "name": "delayGrowthLimit", + "type": "f32" + }, + { + "name": "stableGrowthLimit", + "type": "f32" + }, + { + "name": "lastDelayIntervalIndex", + "type": "u8" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 7 + ] + } + }, + { + "name": "reserved", + "type": { + "array": [ + "u8", + 48 + ] + } + } + ] + } + } + ], + "events": [], + "errors": [] +} \ No newline at end of file diff --git a/projects/mango-markets-v4/index.js b/projects/mango-markets-v4/index.js new file mode 100644 index 0000000000..6a4ecfd061 --- /dev/null +++ b/projects/mango-markets-v4/index.js @@ -0,0 +1,24 @@ +const { Program } = require("@project-serum/anchor"); +const { getProvider, sumTokens2, } = require("../helper/solana"); +const idl = require('./idl.json') + +async function tvl() { + const provider = getProvider() + const program = new Program(idl, '4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg', provider) + const banks = await program.account.bank.all() + return sumTokens2({ tokenAccounts: banks.map(i => i.account.vault) }) +} +async function borrowed() { + const { api } = arguments[3] + const provider = getProvider() + const program = new Program(idl, '4MangoMjqJ2firMokCjjGgoK8d4MXcrgL7XJaL3w6fVg', provider) + const banks = await program.account.bank.all() + banks.forEach(({ account: i }) => { + api.add(i.mint.toString(), i.indexedBorrows.val.mul(i.borrowIndex.val).toString() / (2**(48 * 2))) + }) +} + +module.exports = { + timetravel: false, + solana: { tvl, borrowed }, +} diff --git a/projects/manifest/index.js b/projects/manifest/index.js index cb0b1deb2b..84bf519750 100644 --- a/projects/manifest/index.js +++ b/projects/manifest/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0x200a433086C37eB55bc4CD31f8195831052a67C6"; module.exports = ohmTvl(treasuryAddress, [ ["0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f", false], // sOHM ["0x89c4d11dfd5868d847ca26c8b1caa9c25c712cef", true], // MNFST-OHM - ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", false] // WETH + [ADDRESSES.ethereum.WETH, false] // WETH ], "ethereum", "0x9c9022c6a2e1ed9f3110e177763123c4400d5eb6", "0x21585bbcd5bdc3f5737620cf0db2e51978cf60ac") diff --git a/projects/manifesto/index.js b/projects/manifesto/index.js index 545e963fd7..41468a3c68 100644 --- a/projects/manifesto/index.js +++ b/projects/manifesto/index.js @@ -1,18 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unknownTokens"); const lps = [ '0xF65af1E61D7aC87d73E347D17E369Dc2118E9517', ] module.exports = { + hallmarks: [ + [1676332800, "Rug Pull"] + ], misrepresentedTokens: true, canto: { tvl: sumTokensExport({ owner: '0x20636bd0E15be0e1faADE1b27f568e642f59814E', tokens: [ - '0x4e71A2E537B7f9D9413D3991D37958c0b5e1e503', - '0x826551890Dc65655a0Aceca109aB11AbDbD7a07B', - '0x5FD55A1B9FC24967C4dB09C513C3BA0DFa7FF687', - '0x80b5a32E4F032B2a058b4F29EC95EEfEEB87aDcd', + ADDRESSES.canto.NOTE, + ADDRESSES.canto.WCANTO, + ADDRESSES.functionx.PURSE, + ADDRESSES.functionx.WFX, ...lps, ], useDefaultCoreAssets: true, diff --git a/projects/mantleswap/index.js b/projects/mantleswap/index.js new file mode 100644 index 0000000000..587f2f200a --- /dev/null +++ b/projects/mantleswap/index.js @@ -0,0 +1,30 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { transformDexBalances } = require('../helper/portedTokens') + + +module.exports = { + misrepresentedTokens: true, + mantle: { + tvl + } +} + +async function tvl(_, _b, _cb, { api, }) { + const logs = await getLogs({ + api, + target: '0x5c84e5d27fc7575D002fe98c5A1791Ac3ce6fD2f', + topics: ['0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'], + eventAbi: 'event PairCreated(address indexed token0, address indexed token1, address pair, uint256 )', + onlyArgs: true, + fromBlock: 5964, + }) + const tok0Bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: logs.map(i => ({ target: i.token0, params: i.pair}))}) + const tok1Bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: logs.map(i => ({ target: i.token1, params: i.pair}))}) + return transformDexBalances({ chain: api.chain, data: logs.map((log, i) => ({ + token0: log.token0, + token0Bal: tok0Bals[i], + token1: log.token1, + token1Bal: tok1Bals[i], + }))}) + +} \ No newline at end of file diff --git a/projects/mantradao.js b/projects/mantradao.js index ec8e88ec0a..f2bc28967a 100644 --- a/projects/mantradao.js +++ b/projects/mantradao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require("./helper/unwrapLPs"); const { compoundExports } = require("./helper/compound"); const { stakingAssetsETH, stakingAssetsBSC, stakingAssetsPOLYGON, } = require("./config/mantra-dao/contracts/naked-staking-contracts"); @@ -11,7 +12,7 @@ const chainConfig = { const comptroller = "0x606246e9EF6C70DCb6CEE42136cd06D127E2B7C7" const zenETH = "0x4F905f75F5576228eD2D0EA508Fb0c32a0696090" -const zenETHEquivalent = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const zenETHEquivalent = ADDRESSES.ethereum.WETH; module.exports = {} diff --git a/projects/maple-rwa/index.js b/projects/maple-rwa/index.js new file mode 100644 index 0000000000..4f5adf1285 --- /dev/null +++ b/projects/maple-rwa/index.js @@ -0,0 +1,16 @@ + +const rwaPools = [ + '0xfe119e9C24ab79F1bDd5dd884B86Ceea2eE75D92', // Cash Management + '0xe9d33286f0E37f517B1204aA6dA085564414996d', // AQRU +] + +async function tvl(_, _b, _cb, { api, }) { + const tokens = await api.multiCall({ abi: 'address:asset', calls: rwaPools }) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: rwaPools }) + api.addTokens(tokens, bals) +} + +module.exports = { + doublecounted: true, + ethereum: { tvl, } +} \ No newline at end of file diff --git a/projects/maple/index.js b/projects/maple/index.js index 5a13c00a8a..b18f898920 100644 --- a/projects/maple/index.js +++ b/projects/maple/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens2 } = require("../helper/unwrapLPs"); const { staking, } = require("../helper/staking") @@ -5,9 +6,7 @@ const { getConnection, getTokenBalance } = require('../helper/solana') const { PublicKey } = require('@solana/web3.js') const { getLogs } = require('../helper/cache/getLogs') -const MapleTreasury = "0xa9466EaBd096449d650D5AEB0dD3dA6F52FD0B19"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const chain = 'ethereum' +const USDC = ADDRESSES.ethereum.USDC; /*** Solana TVL Portions ***/ const POOL_DISCRIMINATOR = "35K4P9PCU"; @@ -16,7 +15,7 @@ const TVL_DATA_SIZE = 8; const PROGRAM_ID = "5D9yi4BKrxF8h65NkVE1raCCWFKUs5ngub2ECxhvfaZe"; let _tvl -const usdc = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' +const usdc = ADDRESSES.solana.USDC function getTvl(borrowed = false) { return async () => { @@ -65,41 +64,51 @@ async function getPoolInfo(block, api) { if (!pInfos[block]) pInfos[block] = _getPoolInfo() return pInfos[block] - async function _getPoolInfo(){ + async function _getPoolInfo() { const loanFactory = '0x1551717ae4fdcb65ed028f7fb7aba39908f6a7a6' - + const openTermLoanManagerFactory = '0x90b14505221a24039A2D11Ad5862339db97Cc160' + const logs = await getLogs({ api, target: loanFactory, topic: "InstanceDeployed(uint256,address,bytes)", fromBlock: 16126995, }); - const proxies = logs.map(s=>"0x"+s.topics[2].slice(26, 66)) - const assets = await sdk.api2.abi.multiCall({ block, abi: abis.fundsAsset, calls: proxies, }) - return { proxies, assets, } + const logs2 = await getLogs({ // open term + api, + target: openTermLoanManagerFactory, + topic: "InstanceDeployed(uint256,address,bytes)", + fromBlock: 17372608, + }); + + let proxies = logs.map(s => "0x" + s.topics[2].slice(26, 66)) + const proxiesOpenTerm = logs2.map(s => "0x" + s.topics[2].slice(26, 66)) + proxies.push(...proxiesOpenTerm) + proxies = [...new Set(proxies.map(i => i.toLowerCase()))] + const managers = await api.multiCall({ abi: 'address:poolManager', calls: proxies }) + const assets = await api.multiCall({ block, abi: abis.fundsAsset, calls: proxies, }) + return { proxies, assets, managers } } } async function ethTvl2(_, block, _1, { api }) { - const { proxies, assets, } = await getPoolInfo(block, api) - const pools = await sdk.api2.abi.multiCall({ + const { managers, assets, } = await getPoolInfo(block, api) + const pools = await api.multiCall({ abi: abis.pool, - calls: proxies, - block, + calls: managers, }) - return sumTokens2({ block, tokensAndOwners: pools.map((o, i) => ([assets[i], o]))}) + return sumTokens2({ block, tokensAndOwners: pools.map((o, i) => ([assets[i], o])) }) } async function borrowed2(_, block, _1, { api }) { const balances = {} const { proxies, assets, } = await getPoolInfo(block, api) - const principalOut = await sdk.api2.abi.multiCall({ + const principalOut = await api.multiCall({ abi: abis.principalOut, calls: proxies, - block, }) - principalOut.forEach((val, i) => sdk.util.sumSingleBalance(balances,assets[i],val)) + principalOut.forEach((val, i) => sdk.util.sumSingleBalance(balances, assets[i], val)) return balances } @@ -118,8 +127,8 @@ module.exports = { methodology: "We count liquidity by USDC deposited on the pools through PoolFactory contract", } - -const abis ={ + +const abis = { fundsAsset: "address:fundsAsset", principalOut: "uint128:principalOut", pool: "address:pool", diff --git a/projects/mare-finance-v2/index.js b/projects/mare-finance-v2/index.js new file mode 100644 index 0000000000..c4848883fe --- /dev/null +++ b/projects/mare-finance-v2/index.js @@ -0,0 +1,11 @@ +const { compoundExports } = require("../helper/compound"); +const { staking } = require("../helper/staking"); + +const unitroller = "0xFcD7D41D5cfF03C7f6D573c9732B0506C72f5C72"; + +module.exports = { + methodology: "Same as Compound Finance, we just count all the tokens supplied (not borrowed money) on the lending markets", + kava: { + ...compoundExports(unitroller, "kava"), + }, +} \ No newline at end of file diff --git a/projects/marginfi/idl.js b/projects/marginfi/idl.js index dde4addd74..1e3c755527 100644 --- a/projects/marginfi/idl.js +++ b/projects/marginfi/idl.js @@ -3,67 +3,6 @@ module.exports = { name: 'marginfi', instructions: [], accounts: [ - { - name: 'MarginfiAccount', - type: { - kind: 'struct', - fields: [ - { - name: 'group', - type: 'publicKey' - }, - { - name: 'authority', - type: 'publicKey' - }, - { - name: 'lendingAccount', - type: { - defined: 'LendingAccount' - } - }, - { - name: 'padding', - type: { - array: [ - 'u64', - 64 - ] - } - } - ] - } - }, - { - name: 'marginfiGroup', - type: { - kind: 'struct', - fields: [ - { - name: 'admin', - type: 'publicKey' - }, - { - name: 'padding0', - type: { - array: [ - 'u128', - 32 - ] - } - }, - { - name: 'padding1', - type: { - array: [ - 'u128', - 32 - ] - } - } - ] - } - }, { name: 'bank', type: { @@ -190,12 +129,41 @@ module.exports = { defined: 'BankConfig' } }, + { + name: 'emissionsFlags', + docs: [ + 'Emissions Config Flags', + '', + '- EMISSIONS_FLAG_BORROW_ACTIVE: 1', + '- EMISSIONS_FLAG_LENDING_ACTIVE: 2', + '' + ], + type: 'u64' + }, + { + name: 'emissionsRate', + docs: [ + 'Emissions APR.', + 'Number of emitted tokens (emissions_mint) per 1M tokens (bank mint) (native amount) per 1 YEAR.' + ], + type: 'u64' + }, + { + name: 'emissionsRemaining', + type: { + defined: 'WrappedI80F48' + } + }, + { + name: 'emissionsMint', + type: 'publicKey' + }, { name: 'padding0', type: { array: [ 'u128', - 32 + 28 ] } }, @@ -275,12 +243,22 @@ module.exports = { defined: 'WrappedI80F48' } }, + { + name: 'emissionsOutstanding', + type: { + defined: 'WrappedI80F48' + } + }, + { + name: 'lastUpdate', + type: 'u64' + }, { name: 'padding', type: { array: [ 'u64', - 4 + 1 ] } } @@ -360,6 +338,70 @@ module.exports = { ] } }, + { + name: 'InterestRateConfigOpt', + type: { + kind: 'struct', + fields: [ + { + name: 'optimalUtilizationRate', + type: { + option: { + defined: 'WrappedI80F48' + } + } + }, + { + name: 'plateauInterestRate', + type: { + option: { + defined: 'WrappedI80F48' + } + } + }, + { + name: 'maxInterestRate', + type: { + option: { + defined: 'WrappedI80F48' + } + } + }, + { + name: 'insuranceFeeFixedApr', + type: { + option: { + defined: 'WrappedI80F48' + } + } + }, + { + name: 'insuranceIrFee', + type: { + option: { + defined: 'WrappedI80F48' + } + } + }, + { + name: 'protocolFixedFeeApr', + type: { + option: { + defined: 'WrappedI80F48' + } + } + }, + { + name: 'protocolIrFee', + type: { + option: { + defined: 'WrappedI80F48' + } + } + } + ] + } + }, { name: 'BankConfig', docs: [ @@ -393,7 +435,7 @@ module.exports = { } }, { - name: 'maxCapacity', + name: 'depositLimit', type: 'u64' }, { @@ -410,9 +452,7 @@ module.exports = { }, { name: 'oracleSetup', - type: { - defined: 'OracleSetup' - } + type: 'u8' }, { name: 'oracleKeys', @@ -424,7 +464,7 @@ module.exports = { } }, { - name: 'ignore', + name: 'ignore1', type: { array: [ 'u8', @@ -432,12 +472,22 @@ module.exports = { ] } }, + { + name: 'borrowLimit', + type: 'u64' + }, + { + name: 'riskTier', + type: { + defined: 'RiskTier' + } + }, { name: 'padding', type: { array: [ - 'u128', - 4 + 'u8', + 55 ] } } @@ -494,7 +544,13 @@ module.exports = { } }, { - name: 'maxCapacity', + name: 'depositLimit', + type: { + option: 'u64' + } + }, + { + name: 'borrowLimit', type: { option: 'u64' } @@ -516,12 +572,19 @@ module.exports = { } }, { - name: 'ignore', + name: 'interestRateConfig', type: { - array: [ - 'u8', - 6 - ] + option: { + defined: 'InterestRateConfigOpt' + } + } + }, + { + name: 'riskTier', + type: { + option: { + defined: 'RiskTier' + } } } ] @@ -580,6 +643,9 @@ module.exports = { }, { name: 'BorrowOnly' + }, + { + name: 'BypassBorrowLimit' } ] } @@ -644,47 +710,54 @@ module.exports = { } }, { - name: 'OracleSetup', + name: 'RiskTier', type: { kind: 'enum', variants: [ { - name: 'None' + name: 'Collateral' }, { - name: 'Pyth' + name: 'Isolated' } ] } }, { - name: 'OracleKey', + name: 'BankVaultType', type: { kind: 'enum', variants: [ { - name: 'Pyth', + name: 'Liquidity' + }, + { + name: 'Insurance' + }, + { + name: 'Fee' } ] } }, { - name: 'BankVaultType', + name: 'OracleSetup', type: { kind: 'enum', variants: [ { - name: 'Liquidity' + name: 'None' }, { - name: 'Insurance' + name: 'PythEma' }, { - name: 'Fee' + name: 'SwitchboardV2' } ] } } ], - errors: [], + events: [], + errors: [] } \ No newline at end of file diff --git a/projects/marginx/index.js b/projects/marginx/index.js new file mode 100644 index 0000000000..ea552d4893 --- /dev/null +++ b/projects/marginx/index.js @@ -0,0 +1,30 @@ +const { sumTokens } = require('../helper/chain/cosmos') +const { getConfig } = require('../helper/cache'); +const bech32 = require('bech32'); +const { ethers } = require("ethers"); + +const toChecksumAddress = (address) => { + return ethers.utils.getAddress(address) +}; + +function bech32ToEthereum(bech32Address) { + const { prefix, words } = bech32.decode(bech32Address); + const data = bech32.fromWords(words); + const hex = Buffer.from(data).toString('hex'); + const ethereumAddress = toChecksumAddress(`0x${hex}`); + return ethereumAddress; +} + +async function tvl(_, _b, _cb, { api, }) { + const { data: chainInfo} = await getConfig('marginxConfig', 'https://api.marginx.io/settings/cross/chains') + const owners = chainInfo.map(i => i.ibcAddress) + return sumTokens({ chain: 'fxcore', owners }) + // const owners = chainInfo.map(i => bech32ToEthereum(i.ibcAddress)) + // return sumTokens2({ api, owners, tokens: [ADDRESSES.null, ADDRESSES.functionx.USDT], }) +} + +module.exports = { + functionx: { + tvl + }, +}; diff --git a/projects/marinade.js b/projects/marinade.js index 34003f7fb9..ad204fd662 100644 --- a/projects/marinade.js +++ b/projects/marinade.js @@ -1,4 +1,4 @@ -const { getProvider, sumTokens2, } = require('./helper/solana') +const { getProvider, getSolBalance, } = require("./helper/solana") const { Program, } = require("@project-serum/anchor"); async function tvl() { @@ -6,17 +6,21 @@ async function tvl() { const programId = 'MarBmsSgKXdrN1egZf5sqe1TMai9K1rChYNDJgjq7aD' const idl = await Program.fetchIdl(programId, provider) const program = new Program(idl, programId, provider) - const [{ - account: { - validatorSystem: { totalActiveBalance }, availableReserveBalance - } - }] = await program.account.state.all() - const balances = { - solana: (+totalActiveBalance + +availableReserveBalance)/1e9 + const [ + { + account: { + validatorSystem: { totalActiveBalance }, + availableReserveBalance, + }, + }, + ] = await program.account.state.all() + return { + solana: + (+totalActiveBalance + + +availableReserveBalance + + (await getSolBalance("UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q"))) / // Liq Pool Sol Leg Pda + 1e9, } - return sumTokens2({ balances, solOwners: [ - 'UefNb6z6yvArqe4cJHTXCqStRsKmWhGxnZzuHbikP5Q', // Liq Pool Sol Leg Pda - ]}) } module.exports = { diff --git a/projects/market.xyz/index.js b/projects/market.xyz/index.js index 8cd571c4ca..c950963216 100644 --- a/projects/market.xyz/index.js +++ b/projects/market.xyz/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi"); const { @@ -10,7 +11,7 @@ const fusePoolLensAddress = { fantom: "0x5aB6215AB8344C28B899efdE93BEe47B124200Fb", }; -const WETH = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; +const WETH = ADDRESSES.ethereum.WETH; async function getFusePools( timestamp, @@ -80,7 +81,7 @@ module.exports = { borrowed: polygonBorrowed, }, fantom: { - tvl: fantomTvl, - borrowed: fantomBorrowed, + tvl: () => ({}), + borrowed: () => ({}), }, }; diff --git a/projects/mars/index.js b/projects/mars/index.js index d669b9dad3..66fcfca766 100644 --- a/projects/mars/index.js +++ b/projects/mars/index.js @@ -1,33 +1,126 @@ -const sdk = require('@defillama/sdk') - -const { queryContract } = require('../helper/chain/cosmos') -const { transformBalances } = require('../helper/portedTokens') -const { sumTokensExport } = require('../helper/sumTokens') -const chain = 'osmosis' -const contract = 'osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg' - -async function borrowed() { - const res = await queryContract({ contract, chain: 'osmosis', data: { markets: { limit: 10 } } }) - const borrowed = {}; - res.forEach(i => { - sdk.util.sumSingleBalance(borrowed, i.denom, i.debt_total_scaled * i.borrow_index / 1e6) +const sdk = require('@defillama/sdk'); +const axios = require('axios'); + +const { endPoints, queryContract, sumTokens } = require('../helper/chain/cosmos'); +const { getChainTransform } = require('../helper/portedTokens'); + +const redBankAddress = 'osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg'; +const creditManagerAddress = 'osmo1f2m24wktq0sw3c0lexlg7fv4kngwyttvzws3a3r3al9ld2s2pvds87jqvf'; + +async function osmosisTVL() { + let balances = {}; + await sumTokens({balances, owners: [redBankAddress], chain: 'osmosis'}); + await osmosisSumVaultsTVL(balances); + return balances; +} + +async function osmosisSumVaultsTVL(balances) { + let coins = []; + let vaultPagesRemaining = true; + let startAfter = null; + const pageLimit = 10; + const osmosisDenomTransform = await getChainTransform('osmosis'); + + while (vaultPagesRemaining) { + const fieldsVaultsInfo = await queryContract({ + contract: creditManagerAddress, + chain: 'osmosis', + data: { 'vaults_info': { limit: pageLimit, 'start_after': startAfter } } + }); + + if(fieldsVaultsInfo.length === pageLimit) { + startAfter = fieldsVaultsInfo[fieldsVaultsInfo.length - 1].vault; + vaultPagesRemaining = true + } else { + vaultPagesRemaining = false; + } + + await osmosisAddCoinsForVaultsInfoPage(coins, fieldsVaultsInfo); + } + + coins.forEach(coin => { + sdk.util.sumSingleBalance(balances, osmosisDenomTransform(coin.denom), coin.amount); }) +} + +async function osmosisAddCoinsForVaultsInfoPage(coins, fieldsVaultsInfoPage) { + let vaultsMetadata = fieldsVaultsInfoPage.map(rvi => ({ fieldsVaultInfo: rvi })); + + // query the vault info for the vault contract itself to get the vault's + // base token + await Promise.all(vaultsMetadata.map(async vm => { + let vaultInfo = await queryContract({ + contract: vm.fieldsVaultInfo.vault.address, + chain: 'osmosis', + data: { 'info': {} } + }); + vm.vaultInfo = vaultInfo; + })); + + // get total vault shares owned by fields for each vault + await Promise.all(vaultsMetadata.map(async vm => { + let vaultShares = await queryContract({ + contract: creditManagerAddress, + chain: 'osmosis', + data: { 'total_vault_coin_balance': { vault: vm.fieldsVaultInfo.vault } } + }); + vm.vaultShares = vaultShares; + })); + + // convert vault shares to vault base asset + await Promise.all(vaultsMetadata.map( async vm => { + let query = { + contract: vm.fieldsVaultInfo.vault.address, + chain: 'osmosis', + data: { 'convert_to_assets': { amount: vm.vaultShares } } + }; + let amount = await queryContract(query); + vm.baseTokenAmount = amount; + })); + + // Add coins to then be added to balances + // * For gamm lp tokens compute the share of underlying assets and add those + // * For other assets, add as is + await Promise.all(vaultsMetadata.map( async vm => { + const baseToken = vm.vaultInfo['base_token']; + if (baseToken.startsWith('gamm/pool/')) { + let poolId = baseToken.split('/')[2]; + const url = `osmosis/gamm/v1beta1/pools/${poolId}`; + const query = await cosmosLCDQuery(url, 'osmosis'); + const pool = query.pool; + pool['pool_assets'].forEach(asset => { + const denom = asset.token.denom; + const amount = asset.token.amount * vm.baseTokenAmount / pool['total_shares'].amount; + coins.push({denom, amount}); + }); + } else { + coins.push({denom: baseToken, amount: vm.baseTokenAmount}); + } + })); +} + +function getEndpoint(chain) { + if (!endPoints[chain]) throw new Error('Chain not found: ' + chain); + return endPoints[chain]; +} - return transformBalances(chain, borrowed) +async function cosmosLCDQuery(url, chain) { + let endpoint = `${getEndpoint(chain)}/${url}`; + let request = await axios.get(endpoint); + return request.data; } module.exports = { timetravel: false, - methodology: "sum up token balances in Mars smart contract in osmosis", + methodology: 'Sum up token balances in Red Bank smart contract and vault underlying assets in Fields smart contract', osmosis: { - tvl: sumTokensExport({ owner: contract }), - borrowed, + tvl: osmosisTVL, }, terra: { tvl: () => 0, }, hallmarks:[ - [1651881600, "UST depeg"], - [1675774800, "Relaunch on Osmosis"], + [1651881600, 'UST depeg'], + [1675774800, 'Relaunch on Osmosis'], ] }; diff --git a/projects/maskex/index.js b/projects/maskex/index.js index 22c79f348e..c8de7c1a07 100644 --- a/projects/maskex/index.js +++ b/projects/maskex/index.js @@ -47,25 +47,30 @@ const config = { }, tron: { owners: [ - 'TArBsHHp4zz1TWgHhZWvNcxD4A7DMbcoMm', + // 'TArBsHHp4zz1TWgHhZWvNcxD4A7DMbcoMm', 'TAv486fty6xRuWHQfhBiMh4jBofSuXJcpV', - 'TBqiQviC27UdWU58qbviJKJwp9b3DygLpY', + // 'TBqiQviC27UdWU58qbviJKJwp9b3DygLpY', 'TDQ7nxDTJBMZkkWcFZKs9KdWzb2vT2drDu', 'TKCbzA6HPnwEDL9M2tAWnqsbD6TXLUD7yy', - 'TLHuz1191oCESWJH6sAq9MS5w66HtHVbyc', + // 'TLHuz1191oCESWJH6sAq9MS5w66HtHVbyc', 'TLqPRfPHieHsMMFaQSMXoXqWD18C97cFqB', - 'TNoQvaDoPHcdoux2Ymt3yUnsSGJgLSXygo', + // 'TNoQvaDoPHcdoux2Ymt3yUnsSGJgLSXygo', 'TSFvf8LZuwy4BKNPdULFD5vaCFMrkiGRme', - 'TTNeMfGyAL1Bb8vw32U8hxJ5Vmju5tsQ8y', - 'TUTh7mS9o2EPgxLbx2bNSwwyoPCsLUmkNq', - 'TUXjobUdiUPvSZmbBVWTcSEqoXzFNr4ZDa', - 'TUrk8EeZgKCQkfd1KhAfRMBmH1Y4NYnaaL', + // 'TTNeMfGyAL1Bb8vw32U8hxJ5Vmju5tsQ8y', + // 'TUTh7mS9o2EPgxLbx2bNSwwyoPCsLUmkNq', + // 'TUXjobUdiUPvSZmbBVWTcSEqoXzFNr4ZDa', + // 'TUrk8EeZgKCQkfd1KhAfRMBmH1Y4NYnaaL', 'TW6DLBY5dyCUVzc3sgKV72HXNT8EkmEUT8', - 'TX39NXuXviJ1be8y1XkbnQ4DfFmp9gRhez', + // 'TX39NXuXviJ1be8y1XkbnQ4DfFmp9gRhez', 'TXiZ9ddXTBUke9PDs5HLXVvvHY68kmC3me', - 'TYp46EYRTHb2grSfjkDFFtakcgedXBHEhh', - 'TYshj25EXjnPB7P5xRGLmFTNPV6HMoZyrq', - 'TUiATx1SGs3TwwKY1atafMvYjrQD8KLiSk', + // 'TYp46EYRTHb2grSfjkDFFtakcgedXBHEhh', + // 'TYshj25EXjnPB7P5xRGLmFTNPV6HMoZyrq', + // 'TUiATx1SGs3TwwKY1atafMvYjrQD8KLiSk', + ] + }, + bitcoin: { + owners: [ + '39DUz1NCkLu25GczWiAjjgZBu4mUjKbdNA', // this wallet was collected from https://blog.maskex.com/news/announcements/embracing-transparency-maskex-reveals-wallet-addresses ] } } diff --git a/projects/maverick/index.js b/projects/maverick/index.js index b742a65837..c79bd0e4ed 100644 --- a/projects/maverick/index.js +++ b/projects/maverick/index.js @@ -6,20 +6,25 @@ function maverickTVL(config) { const exports = {}; Object.keys(config).forEach((chain) => { - const { factory, fromBlock } = config[chain]; + const { factories } = config[chain]; exports[chain] = { tvl: async (_, _b, _cb, { api }) => { - const logs = await getLogs({ - api, - target: factory, - topics: [ - "0x9b3fb3a17b4e94eb4d1217257372dcc712218fcd4bc1c28482bd8a6804a7c775", - ], - fromBlock, - eventAbi: - "event PoolCreated(address poolAddress, uint256 fee, uint256 tickSpacing, int32 activeTick, int256 lookback, uint64 protocolFeeRatio, address tokenA, address tokenB)", - onlyArgs: true, - }); + let logs = []; + for (let k = 0; k < factories.length; k++) { + logs.push( + ...(await getLogs({ + api, + target: factories[k].address, + topics: [ + "0x9b3fb3a17b4e94eb4d1217257372dcc712218fcd4bc1c28482bd8a6804a7c775", + ], + fromBlock: factories[k].startBlock, + eventAbi: + "event PoolCreated(address poolAddress, uint256 fee, uint256 tickSpacing, int32 activeTick, int256 lookback, uint64 protocolFeeRatio, address tokenA, address tokenB)", + onlyArgs: true, + })) + ); + } return sumTokens2({ api, @@ -34,11 +39,35 @@ function maverickTVL(config) { module.exports = maverickTVL({ ethereum: { - factory: "0xa5eBD82503c72299073657957F41b9cEA6c0A43A", - fromBlock: 16727800, + factories: [ + { + address: "0xEb6625D65a0553c9dBc64449e56abFe519bd9c9B", + startBlock: 17210221, + }, + { + address: "0xa5eBD82503c72299073657957F41b9cEA6c0A43A", + startBlock: 16727800, + }, + ], }, era: { - factory: "0x96707414DB71e553F6a49c7aDc376e40F3BEfC33", - fromBlock: 1337265, + factories: [ + { + address: "0x96707414DB71e553F6a49c7aDc376e40F3BEfC33", + startBlock: 1337265, + }, + { + address: "0x2C1a605f843A2E18b7d7772f0Ce23c236acCF7f5", + startBlock: 3002731, + }, + ], + }, + bsc: { + factories: [ + { + address: "0x76311728FF86054Ad4Ac52D2E9Ca005BC702f589", + startBlock: 29241050, + }, + ], }, }); diff --git a/projects/maximizer/index.js b/projects/maximizer/index.js index ee19b854c4..1672dfe000 100644 --- a/projects/maximizer/index.js +++ b/projects/maximizer/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const BigNumber = require("bignumber.js"); const { sumTokensAndLPsSharedOwners, unwrapUniswapLPs } = require("../helper/unwrapLPs"); const sdk = require("@defillama/sdk"); @@ -16,14 +17,14 @@ const BenqiAllocator = '0x1e3834DA9a9B4d4016427554Ef31ff4e1F41d4Ed'; const MAXI = "0x7C08413cbf02202a1c13643dB173f2694e0F73f0"; const SMAXI = "0xEcE4D1b3C2020A312Ec41A7271608326894076b4"; -const DAIe = "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70"; -const USDC = "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"; -const USDCe = "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664"; -const WAVAX = "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"; +const DAIe = ADDRESSES.avax.DAI; +const USDC = ADDRESSES.avax.USDC; +const USDCe = ADDRESSES.avax.USDC_e; +const WAVAX = ADDRESSES.avax.WAVAX; const PNG = "0x60781C2586D68229fde47564546784ab3fACA982"; const QI = "0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5"; -const JOE = "0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd"; -const XJOE = "0x57319d41F71E81F3c65F2a47CA4e001EbAFd4F33"; +const JOE = ADDRESSES.avax.JOE; +const XJOE = ADDRESSES.avax.xJOE; const ISA = "0x3EeFb18003D033661f84e48360eBeCD181A84709"; const PTP = "0x22d4002028f537599bE9f666d1c4Fa138522f9c8"; const VEPTP = "0x5857019c749147EEE22b1Fe63500F237F3c1B692"; diff --git a/projects/mayfair/index.js b/projects/mayfair/index.js new file mode 100644 index 0000000000..191602a0f1 --- /dev/null +++ b/projects/mayfair/index.js @@ -0,0 +1,38 @@ +const { request } = require("../helper/utils/graphql") +const { cachedGraphQuery } = require('../helper/cache') + +const { toUSDTBalances } = require("../helper/balances") + +const url = "https://squid.subsquid.io/mayfair-indexer/graphql" + +async function getStakingData() { + return await request(url, `query StakingAnalytics { + stakingPools(where: {id_eq: "0x3ad426dc2f005b721359a94f8b8d71b8890b3068-0"}) { + tvl + } + } + `) + +} +async function getStaking() { + let staking = 0 + const data = await getStakingData() + staking = data.stakingPools?.[0].tvl; + return toUSDTBalances(staking) +} + +async function tvl(_, _1, _2, { api }) { + const { balancerVaults: [{ pools }] } = await cachedGraphQuery('mayfair', url, `{ balancerVaults { pools{ id vaultId } } }`) + const data = await api.multiCall({ abi: 'function getPoolTokens(bytes32) view returns (address[] tokens, uint256[] balances, uint256 lastChangeBlock)', calls: pools.map(i => ({ target: i.vaultId, params: i.id })) }) + data.forEach(({ tokens, balances }) => api.addTokens(tokens.slice(1), balances.slice(1))) + return api.getBalances() +} + +module.exports = { + timetravel: false, + doublecounted: true, // tokens are in balancer pools + arbitrum: { + tvl, + staking: getStaking + } +} diff --git a/projects/mcs/index.js b/projects/mcs/index.js new file mode 100644 index 0000000000..1b41c49d73 --- /dev/null +++ b/projects/mcs/index.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { staking } = require('../helper/staking') + +const MCS_TOKEN_ADDRESS = '0xDa5aC8F284537d6eaB198801127a9d49b0CbDff5'; +const USDC_TOKEN_ADDRESS = ADDRESSES.telos.ETH; +const STAKING_CONTRACT_ADDRESS = '0x258FC83E130Bc708541c33900bAEDE83242646db'; + +module.exports = { + kava: { + tvl: staking(STAKING_CONTRACT_ADDRESS, USDC_TOKEN_ADDRESS), + staking: staking(STAKING_CONTRACT_ADDRESS, MCS_TOKEN_ADDRESS), + } +} \ No newline at end of file diff --git a/projects/mdex/abi.json b/projects/mdex/abi.json deleted file mode 100644 index 20c2adfc83..0000000000 --- a/projects/mdex/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "allPairs": "function allPairs(uint256) view returns (address)", - "allPairsLength": "uint256:allPairsLength" -} \ No newline at end of file diff --git a/projects/mdex/api.js b/projects/mdex/api.js deleted file mode 100644 index 5c93def62b..0000000000 --- a/projects/mdex/api.js +++ /dev/null @@ -1,21 +0,0 @@ -const { getUniTVL } = require('../helper/unknownTokens') - -const factories = { - heco: "0xb0b670fc1F7724119963018DB0BfA86aDb22d941", - bsc: "0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8", -}; - -const hecoTvl = getUniTVL({ factory: factories.heco, chain: 'heco', useDefaultCoreAssets: true }) - -module.exports = { - misrepresentedTokens: true, - timetravel: false, - /* - heco: { - tvl: hecoTvl, - }, - */ - bsc: { - tvl: getUniTVL({ factory: factories.bsc, chain: 'bsc', useDefaultCoreAssets: true }), - }, -}; diff --git a/projects/mdex/index.js b/projects/mdex/index.js index b2adc114f4..2ac19f0abb 100644 --- a/projects/mdex/index.js +++ b/projects/mdex/index.js @@ -1,28 +1,18 @@ -const { get } = require('../helper/http') +const { getUniTVL } = require('../helper/unknownTokens') -async function fetch(chainId) { - return (await get(`https://info.mdex.one/pair/tvl?chain_id=${chainId}`)).result - .map(p => p.tvl) - .reduce((a, b) => a + parseFloat(b), 0); -} - -async function heco() { - return (await fetch(128)); -} -async function bsc() { - return (await fetch(56)); -} -async function total() { - return (await fetch(128)) + (await fetch(56)); -} +const factories = { + heco: "0xb0b670fc1F7724119963018DB0BfA86aDb22d941", + bsc: "0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8", + bittorrent: "0x36117cc868139FA3AeD4067142C5EF3C121c6a72" +}; module.exports = { - timetravel: false, - heco: { - fetch: heco - }, - bsc: { - fetch: bsc - }, - fetch: total + misrepresentedTokens: true, }; + +Object.keys(factories).forEach(chain => { + const factory = factories[chain] + module.exports[chain] = { + tvl: getUniTVL({ factory, useDefaultCoreAssets: true }) + } +}) \ No newline at end of file diff --git a/projects/mdex/subgraphs.js b/projects/mdex/subgraphs.js deleted file mode 100644 index 675ba61ff7..0000000000 --- a/projects/mdex/subgraphs.js +++ /dev/null @@ -1,91 +0,0 @@ -const { request, gql } = require("graphql-request"); -const sdk = require("@defillama/sdk"); -const BigNumber = require("bignumber.js"); -const { calculateUniTvl } = require('../helper/calculateUniTvl') -const {toUSDTBalances} = require('../helper/balances'); -const { getBlock } = require("../helper/http"); - -// --> bsc addresses found here: https://github.com/mdexSwap/bscswap -// --> heco addresses found here: https://github.com/mdexSwap/contracts - -const factories = { - heco: "0xb0b670fc1F7724119963018DB0BfA86aDb22d941", - bsc: "0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8", -}; - -const REDUCE_BLOCK = 60; - -const graphUrls = { - heco: "https://heco-lite-graph.mdex.cc/subgraphs/name/chain/heco", - bsc: "https://bsc-lite-graph.mdex.one/subgraphs/name/chain/bsc", -}; - -const graphQueries = { - heco: gql` - query tvl($block: Int) { - mdexFactory( - id: "0xb0b670fc1F7724119963018DB0BfA86aDb22d941" - block: { number: $block } - ) { - totalLiquidityUSD - } - } - `, - bsc: gql` - query tvl($block: Int) { - mdexFactory( - id: "0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8" - block: { number: $block } - ) { - totalLiquidityUSD - } - } - `, -}; - -// --- We need to token as ref for the balances object --- -const usdtToken = "0xdac17f958d2ee523a2206206994597c13d831ec7"; - -function getMDEXLiquidity(block, chain) { - return request(graphUrls[chain], graphQueries[chain], { - block, - }); -} - -const bscTvl = async (timestamp, ethBlock, chainBlocks) => { - const chain = "bsc" - const block = await getBlock(timestamp, chain, chainBlocks) - const results = await request(graphUrls[chain], graphQueries[chain], { - block, - }); - return toUSDTBalances(results.mdexFactory.totalLiquidityUSD) -}; - -const hecoTvl = async (timestamp, ethBlock, chainBlocks) => { - let block = chainBlocks["heco"]; - - if (block === undefined) { - block = (await sdk.api.util.lookupBlock(timestamp, { chain: "heco" })) - .block; - } - - // --- Reduce a bit as the indexing takes time to catch up, otherwise error jumps somehow from endpoint --- - const results = await getMDEXLiquidity(block - REDUCE_BLOCK, "heco"); - - return { - // --- Arrange to account the decimals as it was usdt (decimals = 6) --- - [usdtToken]: BigNumber(results.mdexFactory.totalLiquidityUSD) - .multipliedBy(10 ** 6) - .toFixed(0), - }; -}; - -module.exports = { - misrepresentedTokens: true, - bsc: { - tvl: bscTvl, // individually outputs >1B --- breakdown per token (OK) - }, - heco: { - tvl: hecoTvl, // individually outputs >1B --- simply using graphql endpoint (OK) - }, -}; diff --git a/projects/meanfinance/addresses.js b/projects/meanfinance/addresses.js index c11345c9aa..a0992c91f8 100644 --- a/projects/meanfinance/addresses.js +++ b/projects/meanfinance/addresses.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const V1_POOLS = [ - { pool: '0x8124cD94629Bd7e902D9B7dabDcef71F9847b232', tokenA: '0x6B175474E89094C44Da98b954EedeAC495271d0F', tokenB: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' }, - { pool: '0x9a2789dd698D010f3d6Bb5Bf865369A734D43f83', tokenA: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', tokenB: '0x6B175474E89094C44Da98b954EedeAC495271d0F' }, - { pool: '0xa649C9306896f90d6f8a3366f29be10557461144', tokenA: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', tokenB: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' }, - { pool: '0xC62D0265ADCe0719373661FFF26d93980f5e6Fc0', tokenA: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', tokenB: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' }, - { pool: '0xAc324adB90eDA530884eB0f5BE58614c6249484a', tokenA: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', tokenB: '0xD291E7a03283640FDc51b121aC401383A46cC623' }, - { pool: '0x82Eb5b1F3A2286903F5918f8a42Cc84A2ea500fb', tokenA: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', tokenB: '0xdAC17F958D2ee523a2206206994597C13D831ec7' }, - { pool: '0x59aCef0FC104EDe425DF5CD3a1677A09e7e025cD', tokenA: '0x2602278EE1882889B946eb11DC0E810075650983', tokenB: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' }, + { pool: '0x8124cD94629Bd7e902D9B7dabDcef71F9847b232', tokenA: ADDRESSES.ethereum.DAI, tokenB: ADDRESSES.ethereum.WETH }, + { pool: '0x9a2789dd698D010f3d6Bb5Bf865369A734D43f83', tokenA: ADDRESSES.ethereum.WBTC, tokenB: ADDRESSES.ethereum.DAI }, + { pool: '0xa649C9306896f90d6f8a3366f29be10557461144', tokenA: ADDRESSES.ethereum.YFI, tokenB: ADDRESSES.ethereum.WETH }, + { pool: '0xC62D0265ADCe0719373661FFF26d93980f5e6Fc0', tokenA: ADDRESSES.ethereum.USDC, tokenB: ADDRESSES.ethereum.WETH }, + { pool: '0xAc324adB90eDA530884eB0f5BE58614c6249484a', tokenA: ADDRESSES.ethereum.WETH, tokenB: '0xD291E7a03283640FDc51b121aC401383A46cC623' }, + { pool: '0x82Eb5b1F3A2286903F5918f8a42Cc84A2ea500fb', tokenA: ADDRESSES.ethereum.WETH, tokenB: ADDRESSES.ethereum.USDT }, + { pool: '0x59aCef0FC104EDe425DF5CD3a1677A09e7e025cD', tokenA: '0x2602278EE1882889B946eb11DC0E810075650983', tokenB: ADDRESSES.ethereum.WETH }, ] const TOKENS_IN_LEGACY_VERSIONS = { @@ -15,31 +16,31 @@ const TOKENS_IN_LEGACY_VERSIONS = { '0x296f55f8fb28e498b858d0bcda06d955b2cb3f97', // STG '0x298b9b95708152ff6968aafd889c6586e9169f1d', // sBTC '0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6', // LINK - '0x4200000000000000000000000000000000000006', // WETH - '0x4200000000000000000000000000000000000042', // OP - '0x5029c236320b8f15ef0a657054b84d90bfbeded3', // BitANT + ADDRESSES.tombchain.FTM, // WETH + ADDRESSES.optimism.OP, // OP + ADDRESSES.optimism.BitANT, // BitANT '0x50c5725949a6f0c72e6c4a641f24049a917db0cb', // LYRA '0x65559aa14915a70190438ef90104769e5e890a00', // ENS '0x68f180fcce6836688e9084f035309e29bf0a2095', // WBTC '0x6fd9d7ad17242c41f7131d257212c54a0e816691', // UNI - '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // USDC + ADDRESSES.optimism.USDC, // USDC '0x7fb688ccf682d58f86d7e38e03f9d22e7705448b', // RAI '0x8700daec35af8ff88c16bdf0418774cb3d7599b4', // SNX - '0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9', // sUSD - '0x94b008aa00579c1307b0ef2c499ad98a8ce58e58', // USDT + ADDRESSES.optimism.sUSD, // sUSD + ADDRESSES.optimism.USDT, // USDT '0x9bcef72be871e61ed4fbbc7630889bee758eb81d', // rETH '0x9e1028f5f1d5ede59748ffcee5532509976840e0', // PERP - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI + ADDRESSES.optimism.DAI, // DAI '0xe0bb0d3de8c10976511e5030ca403dbf4c25165b', // 0xBTC - '0xe405de8f52ba7559f9df3c368500b6e6ae6cee49', // sETH + ADDRESSES.optimism.sETH, // sETH '0xf98dcd95217e15e05d8638da4c91125e59590b07', // KROM ], polygon: [ '0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a', // SUSHI - '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', // WMATIC + ADDRESSES.polygon.WMATIC_2, // WMATIC '0x172370d5cd63279efa6d502dab29171933a610af', // CRV - '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', // WBTC - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC + ADDRESSES.polygon.WBTC, // WBTC + ADDRESSES.polygon.USDC, // USDC '0x2c89bbc92bd86f8075d1decc58c7f4e0107f286b', // AVAX '0x3066818837c5e6ed6601bd5a91b0762877a6b731', // UMA '0x3a58a54c066fdc0f2d55fc9c89f0415c92ebf3c4', // stMATIC @@ -49,16 +50,16 @@ const TOKENS_IN_LEGACY_VERSIONS = { '0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39', // LINK '0x5fe2b58c013d7601147dcdd68c143a77499f5531', // GRT '0x6f7c932e7684666c9fd1d44527765433e01ff61d', // MKR - '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', // WETH + ADDRESSES.polygon.WETH_1, // WETH '0x831753dd7087cac61ab5644b308642cc1c33dc13', // QUICK '0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c', // COMP - '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI + ADDRESSES.polygon.DAI, // DAI '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3', // BAL '0xa1c57f48f0deb89f569dfbe6e2b7f46d33606fd4', // MANA '0xa3fa99a148fa48d14ed51d610c367c61876997f1', // miMATIC '0xb33eaad8d922b1083446dc23f610c2567fb5180f', // UNI '0xbbba073c31bf03b8acf7c28ef0738decf3695683', // SAND - '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', // USDT + ADDRESSES.polygon.USDT, // USDT '0xd6df932a45c0f255f85145f286ea0b292b21c90b', // AAVE '0xda537104d6a5edd53c6fbba9a898708e465260b6', // YFI ] diff --git a/projects/meanfinance/index.js b/projects/meanfinance/index.js index e29ec5c055..bab0a68a3d 100644 --- a/projects/meanfinance/index.js +++ b/projects/meanfinance/index.js @@ -59,14 +59,10 @@ module.exports = { optimism: getV2TvlObject('optimism'), polygon: getV2TvlObject('polygon'), arbitrum: getV2TvlObject('arbitrum'), + bsc: getV2TvlObject('bsc'), hallmarks: [ - [1638850958, "V2 Beta launch on Optimism"], - [1643602958, "V2 full launch"], - [1646367758, "Deployment on Polygon"], - [1650082958, "Protocol is paused because a non-critical vulnerability"], - [1653366158, "V2 Relaunch"], - [1654057358, "OP launch brings more users into Optimism and benefits Mean"], - [1666364400, "Yield-While-DCA launch"], + [1650082958, "Protocol is paused due to non-critical vulnerability"], + [1654057358, "OP launch"], [1668006000, "Deployment on Arbitrum"], [1672099200, "Deployment on Ethereum"], ] diff --git a/projects/megamoon/index.js b/projects/megamoon/index.js new file mode 100644 index 0000000000..98ba7c62d9 --- /dev/null +++ b/projects/megamoon/index.js @@ -0,0 +1,23 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); + +const owners = [ + "0xA73dA7954834260d7909c697Eb6022e46A5924DE", + "0xC5d1D50d9517db581DE2Ceb6e5d33B7750b0a04A", + "0x4c00e75A710E92ea915a865379b07caDf3e6C45e", +]; + +const config = { + polygon: { + tokens: [ADDRESSES.polygon.USDT, nullAddress], + }, +}; + +module.exports = {}; + +Object.keys(config).forEach((chain) => { + const { tokens } = config[chain]; + module.exports[chain] = { + tvl: sumTokensExport({ owners, tokens }), + }; +}); diff --git a/projects/megatonfi/index.js b/projects/megatonfi/index.js index 9d3dabac93..c4941228a2 100644 --- a/projects/megatonfi/index.js +++ b/projects/megatonfi/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { get } = require('../helper/http') const { transformDexBalances } = require('../helper/portedTokens') -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null module.exports = { misrepresentedTokens: true, diff --git a/projects/meld-gold/index.js b/projects/meld-gold/index.js new file mode 100644 index 0000000000..0d1058f7c9 --- /dev/null +++ b/projects/meld-gold/index.js @@ -0,0 +1,45 @@ +const { tokens, getAssetInfo } = require('../helper/chain/algorand') +const sdk = require('@defillama/sdk') + +async function tvl() { + const abi = 'function latestRoundData() view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)' + const api = new sdk.ChainApi({}) + let totalMeldMarketCap = 0 + + // Gold is priced in tory oz, silver is priced in oz, but Meld Tokens are both priced in grams + const ozToGrams = 31.10347687 + + // Meld tokens + const assetInfo = [ + { + assetId: tokens.gold$, + grams: ozToGrams, + priceFeed: '0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6', + }, + { + assetId: tokens.silver$, + grams: ozToGrams, + priceFeed: '0x379589227b15F1a12195D3f2d90bBc9F31f95235', + }, + ] + + // Get total market cap of all Meld tokens + for (const asset of assetInfo) { + const { assetId, grams, priceFeed } = asset + const { answer: price } = await api.call({ abi, target: priceFeed }) + const assetInfo = await getAssetInfo(assetId) + const circulatingSupply = assetInfo.circulatingSupply + const marketCap = (circulatingSupply / grams / 10 ** 6) * (price / 10 ** 8) + totalMeldMarketCap += marketCap + } + + return { tether: totalMeldMarketCap } +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + algorand: { + tvl, + }, +} diff --git a/projects/memedex/index.js b/projects/memedex/index.js new file mode 100644 index 0000000000..f7acb54517 --- /dev/null +++ b/projects/memedex/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens'); + +module.exports = { + misrepresentedTokens: true, + conflux: { + tvl: getUniTVL({ chain: 'conflux', useDefaultCoreAssets: true, factory: '0x62283c20Ac4c7B1E61BB3C27bE2fA0880ee982Ea'}), + } +} \ No newline at end of file diff --git a/projects/mensa/abi.json b/projects/mensa/abi.json deleted file mode 100644 index 1721b37d74..0000000000 --- a/projects/mensa/abi.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "getReservesList": "address[]:getReservesList", - "getAMMReserveData": "function getReserveData(address asset) view returns (tuple(tuple(uint256 data) configuration, uint128 liquidityIndex, uint128 variableBorrowIndex, uint128 currentLiquidityRate, uint128 currentVariableBorrowRate, uint128 currentStableBorrowRate, uint40 lastUpdateTimestamp, address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, uint8 id))", - "getCurrentTokens": "address[]:getCurrentTokens", - "getReserveData": "function getReserveData(address _reserve) view returns (uint256 totalLiquidity, uint256 availableLiquidity, uint256 totalBorrowsStable, uint256 totalBorrowsVariable, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 utilizationRate, uint256 liquidityIndex, uint256 variableBorrowIndex, address aTokenAddress, uint40 lastUpdateTimestamp)", - "getReserveConfigurationData": "function getReserveConfigurationData(address _reserve) view returns (uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus, address interestRateStrategyAddress, bool usageAsCollateralEnabled, bool borrowingEnabled, bool stableBorrowRateEnabled, bool isActive)", - "getReserves": "address[]:getReserves", - "getAddressesProvidersList": "address[]:getAddressesProvidersList", - "getAddress": "function getAddress(bytes32 id) view returns (address)", - "getAllATokens": "function getAllATokens() view returns (tuple(string symbol, address tokenAddress)[])", - "getUnderlying": "address:UNDERLYING_ASSET_ADDRESS", - "getReserveDataV2": "function getReserveData(address asset) view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", - "getBPool": "address:bPool" -} \ No newline at end of file diff --git a/projects/mensa/index.js b/projects/mensa/index.js index f30159963d..fd999d8bed 100644 --- a/projects/mensa/index.js +++ b/projects/mensa/index.js @@ -1,84 +1,9 @@ -const sdk = require("@defillama/sdk"); - -const abi = require('./abi.json'); -const {transformFantomAddress} = require('../helper/portedTokens') - -const _mensaCoreAddress = '0xa7D5d34207eb2EfB510Fb15b06feE6224Cd936Cd'; - -async function tvl(_, _ethBlock, chainBlocks) { - - const reserves_mensa = ( - await sdk.api.abi.call({ - target: _mensaCoreAddress, - abi: abi["getReserves"], - block: chainBlocks['fantom'], - chain: 'fantom' - }) - ).output.filter(t=>t!=="0x1111111111111111111111111111111111111111"); - - const decimalsOfReserve = ( - await sdk.api.abi.multiCall({ - calls: reserves_mensa.map((reserve) => ({ - target: reserve - })), - abi: "erc20:decimals", - block: chainBlocks['fantom'], - chain: 'fantom' - }) - ).output; - - const assets = []; - reserves_mensa.map((reserve, i) => { - - let symbol; - - let decimals = decimalsOfReserve[i]; - if (decimals.success) { - assets.push({ - address: reserve, - }) - } else { - throw new Error("Call failed") - } - }) - - const balance_ftm = ( - await sdk.api.eth.getBalance({ - target: _mensaCoreAddress, - block: chainBlocks['fantom'], - chain: 'fantom' - }) - ).output; - - - const balanceOfResults = await sdk.api.abi.multiCall({ - block: chainBlocks['fantom'], - chain: 'fantom', - calls: assets.map((reserve) => ({ - target: reserve.address, - params: _mensaCoreAddress, - })), - abi: "erc20:balanceOf", - }) - - const balances = {}; - const transform = await transformFantomAddress() - - assets.forEach((_item,_i)=>{ - balances[transform(_item.address)] = balanceOfResults.output[_i].output; - }) - - balances['fantom:0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83'] = balance_ftm - - return balances; - -} module.exports = { deadFrom: 1648765747, misrepresentedTokens: true, methodology: 'Using the same methodology applied to other lending platforms, TVL for Mensa consists deposits made to the protocol and borrowed tokens are not counted.', fantom:{ - tvl, + tvl: () => 0 }, }; diff --git a/projects/mento/index.js b/projects/mento/index.js index b8ae201102..202a0d84a7 100644 --- a/projects/mento/index.js +++ b/projects/mento/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, } = require('../helper/unwrapLPs') const { sumTokensExport, } = require('../helper/sumTokens') @@ -13,7 +14,7 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owners: ['0xe1955eA2D14e60414eBF5D649699356D8baE98eE', '0x8331C987D9Af7b649055fa9ea7731d2edbD58E6B', '0x26ac3A7b8a675b741560098fff54F94909bE5E73', '0x16B34Ce9A6a6F7FC2DD25Ba59bf7308E7B38E186', ], - tokens: [nullAddress, '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '0x6b175474e89094c44da98b954eedeac495271d0f', ], + tokens: [nullAddress, ADDRESSES.ethereum.USDC, ADDRESSES.ethereum.DAI, ], chain: 'ethereum', }) }, diff --git a/projects/meowfinance/index.js b/projects/meowfinance/index.js index c25122dd5c..1c7ba69695 100644 --- a/projects/meowfinance/index.js +++ b/projects/meowfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { pool2Exports } = require("../helper/pool2"); @@ -10,10 +11,10 @@ const meowFtm = "0x150Aeb5389d56E258c2bbb42c7e67e944EDEE913"; const treasuryContract = "0x7d25f49C648B2a12B5f530Df929204352cb6080e"; const translate = { - "0x049d68029688eabf473097a2fc38ef61633a3c7a": - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e": - "0x6b175474e89094c44da98b954eedeac495271d0f", + [ADDRESSES.fantom.fUSDT]: + ADDRESSES.ethereum.USDT, + [ADDRESSES.fantom.DAI]: + ADDRESSES.ethereum.DAI, }; const workers = [ diff --git a/projects/mercurial.js b/projects/mercurial.js index 83b8cf2097..a5f1da1153 100644 --- a/projects/mercurial.js +++ b/projects/mercurial.js @@ -1,90 +1,91 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens2 } = require("./helper/solana"); async function tvl() { const tokensAndOwners = [ // PAI-3Pool - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', '2dc3UgMuVkASzW4sABDjDB5PjFbPTncyECUnZL73bmQR'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', '2dc3UgMuVkASzW4sABDjDB5PjFbPTncyECUnZL73bmQR'], + [ADDRESSES.solana.USDC, '2dc3UgMuVkASzW4sABDjDB5PjFbPTncyECUnZL73bmQR'], + [ADDRESSES.solana.USDT, '2dc3UgMuVkASzW4sABDjDB5PjFbPTncyECUnZL73bmQR'], ['Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS', '2dc3UgMuVkASzW4sABDjDB5PjFbPTncyECUnZL73bmQR'], // UST-3Pool ['CXLBjMMcwkc17GfJtBos6rQCo1ypeH6eDbB82Kby4MRm','FDonWCo5RJhx8rzSwtToUXiLEL7dAqLmUhnyH76F888D'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','FDonWCo5RJhx8rzSwtToUXiLEL7dAqLmUhnyH76F888D'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB','FDonWCo5RJhx8rzSwtToUXiLEL7dAqLmUhnyH76F888D'], + [ADDRESSES.solana.USDC,'FDonWCo5RJhx8rzSwtToUXiLEL7dAqLmUhnyH76F888D'], + [ADDRESSES.solana.USDT,'FDonWCo5RJhx8rzSwtToUXiLEL7dAqLmUhnyH76F888D'], // pSOL-2Pool - ['9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX','8RXqdSRFGLX8iifT2Cu5gD3fG7G4XcEBWCk9X5JejpG3'], - ['So11111111111111111111111111111111111111112','8RXqdSRFGLX8iifT2Cu5gD3fG7G4XcEBWCk9X5JejpG3'], + [ADDRESSES.solana.pSOL,'8RXqdSRFGLX8iifT2Cu5gD3fG7G4XcEBWCk9X5JejpG3'], + [ADDRESSES.solana.SOL,'8RXqdSRFGLX8iifT2Cu5gD3fG7G4XcEBWCk9X5JejpG3'], // wUSD-4Pool - ['EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o','3m15qNJDM5zydsYNJzkFYXE7iGCVnkKz1mrmbawrDUAH'], + [ADDRESSES.solana.DAI,'3m15qNJDM5zydsYNJzkFYXE7iGCVnkKz1mrmbawrDUAH'], ['A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM','3m15qNJDM5zydsYNJzkFYXE7iGCVnkKz1mrmbawrDUAH'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','3m15qNJDM5zydsYNJzkFYXE7iGCVnkKz1mrmbawrDUAH'], + [ADDRESSES.solana.USDC,'3m15qNJDM5zydsYNJzkFYXE7iGCVnkKz1mrmbawrDUAH'], ['Dn4noZ5jgGfkntzcQSUZ8czkreiZ1ForXYoV2H8Dm7S1','3m15qNJDM5zydsYNJzkFYXE7iGCVnkKz1mrmbawrDUAH'], // stSOL-2Pool - ['So11111111111111111111111111111111111111112','pG6noYMPVR9ykNgD4XSNa6paKKGGwciU2LckEQPDoSW'], + [ADDRESSES.solana.SOL,'pG6noYMPVR9ykNgD4XSNa6paKKGGwciU2LckEQPDoSW'], ['7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj','pG6noYMPVR9ykNgD4XSNa6paKKGGwciU2LckEQPDoSW'], // mSOL-2Pool - ['So11111111111111111111111111111111111111112','GcJckEnDiWjpjQ8sqDKuNZjJUKAFZSiuQZ9WmuQpC92a'], + [ADDRESSES.solana.SOL,'GcJckEnDiWjpjQ8sqDKuNZjJUKAFZSiuQZ9WmuQpC92a'], ['mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So','GcJckEnDiWjpjQ8sqDKuNZjJUKAFZSiuQZ9WmuQpC92a'], // wbBUSD-4Pool - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], - ['8qJSyQprMC57TWKaYEmetUR3UUiTP2M3hXdcvFhkZdmv','D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], - ['FCqfQSujuPxy6V42UvafBhsysWtEq1vhjfMN1PUbgaxA','D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], - ['5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2','D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], + [ADDRESSES.solana.USDC,'D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], + [ADDRESSES.solana.USDTbs,'D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], + [ADDRESSES.solana.USDCbs,'D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], + [ADDRESSES.solana.BUSDbs,'D9QnVSaKxcoYHhXpyhpHWjVhY1xtNxaQbuHocjHKVzf1'], // UXD-3Pool ['7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT','62JkSDhZLgwLu8in73E46CPTzEf8hMGMxSNUw5r5mMA8'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','62JkSDhZLgwLu8in73E46CPTzEf8hMGMxSNUw5r5mMA8'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB','62JkSDhZLgwLu8in73E46CPTzEf8hMGMxSNUw5r5mMA8'], + [ADDRESSES.solana.USDC,'62JkSDhZLgwLu8in73E46CPTzEf8hMGMxSNUw5r5mMA8'], + [ADDRESSES.solana.USDT,'62JkSDhZLgwLu8in73E46CPTzEf8hMGMxSNUw5r5mMA8'], // USTv2-3Pool ['9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i','44K7k9pjjKB6LcWZ1sJ7TvksR3sb4AXpBxwzF1pcEJ5n'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','44K7k9pjjKB6LcWZ1sJ7TvksR3sb4AXpBxwzF1pcEJ5n'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB','44K7k9pjjKB6LcWZ1sJ7TvksR3sb4AXpBxwzF1pcEJ5n'], + [ADDRESSES.solana.USDC,'44K7k9pjjKB6LcWZ1sJ7TvksR3sb4AXpBxwzF1pcEJ5n'], + [ADDRESSES.solana.USDT,'44K7k9pjjKB6LcWZ1sJ7TvksR3sb4AXpBxwzF1pcEJ5n'], // USDH-3Pool ['USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX','F1TVmk1LAaVDGDfEFJWfNLCh9wikZxv33e54ZPeRQzEh'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','F1TVmk1LAaVDGDfEFJWfNLCh9wikZxv33e54ZPeRQzEh'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB','F1TVmk1LAaVDGDfEFJWfNLCh9wikZxv33e54ZPeRQzEh'], + [ADDRESSES.solana.USDC,'F1TVmk1LAaVDGDfEFJWfNLCh9wikZxv33e54ZPeRQzEh'], + [ADDRESSES.solana.USDT,'F1TVmk1LAaVDGDfEFJWfNLCh9wikZxv33e54ZPeRQzEh'], // aUSDC-4Pool - ['DdFPRnccQqLD4zCHrBqdY95D6hvw6PLWp9DEXj1fLCL9','5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], - ['8Yv9Jz4z7BUHP68dz8E8m3tMe6NKgpMUKn8KVqrPA6Fr','5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], - ['eqKJTf1Do4MDPyKisMYqVaUFpkEFAs3riGF3ceDH2Ca','5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], + [ADDRESSES.solana.aeUSDC,'5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], + [ADDRESSES.solana.aaUSDC,'5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], + [ADDRESSES.solana.apUSDC,'5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], + [ADDRESSES.solana.USDC,'5g5yYtiCy3ZrUpfvNg3LXVQDnVJtjmL1eMWXoMgqEuRx'], // acUSD-3Pool ['A96PoNcxa9LMxcF9HhKAfA1p3M1dGbubPMWf19gHAkgJ','FhqkDgkhrDY75Tq6rx1ezp6R36AjHsXVvRYJkiyhFoZU'], ['EwxNF8g9UfmsJVcZFTpL9Hx5MCkoQFoJi6XNWzKf1j8e','FhqkDgkhrDY75Tq6rx1ezp6R36AjHsXVvRYJkiyhFoZU'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','FhqkDgkhrDY75Tq6rx1ezp6R36AjHsXVvRYJkiyhFoZU'], + [ADDRESSES.solana.USDC,'FhqkDgkhrDY75Tq6rx1ezp6R36AjHsXVvRYJkiyhFoZU'], // fUSD-3Pool ['B7mXkkZgn7abwz1A3HnKkb18Y6y18WcbeSkh1DuLMkee','EdJbEpfASQB99Y2BMUEb5rtgVUcJ2bBUqe59f4JJ9o6t'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','EdJbEpfASQB99Y2BMUEb5rtgVUcJ2bBUqe59f4JJ9o6t'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB','EdJbEpfASQB99Y2BMUEb5rtgVUcJ2bBUqe59f4JJ9o6t'], + [ADDRESSES.solana.USDC,'EdJbEpfASQB99Y2BMUEb5rtgVUcJ2bBUqe59f4JJ9o6t'], + [ADDRESSES.solana.USDT,'EdJbEpfASQB99Y2BMUEb5rtgVUcJ2bBUqe59f4JJ9o6t'], // USN-4Pool ['EwxNF8g9UfmsJVcZFTpL9Hx5MCkoQFoJi6XNWzKf1j8e','CrUucFMGc8iLxT4uZX965M7iQWozsRxai8ChevwdtXri'], - ['Grk6b4UMRWkgyq4Y6S1BnNRF4hRgtnMFp7Sorkv6Ez4u','CrUucFMGc8iLxT4uZX965M7iQWozsRxai8ChevwdtXri'], + [ADDRESSES.solana.afUSDC,'CrUucFMGc8iLxT4uZX965M7iQWozsRxai8ChevwdtXri'], ['PUhuAtMHsKavMTwZsLaDeKy2jb7ciETHJP7rhbKLJGY','CrUucFMGc8iLxT4uZX965M7iQWozsRxai8ChevwdtXri'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','CrUucFMGc8iLxT4uZX965M7iQWozsRxai8ChevwdtXri'], + [ADDRESSES.solana.USDC,'CrUucFMGc8iLxT4uZX965M7iQWozsRxai8ChevwdtXri'], // abBUSD-4Pool - ['8XSsNvaKU9FDhYWAv7Yc7qSNwuJSzVrXBNEk7AFiWF69','89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], - ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v','89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], - ['E77cpQ4VncGmcAXX16LHFFzNBEBb2U7Ar7LBmZNfCgwL','89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], + [ADDRESSES.solana.abUSDC,'89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], + [ADDRESSES.solana.USDC,'89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], + [ADDRESSES.solana.abUSDT,'89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], ['6nuaX3ogrr2CaoAPjtaKHAoBNWok32BMcRozuf32s2QF','89WiJDwdAqjgsKrb9gxXcVgsmh38BBNm13xnPTuXjBwA'], // aaUSDT-4Pool ['DNhZkUaxHXYvpxZ7LNnHtss8sQgdAfd1ZYS1fB7LKWUZ','A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], - ['Bn113WT6rbdgwrm12UJtnmNqGqZjY4it2WoUQuQopFVn','A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], - ['FwEHs3kJEdMa2qZHv7SgzCiFXUQPEycEXksfBkwmS8gj','A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], - ['Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB','A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], + [ADDRESSES.solana.aeUSDT,'A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], + [ADDRESSES.solana.aaUSDT,'A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], + [ADDRESSES.solana.USDT,'A2UHy42vcoKKK4JhNzNTY9PJ5kPcb4EZUSxRAbUtKeUU'], ] diff --git a/projects/merkl/index.js b/projects/merkl/index.js new file mode 100644 index 0000000000..3156373608 --- /dev/null +++ b/projects/merkl/index.js @@ -0,0 +1,29 @@ +const sdk = require("@defillama/sdk"); + +/* +Merkl doesn't have any TVL as no funds are staked on the contracts. +This adapter was made to integrate Merkl in the Yields dashboard. +For more information on Merkl, see here: https://docs.angle.money/side-products/merkl +*/ + +async function tvl() { + const balances = {}; + return balances; +} + +module.exports = { + methodology: + "Merkl is a side product from Angle Labs used to better reward concentrated liquidity positions. It doesn't have any TVL. See the yield dashboard for a list of Merkl pools.", + ethereum: { + tvl, + }, + polygon: { + tvl, + }, + optimism: { + tvl, + }, + arbitrum: { + tvl, + }, +}; diff --git a/projects/merlin/index.js b/projects/merlin/index.js index 46d38a178e..26f8863233 100644 --- a/projects/merlin/index.js +++ b/projects/merlin/index.js @@ -1,7 +1,9 @@ -const { getUniTVL } = require("../helper/unknownTokens"); module.exports = { start: 1682899200, era: { - tvl: getUniTVL({ factory: '0x63E6fdAdb86Ea26f917496bEEEAEa4efb319229F', useDefaultCoreAssets: true, }), + tvl: () => 0, }, + hallmarks: [ + [Math.floor(new Date('2023-04-26')/1e3), 'Project Rugged!'], + ], }; diff --git a/projects/messinaone/index.js b/projects/messinaone/index.js index 9d8dd2bdf5..c906f8a0ca 100644 --- a/projects/messinaone/index.js +++ b/projects/messinaone/index.js @@ -8,6 +8,9 @@ const tokenChain = { algorand: 8, cronos: 20025, polygon: 5, + avax: 6, + arbitrum: 23, + bsc: 4, }; const fetchAssets = async () => { @@ -36,4 +39,7 @@ module.exports = { algorand: { tvl }, cronos: { tvl }, polygon: { tvl }, + avax: { tvl }, + arbitrum: { tvl }, + bsc: { tvl }, }; diff --git a/projects/metaid/index.js b/projects/metaid/index.js new file mode 100644 index 0000000000..3062fdd046 --- /dev/null +++ b/projects/metaid/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, sumTokensExport } = require('../helper/unwrapLPs') +const USDC = ADDRESSES.telos.ETH +const wkava = ADDRESSES.kava.WKAVA +const MetaId = "0x8dD02F065EE650787A414568a13948629fa21333" + + +module.exports = { + kava: { + tvl: sumTokensExport({ tokensAndOwners: [ + [USDC, MetaId], + [wkava, MetaId], + [nullAddress, MetaId], + ]}), + }, + } \ No newline at end of file diff --git a/projects/metalswap/index.js b/projects/metalswap/index.js index a9637d3b4a..6795699513 100644 --- a/projects/metalswap/index.js +++ b/projects/metalswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require('../helper/staking') const { pool2UniV3 } = require('../helper/pool2') const { sumTokens2, nullAddress } = require('../helper/unwrapLPs'); @@ -9,10 +10,10 @@ const config = { toa: [ [nullAddress, '0xaAA50f60a256b74D1C71ED4AD739836b50059201'], // ETH pool legacy [nullAddress,'0x9494c9FfE0735832885269a10c910CDb227a7B0F'], // ETH pool new - ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0x51bb873D5b68309cf645e84234bC290b7D991D2C'], //usdt pool legacy - ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0x2535D0578562C88c1c875075A1085a4AD3117b20'], //usdt pool new - ['0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', '0xdCE224F9299CDd66e4D01D196d4cabce35a2F478'], //wbtc pool legacy - ['0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', '0x725fbd08e4c5d4b5978E48667d96D03F9B1C4d3A'], //wbtc pool new + [ADDRESSES.ethereum.USDT, '0x51bb873D5b68309cf645e84234bC290b7D991D2C'], //usdt pool legacy + [ADDRESSES.ethereum.USDT, '0x2535D0578562C88c1c875075A1085a4AD3117b20'], //usdt pool new + [ADDRESSES.ethereum.WBTC, '0xdCE224F9299CDd66e4D01D196d4cabce35a2F478'], //wbtc pool legacy + [ADDRESSES.ethereum.WBTC, '0x725fbd08e4c5d4b5978E48667d96D03F9B1C4d3A'], //wbtc pool new ['0x45804880De22913dAFE09f4980848ECE6EcbAf78', '0x787c68f6bCAb352Ec871C522d038bc7A30268020'], //paxg pool ], token: '0x3E5D9D8a63CC8a88748f229999CF59487e90721e', @@ -38,6 +39,16 @@ const config = { '0x799BfC125170ab4dF34E9dC07DB47AA0edB9bC7C', // Smart Pool 6 months + 6 months ], }, + + optimism: { + toa: [ + [nullAddress, '0x5B7C5daa5f4Bb37c457dA468Da1CDaA6219892A1'], // ETH pool + [ADDRESSES.optimism.USDC, '0x24682cFDc060316355C26C420d0748F289502e83'], //usdt pool new + ['0x68f180fcCe6836688e9084f035309E29Bf0A2095', '0x469CC7AF1696B5e4E6151796Dc3B3fEf39b34f39'], //wbtc pool new + [ADDRESSES.optimism.OP, '0xc9394748D5f633152AD3F8f557a9B7743148db1B'], //Op pool new + ], + token: '0x3E5D9D8a63CC8a88748f229999CF59487e90721e', + }, } module.exports = { diff --git a/projects/metapool.js b/projects/metapool.js index 7e6f13d15a..92d45bdc3e 100644 --- a/projects/metapool.js +++ b/projects/metapool.js @@ -1,4 +1,6 @@ const utils = require('./helper/utils'); +const ADDRESSES = require('./helper/coreAssets.json') +const sdk = require("@defillama/sdk") async function tvl() { const totalTvl = await utils.fetchURL('http://validators.narwallets.com:7000/metrics_json') @@ -10,5 +12,10 @@ async function tvl() { module.exports = { methodology: 'TVL counts the NEAR tokens that are staked.', - near: { tvl, } + near: { tvl, }, + aurora: { + tvl: async (_, block, chainBlocks) => ({ + ["aurora:" + ADDRESSES.aurora.AURORA]: (await sdk.api.erc20.totalSupply({ target: "0xb01d35D469703c6dc5B369A1fDfD7D6009cA397F", chain:"aurora", block: chainBlocks.aurora})).output + }) + } } \ No newline at end of file diff --git a/projects/metareserve/index.js b/projects/metareserve/index.js index c3aa5795a4..ea0144b2b6 100644 --- a/projects/metareserve/index.js +++ b/projects/metareserve/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const power = "0x000c6322Df760155bBe4F20F2EDD8F4Cd35733A6"; const staking = "0x5c643737AF2aD7A0B9ae62158b715793505967bE"; const treasury = "0x6651BDeE6A47F6962C86d680b498DC492a7E78C8"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ["0xA1A64b7D85B92A19fdb628557cC44bCb40284B65", true] // POWER-BUSD ]; diff --git a/projects/metastreet-v2/abi.json b/projects/metastreet-v2/abi.json new file mode 100644 index 0000000000..7ecb54a5d2 --- /dev/null +++ b/projects/metastreet-v2/abi.json @@ -0,0 +1,6 @@ +{ + "getPools": "address[]:getPools", + "collateralToken": "address:collateralToken", + "currencyToken": "address:currencyToken", + "liquidityNodes": "function liquidityNodes(uint128 startTick, uint128 endTick) view returns (tuple(uint128 tick, uint128 value, uint128 shares, uint128 available, uint128 pending, uint128 redemptions, uint128 prev, uint128 next)[])" +} \ No newline at end of file diff --git a/projects/metastreet-v2/index.js b/projects/metastreet-v2/index.js new file mode 100644 index 0000000000..d4e1283bb2 --- /dev/null +++ b/projects/metastreet-v2/index.js @@ -0,0 +1,102 @@ +const sdk = require("@defillama/sdk"); +const abi = require("./abi.json"); +const { sumTokens2 } = require('../helper/unwrapLPs') +const { blockQuery } = require('../helper/http') + +const query = ` +query nfts($block: Int) { + loans(where: { or: [{ status: "Active" }, { status: "Liquidated" }] } block: { number: $block }) { + collateralTokenIds + collateralToken { + id + } + pool { + id + } + } +} +` +const endpoint = 'https://api.studio.thegraph.com/query/49216/metastreet-v2-mainnet-devel/version/latest' + +// Constants +const METASTREET_POOL_FACTORY = "0x1c91c822F6C5e117A2abe2B33B0E64b850e67095"; +const MAX_UINT_128 = "0xffffffffffffffffffffffffffffffff" + +// Gets all MetaStreet V2 pools created by PoolFactory and their +// corresponding currency token +async function getAllPoolsAndTokens(block) { + const pools = ( + await sdk.api.abi.call({ + target: METASTREET_POOL_FACTORY, + abi: abi.getPools, + block, + }) + ).output; + + const tokens = ( + await sdk.api.abi.multiCall({ + abi: abi.currencyToken, + calls: pools.map((pool) => ({ + target: pool, + })), + block, + }) + ).output.map((response) => response.output); + + return [pools, tokens]; +} + +// Calculates total borrowed value across all MetaStreet pools +async function getBorrowedValue(values, block, pools, tokens) { + const poolsBorrowedValue = ( + await sdk.api.abi.multiCall({ + abi: abi.liquidityNodes, + calls: pools.map((pool) => ({ + target: pool, + params: [0, MAX_UINT_128], + })), + block, + }) + ).output.map((response) => + response.output.reduce( + (partialSum, node) => partialSum + +node.value - +node.available, + 0 + ) + ); + + // Sum up borrowed value of each pool + for (let i = 0; i < pools.length; i++) { + sdk.util.sumSingleBalance(values, tokens[i], poolsBorrowedValue[i]); + } + + return values; +} + +function getMetaStreetBorrowedValue() { + return async (_, block) => { + const values = {}; + // Get all pools and tokens + const [pools, tokens] = await getAllPoolsAndTokens(block); + await getBorrowedValue(values, block, pools, tokens); + return values; + }; +} + +module.exports = { + ethereum: { + tvl, + borrowed: getMetaStreetBorrowedValue(), + }, + methodology: "TVL is calculated by summing the value of token balances and NFTs across all MetaStreet pools. Total borrowed is calculated by subtracting the tokens available from the total value of all liquidity nodes across all pools.", + start: 17497132, // Block number of PoolFactory creation +}; + +async function tvl(_, _b, _cb, { api, }) { + const pools = await api.call({ target: METASTREET_POOL_FACTORY, abi: abi.getPools, }) + const tokens = await api.multiCall({ abi: abi.currencyToken, calls: pools }) + // const collateralTokens = await api.multiCall({ abi: abi.collateralToken, calls: pools }) + const ownerTokens = pools.map((pool, i) => [[tokens[i]], pool,]) + const { loans } = await blockQuery(endpoint, query, { api, blockCatchupLimit: 600, }) + loans.forEach(loan => api.add(loan.collateralToken.id, loan.collateralTokenIds.length)) + return sumTokens2({ api, ownerTokens, }) +} \ No newline at end of file diff --git a/projects/metatdex/index.js b/projects/metatdex/index.js index 22972ad51d..e445d01512 100644 --- a/projects/metatdex/index.js +++ b/projects/metatdex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { sumTokens2 } = require('../helper/unwrapLPs') @@ -28,8 +29,9 @@ Object.keys(config).forEach(chain => { params: [0, 301], chain, block, }) - if (chain === 'heco') - tokens.push('0xa71edc38d189767582c38a3145b5873052c3e47a') + if (chain === 'bsc') tokens.push(ADDRESSES.bsc.USDT) + if (chain === 'heco') tokens.push(ADDRESSES.heco.USDT) + if (chain === 'polygon') tokens.push(ADDRESSES.polygon.USDT) return sumTokens2({ tokens, owner, chain, block, }) } } @@ -37,4 +39,4 @@ Object.keys(config).forEach(chain => { const abi = { getTokenAddressList: "function getTokenAddressList(uint256 start, uint256 end) view returns (address[] list)", -} \ No newline at end of file +} diff --git a/projects/metavault-bo/index.js b/projects/metavault-bo/index.js index b0797cb824..577e5109f2 100644 --- a/projects/metavault-bo/index.js +++ b/projects/metavault-bo/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { polygon: { - tvl: sumTokensExport({ owner: '0x6fd5b386d8bed29b3b62c0856250cdd849b3564d', tokens: ['0x2791bca1f2de4661ed88a30c99a7a9449aa84174']}) + tvl: sumTokensExport({ owner: '0x6fd5b386d8bed29b3b62c0856250cdd849b3564d', tokens: [ADDRESSES.polygon.USDC]}) } } \ No newline at end of file diff --git a/projects/metavault/index.js b/projects/metavault/index.js index 3957c75722..d4f00986ca 100644 --- a/projects/metavault/index.js +++ b/projects/metavault/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const readerAbi = require("./reader.json"); @@ -6,8 +7,8 @@ const { staking } = require("../helper/staking"); const { sumTokens2 } = require('../helper/unwrapLPs'); const { default: BigNumber } = require("bignumber.js"); -const DAI_ADDRESS = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; -const USDC_ADDRESS = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; +const DAI_ADDRESS = ADDRESSES.ethereum.DAI; +const USDC_ADDRESS = ADDRESSES.ethereum.USDC; const MVLP_ADDRESS = "0x9F4f8bc00F48663B7C204c96b932C29ccc43A2E8"; const MVLP_DECIMALS = 18; @@ -22,7 +23,7 @@ const READER_CONTRACT = "0x01dd8B434A83cbdDFa24f2ef1fe2D6920ca03734"; // getToke const stakingAddress = "0x42162457006DB4DA3a7af5B53DFee5A891243b4D"; // Governance Staking const stakingTokenAddress = "0x788B6D2B37Aa51D916F2837Ae25b05f0e61339d1"; // MVD -const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000"; +const ADDRESS_ZERO = ADDRESSES.null; async function getTvl(timestamp, block) { const toa = [ diff --git a/projects/metaversepro/index.js b/projects/metaversepro/index.js index cd169cebed..fad5b9cb7b 100644 --- a/projects/metaversepro/index.js +++ b/projects/metaversepro/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0xb874ac3a21e3ffe06fb4b6dcf9b62c7ea753a9a0" module.exports = ohmTvl(treasury, [ //WBNB - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], + [ADDRESSES.bsc.WBNB, false], //BUSD - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.BUSD, false], //Pancake LP ["0x512385e505615eb30ec80A2915575E344ACf792A", true], //Pancake LPs 1 @@ -15,5 +16,5 @@ module.exports = ohmTvl(treasury, [ //Pancake LPs 3 ["0x1c8ed2f2cef333aa43f1ba9a4589899c53787d2f", true], // USDC - ["0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", false] + [ADDRESSES.bsc.USDC, false] ], "bsc", "0xb91db0c2551aae4784119ce4c33234c9e3c9af71", "0x0a2046C7fAa5a5F2b38C0599dEB4310AB781CC83", undefined, undefined, false) \ No newline at end of file diff --git a/projects/meter-Liquid-Staking/index.js b/projects/meter-Liquid-Staking/index.js new file mode 100644 index 0000000000..390a59cb03 --- /dev/null +++ b/projects/meter-Liquid-Staking/index.js @@ -0,0 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require("@defillama/sdk"); +const { BigNumber,utils } = require('ethers'); + +const stMTRG = '0x215d603293357ca222bE92A1bf75eEc38DeF0aad'; +async function tvl(timestamp, _, { meter: block }) { + const stMTRGStaking = await sdk.api.abi.call({ + target: stMTRG, + abi: 'erc20:totalSupply', + chain: "meter", block, + }); + return { + meter: stMTRGStaking.output / 1e18 + }; +} + +module.exports = { + meter: { + tvl, + } +} \ No newline at end of file diff --git a/projects/metronome-synth/index.js b/projects/metronome-synth/index.js index 836b4d274b..b8c57da684 100644 --- a/projects/metronome-synth/index.js +++ b/projects/metronome-synth/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs") module.exports = { @@ -5,19 +6,33 @@ module.exports = { tvl: sumTokensExport({ owner: '0x3691ef68ba22a854c36bc92f6b5f30473ef5fb0a', tokens: [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, "0xd1C117319B3595fbc39b471AB1fd485629eb05F2", - "0x853d955aCEf822Db058eb8505911ED77F175b99e", - "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + ADDRESSES.ethereum.FRAX, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WBTC, "0xa8b607Aa09B6A2E306F93e74c282Fb13f6A80452", "0xc14900dFB1Aa54e7674e1eCf9ce02b3b35157ba5", - "0xac3E018457B222d93114458476f3E3416Abbe38F", + ADDRESSES.ethereum.sfrxETH, "0x4Dbe3f01aBe271D3E65432c74851625a8c30Aa7B", "0x650CD45DEdb19c33160Acc522aD1a82D9701036a", "0xDD9F61a85fFE73E41eF889817972f0B0AaE6D6Dd" ] }), }, + optimism: { + tvl: sumTokensExport({ + owner: '0x4c6bf87b7fc1c8db85877151c6ede38ed27c34f6', + tokens: [ + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.WETH_1, + ADDRESSES.optimism.OP, + "0xdd63ae655b388cd782681b7821be37fdb6d0e78d", + "0xccf3d1acf799bae67f6e354d685295557cf64761", + "0x19382707d5a47e74f60053b652ab34b6e30febad", + "0x539505dde2b9771debe0898a84441c5e7fdf6bc0", + ] + }), + } } diff --git a/projects/mexc-cex/index.js b/projects/mexc-cex/index.js new file mode 100644 index 0000000000..9c9323c29d --- /dev/null +++ b/projects/mexc-cex/index.js @@ -0,0 +1,44 @@ +const { cexExports } = require('../helper/cex') + +const config = { + bitcoin: { + owners: [ + "13uZyaPbt4rTwYQ8xWFySVUzWH3pk2P5c7" + ], + }, + ethereum:{ + owners: [ + "0x3cc936b795a188f0e246cbb2d74c5bd190aecf18", + "0x0162cd2ba40e23378bf0fd41f919e1be075f025f", + "0x75e89d5979e4f6fba9f97c104c2f0afb3f1dcb88", + ] + }, + bsc: { + owners:[ + "0x4982085c9e2f89f2ecb8131eca71afad896e89cb", + "0x2e8f79ad740de90dc5f5a9f0d8d9661a60725e64" + ] + }, + polygon: { + owners:[ + "0x51e3d44172868acc60d68ca99591ce4230bc75e0", + ] + }, + tron: { + owners:[ + "TEPSrSYPDSQ7yXpMFPq91Fb1QEWpMkRGfn", + ] + }, + arbitrum: { + owners:[ + "0x9b64203878f24eb0cdf55c8c6fa7d08ba0cf77e5", + ] + }, + optimism: { + owners:[ + "0xdf90c9b995a3b10a5b8570a47101e6c6a29eb945", + ] + } +} + +module.exports = cexExports(config) \ No newline at end of file diff --git a/projects/miaswap/index.js b/projects/miaswap/index.js new file mode 100644 index 0000000000..85dae95585 --- /dev/null +++ b/projects/miaswap/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + onus: { + tvl: getUniTVL({ factory: '0xA5DA4dC244c7aD33a0D8a10Ed5d8cFf078E86Ef3', useDefaultCoreAssets: true }), + } +} \ No newline at end of file diff --git a/projects/midas-capital/index.js b/projects/midas-capital/index.js index e49ffd829e..eb015c39e4 100644 --- a/projects/midas-capital/index.js +++ b/projects/midas-capital/index.js @@ -1,21 +1,30 @@ const sdk = require("@defillama/sdk"); const { compoundExportsWithAsyncTransform } = require("../helper/compound"); + +module.exports = { + hallmarks: [ + [Math.floor(new Date('2023-06-17')/1e3), 'Protocol was exploited for $600k'], + ] +} + const pools = { bsc: { pools: [ + "0x1851e32F34565cb95754310b031C5a2Fc0a8a905", // Helio-Ankr "0x31d76A64Bc8BbEffb601fac5884372DEF910F044", // Jarvis - "0xb2234eE69555EE4C3b6cEA4fd25c4979BbDBf0fd", // Risedile + "0xb2234eE69555EE4C3b6cEA4fd25c4979BbDBf0fd", // Risedle "0xEF0B026F93ba744cA3EDf799574538484c2C4f80", // AutoHedge "0x5373C052Df65b317e48D6CAD8Bb8AC50995e9459", // BOMB "0xCB2841d6d300b9245EB7745Db89A0A50D8468501", // Ankr - // "0xd3E5AAFebBF06A071509cf894f665710dDaa800d", // Tester "0x35F3a59389Dc3174A98610727C2e349E275Dc909", // Ellipsis "0x3F239A5C45849391E7b839190597B5130780790d", // PancakeStack "0x7f8B5fCA1a63C632776ffc9936D2e323c14B57f8", // Alpha Strategies "0x20a0ED8c794F96C1479e2867995C99E931Ee36Ba", // Transfero Stables - "0x5EB884651F50abc72648447dCeabF2db091e4117", //Stader BNBx + "0x5EB884651F50abc72648447dCeabF2db091e4117", // Stader BNBx "0xBc06411a6204B36ce6a5559FFBE3a56C5960F6fe", // pStake BNB + "0x1B6D43501E0c7201Ea061961cBAEc88FB012f57B", // THENA Core Pools + ], }, moonbeam: { @@ -31,11 +40,15 @@ const pools = { "0xB08A309eFBFFa41f36A06b2D0C9a4629749b17a2", // Arrakis "0xBd82D36B9CDfB9747aA12025CeCE3782EDe767FE", // Polygon Liquid Staking "0xF1ABd146B4620D2AE67F34EA39532367F73bbbd2", // MIMO + "0xBd82D36B9CDfB9747aA12025CeCE3782EDe767FE", // Stader MATICx + "0x59013D8a77D656777329D74ea1C88DA796005F1B" // Planet ix + ], }, arbitrum: { pools: [ "0x185Fa7d0e7d8A4FE7E09eB9df68B549c660e1116", // Risedle + "0x44a03C14F30D49cB43b7F7E91E987ecC10cc0b09" // OHM Pool ] } }; @@ -43,17 +56,38 @@ const pools = { function getTvl(chain) { const config = pools[chain] ?? { pools: [] }; const tvls = config.pools.map((pool) => - compoundExportsWithAsyncTransform( - pool, - chain, - undefined, - undefined - ) + compoundExportsWithAsyncTransform(pool, chain, undefined, undefined, { resolveLPs: true }) ); - return { - tvl: sdk.util.sumChainTvls(tvls.map((t) => t.tvl)), - borrowed: sdk.util.sumChainTvls(tvls.map((t) => t.borrowed)), - }; + let _tvl = sdk.util.sumChainTvls(tvls.map((t) => t.tvl)) + let _borrowed = sdk.util.sumChainTvls(tvls.map((t) => t.borrowed)) + let tvl = _tvl + let borrowed = _borrowed + if (chain === "bsc") { + tvl = resolveHypervisor(_tvl) + borrowed = resolveHypervisor(_borrowed) + } + return { tvl, borrowed }; } -Object.keys(pools).forEach(chain => module.exports[chain] = getTvl(chain)) \ No newline at end of file +Object.keys(pools).forEach(chain => module.exports[chain] = getTvl(chain)) + +function resolveHypervisor(tvlFunc) { + return async (...args) => { + const { api } = args[3] + const balances = await tvlFunc(...args) + let bscTokens = Object.keys(balances).filter(t => t.startsWith('bsc:')).map(t => t.slice(4)) + const res = await api.multiCall({ abi: 'function getTotalAmounts() view returns (uint256,uint256)', calls: bscTokens, permitFailure: true }) + const hyperVisorTokens = bscTokens.filter((t, i) => res[i]) + const totalAmounts = res.filter(i => i) + const token0s = await api.multiCall({ abi: 'address:token0', calls: hyperVisorTokens, }) + const token1s = await api.multiCall({ abi: 'address:token1', calls: hyperVisorTokens, }) + const totalSupplies = await api.multiCall({ abi: 'function totalSupply() returns (uint256)', calls: hyperVisorTokens, }) + hyperVisorTokens.forEach((token, i) => { + const bal = balances[`bsc:${token}`] / totalSupplies[i] + delete balances[`bsc:${token}`] + sdk.util.sumSingleBalance(balances, token0s[i], totalAmounts[i][0] * bal, api.chain) + sdk.util.sumSingleBalance(balances, token1s[i], totalAmounts[i][1] * bal, api.chain) + }) + return balances + } +} \ No newline at end of file diff --git a/projects/midasdao.js b/projects/midasdao.js index 6009a2faa7..b31982111b 100644 --- a/projects/midasdao.js +++ b/projects/midasdao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require("./helper/unwrapLPs"); const sdk = require('@defillama/sdk'); @@ -7,7 +8,7 @@ const CROWN = "0x39912d83acb4a373321387300f4fbe88aa5d6f14"; const JoePair = "0x089a9BF16453b519Fab02e40d143C0dcF9083778"; const TREASURY = "0x6D9Cfb705C7b7A5ca1C4565A47Fa1b26FC1bE3d0"; const MIM = "0x130966628846BFd36ff31a822705796e8cb8C18D"; -const WAVAX = "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7" +const WAVAX = ADDRESSES.avax.WAVAX const staking = async (timestamp, ethBlock, chainBlocks) => { const balances = {}; diff --git a/projects/milkomeda-djed/abi.json b/projects/milkomeda-djed/abi.json new file mode 100644 index 0000000000..ffe5319866 --- /dev/null +++ b/projects/milkomeda-djed/abi.json @@ -0,0 +1,5 @@ +{ + "Djed": { + "reserve": "function R(uint256 cpa) view returns (uint256 balance)" + } + } \ No newline at end of file diff --git a/projects/milkomeda-djed/config.json b/projects/milkomeda-djed/config.json new file mode 100644 index 0000000000..b7e39bcf85 --- /dev/null +++ b/projects/milkomeda-djed/config.json @@ -0,0 +1,10 @@ +{ + "djedAddress": { + "milkomeda": "0x67A30B399F5Ed499C1a6Bc0358FA6e42Ea4BCe76", + "milkomeda_a1": "0x..." + }, + "reserveTokenAddress": { + "milkomeda": "0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9", + "milkomeda_a1": "0x..." + } + } \ No newline at end of file diff --git a/projects/milkomeda-djed/index.js b/projects/milkomeda-djed/index.js new file mode 100644 index 0000000000..c1ed78e7b8 --- /dev/null +++ b/projects/milkomeda-djed/index.js @@ -0,0 +1,24 @@ +const sdk = require('@defillama/sdk'); +const { transformBalances } = require('../helper/portedTokens'); + +const abi = require('./abi.json'); +const config = require("./config.json"); + +async function tvl(chain, chainBlocks) { + const balances = {}; + + const reserve = (await sdk.api.abi.call({ + abi: abi.Djed.reserve, chain: chain, target: config.djedAddress[chain], params: [ 0 ], block: chainBlocks[chain], + })).output; + + sdk.util.sumSingleBalance(balances, config.reserveTokenAddress[chain], reserve); // Using WADA address instead of mADA + return transformBalances(chain, balances); +} + +module.exports = { + methodology: 'The TVL of each Djed deployment on Milkomeda C1.', + milkomeda: { + start: 10440400, + tvl: (timestamp, block, chainBlocks) => tvl('milkomeda', chainBlocks) + }, +}; diff --git a/projects/milkomeda-macc/abi.json b/projects/milkomeda-macc/abi.json new file mode 100644 index 0000000000..f6a1957f9f --- /dev/null +++ b/projects/milkomeda-macc/abi.json @@ -0,0 +1,3 @@ +{ + "getAllFragmentedTokens" : "address[]:getAllFragmentedTokens" +} \ No newline at end of file diff --git a/projects/milkomeda-macc/index.js b/projects/milkomeda-macc/index.js new file mode 100644 index 0000000000..2a09134156 --- /dev/null +++ b/projects/milkomeda-macc/index.js @@ -0,0 +1,16 @@ +const abi = require("./abi.json"); +const { sumTokens2 } = require('../helper/unwrapLPs') +const TokenMerger = '0x36A06C470342Fc3443d768a9c85Aa43985D82219'; + +async function tvl(_, _1, _2, { api }) { + const tokens = await api.call({ abi: abi.getAllFragmentedTokens, target: TokenMerger }) + return sumTokens2({ api, owner: TokenMerger, tokens, }) +} + +module.exports = { + methodology: 'Counts the total balance of Fragmented tokens held in the Token Merger contract on Milkomeda C1 MACC.', + milkomeda: { + tvl, + }, +}; + diff --git a/projects/mimo/index.js b/projects/mimo/index.js index 2f841dd8b8..20213b249a 100755 --- a/projects/mimo/index.js +++ b/projects/mimo/index.js @@ -1,29 +1,30 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); const config = { ethereum: { vaultCore: ['0x4026BdCD023331D52533e3374983ded99CcBB6d4'], collaterals: [ - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', //wETH - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', //wBTC - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', //USDC + ADDRESSES.ethereum.WETH, //wETH + ADDRESSES.ethereum.WBTC, //wBTC + ADDRESSES.ethereum.USDC, //USDC ], }, polygon: { vaultCore: ['0x03175c19cb1d30fa6060331a9ec181e04cac6ab0'], collaterals: [ - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', //wMATIC - '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', //wETH - '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', //wBTC - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', //USDC + ADDRESSES.polygon.WMATIC_2, //wMATIC + ADDRESSES.polygon.WETH_1, //wETH + ADDRESSES.polygon.WBTC, //wBTC + ADDRESSES.polygon.USDC, //USDC ], }, fantom: { vaultCore: ['0xB2b4feB22731Ae013344eF63B61f4A0e09fa370e'], collaterals:[ - '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', //wFTM + ADDRESSES.fantom.WFTM, //wFTM '0x74b23882a30290451A17c44f4F05243b6b58C76d', //ETH '0x321162Cd933E2Be498Cd2267a90534A804051b11', //BTC - '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', //USDC + ADDRESSES.fantom.USDC, //USDC ], } } diff --git a/projects/mindgames/index.js b/projects/mindgames/index.js index 77fefaad40..4c7b0e4246 100644 --- a/projects/mindgames/index.js +++ b/projects/mindgames/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') const xCRX = "0x35AfE95662fdf442762a11E4eD5172C81fBceF7e"; const CRX = "0xb21Be1Caf592A5DC1e75e418704d1B6d50B0d083"; @@ -16,7 +17,7 @@ module.exports = { owner: xCRX, tokens: [CRX], chain: 'arbitrum', - coreAssets: ['0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'], + coreAssets: [ADDRESSES.arbitrum.USDC], lps: ['0xf7305D209BFeCF40Bd53ccBdbe5303B3153d0660'] }) }, diff --git a/projects/minerswap/index.js b/projects/minerswap/index.js index e294da30ad..607a2c39ce 100644 --- a/projects/minerswap/index.js +++ b/projects/minerswap/index.js @@ -1,3 +1,6 @@ const { uniTvlExport } = require('../helper/unknownTokens') +module.exports.hallmarks=[ + [1668124800, "Rug Pull"] +], module.exports = uniTvlExport('ethpow', '0x91836d77af0a5fda36c5a1f3c11dbc7766de4d03', undefined, undefined, { useDefaultCoreAssets: true, hasStablePools: true, }) diff --git a/projects/minerva/index.js b/projects/minerva/index.js new file mode 100644 index 0000000000..1dcc93e636 --- /dev/null +++ b/projects/minerva/index.js @@ -0,0 +1,9 @@ +const {staking} = require('../helper/staking') +const { gmxExports } = require('../helper/gmx') + +module.exports = { + optimism: { + staking: staking('0x21563764f5641ffcb89f25560644e39947b21be0', '0xE4d8701C69b3B94A620ff048e4226C895b67b2c0'), + tvl: gmxExports({ vault: '0x7EF6f8abAc00689e057C9ec14E34aC232255a2fb', }) + } +} \ No newline at end of file diff --git a/projects/miningtycoon/index.js b/projects/miningtycoon/index.js index 8190d02a52..a4fa748146 100644 --- a/projects/miningtycoon/index.js +++ b/projects/miningtycoon/index.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const tokenFarm = '0xBdfbeecF52bCfF5aa8cc1B8A4B737B2Af3D1BA2F'; const tokenFarm2 = '0x8A6AE8076A1866877e006cC9b4bd0378646A9bD5'; const NTToken = '0x8b70512b5248e7c1f0f6996e2fde2e952708c4c9'; -const USDTToken = '0xa71edc38d189767582c38a3145b5873052c3e47a'; +const USDTToken = ADDRESSES.heco.USDT; const bsc_tokenFarm = '0xA05Cbf21620553Ade9a3368f1b20D81eEe74a1FC'; const bsc_tokenFarm2 = '0x973fEAf394F5E882B0F8a9B5CDC0b3E28AA08926'; const bsc_NTToken = '0xfbcf80ed90856AF0d6d9655F746331763EfDb22c'; -const bsc_USDTToken = '0x55d398326f99059fF775485246999027B3197955'; +const bsc_USDTToken = ADDRESSES.bsc.USDT; async function tvl(timestamp, ethBlock, chainBlocks) { let balances = {}; diff --git a/projects/minipanther/index.js b/projects/minipanther/index.js index ed3cad3994..938a01f152 100644 --- a/projects/minipanther/index.js +++ b/projects/minipanther/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0xBc461eA008c586a1721c6bF6a712f38e199A3Ce7" @@ -5,11 +6,11 @@ const miniPantherToken = "0x3264810174f577F82DDD4FD08818F368AC363505" const stakingAddress = "0x7dc10Ade8599bf5033577F60C6740479aa39DB41" const treasuryTokens = [ ["0x9cbccdaf10153edd092817a013470a0693852a77", false], //PantherUSD - ["0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", false], //WFTM + [ADDRESSES.fantom.WFTM, false], //WFTM ["0x321162Cd933E2Be498Cd2267a90534A804051b11", false], //WBTC ["0x74b23882a30290451A17c44f4F05243b6b58C76d", false], //WETH - ["0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", false], //DAI - ["0x82f0b8b456c1a451378467398982d4834b6829c1", false], //MIM + [ADDRESSES.fantom.DAI, false], //DAI + [ADDRESSES.fantom.MIM, false], //MIM ["0x761D6a950c8F441D616f34d6D918230936a3F27b", true], //MiniPanther-DAI ] diff --git a/projects/minmax-finance/index.js b/projects/minmax-finance/index.js index a989579b0f..30f9052021 100644 --- a/projects/minmax-finance/index.js +++ b/projects/minmax-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs'); const MINMAX_B3_POOL = '0x09A1B7d922BcfECa097b06498Bc992A83b0BCc42'; @@ -14,27 +15,27 @@ const MINMAX_XIM_M3_METAPOOL = '0x7B24cAA6a497bc79FDfBAeb8A71a38F15eB3d7F7'; const tokens = { // BUSD - '0xacee9b11cd4b3f57e58880277ac72c8c41abe4e4':[MINMAX_E4_POOL, MINMAX_XIM_E3_POOL], // decimal: 18 + [ADDRESSES.iotex.ioBUSD]:[MINMAX_E4_POOL, MINMAX_XIM_E3_POOL], // decimal: 18 // USDC - '0x3B2bf2b523f54C4E454F08Aa286D03115aFF326c':[MINMAX_E4_POOL, MINMAX_XIM_E3_POOL, MINMAX_E3_POOL, MINMAX_XIM_E3_METAPOOL], // decimal: 6 + [ADDRESSES.iotex.ioUSDC]:[MINMAX_E4_POOL, MINMAX_XIM_E3_POOL, MINMAX_E3_POOL, MINMAX_XIM_E3_METAPOOL], // decimal: 6 // USDT - '0x6fbCdc1169B5130C59E72E51Ed68A84841C98cd1':[MINMAX_E4_POOL, MINMAX_USDT_POOL, MINMAX_XIM_E3_POOL, MINMAX_E3_POOL, MINMAX_XIM_E3_METAPOOL], // decimal: 6 + [ADDRESSES.iotex.ioUSDT]:[MINMAX_E4_POOL, MINMAX_USDT_POOL, MINMAX_XIM_E3_POOL, MINMAX_E3_POOL, MINMAX_XIM_E3_METAPOOL], // decimal: 6 // DAI - '0x1CbAd85Aa66Ff3C12dc84C5881886EEB29C1bb9b':[MINMAX_E4_POOL, MINMAX_E3_POOL, MINMAX_XIM_E3_METAPOOL], // decimal: 18 + [ADDRESSES.iotex.ioDAI]:[MINMAX_E4_POOL, MINMAX_E3_POOL, MINMAX_XIM_E3_METAPOOL], // decimal: 18 // BUSD_b - '0x84abcb2832be606341a50128aeb1db43aa017449':[MINMAX_B3_POOL, MINMAX_XIM_B3_POOL, MINMAX_XIM_B3_METAPOOL], // decimal: 18 + [ADDRESSES.iotex.BUSD_bsc]:[MINMAX_B3_POOL, MINMAX_XIM_B3_POOL, MINMAX_XIM_B3_METAPOOL], // decimal: 18 // USDC_b - '0x037346E5a5722957Ac2cAb6ceb8c74fC18Cea91D':[MINMAX_B3_POOL, MINMAX_XIM_B3_POOL, MINMAX_XIM_B3_METAPOOL], // decimal: 18 + [ADDRESSES.iotex.USDC_b]:[MINMAX_B3_POOL, MINMAX_XIM_B3_POOL, MINMAX_XIM_B3_METAPOOL], // decimal: 18 // USDT_b - '0x42C9255D5e522e83B16ea11a3BA04c2D3AfCA079':[MINMAX_B3_POOL, MINMAX_USDT_POOL, MINMAX_XIM_B3_POOL, MINMAX_XIM_B3_METAPOOL], // decimal: 18 + [ADDRESSES.iotex.USDT_b]:[MINMAX_B3_POOL, MINMAX_USDT_POOL, MINMAX_XIM_B3_POOL, MINMAX_XIM_B3_METAPOOL], // decimal: 18 // DAI_m - '0x62a9d987cbf4c45a550deed5b57b200d7a319632':[MINMAX_M3_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_M3_METAPOOL], // decimal: 18 + [ADDRESSES.iotex.DAI_matic]:[MINMAX_M3_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_M3_METAPOOL], // decimal: 18 // USDT_m - '0x3cdb7c48e70b854ed2fa392e21687501d84b3afc':[MINMAX_M3_POOL, MINMAX_USDT_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_M3_METAPOOL], // decimal: 6 + [ADDRESSES.iotex.USDT_matic]:[MINMAX_M3_POOL, MINMAX_USDT_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_M3_METAPOOL], // decimal: 6 // USDC_m - '0xc04da3a99d17135857bb937d2fbb321d3b6c6a81':[MINMAX_M3_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_M3_METAPOOL], // decimal: 6 + [ADDRESSES.iotex.USDC_matic]:[MINMAX_M3_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_M3_METAPOOL], // decimal: 6 // XIM - '0xec690cdd448e3cbb51ed135df72301c3265a8f80': [MINMAX_XIM_B3_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_E3_POOL, MINMAX_XIM_E3_METAPOOL, MINMAX_XIM_B3_METAPOOL, MINMAX_XIM_M3_METAPOOL] // decimal: 6 + [ADDRESSES.iotex.XIM]: [MINMAX_XIM_B3_POOL, MINMAX_XIM_M3_POOL, MINMAX_XIM_E3_POOL, MINMAX_XIM_E3_METAPOOL, MINMAX_XIM_B3_METAPOOL, MINMAX_XIM_M3_METAPOOL] // decimal: 6 }; async function tvl(_, _b, {iotex: block}) { diff --git a/projects/minotaur-money/index.js b/projects/minotaur-money/index.js index 3f47ab1e19..ea0fd70eaf 100644 --- a/projects/minotaur-money/index.js +++ b/projects/minotaur-money/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const mino = "0x3A1138075bd97a33F23A87824b811146FA44288E"; @@ -8,7 +9,7 @@ const tokens = [ ["0xf2001b145b43032aaf5ee2884e456ccd805f677d", false], // DAI ["0xf5a5f547612e95c688971fb68334a80ceb3c542b", true], // MINO-DAI ["0x1c139f4b953ce0c0f6aa1cd1755727ad5aba5080", true], // MINO-WCRO - ["0x062e66477faf219f25d27dced647bf57c3107d52", false], // WBTC + [ADDRESSES.cronos.WBTC, false], // WBTC ["0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", false], // WCRO ["0xe44fd7fcb2b1581822d0c862b68222998a0c299a", false] // WETH ]; @@ -17,7 +18,7 @@ module.exports = { misrepresentedTokens: true, ...ohmTvl(treasury, tokens, "cronos", staking, mino, addr=>{ if (addr.toLowerCase() === "0xe6052a9a4c0a2f14adc9876a3a1a7b2882f5f139") { - return "0x0000000000085d4780b73119b644ae5ecd22b376" + return ADDRESSES.ethereum.TUSD } return `cronos:${addr}` }, undefined, false) diff --git a/projects/minswap/index.js b/projects/minswap/index.js index 3ade807887..2d53b7b01a 100644 --- a/projects/minswap/index.js +++ b/projects/minswap/index.js @@ -1,14 +1,20 @@ const { getAdaInAddress } = require("../helper/chain/cardano"); +const { getConfig } = require('../helper/cache') async function tvl() { - const liquidityPoolLocked = await getAdaInAddress("addr1z8snz7c4974vzdpxu65ruphl3zjdvtxw8strf2c2tmqnxz2j2c79gy9l76sdg0xwhd7r0c0kna0tycz4y5s6mlenh8pq0xmsha") - const batchOrderLocked = - (await getAdaInAddress( - "addr1wxn9efv2f6w82hagxqtn62ju4m293tqvw0uhmdl64ch8uwc0h43gt" - )) + - (await getAdaInAddress( - "addr1zxn9efv2f6w82hagxqtn62ju4m293tqvw0uhmdl64ch8uw6j2c79gy9l76sdg0xwhd7r0c0kna0tycz4y5s6mlenh8pq6s3z70" - )); + const res = await getConfig("minswap", "https://api-mainnet-prod.minswap.org/dex-addresses") + const poolAddresses = res.pools + const orderAddresses = res.orders + let liquidityPoolLocked = 0 + for (const addr of poolAddresses) { + const adaLocked = await getAdaInAddress(addr) + liquidityPoolLocked += adaLocked + } + let batchOrderLocked = 0 + for (const addr of orderAddresses) { + const adaLocked = await getAdaInAddress(addr) + batchOrderLocked += adaLocked + } return { cardano: (liquidityPoolLocked * 2) + batchOrderLocked, }; diff --git a/projects/mirrosset/index.js b/projects/mirrosset/index.js index f3d7f10051..d71954349e 100644 --- a/projects/mirrosset/index.js +++ b/projects/mirrosset/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { nullAddress, sumTokensExport } = require('../helper/unwrapLPs') -const USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f" +const USDC = ADDRESSES.telos.ETH const mUSDC = "0x79568bEfa9bF339e76bE12813cf7430018E1AB58" const MortgagePool = "0xA6d5df932FFE35810389e00D1A3a698a44A14E85" const InsurancePool = "0x587Abb291379Ea84AcE583aB07A13109b9B3F347" diff --git a/projects/mm-finance-arbitrum-v3/index.js b/projects/mm-finance-arbitrum-v3/index.js index a0755b2cd2..12ac490f56 100644 --- a/projects/mm-finance-arbitrum-v3/index.js +++ b/projects/mm-finance-arbitrum-v3/index.js @@ -4,6 +4,5 @@ module.exports = uniV3Export({ arbitrum: { factory: "0x947bc57CEFDd22420C9a6d61387FE4D4cf8A090d", fromBlock: 72404739, - isAlgebra: false, }, }); diff --git a/projects/mm-stableswap-polygon/index.js b/projects/mm-stableswap-polygon/index.js index 064fa622cd..863c32dff7 100644 --- a/projects/mm-stableswap-polygon/index.js +++ b/projects/mm-stableswap-polygon/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require('../helper/unwrapLPs') const pools = { '3MM Basepool': { owner: '0x690BBaa9EDBb762542FD198763092eaB2B2A5350', tokens: [ - '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', // USDT - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC - '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI + ADDRESSES.polygon.USDT, // USDT + ADDRESSES.polygon.USDC, // USDC + ADDRESSES.polygon.DAI, // DAI ] } } diff --git a/projects/mm-stableswap/index.js b/projects/mm-stableswap/index.js index e8c2f7d340..6a9e1175c4 100644 --- a/projects/mm-stableswap/index.js +++ b/projects/mm-stableswap/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const MM3BasePool = "0x61bB2F4a4763114268a47fB990e633Cb40f045F8"; const DAI = "0xF2001B145b43032AAF5Ee2884e456CCd805F677D"; -const USDT = "0x66e428c3f67a68878562e79A0234c1F83c208770"; -const USDC = "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59"; +const USDT = ADDRESSES.cronos.USDT; +const USDC = ADDRESSES.cronos.USDC; async function tvl(timestamp, block, chainBlocks) { diff --git a/projects/mobius/index.js b/projects/mobius/index.js index 4adf8e6277..dab40934c3 100644 --- a/projects/mobius/index.js +++ b/projects/mobius/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') let pools = [ @@ -5,7 +6,7 @@ let pools = [ "name": "USDC (Portal)", "address": "0xc0ba93d4aaf90d39924402162ee4a213300d1d60", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0x37f750B7cC259A2f741AF45294f6a16572CF5cAd" ], "lp": "0xe10fd4788a76d19ba0110b1bfda5e13d35ed4359" @@ -14,7 +15,7 @@ let pools = [ "name": "Staked CELO", "address": "0xebf0536356256f8ff2a5eb6c65800839801d8b95", "tokens": [ - "0x471EcE3750Da237f93B8E339c536989b8978a438", + ADDRESSES.celo.CELO, "0xC668583dcbDc9ae6FA3CE46462758188adfdfC24" ], "lp": "0x4730ff6bc3008a40cf74d660d3f20d5b51646da3" @@ -23,8 +24,8 @@ let pools = [ "name": "UST (Allbridge)", "address": "0x9f4adbd0af281c69a582eb2e6fa2a594d4204cae", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0xEd193C4E69F591E42398eF54DEa65aa1bb02835c" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.atUST ], "lp": "0x9438e7281d7e3e99a9dd21e0ead9c6a254e17ab2" }, @@ -41,7 +42,7 @@ let pools = [ "name": "USDC (Optics V2)", "address": "0x9906589ea8fd27504974b7e8201df5bbde986b03", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0xef4229c8c3250C675F21BCefa42f58EfbfF6002a" ], "lp": "0x39b6f09ef97db406ab78d869471adb2384c494e3" @@ -50,8 +51,8 @@ let pools = [ "name": "DAI (Optics V2)", "address": "0xf3f65dfe0c8c8f2986da0fec159abe6fd4e700b4", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0x90Ca507a5D4458a4C6C6249d186b6dCb02a5BCCd" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.DAI ], "lp": "0x274dd2df039f1f6131419c82173d97770e6af6b7" }, @@ -60,7 +61,7 @@ let pools = [ "address": "0xaefc4e8cf655a182e8346b24c8abce45616ee0d2", "tokens": [ "0xD629eb00dEced2a080B7EC630eF6aC117e614f1b", - "0xBAAB46E28388d2779e6E31Fd00cF0e5Ad95E327B" + ADDRESSES.celo.WBTC ], "lp": "0x20d7274c5af4f9de6e8c93025e44af3979d9ab2b" }, @@ -68,7 +69,7 @@ let pools = [ "name": "pUSDC (Optics V2)", "address": "0xcce0d62ce14fb3e4363eb92db37ff3630836c252", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0x1bfc26cE035c368503fAE319Cc2596716428ca44" ], "lp": "0x68b239b415970dd7a5234a9701cbb5bfab544c7c" @@ -77,8 +78,8 @@ let pools = [ "name": "USDC (Optics V1)", "address": "0xa5037661989789d0310ac2b796fa78f1b01f195d", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0x2A3684e9Dc20B857375EA04235F2F7edBe818FA7" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.USDC ], "lp": "0xd7bf6946b740930c60131044bd2f08787e1ddbd4" }, @@ -86,8 +87,8 @@ let pools = [ "name": "aaUSDC (Allbridge)", "address": "0x0986b42f5f9c42feeef66fc23eba9ea1164c916d", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0xb70e0a782b058BFdb0d109a3599BEc1f19328E36" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.aaUSDC ], "lp": "0x730e677f39c4ca96012c394b9da09a025e922f81" }, @@ -95,7 +96,7 @@ let pools = [ "name": "Poof cUSD V2", "address": "0xa2f0e57d4ceacf025e81c76f28b9ad6e9fbe8735", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0xEadf4A7168A82D30Ba0619e64d5BCf5B30B45226" ], "lp": "0x07e137e5605e15c93f22545868fa70cecfcbbffe" @@ -104,7 +105,7 @@ let pools = [ "name": "Poof CELO V2", "address": "0xfc9e2c63370d8deb3521922a7b2b60f4cff7e75a", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0x301a61D01A63c8D670c2B8a43f37d12eF181F997" ], "lp": "0xaffd8d6b5e5a0e25034dd3d075532f9ce01c305c" @@ -122,7 +123,7 @@ let pools = [ "name": "Poof cUSD V1", "address": "0x02db089fb09fda92e05e92afcd41d9aafe9c7c7c", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0xB4aa2986622249B1F45eb93F28Cfca2b2606d809" ], "lp": "0x18d71b8664e69d6dd61c79247dbf12bfaaf66c10" @@ -131,8 +132,8 @@ let pools = [ "name": "asUSDC (Allbridge)", "address": "0x63c1914bf00a9b395a2bf89aada55a5615a3656e", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0xCD7D7Ff64746C1909E44Db8e95331F9316478817" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.asUSDC ], "lp": "0xafee90ab6a2d3b265262f94f6e437e7f6d94e26e" }, @@ -140,7 +141,7 @@ let pools = [ "name": "pUSDC (Optics V1)", "address": "0x2080aaa167e2225e1fc9923250ba60e19a180fb2", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0xcC82628f6A8dEFA1e2B0aD7ed448bef3647F7941" ], "lp": "0xf5b454cf47caca418d95930aa03975ee4bf409bc" @@ -167,8 +168,8 @@ let pools = [ "name": "USDT (Moss)", "address": "0xdbf27fd2a702cc02ac7acf0aea376db780d53247", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0xcFFfE0c89a779c09Df3DF5624f54cDf7EF5fDd5D" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.cUSDT ], "lp": "0xc7a4c6ef4a16dc24634cc2a951ba5fec4398f7e0" }, @@ -176,8 +177,8 @@ let pools = [ "name": "USDC (Moss)", "address": "0x0ff04189ef135b6541e56f7c638489de92e9c778", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", - "0x93DB49bE12B864019dA9Cb147ba75cDC0506190e" + ADDRESSES.celo.cUSD, + ADDRESSES.celo.cUSDC ], "lp": "0x635aec36c4b61bac5eb1c3eee191147d006f8a21" }, @@ -185,7 +186,7 @@ let pools = [ "name": "Poof Celo V1", "address": "0x413ffcc28e6cdde7e93625ef4742810fe9738578", "tokens": [ - "0x471EcE3750Da237f93B8E339c536989b8978a438", + ADDRESSES.celo.CELO, "0xE74AbF23E1Fdf7ACbec2F3a30a772eF77f1601E1" ], "lp": "0x4d6b17828d0173668e8eb730106444556a98c0f9" @@ -212,7 +213,7 @@ let pools = [ "name": "cUSD (Mento 1:1 Pool)", "address": "0xfa3df877f98ac5ecd87456a7accaa948462412f0", "tokens": [ - "0x765DE816845861e75A25fCA122bb6898B8B1282a", + ADDRESSES.celo.cUSD, "0x37f750B7cC259A2f741AF45294f6a16572CF5cAd" ], "lp": "0x552b9aa0eee500c60f09456e49fbc1096322714c" diff --git a/projects/mobiusfinance/index.js b/projects/mobiusfinance/index.js index 7932a96d46..ce29bcbbc2 100644 --- a/projects/mobiusfinance/index.js +++ b/projects/mobiusfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const formatBytes32String = require('ethers').utils.formatBytes32String; const { sumTokens, } = require('../helper/unwrapLPs') const { transformPolygonAddress } = require('../helper/portedTokens') @@ -11,7 +12,7 @@ const ResolverJson = { const sdk = require('@defillama/sdk') const chain = 'polygon' -const nullAddr = "0x0000000000000000000000000000000000000000" +const nullAddr = ADDRESSES.null const motToken = '0x2db0Db271a10661e7090b6758350E18F6798a49D' async function tvl(ts, _block, { polygon: block }) { diff --git a/projects/mobox.js b/projects/mobox.js index 8304980de5..7a32d426d4 100644 --- a/projects/mobox.js +++ b/projects/mobox.js @@ -1,47 +1,18 @@ -const sdk = require("@defillama/sdk"); -const { unwrapUniswapLPs } = require("./helper/unwrapLPs"); -const abi = require("./pendle/abi.json"); -const { stakings } = require("./helper/staking.js"); - -async function pool2(timestamp, block, chainBlocks) { - const balances = {}; - - const masterChefDeposits = await sdk.api.abi.call({ - target: "0x73feaa1ee314f8c655e354234017be2193c9e24e", - abi: abi.userInfo, - params: [405, "0x9442dad1df11c858a900f55291dc1cf645ff66df"], - block: chainBlocks.bsc, - chain: "bsc", - }); - - await unwrapUniswapLPs( - balances, - [ - { - balance: masterChefDeposits.output.amount, - token: "0x8FA59693458289914dB0097F5F366d771B7a7C3F", - }, - ], - chainBlocks.bsc, - "bsc", - (a) => `bsc:${a}` - ); - - return balances; -} +const { stakings, staking } = require("./helper/staking.js"); +const { pool2 } = require("./helper/pool2.js"); module.exports = { bsc: { tvl: () => ({}), - pool2, + pool2: pool2(['0xdad49e63f97c967955975490a432de3796c699e6','0xa5f8c5dbd5f286960b9d90548680ae5ebff07652'], '0x8FA59693458289914dB0097F5F366d771B7a7C3F'), staking: stakings( [ "0xdad49e63f97c967955975490a432de3796c699e6", "0xf8c1bA88F1E4aeD152F945F1Df2a8fdc36127B5f", "0x3bD6a582698ECCf6822dB08141818A1a8512c68D", + "0x5E7Eb57B163b78e93608E773e0F4a88A55d7C28F", ], "0x3203c9e46ca618c8c1ce5dc67e7e9d75f5da2377", - "bsc" ), }, }; diff --git a/projects/mojitoswap/index.js b/projects/mojitoswap/index.js index 2ec6c36d45..9d024d674c 100644 --- a/projects/mojitoswap/index.js +++ b/projects/mojitoswap/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { stakings } = require('../helper/staking') const masterchefAddress = "0x25c6d6a65c3ae5d41599ba2211629b24604fea4f"; const masterchefV2Address = "0xfdfcE767aDD9dCF032Cbd0DE35F0E57b04495324"; -const mjtAddress = "0x2ca48b4eea5a731c2b54e7c3944dbdb87c0cfb6f"; +const mjtAddress = ADDRESSES.kcc.MJT; module.exports = { misrepresentedTokens: true, diff --git a/projects/mole/index.js b/projects/mole/index.js index 09d1611ee2..45b82448d7 100644 --- a/projects/mole/index.js +++ b/projects/mole/index.js @@ -1,23 +1,27 @@ -const { calLyfTvlAptos } = require("./lyf"); -const { calLyfTvl } = require("./lyf"); +const { calLyfTvl, calLyfTvlAptos, calLyfTvlSui } = require("./lyf"); const { calxMOLEtvl } = require('./xmole'); +// async function avaxTvl(timestamp, ethBlock, chainBlocks) { +// const lyfTvl = await calLyfTvl('avax', chainBlocks.avax); +// return {...lyfTvl}; +// } -async function avaxTvl(timestamp, ethBlock, chainBlocks) { - const lyfTvl = await calLyfTvl('avax', chainBlocks.avax); - return {...lyfTvl}; -} - -async function avaxStaking(timestamp, ethBlock, chainBlocks) { - return await calxMOLEtvl('avax', chainBlocks.avax); -} +// async function avaxStaking(timestamp, ethBlock, chainBlocks) { +// return await calxMOLEtvl('avax', chainBlocks.avax); +// } async function aptosTvl() { const lyfTvl = await calLyfTvlAptos() return {...lyfTvl}; } -// node test.js projects/mole/index.js +async function suiTvl() { + const { api } = arguments[3] + + return calLyfTvlSui(api) +} + +// run command: node test.js projects/mole/index.js module.exports = { timetravel: false, start: 1653840000, @@ -27,5 +31,8 @@ module.exports = { // }, aptos: { tvl: aptosTvl + }, + sui: { + tvl: suiTvl } }; diff --git a/projects/mole/lyf.js b/projects/mole/lyf.js index 4e51272873..966b803e48 100644 --- a/projects/mole/lyf.js +++ b/projects/mole/lyf.js @@ -5,28 +5,39 @@ const { coreTokens } = require("../helper/chain/aptos"); const { getResources } = require("../helper/chain/aptos"); const { getConfig } = require('../helper/cache') const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); +const sui = require('../helper/chain/sui') const { transformBalances } = require("../helper/portedTokens"); +const { i32BitsToNumber } = require("./utils") async function getProcolAddresses(chain) { - if (chain === 'avax') { + // if (chain === 'avax') { + // return ( + // await getConfig('mole/'+chain, + // "https://raw.githubusercontent.com/Mole-Fi/mole-protocol/main/.avalanche_mainnet.json" + // ) + // ); + // } + + if (chain === 'aptos') { return ( - await getConfig('mole/'+chain, - "https://raw.githubusercontent.com/Mole-Fi/mole-protocol/main/.avalanche_mainnet.json" + await getConfig('mole/' + chain, + "https://raw.githubusercontent.com/Mole-Fi/mole-protocol/main/.aptos_mainnet.json" ) ); - }else if(chain === 'aptos') { + } else if (chain === 'sui') { return ( - await getConfig('mole/'+chain, - "https://raw.githubusercontent.com/Mole-Fi/mole-protocol/main/.aptos_mainnet.json" + await getConfig('mole/' + chain, + "https://raw.githubusercontent.com/Mole-Fi/mole-protocol/main/.sui_mainnet.json" ) ); } } +// avax async function calLyfTvl(chain, block) { /// @dev Initialized variables const balances = {}; - const transform = addr => 'avax:'+addr + const transform = addr => 'avax:' + addr /// @dev Getting all addresses from Github const addresses = await getProcolAddresses(chain); @@ -93,6 +104,7 @@ async function calLyfTvl(chain, block) { return balances; } +// aptos async function calLyfTvlAptos() { /// @dev Initialized variables const balances = {}; @@ -113,18 +125,18 @@ async function calLyfTvlAptos() { /// @dev unwrap LP to get underlaying token balances for workers that are working with LPs await unwrapPancakeSwapLps({ - balances, - lps, - account: '0xc7efb4076dbe143cbcd98cfaaa929ecfc8f299203dfff63b95ccb6bfe19850fa', - poolStr: 'swap::TokenPairReserve', - token0Reserve: i => i.data.reserve_x, - token1Reserve: i => i.data.reserve_y + balances, + lps, + account: '0xc7efb4076dbe143cbcd98cfaaa929ecfc8f299203dfff63b95ccb6bfe19850fa', + poolStr: 'swap::TokenPairReserve', + token0Reserve: i => i.data.reserve_x, + token1Reserve: i => i.data.reserve_y }) /// @dev getting all unused liquidity on each vault resources.filter(i => i.type.includes("vault::VaultInfo")) .map(i => { - const token = i.type.split('<')[1].replace('>',''); + const token = i.type.split('<')[1].replace('>', ''); sdk.util.sumSingleBalance(balances, token, new BigNumber(i.data.coin.value).minus(i.data.reserve_pool).toFixed(0)) }) @@ -137,7 +149,7 @@ function sumPancakeWorkerStakingLps(resources, lps, workers) { i.type.includes("pancake_worker::WorkerInfo") || i.type.includes("delta_neutral_pancake_asset_worker::WorkerInfo") || i.type.includes("delta_neutral_pancake_stable_worker::WorkerInfo") - ) && workers[i.type.split('::',1)[0]] + ) && workers[i.type.split('::', 1)[0]] ) workerInfos.forEach(i => { @@ -146,7 +158,7 @@ function sumPancakeWorkerStakingLps(resources, lps, workers) { const lp = lpWithSuffix.substr(0, lpWithSuffix.length - 1); const amount = new BigNumber(i.data.total_balance ?? i.data.total_lp_balance) - if(lps[lp] === undefined) { + if (lps[lp] === undefined) { lps[lp] = { amount: amount } } else { lps[lp].amount = lps[lp].amount.plus(amount); @@ -162,13 +174,13 @@ async function unwrapPancakeSwapLps({ token0Reserve = i => i.data.coin_x_reserve.value, token1Reserve = i => i.data.coin_y_reserve.value, getTokens = i => i.type.split('<')[1].replace('>', '').split(', ') -}){ +}) { const coinInfos = {} const lpReserves = {} for (const lpType in lps) { - if(lps.hasOwnProperty(lpType)){ + if (lps.hasOwnProperty(lpType)) { coinInfos[`0x1::coin::CoinInfo<${lpType}>`] = lpType; - const tokens = getTokens({type: lpType}) + const tokens = getTokens({ type: lpType }) lpReserves[`${account}::${poolStr}<${tokens[0]}, ${tokens[1]}>`] = lpType; } } @@ -176,7 +188,7 @@ async function unwrapPancakeSwapLps({ let pools = await getResources(account); let lpInfos = pools; pools = pools.filter((i) => { - if(!i.type.includes(poolStr)){ + if (!i.type.includes(poolStr)) { return false } @@ -185,7 +197,7 @@ async function unwrapPancakeSwapLps({ }); lpInfos.forEach(i => { const lpType = coinInfos[i.type]; - if(lpType){ + if (lpType) { lps[lpType].totalSupply = new BigNumber(i.data.supply.vec[0].integer.vec[0].value) } }); @@ -215,8 +227,88 @@ async function unwrapPancakeSwapLps({ }) } +// sui +async function calLyfTvlSui(api) { + + // calculate the Farming TVL. + + /// @dev Getting all resources + const addresses = await getProcolAddresses('sui'); + const workerInfoIds = addresses.Vaults.flatMap(valut => valut.workers).map(worker => worker.workerInfo) + const workerInfos = await sui.getObjects(workerInfoIds) + + let poolIds = [] + workerInfos.forEach(workerInfo => { + let poolId = workerInfo.fields.position_nft.fields.pool + // poolId = poolId.replace('0x0', '0x') + if (!poolIds.includes(poolId)) { + poolIds.push(poolId) + } + } + ) + + const poolInfos = await sui.getObjects(poolIds) + let poolMap = new Map() + poolInfos.forEach(poolInfo => { + // const poolId = poolInfo.fields.id.id.replace('0x0', '0x') + poolMap.set(poolInfo.fields.id.id, poolInfo) + } + ) + + workerInfos.forEach(workerInfo => { + let poolId = workerInfo.fields.position_nft.fields.pool + + let coinAamount = 0 + let coinBamount = 0 + computeCLMMPositionBalances() + + const [coinA, coinB] = poolMap.get(poolId).type.replace('>', '').split('<')[1].split(', ') + api.add(coinA, coinAamount) + api.add(coinB, coinBamount) + + // code copied from uni v3 NFT resolver + function computeCLMMPositionBalances() { + const tickToPrice = (tick) => 1.0001 ** tick + + const liquidity = workerInfo.fields.position_nft.fields.liquidity + const tickLowerIndex = i32BitsToNumber(workerInfo.fields.position_nft.fields.tick_lower_index.fields.bits) + const tickUpperIndex = i32BitsToNumber(workerInfo.fields.position_nft.fields.tick_upper_index.fields.bits) + const bottomTick = tickLowerIndex + const topTick = tickUpperIndex + const tick = i32BitsToNumber(poolMap.get(poolId).fields.current_tick_index.fields.bits) + const sa = tickToPrice(bottomTick / 2) + const sb = tickToPrice(topTick / 2) + + if (tick < bottomTick) { + coinAamount = liquidity * (sb - sa) / (sa * sb) + } else if (tick < topTick) { + const price = tickToPrice(tick) + const sp = price ** 0.5 + + coinAamount = liquidity * (sb - sp) / (sp * sb) + coinBamount = liquidity * (sp - sa) + } else { + coinBamount = liquidity * (sb - sa) + } + } + } + ) + + // calculate the Vault TVL. + + const vaultInfoIds = addresses.Vaults.map(valut => valut.vaultInfo) + const vaultInfos = await sui.getObjects(vaultInfoIds) + + for (let i = 0; i < vaultInfos.length; i++) { + const baseToken = addresses.Vaults[i].baseToken + const tokenAmount = vaultInfos[i].fields.value.fields.coin + api.add(baseToken, tokenAmount) + } +} + + module.exports = { calLyfTvl, - calLyfTvlAptos + calLyfTvlAptos, + calLyfTvlSui, } - \ No newline at end of file diff --git a/projects/mole/utils.js b/projects/mole/utils.js new file mode 100644 index 0000000000..fc5220af10 --- /dev/null +++ b/projects/mole/utils.js @@ -0,0 +1,12 @@ + +function asIntN(int, bits = 32) { + return Number(BigInt.asIntN(bits, BigInt(int))); +} + +function i32BitsToNumber(v) { + return asIntN(BigInt(v), 32); +} + +module.exports = { + i32BitsToNumber, +} diff --git a/projects/monolend/index.js b/projects/monolend/index.js new file mode 100644 index 0000000000..c38eb994ab --- /dev/null +++ b/projects/monolend/index.js @@ -0,0 +1,6 @@ +const { aaveExports } = require("../helper/aave"); + +module.exports = { + methodology: "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There are multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending.", + polygon: aaveExports('polygon', '0x49Ce0308F3F55955D224453aECe7610b6983c123'), +}; diff --git a/projects/monopoly-finance/index.js b/projects/monopoly-finance/index.js index 9120d5c169..820a5d2a1a 100644 --- a/projects/monopoly-finance/index.js +++ b/projects/monopoly-finance/index.js @@ -1,31 +1,10 @@ -const { default: axios } = require("axios"); const { staking } = require("../helper/staking"); const abi = require("./abi.json"); -const chef = "0x72E4CcEe48fB8FEf18D99aF2965Ce6d06D55C8ba"; -const duo = "0x322F15d4BEDaa20C178fb75b2628663D2dA19736".toLowerCase(); -const ACC_DUO_PRECISION = 1e18; +const { unwrapLPsAuto } = require("../helper/unwrapLPs"); +const chef = "0x2900f5E68cD57b712806f60096514A4D3F772E9D"; +const poly = "0x34772C4D12F288368Aa35AE7bc527A6B2b3e8906".toLowerCase(); +const ACC_POLY_PRECISION = 1e18; -const zyberGammaLps = [ - "0x0adf0161bd2f174d94beadf8dc47f3af9b408627", - "0x282aa43579d2520545f0d927884e79226e269c07", - "0x2e8c115011098cae93dbf8b9662845fa92cc0730", - "0x35ea99ab62bcf7992136558e94fb97c7807fcd6a", - "0x3b3fec6029534e4e794f0cfb58cc64cdd66b90c7", - "0x589369676ed7cee7b6455cadcc951b02b6d10b9b", - "0x5d9648ba8dc63cdbdc1f3101178c5daa9408ed0e", - "0x86cd7fd91f2cfcf264396a4556c139379a5fbc5a", - "0x8ffac5723b0288e80f6fea715dbd98e360b11d6f", - "0x95177b49208fd176724a0058f357c1b69149affd", - "0xa634bb5eb81b3ec6041c68fc77dff2068df33cb4", - "0xaa3522d51448a33682692baccfbefc109d211f65", - "0xb5c335cfaf1769ee02597c6ac2db883f793a020d", - "0xc2be9df80ce62e4258c27b1ffef741adc118b8b0", - "0xd06e6a71121bfd6c1079bd0b4b231a92022953c9", - "0xd53eb268f6f717608c552c470ddc37bb59194593", - "0xd820502864dc8928b40b92e764908a22780a0ffe", - "0xde9b90e239de55baa063ab9fca5e82fb5a8d4042", - "0xea17b00b9fc3ecaf1cb24cc1d5c594146c68a4bc", -]; async function getTokensInMasterChef(time, ethBlock, chainBlocks, { api }) { const poolInfo = await api.fetchList({ lengthAbi: abi.poolLength, @@ -33,63 +12,19 @@ async function getTokensInMasterChef(time, ethBlock, chainBlocks, { api }) { target: chef, }); - const [gammaLpTotalSupply, gammaToken0, gammaToken1, gammaLpReserves] = - await Promise.all([ - api.multiCall({ calls: zyberGammaLps, abi: abi.totalSupply }), - api.multiCall({ calls: zyberGammaLps, abi: abi.token0 }), - api.multiCall({ calls: zyberGammaLps, abi: abi.token1 }), - api.multiCall({ calls: zyberGammaLps, abi: abi.getTotalAmounts }), - ]); - - const tokens = [...gammaToken0, ...gammaToken1] - .flat() - .map((i) => i.toLowerCase()); - const tokensDecimals = await api.multiCall({ - abi: "erc20:decimals", - calls: tokens, - }); - - const gammaLpData = zyberGammaLps.map((lp, i) => { - const supply = gammaLpTotalSupply[i] / 1e18; - const token0 = gammaToken0[i].toLowerCase(); - const token1 = gammaToken1[i].toLowerCase(); - const token0Decimals = tokensDecimals[tokens.indexOf(token0)]; - const token1Decimals = tokensDecimals[tokens.indexOf(token1)]; - - return { - lp, - lpPerToken0: - gammaLpReserves[i].totalAmount0 / (supply * 10 ** token0Decimals), - lpPerToken1: - gammaLpReserves[i].totalAmount1 / (supply * 10 ** token1Decimals), - token0, - token1, - token0Decimals, - token1Decimals, - }; - }); - poolInfo.forEach((pool) => { let { lpToken, totalShares, lpPerShare } = pool; lpToken = lpToken.toLowerCase(); - if (lpToken === duo) { + if (lpToken === poly) { return; } - let bals = (totalShares * lpPerShare) / ACC_DUO_PRECISION; - if (zyberGammaLps.includes(lpToken)) { - const { - token0, - token1, - token0Decimals, - token1Decimals, - lpPerToken0, - lpPerToken1, - } = gammaLpData.find((i) => i.lp === lpToken); - api.add(token0, (bals * lpPerToken0) / 10 ** (18 - token0Decimals)); - api.add(token1, (bals * lpPerToken1) / 10 ** (18 - token1Decimals)); - } else { - api.add(lpToken, bals); - } + let bals = (totalShares * lpPerShare) / ACC_POLY_PRECISION; + api.add(lpToken, bals); + }); + await unwrapLPsAuto({ + api, + lpAddresses: poolInfo.map((p) => p.lpToken), + block: chainBlocks["arbitrum"], }); } module.exports = { @@ -97,6 +32,6 @@ module.exports = { "TVL includes all farms in MasterChef contract, as well as staking pools.", arbitrum: { tvl: getTokensInMasterChef, - staking: staking("0x338f4D8E982de9518d84A40ceD1DD845862A727e", duo), + staking: staking("0xF30489AdB76745BFb201023403B5E1bCcb216354", poly), }, }; diff --git a/projects/monox/index.js b/projects/monox/index.js index 88f1aa6468..c67ebfd3fb 100644 --- a/projects/monox/index.js +++ b/projects/monox/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {sumTokensSharedOwners} = require('../helper/unwrapLPs') async function eth(timestamp, ethBlock, chainBlocks){ @@ -6,10 +7,10 @@ async function eth(timestamp, ethBlock, chainBlocks){ await sumTokensSharedOwners(balances, [ "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", "0x92e187a03b6cd19cb6af293ba17f2745fd2357d5", - "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC ], ["0x59653E37F8c491C3Be36e5DD4D503Ca32B5ab2f4"], ethBlock) return balances } @@ -18,11 +19,11 @@ async function polygon(timestamp, ethBlock, chainBlocks){ const block = chainBlocks.polygon const balances = {} await sumTokensSharedOwners(balances, [ - "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", - "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + ADDRESSES.polygon.WBTC, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.WETH_1, + ADDRESSES.polygon.WMATIC_2, ], ["0x3826367A5563eCE9C164eFf9701146d96cC70AD9"], block, "polygon") return balances } diff --git a/projects/moola/index.js b/projects/moola/index.js index 15d8e9d717..a97c2d72ad 100644 --- a/projects/moola/index.js +++ b/projects/moola/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { aaveChainTvl } = require('../helper/aave') const { singleAssetV1Market } = require('../aave/v1') const sdk = require('@defillama/sdk') const v1PoolCore = "0xAF106F8D4756490E7069027315F4886cc94A8F73" -const gasAsset = "0x471ece3750da237f93b8e339c536989b8978a438" +const gasAsset = ADDRESSES.celo.CELO function lending(borrowed) { return async (timestamp, ethBlock, {celo: block}) => { diff --git a/projects/moondao/index.js b/projects/moondao/index.js index 28eea1e633..475529c8dd 100644 --- a/projects/moondao/index.js +++ b/projects/moondao/index.js @@ -1,11 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0xeC2aE8A3E2692E4b0836AB5cf88104d101DEBEf4" +module.exports.hallmarks=[ + [1639180800,"Rug Pull"] +], module.exports = ohmTvl(treasury, [ //DAI ["0x80a16016cc4a2e6a2caca8a4a498b1699ff0f844", false], //USDC - ["0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", false], + [ADDRESSES.moonriver.USDC, false], //solarbeam LP ["0xdbf638d800190271f5473e76898c6c8e741cba51", true], ], "moonriver", "0x534F861B6BaFdF030E5b469D2d763834163f522f", "0x761cb807bFbF14A4f4bA980f29F43F009F6a18c0") \ No newline at end of file diff --git a/projects/moonswap/onchain.js b/projects/moonswap/onchain.js index 3ca01fdebd..bc5bace50e 100644 --- a/projects/moonswap/onchain.js +++ b/projects/moonswap/onchain.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const factoryAbi = require("../helper/abis/factory.json"); const token0 = 'address:token0' @@ -91,11 +92,11 @@ function getTokenId(address) { switch(address) { case '0x98878b06940ae243284ca214f92bb71a2b032b8a': return ['moonriver', 18] - case '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d': + case [ADDRESSES.moonriver.USDC]: return ['usd-coin', 6] - case '0xb44a9b6905af7c801311e8f4e76932ee959c663c': + case [ADDRESSES.moonriver.USDT]: return ['tether', 6] - case '0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c': + case [ADDRESSES.moonriver.ETH]: return ['ethereum', 18] case '0x5d9ab5522c64e1f6ef5e3627eccc093f56167818': return ['binance-usd', 18] diff --git a/projects/moraswap/index.js b/projects/moraswap/index.js new file mode 100644 index 0000000000..9efe0f8a00 --- /dev/null +++ b/projects/moraswap/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + neon_evm: { + tvl: getUniTVL({ factory: '0xd43F135f6667174f695ecB7DD2B5f953d161e4d1', useDefaultCoreAssets: true }), + } +}; + + diff --git a/projects/moremoney/StakingMetadata.js b/projects/moremoney/StakingMetadata.js index 649ab1c7b6..be3848899b 100644 --- a/projects/moremoney/StakingMetadata.js +++ b/projects/moremoney/StakingMetadata.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null const sdk = require("@defillama/sdk"); const addresses = require("./addresses.json"); diff --git a/projects/moremoney/StrategyMetadata.js b/projects/moremoney/StrategyMetadata.js index 00cf73535e..db7aabaf93 100644 --- a/projects/moremoney/StrategyMetadata.js +++ b/projects/moremoney/StrategyMetadata.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const StrategyViewer = require("./StrategyViewer.json"); const addresses = require("./addresses.json"); @@ -9,11 +10,11 @@ async function useStrategyMetadata(block) { const token2Strat = { ["0xE5e9d67e93aD363a50cABCB9E931279251bBEFd0"]: curAddresses.YieldYakStrategy2, - ["0x152b9d0FdC40C096757F570A51E494bd4b943E50"]: + [ADDRESSES.avax.BTC_b]: curAddresses.YieldYakStrategy2, ["0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE"]: curAddresses.YieldYakStrategy2, - ["0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"]: + [ADDRESSES.avax.WAVAX]: curAddresses.YieldYakAVAXStrategy2, ["0x9e295B5B976a184B14aD8cd72413aD846C299660"]: curAddresses.YieldYakPermissiveStrategy2, @@ -23,11 +24,11 @@ async function useStrategyMetadata(block) { const tokens = Object.keys(token2Strat); const strats = Object.values(token2Strat); - tokens.push("0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"); + tokens.push(ADDRESSES.avax.WAVAX); strats.push(curAddresses.AltYieldYakAVAXStrategy2); - tokens.push("0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"); + tokens.push(ADDRESSES.avax.WAVAX); strats.push(curAddresses.OldYieldYakAVAXStrategy2); - tokens.push("0x152b9d0FdC40C096757F570A51E494bd4b943E50"); + tokens.push(ADDRESSES.avax.BTC_b); strats.push(curAddresses.AltYieldYakStrategy2); tokens.push("0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE"); strats.push(curAddresses.AltYieldYakStrategy2); @@ -52,13 +53,13 @@ async function useLegacyIsolatedStrategyMetadata(block) { curAddresses.YieldYakStrategy, ["0x59414b3089ce2AF0010e7523Dea7E2b35d776ec7"]: curAddresses.YieldYakStrategy, - ["0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd"]: + [ADDRESSES.avax.JOE]: curAddresses.YieldYakStrategy, - ["0xd586e7f844cea2f87f50152665bcbc2c279d8d70"]: + [ADDRESSES.avax.DAI]: curAddresses.YieldYakStrategy, ["0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5"]: curAddresses.YieldYakStrategy, - ["0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664"]: + [ADDRESSES.avax.USDC_e]: curAddresses.YieldYakStrategy, ["0xA389f9430876455C36478DeEa9769B7Ca4E3DDB1"]: curAddresses.YieldYakStrategy, @@ -72,7 +73,7 @@ async function useLegacyIsolatedStrategyMetadata(block) { curAddresses.MultiTraderJoeMasterChef3Strategy, }; // const masterChef2Tokens = [ - // '0x57319d41f71e81f3c65f2a47ca4e001ebafd4f33', + // ADDRESSES.avax.xJOE, // '0xa389f9430876455c36478deea9769b7ca4e3ddb1', // '0xed8cbd9f0ce3c6986b22002f03c6475ceb7a6256', // ].map(getAddress); @@ -83,7 +84,7 @@ async function useLegacyIsolatedStrategyMetadata(block) { //legacy legacyTokens.push("0x454E67025631C065d3cFAD6d71E6892f74487a15"); legacyStrats.push(curAddresses.YieldYakStrategy); - legacyTokens.push("0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd"); + legacyTokens.push(ADDRESSES.avax.JOE); legacyStrats.push(curAddresses.sJoeStrategy); const stratViewer = await sdk.api.abi.call({ diff --git a/projects/moret/index.js b/projects/moret/index.js index 0938e11303..19ab8d9dd6 100644 --- a/projects/moret/index.js +++ b/projects/moret/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') -const markets = ['0xE15A3a1d19a48c0b1dB46C3F69b9A2F258B56963', // ETH pool - '0xDf316b15B0d54C3159Be342377E73C8120e23f92', // BTC pool - '0xe39b7E5F04FCD8abde312E5B7a4c49Ed1C686A49' // GHST pool +const markets = ['0x73917c0b432727Ce608824D1bb5a784ed1a93695', // ETH pool + '0xb0c2E53336106DFA3c3E4DC6A2Df25af0ae2626d', // BTC pool + '0x090015A60a99Fa4551e458E1cb95bE3C381B1C54' // GHST pool ] -const tvlTokens = ['0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', // WETH - '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', // WBTC +const tvlTokens = [ADDRESSES.polygon.WETH_1, // WETH + ADDRESSES.polygon.WBTC, // WBTC '0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7', // GHST - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174' // USDC + ADDRESSES.polygon.USDC // USDC ] module.exports = { diff --git a/projects/morphex/index.js b/projects/morphex/index.js index 89de146681..bc99181130 100644 --- a/projects/morphex/index.js +++ b/projects/morphex/index.js @@ -1,14 +1,24 @@ const { staking } = require("../helper/staking"); const { gmxExports } = require("../helper/gmx"); -const vaultAddress = "0x3CB54f0eB62C371065D739A34a775CC16f46563e"; -const stakingAddress = "0xa4157E273D88ff16B3d8Df68894e1fd809DbC007"; -const tokenAddressMPX = "0x66eEd5FF1701E6ed8470DC391F05e27B1d0657eb"; +// Fantom +const vaultAddressFantom = "0x3CB54f0eB62C371065D739A34a775CC16f46563e"; +const stakingAddressFantom = "0xa4157E273D88ff16B3d8Df68894e1fd809DbC007"; +const tokenAddressMPXFantom = "0x66eEd5FF1701E6ed8470DC391F05e27B1d0657eb"; + +// BNB Chain +const vaultAddressBSC = "0x46940Dc651bFe3F2CC3E04cf9dC5579B50Cf0765"; +const stakingAddressBSC = "0x13d2bBAE955c54Ab99F71Ff70833dE64482519B1"; +const tokenAddressMPXBSC = "0x94C6B279b5df54b335aE51866d6E2A56BF5Ef9b7"; module.exports = { methodology: "Morphex liquidity is calculated by the value of tokens in the MLP pool. TVL also includes MPX staked.", fantom: { - staking: staking(stakingAddress, tokenAddressMPX, "fantom"), - tvl: gmxExports({ vault: vaultAddress }) - } + staking: staking(stakingAddressFantom, tokenAddressMPXFantom, "fantom"), + tvl: gmxExports({ vault: vaultAddressFantom }) + }, + bsc: { + staking: staking(stakingAddressBSC, tokenAddressMPXBSC, "bsc"), + tvl: gmxExports({ vault: vaultAddressBSC }) + }, }; diff --git a/projects/morpho-aave/index.js b/projects/morpho-aave/index.js index 58d61f12e4..20a4f6e9ea 100644 --- a/projects/morpho-aave/index.js +++ b/projects/morpho-aave/index.js @@ -59,10 +59,11 @@ const ethereum = (borrowed) => { module.exports = { timetravel: true, + doublecounted: true, methodology: `Collateral (supply minus borrows) in the balance of the Morpho contracts`, ethereum: { tvl: ethereum(false), borrowed: ethereum(true) } }; -// node test.js projects/morpho-aave/index.js \ No newline at end of file +// node test.js projects/morpho-aave/index.js diff --git a/projects/morpho-aaveV3/addresses.js b/projects/morpho-aaveV3/addresses.js new file mode 100644 index 0000000000..7fc42bd52a --- /dev/null +++ b/projects/morpho-aaveV3/addresses.js @@ -0,0 +1,3 @@ +module.exports = { + morphoAaveV3: "0x33333aea097c193e66081e930c33020272b33333" +} \ No newline at end of file diff --git a/projects/morpho-aaveV3/index.js b/projects/morpho-aaveV3/index.js new file mode 100644 index 0000000000..5e4efce49d --- /dev/null +++ b/projects/morpho-aaveV3/index.js @@ -0,0 +1,60 @@ +const abi = require("../helper/abis/morpho.json"); +const erc20 = require("../helper/abis/erc20.json"); +const {morphoAaveV3} = require("./addresses"); +const BigNumber = require("bignumber.js"); +const fetchMarketsData = require("./markets"); + +const getMetrics = async (api, borrowed) => { + const markets = await api.call({ target: morphoAaveV3, abi: abi.morphoAaveV3.marketsCreated, }); + const marketsData = await fetchMarketsData(markets, api); + const balancesTotalBorrowOnPool = await api.multiCall({ + calls: marketsData.map(({debtToken}) => ({ + target: debtToken, + params: [morphoAaveV3] + })), + abi: erc20.balanceOf + }); + const totalBorrows = marketsData.map(({scaledP2PBorrow, p2pBorrowIndex}, i) => { + const totalBorrowOnPool = balancesTotalBorrowOnPool[i]; + const totalBorrowP2P = BigNumber(scaledP2PBorrow).times(p2pBorrowIndex).div(10**27).toFixed(0); + return BigNumber(totalBorrowOnPool).plus(totalBorrowP2P).toFixed(0); + }); + if (borrowed) { + marketsData.forEach(({underlying}, idx) => { + api.add(underlying, totalBorrows[idx]) + }); + return; + } + + const balancesTotalSupplyOnPool = await api.multiCall({ + calls: marketsData.map(({aToken}) => ({ + target: aToken, + params: [morphoAaveV3] + })), + abi: erc20.balanceOf + }); + marketsData.forEach(({underlying, scaledP2PSupply, p2pSupplyIndex}, idx) => { + const totalBorrow = totalBorrows[idx]; + const totalSupplyOnPool = balancesTotalSupplyOnPool[idx]; + const totalSupplyP2P = BigNumber(scaledP2PSupply).times(p2pSupplyIndex).div(10**27).toFixed(0); + const totalSupply = BigNumber(totalSupplyOnPool).plus(totalSupplyP2P); + const tvl = totalSupply.minus(totalBorrow).toFixed(0); // Through morpho, for a given market, this value can be negative. + api.add(underlying, tvl) + }); +}; + +const ethereum = (borrowed) => { + return async (timestamp, block, _, { api }) => { + return getMetrics(api, borrowed); + }; +}; + +module.exports = { + methodology: `Collateral (supply minus borrows) in the balance of the Morpho contracts`, + doublecounted: true, + ethereum: { + tvl: ethereum(false), + borrowed: ethereum(true) + } +}; +// node test.js projects/morpho-aave/index.js diff --git a/projects/morpho-aaveV3/markets.js b/projects/morpho-aaveV3/markets.js new file mode 100644 index 0000000000..d617f20dcd --- /dev/null +++ b/projects/morpho-aaveV3/markets.js @@ -0,0 +1,17 @@ +const abi = require("../helper/abis/morpho.json"); +const { morphoAaveV3 } = require("./addresses") +module.exports = async (underlyings, api) => (await api.multiCall({ + calls: underlyings, + target: morphoAaveV3, + abi: abi.morphoAaveV3.market +})).map((output, i) => { + return { + aToken: output.aToken, + underlying: underlyings[i], + debtToken: output.variableDebtToken, + scaledP2PSupply: output.deltas.supply.scaledP2PTotal, + scaledP2PBorrow: output.deltas.borrow.scaledP2PTotal, + p2pSupplyIndex: output.indexes.supply.p2pIndex, + p2pBorrowIndex: output.indexes.borrow.p2pIndex, + } +}) \ No newline at end of file diff --git a/projects/morpho/addresses.js b/projects/morpho/addresses.js index 800ce689fb..124146bdad 100644 --- a/projects/morpho/addresses.js +++ b/projects/morpho/addresses.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { morphoCompoundMainnetLens: "0x930f1b46e1d081ec1524efd95752be3ece51ef67", cEth: "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5", - wEth: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + wEth: ADDRESSES.ethereum.WETH } \ No newline at end of file diff --git a/projects/morpho/index.js b/projects/morpho/index.js index f7677f76e5..04edca0d14 100644 --- a/projects/morpho/index.js +++ b/projects/morpho/index.js @@ -62,10 +62,11 @@ const ethereum = (borrowed) => { module.exports = { timetravel: true, + doublecounted: true, methodology: `Collateral (supply minus borrows) in the balance of the Morpho contracts`, ethereum: { tvl: ethereum(false), borrowed: ethereum(true), } }; -// node test.js projects/morpho-compound/index.js \ No newline at end of file +// node test.js projects/morpho-compound/index.js diff --git a/projects/mosquitos-finance/index.js b/projects/mosquitos-finance/index.js index b3fd895e44..a5c8a930b5 100644 --- a/projects/mosquitos-finance/index.js +++ b/projects/mosquitos-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const { default: BigNumber } = require("bignumber.js"); const { getResource, getResources, coreTokens } = require("../helper/chain/aptos"); @@ -136,6 +137,9 @@ async function staking() { } module.exports = { + hallmarks: [ + [1678320000, "Rug Pull"] + ], timetravel: false, aptos: { tvl, diff --git a/projects/move-dollar/index.js b/projects/move-dollar/index.js index 36880178b7..43d9d511f2 100644 --- a/projects/move-dollar/index.js +++ b/projects/move-dollar/index.js @@ -12,6 +12,7 @@ async function _getResources() { } const extractVaultType = resource => resource.type.split('<')[1].replace('>', '').split(', '); const vaultsFilter = resource => resource.type.includes(`${moveDollarAddress}::vault::Vaults<`) +const psmsFilter = resource => resource.type.includes(`${moveDollarAddress}::psm::PSM<`) module.exports = { timetravel: false, @@ -25,10 +26,16 @@ module.exports = { total_collateral: vault.data.total_collateral, asset_type: extractVaultType(vault), })); - + const psms = resources.filter(psmsFilter).map(psm => ({ + total_collateral: psm.data.coin.value, + asset_type: extractVaultType(psm), + })); vaults.forEach(({ asset_type, total_collateral }) => { sdk.util.sumSingleBalance(balances, asset_type, total_collateral); }); + psms.forEach(({ asset_type, total_collateral }) => { + sdk.util.sumSingleBalance(balances, asset_type, total_collateral); + }); return transformBalances("aptos", balances); }, diff --git a/projects/mover/index.js b/projects/mover/index.js index f373146161..9da9737c5f 100644 --- a/projects/mover/index.js +++ b/projects/mover/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const baseLedgerAbi = require("./baseLedgerPoolAbi.json"); const savingsPoolAbi = require("./savingsPoolAbi.json"); @@ -14,8 +15,8 @@ const MOVER_WETH_SLP = "0x87b918e76c92818DB0c76a4E174447aeE6E6D23f"; const savingsPool = "0xAF985437DCA19DEFf89e61F83Cd526b272523719"; const savingsPlusPolygonPool = "0x77D5333d97A092cA01A783468E53E550C379dc3C"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const USDCinPolygon = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; +const USDC = ADDRESSES.ethereum.USDC; +const USDCinPolygon = ADDRESSES.polygon.USDC; const baseLedgerPool = '0x1f15F293C1Cd3d05d58d3EdeAf0C72c5A2dfeaFf'; const UBT = '0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e'; 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/mtgo/index.js b/projects/mtgo/index.js index 3877987625..c15d66462a 100644 --- a/projects/mtgo/index.js +++ b/projects/mtgo/index.js @@ -1,46 +1,14 @@ -const { - sumLPWithOnlyOneTokenOtherThanKnown, -} = require("./../helper/unwrapLPs"); +const { sumTokensExport } = require('../helper/unknownTokens') const lpToken = "0x2a382b6d2dac1cba6e4820fd04e3c2c14e1aa7b2"; const treasuryAddress = "0xdE2957506B6dC883963fbE9cE45a94a8A22c6006"; const mtgoToken = "0x1bc8547e3716680117d7ba26dcf07f2ed9162cd0"; const poolAddress = "0x1781d2e9b4c7c0a3657411a64d2c1dfc50118772"; -const wiotx = "0xA00744882684C3e4747faEFD68D283eA44099D03"; -const erc20Tokens = [ - ["0x1bc8547e3716680117d7ba26dcf07f2ed9162cd0", false], // MTGO -]; - -async function iotexPool2(timestamp, _, {iotex: block}) { - const balances = {}; - await sumLPWithOnlyOneTokenOtherThanKnown( - balances, - lpToken, - poolAddress, - mtgoToken, - block, - "iotex" - ); - return { iotex: (balances[wiotx] / 10 ** 18) }; -} - -async function treasury(timestamp, _, {iotex: block}) { - const balances = {}; - await sumLPWithOnlyOneTokenOtherThanKnown( - balances, - lpToken, - treasuryAddress, - mtgoToken, - block, - "iotex" - ); - return { iotex: (balances[wiotx] / 10 ** 18) }; -} module.exports = { iotex: { tvl: async () => ({}), - pool2: iotexPool2, - treasury, + pool2: sumTokensExport({ tokensAndOwners: [[lpToken, poolAddress]], lps:[lpToken]}), + // treasury: sumTokensExport({ tokensAndOwners: [[lpToken, treasuryAddress]], lps:[lpToken]}), }, }; diff --git a/projects/muesliswap/index.js b/projects/muesliswap/index.js index 0a69c4a057..de09fe0b67 100644 --- a/projects/muesliswap/index.js +++ b/projects/muesliswap/index.js @@ -6,7 +6,10 @@ const { fetchURL } = require('../helper/utils') async function staking() { let totalAda = 0 // Milk locked - const tvlMilk = (await fetchURL("https://staking.muesliswap.com/milk-locked")).data + const tvlMilk = ( + (await fetchURL("https://staking.muesliswap.com/milk-locked")).data + + (await fetchURL("https://staking.muesliswap.com/milk-vault-locked")).data + ) if (tvlMilk.data <= 0) { throw new Error("muesliswap tvl is below 0") } @@ -102,10 +105,6 @@ module.exports = { misrepresentedTokens: true, timetravel: false, methodology: "The factory addresses are used to find the LP pairs on Smart BCH and Milkomeda. For Cardano we calculate the tokens on resting orders on the order book contracts. TVL is equal to the liquidity on the AMM plus the open orders in the order book", - smartbch: { - tvl: getUniTVL({ factory: '0x72cd8c0B5169Ff1f337E2b8F5b121f8510b52117', chain: 'smartbch', useDefaultCoreAssets: true }), - staking: stakingPricedLP("0x4856BB1a11AF5514dAA0B0DC8Ca630671eA9bf56", "0xc8E09AEdB3c949a875e1FD571dC4b3E48FB221f0", "smartbch", "0x599061437d8455df1f86d401FCC2211baaBC632D", "bitcoin-cash", false, 18) - }, cardano: { tvl: adaTvl, staking diff --git a/projects/multialt-stacking/index.js b/projects/multialt-stacking/index.js index 0b284b0043..58f325229a 100644 --- a/projects/multialt-stacking/index.js +++ b/projects/multialt-stacking/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const masterchef = "0xFFd33A71411fbA8B989Eca9F99EE7a908a2dEf4F"; -const token_USDT = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; -const token_USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f"; +const token_USDT = ADDRESSES.moonriver.USDT; +const token_USDC = ADDRESSES.telos.ETH; module.exports = { kava: { diff --git a/projects/multichainMiner.js b/projects/multichainMiner.js index df7e16b6f5..2b58694579 100644 --- a/projects/multichainMiner.js +++ b/projects/multichainMiner.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getChainTransform, getFixBalances } = require("./helper/portedTokens"); const minedTokens = { 'cake': '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82', - 'busd': '0xe9e7cea3dedca5984780bafc599bd69add087d56', - 'matic': '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', - 'ftm': '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', - 'avax': '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', - 'usdc': '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // polygon + 'busd': ADDRESSES.bsc.BUSD, + 'matic': ADDRESSES.polygon.WMATIC_2, + 'ftm': ADDRESSES.fantom.WFTM, + 'avax': ADDRESSES.avax.WAVAX, + 'usdc': ADDRESSES.polygon.USDC, // polygon 'doge': '0xba2ae424d960c26247dd6c32edc70b295c744c43', // bsc - 'eth': '0x2170ed0880ac9a755fd29b2688956bd959f933f8' // bsc + 'eth': ADDRESSES.bsc.ETH // bsc }; const minerContracts = { 'cake': '0xD5d38f1815b4555527DE075a584268E08c5909EA', diff --git a/projects/mummy/index.js b/projects/mummy/index.js index ded3ed0acf..d23f05efe3 100644 --- a/projects/mummy/index.js +++ b/projects/mummy/index.js @@ -10,17 +10,25 @@ const fantomMMY = "0x01e77288b38b416F972428d562454fb329350bAc"; const opVault = "0xA6D7D0e650aa40FFa42d845A354c12c2bc0aB15f"; const opStaking = "0x04f23404553fcc388Ec73110A0206Dd2E76a6d95"; const opMMY = "0x47536f17f4ff30e64a96a7555826b8f9e66ec468"; +//Arbitrum +const arbVault = "0x304951d7172bCAdA54ccAC1E4674862b3d5b3d5b"; +const arbStaking = "0x52cC60893d3Bd8508baAB835620CbF9ddfA0A13C"; +const arbMMY = "0xA6D7D0e650aa40FFa42d845A354c12c2bc0aB15f"; module.exports = { hallmarks: [ [1675242000,"sifu 2M deposit"] ], fantom: { - staking: staking(fantomStaking, fantomMMY, "fantom", fantomMMY, 18), + staking: staking(fantomStaking, fantomMMY, "fantom"), tvl: gmxExports({ vault: fantomVault }) }, optimism: { - staking: staking(opStaking, opMMY, "optimism", fantomMMY, 18), + staking: staking(opStaking, opMMY, "optimism"), tvl: gmxExports({ vault: opVault }) + }, + arbitrum: { + staking: staking(arbStaking, arbMMY, "arbitrum"), + tvl: gmxExports({ vault: arbVault }) } }; diff --git a/projects/mute/index.js b/projects/mute/index.js index 59ef86375b..3b49cd3d2b 100644 --- a/projects/mute/index.js +++ b/projects/mute/index.js @@ -2,7 +2,7 @@ const { getUniTVL } = require('../helper/unknownTokens'); const { sumTokensExport } = require("../helper/unwrapLPs"); const sdk = require("@defillama/sdk"); -const dMUTE_staking_contract = "0xd9Ee4c1e04059D4B0dd02b747282511bEE4E5fB5" +const dMUTE_staking_contract = "0x4336e06Be4F62bD757c4248c48D4C0b32615A2Df" const MUTE = "0x0e97C7a0F8B2C9885C8ac9fC6136e829CbC21d42" async function stakingTVL(timestamp, chain, chainBlocks) { diff --git a/projects/muuu/abi.json b/projects/muuu/abi.json index 39c10b3598..ef0bd55a20 100644 --- a/projects/muuu/abi.json +++ b/projects/muuu/abi.json @@ -4,13 +4,14 @@ "coinsUint": "function coins(uint256 arg0) view returns (address) @2280", "coinsInt": "function coins(int128 arg0) view returns (address out) @2190", "coins": "function coins(uint256 arg0) view returns (address) @2280", - "get_balances": "function get_balances() view returns (uint256[2]) @2284", + "get_balances": "function get_balances(address _pool) view returns (uint256[8]) @2284", "underlying": "address:underlying", "exchangeRateStored": "uint256:exchangeRateStored", "get_underlying_coins": "function get_underlying_coins(address _pool) view returns (address[8]) @12194", "get_pool_from_lp_token": "function get_pool_from_lp_token(address arg0) view returns (address) @2443", - "get_coins": "function get_coins(address _pool) view returns (address[8]) @12102", + "get_coins": "function get_coins(address _pool) view returns (address[8])", "get_underlying_balances": "function get_underlying_balances(address _pool) view returns (uint256[8]) @162842", "get_virtual_price_from_lp_token": "function get_virtual_price_from_lp_token(address _token) view returns (uint256)", + "get_virtual_price": "function get_virtual_price() view returns (uint256)", "lockedSupply": "uint256:lockedSupply" } \ No newline at end of file diff --git a/projects/muuu/index.js b/projects/muuu/index.js index 1cdc2529e8..8e9fe9afc0 100644 --- a/projects/muuu/index.js +++ b/projects/muuu/index.js @@ -3,7 +3,6 @@ const { tvl, staking } = require("./tvl"); const START_BLOCK = 903029; module.exports = { - timetravel: true, misrepresentedTokens: true, start: START_BLOCK, astar: { diff --git a/projects/muuu/tvl.js b/projects/muuu/tvl.js index 1816338c3a..9955b13556 100644 --- a/projects/muuu/tvl.js +++ b/projects/muuu/tvl.js @@ -1,189 +1,62 @@ -const sdk = require("@defillama/sdk"); -const BigNumberJs = require("bignumber.js"); +const ADDRESSES = require("../helper/coreAssets.json"); const ABI = require("./abi.json"); -const { toBigNumberJsOrZero } = require("./utils.js"); +const { staking } = require('../helper/staking') -const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; +const ZERO_ADDRESS = ADDRESSES.null; const REGISTRY_ADDRESS = "0xDA820e20A89928e43794645B9A9770057D65738B"; const BOOSTER_ADDRESS = "0x6d12e3dE6dAcDBa2779C4947c0F718E13b78cfF4"; const MUKGL_ADDRESS = "0x5eaAe8435B178d4677904430BAc5079e73aFa56e"; +const MULAY_ADDRESS = "0xDDF2ad1d9bFA208228166311FC22e76Ea7a4C44D"; +const MUU_TOKEN = "0xc5BcAC31cf55806646017395AD119aF2441Aee37"; const MUUU_REWARDS_ADDRESS = "0xB2ae0CF4819f2BE89574D3dc46D481cf80C7a255"; -const TOKENS = { - // USDC - "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98": - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - // USDT - "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283": - "0xdac17f958d2ee523a2206206994597c13d831ec7", - // DAI - "0x6De33698e9e9b787e09d3Bd7771ef63557E148bb": - "0x6b175474e89094c44da98b954eedeac495271d0f", - // Starlay lUSDC -> USDC - "0xC404E12D3466acCB625c67dbAb2E1a8a457DEf3c": - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - // Starlay lUSDT -> USDT - "0x430D50963d9635bBef5a2fF27BD0bDDc26ed691F": - "0xdac17f958d2ee523a2206206994597c13d831ec7", - // Starlay lDAI -> DAI - "0x4dd9c468A44F3FEF662c35c1E9a6108B70415C2c": - "0x6b175474e89094c44da98b954eedeac495271d0f", - // BUSD - "0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E": - "0x4fabb145d64652a948d72533023f6e7a623c7c53", - // 3KGL -> DAI(TMP) - "0x18BDb86E835E9952cFaA844EB923E470E832Ad58": - "0x6b175474e89094c44da98b954eedeac495271d0f", - // BAI -> DAI(TMP) - "0x733ebcC6DF85f8266349DEFD0980f8Ced9B45f35": - "0x6b175474e89094c44da98b954eedeac495271d0f", - // oUSD -> DAI(TMP) - "0x29F6e49c6E3397C3A84F715885F9F233A441165C": - "0x6b175474e89094c44da98b954eedeac495271d0f", -}; - -const transformTokenAddress = (address) => TOKENS[address]; - -async function tvl(timestamp, block, chainBlocks) { - let allCoins = {}; - - const poolLength = ( - await sdk.api.abi.call({ - target: BOOSTER_ADDRESS, - abi: ABI.poolLength, - block: chainBlocks["astar"], - chain: "astar", - }) - ).output; - const poolInfo = []; - const calldata = []; - for (let i = 0; i < poolLength; i++) { - calldata.push({ - target: BOOSTER_ADDRESS, - params: [i], - }); - } - const returnData = await sdk.api.abi.multiCall({ - abi: ABI.poolInfo, - calls: calldata, - block: chainBlocks["astar"], - chain: "astar", - }); - for (let i = 0; i < poolLength; i++) { - const pdata = returnData.output[i].output; - if (pdata.shutdown) continue; - poolInfo.push(pdata); - } - await Promise.all( - [...Array(Number(poolInfo.length)).keys()].map(async (i) => { - const supplyFromMuuuFinance = ( - await sdk.api.erc20.totalSupply({ - target: poolInfo[i].token, - block: chainBlocks["astar"], - chain: "astar", - }) - ).output; - - const totalsupply = ( - await sdk.api.erc20.totalSupply({ - target: poolInfo[i].lptoken, - block: chainBlocks["astar"], - chain: "astar", - }) - ).output; - - const muuuFinanceShare = BigNumberJs(supplyFromMuuuFinance) - .times(1e18) - .div(totalsupply) - .toFixed(6); - - const pool = ( - await sdk.api.abi.call({ - target: REGISTRY_ADDRESS, - block: chainBlocks["astar"], - chain: "astar", - abi: ABI.get_pool_from_lp_token, - params: poolInfo[i].lptoken, - }) - ).output; - - const maincoins = ( - await sdk.api.abi.call({ - target: REGISTRY_ADDRESS, - block: chainBlocks["astar"], - chain: "astar", - abi: ABI.get_coins, - params: pool, - }) - ).output; - - const coins = []; - for (let key in maincoins) { - let coin = maincoins[key]; - if (coin == ZERO_ADDRESS) { - continue; - } - - const bal = await sdk.api.erc20.balanceOf({ - target: coin, - owner: pool, - block: chainBlocks["astar"], - chain: "astar", - }); - coins.push({ coin: coin, balance: bal.output }); - } - for (var c = 0; c < coins.length; c++) { - const balanceShare = BigNumberJs(coins[c].balance.toString()) - .times(muuuFinanceShare) - .div(1e18) - .toFixed(0); - - const coinAddress = coins[c].coin; - - // convert 3KGL tokens to DAI. This is temp and should convert using virtual price - // as the tokens have accrued interest, this means current tvl is under reporting - sdk.util.sumSingleBalance( - allCoins, - transformTokenAddress(coinAddress), - balanceShare - ); - } - }) - ); - - // When KGL's price is determined, we can count muKGL's TVL - const muKGL = await sdk.api.erc20.totalSupply({ - target: MUKGL_ADDRESS, - block: chainBlocks["astar"], - chain: "astar", - }); - sdk.util.sumSingleBalance( - allCoins, - "kagla-finance", - toBigNumberJsOrZero(muKGL.output).shiftedBy(-18).toNumber() - ); - - return allCoins; -} - -// When MUUU's price is determined, we can count MUUU's TVL -async function staking(timestamp, block, chainBlocks) { - const balances = {}; - const muuuStakedSupply = await sdk.api.erc20.totalSupply({ - target: MUUU_REWARDS_ADDRESS, - block: chainBlocks["astar"], - chain: "astar", - }); - - sdk.util.sumSingleBalance( - balances, - "muuu", - toBigNumberJsOrZero(muuuStakedSupply.output).shiftedBy(-18).toNumber() - ); - return balances; +async function tvl(timestamp, block, chainBlocks, { api }) { + const [veKGL, veLAY] = await api.multiCall({ abi: 'erc20:totalSupply', calls: [MUKGL_ADDRESS, MULAY_ADDRESS] }) + api.add(ADDRESSES.astar.KGL, veKGL) + api.add(ADDRESSES.astar.LAY, veLAY) + const pools = await api.fetchList({ lengthAbi: ABI.poolLength, itemAbi: ABI.poolInfo, target: BOOSTER_ADDRESS }) + const supply = await api.multiCall({ abi: 'erc20:totalSupply', calls: pools.map(i => i.token) }) + let i = 0 + for (const pool of pools) await addTokensInPool(api, pool.lptoken, supply[i++]) } module.exports = { tvl, - staking, + staking: staking(MUUU_REWARDS_ADDRESS, MUU_TOKEN), }; + +const poolMapping = { + '0x5c71534db6e54322943ad429209d97fa25bbfcd2': { pool:'0x4fD9011F0867e7e8AF7608Ad1BB969Da8b0aBa9B', tokenCount: 2 }, + '0xe12332a6118832cbafc1913ec5d8c3a05e6fd880': { pool:'0xe12332a6118832cbafc1913ec5d8c3a05e6fd880', tokenCount: 2 }, + '0xb91e7abcbf38d0cac1f99b062b75ae0c18e169d1': { pool:'0x578AA1be6D258677e80c9067711861dd981a663E', tokenCount: 2 }, + '0xdc1c5babb4dad3117fd46d542f3b356d171417fa': { pool:'0xdc1c5babb4dad3117fd46d542f3b356d171417fa', tokenCount: 2 }, +} + +async function addTokensInPool(api, lpToken, tokenBal) { + let pool = await api.call({ target: REGISTRY_ADDRESS, abi: ABI.get_pool_from_lp_token, params: lpToken, }) + let tokens = [] + let bals = [] + const mappingPool = poolMapping[lpToken.toLowerCase()] + const supply = await api.call({ abi: 'erc20:totalSupply', target: lpToken }) + if (pool === ZERO_ADDRESS && !mappingPool) { + api.add(lpToken, tokenBal) + return; + } + + if (mappingPool){ + const { pool , tokenCount } = mappingPool + bals = await api.multiCall({ abi: "function balances(uint256) view returns (uint256)", target: pool, calls: Array(tokenCount).fill(0).map((_, i) => i)}) + tokens = await api.multiCall({ abi: ABI.coins, target: pool, calls: Array(tokenCount).fill(0).map((_, i) => i)}) + console.log(bals, tokens) + } else { + tokens = await api.call({ abi: ABI.get_coins, target: REGISTRY_ADDRESS, params: pool }) + bals = await api.call({ abi: ABI.get_balances, target: REGISTRY_ADDRESS, params: pool }) + } + const ratio = tokenBal / supply + for (const t of tokens) { + if (t === ZERO_ADDRESS) continue; + const name = await api.call({ abi: 'string:name', target: t }) + if (name.includes('Kagla.fi')) await addTokensInPool(api, t, bals[tokens.indexOf(t)] * ratio) + else api.add(t, bals[tokens.indexOf(t)] * ratio) + } +} \ No newline at end of file diff --git a/projects/muuu/utils.js b/projects/muuu/utils.js deleted file mode 100644 index 9b7fe7d49b..0000000000 --- a/projects/muuu/utils.js +++ /dev/null @@ -1,11 +0,0 @@ -const BigNumberJs = require("bignumber.js"); -BigNumberJs.config({ EXPONENTIAL_AT: 1e9 }); - -const toBigNumberJsOrZero = (value) => { - const bn = new BigNumberJs(value); - return bn.isNaN() ? new BigNumberJs("0") : bn; -}; - -module.exports = { - toBigNumberJsOrZero, -}; diff --git a/projects/mversex/index.js b/projects/mversex/index.js new file mode 100644 index 0000000000..7dc4f3812b --- /dev/null +++ b/projects/mversex/index.js @@ -0,0 +1,7 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +module.exports = { + misrepresentedTokens: true, + kava: { + tvl: getUniTVL({ factory: "0x266F951c525130a4E230bB40F0e3525C6C99B9c5", useDefaultCoreAssets: true, fetchBalances: true, }), + }, +}; diff --git a/projects/mymetatrader/index.js b/projects/mymetatrader/index.js index 62167f09df..2f9c3025c1 100644 --- a/projects/mymetatrader/index.js +++ b/projects/mymetatrader/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); const vault = "0x992EB7040b66b13abEa94E2621D4E61d5CE608BD"; -const usdc = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"; +const usdc = ADDRESSES.arbitrum.USDC; const stakingPool = "0xBdB00022030C9D715A10F2fCeDb19e99020Aa357"; const mmtToken = "0x27d8de4c30ffde34e982482ae504fc7f23061f61"; diff --git a/projects/naos/index.js b/projects/naos/index.js index 24633702cc..60a261e5c7 100644 --- a/projects/naos/index.js +++ b/projects/naos/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking, stakings } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); @@ -12,7 +13,7 @@ const AssessorAbi = "uint256:seniorDebt" const BSC_NAOS_ADDRESS = "0x758d08864fb6cce3062667225ca10b8f00496cc2"; const CAKE_BNB_NAOS_LP_ADDRESS = "0xcaa662ad41a662b81be2aea5d59ec0697628665f"; const BSC_BOOST_POOL = "0x3dcd32dd2b225749aa830ca3b4f2411bfeb03db4"; -const BUSD_CONTRACT_ADDRESS = "0xe9e7cea3dedca5984780bafc599bd69add087d56"; +const BUSD_CONTRACT_ADDRESS = ADDRESSES.bsc.BUSD; const BUSD_CONTRACT_HOLDER = [ "0x9591ff9c5070107000155ff6c5ce049aa1443dd3", // Formation "0xb9ece39b356d5c0842301b42a716e4385617c871", // Transmuter @@ -42,7 +43,7 @@ const UNI_ETH_NAOS_LP_ADDRESS = "0x9b577e849b128ee1a69144b218e809b8bb98c35d"; const NAOS_ADDRESS = "0x4a615bb7166210cce20e6642a6f8fb5d4d044496"; const NUSD_3CRV_LP_ADDRESS = "0x67d9eAe741944D4402eB0D1cB3bC3a168EC1764c"; -const DAI_CONTRACT_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"; +const DAI_CONTRACT_ADDRESS = ADDRESSES.ethereum.DAI; const DAI_CONTRACT_HOLDER = [ "0x9Ddceb30515eD297C1B72Ff8F848F254104b7A12", // Formation "0x3ED6355Ad74605c0b09415d6B0b29a294Fd31265", // Transmuter diff --git a/projects/narwhal-finance/index.js b/projects/narwhal-finance/index.js new file mode 100644 index 0000000000..20365454b9 --- /dev/null +++ b/projects/narwhal-finance/index.js @@ -0,0 +1,19 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json'); + +module.exports = { + hallmarks: [ + [1689034511, "Launch on Arbitrum & BSC"], + ], +}; + +const config = { + bsc: { owner: '0x71AF984f825C7BEf79cAEE5De14565ca8A29Fe93', tokens: [ADDRESSES.bsc.USDT,]}, + arbitrum: { owner: '0x14559479DC1041Ef6565f44028D454F423d2b9E6', tokens: [ADDRESSES.arbitrum.USDT,]}, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: sumTokensExport(config[chain]) + } +}) diff --git a/projects/nava-finance/index.js b/projects/nava-finance/index.js index e145b3a39b..f2ebd6cc26 100644 --- a/projects/nava-finance/index.js +++ b/projects/nava-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { unknownTombs, sumUnknownTokens } = require('../helper/unknownTokens') const { staking } = require('../helper/staking'); const { sumTokens2 } = require('../helper/unwrapLPs') @@ -13,7 +14,7 @@ const pool2lps = [ ]; const genesisPool = '0xb9F9993f0D4A63344D9571387E18f659B6AE5447' const OORT = '0x3D1BBD0eC9Af25e8f12383d9F6a6bbFa6DfeF06F' -const WREI = '0x2545AF3D8b11e295bB7aEdD5826021AB54F71630' +const WREI = ADDRESSES.rei.WREI const OORT_LP = '0xB95783dCE72CF2C7fa13a6b3D7399A4223259878' // module.exports = { // ...tombTvl(bond, share, rewardPool, boardroom, pool2lps, "rei", undefined, false, pool2lps[1]) diff --git a/projects/nearpad/index.js b/projects/nearpad/index.js index 6310cf696c..6b4e53c048 100644 --- a/projects/nearpad/index.js +++ b/projects/nearpad/index.js @@ -1,18 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const tokens = [ "0x885f8CF6E45bdd3fdcDc644efdcd0AC93880c781", "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", - "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", - "0x4988a896b1227218e4A686fdE5EabdcAbd91571f", + ADDRESSES.aurora.NEAR, + ADDRESSES.aurora.USDT_e, "0xe3520349F477A5F6EB06107066048508498A291b", - "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802", + ADDRESSES.aurora.USDC_e, "0xF4eB217Ba2454613b15dBdea6e5f22276410e89e", - "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + ADDRESSES.aurora.AURORA, "0xFa94348467f64D5A457F75F8bc40495D33c65aBB", "0x74974575d2f1668c63036d51ff48dbaa68e52408", "0xdcD6D4e2B3e1D1E1E6Fa8C21C8A323DcbecfF970", - "0xDA2585430fEf327aD8ee44Af8F1f989a2A91A3d2", + ADDRESSES.aurora.FRAX, ]; diff --git a/projects/nemesis-dao/index.js b/projects/nemesis-dao/index.js index 3a10cb8787..7af04cc022 100644 --- a/projects/nemesis-dao/index.js +++ b/projects/nemesis-dao/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0xdffb6fb92e3f54c0daa59e5af3f47fd58824562a" module.exports = ohmTvl(treasury, [ //BUSD - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.BUSD, false], //Pancake LP ["0x6b0a3e71b69ab49ddea0ed23bef48f78bf9509aa", true], ], "bsc", "0xfd562672bf1da0f80d43f26bfc4ca19121ba661b", "0x8AC9DC3358A2dB19fDd57f433ff45d1fc357aFb3") \ No newline at end of file diff --git a/projects/neopin-liquid-staking/index.js b/projects/neopin-liquid-staking/index.js new file mode 100644 index 0000000000..76b4a8b585 --- /dev/null +++ b/projects/neopin-liquid-staking/index.js @@ -0,0 +1,32 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk'); + +const wethAddress = ADDRESSES.ethereum.WETH; +const wKlayAddress = ADDRESSES.klaytn.WKLAY; + +const npEthContract = '0x841d3B6660663Ed4B0D9b9EDAEe6642e05A4E182'; +const npKlayContract = '0xb0BB95ac3195A266Ab924596Ba32c2a10e245a95'; + +async function getEthTvl(timestamp, ethBlock, chainBlocks) { + const chain = 'ethereum'; + const pooledETH = await sdk.api.abi.call({ chain, block: ethBlock, target: npEthContract, abi: "uint256:getTotalPooledEth" }); + + return { + [`${chain}:0x0000000000000000000000000000000000000000`]: pooledETH.output + }; +} + +async function getKlayTvl(timestamp, ethBlock, chainBlocks) { + const chain = 'klaytn'; + const pooledKlay = await sdk.api.abi.call({ chain, target: npKlayContract, abi: "uint256:getTotalPooledKlay" }); + + return { + [`${chain}:0x0000000000000000000000000000000000000000`]: pooledKlay.output + }; +} + +module.exports = { + methodology: 'Staked are counted as TVL based on the chain that they are staked on and where the liquidity tokens are issued, npETH and npKLAY are counted as Ethereum TVL and Klaytn TVL since ETH and KLAY are staked in each mainnet and the liquidity tokens are also issued on each mainnet network.', + ethereum: { tvl: getEthTvl }, + klaytn: { tvl: getKlayTvl }, +} diff --git a/projects/neopin-staking/index.js b/projects/neopin-staking/index.js index b96b352764..08f1f6abcf 100644 --- a/projects/neopin-staking/index.js +++ b/projects/neopin-staking/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getStakedTron } = require('../helper/chain/tron'); const { staking } = require('../helper/staking') const { sumTokensExport } = require('../helper/sumTokens'); @@ -6,14 +7,15 @@ const { nullAddress } = require('../helper/unwrapLPs'); module.exports = { klaytn: { tvl: sumTokensExport({ - chain: 'klaytn', owners: [ '0xDa664b81C13b050F9b0435D0B712218Aa8BB1609', '0x0D3ACA076712DE598DF856cEcEF76daD38F0A75b', + '0xf9d92BAd7b1410dfFB0a204B7aa418C9fd5A898F', + '0xf20816C9bdcb25da3ba79b206e9b7107ae02ae10' ], tokens: [nullAddress], }), - staking: staking('0x306ee01a6ba3b4a8e993fa2c1adc7ea24462000c', '0xe06597d02a2c3aa7a9708de2cfa587b128bd3815', 'klaytn'), + staking: staking('0x306ee01a6ba3b4a8e993fa2c1adc7ea24462000c', ADDRESSES.klaytn.NPT, 'klaytn'), }, tron: { tvl: async () => { diff --git a/projects/neopin/index.js b/projects/neopin/index.js index ea4aae21f5..f9784d76cb 100644 --- a/projects/neopin/index.js +++ b/projects/neopin/index.js @@ -5,4 +5,5 @@ const { mergeExports } = require('../helper/utils') module.exports = mergeExports([ uniTvlExport('klaytn', '0x1a1F14ec33BF8c2e66731f46D0A706e8025b43e9'), uniTvlExport('polygon', '0x1289ae78422b94414c1F827C534a1fE8E31E71Aa'), + uniTvlExport('ethereum', '0x2D723f60ad8da76286B2aC120498A5EA6bAbC792'), ]) \ No newline at end of file diff --git a/projects/nereus/index.js b/projects/nereus/index.js index 0e70e35204..12b134729f 100644 --- a/projects/nereus/index.js +++ b/projects/nereus/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const tokenAndContract = [ - ["0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", "0x6d9336ce867606Dcb1aeC02C8Ef0EDF0FF22d247"], // nWAVAX - ["0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", "0x92F79834fC52f0Aa328f991C91185e081ea4f957"], // nWETH + [ADDRESSES.avax.WAVAX, "0x6d9336ce867606Dcb1aeC02C8Ef0EDF0FF22d247"], // nWAVAX + [ADDRESSES.avax.WETH_e, "0x92F79834fC52f0Aa328f991C91185e081ea4f957"], // nWETH ["0x50b7545627a5162F82A992c33b87aDc75187B218", "0x3D8231cE419886a5D400dD5a168C8917aEeAB25C"], // nWBTC - ["0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", "0x6Ce0e6e81Dc7A5D997E6169cD5f8C982DA83e49e"], // nDAI - ["0xc7198437980c041c805A1EDcbA50c1Ce5db95118", "0x29F511e6f62118b27D9B47d1AcD6fDd5cD0B4C64"], // nUSDT - ["0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", "0x723191E7F8D87eC22E682c13Df504E5E3432e53E"] // nUSDC + [ADDRESSES.avax.DAI, "0x6Ce0e6e81Dc7A5D997E6169cD5f8C982DA83e49e"], // nDAI + [ADDRESSES.avax.USDT_e, "0x29F511e6f62118b27D9B47d1AcD6fDd5cD0B4C64"], // nUSDT + [ADDRESSES.avax.USDC_e, "0x723191E7F8D87eC22E682c13Df504E5E3432e53E"] // nUSDC ] async function tvl(timestamp, block, chainBlocks) { diff --git a/projects/nerve/index.js b/projects/nerve/index.js index 314688b7eb..7637b89e75 100644 --- a/projects/nerve/index.js +++ b/projects/nerve/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking') const { sumTokensExport } = require('../helper/unwrapLPs') @@ -5,19 +6,19 @@ const xnrvAddress = '0x15B9462d4Eb94222a7506Bc7A25FB27a2359291e' const nrv = "0x42F6f551ae042cBe50C739158b4f0CAC0Edb9096" const tokens = { - busd: '0xe9e7cea3dedca5984780bafc599bd69add087d56', - usdt: '0x55d398326f99059ff775485246999027b3197955', - usdc: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', + busd: ADDRESSES.bsc.BUSD, + usdt: ADDRESSES.bsc.USDT, + usdc: ADDRESSES.bsc.USDC, } const ownerTokens = [ [ [tokens.busd, tokens.usdt, tokens.usdc,], '0x1b3771a66ee31180906972580ade9b81afc5fcdc' ], - [ ['0x54261774905f3e6e9718f2abb10ed6555cae308a', '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c'], '0x6C341938bB75dDe823FAAfe7f446925c66E6270c' ], - [ ['0x2170ed0880ac9a755fd29b2688956bd959f933f8', '0x6f817a0ce8f7640add3bc0c1c2298635043c2423'], '0x146CD24dCc9f4EB224DFd010c5Bf2b0D25aFA9C0' ], + [ ['0x54261774905f3e6e9718f2abb10ed6555cae308a', ADDRESSES.bsc.BTCB], '0x6C341938bB75dDe823FAAfe7f446925c66E6270c' ], + [ [ADDRESSES.bsc.ETH, '0x6f817a0ce8f7640add3bc0c1c2298635043c2423'], '0x146CD24dCc9f4EB224DFd010c5Bf2b0D25aFA9C0' ], [ ['0x07663837218a003e66310a01596af4bf4e44623d'], '0x0eafaa7ed9866c1f08ac21dd0ef3395e910f7114' ], - [ ['0x049d68029688eabf473097a2fc38ef61633a3c7a'], '0xd0fBF0A224563D5fFc8A57e4fdA6Ae080EbCf3D3' ], + [ [ADDRESSES.fantom.fUSDT], '0xd0fBF0A224563D5fFc8A57e4fdA6Ae080EbCf3D3' ], [ ['0x23396cf899ca06c4472205fc903bdb4de249d6fc'], '0x2dcCe1586b1664f41C72206900e404Ec3cA130e0' ], ] diff --git a/projects/nervenetworkbridge/index.js b/projects/nervenetworkbridge/index.js index 76f40f9c34..fbffad6ae6 100644 --- a/projects/nervenetworkbridge/index.js +++ b/projects/nervenetworkbridge/index.js @@ -1,5 +1,4 @@ const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') -const { sumTokens: sumTronTokens } = require('../helper/chain/tron'); const sdk = require("@defillama/sdk"); const { getConfig } = require('../helper/cache') const { get } = require('../helper/http') @@ -24,7 +23,9 @@ const getBridgeContract = { 'smartbch': '0x3758AA66caD9F2606F1F501c9CB31b94b713A6d5', 'enuls': '0x3758AA66caD9F2606F1F501c9CB31b94b713A6d5', 'kava': '0x3758AA66caD9F2606F1F501c9CB31b94b713A6d5', - 'ethpow': '0x67b3757f20DBFa114b593dfdAc2b3097Aa42133E' + 'ethpow': '0x67b3757f20DBFa114b593dfdAc2b3097Aa42133E', + 'rei': '0x3758AA66caD9F2606F1F501c9CB31b94b713A6d5', + 'era': '0x54C4A99Ee277eFF14b378405b6600405790d5045' } const tronBridgeContract = 'TXeFBRKUW2x8ZYKPD13RuZDTd9qHbaPGEN'; @@ -36,15 +37,25 @@ async function getTokensConf() { return tokensConfTest } +function getChain(chain) { + const chainMapping = { + era: 'zksync' + } + + return chainMapping[chain] ?? chain +} + async function tvl(_, _b, _cb, { api, }) { let conf = await getTokensConf(); + const bridgeContract = getBridgeContract[api.chain]; - const tokens = Object.values(conf[api.chain]) + const tokens = Object.values(conf[getChain(api.chain)]) const owners = [bridgeContract] return sumTokens2({ api, tokens, owners, }) } async function tronTvl() { + const { api } = arguments[3] let conf = await getTokensConf(); const tokens = conf['tron']; const tokenKeys = Object.keys(conf['tron']) @@ -55,7 +66,7 @@ async function tronTvl() { tokens1.push(token) } } - return sumTronTokens({ owner: tronBridgeContract, tokens: [nullAddress, ...tokens1] }) + return sumTokens2({ api, owner: tronBridgeContract, tokens: [nullAddress, ...tokens1] }) } module.exports = { diff --git a/projects/neutra-finance/index.js b/projects/neutra-finance/index.js index 0388b64d00..e97a103fa8 100644 --- a/projects/neutra-finance/index.js +++ b/projects/neutra-finance/index.js @@ -1,12 +1,24 @@ -const { - sumTokensExport -} = require('../helper/unwrapLPs'); +const ADDRESSES = require('../helper/coreAssets.json') +async function tvl(_, _b, _cb, { api }) { + const nGlpVaults = "0x6Bfa4F1DfAfeb9c37E4E8d436E1d0C5973E47e25"; + const nUSDCVault = "0x2a958665bC9A1680135241133569C7014230Cb21"; + + const nGlpTotalValue = await api.call({ + abi: "uint256:totalValue", + target: nGlpVaults, + }); + const nUSDCTotalValue = await api.call({ + abi: "uint256:totalAssets", + target: nUSDCVault, + }); + + const tvl = +nUSDCTotalValue + nGlpTotalValue / 1e24; + api.add(ADDRESSES.arbitrum.USDC, tvl) +} module.exports = { + misrepresentedTokens: true, arbitrum: { - tvl: sumTokensExport({ - owner: '0x6bfa4f1dfafeb9c37e4e8d436e1d0c5973e47e25', - tokens: ['0x1addd80e6039594ee970e5872d247bf0414c8903', '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1',], - }), - } -}; \ No newline at end of file + tvl, + }, +}; diff --git a/projects/nexon/index.js b/projects/nexon/index.js index 35b710caa7..dd0d3c3cbf 100644 --- a/projects/nexon/index.js +++ b/projects/nexon/index.js @@ -2,5 +2,13 @@ const { compoundExports } = require('../helper/compound'); const { nullAddress } = require('../helper/tokenMapping'); module.exports = { - era: compoundExports('0x0171cA5b372eb510245F5FA214F5582911934b3D', 'era', '0x1BbD33384869b30A323e15868Ce46013C82B86FB', nullAddress), + hallmarks: [ + [1690243200, "read-only Reentrancy Attack"] + ], + era: compoundExports('0x0171cA5b372eb510245F5FA214F5582911934b3D', 'era', '0x1BbD33384869b30A323e15868Ce46013C82B86FB', nullAddress, undefined, undefined, { + resolveLPs: true, + abis: { + getReservesABI: 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1)' + } + }), }; \ No newline at end of file diff --git a/projects/nexus-protocol/index.js b/projects/nexus-protocol/index.js index 8b8aa2bbc9..e49f4f3a7c 100644 --- a/projects/nexus-protocol/index.js +++ b/projects/nexus-protocol/index.js @@ -1,35 +1,8 @@ -const { fetchURL } = require('../helper/utils') - -const vaults = [ - ["https://lcd.terra.dev/wasm/contracts/terra10cxuzggyvvv44magvrh3thpdnk9cmlgk93gmx2/store?query_msg=%7B%22borrower%22:%7B%22address%22:%22terra1tfrecwlvzcv9h697q3g0d08vd53ssu5w4war4n%22%7D%7D", "ethereum"], - ["https://lcd.terra.dev/wasm/contracts/terra1ptjp2vfjrwh0j0faj9r6katm640kgjxnwwq9kn/store?query_msg=%7B%22borrower%22:%7B%22address%22:%22terra1cda4adzngjzcn8quvfu2229s8tedl5t306352x%22%7D%7D", "terra-luna"] -] - -async function tvl() { - const balances = {} - await Promise.all(vaults.map(async vault => { - const deposited = await fetchURL(vault[0]) - balances[vault[1]] = Number(deposited.data.result.balance) / 1e6 - })) - return balances -} - -async function staking() { - const staked = await fetchURL( - `https://lcd.terra.dev/wasm/contracts/terra12897djskt9rge8dtmm86w654g7kzckkd698608/store?query_msg=%7B%22balance%22:%7B%22address%22:%22terra1xrk6v2tfjrhjz2dsfecj40ps7ayanjx970gy0j%22%7D%7D` - ) - // console.log(Number(staked.data.result.balance) / 1e6) - return { - "nexus-governance-token": Number(staked.data.result.balance) / 1e6 - } -} module.exports = { timetravel: false, terra: { - // Token not on coingecko yet - //staking, - tvl + tvl: () => ({}), }, hallmarks:[ [1651881600, "UST depeg"], diff --git a/projects/nft20.js b/projects/nft20.js index d43f5e247f..8751ae41dc 100644 --- a/projects/nft20.js +++ b/projects/nft20.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk") const axios = require("axios") const { staking } = require("./helper/staking"); @@ -20,14 +21,14 @@ const contracts = { '0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f', // univ2_factory_ethereum, '0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac' // sushiv1_factory_ethereum ], - weth: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + weth: ADDRESSES.ethereum.WETH, univ3_factory: '0x1f98431c8ad98523631ae4a59f267346ea31f984', transform: addr => addr, }, polygon: { nft20_rest_api: nft20_rest_api_base + '&network=1', uni_v2_factories: ['0xc35DADB65012eC5796536bD9864eD8773aBc74C4'], // sushiv1_factory_polygon - weth: '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', + weth: ADDRESSES.polygon.WETH_1, univ3_factory: [], transform: addr => `polygon:${addr}`, } @@ -76,7 +77,7 @@ function chainTvl(chain) { }) ).output - const LPs = [...uni_v2_LPs, ...uni_v3_LPs].filter(lp => lp.output !== '0x0000000000000000000000000000000000000000') + const LPs = [...uni_v2_LPs, ...uni_v3_LPs].filter(lp => lp.output !== ADDRESSES.null) const weth_LPs = ( await sdk.api.abi.multiCall({ calls: LPs.map(pool => ({ diff --git a/projects/nft360/index.js b/projects/nft360/index.js index 4f3c1339de..052fe969ec 100644 --- a/projects/nft360/index.js +++ b/projects/nft360/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); -const token_USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f"; -const token_USDT = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; +const token_USDC = ADDRESSES.telos.ETH; +const token_USDT = ADDRESSES.moonriver.USDT; const masterchef = "0x061362b6c0676fA9995A15D7fFcaef0323A9dF2F"; module.exports = { diff --git a/projects/nftperp/index.js b/projects/nftperp/index.js new file mode 100644 index 0000000000..cccf4948fb --- /dev/null +++ b/projects/nftperp/index.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require('../helper/sumTokens'); + +module.exports = { + arbitrum: { + tvl: sumTokensExport({ + tokensAndOwners: [ + // DEX + [ADDRESSES.arbitrum.WETH, '0x6fc05B7DFe545cd488E9D47d56CFaCA88F69A2e1'], + // Insurance fund + [ADDRESSES.arbitrum.WETH, '0x035E4480437002A30b61Df6788DFb6199c2C5210'], + ] + }) + }, + hallmarks: [ + [1688695200, "v1 shutdown"], + ], +}; diff --git a/projects/nftx/index.js b/projects/nftx/index.js index 1d364d144b..49cdb51366 100644 --- a/projects/nftx/index.js +++ b/projects/nftx/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { gql } = require("graphql-request"); const { blockQuery } = require('../helper/http') const { getTokenPrices } = require('../helper/unknownTokens') @@ -6,11 +7,11 @@ const { getChainTransform } = require('../helper/portedTokens') const config = { ethereum: { - weth: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + weth: ADDRESSES.ethereum.WETH, graphUrl: 'https://graph-proxy.nftx.xyz/c/shared/subgraphs/name/nftx-project/nftx-v2-1-mainnet' }, arbitrum: { - weth: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', + weth: ADDRESSES.arbitrum.WETH, graphUrl: 'https://graph-proxy.nftx.xyz/shared/subgraphs/name/nftx-project/nftx-v2-arbitrum' }, } diff --git a/projects/nightmare/index.js b/projects/nightmare/index.js index 3d477c96ed..be948559b7 100644 --- a/projects/nightmare/index.js +++ b/projects/nightmare/index.js @@ -19,6 +19,9 @@ async function tvl(timestamp, block, chainBlocks) { module.exports = { methodology: "TVL includes all farms in MasterChef contract", + hallmarks: [ + [1646179200, "Rug Pull"] + ], fantom: { tvl, staking: staking(fearchef, fear, "fantom"), diff --git a/projects/noaharkdao/index.js b/projects/noaharkdao/index.js index da7c7ce04c..5296523773 100644 --- a/projects/noaharkdao/index.js +++ b/projects/noaharkdao/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const nrk = "0x61a47034276eb993e1c5e67bf1375ad0a48f10f6"; const stakingContract = "0xe830a08D4A794DEDB03A0B46cA7BBC8468ADc47B"; const treasury = "0x64E5dd04123BFF64a9eD7fe5b902720E63C422F0"; const treasuryTokens = [ - ["0xd586e7f844cea2f87f50152665bcbc2c279d8d70", false], // DAI + [ADDRESSES.avax.DAI, false], // DAI ["0x790c840b774d8f02ebdad9ddb74331614b535cef", true] // NRK-DAI SLP ] diff --git a/projects/node-dao/index.js b/projects/node-dao/index.js new file mode 100644 index 0000000000..e19286cb84 --- /dev/null +++ b/projects/node-dao/index.js @@ -0,0 +1,33 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') + +module.exports = { + ethereum: { + tvl: async (_, _1, _2, { api }) => { + // nodeDAO v0 validator nft + const nodeDaoV0ValidatorNFT = '0x40Cd77D9aa9e0b2D485259415eA05486B201c514' + const v0VdalitorsNumber = await api.call({ abi: 'uint256:totalSupply', target: nodeDaoV0ValidatorNFT }) + + // nodeDAO liquidStaking + const nodeDaoLiquidStaking = '0x8103151E2377e78C04a3d2564e20542680ed3096' + const nethTVL = await api.call({ abi: 'uint256:getTotalEthValue', target: nodeDaoLiquidStaking }) + + // nodeDAO v1 validator nft + const nodeDaoV1ValidatorNFT = '0x58553F5c5a6AEE89EaBFd42c231A18aB0872700d' + const v1Vdalitors = await api.call({ abi: 'uint256[]:activeNftsOfUser', target: nodeDaoV1ValidatorNFT }) + + // nodeDAO totalEth = nethTVL + (v1ValidatorNumber + v0VdalitorsNumber)* 32 eth + let totalEth = parseInt(nethTVL) + (v1Vdalitors.length + parseInt(v0VdalitorsNumber)) * 32_000_000_000_000_000_000 + + // nodeDAO largeStaking + const nodeDaoLargeStaking = '0xBBd19e8F766Dcc94D50e47502b79C81cdaD484B8' + const nodeOperatorRegistry = '0x8742178Ac172eC7235E54808d5F327C30A51c492' + const operatorNumbers = await api.call({ abi: 'uint256:getNodeOperatorsCount', target: nodeOperatorRegistry }) + for (let i = 1; i <= operatorNumbers; i++) { + const validatorNumbers = await api.call({ abi: 'function getOperatorValidatorCounts(uint256 _operatorId) external view returns (uint256)', target: nodeDaoLargeStaking, params: [i] }) + totalEth += parseInt(validatorNumbers) * 32_000_000_000_000_000_000 + } + + api.add(nullAddress, totalEth) + } + } +} diff --git a/projects/nomad/index.js b/projects/nomad/index.js index c2c23909ed..6639c25b3a 100644 --- a/projects/nomad/index.js +++ b/projects/nomad/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // proxy contract: // https://github.com/nomad-xyz/config/blob/main/production.json // token holdings: @@ -15,32 +16,26 @@ const HOME_CHAINS = { const TOKEN_ADDRESSES = [ { - // FRAX - 'ethereum': '0x853d955aCEf822Db058eb8505911ED77F175b99e' + 'ethereum': ADDRESSES.ethereum.FRAX }, { - // USDC - 'ethereum': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' + 'ethereum': ADDRESSES.ethereum.USDC }, { - // DAI - 'ethereum': '0x6B175474E89094C44Da98b954EedeAC495271d0F' + 'ethereum': ADDRESSES.ethereum.DAI }, { - // USDT - 'ethereum': '0xdAC17F958D2ee523a2206206994597C13D831ec7' + 'ethereum': ADDRESSES.ethereum.USDT }, { // FXS 'ethereum': '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0' }, { - // WETH - 'ethereum': '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' + 'ethereum': ADDRESSES.ethereum.WETH }, { - // WBTC - 'ethereum': '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599' + 'ethereum': ADDRESSES.ethereum.WBTC }, { // IAG diff --git a/projects/nomiswap/index.js b/projects/nomiswap/index.js index fc629b62b2..9b6858670d 100644 --- a/projects/nomiswap/index.js +++ b/projects/nomiswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require("../helper/unknownTokens"); const { stakings } = require("../helper/staking"); const sdk = require('@defillama/sdk') @@ -10,7 +11,7 @@ const factories = [constantProductFactory, stableSwapFactory].map(factory => get useDefaultCoreAssets: true })) -const NMX = "0xd32d01a43c869edcd1117c640fbdcfcfd97d9d65" +const NMX = ADDRESSES.bsc.NMX const stakingPools = [ // Staking pool diff --git a/projects/nord-finance/config.js b/projects/nord-finance/config.js index 72fc02a5ee..970fe08f0f 100644 --- a/projects/nord-finance/config.js +++ b/projects/nord-finance/config.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { ethereum: { toa: [ - ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0x53E1c9750014C7Cf8303D69A3CA06A555C739DD0'], - ['0xdAC17F958D2ee523a2206206994597C13D831ec7', '0xCD4F2844b11A4515398fD2201247Cf2ed411245f'], - ['0x6B175474E89094C44Da98b954EedeAC495271d0F', '0x6Db6ABb2a55154C385e90d3fD05EE8ca46e3BA35'], - ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], - ['0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], - ['0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], - ['0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], - ['0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], - ['0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], - ['0xd533a949740bb3306d119cc777fa900ba034cd52', '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.USDC, '0x53E1c9750014C7Cf8303D69A3CA06A555C739DD0'], + [ADDRESSES.ethereum.USDT, '0xCD4F2844b11A4515398fD2201247Cf2ed411245f'], + [ADDRESSES.ethereum.DAI, '0x6Db6ABb2a55154C385e90d3fD05EE8ca46e3BA35'], + [ADDRESSES.ethereum.USDC, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.WBTC, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.WETH, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.UNI, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.AAVE, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.MATIC, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], + [ADDRESSES.ethereum.CRV, '0xD824fDFEdbE9b99F0B27e911Ad963Ec4544dF2Dc'], ], staking: [ ['0x6e9730ecffbed43fd876a264c982e254ef05a0de', '0x2b9a023415f0feeb88597c1a7d09fdefa0ef5614'], @@ -21,16 +22,16 @@ module.exports = { }, polygon: { toa: [ - ['0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', '0x8a5Ae804Da4924081663D4C5DaB4DC9BB7092E2E'], - ['0xc2132D05D31c914a87C6611C10748AEb04B58e8F', '0xa4dbb459fb9051b976947d2d8ab74477e1720a73'], - ['0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', '0xeE2dEf710a8a0021DCbF99C4cD7f69Dc536fc57b'], - ['0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], - ['0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], + [ADDRESSES.polygon.USDC, '0x8a5Ae804Da4924081663D4C5DaB4DC9BB7092E2E'], + [ADDRESSES.polygon.USDT, '0xa4dbb459fb9051b976947d2d8ab74477e1720a73'], + [ADDRESSES.polygon.DAI, '0xeE2dEf710a8a0021DCbF99C4cD7f69Dc536fc57b'], + [ADDRESSES.polygon.WBTC, '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], + [ADDRESSES.polygon.WETH_1, '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], ['0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], ['0xb33eaad8d922b1083446dc23f610c2567fb5180f', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], ['0xd6df932a45c0f255f85145f286ea0b292b21c90b', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], - ['0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], - ['0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], + [ADDRESSES.polygon.WMATIC_2, '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], + [ADDRESSES.polygon.USDC, '0x014fD6Db604b55eF900704ed5c25F9Ef61e8B225'], ], staking: [ ['0xf6f85b3f9fd581c2ee717c404f7684486f057f95', '0xf0882a08D855ec8Ad3f25087dE3FB311A5344b20'], @@ -39,9 +40,9 @@ module.exports = { }, avax: { toa: [ - ['0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', '0xAA1110b6A39647f93dfBbc6345216912E1dee6FF'], - ['0xc7198437980c041c805A1EDcbA50c1Ce5db95118', '0xFbb37792f98fd57AC1f2f20b151e2db5cceF7F11'], - ['0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', '0xaF3745feCEe0a79c5F19991291Cd60B716C4F698'], + [ADDRESSES.avax.USDC_e, '0xAA1110b6A39647f93dfBbc6345216912E1dee6FF'], + [ADDRESSES.avax.USDT_e, '0xFbb37792f98fd57AC1f2f20b151e2db5cceF7F11'], + [ADDRESSES.avax.DAI, '0xaF3745feCEe0a79c5F19991291Cd60B716C4F698'], ], staking: [ ['0x8965349fb649a33a30cbfda057d8ec2c48abe2a2', '0x1929aED2175688252C9388df11B162F7303ff926'], diff --git a/projects/northpole/index.js b/projects/northpole/index.js index 22b7b93215..cf9a40dbba 100644 --- a/projects/northpole/index.js +++ b/projects/northpole/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json') @@ -15,7 +16,7 @@ async function tvl(timestamp, ethBlock, chainBlocks) { })).output.map(t => t.output); return { - "0xdac17f958d2ee523a2206206994597c13d831ec7": Number(tvl) / 10 ** 12 + [ADDRESSES.ethereum.USDT]: Number(tvl) / 10 ** 12 } } diff --git a/projects/notional/abi.json b/projects/notional/abi.json index dba2eac561..4c5e817c6b 100644 --- a/projects/notional/abi.json +++ b/projects/notional/abi.json @@ -1,4 +1,4 @@ { - "maxCurrencyId": "uint16:maxCurrencyId", - "currencyIdToAddress": "function currencyIdToAddress(uint16) view returns (address)" + "getMaxCurrencyId": "function getMaxCurrencyId() view returns (uint16)", + "getCurrency": "function getCurrency(uint16) view returns ((address,bool,int256,uint8,uint256),(address,bool,int256,uint8,uint256))" } \ No newline at end of file diff --git a/projects/notional/index.js b/projects/notional/index.js index 9b254b23e7..fbff298d43 100644 --- a/projects/notional/index.js +++ b/projects/notional/index.js @@ -1,61 +1,21 @@ +const { sumTokens2 } = require('../helper/unwrapLPs'); const abi = require('./abi'); -const sdk = require('@defillama/sdk'); -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs'); -const escrowContract = '0x9abd0b8868546105F6F48298eaDC1D9c82f7f683'; const v2Contract = "0x1344A36A1B56144C3Bc62E7757377D288fDE0369" -async function tvl (timestamp, block) { - const maxCurrencyId = (await sdk.api.abi.call({ - block, - target: escrowContract, - abi: abi['maxCurrencyId'] - })).output; - - const addressCalls = [] - for (let i = 0; i <= maxCurrencyId; i++) { - addressCalls.push({ - target: escrowContract, - params: i - }) - } - - const supportedTokens = (await sdk.api.abi.multiCall({ - calls: addressCalls, - target: escrowContract, - abi: abi['currencyIdToAddress'], - block, - })).output - - const balanceCalls = supportedTokens.map((s) => { - return { - target: s.output, - params: escrowContract - } - }) - - const balances = (await sdk.api.abi.multiCall({ - calls: balanceCalls, - abi: 'erc20:balanceOf', - block - })).output - - const balanceMap = balances.reduce((obj, b) => { - obj[b.input.target] = b.output - return obj - }, {}) - - await sumTokensAndLPsSharedOwners(balanceMap, [ - "0x39aa39c021dfbae8fac545936693ac917d5e7563", - "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", - "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5", - "0xccf4429db6322d5c611ee964527d42e5d685dd6a" - ].map(a=>[a, false]), [v2Contract], block) - - return balanceMap +async function tvl(timestamp, block, _, { api }) { + let tokens = await api.fetchList({ lengthAbi: abi.getMaxCurrencyId, itemAbi: abi.getCurrency, target: v2Contract, startFromOne: true, }) + tokens = tokens.flat().map(i => i[0]) + const tokenNames = await api.multiCall({ abi: 'string:name', calls: tokens, permitFailure: true, }) + const nwTokens = tokens.filter((v, i) => tokenNames[i] && tokenNames[i].startsWith('Notional Wrapped')) + let nwBals = await api.multiCall({ abi: 'erc20:balanceOf', calls: nwTokens.map(i => ({ target: i, params: v2Contract}))}) + const underlyingTokens = await api.multiCall({ abi: 'address:underlying', calls: nwTokens}) + const exchangeRate = await api.multiCall({ abi: 'uint256:getExchangeRateView', calls: nwTokens}) + nwBals = nwBals.map((bal, i) => bal * (exchangeRate[i]/1e18)) + api.addTokens(underlyingTokens, nwBals) + return sumTokens2({ api, owner: v2Contract, tokens, blacklistedTokens: nwTokens }) } - module.exports = { - //start: 1602115200, // Oct-08-2020 12:00:00 AM +UTC - ethereum: { tvl }, - }; \ No newline at end of file +module.exports = { + ethereum: { tvl }, +}; \ No newline at end of file diff --git a/projects/nowswap/index.js b/projects/nowswap/index.js index 4abd3c9b93..19957883cf 100644 --- a/projects/nowswap/index.js +++ b/projects/nowswap/index.js @@ -2,6 +2,9 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { + hallmarks: [ + [1631664000, "Hacked"] + ], ethereum: { tvl: getUniTVL({ factory: '0xa556E2d77060A42516C9A8002E9156d8d3c832CE', diff --git a/projects/nsure/index.js b/projects/nsure/index.js index e3037a33d1..7c2172a23d 100644 --- a/projects/nsure/index.js +++ b/projects/nsure/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -22,7 +23,7 @@ const constant = { }; async function purchase(block) { - let weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; + let weth = ADDRESSES.ethereum.WETH; let _purchasePool; const [surplus, treasury] = await Promise.all([ sdk.api.abi.call({ @@ -62,7 +63,7 @@ async function underwriting(block) { async function startEth(block) { let capitalAddr = '0xa6b658Ce4b1CDb4E7d8f97dFFB549B8688CAFb84' - let ethAddr = '0x0000000000000000000000000000000000000000' + let ethAddr = ADDRESSES.null let trueBalance = 0; let _ethBalance = await sdk.api.eth.getBalance({ target: capitalAddr, block: block }); diff --git a/projects/nucleon/index.js b/projects/nucleon/index.js index 5f9368b054..2c2f51f4a5 100644 --- a/projects/nucleon/index.js +++ b/projects/nucleon/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require("../helper/unknownTokens"); const MasterchefV2 = "0xeced26633b5c2d7124b5eae794c9c32a8b8e7df2"; @@ -7,7 +8,7 @@ const XCFX_TokenAddress = "0x889138644274a7dc602f25a7e7d53ff40e6d0091"; const CFX_NUT_LP_TokenAddress = "0xd9d5748cb36a81fe58f91844f4a0412502fd3105"; const CFX_XCFX_LP_TokenAddress = "0x949b78ef2c8d6979098e195b08f27ff99cb20448"; -const WCFX = "0x14b2d3bc65e74dae1030eafd8ac30c533c976a9b"; +const WCFX = ADDRESSES.conflux.WCFX; module.exports = { conflux: { diff --git a/projects/nuon/index.js b/projects/nuon/index.js index 7c15418337..8bafe1b8ee 100644 --- a/projects/nuon/index.js +++ b/projects/nuon/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); module.exports = { arbitrum: { - tvl: sumTokensExport({ owner: '0x27788F93eEbB53728b887f13c16AdA286e1b6e92' ,tokens: ['0x82af49447d8a07e3bd95bd0d56f35241523fbab1', '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9']}) + tvl: sumTokensExport({ owner: '0x27788F93eEbB53728b887f13c16AdA286e1b6e92' ,tokens: [ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.USDT]}) } } \ No newline at end of file diff --git a/projects/nutbox/index.js b/projects/nutbox/index.js new file mode 100644 index 0000000000..5625e13feb --- /dev/null +++ b/projects/nutbox/index.js @@ -0,0 +1,30 @@ +const { getLogs } = require('../helper/cache/getLogs'); +const { sumUnknownTokens } = require('../helper/unknownTokens'); + +const config = { + bsc: { factory: '0xf870724476912057c807056b29c1161f5fe0199a', fromBlock: 15414926 }, + enuls: { factory: '0xb71A12De824B837eCD30D41384e80C8CDFb5D694', fromBlock: 768727 }, +} + +module.exports = { + misrepresentedTokens: true, +}; + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: () => ({}), + staking: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x246afd9fb9e1733d63ee77f86f5d1440fb048c65e36822f48d468d9e5e7b8f21'], + eventAbi: 'event ERC20StakingCreated(address indexed pool, address indexed community, string name, address erc20Token)', + onlyArgs: true, + fromBlock, + }) + return sumUnknownTokens({ api, tokensAndOwners: logs.map(i => [i.erc20Token, i.pool]), useDefaultCoreAssets: true, }) + } + } +}) + diff --git a/projects/o2-dao/index.js b/projects/o2-dao/index.js index 9f056f915e..2db22ba5fc 100644 --- a/projects/o2-dao/index.js +++ b/projects/o2-dao/index.js @@ -1,47 +1,15 @@ -const { sumTokensAndLPsSharedOwners, sumLPWithOnlyOneTokenOtherThanKnown } = require("../helper/unwrapLPs"); const { stakingUnknownPricedLP } = require("../helper/staking"); -const sdk = require('@defillama/sdk') const transform = addr=>`avax:${addr}` const chain = "avax" -const wMEMO = "0x0da67235dd5787d67955420c84ca1cecd4e5bb3b" -const time = "avax:0xb54f16fb19478766a268f172c9480f8da1a7c9c3" -const treasuryAddress = "0x10C12B7322Ac2c5a26bD9929ABc6e6b7997570ba"; const joeLP = "0x7bc2561d69b56fae9760df394a9fa9202c5f1f11" -const treasuryTokens = [ - // gOHM - ["0x321E7092a180BB43555132ec53AaA65a5bF84251", false], - // Joe LP - [joeLP, true], - //wMEMO - [wMEMO, false] -] -const stakingToken = "0xAA2439DBAd718c9329a5893A51a708C015F76346" -async function tvl(timestamp, ethBlock, chainBlocks) { - const block = chainBlocks[chain] - const balances = {} - await sumTokensAndLPsSharedOwners(balances, treasuryTokens.filter(t => t[1] === false), [treasuryAddress], block, chain, transform) - await Promise.all(treasuryTokens.filter(t => t[1] === true).map(t => - sumLPWithOnlyOneTokenOtherThanKnown(balances, t[0], treasuryAddress, stakingToken, block, chain, transform) - )) - const wmemoAddress = transform(wMEMO) - const memo = await sdk.api.abi.call({ - target: wMEMO, - abi: 'function wMEMOToMEMO(uint256 _amount) view returns (uint256)', - chain, - block: chainBlocks.avax, - params: [balances[wmemoAddress]] - }) - balances[time] = memo.output - delete balances[wmemoAddress] - return balances -} +const stakingToken = "0xAA2439DBAd718c9329a5893A51a708C015F76346" module.exports={ avax:{ - tvl, + tvl: () => 0, staking: stakingUnknownPricedLP("0x50971d6B5a3CCd79C516f914208C67C8104977dF", stakingToken, chain, joeLP, transform) } } \ No newline at end of file diff --git a/projects/oasisswapdex/index.js b/projects/oasisswapdex/index.js index de4ee6efa2..e6c233fa8f 100644 --- a/projects/oasisswapdex/index.js +++ b/projects/oasisswapdex/index.js @@ -1,10 +1,16 @@ const { getUniTVL } = require('../helper/unknownTokens') +const { staking } = require('../helper/staking') +const sdk = require("@defillama/sdk") module.exports = { misrepresentedTokens: true, methodology: - "Factory address (0xbC467D80AD6401dC25B37EB86F5fcd048Ae4BF6d) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", + "Factory address (0x947D83b35Cd2e71df4aC7B359C6761B07d0bce19) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", arbitrum: { - tvl: getUniTVL({ factory: '0xbC467D80AD6401dC25B37EB86F5fcd048Ae4BF6d', chain: 'arbitrum', useDefaultCoreAssets: true }), + tvl: sdk.util.sumChainTvls([ + getUniTVL({ factory: '0xbC467D80AD6401dC25B37EB86F5fcd048Ae4BF6d', chain: 'arbitrum', useDefaultCoreAssets: true }), + getUniTVL({ factory: '0x947D83b35Cd2e71df4aC7B359C6761B07d0bce19', chain: 'arbitrum', useDefaultCoreAssets: true }), + ]), + staking: staking("0x73c1fb66b4e183bc101b98d4c17431b667d85958", "0x602eb0d99a5e3e76d1510372c4d2020e12eaea8a", "arbitrum") }, }; // node test.js projects/oasisswapdex/index.js \ No newline at end of file diff --git a/projects/octane/index.js b/projects/octane/index.js index bbc89d3626..e2d10d5e3a 100644 --- a/projects/octane/index.js +++ b/projects/octane/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { pool2s } = require('../helper/pool2') const { stakings } = require('../helper/staking') const venusFinanceAbi = require("../cookfinance/venusFinanceAbi.json"); @@ -31,7 +32,7 @@ async function tvl(timestamp, _, { bsc: block }) { }), ]) if (vToken === '0xa07c5b74c9b40447a954e1466938b865b6bbea36') - token = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' + token = ADDRESSES.bsc.WBNB else token = (await sdk.api.abi.call({ target: vToken, diff --git a/projects/octolsd/index.js b/projects/octolsd/index.js new file mode 100644 index 0000000000..6f45d7d489 --- /dev/null +++ b/projects/octolsd/index.js @@ -0,0 +1,31 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); +const { getLogs } = require("../helper/cache/getLogs"); +const { staking } = require("../helper/staking"); + +const POOL_CONTRACT = "0x7f885c6c9f847a764d247056ed4d13dc72cef7d0"; +const OCTO_ETH_LP_ADDRESS = "0xFe4cd8B965353de5fac7c0Cb041B75f5e238B413"; +const OCTO_ADDRESS = "0x52dec19feef469d7a683963b7380ecd0b1aff9c7"; + +async function tvl(timestamp, block, chainBlocks, { api }) { + const logs = await getLogs({ + api, + target: POOL_CONTRACT, + topics: ["0x18caa0724a26384928efe604ae6ddc99c242548876259770fc88fcb7e719d8fa",], + eventAbi: "event AddPool (uint256 indexed pid, uint256 rewardToken, address indexed stakingToken, bool isRegular)", + onlyArgs: true, + fromBlock: 17209964, + }); + + const lsdAddresses = logs.map((i) => i.stakingToken); + return sumTokens2({ api, owner:POOL_CONTRACT , tokens: lsdAddresses, blacklistedTokens: [OCTO_ADDRESS, OCTO_ETH_LP_ADDRESS]}); + +} + +module.exports = { + ethereum: { + methodology: + "TVL of Staked ETH & LSD tokens, with pool2 including value of staked OCTO/ETH Uniswap-V2 LP tokens", + tvl, + pool2: staking([POOL_CONTRACT], [OCTO_ETH_LP_ADDRESS]), + }, +}; diff --git a/projects/oddz/index.js b/projects/oddz/index.js index ea68ae1087..f180e07082 100644 --- a/projects/oddz/index.js +++ b/projects/oddz/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); async function getTotalCollateral(pools, chain, block) { const balances = {}; @@ -21,8 +22,8 @@ const bscPools = [ // pool, token, representation [ "0x99f29c537c70897f60c9774d3f13bd081D423467", - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - "bsc:0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + ADDRESSES.bsc.USDC, + "bsc:" + ADDRESSES.bsc.USDC, ], // oUSD ]; @@ -42,8 +43,8 @@ const bscPool2 = [ ], // sODDZ [ "0x3c2c77353E2F6AC1578807b6b2336Bf3a3CbB014", - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", - "bsc:0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + ADDRESSES.bsc.WBNB, + "bsc:" + ADDRESSES.bsc.WBNB, ], // ODDZ-BNB ]; @@ -52,8 +53,8 @@ const avaxPools = [ // pool, token, representation [ "0x6a165bA195D9d331b2A1C9648328d409aA599465", - "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", - "avax:0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", + ADDRESSES.avax.USDC_e, + "avax:" + ADDRESSES.avax.USDC_e, ], // oUSD ]; @@ -73,8 +74,8 @@ const avaxPool2 = [ ], // sODDZ [ "0x3c2c77353E2F6AC1578807b6b2336Bf3a3CbB014", - "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "avax:0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + ADDRESSES.avax.WAVAX, + "avax:" + ADDRESSES.avax.WAVAX, ], // ODDZ-AVAX ]; diff --git a/projects/ohmw/index.js b/projects/ohmw/index.js index 070d99f238..92a987cc95 100644 --- a/projects/ohmw/index.js +++ b/projects/ohmw/index.js @@ -1,10 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const { getFixBalancesSync } = require('../helper/portedTokens') module.exports= { + hallmarks: [ + [1670457600, "Rug Pull"] + ], ...ohmTvl("0xE0Fe9Af0208ba444F81eDF348F23bd1A91Dc395E", [ ["0x11bbB41B3E8baf7f75773DB7428d5AcEe25FEC75", false], // USDC - ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", false], // WETH + [ADDRESSES.ethereum.WETH, false], // WETH ["0x2569134cbe40da06C1c9c1A24A7E1D2641099cA6", true], // OHMW-ETHW SLP ], "ethpow", "0x55C07a8AB97DAF79D478fE2bC2090858F0708AFF", "0xA5174cB46A15bD7d90Af7664372b1f4207a9ABea",undefined, getFixBalancesSync('ethpow')) } \ No newline at end of file diff --git a/projects/oin-finance/index.js b/projects/oin-finance/index.js index b8aba4e409..369dccdcdc 100644 --- a/projects/oin-finance/index.js +++ b/projects/oin-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const BigNumber = require("bignumber.js"); const axios = require("axios"); const BYTES = "100000000"; @@ -96,7 +97,7 @@ module.exports = { }, harmony: { tvl: getStaking('harmony', [ - ['0xcf664087a5bb0237a0bad6742852ec6c8d69a27a', '0xD018669755ad1e8c10807836A4729DCDEE8f036d'], // WONE + [ADDRESSES.harmony.WONE, '0xD018669755ad1e8c10807836A4729DCDEE8f036d'], // WONE ['0xb6768223895acc78efba06c28fdd8940f95a8ec2', '0x014186Ea70568806c2eEFeeaa1D2A71c18B9B95a'], // VIPER-LP ]), }, diff --git a/projects/okcoin/index.js b/projects/okcoin/index.js new file mode 100644 index 0000000000..f97b4f305e --- /dev/null +++ b/projects/okcoin/index.js @@ -0,0 +1,120 @@ +const { cexExports } = require('../helper/cex') + +const config = { + ethereum: { + owners: [ + //only wallets with more than 100 USD + '0xd30b438df65f4f788563b2b3611bd6059bff4ad9', + '0x4a8f1f5b2a3652131eac54a6f183a4a2cf44a9a6', + '0x2ce910fbba65b454bbaf6a18c952a70f3bcd8299', + '0xa28062bd708ce49e9311d6293def7df63f2b0816', + '0x964b78ef2925f24c3a8d270c10522638dee5f17f', + '0xd7efcbb86efdd9e8de014dafa5944aae36e817e4' + ], + }, + bitcoin: { + owners: [ + // we only added wallets with more than 0.1 BTC + 'bc1q39q4hqvchfq2ynyl5xttshkpvdsvp958uq94m0ddv4gt92xhnlvsj32mfy', + 'bc1qv3ertag30cfd58e9krg7ee2etp2628yapwfv27scf3t4yaqvz5wslag54w', + "36Y1UJBWGGreKCKNYQPVPr41rgG2sQF7SC", + "bc1qwkq9e5teav7n4v5v9msdyxh3tdl8782xhf9y02ffnkutppkm4rxsq5wes2", + "bc1qzrz29mxxlv3lnsng50lzpa6xrl848jp3lwmcn67t082k2xv45muswkwelc", + "bc1quktu2u654pelsn7qtmv839yyg0xecmdr59r6tuu0t5hcxq5nsxwqc5fzpu", + "bc1q65v48necseqseqm7dggtz5wf6clvwj8t8a0wswucgy8664uad7ysyf705a", + "bc1q8hnvhz3kdpxv7p7nzh2pm5qn95kfp0ff8sfk435ega90cxae374sgd8658", + "bc1qwqtm4d9x4fa7lvc88xl0autp42lkqgmp6pdpw9hpsvt9ac8k2xvq83dkz4", + "bc1qsrdlqttu69x44z9ch4r2e4t9x099rpf3p7rtu3yzpufrz4dsse0qcpqxjn", + "bc1q0peyk5wv6uathf6jlal3sqd4s66y5hfux2vh5x9z47kkt6cu4dxq05t57u", + "bc1qnp7julzx0qyyz7dapdjjyuvlhd696frj0puu9gptwdutvhryyvcsuvc3na", + "bc1qyc54t9mc7rh0srk5ctyshykqmz793y30r6jrn372v8wx76gydgwqafugxu", + "bc1qx0v26ajsfq07j4l9c60eqa7putpcvakz2u234ywh9yk3lsrd5u0s8zh9hr", + "bc1qmsdxj3j3fq9mw2733dhpvc5d79u3nhekt6fqz4y3h40gqzq7kvgq0fwjku", + "bc1qxty7nz6zwk6lfxtzsldksfsgfpvem2hewn72mc9dm09y3xq7dh7qcnyul9", + "bc1q6pgpwufv42jrq724waqdhsv9vg3wrgrcw93mj0kpdpy3d622uyyspfc9nr", + "bc1qvc6tmyr9pas29d09hu7l0n8q5eqmcepptls3lrdkhxvdc4jhatzsa6wfls", + "bc1qlaltsl05swgtvweq9uc9qmy94n2l8t92y2rxy0wnxz72jdt3qugschn0rt", + "bc1qy3s7efla47m9s32pqwg220p3a4de4f2uqe0rfmqhdfh30h52rguspl52g6", + "bc1q0708h4g2g35xfwujrrgxj6e0j2et6qkfr3a85dc2lzmyyezg4eeszmkrae", + "35EyyC2Q7UTTzmcWeuVd7b96cjkR2ykadT", + "36igHhLGsmCt4Qh1TZTgzinEjU3AQipVDi", + "36j6PzEU83pmM1PbHCP3uBH9HcuwYX1igb", + "361SutatvucBNkTBZvmNPaXThLbDm1XK5i", + "38xvfmxwR81ZtdQRw8j5XLwP38J2AioW6i", + "33qUcf4RyoysAn1TxQgzEBodvq22pDT32H", + "3HPQGA5BDsfk2Wxy4jjkg9bNpxKz33kN5o", + "3FJ6vkm44vwPQz7X82S2q9poh55tTgECM7", + "3EunnmL6LhqcB9u3PVbUAdtj1vZdGQgFBP", + "3JnxnGXVn1iSkjhsAtNRq2GGgZaDXz9SZv", + "3BiJA1srAFWoaoCPAjvNiwSmgFGGnRXCQA", + "3Mn6GnHRtA5S9HWgKdJnTfGyCgj5r8a7d8", + "bc1q2s3rjwvam9dt2ftt4sqxqjf3twav0gdx0k0q2etxflx38c3x8tnssdmnjq", + "3DekqjWw33GGZi6ER4QLTsyDZV8gEycLnt", + "3DFiiWYGszd44qADZFMae4vSwVkzKH9D1J", + "3BQ2ZssxxTpkDhSC1kanGpQ2ofNfZHfqdE", + "3L8Jow9gos1tewxYKvhxUeE43dzxFP7jfw", + "3Jcus23RVs6iyCLS4x67o64wZJuxyLJPEy", + "3EsXfkx4hdLdX6GhzthGw4G4QJSPymGyqY", + "39yNTRaotoLsGtUWrJQ2FTg4uT9i8jETNs", + "34Hx5KffA1mUQG23ZdcZ7zhpPj1jdHRPB7", + "336RCi69KyksFvfd5K8nVgv2V6L4TzPo5e", + "33Us9LTox4pPCyDRucWAeAgv5HFJ3F8QEY", + "33Miwhfghqp2fPre272zM6bBPjU6fFBjdP", + "3JrDVvApcDrJvYUhGoSXAkwCxJkxH37uRY", + "3ARVBKq7MESv4aKXeXZVjhMxmBBC7Uohvt", + "37jUoYXzKb5M2kvdXRxGnwmRrHLXuBPkGR", + "358DzMfBG2fzVMYTZjktqUQaDMR5WpYFGJ", + "35tt48ioWimAbPLxk4MfWkp6La2B7gRbRd", + "3MWUMsGmx3y1iBDCwjkZp1XdUxEHYNzUq2", + "3L39V5WF9422tHSjK7joFPnriioCrPim7j", + "35PTstw2PqGrquLnUhmye3A2nMZJzeK5MF", + "39uKss4GEpj7F8Z39tSThmatWivVW9N3cV", + "bc1qngnta9lvmht9z6y4nq5kc8x57pzan0e5daxrxtg3llgpd2jfumts8056hj", + "bc1q73cqllektyf7wgkfl9ar85sr56vuz7w8lre75ux8m0r3vcplqjmq6d8jkd", + "3Bbyo51FEEM8jzw2JQEwu7DQmBPMJzWRj4", + "3Kib3E62NKnL4bAy425G14BPofYH5qMgMF", + "3H36uhmRugEN9ySYSh4ZftP1GerUfvseXP", + "3EXXcxmcfAtMG5SeUshEZMGD3NEuDZWSXg", + "3PTcMGdNKYV5ZZDQorNYmMxoVDoghFcwWn", + "3FmNm3byE5qwzfgQbQod3jHoKGy5r4Qapp", + "36LdQB5Ae5BbnQv18R61qotgicbG1dTaBj", + "3HWqMWUcDxFjyCKvSBSmYDpGXWNqPaYoW1", + "3MxBjHLRhvV1jPLTtgUAdfDw8xJ4ww5R3z", + "3GVHA98byHdxekZjBhHBWdHCMH4GRNC61e", + "35t1TFTbUcTH5ZnZiMVqQUPUtfT4sRcTrC", + "3AxGEYCt8Hq13E6LhENzL1q6ieP7fv9M8s", + "bc1qp8gd6xakvqqg7qt9ktfpq4wrsfhp0jlyzy4npfk22xh5qk83fztqsuuspf", + "3NMQ4igWQVAZq1NeUSd4a2NLJ65w8JqmFS", + "33L5akK2tnaupkERpCndewo9hVNFkSuzFw", + "37J1MywnA1NY1mmC9ny4EgmkKEFB8zmg33", + "3Ad6D5e83PfTxZpdYQumYiMrFnc7S6hE1P", + "35VhixfJ7PhxF12F6oCSnzm6Cgu5RZUoMu", + "3FFyv1BR5r93YN8aVpmJ7JDeMH7TeccZw7", + "32UxKDSVdSeaNyAQQd5UfHveJzAikbGLmT", + "37HNTMRUGWFMzws1RF6fAp2sDP5m6tMwec", + "3JeBScBZpYp4szgK1R8LCZvA2tzkXr9VRD", + "38Tqph89kZ7pACYfB3QEWMmcqwT6iLYzsF", + "38E56tLzMHxpmwfdgB6BaPgNkHFh5FzaTi", + "3Kv5DCmHU64wN68hiD6hGyTgfEv3E7czDd", + "377313tZcAthF8jq2Z7zsfYPAHTvA3mg9P" + ] + }, + tron: { + owners: [ + 'TQ7wK19fhZZqLdj2Xcw2e6Ejs3cTZbfBbF', + ] + }, + avax: { + owners: ["0x5793da1b0c41c7db8e3eb8dbcd18fdca94a58535"] + }, + polygon: { + owners: ["0x0f51a310a4dd79d373eb8be1c0ddd54570235443"] + }, + okexchain: { + owners: ["0x5b73841a54f6f2e8b179f1801f664f470d7f37ea"] + } +} + +module.exports = cexExports(config) +module.exports.methodology = 'This wallets where collect from here https://www.okcoin.com/proof-of-reserves/download Audit ID 500509486 , 06/08/2023, 19:00:00. We are only tracking BTC wallets with more than 0.1 BTC. We are only tracking ETH wallets with more than 100$.' + diff --git a/projects/olivedao/index.js b/projects/olivedao/index.js index a3bc049e28..77654254ac 100644 --- a/projects/olivedao/index.js +++ b/projects/olivedao/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const {transformPolygonAddress} = require('../helper/portedTokens'); const ethPool = "0x8e300739960457B532Af3bEd62475B790e0Dee5E" const usdcPool = "0x05a37e1745926D8725A6C5dbD7Fd9873Dd9E356e" -const usdcMatic = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" -const wethMatic = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619" +const usdcMatic = ADDRESSES.polygon.USDC +const wethMatic = ADDRESSES.polygon.WETH_1 async function tvl(_timestamp, ethBlock, chainBlocks) { const balances = {}; diff --git a/projects/olympulsex/index.js b/projects/olympulsex/index.js new file mode 100644 index 0000000000..2fced2012d --- /dev/null +++ b/projects/olympulsex/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require('../helper/unknownTokens') + +const stakingToken = "0xBB366A397D7d4d2BEDABD9139D4c32a8826605Ed"; // SEX +const staking = "0xf1Bc988e7EaBA7a2dbF0121E6ad9BEA82A1AB1ff"; +const LP = '0x2d593b3472d6a5439bC1523a04C2aec314CBc44c' + +module.exports = { + pulse: { + tvl: () => 0, + staking: sumTokensExport({ owner: staking, tokens: [stakingToken], lps: [LP], useDefaultCoreAssets: true, }), + } +} \ No newline at end of file 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..157d96f2ed 100644 --- a/projects/olympus/index.js +++ b/projects/olympus/index.js @@ -1,16 +1,19 @@ -const sdk = require("@defillama/sdk"); +const ADDRESSES = require('../helper/coreAssets.json') const { blockQuery } = require("../helper/http"); -const env= require("../helper/env"); -const BigNumber = require("bignumber.js"); +const { getEnv } = require("../helper/env"); +const { staking } = require('../helper/staking'); +const { sumTokens2 } = require("../helper/unwrapLPs"); const OlympusStakings = [ // Old Staking Contract "0x0822F3C03dcc24d200AFF33493Dc08d0e1f274A2", // New Staking Contract "0xFd31c7d00Ca47653c6Ce64Af53c1571f9C36566a", + "0xb63cac384247597756545b500253ff8e607a8020", ]; -const OHM = "0x383518188c0c6d7730d91b2c03a03c837814a899"; +const OHM_V1 = "0x383518188c0c6d7730d91b2c03a03c837814a899" // this is OHM v1 +const OHM = "0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5" // 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. @@ -22,8 +25,8 @@ const addressMap = { "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", // veFXS -> FXS "0x3fa73f1e5d8a792c80f426fc8f84fbf7ce9bbcac": "0xc0c293ce456ff0ed870add98a0828dd4d2903dbf", //vlAURA -> AURA - "0x72a19342e8f1838460ebfccef09f6585e32db86e": - "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", //vlCVX -> CVX + [ADDRESSES.ethereum.vlCVX]: + ADDRESSES.ethereum.CVX, //vlCVX -> CVX "0xa02d8861fbfd0ba3d8ebafa447fe7680a3fa9a93": "0xd1ec5e215e8148d76f4460e4097fd3d5ae0a3558", //aura50OHM-50WETH -> 50OHM-50WETH "0x0ef97ef0e20f84e82ec2d79cbd9eda923c3daf09": @@ -40,24 +43,6 @@ const addressMap = { "0xc55126051B22eBb829D00368f4B12Bde432de5Da", //BTRFLY -> BTRFLYV2 }; -/*** Staking of native token (OHM) TVL Portion ***/ -const staking = async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; - - for (const stakings of OlympusStakings) { - const stakingBalance = await sdk.api.abi.call({ - abi: "erc20:balanceOf", - target: OHM, - params: stakings, - block: ethBlock, - }); - - sdk.util.sumSingleBalance(balances, OHM, stakingBalance.output); - } - - return balances; -}; - const protocolQuery = (block) => ` query { tokenRecords(orderDirection: desc, orderBy: block, where: {block: ${block}}) { @@ -78,15 +63,6 @@ query { } }`; -const subgraphUrls = { - ethereum: `https://gateway.thegraph.com/api/${env.OLYMPUS_GRAPH_API_KEY}/subgraphs/id/DTcDcUSBRJjz9NeoK5VbXCVzYbRTyuBwdPUqMi8x32pY`, - arbitrum: - "https://api.thegraph.com/subgraphs/name/olympusdao/protocol-metrics-arbitrum", - fantom: - "https://api.thegraph.com/subgraphs/name/olympusdao/protocol-metrics-fantom", - polygon: - "https://api.thegraph.com/subgraphs/name/olympusdao/protocol-metrics-polygon", -}; //Subgraph returns balances in tokenAddress / allocator pairs. Need to return based on balance. function sumBalancesByTokenAddress(arr) { @@ -112,7 +88,16 @@ 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 subgraphUrls = { + ethereum: `https://gateway.thegraph.com/api/${getEnv('OLYMPUS_GRAPH_API_KEY')}/subgraphs/id/DTcDcUSBRJjz9NeoK5VbXCVzYbRTyuBwdPUqMi8x32pY`, + arbitrum: + "https://api.thegraph.com/subgraphs/name/olympusdao/protocol-metrics-arbitrum", + fantom: + "https://api.thegraph.com/subgraphs/name/olympusdao/protocol-metrics-fantom", + polygon: + "https://api.thegraph.com/subgraphs/name/olympusdao/protocol-metrics-polygon", +}; const indexedBlockForEndpoint = await blockQuery( subgraphUrls[api.chain], getLatestBlockIndexed, @@ -130,16 +115,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; @@ -148,28 +133,28 @@ 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); + ).filter(i => { + if (api.chain !== 'arbitrum') return true; + return !['0x89dc7e71e362faf88d92288fe2311d25c6a1b5e0000200000000000000000423', '0xce6195089b302633ed60f3f427d1380f6a2bfbc7000200000000000000000424'].includes(i.tokenAddress) + }) + 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 sumTokens2({ api, resolveLP: true, }) } -async function pool2(timestamp, block, _, { api }) { +async function ownTokens(timestamp, block, _, { api }) { return tvl(timestamp, block, _, { api }, true); } @@ -179,9 +164,9 @@ module.exports = { methodology: "TVL is the sum of the value of all assets held by the treasury (excluding pTokens). Please visit https://app.olympusdao.finance/#/dashboard for more info.", ethereum: { - staking, + staking: staking(OlympusStakings, [OHM, OHM_V1]), tvl, - // pool2, + ownTokens, }, arbitrum: { tvl, diff --git a/projects/omicron/api.js b/projects/omicron/api.js new file mode 100644 index 0000000000..469bda32f6 --- /dev/null +++ b/projects/omicron/api.js @@ -0,0 +1,8 @@ +const index = require('./index') + +module.exports = { + arbitrum: { + tvl: () => 0, + staking: index.arbitrum.staking, + } +} \ No newline at end of file diff --git a/projects/omicron/index.js b/projects/omicron/index.js index eca79c7fd2..696db9b0e9 100644 --- a/projects/omicron/index.js +++ b/projects/omicron/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x9EF8600b0f107c083F9df557e0Ddf12E071E75fe" module.exports = ohmTvl(treasury, [ //USDC - ["0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", false], + [ADDRESSES.arbitrum.USDC, false], //MIM - ["0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a", false], + [ADDRESSES.arbitrum.MIM, false], //sushi LP ["0xe4ad045abb586dbdae6b11a4d2c6ff5434b93ed1", true], // diff --git a/projects/omnidex-perpetuals/index.js b/projects/omnidex-perpetuals/index.js new file mode 100644 index 0000000000..fb6902ea6d --- /dev/null +++ b/projects/omnidex-perpetuals/index.js @@ -0,0 +1,10 @@ +const { gmxExports } = require('../helper/gmx') + +//Telos +const Vault = '0x8F23134EBc390856E01993dE9f7F837bcD93014a'; + +module.exports = { + telos: { + tvl: gmxExports({ vault: Vault }) + }, +}; \ No newline at end of file diff --git a/projects/omt-finance/index.js b/projects/omt-finance/index.js new file mode 100644 index 0000000000..cd1404a9f8 --- /dev/null +++ b/projects/omt-finance/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + onus:{ + tvl: gmxExports({ vault: '0x9a10B55FdE534e7809345D9DE0191a2b01E2F399', }) + }, +}; diff --git a/projects/onc/index.js b/projects/onc/index.js index c8949044a2..c1b71cdddf 100644 --- a/projects/onc/index.js +++ b/projects/onc/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { @@ -5,7 +6,7 @@ module.exports = { era: { tvl: sumTokensExport({ owner: "0x581f87De7a655f50932F706873fcc7024d2309Fa", tokens: [ - "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4", // USDC + ADDRESSES.era.USDC, // USDC "0x4BEf76b6b7f2823C6c1f4FcfEACD85C24548ad7e", // DAI ] }), @@ -13,25 +14,25 @@ module.exports = { kava: { tvl: sumTokensExport({ owner: "0x481654217A24B43fB63a7761d7033Fdf9361eAB6", tokens: [ - "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b", // WKAVA + ADDRESSES.kava.WKAVA, // WKAVA ] }), }, arbitrum: { tvl: sumTokensExport({ owner: "0xc9cb7AB00802165e316A6f8c241E87E0Ee72e787", tokens: [ - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", // USDC - "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", // USDT - "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", // DAI + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI ] }), }, bsc: { tvl: sumTokensExport({ owner: "0x7c24b813089675cf5484afa4850FE9276D97b461", tokens: [ - "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", // BUSD - "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", // USDC - "0x55d398326f99059fF775485246999027B3197955", // USDT + ADDRESSES.bsc.BUSD, // BUSD + ADDRESSES.bsc.USDC, // USDC + ADDRESSES.bsc.USDT, // USDT "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", // DAI ] }), @@ -39,9 +40,9 @@ module.exports = { avax: { tvl: sumTokensExport({ owner: "0xD5a7Df8B56d285011AbE406235109c029F45797A", tokens: [ - "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", // USDC - "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", // USDT - "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", // DAI + ADDRESSES.avax.USDC, // USDC + ADDRESSES.avax.USDt, // USDT + ADDRESSES.avax.DAI, // DAI ] }), }, diff --git a/projects/ondofinance-v1/index.js b/projects/ondofinance-v1/index.js index f0094939d8..86e7796899 100644 --- a/projects/ondofinance-v1/index.js +++ b/projects/ondofinance-v1/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -5,7 +6,7 @@ const { default: BigNumber } = require("bignumber.js"); const { getBlock } = require("../helper/http"); const NEAR_TOKEN = "0x85f17cf997934a597031b2e18a9ab6ebd4b9f6a4"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH = ADDRESSES.ethereum.WETH; async function addEthBalances(addresses, block, balances) { await Promise.all( @@ -44,7 +45,7 @@ const data = { supported_tokens: [ "0x4Eb8b4C65D8430647586cf44af4Bf23dEd2Bb794", "0x36784d3B5aa8A807698475b3437a13fA20B7E9e1", - "0x853d955aCEf822Db058eb8505911ED77F175b99e", + ADDRESSES.ethereum.FRAX, "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", "0x956F47F50A910163D8BF957Cf5846D573E7f87CA", "0x0f2D719407FdBeFF09D87557AbB7232601FD9F29", @@ -52,7 +53,7 @@ const data = { "0x67B6D479c7bB412C54e03dCA8E1Bc6740ce6b99C", "0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e", "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", - "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", + ADDRESSES.ethereum.CVX, "0xff20817765cb7f73d4bde2e66e067e58d11095c2", "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2", "0x470ebf5f030ed85fc1ed4c2d36b9dd02e77cf1b7", @@ -60,7 +61,7 @@ const data = { "0xc770eefad204b5180df6a14ee197d99d808ee52d", "0xc7283b66eb1eb5fb86327f08e1b5816b0720212b", "0xa693B19d2931d498c5B318dF961919BB4aee87a5", - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + ADDRESSES.ethereum.WETH, "0x85f17cf997934a597031b2e18a9ab6ebd4b9f6a4", ], }; diff --git a/projects/ondofinance/index.js b/projects/ondofinance/index.js index cfaf0c09cd..8574f516e6 100644 --- a/projects/ondofinance/index.js +++ b/projects/ondofinance/index.js @@ -1,18 +1,31 @@ -const sdk = require("@defillama/sdk"); -const funds = [ - "0x1B19C19393e2d034D8Ff31ff34c81252FcBbee92", // OUSG -]; + +const { toUSDTBalances } = require('../helper/balances') +const sdk = require('@defillama/sdk') module.exports = { methodology: "Sums Ondo's fund supplies.", misrepresentedTokens: true, doublecounted: true, +}; + +const config = { ethereum: { - tvl: async (_, __, ___, { api }) => { + OUSG: '0x1B19C19393e2d034D8Ff31ff34c81252FcBbee92', + }, + polygon: { + OUSG: '0xbA11C5effA33c4D6F8f593CFA394241CfE925811', + } +} + +Object.keys(config).forEach(chain => { + let funds = config[chain] + funds = Object.values(funds) + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const ethApi = new sdk.ChainApi({ chain: 'ethereum', block: _b}) const supplies = await api.multiCall({ abi: 'erc20:totalSupply', calls: funds }) - const balances = {} - supplies.forEach((v, i) => sdk.util.sumSingleBalance(balances, funds[i], v, api.chain)) - return balances + const tokenPrice = (await ethApi.call({ abi: 'uint256:rwaPrice', target: '0xc53e6824480d976180A65415c19A6931D17265BA'})) / 1e18 + return toUSDTBalances(supplies.reduce((a, i) => a +i/1e18, 0) * tokenPrice) } - }, -}; + } +}) \ No newline at end of file diff --git a/projects/one-ring/index.js b/projects/one-ring/index.js index 0a56ed8608..7742ba6a29 100644 --- a/projects/one-ring/index.js +++ b/projects/one-ring/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { @@ -5,9 +6,9 @@ const { transformPolygonAddress, } = require("../helper/portedTokens"); const VAULT_CONTRACT_FANTOM = "0x4e332D616b5bA1eDFd87c899E534D996c336a2FC"; -const DAI_ADDRSSS_FANTOM = "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"; +const DAI_ADDRSSS_FANTOM = ADDRESSES.fantom.DAI; const VAULT_CONTRACT_POLYGON = "0x6C89E1cD0aa5F62cA2260709BC3895A4Cb735f6c"; -const DAI_ADDRESS_POLYGON = "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063"; +const DAI_ADDRESS_POLYGON = ADDRESSES.polygon.DAI; async function tvlFantom(timestamp, block, chainBlocks) { const balances = {}; @@ -58,6 +59,9 @@ async function tvlPolygon(timestamp, block, chainBlocks) { } module.exports = { + hallmarks: [ + [1647907200, "Rug Pull"] + ], fantom: { tvl: tvlFantom, }, diff --git a/projects/onedaofinance/index.js b/projects/onedaofinance/index.js index ff822425b4..fdccd8a4a4 100644 --- a/projects/onedaofinance/index.js +++ b/projects/onedaofinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const { getFixBalancesSync } = require('../helper/portedTokens') @@ -17,7 +18,7 @@ module.exports= { ["0x4f658217f163509115b6e1fbba37cd9aefbdba12", true], // ODAO-DAI SLP ["0x3c2b8be99c50593081eaa2a724f0b8285f5aba8f", false], // USDT ["0x985458e523db3d53125813ed68c274899e9dfab4", false], // USDC - ["0xcf664087a5bb0237a0bad6742852ec6c8d69a27a", false], // WONE + [ADDRESSES.harmony.WONE, false], // WONE ["0x224e64ec1bdce3870a6a6c777edd450454068fec", false] // WUST ], "harmony", "0x9cAc73eA219e5F8a96485c937E2C8A617f7F4f37", "0x947394294F75D7502977AC6813FD99f77C2931ec",addr=>{ return replacements[addr] || `harmony:${addr}`}, getFixBalancesSync('harmony')) diff --git a/projects/onedex/index.js b/projects/onedex/index.js new file mode 100644 index 0000000000..73fd88f9b6 --- /dev/null +++ b/projects/onedex/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport } = require('../helper/sumTokens') + +module.exports = { + timetravel: false, + elrond: { + tvl: sumTokensExport({ owner: 'erd1qqqqqqqqqqqqqpgqqz6vp9y50ep867vnr296mqf3dduh6guvmvlsu3sujc', }), + }, +}; \ No newline at end of file diff --git a/projects/oneswap/index.js b/projects/oneswap/index.js index c7e030af07..f69fc87473 100644 --- a/projects/oneswap/index.js +++ b/projects/oneswap/index.js @@ -1,38 +1,21 @@ -const utils = require('../helper/utils') -const { getApiTvl } = require('../helper/historicalApi') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const tronNull = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb' -function getTvlChain(chain) { - return async (timestamp) => { - return getApiTvl(timestamp, - async () => { - const data = await utils.fetchURL(`https://www.oneswap.net/res/${chain}/market/statistic/total`) - return data.data.data.total_liquidity_value - }, - async () => { - const data = await utils.fetchURL(`https://www.oneswap.net/res/${chain}/market/statistic/graph/liquidity?interval=30d`) - return data.data.data.map(d => ({ - date: Math.round(new Date(d.timestamp).getTime() / 1000), - totalLiquidityUSD: d.liquidity - })) - } - ) - } +const config = { + ethereum: { factory: '0x5ed3c9089ed0355bc77cf439dc2ed28c4054c8c4' }, + bsc: { factory: '0xEeFa8Ca24dd1D573882277b917720953e999734D' }, + csc: { factory: '0xEeFa8Ca24dd1D573882277b917720953e999734D' }, + tron: { factory: 'TTw6kcn7yGExHZRuJXNP2saq6xZ7oTHne4' }, } -module.exports = { - misrepresentedTokens: true, - ethereum: { - tvl: getTvlChain("eth") - }, - csc: { - tvl: getTvlChain("cet") - }, - tron: { - tvl: getTvlChain("trx") - }, - bsc: { - tvl: getTvlChain("bnb") - }, - methodology: `Counts the liquidity on all AMM pools. Metrics come from: 'https://www.oneswap.net/eth', - 'https://www.oneswap.net/cet', 'https://www.oneswap.net/trx' and 'https://www.oneswap.net/bnb'`, -} \ No newline at end of file +Object.keys(config).forEach(chain => { + const { factory } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const pairs = await api.fetchList({ lengthAbi: 'uint256:allPairsLength', itemAbi: 'function allPairs(uint256) view returns (address)', target: factory, permitFailure: true, }) + const data = await api.multiCall({ abi: 'function getTokensFromPair(address) view returns (address, address)', calls: pairs, target: factory}) + const ownerTokens = data.map((v, i) => [v.map(i => i === tronNull ? nullAddress : i), pairs[i]]) + return sumTokens2({ api, ownerTokens, blacklistedTokens: pairs}) + } + } +}) \ No newline at end of file diff --git a/projects/onsenswap/index.js b/projects/onsenswap/index.js new file mode 100644 index 0000000000..a5ca229177 --- /dev/null +++ b/projects/onsenswap/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + start: 1682168400, + era: { + tvl: getUniTVL({ + factory: "0x0E15a1a03bD356B17F576c50d23BF7FC00305590", + useDefaultCoreAssets: true, + fetchBalances: true, + }), + }, +}; diff --git a/projects/onus-usdo/index.js b/projects/onus-usdo/index.js new file mode 100644 index 0000000000..ad96fa1cf5 --- /dev/null +++ b/projects/onus-usdo/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + onus: { + tvl: sumTokensExport({ owner: '0x3D513abc13f53A1E18Ae59A7B5B0930E55733C87', tokens: [ADDRESSES.onus.BUSD]}) + } +} \ No newline at end of file diff --git a/projects/ooki/index.js b/projects/ooki/index.js index 0c18e506b6..58f5bd90a5 100644 --- a/projects/ooki/index.js +++ b/projects/ooki/index.js @@ -1,214 +1,58 @@ - -/*================================================== -Modules -==================================================*/ -const BigNumber = require('bignumber.js'); -const sdk = require("@defillama/sdk"); +const { sumTokens2 } = require('../helper/unwrapLPs') const { stakings } = require("../helper/staking"); const abi = require('./abi'); const registry = require('./registry'); -let iTokens = []; - -let iTokensNew = []; - -const tokens = { - ethereum: { - 'bzrx': '0x56d811088235F11C8920698a204A5010a788f4b3', - 'ooki': '0x0De05F6447ab4D22c8827449EE4bA2D5C288379B', - }, - polygon: { - 'bzrx': '0x54cFe73f2c7d0c4b62Ab869B473F5512Dc0944D2', - 'ooki': '0xCd150B1F528F326f5194c012f32Eb30135C7C2c9', - }, - bsc: { - 'ooki': '0xa5a6817ac4c164F27df3254B71fE83904B1C3c3e', - }, - arbitrum: { - 'ooki': '0x400F3ff129Bc9C9d239a567EaF5158f1850c65a4', - }, - optimism: { - } -} - const contracts = { - ethereum: { - 'protocol': '0xD8Ee69652E4e4838f2531732a46d1f7F584F0b7f', - 'registry': '0xf0E474592B455579Fe580D610b846BdBb529C6F7', - }, - polygon: { - 'protocol': '0x059D60a9CEfBc70b9Ea9FFBb9a041581B1dFA6a8', - 'registry': '0x4B234781Af34E9fD756C27a47675cbba19DC8765', - }, - bsc: { - 'protocol': '0xD154eE4982b83a87b0649E5a7DDA1514812aFE1f', - 'registry': '0x1BE70f29D30bB1D325E5D76Ee73109de3e50A57d', - }, - arbitrum: { - 'protocol': '0x37407F3178ffE07a6cF5C847F8f680FEcf319FAB', - 'registry': '0x86003099131d83944d826F8016E09CC678789A30', - }, - optimism: { - 'protocol': '0xAcedbFd5Bc1fb0dDC948579d4195616c05E74Fd1', - 'registry': '0x22a2208EeEDeb1E2156370Fd1c1c081355c68f2B', - } -} - -/*================================================== -Main -==================================================*/ -async function eth(timestamp, block, chainBlocks) { -return getBalances(timestamp, block, chainBlocks, 'ethereum') -} - -async function bsc(timestamp, block, chainBlocks) { -return getBalances(timestamp, block, chainBlocks, 'bsc') -} - -async function polygon(timestamp, block, chainBlocks) { -return getBalances(timestamp, block, chainBlocks, 'polygon') -} - -async function optimism(timestamp, block, chainBlocks) { -return getBalances(timestamp, block, chainBlocks, 'optimism') -} - -async function arbitrum(timestamp, block, chainBlocks) { -return getBalances(timestamp, block, chainBlocks, 'arbitrum') -} - -async function getBalances(timestamp, block, chainBlocks, network) { - let balances = {}; - const balanceOfCalls = []; - const getTokensResult = await sdk.api.abi.call({ - chainBlocks, - target: contracts[network].registry, - params: [0, 200], - chain: network, - abi: registry.getTokens - }); - - getTokensResult.output.forEach((token) =>{ - iTokensNew.push({ - iTokenAddress: token[0], - underlyingAddress: token[1] - }); - - const target = token[1]; - balanceOfCalls.push({ target: target, params: contracts[network].protocol }); - }); - - iTokens = iTokens.concat(iTokensNew); - const iTokenCalls = iTokens.map((iToken) => ({ - target: iToken.iTokenAddress - })); - - const supplyResult = await sdk.api.abi.multiCall({ - chainBlocks, - calls: iTokenCalls, - chain: network, - abi: abi.totalAssetSupply - }); - - const borrowResult = await sdk.api.abi.multiCall({ - chainBlocks, - calls: iTokenCalls, - chain: network, - abi: abi.totalAssetBorrow - }); - - iTokens.forEach((iToken) => { - const supply = supplyResult.output.find((result) => (result.input.target === iToken.iTokenAddress)); - const borrow = borrowResult.output.find((result) => (result.input.target === iToken.iTokenAddress)); - - const totalSupply = (supply && supply.success)?supply.output:0; - const totalBorrow = (borrow && borrow.success)?borrow.output:0; - - if (totalSupply > totalBorrow) { - const token = iToken.underlyingAddress; - balances[token] = BigNumber(totalSupply).minus(totalBorrow).toFixed(); - } - }); - - - //Balances - const balanceOfs = await sdk.api.abi.multiCall({ - chainBlocks, - calls: balanceOfCalls, - chain: network, - abi: abi["balanceOf"], - }); - - for(let i = 0; i{ - balances[remap(key, network)] = balances[key]; - delete balances[key] - }) - - - return balances; + ethereum: { + 'protocol': '0xD8Ee69652E4e4838f2531732a46d1f7F584F0b7f', + 'registry': '0xf0E474592B455579Fe580D610b846BdBb529C6F7', + }, + polygon: { + 'protocol': '0x059D60a9CEfBc70b9Ea9FFBb9a041581B1dFA6a8', + 'registry': '0x4B234781Af34E9fD756C27a47675cbba19DC8765', + }, + bsc: { + 'protocol': '0xD154eE4982b83a87b0649E5a7DDA1514812aFE1f', + 'registry': '0x1BE70f29D30bB1D325E5D76Ee73109de3e50A57d', + }, + arbitrum: { + 'protocol': '0x37407F3178ffE07a6cF5C847F8f680FEcf319FAB', + 'registry': '0x86003099131d83944d826F8016E09CC678789A30', + }, + optimism: { + 'protocol': '0xAcedbFd5Bc1fb0dDC948579d4195616c05E74Fd1', + 'registry': '0x22a2208EeEDeb1E2156370Fd1c1c081355c68f2B', + } +} + +async function getBalances(api, isBorrowed) { + const network = api.chain ?? 'ethereum' + const info = await api.call({ + target: contracts[network].registry, + params: [0, 200], + abi: registry.getTokens + }) + if (!isBorrowed) + return sumTokens2({ api, tokensAndOwners: info.map(i => [i.asset, i.token]) }) + + const borrowedBals = await api.multiCall({ abi: abi.totalAssetBorrow, calls: info.map(i => i.token) }) + api.addTokens(info.map(i => i.asset), borrowedBals) } -function remap(token, network){ - if(token === tokens[network].bzrx){ - token = 'ethereum:'+tokens['ethereum'].bzrx; - } - else{ - token = network+':'+token; - } - return token -} - -/*================================================== -Staking and Treasury -==================================================*/ - let ooki = '0x0De05F6447ab4D22c8827449EE4bA2D5C288379B' let bzrx = '0x56d811088235F11C8920698a204A5010a788f4b3' -const treasuryContract = '0xfedC4dD5247B93feb41e899A09C44cFaBec29Cbc' let stakingContracts = [ - '0xe95Ebce2B02Ee07dEF5Ed6B53289801F7Fc137A4', - '0x16f179f5c344cc29672a58ea327a26f64b941a63' + '0xe95Ebce2B02Ee07dEF5Ed6B53289801F7Fc137A4', + '0x16f179f5c344cc29672a58ea327a26f64b941a63' ] -let TreasureTokens = [ - '0x56d811088235F11C8920698a204A5010a788f4b3', //bzrx - '0x0De05F6447ab4D22c8827449EE4bA2D5C288379B', //ooki - //'vbzrx': '0xB72B31907C1C95F3650b64b2469e08EdACeE5e8F', vesting tokens not counted - '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490', //pool3 -] - -let ookistaking = stakings(stakingContracts, ooki, 'ethereum') -let bzrxstaking = stakings(stakingContracts, bzrx, 'ethereum') - -module.exports = { - ethereum:{ - tvl: eth, - staking: sdk.util.sumChainTvls([ookistaking,bzrxstaking]), - }, - polygon:{ - tvl: polygon - }, - bsc:{ - tvl: bsc - }, - arbitrum:{ - tvl: arbitrum - }, - optimism:{ - tvl: optimism - }, -}; - +Object.keys(contracts).forEach(chain => { + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => getBalances(api, false), + borrowed: async (_, _b, _cb, { api, }) => getBalances(api, true), + } +}) +module.exports.ethereum.staking = stakings(stakingContracts, [ooki, bzrx]) diff --git a/projects/openeden-tbill/index.js b/projects/openeden-tbill/index.js new file mode 100644 index 0000000000..d5a4d63f31 --- /dev/null +++ b/projects/openeden-tbill/index.js @@ -0,0 +1,12 @@ +async function tvl(_, _b, _cb, { api, }) { + const contract = '0xad6250f0bd49f7a1eb11063af2ce9f25b9597b0f' + const [bal, token] = await api.batchCall([ + { abi: 'uint256:assetsAvailable', target: contract }, + { abi: 'address:asset', target: contract }, + ]) + api.add(token, bal) +} + +module.exports = { + ethereum: { tvl }, +} \ No newline at end of file diff --git a/projects/openworld/index.js b/projects/openworld/index.js new file mode 100644 index 0000000000..d5580cf708 --- /dev/null +++ b/projects/openworld/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + arbitrum: { + tvl: gmxExports({ vault: '0xec45801399EB38B75A3bf793051b00bb64fF3eF8', }) + }, +} \ No newline at end of file diff --git a/projects/optidoge/index.js b/projects/optidoge/index.js index b920dce941..5952b44af6 100644 --- a/projects/optidoge/index.js +++ b/projects/optidoge/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const {pool2Exports} = require("../helper/pool2") const {stakingUnknownPricedLP} = require("../helper/staking") -const weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const weth = ADDRESSES.ethereum.WETH async function tvl(time, _ethBlock, {optimism: block}){ const eth = await sdk.api.eth.getBalance({ target: '0xc911523c466b4E1dADE1bac9A2D4ceA3F9E1A2ae', diff --git a/projects/optifi/index.js b/projects/optifi/index.js index 4dbb1a83dc..b203bea557 100644 --- a/projects/optifi/index.js +++ b/projects/optifi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { Program } = require("@project-serum/anchor"); const { getProvider, sumTokens2, } = require("../helper/solana"); const idl = require('./idl.json') @@ -14,7 +15,7 @@ async function tvl() { } const tokens = [ - 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC + ADDRESSES.solana.USDC, // USDC ] const serumPCVaults = [ diff --git a/projects/optinyan/index.js b/projects/optinyan/index.js index e4e25bf553..a075ac1808 100644 --- a/projects/optinyan/index.js +++ b/projects/optinyan/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') -const weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const weth = ADDRESSES.ethereum.WETH async function tvl(time, _ethBlock, {optimism: block}){ const eth = await sdk.api.eth.getBalance({ target: '0x6F7Fe8b33358a3F4313421186b98CA78127C6DB6', diff --git a/projects/opyn-gamma/gamma_avax.js b/projects/opyn-gamma/gamma_avax.js index 486cacc762..a3c07443f3 100644 --- a/projects/opyn-gamma/gamma_avax.js +++ b/projects/opyn-gamma/gamma_avax.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const marginPool = "0xCCF6629aEaB734E621Cc59EBb0297196774fDb9D"; -const wavax = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7'.toLowerCase() +const wavax = ADDRESSES.avax.WAVAX.toLowerCase() module.exports = sumTokensExport({ owner: marginPool, tokens: [wavax]}) diff --git a/projects/opyn-gamma/gamma_polygon.js b/projects/opyn-gamma/gamma_polygon.js index 1dd5d44ab9..8ba14c5fce 100644 --- a/projects/opyn-gamma/gamma_polygon.js +++ b/projects/opyn-gamma/gamma_polygon.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const marginPool = "0x30ae5debc9edf60a23cd19494492b1ef37afa56d"; -const WETH = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619"; -const collateralAssets = ['0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', - '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', - '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', WETH, ] +const WETH = ADDRESSES.polygon.WETH_1; +const collateralAssets = [ADDRESSES.polygon.WMATIC_2, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.WBTC, WETH, ] const { sumTokensExport } = require('../helper/unwrapLPs') diff --git a/projects/opyn-squeeth/index.js b/projects/opyn-squeeth/index.js index b7f8559505..c33c840b9d 100644 --- a/projects/opyn-squeeth/index.js +++ b/projects/opyn-squeeth/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const START_BLOCK = 13982541; const controller = "0x64187ae08781B09368e6253F9E94951243A493D5".toLowerCase(); -const ETH = '0x0000000000000000000000000000000000000000'; -const WETH = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'.toLowerCase(); +const ETH = ADDRESSES.null; +const WETH = ADDRESSES.ethereum.WETH.toLowerCase(); const uniPool = '0x82c427adfdf2d245ec51d8046b41c4ee87f0d29c'; diff --git a/projects/oraichain.js b/projects/oraichain.js index 6125c68852..26db097ac4 100644 --- a/projects/oraichain.js +++ b/projects/oraichain.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("./helper/unwrapLPs") const { transformBscAddress } = require("./helper/portedTokens"); const BigNumber = require('bignumber.js'); const { sumSingleBalance } = require("@defillama/sdk/build/generalUtil"); -const usdtAddress = '0xdac17f958d2ee523a2206206994597c13d831ec7'; +const usdtAddress = ADDRESSES.ethereum.USDT; const oraichainToken = { 'bsc': '0xa325ad6d9c92b55a3fc5ad7e412b1518f96441c0', diff --git a/projects/orbitbridge/index.js b/projects/orbitbridge/index.js index 654b92cf20..d8c2c57980 100644 --- a/projects/orbitbridge/index.js +++ b/projects/orbitbridge/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { get } = require('../helper/http') const { getConfig } = require('../helper/cache') @@ -24,17 +25,17 @@ const vaults = { const farms = { bsc: [ - '0x0000000000000000000000000000000000000000',// BNB - '0x55d398326f99059ff775485246999027b3197955',// USDT-B - '0xe9e7cea3dedca5984780bafc599bd69add087d56',// BUSD + ADDRESSES.null,// BNB + ADDRESSES.bsc.USDT,// USDT-B + ADDRESSES.bsc.BUSD,// BUSD '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82',// CAKE ], ethereum: [ - '0x0000000000000000000000000000000000000000',// ETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',// USDT - '0x6B175474E89094C44Da98b954EedeAC495271d0F',// DAI - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',// USDC - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',// WBTC + ADDRESSES.null,// ETH + ADDRESSES.ethereum.USDT,// USDT + ADDRESSES.ethereum.DAI,// DAI + ADDRESSES.ethereum.USDC,// USDC + ADDRESSES.ethereum.WBTC,// WBTC ] } @@ -111,7 +112,7 @@ module.exports = { tvl: async () => { let ton_vault = "EQAtkbV8ysI75e7faO8Ihu0mFtmsg-osj7gmrTg_mljVRccy" const res = await get(`https://tonapi.io/v1/account/getInfo?account=${ton_vault}`) - return await transformBalances('ton', {"0x0000000000000000000000000000000000000000": res.balance}) + return await transformBalances('ton', {[ADDRESSES.null]: res.balance}) } }, } \ No newline at end of file diff --git a/projects/orbiter-one/index.js b/projects/orbiter-one/index.js new file mode 100644 index 0000000000..e142370c62 --- /dev/null +++ b/projects/orbiter-one/index.js @@ -0,0 +1,11 @@ +const { compoundExports2 } = require('../helper/compound') + +const moonbeamConfig = { + comptroller: "0x27DC3DAdBfb40ADc677A2D5ef192d40aD7c4c97D", + cether: "0xCc444ca6bba3764Fc55BeEFe4FFA27435cF6c259", + fetchBalances: true, +} + +module.exports = { + moonbeam: compoundExports2(moonbeamConfig) +} \ No newline at end of file diff --git a/projects/orca-kujira/index.js b/projects/orca-kujira/index.js index 586ad767ba..0bd465e0ba 100644 --- a/projects/orca-kujira/index.js +++ b/projects/orca-kujira/index.js @@ -1,9 +1,10 @@ -const { get } = require("../helper/http"); -const { sumTokens, endPoints } = require('../helper/chain/cosmos') +const { sumTokens } = require('../helper/chain/cosmos') +const { getConfig } = require("../helper/cache"); async function tvl() { - const { contracts: orcaPools } = await get(endPoints.kujira + "/cosmwasm/wasm/v1/code/59/contracts?pagination.limit=100"); + const contracts = await getConfig("kujira/contracts", "https://raw.githubusercontent.com/Team-Kujira/kujira.js/master/src/resources/contracts.json"); + const orcaPools = contracts["kaiyo-1"].orca.map(x => x.address) const owners = [ ...orcaPools, ] diff --git a/projects/orca/index.js b/projects/orca/index.js index ca91060300..a3c21e323d 100644 --- a/projects/orca/index.js +++ b/projects/orca/index.js @@ -1,24 +1,223 @@ -const { get } = require('../helper/http') +const { getProvider, sumTokens2, exportDexTVL, } = require('../helper/solana') +const { Program, } = require("@project-serum/anchor"); +const sdk = require('@defillama/sdk') -const endpoint = "https://api.orca.so/pools"; -const wpEndpoint = "https://api.mainnet.orca.so/v1/whirlpool/list"; - -async function fetch() { - const [pools, {whirlpools}] = await Promise.all([get(endpoint), get(wpEndpoint)]); - const poolsTvl = pools.reduce((sum, pool) => - sum + pool.liquidity - , 0); - const wpTvl = whirlpools.reduce((sum, pool) => - sum + (pool.tvl ?? 0) - , 0); - return poolsTvl + wpTvl; +async function tvl() { + const provider = getProvider() + const programId = 'whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc' + const program = new Program(whirpoolIDL, programId, provider) + const whirlpools = await program.account.whirlpool.all() + const tokenAccounts = whirlpools.map(({ account}) => [account.tokenVaultA, account.tokenVaultB]).flat() + return sumTokens2({ tokenAccounts, }) } +/* async function orcaPoolTvlViaConfig() { + const tokenAccounts = [] + const v1ProgramId = 'DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1' + const { pools } = await getConfig('orca/pools', 'https://api.orca.so/configs') + Object.values(pools).forEach(i => { + tokenAccounts.push(i.tokenAccountA) + tokenAccounts.push(i.tokenAccountB) + }) + return sumTokens2({ tokenAccounts, blacklistedTokens, }) +} */ + +const orcaV1Tvl = exportDexTVL('DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1') +const orcaV2Tvl = exportDexTVL('9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP') + module.exports = { - timetravel: false, - fetch, - hallmarks:[ - [1628565707, "Token+LM launch"], - [1667865600, "FTX collapse"] - ] + timetravel: false, + solana: { + tvl: sdk.util.sumChainTvls([orcaV1Tvl, orcaV2Tvl, tvl]) + }, + hallmarks: [ + [1628565707, "Token+LM launch"], + [1667865600, "FTX collapse"] + ] }; + +const whirpoolIDL = { + version: '0.2.0', + name: 'whirlpool', + instructions: [], + accounts: [ + { + name: 'whirlpoolsConfig', + type: { + kind: 'struct', + fields: [ + { + name: 'feeAuthority', + type: 'publicKey' + }, + { + name: 'collectProtocolFeesAuthority', + type: 'publicKey' + }, + { + name: 'rewardEmissionsSuperAuthority', + type: 'publicKey' + }, + { + name: 'defaultProtocolFeeRate', + type: 'u16' + } + ] + } + }, + { + name: 'whirlpool', + type: { + kind: 'struct', + fields: [ + { + name: 'whirlpoolsConfig', + type: 'publicKey' + }, + { + name: 'whirlpoolBump', + type: { + array: [ + 'u8', + 1 + ] + } + }, + { + name: 'tickSpacing', + type: 'u16' + }, + { + name: 'tickSpacingSeed', + type: { + array: [ + 'u8', + 2 + ] + } + }, + { + name: 'feeRate', + type: 'u16' + }, + { + name: 'protocolFeeRate', + type: 'u16' + }, + { + name: 'liquidity', + type: 'u128' + }, + { + name: 'sqrtPrice', + type: 'u128' + }, + { + name: 'tickCurrentIndex', + type: 'i32' + }, + { + name: 'protocolFeeOwedA', + type: 'u64' + }, + { + name: 'protocolFeeOwedB', + type: 'u64' + }, + { + name: 'tokenMintA', + type: 'publicKey' + }, + { + name: 'tokenVaultA', + type: 'publicKey' + }, + { + name: 'feeGrowthGlobalA', + type: 'u128' + }, + { + name: 'tokenMintB', + type: 'publicKey' + }, + { + name: 'tokenVaultB', + type: 'publicKey' + }, + { + name: 'feeGrowthGlobalB', + type: 'u128' + }, + { + name: 'rewardLastUpdatedTimestamp', + type: 'u64' + }, + { + name: 'rewardInfos', + type: { + array: [ + { + defined: 'WhirlpoolRewardInfo' + }, + 3 + ] + } + } + ] + } + } + ], + types: [ + { + name: 'WhirlpoolRewardInfo', + docs: [ + 'Stores the state relevant for tracking liquidity mining rewards at the `Whirlpool` level.', + 'These values are used in conjunction with `PositionRewardInfo`, `Tick.reward_growths_outside`,', + 'and `Whirlpool.reward_last_updated_timestamp` to determine how many rewards are earned by open', + 'positions.' + ], + type: { + kind: 'struct', + fields: [ + { + name: 'mint', + docs: [ + 'Reward token mint.' + ], + type: 'publicKey' + }, + { + name: 'vault', + docs: [ + 'Reward vault token account.' + ], + type: 'publicKey' + }, + { + name: 'authority', + docs: [ + 'Authority account that has permission to initialize the reward and set emissions.' + ], + type: 'publicKey' + }, + { + name: 'emissionsPerSecondX64', + docs: [ + 'Q64.64 number that indicates how many tokens per second are earned per unit of liquidity.' + ], + type: 'u128' + }, + { + name: 'growthGlobalX64', + docs: [ + 'Q64.64 number that tracks the total tokens earned per unit of liquidity since the reward', + 'emissions were turned on.' + ], + type: 'u128' + } + ] + } + } + ], + errors: [] +} diff --git a/projects/orcadao/index.js b/projects/orcadao/index.js index 50737ff714..2ab76ac03e 100644 --- a/projects/orcadao/index.js +++ b/projects/orcadao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -18,7 +19,7 @@ const banksAndCollateral = [ ["0x330cc45c8f60fef7f9d271a7512542b3d201a48d","0x64D56b4B6C844015EC07e52A1267D5d5d4F4E5BD"], // YAK BENQI WBTC ["0x9669fe1ea0d8883661289461b90a10b71ae400ee","0xEa03cDCdD912522400d21Ee89A5bC46Bffe11AC3"], // YAK BENQI DAI ["0x07b0e11d80ccf75cb390c9be6c27f329c119095a","0xAf8d16500A58b868C34be9106d674b820d67C979"], // YAK BENQI USDT - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7","0xC029713E92383426C9b387b124C0BF6271d08b80"], // AVAX + [ADDRESSES.avax.WAVAX,"0xC029713E92383426C9b387b124C0BF6271d08b80"], // AVAX ["0x8b414448de8b609e96bd63dcf2a8adbd5ddf7fdd","0x2b583646EC93245562Fd08A3b5f44Aa55417766B"], // YAK BENQI AVAX ["0x0eac97a78a93b75549d49145df41dbe9cd520874","0xd694F97dd5874fA4e712FDFB781231D93642D29b"], // YAK BENQI USDC ["0x957ca4a4aa7cdc866cf430bb140753f04e273bc0","0x8aee038726715d78C49dFb2f12e76DE70C2F48eC"], // YAK AAVE AVAX @@ -28,22 +29,22 @@ const banksAndCollateral = [ ["0x3a91a592a06390ca7884c4d9dd4cba2b4b7f36d1","0xa1A34E32c24911daA45e338dB9D785c1b323F280"], // YAK JOE ["0x0f7f48d4b66bf5a53d4f21fa6ffca45f70cef770","0x18419976Ba05dd9cE44544B8d91590704aFA4a29"], // YAK AAVE WBTC ["0xbf5bffbf7d94d3b29abe6eb20089b8a9e3d229f7","0xC09caDDA753c54292BeB1D10429bD175556b8b5E"], // YAK QI - ["0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab","0x4805D6563B36a02C5012c11d6e15552f50066d58"], // WETH + [ADDRESSES.avax.WETH_e,"0x4805D6563B36a02C5012c11d6e15552f50066d58"], // WETH ["0x50b7545627a5162f82a992c33b87adc75187b218","0x1eA60d781376C06693dFB21d7e5951cAEc13F7E4"], // WBTC ] const translateToken = { - "0x957ca4a4aa7cdc866cf430bb140753f04e273bc0": "avax:0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + "0x957ca4a4aa7cdc866cf430bb140753f04e273bc0": "avax:" + ADDRESSES.avax.WAVAX, "0x0f7f48d4b66bf5a53d4f21fa6ffca45f70cef770": "avax:0x50b7545627a5162f82a992c33b87adc75187b218", - "0xb634a71a54d3382ff6896eb22244b4a4e54c0a82": "avax:0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", - "0x3a91a592a06390ca7884c4d9dd4cba2b4b7f36d1": "avax:0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", + "0xb634a71a54d3382ff6896eb22244b4a4e54c0a82": "avax:" + ADDRESSES.avax.WETH_e, + "0x3a91a592a06390ca7884c4d9dd4cba2b4b7f36d1": "avax:" + ADDRESSES.avax.JOE, "0x8b414448de8b609e96bd63dcf2a8adbd5ddf7fdd": "avax:0x8729438eb15e2c8b576fcc6aecda6a148776c0f5", "0x4084f32a91f4d8636ca08386efe70c6e302f1d84": "avax:0x5947bb275c521040051d82396192181b413227a3", - "0x9669fe1ea0d8883661289461b90a10b71ae400ee": "avax:0xd586e7f844cea2f87f50152665bcbc2c279d8d70", + "0x9669fe1ea0d8883661289461b90a10b71ae400ee": "avax:" + ADDRESSES.avax.DAI, "0x330cc45c8f60fef7f9d271a7512542b3d201a48d": "avax:0x50b7545627a5162f82a992c33b87adc75187b218", - "0x07b0e11d80ccf75cb390c9be6c27f329c119095a": "avax:0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7", - "0x0eac97a78a93b75549d49145df41dbe9cd520874": "avax:0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", - "0x7d2d076000611e44740d636843384412399e31b9": "avax:0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", + "0x07b0e11d80ccf75cb390c9be6c27f329c119095a": "avax:" + ADDRESSES.avax.USDt, + "0x0eac97a78a93b75549d49145df41dbe9cd520874": "avax:" + ADDRESSES.avax.USDC_e, + "0x7d2d076000611e44740d636843384412399e31b9": "avax:" + ADDRESSES.avax.WETH_e, "0xbf5bffbf7d94d3b29abe6eb20089b8a9e3d229f7": "avax:0x8729438eb15e2c8b576fcc6aecda6a148776c0f5" } @@ -76,7 +77,7 @@ async function borrowed(timestamp, block, chainBlocks) { } const treasuryContract = "0x10131d4f3193a59A46d3ab57D765f2604e77B4E3"; -const usdc = "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664" +const usdc = ADDRESSES.avax.USDC_e const ocraAvaiPGL = "0x1A9Bd67c82C0e8E47C3ad2FA772FCb9B7A831A37"; const orcaWavaxPGL = "0x73e6CB72a79dEa7ed75EF5eD6f8cFf86C9128eF5"; const avaiUsdc = "0xeD7a2B4054757Cfdb632Af15Ad528624F0fFf3B0"; diff --git a/projects/orcus/index.js b/projects/orcus/index.js index 0859e1c732..84c5a3f6b3 100644 --- a/projects/orcus/index.js +++ b/projects/orcus/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/unwrapLPs') const { getTokenPrices } = require('../helper/unknownTokens') const { getFixBalances } = require('../helper/portedTokens') @@ -8,8 +9,8 @@ const sdk = require('@defillama/sdk') const chain = 'astar' const MASTER_CHEF = '0xfa1Cfa75bFae8303A9Fe8aF711AacD59015eE6d4' -const USDC = '0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98' -const ibUSDC = '0xC404E12D3466acCB625c67dbAb2E1a8a457DEf3c' +const USDC = ADDRESSES.moonbeam.USDC +const ibUSDC = ADDRESSES.astar.lUSDC const ORU = '0xCdB32eEd99AA19D39e5d6EC45ba74dC4afeC549F' const STAKE_ADDRESS = '0x243e038685209B9B68e0521bD5838C6C937d666A' const BANK_SAFE = '0xd89dEa2daC8Fb73F4107C2cbeA5Eb36dab511F64' diff --git a/projects/ordernchaos/index.js b/projects/ordernchaos/index.js deleted file mode 100644 index 265e8f134a..0000000000 --- a/projects/ordernchaos/index.js +++ /dev/null @@ -1,37 +0,0 @@ -const { getChainTransform} = require("../helper/portedTokens") -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - - -const DAI = "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70" -const USDC = "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E" -const USDT = "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7" - - -const collateralAddr = [ - "0xD5a7Df8B56d285011AbE406235109c029F45797A", // 3pool - ]; - -async function stablePoolTvl(timestamp, chainBlocks) { - const balances = {}; - const transformAddress = await getChainTransform("avax"); - await sumTokensAndLPsSharedOwners( - balances, - [ - [DAI, false], - [USDC, false], - [USDT, false], - ], - collateralAddr, - chainBlocks["avax"], - "avax", - transformAddress - ); - return balances; - } - -module.exports = { - methodology: 'Counts the DAI, USDC, and USDT that have been deposited to mint CHAOS', - avax: { - tvl: stablePoolTvl - } -}; \ No newline at end of file diff --git a/projects/oreoswap/index.js b/projects/oreoswap/index.js index 528b1073fc..634dfcd861 100644 --- a/projects/oreoswap/index.js +++ b/projects/oreoswap/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') const sdk = require('@defillama/sdk') const uniTvl = getUniTVL({ factory: '0x20fAfD2B0Ba599416D75Eb54f48cda9812964f46', useDefaultCoreAssets: true }) const masterchef = '0xa481384653c484901b301634086c8625e550bbec' const masterchefOld = '0xeb66b69d1cc6ef04575a11d4b0a6427b1cdacc45' const oreo = '0x319e222De462ac959BAf2aEc848697AeC2bbD770' -const weth = '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' +const weth = ADDRESSES.arbitrum.WETH module.exports = { misrepresentedTokens: true, diff --git a/projects/originether/index.js b/projects/originether/index.js new file mode 100644 index 0000000000..ceea8da769 --- /dev/null +++ b/projects/originether/index.js @@ -0,0 +1,38 @@ +const sdk = require("@defillama/sdk"); +const abi = require("../origindollar/abi.json"); + +const vault = "0x39254033945aa2e4809cc2977e7087bee48bd7ab"; + +const ethTvl = async (timestamp, ethBlock) => { + const balances = {}; + + // Account WETH, rETH, frxETH and stETH backing up the minted OUSD + const backingAssets = ( + await sdk.api.abi.call({ + abi: abi.getAllAssets, + target: vault, + block: ethBlock, + }) + ).output; + + for (let i = 0; i < backingAssets.length; i++) { + const backingAssetBalance = ( + await sdk.api.abi.call({ + abi: abi.checkBalance, + target: vault, + params: backingAssets[i], + block: ethBlock, + }) + ).output; + + sdk.util.sumSingleBalance(balances, backingAssets[i], backingAssetBalance); + } + + return balances; +}; + +module.exports = { + ethereum: { + tvl: ethTvl, + }, +}; diff --git a/projects/orio/index.js b/projects/orio/index.js index 5ccc9bdf27..5ce2a5d348 100644 --- a/projects/orio/index.js +++ b/projects/orio/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const chain = 'ethereum' @@ -6,10 +7,10 @@ async function tvl(_, _b, { [ chain]: block }) { '0x335DE1cB210B6d981EF3c5253ed7A39456Ee8F1D' ] const tokens = [ - '0x4Fabb145d64652a948d72533023f6E7A623C7C53',//busd - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',//usdc - '0xdac17f958d2ee523a2206206994597c13d831ec7',//usdt - '0x6b175474e89094c44da98b954eedeac495271d0f',//dai + ADDRESSES.ethereum.BUSD,//busd + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.USDT,//usdt + ADDRESSES.ethereum.DAI,//dai '0x8e870d67f660d95d5be530380d0ec0bd388289e1',//usdp ] return sumTokens2({ chain, block, owners, tokens, }) diff --git a/projects/orion-money/index.js b/projects/orion-money/index.js index 4db42e1f8f..3179ed945f 100644 --- a/projects/orion-money/index.js +++ b/projects/orion-money/index.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require('../helper/unwrapLPs') const fundedContracts = [ '0xefe0fed2b728b9711030e7643e98477957df9809', //TransparentUpgradeableProxy '0xd9184981bbab68e05eafd631dd2f8cbaf47e3e13' //TransparentUpgradeableProxy ]; const stable = [ - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', //'USDC' : - '0xdac17f958d2ee523a2206206994597c13d831ec7', //'USDT' : - '0x6b175474e89094c44da98b954eedeac495271d0f', //'DAI' : + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, '0xa47c8bf37f92abed4a126bda807a7b7498661acd', //'wUST' : - '0x4fabb145d64652a948d72533023f6e7a623c7c53', //'BUSD' : - '0x853d955acef822db058eb8505911ed77f175b99e' //'FRAX' : + ADDRESSES.ethereum.BUSD, + ADDRESSES.ethereum.FRAX, ]; const anchor = [ '0x94eAd8f528A3aF425de14cfdDA727B218915687C', //'aUSDC': diff --git a/projects/otterclam.js b/projects/otterclam.js deleted file mode 100644 index c612209c94..0000000000 --- a/projects/otterclam.js +++ /dev/null @@ -1,12 +0,0 @@ -const { ohmTvl } = require('./helper/ohm') - -module.exports = ohmTvl( - '0x8ce47D56EAa1299d3e06FF3E04637449fFb01C9C', - [ - ['0xa3fa99a148fa48d14ed51d610c367c61876997f1', false], - ['0x1581802317f32a2665005109444233ca6e3e2d68', true], - ], - 'polygon', - '0xC8B0243F350AA5F8B979b228fAe522DAFC61221a', - '0xC250e9987A032ACAC293d838726C511E6E1C029d' -) diff --git a/projects/overnight-daiPlus/index.js b/projects/overnight-daiPlus/index.js index 17a8009338..8bf8a4b570 100644 --- a/projects/overnight-daiPlus/index.js +++ b/projects/overnight-daiPlus/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const m2m = { @@ -6,8 +7,8 @@ const m2m = { } const assets = { - optimism: "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", //DAI - arbitrum: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", //DAI + optimism: ADDRESSES.optimism.DAI, //DAI + arbitrum: ADDRESSES.optimism.DAI, //DAI } const abi = "uint256:totalNetAssets" diff --git a/projects/overnight-usdPlus/index.js b/projects/overnight-usdPlus/index.js index af2f34cfe7..3bc1210b19 100644 --- a/projects/overnight-usdPlus/index.js +++ b/projects/overnight-usdPlus/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const m2m = { @@ -9,11 +10,11 @@ const m2m = { } const assets = { - polygon: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", //USDC - bsc: "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", //BUSD - optimism: "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", //USDC - arbitrum: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", //USDC - era: "0x3355df6d4c9c3035724fd0e3914de96a5a83aaf4", + polygon: ADDRESSES.polygon.USDC, //USDC + bsc: ADDRESSES.bsc.BUSD, //BUSD + optimism: ADDRESSES.optimism.USDC, //USDC + arbitrum: ADDRESSES.arbitrum.USDC, //USDC + era: ADDRESSES.era.USDC, } const abi = "uint256:totalNetAssets" diff --git a/projects/overnight-usdtPlus/index.js b/projects/overnight-usdtPlus/index.js index b9bbbfa59d..7b6e5ecf18 100644 --- a/projects/overnight-usdtPlus/index.js +++ b/projects/overnight-usdtPlus/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const m2m = { @@ -5,7 +6,7 @@ const m2m = { } const assets = { - bsc: "0x55d398326f99059fF775485246999027B3197955", //USDT + bsc: ADDRESSES.bsc.USDT, //USDT } const abi = "uint256:totalNetAssets" diff --git a/projects/owna/config.js b/projects/owna/config.js new file mode 100644 index 0000000000..ad8b5edca0 --- /dev/null +++ b/projects/owna/config.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') +module.exports = { + chains: [ + { + name: 'polygon_zkevm', + tokens: [ + ADDRESSES.polygon_zkevm.USDC, + ], + nftContract: '0xa0db7ef54eeffb7a3a5d9e7a95fb853392573b90', + lendingContract: '0x27Ca3D6c64398FF9BcF2E66896EC4B3BEc5e1959', + }, + ] +} \ No newline at end of file diff --git a/projects/owna/index.js b/projects/owna/index.js new file mode 100644 index 0000000000..4bb4f8a0a4 --- /dev/null +++ b/projects/owna/index.js @@ -0,0 +1,94 @@ +const { get } = require('../helper/http') +const config = require("./config"); +const sdk = require("@defillama/sdk"); +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + methodology: 'Counts the amount of stables locked in Owna protocol contracts', +}; + +config.chains.forEach(async chainInfo => { + const {name: chain, tokens, lendingContract, nftContract} = chainInfo + + async function currentTokenId() { + return (await sdk.api.abi.call({ + abi: "uint256:noOfTokenId", + target: nftContract, + chain + })).output + } + + async function getBorrow(tokenId) { + return (await sdk.api.abi.call({ + abi: "function borrow(uint256) view returns (bool nft, bool isEntryFeePaid, bool isSold, uint256 nftId, uint256 offerType, uint256 loanAmount, uint256 debtPaid, uint256 lastUpdate, uint256 borrowedStartTime)", + target: lendingContract, + chain, + params: [tokenId] + })).output + } + + async function requestAgainstNft(tokenId, offerID) { + return (await sdk.api.abi.call({ + abi: "function requestAgainstNft(uint256,uint256) view returns (uint256 offerID, uint256 offerType, uint256 nftId, uint256 durations, uint256 offerStartTime, uint256 apr, uint256 minLoan, uint256 maxLoan, uint256 loan, uint256 acceptable_debt, address lender, address borrower, string status)", + target: lendingContract, + chain, + params: [tokenId, offerID] + })).output + } + + async function readDynamicInterest(tokenId, offerID) { + return (await sdk.api.abi.call({ + abi: "function readDynamicInterest(uint256,uint256) view returns (uint256)", + target: lendingContract, + chain, + params: [tokenId, offerID] + })).output + } + + async function getOffersCount(tokenId) { + return parseInt(await get('https://backend.owna.io/offer/getOffersCount?mintId=' + tokenId)); + } + + async function totalOffers() { + let total = 0; + for (let i = 0; i < await currentTokenId(); i++) { + const borrow = await getBorrow(i); + if (parseInt(borrow.offerType) === 0) { + var offerCount = await getOffersCount(i); + if (offerCount > 0) { + for (let j = 0; j < offerCount; j++) { + var offer = await requestAgainstNft(i, j); + if (offer.status == "Pending") { + total += parseInt(offer.maxLoan); + } + } + } + } + } + return { + usd: total / 10 ** 6, + }; + } + + async function totalBorrowed() { + let total = 0; + let totalInterest = 0; + for (let i = 0; i <= await currentTokenId(); i++) { + const borrow = await getBorrow(i); + if (!borrow.isEntryFeePaid) { + total += parseInt(borrow.loanAmount); + if (parseInt(borrow.offerType) > 0) { + totalInterest += parseInt(await readDynamicInterest(i, 0)); + } + }} + return { + usd: (total / 10 ** 6) + (totalInterest / 10 ** 6), + }; + } + + module.exports[chain] = { + tvl: sumTokensExport({ chain, tokens, owners: [lendingContract] }), + borrowed: totalBorrowed, + offers: totalOffers, + } +}) diff --git a/projects/oxygen/idl.js b/projects/oxygen/idl.js index f98bde9e5f..225d65a608 100644 --- a/projects/oxygen/idl.js +++ b/projects/oxygen/idl.js @@ -2,515 +2,8 @@ module.exports = { version: '0.0.0', name: 'borrow_lending', - instructions: [ - { - name: 'initializeMain', - accounts: [ - { - name: 'mainSigner', - isMut: false, - isSigner: false, - }, - { - name: 'mainAccount', - isMut: true, - isSigner: true, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'priceAuthority', - isMut: false, - isSigner: false, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'signerBump', - type: 'u8', - }, - ], - }, - { - name: 'setPriceAuthority', - accounts: [ - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: false, - isSigner: true, - }, - { - name: 'newPriceAuthority', - isMut: false, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'initializeMargin', - accounts: [ - { - name: 'marginAccount', - isMut: true, - isSigner: false, - }, - { - name: 'mainAccount', - isMut: false, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'marginBump', - type: 'u8', - }, - ], - }, - { - name: 'deposit', - accounts: [ - { - name: 'marginAccount', - isMut: true, - isSigner: false, - }, - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'from', - isMut: true, - isSigner: false, - }, - { - name: 'to', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: false, - isSigner: true, - }, - { - name: 'tokenProgram', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'quantity', - type: 'u64', - }, - { - name: 'vaultBump', - type: 'u8', - }, - ], - }, - { - name: 'withdraw', - accounts: [ - { - name: 'marginAccount', - isMut: true, - isSigner: false, - }, - { - name: 'mainSigner', - isMut: false, - isSigner: false, - }, - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'from', - isMut: true, - isSigner: false, - }, - { - name: 'to', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: false, - isSigner: true, - }, - { - name: 'tokenProgram', - isMut: false, - isSigner: false, - }, - { - name: 'clock', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'quantity', - type: 'u64', - }, - { - name: 'vaultBump', - type: 'u8', - }, - ], - }, - { - name: 'liquidate', - accounts: [ - { - name: 'liquidateeAccount', - isMut: true, - isSigner: false, - }, - { - name: 'liquidatorAccount', - isMut: true, - isSigner: false, - }, - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: false, - isSigner: true, - }, - { - name: 'clock', - isMut: false, - isSigner: false, - }, - ], - args: [], - }, - { - name: 'crankInterest', - accounts: [ - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'tokenParamsAccount', - isMut: true, - isSigner: false, - }, - { - name: 'clock', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'tpaBump', - type: 'u8', - }, - { - name: 'tokenIds', - type: { - array: [ - 'u8', - 16, - ], - }, - }, - ], - }, - { - name: 'setPrice', - accounts: [ - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'priceAuthority', - isMut: false, - isSigner: true, - }, - { - name: 'clock', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'tokenIds', - type: { - array: [ - 'u8', - 16, - ], - }, - }, - { - name: 'prices', - type: { - array: [ - 'u128', - 16, - ], - }, - }, - ], - }, - { - name: 'crankPrice', - accounts: [], - args: [ - { - name: 'tokenIds', - type: { - array: [ - 'u8', - 16, - ], - }, - }, - ], - }, - { - name: 'addToken', - accounts: [ - { - name: 'mainSigner', - isMut: false, - isSigner: false, - }, - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'tokenVault', - isMut: true, - isSigner: false, - }, - { - name: 'feeVault', - isMut: true, - isSigner: false, - }, - { - name: 'mint', - isMut: false, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - { - name: 'tokenProgram', - isMut: false, - isSigner: false, - }, - { - name: 'clock', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'vaultBump', - type: 'u8', - }, - { - name: 'feeBump', - type: 'u8', - }, - ], - }, - { - name: 'initTokenParameters', - accounts: [ - { - name: 'mainAccount', - isMut: true, - isSigner: false, - }, - { - name: 'tokenParamsAccount', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - { - name: 'systemProgram', - isMut: false, - isSigner: false, - }, - { - name: 'rent', - isMut: false, - isSigner: false, - }, - ], - args: [ - { - name: 'tpaBump', - type: 'u8', - }, - ], - }, - { - name: 'setTokenParameters', - accounts: [ - { - name: 'mainAccount', - isMut: false, - isSigner: false, - }, - { - name: 'tokenParamsAccount', - isMut: true, - isSigner: false, - }, - { - name: 'authority', - isMut: true, - isSigner: true, - }, - ], - args: [ - { - name: 'tpaBump', - type: 'u8', - }, - { - name: 'tokenId', - type: 'u8', - }, - { - name: 'uOptimal', - type: 'u16', - }, - { - name: 'baseRate', - type: 'u16', - }, - { - name: 'slopeOne', - type: 'u16', - }, - { - name: 'slopeTwo', - type: 'u16', - }, - ], - }, - ], + instructions: [], accounts: [ - { - name: 'MarginAccount', - type: { - kind: 'struct', - fields: [ - { - name: 'bump', - type: 'u8', - }, - { - name: 'authority', - type: 'publicKey', - }, - { - name: 'tokenShares', - type: { - array: [ - { - defined: 'TokenShares', - }, - 64, - ], - }, - }, - { - name: 'mainAccount', - type: 'publicKey', - }, - { - name: 'padding', - type: { - array: [ - 'u8', - 1024, - ], - }, - }, - ], - }, - }, { name: 'MainAccount', type: { @@ -573,67 +66,8 @@ module.exports = { ], }, }, - { - name: 'TokensParametersAccount', - type: { - kind: 'struct', - fields: [ - { - name: 'authority', - type: 'publicKey', - }, - { - name: 'params', - type: { - array: [ - { - defined: 'TokenParameters', - }, - 64, - ], - }, - }, - { - name: 'rates', - type: { - array: [ - { - defined: 'TokenRate', - }, - 64, - ], - }, - }, - { - name: 'padding', - type: { - array: [ - 'u8', - 500, - ], - }, - }, - ], - }, - }, ], types: [ - { - name: 'TokenShares', - type: { - kind: 'struct', - fields: [ - { - name: 'tokenId', - type: 'u8', - }, - { - name: 'shares', - type: 'i128', - }, - ], - }, - }, { name: 'Balance', type: { @@ -676,46 +110,6 @@ module.exports = { ], }, }, - { - name: 'TokenRate', - type: { - kind: 'struct', - fields: [ - { - name: 'borrowApr', - type: 'u128', - }, - { - name: 'depositApy', - type: 'u128', - }, - ], - }, - }, - { - name: 'TokenParameters', - type: { - kind: 'struct', - fields: [ - { - name: 'uOptimal', - type: 'u16', - }, - { - name: 'baseRate', - type: 'u16', - }, - { - name: 'slopeOne', - type: 'u16', - }, - { - name: 'slopeTwo', - type: 'u16', - }, - ], - }, - }, { name: 'TokenData', type: { diff --git a/projects/oxygen/index.js b/projects/oxygen/index.js index 68143effc6..e86bd41253 100644 --- a/projects/oxygen/index.js +++ b/projects/oxygen/index.js @@ -1,51 +1,9 @@ -const { getProvider } = require('../helper/solana') -const BigNumber = require('bignumber.js') +const { getProvider, getTokenDecimals } = require('../helper/solana') const { PublicKey } = require('@solana/web3.js') const { Program, } = require("@project-serum/anchor"); -const idl = require('./idl') -const MINTS = [ - { - name: 'Bitcoin', - mintAddress: '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E', - decimals: 6, - }, - { - name: 'Ethereum', - mintAddress: '2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk', - decimals: 6, - }, - { - symbol: 'SOL', - mintAddress: 'So11111111111111111111111111111111111111112', - decimals: 9, - }, - { - symbol: 'USDC', - mintAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', - decimals: 6, - }, - { - symbol: 'SRM', - mintAddress: 'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt', - decimals: 6, - }, - { - symbol: 'USDT', - mintAddress: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', - decimals: 6, - }, -]; -const INTERNAL_DECIMALS = 12; - -const convertFromBN = (amount, decimals) => { - const amountStr = new BigNumber(amount.toString()); - const toDivAmount = `1${'0'.repeat(decimals)}`; - return amountStr.dividedBy(toDivAmount).toNumber(); -}; +const idl = require('./idl'); -const numberToFixed = (amount, fixed = 2) => { - return new BigNumber(amount).decimalPlaces(fixed).toNumber(); -}; +const INTERNAL_DECIMALS = 12; let tokenData @@ -55,39 +13,10 @@ async function _getTokenData() { const provider = getProvider() const program = new Program(idl, programId, provider) const data = await program.account.mainAccount.fetch(mainAccountAddress) - - const { balancesMap, pricesMap, } = data.tokens.reduce((acc, { mint }, i) => { - acc.pricesMap[mint.toBase58()] = data.prices[i]?.price || new BigNumber(0); - acc.balancesMap[mint.toBase58()] = data.balances[i]?.balance || { - borrowTotal: new BigNumber(0), - depositTotal: new BigNumber(0), - }; - return acc; - }, { balancesMap: {}, pricesMap: {}}); - - data.balancesMap = balancesMap; - data.pricesMap = pricesMap; - - - const tokens = MINTS.reduce((acc, token, i) => { - const { mintAddress, decimals } = token; - const depositTotal = numberToFixed(convertFromBN(data.balancesMap[mintAddress].depositTotal, INTERNAL_DECIMALS), decimals); - const borrowTotal = numberToFixed(convertFromBN(data.balancesMap[mintAddress].borrowTotal, INTERNAL_DECIMALS), decimals); - const available = BigNumber.maximum(new BigNumber(depositTotal).minus(borrowTotal), 0); - const price = convertFromBN(data.pricesMap[mintAddress], INTERNAL_DECIMALS); - - acc[mintAddress] = { - borrowed: { - usd: numberToFixed((borrowTotal * price)), - }, - available: { - usd: numberToFixed(available * price), - }, - }; - return acc; - }, {}); - - return tokens + data.tokens = data.tokens.slice(0, 6) + data.balances = data.balances.slice(0, 6) + data.tokenDecimals = await getTokenDecimals(data.tokens.map(({ mint }) => mint.toBase58())) + return data } async function getTokenData() { @@ -95,25 +24,31 @@ async function getTokenData() { return tokenData } -async function tvl() { +async function tvl(_, _1, _2, { api }) { const data = await getTokenData() - return { - tether: Object.values(data).reduce((a, i) => a + i.available.usd, 0) - } + data.tokens.forEach(({ mint }, i) => { + const token = mint.toBase58() + const { balance: { depositTotal, borrowTotal } } = data.balances[i] + const decimals = 10 ** (data.tokenDecimals[token] - INTERNAL_DECIMALS) + api.add(token, depositTotal.toString() * decimals) + api.add(token, borrowTotal.toString() * -1 * decimals) + }) } -async function borrowed() { +async function borrowed(_, _1, _2, { api }) { const data = await getTokenData() - return { - tether: Object.values(data).reduce((a, i) => a + i.borrowed.usd, 0) - } + data.tokens.forEach(({ mint }, i) => { + const token = mint.toBase58() + const { balance: { borrowTotal } } = data.balances[i] + const decimals = 10 ** (data.tokenDecimals[token] - INTERNAL_DECIMALS) + api.add(token, borrowTotal.toString()* decimals) + }) } module.exports = { timetravel: false, - misrepresentedTokens: true, solana: { tvl, - borrowed, + borrowed: () => 0, }, } diff --git a/projects/pacman/index.js b/projects/pacman/index.js new file mode 100644 index 0000000000..929caf096f --- /dev/null +++ b/projects/pacman/index.js @@ -0,0 +1,32 @@ +const { graphQuery } = require('../helper/http') + +const subgraphUrl = "https://api.thegraph.com/subgraphs/name/pacmanfinance/pacman-arbitrum"; + +const vaultsQuery = ` + query { + vaults { + baseToken { + id + priceByUsd + decimals + } + id + availableAmount + totalDeposit + totalDebt + } + } +`; + +async function tvl(timestamp, ethBlock, chainBlocks, { api }) { + const { vaults } = await graphQuery(subgraphUrl, vaultsQuery) + vaults.forEach(({ baseToken: { id, decimals }, totalDebt, totalDeposit}) => { + api.add(id, (totalDeposit - totalDebt) * ( 10 ** decimals)) + }) +} + +module.exports = { + arbitrum: { + tvl, + } +}; \ No newline at end of file diff --git a/projects/pairex/index.js b/projects/pairex/index.js new file mode 100644 index 0000000000..03e88224b0 --- /dev/null +++ b/projects/pairex/index.js @@ -0,0 +1,26 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require('../helper/unwrapLPs') + +const contracts = [ + '0x154fDc2e0c4A2e4b39AFc329f0df88499d96F665', + '0x9CC1b358E39651F118AA02126648f4a770B7432D', + '0x2Ca07638acDa0B2bEa7B6a06F135476BDdd7101B', + '0xA7dE0DD19004b430cC8C920fCA9F5FDE5A66379b', + '0x35DD17F0d9098fc5B24D6328122B4C9ea5dD7DB5', + '0x0a30067Ad5ff753F6887bBaF03b467C87CF62eF3' +] + +const tokens = [ + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.LINK +] + +module.exports = { + start: 1678852800, // 15/03/2023 @ 04:00am (UTC) + arbitrum: { + tvl: sumTokensExport({ tokens, owners: contracts }), + }, + hallmarks: [ + [1678852800, "Arbitrum Pairex Launch"] + ] +} diff --git a/projects/paladin-dao/index.js b/projects/paladin-dao/index.js index d925661e7e..ed1cd89d60 100644 --- a/projects/paladin-dao/index.js +++ b/projects/paladin-dao/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const token = "0xb4da413d7643000a84c5b62bfb1bf2077604b165"; const tokenStake = "0x7B73d56c53059699003ac11aF4308f6bEb4877FF"; const treasury = "0x6382192259f45a7acDa2A08cc30ce9FaF0e1863E"; const tokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ["0x103900036e483c85ea4748b6733f621b8df21e2d", true] // PAL-BUSD ]; diff --git a/projects/paladinfinance-warlord/abi.json b/projects/paladinfinance-warlord/abi.json new file mode 100644 index 0000000000..ab2a894df7 --- /dev/null +++ b/projects/paladinfinance-warlord/abi.json @@ -0,0 +1,5 @@ +{ + "token": "address:token", + "getCurrentLockedTokens": "uint256:getCurrentLockedTokens", + "lockers": "function lockers(uint256) view returns (address)" +} \ No newline at end of file diff --git a/projects/paladinfinance-warlord/index.js b/projects/paladinfinance-warlord/index.js new file mode 100644 index 0000000000..d269ee7f4e --- /dev/null +++ b/projects/paladinfinance-warlord/index.js @@ -0,0 +1,45 @@ +const sdk = require("@defillama/sdk"); +const abi = require("./abi.json"); +const { BigNumber } = require("ethers"); + +const WAR_CONTROLLER = "0xFDeac9F9e4a5A7340Ac57B47C67d383fb4f13DBb"; + +async function getLockers(api) { + let lockers = []; + + for (let i = 0; i != -1; ++i) { + try { + const output = await api.call({ + target: WAR_CONTROLLER, + abi: abi["lockers"], + params: [BigNumber.from(i)] + }) + lockers.push(output); + } catch(e) { + break; + } + } + + return lockers; +} + +async function ethTvl(timestamp, block, _, { api },) { + const balances = {}; + + const lockers = await getLockers(api); + + const bals = await api.multiCall({ abi: abi["getCurrentLockedTokens"], calls: lockers.map(i => ({ target: i})) }) + const tokens = await api.multiCall({ abi: abi["token"], calls: lockers.map(i => ({ target: i})) }) + + bals.forEach((v, i) => sdk.util.sumSingleBalance(balances, tokens[i], v)) + + return balances; +} + +module.exports = { + methodology: "Counts the total locked tokens inside the lockers contracts", + ethereum: { + tvl: ethTvl, + }, + start: 17368026 +}; diff --git a/projects/paladinfinance/index.js b/projects/paladinfinance/index.js index c63a6aecc9..f38de2ad1f 100644 --- a/projects/paladinfinance/index.js +++ b/projects/paladinfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumSingleBalance } = require("@defillama/sdk/build/generalUtil"); const abi = require("./abi.json"); @@ -48,7 +49,7 @@ async function ethTvl(timestamp, block) { //If stkAAVE address then change token address to AAVE address if (token === "0x4da27a545c0c5B758a6BA100e3a049001de870f5") { - token = "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9"; + token = ADDRESSES.ethereum.AAVE; } let tvl = BigNumber(underlyingBalances.output[i].output).plus(totalBorrowed.output[i].output).minus(totalReserve.output[i].output).toFixed(0); sumSingleBalance(balances, token, tvl) diff --git a/projects/palmaswap/index.js b/projects/palmaswap/index.js index 4d529d894b..6cacfa927a 100644 --- a/projects/palmaswap/index.js +++ b/projects/palmaswap/index.js @@ -1,12 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') const sdk = require('@defillama/sdk') const uniTvl = getUniTVL({ factory: '0xb8b9a4d9beE1fB41b03edfa47640b1dadF49EDd2', useDefaultCoreAssets: true, }) const masterchef = '0x41338973c89Aa4bb47aFDCb29c5D74F81b8416A4' const palma = '0xC2B82A3b2240509D54FbF3f1AC9fc2cA094a6f9c' -const weth = '0x40375C92d9FAf44d2f9db9Bd9ba41a3317a2404f' +const weth = ADDRESSES.core.WCORE module.exports = { misrepresentedTokens: true, + hallmarks: [ + [1679356800, "Rug Pull"] + ], core: { tvl: sdk.util.sumChainTvls([uniTvl, staking({ owners: [masterchef], diff --git a/projects/palmswap/index.js b/projects/palmswap/index.js new file mode 100644 index 0000000000..6c61b803a9 --- /dev/null +++ b/projects/palmswap/index.js @@ -0,0 +1,14 @@ +const { gmxExports } = require("../helper/gmx"); +const { staking } = require("../helper/staking"); + +const palmswapVault = "0x806f709558CDBBa39699FBf323C8fDA4e364Ac7A"; //Vault + +const palmTokenStakingContract = "0x95fc6f7df412040a815494cf27fbc82be6c7585c"; //RewardTracker +const palmToken = "0x29745314B4D294B7C77cDB411B8AAa95923aae38"; //PALM token address + +module.exports = { + bsc: { + tvl: gmxExports({ vault: palmswapVault }), + staking: staking(palmTokenStakingContract, palmToken), + }, +}; diff --git a/projects/pancake-swap/index.js b/projects/pancake-swap/index.js index c405a6a39a..6de8621a3d 100644 --- a/projects/pancake-swap/index.js +++ b/projects/pancake-swap/index.js @@ -75,11 +75,18 @@ module.exports = { misrepresentedTokens: true, methodology: 'TVL accounts for the liquidity on all AMM pools, using the TVL chart on https://pancakeswap.finance/info as the source. Staking accounts for the CAKE locked in MasterChef (0x73feaa1eE314F8c655E354234017bE2193C9E24E)', bsc: { - staking: stakings(["0x73feaa1eE314F8c655E354234017bE2193C9E24E", "0x45c54210128a065de780c4b0df3d16664f7f859e"], "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", "bsc"), + staking: stakings(["0x73feaa1eE314F8c655E354234017bE2193C9E24E", "0xa5f8C5Dbd5F286960b9d90548680aE5ebFf07652", "0x45c54210128a065de780c4b0df3d16664f7f859e", "0x556B9306565093C855AEA9AE92A594704c2Cd59e"], "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", "bsc"), tvl }, ethereum: { - tvl: getUniTVL({ chain: 'ethereum', factory: '0x1097053Fd2ea711dad45caCcc45EfF7548fCB362', useDefaultCoreAssets: true, }) + staking: stakings(["0x556B9306565093C855AEA9AE92A594704c2Cd59e"], "0x152649ea73beab28c5b49b26eb48f7ead6d4c898", "ethereum"), + tvl: getUniTVL({ factory: '0x1097053Fd2ea711dad45caCcc45EfF7548fCB362', useDefaultCoreAssets: true, }) + }, + polygon_zkevm: { + tvl: getUniTVL({ factory: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E', useDefaultCoreAssets: true, }) + }, + linea: { + tvl: getUniTVL({ factory: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E', useDefaultCoreAssets: true, }) }, aptos: dexExport({ account: '0xc7efb4076dbe143cbcd98cfaaa929ecfc8f299203dfff63b95ccb6bfe19850fa', @@ -87,4 +94,7 @@ module.exports = { token0Reserve: i => i.data.reserve_x, token1Reserve: i => i.data.reserve_y, }).aptos, + era: { + tvl: getUniTVL({ factory: '0xd03D8D566183F0086d8D09A84E1e30b58Dd5619d', useDefaultCoreAssets: true, }) + }, } diff --git a/projects/pancakeswap-v3/index.js b/projects/pancakeswap-v3/index.js index 0e20e1d20b..2e2afab981 100644 --- a/projects/pancakeswap-v3/index.js +++ b/projects/pancakeswap-v3/index.js @@ -1,6 +1,16 @@ const { uniV3Export } = require('../helper/uniswapV3') module.exports = uniV3Export({ - bsc: { factory: '0x0bfbcf9fa4f9c56b0f40a671ad40e0805a091865', fromBlock: 26956207, }, + bsc: { factory: '0x0bfbcf9fa4f9c56b0f40a671ad40e0805a091865', fromBlock: 26956207, blacklistedTokens: [ + '0x860368babf32129c18306a70ce7db10c5b437072', + '0xc476d3961f77645464acccce404eb17815a80878', + '0xf8c7f403829cc0f9a37f126a3da41358c232acdf', + '0x95e7c70b58790a1cbd377bc403cd7e9be7e0afb1', + '0x454f4597582df557c2757403f47d3f3bbb890d43', + '0x121a3fba8456ebce13964363ba35fea00c2aa3d2', + ] }, ethereum: { factory: '0x0bfbcf9fa4f9c56b0f40a671ad40e0805a091865', fromBlock: 16950685, }, + polygon_zkevm: { factory: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865', fromBlock: 750148, }, + linea: { factory: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865', fromBlock: 1445, }, + era: { factory: '0x1BB72E0CbbEA93c08f535fc7856E0338D7F7a8aB', fromBlock: 9413438, } }) diff --git a/projects/papa-dao/index.js b/projects/papa-dao/index.js index 926f63b937..d601d5eda2 100644 --- a/projects/papa-dao/index.js +++ b/projects/papa-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0x3C8e800B9f12771A5f150D0943De968ABc7A7bE1"; @@ -5,9 +6,9 @@ module.exports = ohmTvl(treasuryAddress, [ //MIM ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], //USDT.e - ["0xc7198437980c041c805a1edcba50c1ce5db95118", false], + [ADDRESSES.avax.USDT_e, false], //wAVAX - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], + [ADDRESSES.avax.WAVAX, false], //JOE LP ["0xa03a99cd3d553fe9ebbccecabcb8c47100482f72", true] , //JOE LP diff --git a/projects/paperdao/index.js b/projects/paperdao/index.js index c69b6cccdc..d70f520098 100644 --- a/projects/paperdao/index.js +++ b/projects/paperdao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require("../helper/compound"); const blacklist = [ @@ -10,5 +11,5 @@ const blacklist = [ module.exports = { methodology: `As in Compound Finance, TVL counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are counted as "Borrowed" TVL and can be toggled towards the regular TVL.`, - ethpow: compoundExports("0x5e496e7F241B13c514A78B7E840bc3cC744D7215", "ethpow", "0xb9e008f2C039fB994C8adD806F8aF709899aA95e", '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' , undefined, undefined, {blacklistedTokens: blacklist}) + ethpow: compoundExports("0x5e496e7F241B13c514A78B7E840bc3cC744D7215", "ethpow", "0xb9e008f2C039fB994C8adD806F8aF709899aA95e", ADDRESSES.ethereum.WETH , undefined, undefined, {blacklistedTokens: blacklist}) } \ No newline at end of file diff --git a/projects/papr-wtf/index.js b/projects/papr-wtf/index.js new file mode 100644 index 0000000000..a0c01135b4 --- /dev/null +++ b/projects/papr-wtf/index.js @@ -0,0 +1,20 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +async function tvl(_, _b, _cb, { api, }) { + + const controller = '0x3b29c19ff2fcea0ff98d0ef5b184354d74ea74b0' + const logs = await getLogs({ + api, + target: controller, + topic: 'AllowCollateral(address,bool)', + eventAbi: 'event AllowCollateral(address indexed collateral, bool isAllowed)', + onlyArgs: true, + fromBlock: 16592385, + }) + return sumTokens2({ api, owner: controller, tokens: logs.map(i => i.collateral)}) +} + +module.exports = { + ethereum: { tvl } +} diff --git a/projects/parallax/abis/prllxERC20.json b/projects/parallax/abis/prllxERC20.json new file mode 100644 index 0000000000..ba0a575e0d --- /dev/null +++ b/projects/parallax/abis/prllxERC20.json @@ -0,0 +1,4 @@ +{ + "strategyToId": "function strategyToId(address) view returns (uint256)", + "strategies": "function strategies(uint256) view returns (tuple fees, uint256 totalDeposited, uint256 totalStaked, uint256 lastCompoundTimestamp, uint256 cap, uint256 rewardPerBlock, uint256 rewardPerShare, uint256 lastUpdatedBlockNumber, address strategy, uint32 timelock, bool isActive, address rewardToken, uint256 usersCount)" +} \ No newline at end of file diff --git a/projects/parallax/contracts.json b/projects/parallax/contracts.json new file mode 100644 index 0000000000..fe1e98e7e7 --- /dev/null +++ b/projects/parallax/contracts.json @@ -0,0 +1,26 @@ +{ + "eth": { + "parallaxAddress": "0xd8935F1369E1dAc77CD37e664BC13ffdd741B962", + "strategyAddress": "0x9E6121e89dD50B5D02362A9fdb7EC1fAd3D15725", + "lpAddress": "0x5aee1e99fe86960377de9f88689616916d5dcabe", + "feedAddress": "0x5f4ec3df9cbd43714fe2740f5e3616155c5b8419", + "usdc": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + }, + "arbitrum": { + "mim": { + "parallaxCoreAddress": "0x07F78cC2668F9Bb152c4026E801df68Ed3AB9858", + "strategyAddress": "0xbf81Ba9D10F96ce0bb1206DE5F2d5B363f9796A9", + "parallaxCoreAddressOld": "0x74A819d4925dC9f473F398863666Ac787B48e1d0", + "strategyAddressOld": "0x7b8eFCd93ee71A0480Ad4dB06849B75573168AF4", + "lpAddresss": "0x30dF229cefa463e991e29D42DB0bae2e122B2AC7", + "usdc": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" + }, + "sushi": { + "parallaxAddr": "0xDCBEA8b2142Fe5E97BE9545FCFB30af812685Fb6", + "strategyAddrSushi": "0xb53BbF686b600857B209B863c1Bce2C83acef123", + "strategyAddrGMX": "0xF7caD5Ec40b5980Bd741346eAeE019c6E2b5D373", + "parallaxBackendAddr": "0x1724623a721a094f8Ba9d271c9BE8be83e64f74f", + "usdc": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" + } + } +} \ No newline at end of file diff --git a/projects/parallax/getPrice.js b/projects/parallax/getPrice.js new file mode 100644 index 0000000000..1c859d4ebb --- /dev/null +++ b/projects/parallax/getPrice.js @@ -0,0 +1,89 @@ +const get_virtual_price = "function get_virtual_price() view returns (uint256)"; +const getRate = "function getRate() view returns (uint256)"; +const latestRoundData = + "function latestRoundData() view returns (uint80 roundId,int256 answer,uint256 startedAt,uint256 updatedAt,uint80 answeredInRound)"; +const getPrice = "function getPrice() view returns (uint256 sushi,uint256 gmx)"; +const { default: BigNumber } = require("bignumber.js"); + +const getPriceMIM = async (tokenAddress, api) => { + const priceLpWei = await api.call({ + target: tokenAddress, + abi: get_virtual_price, + }) + + const decimals = await api.call({ + target: tokenAddress, + abi: "erc20:decimals", + }) + + const tokenPrice = new BigNumber(priceLpWei).div(`1e${decimals}`); + + return { + price: tokenPrice, + decimals, + }; +}; + +const getPriceAura = async ( + tokenAddress, + feedAddress, + api +) => { + const decimals = + await api.call({ + target: tokenAddress, + abi: "erc20:decimals", + }) + + const rate = + await api.call({ + target: tokenAddress, + abi: getRate, + }) + + const getLatestRoundData = + await api.call({ + target: feedAddress, + abi: latestRoundData, + }) + + const ethPriceInUSD = parseInt(getLatestRoundData.answer) / 10 ** 8; + const priceETH = new BigNumber(rate).div(`1e${decimals}`); + + const tokenPrice = new BigNumber(priceETH * ethPriceInUSD).div( + `1e${decimals}` + ); + + return { + price: tokenPrice, + decimals, + }; +}; + +const getPriceSushi = async (backendAddress, api) => { + const sushiDecimals = 14, + gmxDecimals = 8; + + const sushiGmxPrice = await api.call({ + target: backendAddress, + abi: getPrice, + }) + + const sushiPrice = new BigNumber(sushiGmxPrice.sushi).div( + `1e${sushiDecimals}` + ); + const gmxPrice = new BigNumber(sushiGmxPrice.gmx).div(`1e${gmxDecimals}`); + + return { + sushiPrice: sushiPrice, + gmxPrice: gmxPrice, + sushiDecimals, + gmxDecimals, + }; +}; + +module.exports = { + getPriceMIM, + getPriceAura, + getPriceSushi, +}; diff --git a/projects/parallax/index.js b/projects/parallax/index.js index 54483536a5..100250b8a7 100644 --- a/projects/parallax/index.js +++ b/projects/parallax/index.js @@ -1,20 +1,157 @@ -async function tvl(time, _ethBlock, _1, { api }) { - await Promise.all([ - addMIMStrategy(api) - ]) +const sdk = require("@defillama/sdk"); +const { default: BigNumber } = require("bignumber.js"); + +const { getPriceMIM, getPriceAura, getPriceSushi } = require("./getPrice"); + +const prllxERC20 = require("./abis/prllxERC20.json"); +const contracts = require("./contracts.json"); + +async function ethTvl(time, _ethBlock, { ethereum: block }, { api }) { + const strategyId = await api.call({ + target: contracts.eth.parallaxAddress, + params: contracts.eth.strategyAddress, + abi: prllxERC20["strategyToId"], + }); + + const strategy = await api.call({ + target: contracts.eth.parallaxAddress, + params: strategyId, + abi: prllxERC20["strategies"], + }); + + const balances = {}; + const { price, decimals } = await getPriceAura( + contracts.eth.lpAddress, + contracts.eth.feedAddress, + api + ); + + // const totalStaked = new BigNumber(strategy.totalStaked).div(`1e${decimals}`); + const totalStakedTVL = price + .times(strategy.totalStaked) + .times(1e6) + .toFixed(0); + + sdk.util.sumSingleBalance( + balances, + `ethereum:${contracts.eth.usdc}`, + totalStakedTVL + ); + + return balances; } -async function addMIMStrategy(api) { - const token = '0x30dF229cefa463e991e29D42DB0bae2e122B2AC7' - const sorbettiere = '0x839de324a1ab773f76a53900d70ac1b913d2b387' - const strategy = '0x7b8eFCd93ee71A0480Ad4dB06849B75573168AF4' - const [bal] = await api.call({ abi: 'function userInfo(uint256, address) view returns (uint256,uint256,uint256)', target: sorbettiere, params:[0, strategy] }) - api.add(token, bal) +async function arbitrumTvl(time, _ethBlock, { arbitrum: block }, { api }) { + const balances = {}; + + const strategyId = await api.call({ + target: contracts.arbitrum.mim.parallaxCoreAddress, + params: contracts.arbitrum.mim.strategyAddress, + abi: prllxERC20["strategyToId"], + }); + + const strategy = await api.call({ + target: contracts.arbitrum.mim.parallaxCoreAddress, + params: strategyId, + abi: prllxERC20["strategies"], + }); + + const { price, decimals } = await getPriceMIM( + contracts.arbitrum.mim.lpAddresss, + api + ); + + const totalStaked = new BigNumber(strategy.totalStaked).div(`1e${decimals}`); + const totalStakedTVLMIM = price.times(totalStaked).times(1e6).toFixed(0); + + // const strategyIdOld = await api.call({ + // target: contracts.arbitrum.mim.parallaxCoreAddressOld, + // params: contracts.arbitrum.mim.strategyAddressOld, + // abi: prllxERC20["strategyToId"], + // }) + // + // const strategyOld = + // await api.call({ + // target: contracts.arbitrum.mim.parallaxCoreAddressOld, + // params: strategyIdOld, + // abi: prllxERC20["strategies"], + // }) + // + // const totalStakedOld = new BigNumber(strategyOld.totalStaked).div( + // `1e${decimals}` + // ); + // const totalStakedTVLMIMOld = price + // .times(totalStakedOld) + // .times(1e6) + // .toFixed(0); + + // const totalStakedTVLMIMAll = + // Number(totalStakedTVLMIM) + Number(totalStakedTVLMIMOld); + + sdk.util.sumSingleBalance( + balances, + `arbitrum:${contracts.arbitrum.mim.usdc}`, + totalStakedTVLMIM + ); + + const strategySushiId = await api.call({ + target: contracts.arbitrum.sushi.parallaxAddr, + params: contracts.arbitrum.sushi.strategyAddrSushi, + abi: prllxERC20["strategyToId"], + }); + + const strategyGmxId = await api.call({ + target: contracts.arbitrum.sushi.parallaxAddr, + params: contracts.arbitrum.sushi.strategyAddrGMX, + abi: prllxERC20["strategyToId"], + }); + + const strategySushi = await api.call({ + target: contracts.arbitrum.sushi.parallaxAddr, + params: strategySushiId, + abi: prllxERC20["strategies"], + }); + + const strategyGmx = await api.call({ + target: contracts.arbitrum.sushi.parallaxAddr, + params: strategyGmxId, + abi: prllxERC20["strategies"], + }); + + const { sushiPrice, gmxPrice, sushiDecimals, gmxDecimals } = + await getPriceSushi(contracts.arbitrum.sushi.parallaxBackendAddr, api); + + const totalStakedSushi = new BigNumber(strategySushi.totalStaked).div(`1e18`); + const totalStakedGmx = new BigNumber(strategyGmx.totalStaked).div(`1e18`); + + const totalStakedTVLSushi = sushiPrice + .times(totalStakedSushi) + .times(1e6) + .toFixed(0); + + const totalStakedTVLGmx = gmxPrice + .times(totalStakedGmx) + .times(1e6) + .toFixed(0); + + const totalStakedTVL = + Number(totalStakedTVLSushi) + Number(totalStakedTVLGmx); + + sdk.util.sumSingleBalance( + balances, + `arbitrum:${contracts.arbitrum.sushi.usdc}`, + totalStakedTVL + ); + + return balances; } module.exports = { methodology: "TVL comes from the Staking Vaults", arbitrum: { - tvl, + tvl: arbitrumTvl, + }, + ethereum: { + tvl: ethTvl, }, }; diff --git a/projects/paraspace/helper/abis/UiPoolDataProvider.json b/projects/paraspace/helper/abis/UiPoolDataProvider.json index 29f6c69487..5172ed1153 100644 --- a/projects/paraspace/helper/abis/UiPoolDataProvider.json +++ b/projects/paraspace/helper/abis/UiPoolDataProvider.json @@ -1,4 +1,4 @@ { - "getReservesData": "function getReservesData(address provider) view returns (tuple(address underlyingAsset, string name, string symbol, uint256 decimals, uint256 baseLTVasCollateral, uint256 reserveLiquidationThreshold, uint256 reserveLiquidationBonus, uint256 reserveFactor, bool usageAsCollateralEnabled, bool borrowingEnabled, bool auctionEnabled, bool isActive, bool isFrozen, bool isPaused, bool isAtomicPricing, uint128 liquidityIndex, uint128 variableBorrowIndex, uint128 liquidityRate, uint128 variableBorrowRate, uint40 lastUpdateTimestamp, address xTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, address auctionStrategyAddress, uint256 availableLiquidity, uint256 totalScaledVariableDebt, uint256 priceInMarketReferenceCurrency, address priceOracle, uint256 variableRateSlope1, uint256 variableRateSlope2, uint256 baseVariableBorrowRate, uint256 optimalUsageRatio, uint128 accruedToTreasury, uint256 borrowCap, uint256 supplyCap, uint8 assetType)[], tuple(uint256 marketReferenceCurrencyUnit, int256 marketReferenceCurrencyPriceInUsd, int256 networkBaseTokenPriceInUsd, uint8 networkBaseTokenPriceDecimals))", + "getReservesData": "function getReservesData(address provider) view returns (tuple(address underlyingAsset, string name, string symbol, uint256 decimals, uint256 baseLTVasCollateral, uint256 reserveLiquidationThreshold, uint256 reserveLiquidationBonus, uint256 reserveFactor, bool usageAsCollateralEnabled, bool borrowingEnabled, bool auctionEnabled, bool isActive, bool isFrozen, bool isPaused, bool isAtomicPricing, uint128 liquidityIndex, uint128 variableBorrowIndex, uint128 liquidityRate, uint128 variableBorrowRate, uint40 lastUpdateTimestamp, address xTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, address auctionStrategyAddress, address timeLockStrategyAddress, uint256 availableLiquidity, uint256 totalScaledVariableDebt, uint256 priceInMarketReferenceCurrency, address priceOracle, uint256 variableRateSlope1, uint256 variableRateSlope2, uint256 baseVariableBorrowRate, uint256 optimalUsageRatio, uint128 accruedToTreasury, uint256 borrowCap, uint256 supplyCap, uint8 assetType, tuple(uint256 minThreshold, uint256 midThreshold, uint48 minWaitTime, uint48 midWaitTime, uint48 maxWaitTime, uint48 poolPeriodWaitTime, uint256 poolPeriodLimit, uint256 period, uint128 totalAmountInCurrentPeriod, uint48 lastResetTimestamp) timeLockStrategyData)[], tuple(uint256 marketReferenceCurrencyUnit, int256 marketReferenceCurrencyPriceInUsd, int256 networkBaseTokenPriceInUsd, uint8 networkBaseTokenPriceDecimals))", "getUniswapV3LpTokenData": "function getUniswapV3LpTokenData(address provider, address lpTokenAddress, uint256 tokenId) view returns (tuple(address token0, address token1, uint24 feeRate, int24 positionTickLower, int24 positionTickUpper, int24 currentTick, uint128 liquidity, uint256 liquidityToken0Amount, uint256 liquidityToken1Amount, uint256 lpFeeToken0Amount, uint256 lpFeeToken1Amount, uint256 tokenPrice, uint256 baseLTVasCollateral, uint256 reserveLiquidationThreshold))" -} \ No newline at end of file +} diff --git a/projects/paraspace/helper/address.js b/projects/paraspace/helper/address.js index 11e70cfffc..5d313c7071 100644 --- a/projects/paraspace/helper/address.js +++ b/projects/paraspace/helper/address.js @@ -1,14 +1,28 @@ module.exports = { ethereum: { - UiPoolDataProvider: '0xcFcca0A2531069f16634beeD1C74d28ac1F7d271', - PoolAddressProvider: '0x6cD30e716ADbE47dADf7319f6F2FB83d507c857d', - UniV3Pos: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', + UiPoolDataProvider: "0x30E6C173Ff3958a6629258C71Bd161e70BEe0e6D", + PoolAddressProvider: "0x6cD30e716ADbE47dADf7319f6F2FB83d507c857d", + UniV3Pos: "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", P2PPairStaking: "0xf090Eb4c2B63e7B26E8Bb09e6Fc0cC3A7586263B", Bayc: "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", Mayc: "0x60E4d786628Fea6478F785A6d7e704777c86a7c6", Bakc: "0xba30E5F9Bb24caa003E9f2f0497Ad287FDF95623", ApeCoinStaking: "0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9", ApeCoin: "0x4d224452801ACEd8B2F0aebE155379bb5D594381", - cAPE: "0xC5c9fB6223A989208Df27dCEE33fC59ff5c26fFF" - } + cAPE: "0xC5c9fB6223A989208Df27dCEE33fC59ff5c26fFF", + }, + arbitrum: { + UiPoolDataProvider: "0x94bDD135ccC48fF0440D750300A4e4Ba9B216B3A", + PoolAddressProvider: "0x45a35124749B061a29f91cc8ddf85606586dcf24", + UniV3Pos: "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + }, + polygon: { + UiPoolDataProvider: "0xa2a9dD7079f05d17BE291D99048e671129DdDc83", + PoolAddressProvider: "0x42b0C49130162F949e82ba855C4eFF0C3Fd4C5cC", + UniV3Pos: "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", + }, + era: { + UiPoolDataProvider: "0x451E3288a2dcD91b001cd831dD75109D524578b6", + PoolAddressProvider: "0xc11B2F53E119634c8755855e56D323C4F6dfd23d", + }, }; diff --git a/projects/paraspace/helper/index.js b/projects/paraspace/helper/index.js index 76926d2a2c..d5d86f7799 100644 --- a/projects/paraspace/helper/index.js +++ b/projects/paraspace/helper/index.js @@ -18,11 +18,13 @@ async function tvl(_, _1, _cb, { api, }) { const uniswapOwners = reservesData.filter(isUniV3XToken).map(i => i.xTokenAddress) reservesData = reservesData.filter(i => !isUniV3XToken(i)) - await sumTokens2({ api, balances, owners: uniswapOwners, resolveUniV3: true, }) + await sumTokens2({ chain: api.chain, api, balances, owners: uniswapOwners, resolveUniV3: true}) } let toa = reservesData.map(i => ([i.underlyingAsset, i.xTokenAddress])) - toa.push(...[[Bayc, P2PPairStaking], [Mayc, P2PPairStaking], [Bakc, P2PPairStaking]]) - return sumTokens2({ balances, tokensAndOwners: toa, blacklistedTokens: ['0x0000000000000000000000000000000000000001'] }) + if (api.chain === "ethereum") { + toa.push(...[[Bayc, P2PPairStaking], [Mayc, P2PPairStaking], [Bakc, P2PPairStaking]]) + } + return sumTokens2({ chain: api.chain, balances, tokensAndOwners: toa, blacklistedTokens: ['0x0000000000000000000000000000000000000001', address.ethereum.cAPE] }) } async function borrowed(_, _1, _cb, { api, }) { diff --git a/projects/paraspace/index.js b/projects/paraspace/index.js index 1beb9f6330..83dfe18991 100644 --- a/projects/paraspace/index.js +++ b/projects/paraspace/index.js @@ -3,10 +3,23 @@ const { tvl, borrowed } = require("./helper/index"); module.exports = { hallmarks: [ [Math.floor(new Date('2023-03-17') / 1e3), 'Whitehat hack'], + [Math.floor(new Date('2023-05-10') / 1e3), 'CEO drama'], ], methodology: `TVL includes ERC-20 and ERC-721 tokens that have been supplied as well as ERC-20 tokens that are supplied for lending.`, ethereum: { tvl, borrowed, }, + arbitrum: { + tvl, + borrowed, + }, + polygon: { + tvl, + borrowed, + }, + era: { + tvl, + borrowed, + } }; diff --git a/projects/parasset/index.js b/projects/parasset/index.js index 1f4e5dca71..ba61075e30 100644 --- a/projects/parasset/index.js +++ b/projects/parasset/index.js @@ -1,14 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakings } = require("../helper/staking"); const PUSDMorPool = "0x505eFcC134552e34ec67633D1254704B09584227"; // Mortgage-PUSD pool contract const PETHMorPool = "0x9a5C88aC0F209F284E35b4306710fEf83b8f9723"; //Mortgage-PETH pool contract const NEST = "0x04abeda201850ac0124161f037efd70c74ddc74c"; -const ETH = "0x0000000000000000000000000000000000000000"; +const ETH = ADDRESSES.null; const PUSDInsPool = "0x79025438C04Ae6A683Bcc7f7c51a01Eb4C2DDabA"; //Insurance-USD pool contract const PUSD = "0xCCEcC702Ec67309Bc3DDAF6a42E9e5a6b8Da58f0"; -const USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; +const USDT = ADDRESSES.ethereum.USDT; const PETHInsPool = "0x0bd32fFC80d5B98E403985D4446AE3BA67528C2e"; //Insurance-ETH pool contract const PETH = "0x53f878fb7ec7b86e4f9a0cb1e9a6c89c0555fbbd"; diff --git a/projects/paraswap.js b/projects/paraswap.js index 1724b18a3c..488964c139 100644 --- a/projects/paraswap.js +++ b/projects/paraswap.js @@ -19,7 +19,7 @@ async function safetyModuleStaking(timestamp, ethBlock, chainBlocks, { api }) { } module.exports = { - methodology: "PSP can be staked in staking pools, one pool per Private Market Maker, to signal and share the PMM benefits", + methodology: "PSP can be staked either on its single asset sePSP pool or 2x boosted sePSP2, an 80/20 balancer pool. Staking allows users to receive Revenue based on their boosted actions.", ethereum: { staking, pool2: safetyModuleStaking, diff --git a/projects/paribus/index.js b/projects/paribus/index.js new file mode 100644 index 0000000000..483c5cea70 --- /dev/null +++ b/projects/paribus/index.js @@ -0,0 +1,4 @@ +const { compoundExports2 } = require('../helper/compound') +module.exports = { + arbitrum: compoundExports2({ comptroller: '0x712E2B12D75fe092838A3D2ad14B6fF73d3fdbc9', cether: '0xaffd437801434643b734d0b2853654876f66f7d7' }), +} \ No newline at end of file diff --git a/projects/pawnfi-ape-staking/index.js b/projects/pawnfi-ape-staking/index.js new file mode 100644 index 0000000000..715be14330 --- /dev/null +++ b/projects/pawnfi-ape-staking/index.js @@ -0,0 +1,26 @@ +const ABI = require("../pawnfi/helper/abi.json") +const sdk = require("@defillama/sdk"); +const { ApeStakingPoolAddress } = require("../pawnfi/helper/config.js") + +module.exports = { + ethereum: { + tvl: async (_, _b, _cb, { api }) => { + const balances = {}; + + const stakedTotal = await api.multiCall({ + calls: [ + ApeStakingPoolAddress.BoundApe, + ApeStakingPoolAddress.BoundBAYC, + ApeStakingPoolAddress.BoundMAYC, + ApeStakingPoolAddress.BoundBAKC, + ], + target: ApeStakingPoolAddress.ApeCoinStaking, + abi: ABI.stakedTotal, + }) + stakedTotal.forEach((d) => + sdk.util.sumSingleBalance(balances, ApeStakingPoolAddress.APE, d, api.chain) + ); + return balances; + }, + }, +}; diff --git a/projects/pawnfi-lending/index.js b/projects/pawnfi-lending/index.js new file mode 100644 index 0000000000..d9aad52fef --- /dev/null +++ b/projects/pawnfi-lending/index.js @@ -0,0 +1,43 @@ +const ABI = require("../pawnfi/helper/abi.json") +const { Lending, LendCToken } = require("../pawnfi/helper/config.js") +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') +const { mergeExports } = require('../helper/utils') +const nftTvl = require('../pawnfi-nft/index.js') + +async function getPawnNFTTokens(api) { + const logs = await getLogs({ + api, + target: '0x82cac2725345ea95a200187ae9a5506e48fe1c5d', + topics: ['0x0e9af31ba332bde3bd4bd41172ead69274cb4263d5a6f2fa934a14dacefed4b1'], + eventAbi: 'event PieceTokenCreated (address token, address pieceToken, uint256 pieceTokenLength)', + onlyArgs: true, + fromBlock: 17107816, + }) + return logs.map(log => log.pieceToken) +} + +async function borrowed(timestamp, block, _, { api }) { + const blacklistedTokens = await getPawnNFTTokens(api) + const items = await api.call({ abi: ABI.cTokenMetadataAll, target: Lending, params: [LendCToken], }) + items.forEach((v) => { + if (blacklistedTokens.includes(v.underlyingAssetAddress)) return + api.add(v.underlyingAssetAddress, v.totalBorrows) + }) +} + + +async function tvl(timestamp, block, _, { api }) { + const blacklistedTokens = await getPawnNFTTokens(api) + const items = await api.call({ abi: ABI.cTokenMetadataAll, target: Lending, params: [LendCToken], }) + return sumTokens2({ api, tokensAndOwners: items.map(i => [i.underlyingAssetAddress, i.cToken]), blacklistedTokens }) +} + + +module.exports = mergeExports([{ + ethereum: { tvl, borrowed }, +}, nftTvl]) + +module.exports.hallmarks = [ + [Math.floor(new Date('2023-06-16') / 1e3), 'Protocol was exploited'], +] diff --git a/projects/pawnfi-nft/index.js b/projects/pawnfi-nft/index.js new file mode 100644 index 0000000000..918744e83f --- /dev/null +++ b/projects/pawnfi-nft/index.js @@ -0,0 +1,19 @@ +const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +module.exports = { + ethereum: { + tvl: async function tvl(_, _b, _cb, { api, }) { + const logs = await getLogs({ + api, + target: '0x82cac2725345ea95a200187ae9a5506e48fe1c5d', + topics: ['0x0e9af31ba332bde3bd4bd41172ead69274cb4263d5a6f2fa934a14dacefed4b1'], + eventAbi: 'event PieceTokenCreated (address token, address pieceToken, uint256 pieceTokenLength)', + onlyArgs: true, + fromBlock: 17107816, + }) + return sumTokens2({ api, tokensAndOwners: logs.map(log=>[log.token, log.pieceToken])}) + }, + pool2: sumTokensExport({ owner: '0x0f41eAdEc8FA71787516CCC5CEAcBD6430848f9E', resolveUniV3: true}) + } +} diff --git a/projects/pawnfi/helper/abi.json b/projects/pawnfi/helper/abi.json new file mode 100644 index 0000000000..00f8f43a4a --- /dev/null +++ b/projects/pawnfi/helper/abi.json @@ -0,0 +1,4 @@ +{ + "cTokenMetadataAll": "function cTokenMetadataAll(address[] cTokens) view returns (tuple(address cToken,uint exchangeRateCurrent,uint supplyRatePerBlock,uint borrowRatePerBlock,uint reserveFactorMantissa,uint totalBorrows,uint totalReserves,uint totalSupply,uint totalCash,bool isListed,uint collateralFactorMantissa,address underlyingAssetAddress,uint cTokenDecimals,uint underlyingDecimals,uint compSupplySpeed,uint compBorrowSpeed,uint borrowCap)[])", + "stakedTotal": "function stakedTotal(address _address) external view returns (uint256)" +} \ No newline at end of file diff --git a/projects/pawnfi/helper/config.js b/projects/pawnfi/helper/config.js new file mode 100644 index 0000000000..88a353026f --- /dev/null +++ b/projects/pawnfi/helper/config.js @@ -0,0 +1,25 @@ +module.exports = { + Lending: "0x136491CFEae8655501c847F2987B9Bc923A94065", + LendCToken:[ + "0xE8Ca2212c1F4a108d8728cb065622c6387a9860e", + "0x37B614714e96227D81fFffBdbDc4489e46eAce8C", + "0x223D9e0A8db805B0d2Bb06ef5D41b79fb29B5BC7", + "0xF58C9ba6e836919da211858191E6CbC5da7D44FC", + "0xE9373Ca88004bbF192B05A6460aFD05A88D9e1bC", + "0x9C1c49B595D5c25F0Ccc465099E6D9d0a1E5aB37", + "0xB77441172E72d93dde9742DE23c0562d3090966F", + "0x3B2da9304bd1308Dc0d1b2F9c3C14F4CF016a955", + "0x0b7d8EdA67cE2555abe41d2dF2102D62becf38BD", + "0x5CD407de334525C710FA485a8E19D8E98adE39E8", + "0x6A55080D5bA7cFf935Fb6aC54f4af4486EE24B1C" + ], + ApeStakingPoolAddress:{ + BoundApe: '0x73625745eD66F0d4C68C91613086ECe1Fc5a0119', + BoundBAYC: '0x5f0a4a59c8b39cddbcf0c683a6374655b4f5d76e', + BoundMAYC: '0x7d0b6fb139408af77f1c5bfdc8bd9166f5901304', + BoundBAKC: '0x23012599f9ABBA61Cb1A62D3785af7E434F692C6', + APE: '0x4d224452801ACEd8B2F0aebE155379bb5D594381', + ApeCoinStaking: "0x5954aB967Bc958940b7EB73ee84797Dc8a2AFbb9" + } + +} \ No newline at end of file diff --git a/projects/pawnfi/index.js b/projects/pawnfi/index.js new file mode 100644 index 0000000000..df9e6df9f5 --- /dev/null +++ b/projects/pawnfi/index.js @@ -0,0 +1,12 @@ +const { get } = require('../helper/http.js') + +async function fetch(arg) { + const data = await get('https://api-app.pawnfi.com/api/stat/queryplatstatinfo.do') + return data.info.f_total_tvl; +} + +module.exports = { + timetravel: false, + methodology: "The Pawnfi API endpoint fetches on-chain data from Pawnfi NFT contracts, token balance for each lending liquidity pools, and any value generated within Pawnfi platform.", + fetch: fetch, +}; \ No newline at end of file diff --git a/projects/peakdefi/index.js b/projects/peakdefi/index.js index 6692a9f1ba..5562ba3b41 100644 --- a/projects/peakdefi/index.js +++ b/projects/peakdefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const { staking } = require('../helper/staking'); @@ -5,7 +6,7 @@ const { staking } = require('../helper/staking'); const peakAddress = '0x630d98424eFe0Ea27fB1b3Ab7741907DFFEaAd78' const tokens = [ - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + ADDRESSES.ethereum.USDC, ] const funds = { diff --git a/projects/peardao/index.js b/projects/peardao/index.js index e7048efcd0..dc18cc4df3 100644 --- a/projects/peardao/index.js +++ b/projects/peardao/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require('../helper/staking'); const { pool2 } = require('../helper/pool2'); const { sumTokensExport } = require('../helper/unwrapLPs') const PEX_TOKEN_CONTRACT = '0x6a0b66710567b6beb81A71F7e9466450a91a384b'; -const BUSD_TOKEN_CONTRACT = '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56'; -const USDT_TOKEN_CONTRACT = '0x55d398326f99059ff775485246999027b3197955'; -const USDC_TOKEN_CONTRACT = '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d'; -const WBNB_TOKEN_CONTRACT = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'; -const BTCB_TOKEN_CONTRACT = '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c'; +const BUSD_TOKEN_CONTRACT = ADDRESSES.bsc.BUSD; +const USDT_TOKEN_CONTRACT = ADDRESSES.bsc.USDT; +const USDC_TOKEN_CONTRACT = ADDRESSES.bsc.USDC; +const WBNB_TOKEN_CONTRACT = ADDRESSES.bsc.WBNB; +const BTCB_TOKEN_CONTRACT = ADDRESSES.bsc.BTCB; const USTC_TOKEN_CONTRACT = '0x23396cF899Ca06c4472205fC903bDB4de249D6fC'; const PEX_BNB_LP_CONTRACT = '0x5ca96E8bDe0Bc587DaC9e02422Fd205b1102DAa4'; diff --git a/projects/pearlfi/index.js b/projects/pearlfi/index.js new file mode 100644 index 0000000000..200be55a86 --- /dev/null +++ b/projects/pearlfi/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require('../helper/unknownTokens') + + +module.exports = { + misrepresentedTokens: true, + methodology: `Uses factory(0xd541Bc203Cc2B85810d9b8E6a534eed1615528E2) address to count liquidity in pools as TVL.`, + polygon: { + tvl: getUniTVL({ factory: '0xd541Bc203Cc2B85810d9b8E6a534eed1615528E2', useDefaultCoreAssets: true, hasStablePools: true }), + } +}; \ No newline at end of file diff --git a/projects/pegasusdao.js b/projects/pegasusdao.js index 8b971fa6bb..8bc80b6bc6 100644 --- a/projects/pegasusdao.js +++ b/projects/pegasusdao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { tombTvl } = require("./helper/tomb"); const sdk = require("@defillama/sdk"); const { getChainTransform } = require("./helper/portedTokens"); @@ -15,7 +16,7 @@ const shareLps = "0x72c1f5fb7e5513a07e1ff663ad861554887a0a0a"; const genesisPool = "0x64bfCBe4480B53E8234Ca258a96720F29fe6A6fB"; const genesisTokens = [ "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", - "0xc21223249ca28397b4b6541dffaecc539bff0c59", + ADDRESSES.cronos.USDC, "0x97749c9b61f878a880dfe312d2594ae07aed7656", "0xb8df27c687c6af9afe845a2afad2d01e199f4878", "0x43713f13a350d104319126c13cd7402822a44f6b" diff --git a/projects/pegasusdao/index.js b/projects/pegasusdao/index.js deleted file mode 100644 index bffc637124..0000000000 --- a/projects/pegasusdao/index.js +++ /dev/null @@ -1,10 +0,0 @@ -const {ohmTvl} = require("../helper/ohm"); - -const sus = "0x5b5Fe1238aca91C65683aCd7f9D9Bf922e271EAA"; -const stakingContract = ""; - -const treasury = "0x7310855e0Aa8B110925fdE0100b01c62984d2a3C"; -const treasuryTokens = [ - ["0xc21223249CA28397B4B6541dfFaEcC539BfF0c59", false], // USDC - ["0xAE182Db2F7897D7678c5099C1e52A1c802580827", true], // SUS-USDC CRONA LPS -] \ No newline at end of file diff --git a/projects/pegasusfinance/index.js b/projects/pegasusfinance/index.js index 61acf32a6c..98aee5bb23 100644 --- a/projects/pegasusfinance/index.js +++ b/projects/pegasusfinance/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const LIQUIDITY_POOL_CONTRACT = "0x7398c321449d836cec83582a678ccb8650360a18"; -const WETH_OPTIMISM = "0x4200000000000000000000000000000000000006"; +const WETH_OPTIMISM = ADDRESSES.tombchain.FTM; module.exports = { methodology: "WETH supplied to liquidity pool + leftover weth in treasury", diff --git a/projects/pegasys-v3/index.js b/projects/pegasys-v3/index.js new file mode 100644 index 0000000000..e474864b7b --- /dev/null +++ b/projects/pegasys-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + rollux: { factory: '0xeAa20BEA58979386A7d37BAeb4C1522892c74640', fromBlock: 87430, }, +}) diff --git a/projects/pembrock/index.js b/projects/pembrock/index.js index 90c9ae58ef..58c357215b 100644 --- a/projects/pembrock/index.js +++ b/projects/pembrock/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { BigNumber } = require('bignumber.js'); const { call, addTokenBalances, sumSingleBalance } = require('../helper/chain/near'); @@ -41,7 +42,7 @@ async function tvl() { async function staking() { const balances = {}; - sumSingleBalance(balances, "token.pembrock.near", await call('staking.v1.pembrock.near', "get_total_staked", {})) + sumSingleBalance(balances, ADDRESSES.near.PEMBROCK, await call('staking.v1.pembrock.near', "get_total_staked", {})) return balances; } diff --git a/projects/pendle/v2.js b/projects/pendle/v2.js index d0e2e47452..73ff88c91c 100644 --- a/projects/pendle/v2.js +++ b/projects/pendle/v2.js @@ -1,47 +1,87 @@ +const ADDRESSES = require("../helper/coreAssets.json"); const contracts = require("./contracts"); -const { staking } = require('../helper/staking') -const { getLogs } = require('../helper/cache/getLogs') - +const { staking } = require("../helper/staking"); +const { getLogs } = require("../helper/cache/getLogs"); +const steth = ADDRESSES.ethereum.STETH; const config = { - ethereum: { factory: '0x27b1dacd74688af24a64bd3c9c1b143118740784', fromBlock: 16032059 }, - arbitrum: { factory: '0xf5a7de2d276dbda3eef1b62a9e718eff4d29ddc8', fromBlock: 62979673 }, -} + ethereum: { + factory: "0x27b1dacd74688af24a64bd3c9c1b143118740784", + fromBlock: 16032059, + }, + arbitrum: { + factory: "0xf5a7de2d276dbda3eef1b62a9e718eff4d29ddc8", + fromBlock: 62979673, + }, + bsc: { + factory: "0x2bEa6BfD8fbFF45aA2a893EB3B6d85D10EFcC70E", + fromBlock: 29484286, + }, +}; -module.exports = {} +module.exports = {}; -Object.keys(config).forEach(chain => { - const { factory, fromBlock } = config[chain] +Object.keys(config).forEach((chain) => { + const { factory, fromBlock } = config[chain]; module.exports[chain] = { - tvl: async (_, _b, _cb, { api, }) => { + tvl: async (_, _b, _cb, { api }) => { const logs = await getLogs({ api, target: factory, - topics: ['0x166ae5f55615b65bbd9a2496e98d4e4d78ca15bd6127c0fe2dc27b76f6c03143'], - eventAbi: 'event CreateNewMarket (address indexed market, address indexed PT, int256 scalarRoot, int256 initialAnchor)', + topics: [ + "0x166ae5f55615b65bbd9a2496e98d4e4d78ca15bd6127c0fe2dc27b76f6c03143", + ], + eventAbi: + "event CreateNewMarket (address indexed market, address indexed PT, int256 scalarRoot, int256 initialAnchor)", onlyArgs: true, fromBlock, - }) - const pt = logs.map(i => i.PT) - const sy = [ + }); + const pt = logs.map((i) => i.PT); + let sy = [ ...new Set( - (await api.multiCall({ - abi: "address:SY", - calls: pt, - })).map(s => s.toLowerCase()), + ( + await api.multiCall({ + abi: "address:SY", + calls: pt, + }) + ).map((s) => s.toLowerCase()) ), - ] + ]; + const [data, supply, decimals] = await Promise.all([ - api.multiCall({ abi: 'function assetInfo() view returns (uint8 assetType , address uAsset , uint8 decimals )', calls: sy }), - api.multiCall({ abi: 'erc20:totalSupply', calls: sy }), - api.multiCall({ abi: 'erc20:decimals', calls: sy }), - ]) + api.multiCall({ + abi: "function assetInfo() view returns (uint8 assetType , address uAsset , uint8 decimals )", + calls: sy, + }), + api.multiCall({ abi: "erc20:totalSupply", calls: sy }), + api.multiCall({ abi: "erc20:decimals", calls: sy }), + ]); + + const tokenAssetTypeSy = sy.filter((_, i) => data[i].assetType === "0"); + const exchangeRates = await api.multiCall({ + abi: "function exchangeRate() view returns (uint256 res)", + calls: tokenAssetTypeSy, + }); + data.forEach((v, i) => { - let value = supply[i] * (10 ** (v.decimals - decimals[i])) - api.add(v.uAsset, value) - }) - return api.getBalances() - } - } -}) + let value = supply[i] * 10 ** (v.decimals - decimals[i]); + let index = tokenAssetTypeSy.indexOf(sy[i]); + if (index !== -1) { + value = (value * exchangeRates[index]) / 10 ** 18; + } + api.add(v.uAsset.toLowerCase(), value); + }); + let balances = api.getBalances(); + const bridged = `arbitrum:${steth}`; + if (bridged in balances) { + balances[steth] = balances[bridged]; + delete balances[bridged]; + } + return balances; + }, + }; +}); -module.exports.ethereum.staking = staking(contracts.v2.vePENDLE, contracts.v2.PENDLE) \ No newline at end of file +module.exports.ethereum.staking = staking( + contracts.v2.vePENDLE, + contracts.v2.PENDLE +); diff --git a/projects/penpie/config.js b/projects/penpie/config.js new file mode 100644 index 0000000000..1d6d3ee244 --- /dev/null +++ b/projects/penpie/config.js @@ -0,0 +1,23 @@ +module.exports = { + ethereum: { + masterPenpie: "0x16296859C15289731521F199F0a5f762dF6347d0", + vePENDLE: "0x4f30A9D41B80ecC5B94306AB4364951AE3170210", + mPENDLE: "0x83e817E1574e2201a005EC0f7e700ED5606F555E", + PENDLE: "0x808507121b80c02388fad14726482e061b8da827", + pendleStaking: "0x6E799758CEE75DAe3d84e09D40dc416eCf713652", + }, + arbitrum: { + masterPenpie: "0x0776C06907CE6Ff3d9Dbf84bA9B3422d7225942D", + vePENDLE: "0x3209E9412cca80B18338f2a56ADA59c484c39644", + mPENDLE: "0xB688BA096b7Bb75d7841e47163Cd12D18B36A5bF", + PENDLE: "0x0c880f6761F1af8d9Aa9C466984b80DAb9a8c9e8", + pendleStaking: "0x6DB96BBEB081d2a85E0954C252f2c1dC108b3f81", + }, + bsc: { + masterPenpie: "0xb35b3d118c0394e750b4b59d2a2f9307393cd5db", + vePENDLE: "0x8A09574b0401A856d89d1b583eE22E8cb0C5530B", + mPENDLE: "0x0465aad9da170798433f4ab7fa7ec8b9b9bf0bb1", + PENDLE: "0xb3Ed0A426155B79B898849803E3B36552f7ED507", + pendleStaking: "0x782d9d67feaa4d1cdf8222d9053c8cba1c3b7982", + }, +}; diff --git a/projects/penpie/index.js b/projects/penpie/index.js new file mode 100644 index 0000000000..cb783d1ded --- /dev/null +++ b/projects/penpie/index.js @@ -0,0 +1,27 @@ +const MasterMagpieAbi = require("../magpiexyz/abis/masterMagpie.json"); +const config = require("./config"); + +async function tvl(timestamp, block, chainBlocks, { api }) { + const { masterPenpie, pendleStaking, vePENDLE, PENDLE, mPENDLE, } = config[api.chain]; + + const poolTokens = await api.fetchList({ + lengthAbi: MasterMagpieAbi.poolLength, + itemAbi: MasterMagpieAbi.registeredToken, + target: masterPenpie, + }); + const poolInfos = await api.multiCall({ abi: 'function getPoolInfo(address) view returns ( uint256 emission, uint256 allocpoint, uint256 sizeOfPool, uint256 totalPoint)', calls: poolTokens, target: masterPenpie, }) + const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: poolTokens, }) + poolTokens.forEach((token, i) => { + if (symbols[i] === 'vlPenpie' || symbols[i] === 'mPendle' || symbols[i] === 'mPendleOFT') { + token = PENDLE + } + api.add(token, poolInfos[i].sizeOfPool) + }) +} + +Object.keys(config).forEach((chain) => { + module.exports[chain] = { + doublecounted: true, + tvl: tvl, + }; +}); diff --git a/projects/pepe-bridge/index.js b/projects/pepe-bridge/index.js index fa146f4678..2314078ac0 100644 --- a/projects/pepe-bridge/index.js +++ b/projects/pepe-bridge/index.js @@ -1,16 +1,49 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, sumTokensExport, } = require('../helper/unwrapLPs'); const config = { ethereum: [ - [[nullAddress], '0x882260324AD5A87bF5007904B4A8EF87023c856A'], // ETH + [[nullAddress], '0x882260324AD5A87bF5007904B4A8EF87023c856A'], [ [ - '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.CRV, ], '0x0de7b091A21BD439bdB2DfbB63146D9cEa21Ea83' ] + ], + bsc: [ + [[nullAddress], '0xF1632012f6679Fcf464721433AFAAe9c11ad9e03'], + [ + [ + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.BTCB, + ], + '0x8DF12786EC0E34e60D4c52f9052ba4e536e9367a' + ] + ], + polygon: [ + [[nullAddress], '0xEa3cc73165748AD1Ca76b4d1bA9ebC43fb399018'], + [ + [ + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.USDC, + ], + '0xF57dB884606a0ed589c06320d9004FBeD4f81e4A' + ] + ], + tron: [ + [[nullAddress], 'TMsm33cUm8HuxyRqwG7xhV46cmx5NVPPGB'], + [ + [ + ADDRESSES.tron.USDT, + ADDRESSES.tron.USDC + ], + 'TNN42f7dXYksBsh8hjVo8XD8aYSKcSEhJF' + ] ] } module.exports = {}; diff --git a/projects/pepedex/index.js b/projects/pepedex/index.js new file mode 100644 index 0000000000..ef089cbf8f --- /dev/null +++ b/projects/pepedex/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + ethereum: { + tvl: getUniTVL({ + fetchBalances: true, + useDefaultCoreAssets: true, + factory: '0x460b2005b3318982feADA99f7ebF13e1D6f6eFfE', + }) + } +}; diff --git a/projects/percent/index.js b/projects/percent/index.js index 9391d3b968..6d141a89f8 100644 --- a/projects/percent/index.js +++ b/projects/percent/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { stakings } = require("../helper/staking"); @@ -5,7 +6,7 @@ const { getCompoundV2Tvl } = require("../helper/compound"); const comptroller = "0xf47dD16553A934064509C40DC5466BBfB999528B"; const pETH = "0x45F157b3d3d7C415a0e40012D64465e3a0402C64"; -const pETHEquivalent = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const pETHEquivalent = ADDRESSES.ethereum.WETH; const pool2Contract = "0x23b53026187626Ed8488e119767ACB2Fe5F8de4e"; const lpOfPool2 = "0xEB85B2E12320a123d447Ca0dA26B49E666b799dB"; diff --git a/projects/perp/index.js b/projects/perp/index.js index 2ea517f9bd..d0e69d6892 100644 --- a/projects/perp/index.js +++ b/projects/perp/index.js @@ -1,41 +1,25 @@ -const sdk = require("@defillama/sdk"); -const { getChainTransform } = require('../helper/portedTokens'); +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); -const insuranceFund = "0x8C29F6F7fc1999aB84b476952E986F974Acb3824" -const clearingHouse = "0x5d9593586b4B5edBd23E7Eba8d88FD8F09D83EBd" -const usdcXdai = "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83" - const perpToken = "0xbC396689893D065F41bc2C6EcbeE5e0085233447" +const perpTokenOP = "0x9e1028F5F1D5eDE59748FFceE5532509976840E0" const stakingContract = "0x0f346e19F01471C02485DF1758cfd3d624E399B4" - -async function xdai(_timestamp, ethBlock, chainBlocks) { - const balances = {}; - const underlyingBalances = await sdk.api.abi.multiCall({ - calls: [{ - target: usdcXdai, - params: insuranceFund - },{ - target: usdcXdai, - params: clearingHouse - }], - block: chainBlocks.xdai, - abi: "erc20:balanceOf", - chain: 'xdai' - }); - const usdc = (await getChainTransform('xdai'))(usdcXdai); - sdk.util.sumSingleBalance(balances, usdc, underlyingBalances.output[0].output) - sdk.util.sumSingleBalance(balances, usdc, underlyingBalances.output[1].output) - - return balances -} - +const stakingContractOP = "0xD360B73b19Fb20aC874633553Fb1007e9FcB2b78" module.exports = { - ethereum: { - staking: staking(stakingContract, perpToken) - }, - optimism:{ - tvl: staking("0xAD7b4C162707E0B2b5f6fdDbD3f8538A5fbA0d60", "0x7f5c764cbc14f9669b88837ca1490cca17c31607", "optimism") - }, - + ethereum: { + staking: staking(stakingContract, perpToken) + }, + optimism: { + staking: staking(stakingContractOP, perpTokenOP), + tvl: staking( + [ + "0xAD7b4C162707E0B2b5f6fdDbD3f8538A5fbA0d60" + ], + [ + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.USDT, + ADDRESSES.optimism.OP, + ADDRESSES.tombchain.FTM, + ADDRESSES.optimism.FRAX]) + }, } \ No newline at end of file diff --git a/projects/perp88/index.js b/projects/perp88/index.js index 91f9eecbb2..9eacb8aabd 100644 --- a/projects/perp88/index.js +++ b/projects/perp88/index.js @@ -1,18 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') const tokens = { - "WMATIC": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - "WETH": "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - "WBTC": "0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6", - "DAI": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - "USDC": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "USDT": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f" + "WMATIC": ADDRESSES.polygon.WMATIC_2, + "WETH": ADDRESSES.polygon.WETH_1, + "WBTC": ADDRESSES.polygon.WBTC, + "DAI": ADDRESSES.polygon.DAI, + "USDC": ADDRESSES.polygon.USDC, + "USDT": ADDRESSES.polygon.USDT } const POOL_DIAMOND_CONTRACT = '0xE7D96684A56e60ffBAAe0fC0683879da48daB383'; module.exports = { - timetravel: false, - misrepresentedTokens: false, - methodology: 'Count every tokens under PoolDiamond management.', start: 1668684025, polygon: { tvl: sumTokensExport({ @@ -20,5 +18,17 @@ module.exports = { tokens: Object.values(tokens), chain: 'polygon', }), + }, + arbitrum: { + tvl: sumTokensExport({ + owner: '0x56CC5A9c0788e674f17F7555dC8D3e2F1C0313C0', + tokens: [ + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.fsGLP, + ] + }) } } diff --git a/projects/phantom-finance/index.js b/projects/phantom-finance/index.js index fde52454c5..48212740d3 100644 --- a/projects/phantom-finance/index.js +++ b/projects/phantom-finance/index.js @@ -18,6 +18,9 @@ async function tvl(timestamp, block, chainBlocks) { } module.exports = { + hallmarks: [ + [1646179200, "Rug Pull"] + ], deadFrom: 1648765747, methodology: "TVL includes all farms in MasterChef contract", fantom: { diff --git a/projects/pheasantswap/index.js b/projects/pheasantswap/index.js new file mode 100644 index 0000000000..4941297bcf --- /dev/null +++ b/projects/pheasantswap/index.js @@ -0,0 +1,5 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + enuls: { tvl: getUniTVL({ factory: '0x7bf960B15Cbd9976042257Be3F6Bb2361E107384', useDefaultCoreAssets: true, fetchBalances: true }), }, +} diff --git a/projects/phezzan/index.js b/projects/phezzan/index.js index 24a4b00ea6..ae2fbc0a55 100644 --- a/projects/phezzan/index.js +++ b/projects/phezzan/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unknownTokens') const { toUSDTBalances } = require('../helper/balances') const { get } = require('../helper/http') @@ -18,8 +19,8 @@ async function offers() { const Contracts = { kava: { - wkava: "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b", - usdc: "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f", + wkava: ADDRESSES.kava.WKAVA, + usdc: ADDRESSES.telos.ETH, perpV1Result: "0x46bC4858F5BEE5AeB09bEB5906D7eFE92Ba50851", fundingResult: "0xDe7570E5835B6045C6AB360222887bAED21Be5EA", // Funding P1P1TradeResult: "0x49Ef8ca9A80B701E470EB70C835b361a99091278", // Staking @@ -31,10 +32,14 @@ module.exports = { timetravel: false, misrepresentedTokens: true, kava: { - tvl: sumTokensExport({ owners: [Contracts.kava.perpV1Result, Contracts.kava.fundingResult, ], tokens: [Contracts.kava.wkava, Contracts.kava.usdc, nullAddress] }), + tvl: async () => ({}), + // tvl: sumTokensExport({ owners: [Contracts.kava.perpV1Result, Contracts.kava.fundingResult, ], tokens: [Contracts.kava.wkava, Contracts.kava.usdc, nullAddress] }), }, zksync: { - offers, + // offers, tvl: async () => ({}) - } + }, + hallmarks: [ + [Math.floor(new Date('2023-04-23')/1e3), 'Protocol shutdown'], + ], }; diff --git a/projects/phission-finance/index.js b/projects/phission-finance/index.js index 36040ffdb0..af8f50d528 100644 --- a/projects/phission-finance/index.js +++ b/projects/phission-finance/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unknownTokens') -const WETH = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'; +const WETH = ADDRESSES.ethereum.WETH; const GOV_POOL = '0x18174E80335B9fCbc8ac0AB7f40F25aba878ccCC'; const SPLIT_CONTRACT = '0x5b38A73f9dB3F5e12BB4dCb5a434FB3bd3972E53'; const STAKING_CONTRACT = '0x569a157eac744b87a42314e8fc03a2e648ea33a2' diff --git a/projects/phoenix-bonds/index.js b/projects/phoenix-bonds/index.js index 9d67711c6c..f7611db8eb 100644 --- a/projects/phoenix-bonds/index.js +++ b/projects/phoenix-bonds/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { call } = require('../helper/chain/near') async function tvl() { const linear_price = await call( - 'linear-protocol.near', + ADDRESSES.near.LINA, 'ft_price', {} ); diff --git a/projects/phoenix/index.js b/projects/phoenix/index.js index bbd9cabfc1..91cc615959 100644 --- a/projects/phoenix/index.js +++ b/projects/phoenix/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); @@ -8,7 +9,7 @@ const bscpool = '0xBB8dA4ed33388A0eAc442eD1f28474413FC9d7a7'; const wanpool = '0xBB8dA4ed33388A0eAc442eD1f28474413FC9d7a7'; //const wanOptionFactorySc = new wanWeb3.eth.Contract(optionFactoryAbi,wanOptionFactory); -let usd = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +let usd = ADDRESSES.ethereum.USDC; async function polygon(timestamp, _, {polygon: block }) { let totalSupply = (await sdk.api.abi.call({ diff --git a/projects/photon-protocol/index.js b/projects/photon-protocol/index.js index 29f3055529..0028dd3dab 100644 --- a/projects/photon-protocol/index.js +++ b/projects/photon-protocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakingUnknownPricedLP } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -6,7 +7,7 @@ const stakingContract = "0x81177472Ce36A9b1AB573804CD215C72cEb76F36"; const photonbusd = "0xEBAa17dA7D5C616441290669E9D2c982c8B1Da25"; //PHOTON-BUSD const treasury = "0x0f90591b01DE6F832e8B8E4ec3525efD423BCaD1"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ]; async function tvl (timestamp, block, chainBlocks) { diff --git a/projects/phux/index.js b/projects/phux/index.js new file mode 100644 index 0000000000..20b7243d9c --- /dev/null +++ b/projects/phux/index.js @@ -0,0 +1,16 @@ +const { onChainTvl } = require('../helper/balancer') + +const VAULT_ADDRESS = '0x7F51AC3df6A034273FB09BB29e383FCF655e473c'; + +const config = { + pulse: { fromBlock: 17500116, }, +} + +module.exports = {}; + +Object.keys(config).forEach(chain => { + const { fromBlock } = config[chain] + module.exports[chain] = { + tvl: onChainTvl(VAULT_ADDRESS, fromBlock) + } +}) \ No newline at end of file diff --git a/projects/pidao-finance/index.js b/projects/pidao-finance/index.js index 70a7d6339b..cc57fb54ac 100644 --- a/projects/pidao-finance/index.js +++ b/projects/pidao-finance/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x458B737d87C40252EC11b160C76bb1C53F248b28" module.exports = ohmTvl(treasury, [ //busd - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.BUSD, false], //busd-usd - ["0x55d398326f99059ff775485246999027b3197955", false], + [ADDRESSES.bsc.USDT, false], //TrueUSD - ["0x14016e85a25aeb13065688cafb43044c2ef86784", false], + [ADDRESSES.bsc.BTUSD, false], //MDEX LP ["0x149a712378aba63882c1d372739eb47a6fd0e12e", true], //Pancake LPs diff --git a/projects/piggy/index.js b/projects/piggy/index.js index 25e789bdf4..ea209dff27 100644 --- a/projects/piggy/index.js +++ b/projects/piggy/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {getLiquityTvl} = require('../helper/liquity') -const BNB_ADDRESS = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; +const BNB_ADDRESS = ADDRESSES.bsc.WBNB; // TroveManager holds total system collateral (deposited BNB) const TROVE_MANAGER_ADDRESS = "0xb283466d09177c5C6507785d600caFDFa538C65C"; diff --git a/projects/pika-v4/index.js b/projects/pika-v4/index.js new file mode 100644 index 0000000000..e3d3705a97 --- /dev/null +++ b/projects/pika-v4/index.js @@ -0,0 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + optimism: { + tvl: sumTokensExport({ owners: [ + '0x9b86B2Be8eDB2958089E522Fe0eB7dD5935975AB', + ], tokens: [ADDRESSES.optimism.USDC]}) + } +} \ No newline at end of file diff --git a/projects/pika.js b/projects/pika.js index 11646f0e11..9744d4fae3 100644 --- a/projects/pika.js +++ b/projects/pika.js @@ -1,16 +1,11 @@ -const { sumTokens2 } = require('./helper/unwrapLPs') -const chain = 'optimism' - -async function tvl(_, _b, { [ chain]: block }) { - const owners = [ - '0x2FaE8C7Edd26213cA1A88fC57B65352dbe353698', '0xD5A8f233CBdDb40368D55C3320644Fb36e597002', - ] - const tokens = ['0x7f5c764cbc14f9669b88837ca1490cca17c31607'] - return sumTokens2({ chain, block, owners, tokens, }) -} +const ADDRESSES = require('./helper/coreAssets.json') +const { sumTokensExport } = require('./helper/unwrapLPs') module.exports = { optimism: { - tvl + tvl: sumTokensExport({ owners: [ + '0x2FaE8C7Edd26213cA1A88fC57B65352dbe353698', + '0xD5A8f233CBdDb40368D55C3320644Fb36e597002', + ], tokens: [ADDRESSES.optimism.USDC]}) } } \ No newline at end of file diff --git a/projects/pilotprotocol/index.js b/projects/pilotprotocol/index.js index e9872ee8f1..ac1fcd9b47 100644 --- a/projects/pilotprotocol/index.js +++ b/projects/pilotprotocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -29,7 +30,7 @@ const farmingPools = [ const tokens = [ // USDT: - "0xa71EdC38d189767582C38A3145b5873052c3e47a", + ADDRESSES.heco.USDT, // HBTC: "0x66a79D23E58475D2738179Ca52cd0b41d73f0BEa", // ETH: @@ -91,6 +92,7 @@ const hecoTvl = async (timestamp, ethBlock, chainBlocks) => { })), chain: "heco", block: chainBlocks["heco"], + permitFailure: true, }) ).output.map((st) => st.output); diff --git a/projects/pine-protocol/index.js b/projects/pine-protocol/index.js index eb6e9e6e49..31658435ae 100644 --- a/projects/pine-protocol/index.js +++ b/projects/pine-protocol/index.js @@ -1,20 +1,25 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getLogs, getAddress } = require('../helper/cache/getLogs') const { sumTokens2 } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') async function _getLogs(api) { + const { factory, fromBlock } = config[api.chain] const logs = await getLogs({ api, - target: '0x19c56cb20e6e9598fc4d22318436f34981e481f9', + target: factory, topics: ['0xfe735a4766d74f0c8b076be3f254cfc301a851f3ac49c4ae35e7d48ab75cd69d'], - fromBlock: 16423090, + fromBlock, }) return logs.map(i => i.topics.slice(1).map(getAddress)) } async function tvl(_, _b, _cb, { api, }) { + const { factory, wrapped } = config[api.chain] const logs = await _getLogs(api) - return sumTokens2({ api, tokensAndOwners: logs.map(i => [i[1], i[0]]) }) + const tokensAndOwners = logs.map(i => [i[1], i[0]]) + tokensAndOwners.push([wrapped, factory]) + return sumTokens2({ api, tokensAndOwners, permitFailure: true }) } async function borrowed(_, _b, _cb, { api, }) { @@ -25,9 +30,15 @@ async function borrowed(_, _b, _cb, { api, }) { return balances } +const config = { + ethereum: { factory: '0x19c56cb20e6e9598fc4d22318436f34981e481f9', fromBlock: 16423090, wrapped: ADDRESSES.ethereum.WETH, }, + polygon: { factory: '0x85b609f4724860fead57e16175e66cf1f51bf72d', fromBlock: 40378130, wrapped: ADDRESSES.polygon.WMATIC_2, }, +} + module.exports = { methodology: 'value of NFTs locked in pools as taken as tvl, tokens borrowed against it is counted towards borrowed', - ethereum: { - tvl, borrowed - } -} \ No newline at end of file +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl, borrowed, } +}) \ No newline at end of file diff --git a/projects/pinjam/index.js b/projects/pinjam/index.js new file mode 100644 index 0000000000..0112742f7d --- /dev/null +++ b/projects/pinjam/index.js @@ -0,0 +1,60 @@ +const { getLogs, getAddress } = require('../helper/cache/getLogs') +const { staking } = require("../helper/staking"); + +const stakingContract = "0x6413707acd0eF29E54e4f7eE931bb00575868eA4"; +const PINKAV = "0xE5274E38E91b615D8822e8512a29A16FF1B9C4Af"; +const config = { + kava: { lendingPool: "0x11C3D91259b1c2Bd804344355C6A255001F7Ba1e", fromBlock: 5281411, }, +}; + +async function getTokens(api) { + const { lendingPool, fromBlock } = config[api.chain] + const logs = await getLogs({ + api, + target: lendingPool, + topics: ['0x9f8f649e3f624ae845ed20c597f2841f852ba62903a53736c2b36d67869ca919'], + fromBlock, + }) + return logs.map(log => getAddress(log.topics[1])) +} + +async function tvl(_, _b, _cb, { api, }) { + const { lendingPool } = config[api.chain] + const tokens = await getTokens(api) + const bals = await api.multiCall({ abi: abi.getTotalLiquidity, calls: tokens, target: lendingPool }) + const borrows = await api.multiCall({ abi: abi.getTotalDebt, calls: tokens, target: lendingPool }) + api.addTokens(tokens, bals) + api.addTokens(tokens, borrows.map(i => i * -1)) +} + +async function borrowed(_, _b, _cb, { api, }) { + const { lendingPool } = config[api.chain] + const tokens = await getTokens(api) + const bals = await api.multiCall({ abi: abi.getTotalDebt, calls: tokens, target: lendingPool }) + api.addTokens(tokens, bals) +} + +module.exports = { + methodology: + "Counts the total tokens supplied to the lending pool and the total tokens borrowed from the lending pool.", + kava: { + staking: staking(stakingContract, PINKAV), + }, + hallmarks: [ + [1688670115, "Multichain Exploit"], +], +}; + + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + ...(module.exports[chain] || {}), + tvl, borrowed, + } +}) + +const abi = { + "getSupportedAsset": "function getSupportedAsset(uint256 _index) view returns (address)", + "getTotalDebt": "function getTotalDebt(address _underlyingAsset) view returns (uint256)", + "getTotalLiquidity": "function getTotalLiquidity(address _underlyingAsset) view returns (uint256)", +} diff --git a/projects/pinkpea/index.js b/projects/pinkpea/index.js index da92779bcb..478c015870 100644 --- a/projects/pinkpea/index.js +++ b/projects/pinkpea/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./lens.json"); const { ethers } = require("ethers"); const vaultLensAddress = "0x64958a77bE17f3B840d66260CB088f4C8dB1f47C"; -const zeroAddress = "0x0000000000000000000000000000000000000000"; +const zeroAddress = ADDRESSES.null; const tokenDecimals = { "0x53ff774ebE8Bf7E03df8D73D3E9915b2Ca4eC40E": 6, @@ -47,7 +48,7 @@ async function tvl(timestamp, ethBlock, chainBlocks) { Number(ethers.utils.formatUnits(data.tokenPrice, decimal)); }); return { - "aurora:0x4988a896b1227218e4A686fdE5EabdcAbd91571f": totalTvl * 1000000, + ["aurora:" + ADDRESSES.aurora.USDT_e]: totalTvl * 1000000, }; } module.exports = { diff --git a/projects/pinksale/config.js b/projects/pinksale/config.js index 2f7c7f02e4..1e6931cb9b 100644 --- a/projects/pinksale/config.js +++ b/projects/pinksale/config.js @@ -32,6 +32,9 @@ module.exports = { '0x33d4cC8716Beb13F814F538Ad3b2de3b036f5e2A', '0x71B5759d73262FBb223956913ecF4ecC51057641', ], + blacklist: [ + '0xd626661e2d4f93a1c4122d386fa9ea0f62b5ab0b', + ], }, polygon: { vaults: [ diff --git a/projects/pinnako/index.js b/projects/pinnako/index.js new file mode 100644 index 0000000000..0527345476 --- /dev/null +++ b/projects/pinnako/index.js @@ -0,0 +1,17 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + era: { + tvl: sumTokensExport({ + owner: '0x87A43dfAB5068c9Ae2f75da2906559bc9A71b42d', + tokens: [ + ADDRESSES.era.WETH, + ADDRESSES.era.WBTC, + ADDRESSES.era.USDC, + ADDRESSES.era.USDT, + ] + }), + staking: sumTokensExport({ owner: '0x2A283C805D11ad77161Be0c503805a2b8Bc7Fd84', tokens: ['0xf8C6dA1bbdc31Ea5F968AcE76E931685cA7F9962'] }), + }, +} diff --git a/projects/pirex/index.js b/projects/pirex/index.js index c62f0b000f..47fa8fbbae 100644 --- a/projects/pirex/index.js +++ b/projects/pirex/index.js @@ -1,23 +1,31 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); -const CVX = "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b"; const PirexCVX = "0x35A398425d9f1029021A92bc3d2557D42C8588D7"; -const CVXLocker = "0x72a19342e8F1838460eBFCCEf09F6585e32db86E"; const pxGMX = "0x9a592b4539e22eeb8b2a3df679d572c7712ef999"; const pxGLP = "0x0eac365e4d7de0e293078bd771ba7d0ba9a4c892" -const GMX = "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a"; +const GMX = ADDRESSES.arbitrum.GMX; const GLP = "0x4277f8F2c384827B5273592FF7CeBd9f2C1ac258"; +const BTRFLY = "0xc55126051B22eBb829D00368f4B12Bde432de5Da"; +const pxBTRFLY = "0x10978Db3885bA79Bf1Bc823E108085FB88e6F02f"; async function ethereum(ts, block, _, { api }) { const balances = {}; + const chain = "ethereum"; + const { locked: lockedCVX } = await api.call({ abi: abi.balances, - target: CVXLocker, + target: ADDRESSES.ethereum.vlCVX, params: [PirexCVX], }); + const { output: pxBTRFLYSupply } = await sdk.api.erc20.totalSupply({ + target: pxBTRFLY, + chain + }); - sdk.util.sumSingleBalance(balances, CVX, lockedCVX); + sdk.util.sumSingleBalance(balances, ADDRESSES.ethereum.CVX, lockedCVX); + sdk.util.sumSingleBalance(balances, BTRFLY, pxBTRFLYSupply, chain); return balances; } diff --git a/projects/pizza/index.js b/projects/pizza/index.js index 776afc57e8..8d1fd73bef 100644 --- a/projects/pizza/index.js +++ b/projects/pizza/index.js @@ -14,7 +14,9 @@ async function fetch() { module.exports = { methodology: `${lendingMarket}. Pizza TVL is achieved by making a call to its Pizza API V2.`, eos: { - fetch: eos + tvl: () => 0, }, - fetch + hallmarks: [ + [Math.floor(new Date('2023-02-16')/1e3), 'Product is winding down'], + ], } diff --git a/projects/planet-finance/index.js b/projects/planet-finance/index.js index be6ef93676..4b6b0b3814 100644 --- a/projects/planet-finance/index.js +++ b/projects/planet-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -6,14 +7,14 @@ const { getPoolInfo } = require("../helper/masterchef.js"); const { transformBscAddress } = require("../helper/portedTokens"); const replacements = { - "0xa8Bb71facdd46445644C277F9499Dd22f6F0A30C": - "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", //beltBNB -> wbnb - "0x9cb73F20164e399958261c289Eb5F9846f4D1404": - "0x55d398326f99059ff775485246999027b3197955", // 4belt -> usdt - "0x51bd63F240fB13870550423D208452cA87c44444": - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", //beltBTC-> - "0xAA20E8Cb61299df2357561C2AC2e1172bC68bc25": - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", //beltETH-> + [ADDRESSES.bsc.beltBNB]: + ADDRESSES.bsc.WBNB, //beltBNB -> wbnb + [ADDRESSES.bsc.Belt4]: + ADDRESSES.bsc.USDT, // 4belt -> usdt + [ADDRESSES.bsc.beltBTC]: + ADDRESSES.bsc.BTCB, //beltBTC-> + [ADDRESSES.bsc.beltETH]: + ADDRESSES.bsc.ETH, //beltETH-> }; // liquidity pools diff --git a/projects/planet-green/index.js b/projects/planet-green/index.js index 550a683517..ecc94e63a8 100644 --- a/projects/planet-green/index.js +++ b/projects/planet-green/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { compoundExports } = require("../helper/compound"); const { staking } = require("../helper/staking.js"); @@ -9,14 +10,14 @@ const compoundTVL1 = compoundExports( '0xF54f9e7070A1584532572A6F640F09c606bb9A83', 'bsc', '0x24664791B015659fcb71aB2c9C0d56996462082F', - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' + ADDRESSES.bsc.WBNB ) const compoundTVL2 = compoundExports( '0x1e0C9D09F9995B95Ec4175aaA18b49f49f6165A3', 'bsc', '0x190354707Ad8221bE30bF5f097fa51C9b1EbdB29', - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' + ADDRESSES.bsc.WBNB ) // node test.js projects/green-planet/index.js diff --git a/projects/platypus-finance/index.js b/projects/platypus-finance/index.js index a653008c7b..62638cab70 100644 --- a/projects/platypus-finance/index.js +++ b/projects/platypus-finance/index.js @@ -19,26 +19,18 @@ const pools = [ "0xb3393f4e609c504da770ebc968540784cc4e016c", ]; -async function getToa(pool, api) { - const tokens = await api.call({ - abi: "function getTokenAddresses() view returns (address[])", - target: pool, - }); - const owners = await api.multiCall({ - abi: "function assetOf(address) view returns (address)", - calls: tokens, - target: pool, - }); - return tokens.map((val, i) => [val, owners[i]]); -} +const blacklistedTokens = [] async function tvl(timestamp, ethereumBlock, chainBlocks, { api }) { - const toa = (await Promise.all(pools.map((i) => getToa(i, api)))).flat(); - toa.push([ - "0xb599c3590f42f8f995ecfa0f85d2980b76862fc1", - "0xc7388d98fa86b6639d71a0a6d410d5cdfc63a1d0", - ]); - return sumTokens2({ api, tokensAndOwners: toa }); + if (timestamp > +new Date("2023-02-17") / 1e3) blacklistedTokens.push("0xdaCDe03d7Ab4D81fEDdc3a20fAA89aBAc9072CE2") // USP was hacked + const tokensArray = await api.multiCall({ abi: "function getTokenAddresses() view returns (address[])", calls: pools}) + const tokens = tokensArray.flat() + const calls = tokensArray.map((t, i)=> t.map((token) => ({ target: pools[i], params: token }))).flat() + + const owners = await api.multiCall({ abi:"function assetOf(address) view returns (address)", calls}) + tokens.push('0xb599c3590f42f8f995ecfa0f85d2980b76862fc1') + owners.push('0xc7388d98fa86b6639d71a0a6d410d5cdfc63a1d0') + return sumTokens2({ api, tokensAndOwners2: [tokens, owners], blacklistedTokens }); } module.exports = { @@ -47,7 +39,9 @@ module.exports = { staking: staking( "0x5857019c749147eee22b1fe63500f237f3c1b692", "0x22d4002028f537599be9f666d1c4fa138522f9c8", - "avax" ), }, + hallmarks: [ + [Math.floor(new Date('2023-02-17') / 1e3), 'Protocol was hacked for $8.5m'], + ], }; diff --git a/projects/plutusDAO/index.js b/projects/plutusDAO/index.js index 33d1ea8519..05c2097e74 100644 --- a/projects/plutusDAO/index.js +++ b/projects/plutusDAO/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking, } = require("../helper/staking"); const { sumUnknownTokens } = require('../helper/unknownTokens'); @@ -13,7 +14,7 @@ const plsJones = "0xe7f6C3c1F0018E4C08aCC52965e5cbfF99e34A44"; const plsJonesFarm = "0x23B87748b615096d1A0F48870daee203A720723D"; const plsSpa = "0x0D111e482146fE9aC9cA3A65D92E65610BBC1Ba6"; const plsSpaFarm = "0x73e7c78E8a85C074733920f185d1c78163b555C8"; -const plvGlpToken = "0x5326E71Ff593Ecc2CF7AcaE5Fe57582D6e74CFF1"; +const plvGlpToken = ADDRESSES.arbitrum.plvGLP; const plgGlpPlutusChef = "0x4E5Cf54FdE5E1237e80E87fcbA555d829e1307CE"; const dpxPlsDpxMasterChef = "0xA61f0d1d831BA4Be2ae253c13ff906d9463299c2"; diff --git a/projects/pods-yield/constants.js b/projects/pods-yield/constants.js index 529cdd4035..02d52087cf 100644 --- a/projects/pods-yield/constants.js +++ b/projects/pods-yield/constants.js @@ -1,12 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { - ADDRESS_ZERO: '0x0000000000000000000000000000000000000000', + ADDRESS_ZERO: ADDRESSES.null, EXPIRATION_START_FROM: 1605000000, NETWORK_MAINNET: { id: 1, name: 'ethereum', vaults: [ '0xbab1e772d70300422312dff12daddcb60864bd41', - '0x463F9ED5e11764Eb9029762011a03643603aD879' + '0x463F9ED5e11764Eb9029762011a03643603aD879', + '0x5FE4B38520e856921978715C8579D2D7a4d2274F', + '0x287f941aB4B5AaDaD2F13F9363fcEC8Ee312a969' ] }, ABI_SHORT: { diff --git a/projects/podsfinance/constants.js b/projects/podsfinance/constants.js index 4987fb49bb..f9a95a1821 100644 --- a/projects/podsfinance/constants.js +++ b/projects/podsfinance/constants.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { - ADDRESS_ZERO: '0x0000000000000000000000000000000000000000', + ADDRESS_ZERO: ADDRESSES.null, OPTION_TYPE_PUT: 0, OPTION_TYPE_CALL: 1, EXPIRATION_START_FROM: 1605000000, diff --git a/projects/polkaex/index.js b/projects/polkaex/index.js index be1e58750f..efa127ba80 100644 --- a/projects/polkaex/index.js +++ b/projects/polkaex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const { stakings } = require("../helper/staking"); const { getFixBalances } = require('../helper/portedTokens'); @@ -11,42 +12,42 @@ const FACTORIES = { const NATIVE_TOKENS = { WASTAR: "0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720", - WSDN: "0x0f933Dc137D21cA519ae4C7E93f87a4C8EF365Ef", - WBNB: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - WETH: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + WSDN: ADDRESSES.shiden.WSDN, + WBNB: ADDRESSES.bsc.WBNB, + WETH: ADDRESSES.ethereum.WETH } const TOKENS = { astar: { - USDC: "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98", - USDT: "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283", - DOT: "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF", + USDC: ADDRESSES.moonbeam.USDC, + USDT: ADDRESSES.astar.USDT, + DOT: ADDRESSES.astar.DOT, WASTAR: NATIVE_TOKENS.WASTAR, }, shiden: { - // KAC: "0xb12c13e66ade1f72f71834f2fc5082db8c091358", - STND: "0x722377A047e89CA735f09Eb7CccAb780943c4CB4", - USDC: "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f", - USDT: "0x818ec0A7Fe18Ff94269904fCED6AE3DaE6d6dC0b", - JPYC: "0x735aBE48e8782948a37C7765ECb76b98CdE97B0F", - BNB: "0x332730a4f6e03d9c55829435f10360e13cfa41ff", - BUSD: "0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a", - ETH: "0x765277EebeCA2e31912C9946eAe1021199B39C61", + // KAC: ADDRESSES.harmony.AVAX, + STND: ADDRESSES.shiden.STND, + USDC: ADDRESSES.telos.ETH, + USDT: ADDRESSES.telos.USDC, + JPYC: ADDRESSES.shiden.JPYC, + BNB: ADDRESSES.dogechain.BUSD, + BUSD: ADDRESSES.shiden.BUSD, + ETH: ADDRESSES.shiden.ETH, WSDN: NATIVE_TOKENS.WSDN }, bsc: { - BUSD: "0xe9e7cea3dedca5984780bafc599bd69add087d56", + BUSD: ADDRESSES.bsc.BUSD, WBNB: NATIVE_TOKENS.WBNB }, ethereum: { - USDC: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + USDC: ADDRESSES.ethereum.USDC, WETH: NATIVE_TOKENS.WETH } } const PKEX = { astar: "0x1fE622E91e54D6AD00B01917351Ea6081426764A", - shiden: "0xDC42728B0eA910349ed3c6e1c9Dc06b5FB591f98", + shiden: ADDRESSES.dogechain.MATIC, ethereum: "0xe6f143a0e0a8f24f6294ce3432ea10fad0206920", bsc: "0x68edF56289134b41C6583c0e8fc29fbD7828aCa4", polygon: "0xd13eB71515DC48a8a367D12F844e5737bab415dF" diff --git a/projects/pollyfinance/index.js b/projects/pollyfinance/index.js index f8332ff107..a3fb8befb4 100644 --- a/projects/pollyfinance/index.js +++ b/projects/pollyfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {sumTokens2} = require("../helper/unwrapLPs"); const polly = "0x4C392822D4bE8494B798cEA17B43d48B2308109C"; @@ -44,7 +45,7 @@ const nDefiUnderLying = [ "0xda537104d6a5edd53c6fbba9a898708e465260b6", "0x95c300e7740D2A88a44124B424bFC1cB2F9c3b89", "0xc81278a52AD0e1485B7C3cDF79079220Ddd68b7D", - "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", + ADDRESSES.polygon.WMATIC_2, "0x3066818837c5e6ed6601bd5a91b0762877a6b731", "0xb33eaad8d922b1083446dc23f610c2567fb5180f", "0x3AE490db48d74B1bC626400135d4616377D0109f" diff --git a/projects/polygon/index.js b/projects/polygon/index.js index 71302f546e..d8c647dba2 100644 --- a/projects/polygon/index.js +++ b/projects/polygon/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') async function tvl(_, block) { - const etherAddress = '0x0000000000000000000000000000000000000000' + const etherAddress = ADDRESSES.null const posEtherPredicate = '0x8484Ef722627bf18ca5Ae6BcF031c23E6e922B30' const posERC20Predicate = '0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf' const plasmaDepositManager = '0x401F6c983eA34274ec46f84D70b31C151321188b' - const maticToken = '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0' + const maticToken = ADDRESSES.ethereum.MATIC const stakeManager = '0x5e3Ef299fDDf15eAa0432E6e66473ace8c13D908' const toa = [ @@ -15,13 +16,13 @@ async function tvl(_, block) { ] const erc20Tokens = [ - '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0', - '0x6b175474e89094c44da98b954eedeac495271d0f', + ADDRESSES.ethereum.MATIC, + ADDRESSES.ethereum.DAI, '0x3F382DbD960E3a9bbCeaE22651E88158d2791550', - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', - '0x514910771af9ca656af840dff83e8264ecf986ca', + ADDRESSES.ethereum.AAVE, + ADDRESSES.ethereum.LINK, '0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d', - '0xD533a949740bb3306d119CC777fa900bA034cd52', + ADDRESSES.ethereum.CRV, '0x0f5d2fb29fb7d3cfee444a200298f468908cc942', '0xba100000625a3754423978a60c9317c58a424e3d', '0x4b520c812e8430659fc9f12f6d0c39026c83588d', @@ -31,10 +32,10 @@ async function tvl(_, block) { '0x56d811088235F11C8920698a204A5010a788f4b3', '0xcfcecfe2bd2fed07a9145222e8a7ad9cf1ccd22a', // '0x17ac188e09a7890a1844e5e65471fe8b0ccfadf3', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + ADDRESSES.ethereum.USDC, '0x3845badAde8e6dFF049820680d1F14bD3903a5d0', - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', - '0xdac17f958d2ee523a2206206994597c13d831ec7', + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.USDT, '0xe0cca86b254005889ac3a81e737f56a14f4a38f5', '0x09617f6fd6cf8a71278ec86e23bbab29c04353a7', '0xd2ba23de8a19316a638dc1e7a9adda1d74233368', @@ -45,7 +46,7 @@ async function tvl(_, block) { '0x16eccfdbb4ee1a85a33f3a9b21175cd7ae753db4', '0x0335a7610d817aeca1bebbefbd392ecc2ed587b8', '0xcc4ae94372da236e9b113132e0c46c68704246b9', - '0x0000000000085d4780B73119b644AE5ecd22b376', + ADDRESSES.ethereum.TUSD, '0xff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa', '0x0a6e18fb2842855c3af925310b0f50a4bfa17909', '0x8ffe40a3d0f80c0ce6b203d5cdc1a6a86d9acaea', @@ -54,7 +55,7 @@ async function tvl(_, block) { '0xe912b8bA2513D7e29b7b2E5B14398dbf77503Fb4', '0xba8a621b4a54e61c442f5ec623687e2a942225ef', '0x249e38ea4102d0cf8264d3701f1a0e39c4f2dc3b', - '0x853d955acef822db058eb8505911ed77f175b99e', + ADDRESSES.ethereum.FRAX, '0xd0cd466b34a24fcb2f87676278af2005ca8a78c4', '0x3a4f40631a4f906c2BaD353Ed06De7A5D3fCb430', '0xba100000625a3754423978a60c9317c58a424e3d', @@ -62,11 +63,11 @@ async function tvl(_, block) { '0x8b3870df408ff4d7c3a26df852d41034eda11d81', '0xb705268213d593b8fd88d3fdeff93aff5cbdcfae', '0xdb25f211ab05b1c97d595516f45794528a807ad8', - '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', + ADDRESSES.ethereum.UNI, '0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202', '0x3593d125a4f7849a1b059e64f4517a86dd60c95d', '0x6f40d4a6237c257fff2db00fa0510deeecd303eb', - '0x5a98fcbea516cf06857215779fd812ca3bef1b32', + ADDRESSES.ethereum.LIDO, '0xb4d930279552397bba2ee473229f89ec245bc365', '0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f', '0x544c42fbb96b39b21df61cf322b5edc285ee7429', diff --git a/projects/polymarket.js b/projects/polymarket.js index ce6283c831..55d4f557f6 100644 --- a/projects/polymarket.js +++ b/projects/polymarket.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { request, } = require("graphql-request"); const { BigNumber } = require("bignumber.js"); @@ -75,7 +76,7 @@ async function getMarketsLiquidity_graphql(timestamp, block, chainBlocks) { // const polymarket_api_url = 'https://strapi-matic.poly.market/markets?_limit=-1&_sort=closed_time:desc' // &active=true const conditionalTokensContract = '0x4D97DCd97eC945f40cF65F87097ACe5EA0476045' -const polygonUsdcContract = '0x2791bca1f2de4661ed88a30c99a7a9449aa84174' +const polygonUsdcContract = ADDRESSES.polygon.USDC async function polygon(timestamp, block, chainBlocks) { // Get markets liquidity using API diff --git a/projects/polynomial-earn/index.js b/projects/polynomial-earn/index.js index 0e34b7c214..45e2e9b983 100644 --- a/projects/polynomial-earn/index.js +++ b/projects/polynomial-earn/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const BigNumber = require('bignumber.js') const abi = require('./abi.json') @@ -14,13 +15,12 @@ const polynomial_contracts = [ '0x23CB080dd0ECCdacbEB0BEb2a769215280B5087D' ] -const MAINNET_SUSD = '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51' const MAINNET_SETH = '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb' //Optimism Synths to Mainnet Synths const L2toL1Synths = { - '0xe405de8f52ba7559f9df3c368500b6e6ae6cee49': MAINNET_SETH, - '0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9': MAINNET_SUSD, + [ADDRESSES.optimism.sETH]: MAINNET_SETH, + [ADDRESSES.optimism.sUSD]: ADDRESSES.ethereum.sUSD, '0x298b9b95708152ff6968aafd889c6586e9169f1d': '0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6', '0xc5db22719a06418028a40a9b5e9a7c02959d0d08': '0xbbc455cb4f1b9e4bfc4b73970d360c8f032efee6' } @@ -29,15 +29,15 @@ const contractL1Synths = { // sEth Call Selling '0x53268e841E30278EF0B9597813893fA8e4559510': MAINNET_SETH, // sETH Put Selling - '0xa11451ACD2Fbdf4Ae798F44c4227cAB9517739d7': MAINNET_SUSD, + '0xa11451ACD2Fbdf4Ae798F44c4227cAB9517739d7': ADDRESSES.ethereum.sUSD, // ETH PUT SELLING - '0xb28Df1b71a5b3a638eCeDf484E0545465a45d2Ec': MAINNET_SUSD, + '0xb28Df1b71a5b3a638eCeDf484E0545465a45d2Ec': ADDRESSES.ethereum.sUSD, // ETH CALL SELLING '0x2D46292cbB3C601c6e2c74C32df3A4FCe99b59C7': MAINNET_SETH, // GAMMA - '0x965e460bF5cb38BadA79fB2293c6304C799D0b1c': MAINNET_SUSD, + '0x965e460bF5cb38BadA79fB2293c6304C799D0b1c': ADDRESSES.ethereum.sUSD, //ETH CALL SELLING QUOTE - '0xB7b4270cFD938F4F1C111ac819e7365E8Ce0300a': MAINNET_SUSD + '0xB7b4270cFD938F4F1C111ac819e7365E8Ce0300a': ADDRESSES.ethereum.sUSD } diff --git a/projects/polynomial-trade/index.js b/projects/polynomial-trade/index.js index 2255cdf1fc..0589a8400e 100644 --- a/projects/polynomial-trade/index.js +++ b/projects/polynomial-trade/index.js @@ -1,5 +1,5 @@ +const ADDRESSES = require('../helper/coreAssets.json') const axios = require('axios') -// const chain = 'optimism' // api const BASE_URL = "https://perps-api-experimental.polynomial.fi/snx-perps/tvl"; @@ -10,7 +10,7 @@ const api = axios.create({ async function tvl (timestamp, ethBlock) { const perpApi = await api.get(); return { - 'ethereum:0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': perpApi.data.tvl * 1e18 + [`ethereum:${ADDRESSES.ethereum.sUSD}`]: perpApi.data.tvl * 1e18 }; } diff --git a/projects/polyo-exchange/index.js b/projects/polyo-exchange/index.js index a47abc4a42..3d98b3c4fc 100644 --- a/projects/polyo-exchange/index.js +++ b/projects/polyo-exchange/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') // polyo Asset Address @@ -7,10 +8,10 @@ const Asset_P01_USDC = "0x17B308e859FD8ccC3D27EC290Fe5220c01188E52"; const Asset_P01_USDT = "0x2d7FA7402569e061A2218dc4e7Ac79281a8C4fB5"; // underlyingToken Address -const BUSD = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const BUSD = ADDRESSES.bsc.BUSD; const DAI = "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3"; -const USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"; -const USDT = "0x55d398326f99059fF775485246999027B3197955"; +const USDC = ADDRESSES.bsc.USDC; +const USDT = ADDRESSES.bsc.USDT; async function tvl(timestamp, ethereumBlock, chainBlocks) { const chain = 'bsc' diff --git a/projects/polyquity/index.js b/projects/polyquity/index.js index 86080f8e9f..e231e6c8a2 100644 --- a/projects/polyquity/index.js +++ b/projects/polyquity/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); -const MATIC_ADDRESS = '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0'; +const MATIC_ADDRESS = ADDRESSES.ethereum.MATIC; const MATIC_TROVE_MANAGER_ADDRESS = "0xA2A065DBCBAE680DF2E6bfB7E5E41F1f1710e63b"; -const USDC_ADDRESS = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; +const USDC_ADDRESS = ADDRESSES.ethereum.USDC; const USDC_TROVE_MANAGER_ADDRESS = "0x09273531f634391dE6be7e63C819F4ccC086F41c"; async function tvl(_, _ethBlock, chainBlocks) { diff --git a/projects/polyroll.js b/projects/polyroll.js index 33b233cb51..3a81dcc7f8 100644 --- a/projects/polyroll.js +++ b/projects/polyroll.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require('./helper/unwrapLPs'); const { transformPolygonAddress } = require('./helper/portedTokens'); const tokens = [ - ['0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270', false], //WMATIC - ['0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', false], //WETH - ['0xc2132d05d31c914a87c6611c10748aeb04b58e8f', false], //USDT + [ADDRESSES.polygon.WMATIC_2, false], //WMATIC + [ADDRESSES.polygon.WETH_1, false], //WETH + [ADDRESSES.polygon.USDT, false], //USDT ['0x831753dd7087cac61ab5644b308642cc1c33dc13', false] //QUICK ]; const fundedContracts = [ diff --git a/projects/polysynth/index.js b/projects/polysynth/index.js index 990f7284eb..5bba442ccb 100644 --- a/projects/polysynth/index.js +++ b/projects/polysynth/index.js @@ -22,7 +22,7 @@ Object.keys(chains).forEach(chain => { tvl: async (_, _b, _cb, { api, }) => { const vaultData = await getVaults(chain) const vaults = vaultData.map(i => i.id) - const beefys = await api.multiCall({ abi: 'address:BEEFY_VAULT', calls: vaults }) + const beefys = await api.multiCall({ abi: 'address:BEEFY_VAULT', calls: vaults, permitFailure: true, }) const tokens = vaultData.map((v, i) => beefys[i] ? beefys[i] : v.underlying_asset) return sumTokens2({ api, tokensAndOwners2: [tokens, vaults] }) } diff --git a/projects/poofcash/index.js b/projects/poofcash/index.js index 55342fd1f2..88105e08e6 100644 --- a/projects/poofcash/index.js +++ b/projects/poofcash/index.js @@ -1,35 +1,36 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const tokens = [ { holder: "0x5b46A20284366F5e79D9B3e5e2FA0F5702b8C72F", // wmcUSD currency: "celo-dollar", - tokenAddress: "0x918146359264C492BD6934071c6Bd31C854EDBc3", // mcUSD + tokenAddress: ADDRESSES.celo.mcUSD, // mcUSD }, { holder: "0xD96A74081440C28E9a3c09a3256D6e0454c52E41", // wmcUSD 2 currency: "celo-dollar", - tokenAddress: "0x918146359264C492BD6934071c6Bd31C854EDBc3", // mcUSD + tokenAddress: ADDRESSES.celo.mcUSD, // mcUSD }, { holder: "0xd3D7831D502Ab85319E1F0A18109aa9aBEBC2603", // wmCELO currency: "celo", - tokenAddress: "0x7D00cd74FF385c955EA3d79e47BF06bD7386387D", // mCELO + tokenAddress: ADDRESSES.celo.mCELO, // mCELO }, { holder: "0x337ddAD7Fcb34E93a54a7B6df7C8Bae00fA91D09", // wmCELO 2 currency: "celo", - tokenAddress: "0x7D00cd74FF385c955EA3d79e47BF06bD7386387D", // mCELO + tokenAddress: ADDRESSES.celo.mCELO, // mCELO }, { holder: "0xb7e4e9329DA677969376cc76e87938563B07Ac6A", // wmcEUR currency: "celo-euro", - tokenAddress: "0xE273Ad7ee11dCfAA87383aD5977EE1504aC07568", // mcEUR + tokenAddress: ADDRESSES.celo.mCEUR, // mcEUR }, { holder: "0xAb32a0b6d427ce11a4cEf7Be174A3F291a2753E6", // wmcEUR 2 currency: "celo-euro", - tokenAddress: "0xE273Ad7ee11dCfAA87383aD5977EE1504aC07568", // mcEUR + tokenAddress: ADDRESSES.celo.mCEUR, // mcEUR }, ]; diff --git a/projects/pooltogether/index.js b/projects/pooltogether/index.js index 7c6ca4537f..1392e6e813 100644 --- a/projects/pooltogether/index.js +++ b/projects/pooltogether/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { request, gql } = require("graphql-request"); const abi = require('./abi.json') @@ -89,11 +90,11 @@ async function eth(timestamp, block) { async function polygon(timestamp, block, chainBlocks) { return getChainBalances([{ id: "0x887E17D791Dcb44BfdDa3023D26F7a04Ca9C7EF4", - underlyingCollateralToken: "0xdac17f958d2ee523a2206206994597c13d831ec7" + underlyingCollateralToken: ADDRESSES.ethereum.USDT }, { id: "0xee06abe9e2af61cabcb13170e01266af2defa946", - underlyingCollateralToken: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + underlyingCollateralToken: ADDRESSES.ethereum.USDC }], 'polygon', chainBlocks.polygon) } @@ -146,6 +147,7 @@ module.exports = { }, hallmarks:[ [1658872800, "OP Rewards Start"], + [1669615200, "OP Rewards Start"], ], methodology: `TVL is the total quantity of tokens locked in PoolTogether pools on Ethereum, Polygon, Avalanche, Optimism, Celo, and BSC` } diff --git a/projects/popcorn/constants.js b/projects/popcorn/constants.js index 44d0a09ec8..d223f8a253 100644 --- a/projects/popcorn/constants.js +++ b/projects/popcorn/constants.js @@ -1,4 +1,5 @@ -const ADDRESSES = { +const ADDRESSES = require('../helper/coreAssets.json') +const ADDRESSES_ = { ethereum: { popLocker: "0xeEE1d31297B042820349B03027aB3b13a9406184", // done @@ -12,8 +13,8 @@ const ADDRESSES = { pop: "0xd0cd466b34a24fcb2f87676278af2005ca8a78c4", - usdc: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - dai: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + usdc: ADDRESSES.ethereum.USDC, + dai: ADDRESSES.ethereum.DAI, // for butter setBasicIssuanceModule: "0xd8EF3cACe8b4907117a45B0b125c68560532F94D", @@ -37,7 +38,10 @@ const ADDRESSES = { crv3EurMetapool: "0xb9446c4Ef5EBE66268dA6700D26f96273DE3d571", crvSUSDMetapool: "0xA5407eAE9Ba41422680e2e00537571bcC53efBfD", crvSUSD: "0xC25a3A3b969415c80451098fa907EC722572917F", - threeX: "0x8b97ADE5843c9BE7a1e8c95F32EC192E31A46cf3" + threeX: "0x8b97ADE5843c9BE7a1e8c95F32EC192E31A46cf3", + + vaultRegistry: '0x007318Dc89B314b47609C684260CfbfbcD412864', + }, arbitrum: { rewardsEscrow: "0x0c0991cb6e1c8456660a49aa200b71de6158b85c", @@ -46,14 +50,16 @@ const ADDRESSES = { }, polygon: { pop: "0xc5b57e9a1e7914fda753a88f24e5703e617ee50c", - usdc: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + usdc: ADDRESSES.polygon.USDC, popLocker: "0xe8af04AD759Ad790Aa5592f587D3cFB3ecC6A9dA", rewardsEscrow: "0xa82cAA79F35f7d6B6f1EC1971878F3474C894565", popUsdcGelatoLp: "0xe8654f2b0a038a01bc273a2a7b7c48a76c0e58c5", arrakisPool: "0x6dE0500211bc3140409B345Fa1a5289cb77Af1e4", - arrakisPoolStaking: "0xd3836EF639A74EA7398d34c66aa171b1564BE4bc" + arrakisPoolStaking: "0xd3836EF639A74EA7398d34c66aa171b1564BE4bc", + + vaultRegistry: '0x2246c4c469735bCE95C120939b0C078EC37A08D0' }, bsc: { rewardsEscrow: "0x0C0991CB6e1c8456660A49aa200B71de6158b85C", @@ -62,5 +68,5 @@ const ADDRESSES = { } module.exports = { - ADDRESSES + ADDRESSES:ADDRESSES_ } \ No newline at end of file diff --git a/projects/popcorn/index.js b/projects/popcorn/index.js index 955e161c05..f058e3b3bf 100644 --- a/projects/popcorn/index.js +++ b/projects/popcorn/index.js @@ -3,14 +3,21 @@ const { staking } = require('./staking') const { ADDRESSES } = require("./constants"); const { addButterV2TVL, addThreeXTVL } = require("./butter") const { addStakingPoolsTVL } = require("./stakingPools") +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); await addThreeXTVL(balances, timestamp, chainBlocks, chain); } + + if (chain && vaultChains.includes(chain)) { + await addVaultToTVL(balances, api, ADDRESSES[chain].vaultRegistry); + } return balances; } } diff --git a/projects/popcorn/vault.js b/projects/popcorn/vault.js new file mode 100644 index 0000000000..ee61dfb0a8 --- /dev/null +++ b/projects/popcorn/vault.js @@ -0,0 +1,17 @@ +const sdk = require('@defillama/sdk'); + +const getVaultsAbi = 'address[]:getRegisteredAddresses'; +const getAssetAbi = 'address:asset'; +const getTotalAssets = 'uint256:totalAssets'; + +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 = { + addVaultToTVL +} \ No newline at end of file diff --git a/projects/popsicle/index.js b/projects/popsicle/index.js index bc4b68440c..90e98b628b 100644 --- a/projects/popsicle/index.js +++ b/projects/popsicle/index.js @@ -1,13 +1,8 @@ -const sdk = require("@defillama/sdk"); +const ADDRESSES = require('../helper/coreAssets.json') const poolInfoAbi = require("../helper/abis/masterchef.json"); -const { sumTokensAndLPsSharedOwners, sumTokens2 } = require('../helper/unwrapLPs'); +const { sumTokens2 } = require('../helper/unwrapLPs'); const { addFundsInMasterChef } = require("../helper/masterchef"); -const { - transformBscAddress, - transformFantomAddress, -} = require("../helper/portedTokens"); -const { fetchURL } = require("../helper/utils"); -const { toUSDTBalances } = require("../helper/balances"); +const { getConfig } = require('../helper/cache') const MasterChefContract = "0xbf513aCe2AbDc69D38eE847EFFDaa1901808c31c"; const ice = "0xf16e81dce15B08F326220742020379B855B87DF9"; @@ -15,77 +10,51 @@ const ice = "0xf16e81dce15B08F326220742020379B855B87DF9"; function pool2(chain) { return async (timestamp, ethBlock, chainBlocks) => { const balances = {}; - await addFundsInMasterChef( - balances, - MasterChefContract, - chainBlocks[chain], - chain, - undefined, - poolInfoAbi.poolInfo, - [ice] - ); + await addFundsInMasterChef(balances, MasterChefContract, chainBlocks[chain], chain, undefined, poolInfoAbi.poolInfo, [ice]); return balances; }; } -async function optimizerV3(time, block) { - const data = await fetchURL( - "https://analytics.back.popsicle.finance/api/v1/FragolaApy" - ); - return toUSDTBalances(data.data.reduce((total, pool) => total + pool.tvl, 0)); +const config = { + ethereum: 'https://analytics.back.popsicle.finance/api/v1/FragolaApy', + polygon: 'https://analytics.back.popsicle.finance/api/v1/polygon/FragolaApy', } -async function fantomTvl(timestamp, block, chainBlocks) { - const transform = await transformFantomAddress(); - const balances = {}; - await sumTokensAndLPsSharedOwners( - balances, - [ - ["0xddc0385169797937066bbd8ef409b5b3c0dfeb52", false], - ], - [ - "0xFDB988aF9ef9D0C430176f972bA82B98b476F3ee", - ], - chainBlocks.fantom, "fantom", transform - ); - - //wMEMO - const memo = ( - await sdk.api.abi.call({ - target: "0x0da67235dd5787d67955420c84ca1cecd4e5bb3b", - params: [ - balances["fantom:0xddc0385169797937066bbd8ef409b5b3c0dfeb52"], - ], - abi: 'function wMEMOToMEMO(uint256 _amount) view returns (uint256)', - block: chainBlocks.avax, - chain: "avax", - }) - ).output; - balances["avax:0xb54f16fb19478766a268f172c9480f8da1a7c9c3"] = memo; - delete balances["fantom:0xddc0385169797937066bbd8ef409b5b3c0dfeb52"]; - - return balances; +async function optimizerV3(time, block, _, {api}) { + const data = await getConfig('popsicle/'+api.chain, config[api.chain]) + const pools = data.map(i => i.fragolaAddress) + const token0s = await api.multiCall({ abi: 'address:token0', calls: pools}) + const token1s = await api.multiCall({ abi: 'address:token1', calls: pools}) + const bals = await api.multiCall({ abi: 'function usersAmounts() returns (uint256,uint256)', calls: pools}) + bals.forEach(([bal0, bal1], i) => { + api.add(token0s[i], bal0) + api.add(token1s[i], bal1) + }) +} +async function fantomTvl(timestamp, block, chainBlocks, {api}) { + return api.sumTokens({ owner: '0xFDB988aF9ef9D0C430176f972bA82B98b476F3ee', tokens: ['0xddc0385169797937066bbd8ef409b5b3c0dfeb52']}) } -async function fantomStaking(timestamp, block, chainBlocks) { +async function fantomStaking(timestamp, block, chainBlocks, { api }) { return sumTokens2({ + api, tokensAndOwners: [ ['0xf16e81dce15b08f326220742020379b855b87df9', '0xaE2e07276A77DAdE3378046eEd92FfDE3995b0D5'], // ICE - ['0x7f620d7d0b3479b1655cefb1b0bc67fb0ef4e443', '0xBC8d95Ab498502242b41fdaD30bDFfC841f436e2'], // nICE + [ADDRESSES.fantom.nICE, '0xBC8d95Ab498502242b41fdaD30bDFfC841f436e2'], // nICE ], - chain: 'fantom', - block: chainBlocks.fantom, }) } // node test.js projects/popsicle/index.js module.exports = { doublecounted: true, - misrepresentedTokens: true, ethereum: { pool2: pool2("ethereum"), tvl: optimizerV3, }, + polygon: { + tvl: optimizerV3, + }, bsc: { pool2: pool2("bsc"), }, diff --git a/projects/portfinance/index.js b/projects/portfinance/index.js index 1cc1422bf9..19362999ea 100644 --- a/projects/portfinance/index.js +++ b/projects/portfinance/index.js @@ -1,18 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/solana') async function tvl() { const tokensAndOwners = [ /// Main Pool - ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], - ["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], - ["So11111111111111111111111111111111111111112", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], + [ADDRESSES.solana.USDC, "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], + [ADDRESSES.solana.USDT, "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], + [ADDRESSES.solana.SOL, "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], - ["9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], + [ADDRESSES.solana.pSOL, "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["2poo1w1DL6yd2WNTCnNTzDqkC6MBXq7axo77P16yrBuf", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], ["9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i", "8x2uay8UgrLiX8AAYyF6AkK9z91nNtN6aLwfqPkf6TAQ"], @@ -25,19 +26,19 @@ async function tvl() { ["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", "GU1nCjN7mcLiSX1dtBw2t9agYCw3ybXfu1me41Q2tGT3"], ["Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS", "GU1nCjN7mcLiSX1dtBw2t9agYCw3ybXfu1me41Q2tGT3"], ["9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "GU1nCjN7mcLiSX1dtBw2t9agYCw3ybXfu1me41Q2tGT3"], - ["So11111111111111111111111111111111111111112", "GU1nCjN7mcLiSX1dtBw2t9agYCw3ybXfu1me41Q2tGT3"], + [ADDRESSES.solana.SOL, "GU1nCjN7mcLiSX1dtBw2t9agYCw3ybXfu1me41Q2tGT3"], /// UXD Innovation Zone ["7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT", "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], - ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], - ["Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], - ["So11111111111111111111111111111111111111112", "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], + [ADDRESSES.solana.USDC, "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], + [ADDRESSES.solana.USDT, "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], + [ADDRESSES.solana.SOL, "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], ["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", "Hy6gCkJyMmWMaoxLyzELRReLzdBdZ1YEjNGjQzF9LDPa"], /// Hedge Innovation Zone ["9iLH8T7zoWhY7sBmj1WK9ENbWdS1nL8n9wAxaeRitTa6", "4bf5HQQZ9qtGGCuxYNnhiTrKpTMTX6HSoLy5a7wUjCEb"], ["9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "4bf5HQQZ9qtGGCuxYNnhiTrKpTMTX6HSoLy5a7wUjCEb"], - ["So11111111111111111111111111111111111111112", "4bf5HQQZ9qtGGCuxYNnhiTrKpTMTX6HSoLy5a7wUjCEb"], + [ADDRESSES.solana.SOL, "4bf5HQQZ9qtGGCuxYNnhiTrKpTMTX6HSoLy5a7wUjCEb"], ["mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", "4bf5HQQZ9qtGGCuxYNnhiTrKpTMTX6HSoLy5a7wUjCEb"], ] diff --git a/projects/prdt/index.js b/projects/prdt/index.js index b9ba880655..2a7560fb5e 100644 --- a/projects/prdt/index.js +++ b/projects/prdt/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); -const USDTpolygon = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"; -const USDTbsc = "0x55d398326f99059fF775485246999027B3197955"; +const USDTpolygon = ADDRESSES.polygon.USDT; +const USDTbsc = ADDRESSES.bsc.USDT; const config = { bsc: { diff --git a/projects/predy-v3/index.js b/projects/predy-v3/index.js new file mode 100644 index 0000000000..336d68c6bf --- /dev/null +++ b/projects/predy-v3/index.js @@ -0,0 +1,33 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') + +const v3Address = '0x4006A8840F8640A7D8F46D2c3155a58c76eCD56e'; + +const WETH_CONTRACT = ADDRESSES.arbitrum.WETH; +const USDC_CONTRACT = ADDRESSES.arbitrum.USDC; + +const abi = { + v3: { + getTokenState: 'function getTokenState() returns (tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth), tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth))' + }, + v320: { + getAsset: 'function getAsset(uint256 _id) external view returns (tuple(uint256 id, address token, address supplyTokenAddress, tuple(uint256 riskRatio, int24 rangeSize, int24 rebalanceThreshold), tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth), tuple(address uniswapPool, int24 tickLower, int24 tickUpper, uint256 totalAmount, uint256 borrowedAmount, uint256 supplyPremiumGrowth, uint256 borrowPremiumGrowth, uint256 fee0Growth, uint256 fee1Growth, tuple(int256 positionAmount, uint256 lastFeeGrowth), tuple(int256 positionAmount, uint256 lastFeeGrowth), int256 rebalanceFeeGrowthUnderlying, int256 rebalanceFeeGrowthStable), bool isMarginZero, tuple(uint256 baseRate, uint256 kinkRate, uint256 slope1, uint256 slope2), tuple(uint256 baseRate, uint256 kinkRate, uint256 slope1, uint256 slope2), uint256 lastUpdateTimestamp, uint256 accumulatedProtocolRevenue))' + } +} + + +async function borrowed(_time, _ethBlock, chainBlocks, { api }) { + // V3 + const v3TokenState = await api.call({ abi: abi.v3.getTokenState, target: v3Address, }) + api.add(WETH_CONTRACT, v3TokenState[0].totalNormalBorrowed) + api.add(USDC_CONTRACT, v3TokenState[1].totalNormalBorrowed) + +} + + +module.exports = { + methodology: "USDC and WETH locked on predy contracts", + arbitrum: { + tvl: sumTokensExport({ owners: [v3Address], tokens: [USDC_CONTRACT, WETH_CONTRACT,] }), + }, +}; diff --git a/projects/predy-v320/index.js b/projects/predy-v320/index.js new file mode 100644 index 0000000000..05a6780d27 --- /dev/null +++ b/projects/predy-v320/index.js @@ -0,0 +1,34 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') + +const v320Address = '0x68a154fB3e8ff6e4DA10ECd54DEF25D9149DDBDE'; + +const WETH_CONTRACT = ADDRESSES.arbitrum.WETH; +const USDC_CONTRACT = ADDRESSES.arbitrum.USDC; + +const abi = { + v3: { + getTokenState: 'function getTokenState() returns (tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth), tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth))' + }, + v320: { + getAsset: 'function getAsset(uint256 _id) external view returns (tuple(uint256 id, address token, address supplyTokenAddress, tuple(uint256 riskRatio, int24 rangeSize, int24 rebalanceThreshold), tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth), tuple(address uniswapPool, int24 tickLower, int24 tickUpper, uint256 totalAmount, uint256 borrowedAmount, uint256 supplyPremiumGrowth, uint256 borrowPremiumGrowth, uint256 fee0Growth, uint256 fee1Growth, tuple(int256 positionAmount, uint256 lastFeeGrowth), tuple(int256 positionAmount, uint256 lastFeeGrowth), int256 rebalanceFeeGrowthUnderlying, int256 rebalanceFeeGrowthStable), bool isMarginZero, tuple(uint256 baseRate, uint256 kinkRate, uint256 slope1, uint256 slope2), tuple(uint256 baseRate, uint256 kinkRate, uint256 slope1, uint256 slope2), uint256 lastUpdateTimestamp, uint256 accumulatedProtocolRevenue))' + } +} + + +async function borrowed(_time, _ethBlock, chainBlocks, { api }) { + // V3.2 + const v320USDCState = await api.call({ abi: abi.v320.getAsset, target: v320Address, params: 1}) + const v320ETHState = await api.call({ abi: abi.v320.getAsset, target: v320Address, params: 2 }) + api.add(WETH_CONTRACT, v320ETHState[4][3]) + api.add(USDC_CONTRACT, v320USDCState[4][3]) +} + + +module.exports = { + methodology: "USDC and WETH locked on predy contracts", + arbitrum: { + tvl: sumTokensExport({ owners: [v320Address], tokens: [USDC_CONTRACT, WETH_CONTRACT,] }), + + }, +}; diff --git a/projects/predy/index.js b/projects/predy/index.js index 1333f9b0d2..101dc8cf78 100644 --- a/projects/predy/index.js +++ b/projects/predy/index.js @@ -1,56 +1,19 @@ -const sdk = require('@defillama/sdk'); +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') -const BigNumber = require("bignumber.js"); const v2Address = '0xc7ec02AEeCdC9087bf848c4C4f790Ed74A93F2AF'; const v202Address = '0xAdBAeE9665C101413EbFF07e20520bdB67C71AB6'; -const v3Address = '0x4006A8840F8640A7D8F46D2c3155a58c76eCD56e'; -const v320Address = '0x68a154fB3e8ff6e4DA10ECd54DEF25D9149DDBDE'; - -const WETH_CONTRACT = "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"; -const USDC_CONTRACT = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"; - -const abi = { - v3: { - getTokenState: 'function getTokenState() returns (tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth), tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth))' - }, - v320: { - getAsset: 'function getAsset(uint256 _id) external view returns (tuple(uint256 id, address token, address supplyTokenAddress, tuple(uint256 riskRatio, int24 rangeSize, int24 rebalanceThreshold), tuple(uint256 totalCompoundDeposited, uint256 totalCompoundBorrowed, uint256 totalNormalDeposited, uint256 totalNormalBorrowed, uint256 assetScaler, uint256 debtScaler, uint256 assetGrowth, uint256 debtGrowth), tuple(address uniswapPool, int24 tickLower, int24 tickUpper, uint256 totalAmount, uint256 borrowedAmount, uint256 supplyPremiumGrowth, uint256 borrowPremiumGrowth, uint256 fee0Growth, uint256 fee1Growth, tuple(int256 positionAmount, uint256 lastFeeGrowth), tuple(int256 positionAmount, uint256 lastFeeGrowth), int256 rebalanceFeeGrowthUnderlying, int256 rebalanceFeeGrowthStable), bool isMarginZero, tuple(uint256 baseRate, uint256 kinkRate, uint256 slope1, uint256 slope2), tuple(uint256 baseRate, uint256 kinkRate, uint256 slope1, uint256 slope2), uint256 lastUpdateTimestamp, uint256 accumulatedProtocolRevenue))' - } -} - - -async function borrowed(_time, _ethBlock, chainBlocks, { api }) { - let balances = {}; - - // V3 - const v3TokenState = await api.call({ abi: abi.v3.getTokenState, target: v3Address, }) - - await sdk.util.sumSingleBalance(balances, WETH_CONTRACT, v3TokenState[0]['totalNormalBorrowed'], api.chain); - await sdk.util.sumSingleBalance(balances, USDC_CONTRACT, v3TokenState[1]['totalNormalBorrowed'], api.chain); - - // V3.2 - const v320USDCState = await api.call({ abi: abi.v320.getAsset, target: v320Address, params: 1}) - const v320ETHState = await api.call({ abi: abi.v320.getAsset, target: v320Address, params: 2 }) - - const v320USDCBorrowed = (new BigNumber(v320USDCState[4][3])).toNumber() - const v320ETHBorrowed = (new BigNumber(v320ETHState[4][3])).toNumber() - - await sdk.util.sumSingleBalance(balances, USDC_CONTRACT, v320USDCBorrowed, api.chain); - await sdk.util.sumSingleBalance(balances, WETH_CONTRACT, v320ETHBorrowed, api.chain); - - return balances; -} +const WETH_CONTRACT = ADDRESSES.arbitrum.WETH; +const USDC_CONTRACT = ADDRESSES.arbitrum.USDC; module.exports = { - methodology: "USDC and WETH locked on predy contracts", - arbitrum: { - tvl: sumTokensExport({ owners: [v202Address, v2Address, v3Address, v320Address], tokens: [USDC_CONTRACT, WETH_CONTRACT,] }), - borrowed - }, - hallmarks: [ - [1671092333, "Launch Predy V3"], - [1678734774, "Launch Predy V3.2"] - ], + methodology: "USDC and WETH locked on predy contracts", + arbitrum: { + tvl: sumTokensExport({ owners: [v202Address, v2Address], tokens: [USDC_CONTRACT, WETH_CONTRACT,] }), + }, + hallmarks: [ + [1671092333, "Launch Predy V3"], + [1678734774, "Launch Predy V3.2"] + ], }; diff --git a/projects/premia/index.js b/projects/premia/index.js index f3798bbcf4..1af30cb2f1 100644 --- a/projects/premia/index.js +++ b/projects/premia/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens } = require("../helper/unwrapLPs"); @@ -12,8 +13,8 @@ const PREMIA_OPTIONS_CONTRACT_ETH = const PREMIA_OPTIONS_CONTRACT_BSC = "0x8172aAC30046F74907a6b77ff7fC867A6aD214e4"; -const erc20DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; -const erc20BUSD = "0xe9e7cea3dedca5984780bafc599bd69add087d56"; +const erc20DAI = ADDRESSES.ethereum.DAI; +const erc20BUSD = ADDRESSES.bsc.BUSD; const calcTvl = async (balances, chain, block, premiaOptionsContract) => { const erc20TokensLength = ( diff --git a/projects/premia/v1.js b/projects/premia/v1.js index 5cb8a87863..d1d49afc5e 100644 --- a/projects/premia/v1.js +++ b/projects/premia/v1.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { request, gql } = require("graphql-request"); const sdk = require('@defillama/sdk') @@ -52,8 +53,8 @@ const graphUrls = { bsc: 'https://api.thegraph.com/subgraphs/name/premiafinance/premia-bsc', }; const denominators = { - ethereum: "0x6b175474e89094c44da98b954eedeac495271d0f", //DAI - bsc: "0xe9e7cea3dedca5984780bafc599bd69add087d56", //BUSD + ethereum: ADDRESSES.ethereum.DAI, //DAI + bsc: ADDRESSES.bsc.BUSD, //BUSD } module.exports = function v1Tvl(chain) { diff --git a/projects/prime-protocol/index.js b/projects/prime-protocol/index.js new file mode 100644 index 0000000000..3c770ad99c --- /dev/null +++ b/projects/prime-protocol/index.js @@ -0,0 +1,238 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const sdk = require('@defillama/sdk'); +const { sumTokens2, } = require('../helper/unwrapLPs') + +const MASTER_VIEW_CONTRACT = { + v1_4_6: { + address: '0x47ecFB57deD0160d66103A6A201C5f30f7CC7d13', + abi: { + calculateAssetTVL: 'function calculateRawAssetTVL(uint256 chainId, address pToken) view returns (uint256)' + } + } +}; + +const MOONBEAM_MARKETS = { + xcDOT_v0_v1_2_0: { + pTokenMarketAddress: '0x156F5c70a157A381610F1DbaAE4f336a2DB70E7E', + pTokenUnderlyingAddress: '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080' + }, + GLMR_v1_v1_4_6: { + pTokenMarketAddress: '0x53d5a47bb874eE688acb479676aD133d47CB9B25', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + whUSDC_v1_v1_4_6: { + pTokenMarketAddress: '0x5f8d500ec32dB09aa3115a852f30e9C756867d5A', + pTokenUnderlyingAddress: '0x931715FEE2d06333043d11F658C8CE934aC61D0c', + }, + xcUSDT_v1_v1_4_6: { + pTokenMarketAddress: '0x1D5CC7840a05BA39Db0AAd21e14dF1ff09b599ED', + pTokenUnderlyingAddress: ADDRESSES.moonbeam.xcUSDT, + }, + xcDOT_v1_v1_4_6: { + pTokenMarketAddress: '0x8f7F208F38A4362e6Fe6112b720630f93bb608aA', + pTokenUnderlyingAddress: '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080', + }, + GLMR_v2_v1_6_0: { + pTokenMarketAddress: '0xdC427cDB81E1532747BEDeB8077a4AEcDbfB585e', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + whUSDC_v2_v1_6_0: { + pTokenMarketAddress: '0x227EEB717a3Ec78025bE51c87b3A7160192613D2', + pTokenUnderlyingAddress: '0x931715FEE2d06333043d11F658C8CE934aC61D0c', + }, + xcUSDT_v2_v1_6_0: { + pTokenMarketAddress: '0x8ef25FAC30DeD9A210151C1d27e58F71f2142e2f', + pTokenUnderlyingAddress: ADDRESSES.moonbeam.xcUSDT, + }, + xcDOT_v2_v1_6_0: { + pTokenMarketAddress: '0x525c6B3D27B6b1Fc28bca7dc04964247c1a942B1', + pTokenUnderlyingAddress: '0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080', + }, + whWBTC_v2_v1_10_2: { + pTokenMarketAddress: '0x2A104E502480b4e3C1D13EA2EC657C08f4578a7a', + pTokenUnderlyingAddress: '0xE57eBd2d67B462E9926e04a8e33f01cD0D64346D', + } +}; + +const AVALANCHE_MARKETS = { + ETH_v1_v1_4_6: { + pTokenMarketAddress: '0x94ebF80b33120a1AbE370E56192db39f4944b6ca', + pTokenUnderlyingAddress: ADDRESSES.avax.WETH_e, + }, + USDC_v1_v1_4_6: { + pTokenMarketAddress: '0x6Cce9601CA44a9049A761C22b70D5849662c2C0a', + pTokenUnderlyingAddress: ADDRESSES.avax.USDC, + }, + USDT_v1_v1_4_6: { + pTokenMarketAddress: '0xe06F55FB6c6C62b74AAD7eb77f00b06920FB176e', + pTokenUnderlyingAddress: ADDRESSES.avax.USDt, + }, + ETH_v2_v1_6_0: { + pTokenMarketAddress: '0x4Ebba16380fEb2083938c008aEDD4b5EBeA80f72', + pTokenUnderlyingAddress: ADDRESSES.avax.WETH_e, + }, + USDC_v2_v1_6_0: { + pTokenMarketAddress: '0x73c5c93E78cB8CA4939307e0D95e032631fB9eEe', + pTokenUnderlyingAddress: ADDRESSES.avax.USDC, + }, + USDT_v2_v1_6_0: { + pTokenMarketAddress: '0x1BF6752282039ee82C06DE64D094C9E35578A1a0', + pTokenUnderlyingAddress: ADDRESSES.avax.USDt, + }, + DAI_v2_v1_10_2: { + pTokenMarketAddress: '0x05f2B8EAc42c9Cc771B8ECF6448481A3802e08c6', + pTokenUnderlyingAddress: '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', + }, + bBTC_v2_v1_10_2: { + pTokenMarketAddress: '0xA5c74A10B60f276F806468c6E2f83D490dCfA89A', + pTokenUnderlyingAddress: '0x152b9d0FdC40C096757F570A51E494bd4b943E50', + }, +}; + +const ARBITRUM_MARKETS = { + ETH_v1_v1_4_6: { + pTokenMarketAddress: '0x2E9F73aA3F16748C9c1E8243D204d60F87dEC872', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + USDC_v1_v1_4_6: { + pTokenMarketAddress: '0x1b0509D8CC044805F54D132ccDa7b4A4ED88261A', + pTokenUnderlyingAddress: ADDRESSES.arbitrum.USDC, + }, + ETH_v2_v1_6_0: { + pTokenMarketAddress: '0xc01683398fFCc86264ba17bC36977f51A1d25e06', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + USDC_v2_v1_6_0: { + pTokenMarketAddress: '0xddC6Df52F9749ED80966Fb6a9D4C87264cC1e6C1', + pTokenUnderlyingAddress: ADDRESSES.arbitrum.USDC, + }, + DAI_v2_v1_10_2: { + pTokenMarketAddress: '0x3e1C8203B8D36E8E427Ee181A65549fd86AE3907', + pTokenUnderlyingAddress: '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', + }, + WBTC_v2_v1_10_2: { + pTokenMarketAddress: '0x51Ff97d92683992AD091E04470069bB942219D71', + pTokenUnderlyingAddress: '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', + }, + nativeUSDC_v1_v1_10_2: { + pTokenMarketAddress: '0xA44C28Bd4Fd4fc307f23B2E6e9cC07BC03571798', + pTokenUnderlyingAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', + }, +}; + +const ETHEREUM_MARKETS = { + ETH_v1_v1_4_6: { + pTokenMarketAddress: '0xD15a15C0b6d79D9E59F4fcC0D17912219f6b470C', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + USDC_v1_v1_4_6: { + pTokenMarketAddress: '0x8F0Ba37DAC51a8102b1203C9D9ac26724DC684Ac', + pTokenUnderlyingAddress: ADDRESSES.ethereum.USDC, + }, + USDT_v1_v1_4_6: { + pTokenMarketAddress: '0x373bb8bE40Ee6f704576CDC815372ff71d6825c5', + pTokenUnderlyingAddress: ADDRESSES.ethereum.USDT, + }, + ETH_v2_v1_6_0: { + pTokenMarketAddress: '0xd833F882ca07F69C4C5a069675B6B65C235325C3', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + USDC_v2_v1_6_0: { + pTokenMarketAddress: '0x67CeC45eB8d9f059D4c974a4BdEA357b68Ad80Ef', + pTokenUnderlyingAddress: ADDRESSES.ethereum.USDC, + }, + USDT_v2_v1_6_0: { + pTokenMarketAddress: '0xDC313B592949E8F4bB91A22c6DC9f7BE11b74Ea7', + pTokenUnderlyingAddress: ADDRESSES.ethereum.USDT, + }, +}; + +const BSC_MARKETS = { + USDC_v2_v1_10_2: { + pTokenMarketAddress: '0xc01683398fFCc86264ba17bC36977f51A1d25e06', + pTokenUnderlyingAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', + }, + USDT_v2_v1_10_2: { + pTokenMarketAddress: '0xddC6Df52F9749ED80966Fb6a9D4C87264cC1e6C1', + pTokenUnderlyingAddress: '0x55d398326f99059fF775485246999027B3197955', + }, + BNB_v2_v1_10_2: { + pTokenMarketAddress: '0xaCD7a2991f3514E215034Ace732Bafe005185C94', + pTokenUnderlyingAddress: ADDRESSES.null, + }, + BTCB_v2_v1_10_2: { + pTokenMarketAddress: '0xA7BCF4433e044e454c43fe596C9eE8DDAF5776aC', + pTokenUnderlyingAddress: '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', + }, + ETH_v2_v1_10_2: { + pTokenMarketAddress: '0xBdDc67911C63f63e6720A8EEfCAF08a573Fd9AE4', + pTokenUnderlyingAddress: '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', + }, +}; + +const POLYGON_POS_MARKETS = { + USDC_v1_v1_10_2: { + pTokenMarketAddress: '0x45913B2088E2910C3Dd168c2f08eaf2274D7bf6c', + pTokenUnderlyingAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', + }, + USDT_v1_v1_10_2: { + pTokenMarketAddress: '0x2ce0Ac2FD666a93b70fbE731C9Fe6581f410F73B', + pTokenUnderlyingAddress: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', + }, + WBTC_v1_v1_10_2: { + pTokenMarketAddress: '0x786D8B5d16171f441BC5F2047bDf0Ea54268a735', + pTokenUnderlyingAddress: '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6', + }, +}; + +const PRIME_MARKETS = { + moonbeam: { + networkMarkets: MOONBEAM_MARKETS + }, + avax: { + networkMarkets: AVALANCHE_MARKETS + }, + arbitrum: { + networkMarkets: ARBITRUM_MARKETS + }, + ethereum: { + networkMarkets: ETHEREUM_MARKETS + }, + bsc: { + networkMarkets: BSC_MARKETS + }, + polygon: { + networkMarkets: POLYGON_POS_MARKETS + }, +}; + +async function borrowed(_, _1, _2, { api }) { + const moonbeamApi = new sdk.ChainApi({ chain: 'moonbeam' }); + + const markets = Object.values(PRIME_MARKETS[api.chain].networkMarkets) + let uDecimals = await api.multiCall({ abi: 'erc20:decimals', calls: markets.map(i => i.pTokenUnderlyingAddress), permitFailure: true, }) + uDecimals = uDecimals.map(i => i ?? 18) + let rawTvls = await moonbeamApi.multiCall({ + abi: MASTER_VIEW_CONTRACT.v1_4_6.abi.calculateAssetTVL, + target: MASTER_VIEW_CONTRACT.v1_4_6.address, + calls: markets.map(i => ({ params: [api.getChainId(), i.pTokenMarketAddress] })), + }) + rawTvls.forEach((v, i) => api.add(markets[i].pTokenUnderlyingAddress, v * (10 ** uDecimals[i] / 1e18))) + const tvlBal = await sumTokens2({ balances: {}, api, tokensAndOwners: markets.map(i => [i.pTokenUnderlyingAddress, i.pTokenMarketAddress]) }) + Object.entries(tvlBal).forEach(([token, bal]) => { + api.add(token, bal * -1, { skipChain: true }) + }) +} + +async function tvl(_, _b, _cb, { api, }) { + return sumTokens2({ api, tokensAndOwners: Object.values(PRIME_MARKETS[api.chain].networkMarkets).map(i => [i.pTokenUnderlyingAddress, i.pTokenMarketAddress]) }) +} + +module.exports = { + timetravel: false, + methodology: 'Adds the deposits of each market to the borrows that were not redeposited into that market.', +}; + +Object.keys(PRIME_MARKETS).forEach(chain => { + module.exports[chain] = { tvl, borrowed, } +}) \ No newline at end of file diff --git a/projects/primitive/v1.js b/projects/primitive/v1.js index 9c7b5514e3..2e2ed8db1e 100644 --- a/projects/primitive/v1.js +++ b/projects/primitive/v1.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const BigNumber = require('bignumber.js') const getCacheBalances = 'function getCacheBalances() view returns (uint256, uint256)' @@ -13,7 +14,7 @@ const { getLogs } = require('../helper/cache/getLogs') const START_BLOCK = 11142900 const REGISTRY = '0x16274044dab9635Df2B5AeAF7CeCb5f381c71680' const FACTORY = '0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac' -const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' +const ZERO_ADDRESS = ADDRESSES.null module.exports = async function tvl(_, block, _1, { api }) { diff --git a/projects/printy/index.js b/projects/printy/index.js index 963704e1e4..2e07502f02 100644 --- a/projects/printy/index.js +++ b/projects/printy/index.js @@ -1,8 +1,8 @@ -const { getUniTVL } = require('../helper/unknownTokens') +const { uniTvlExport } = require("../helper/calculateUniTvl.js"); module.exports = { - misrepresentedTokens: true, avax: { - tvl: getUniTVL({ factory: '0xc62Ca231Cd2b0c530C622269dA02374134511a36', useDefaultCoreAssets: true, }) - } -} \ No newline at end of file + tvl: uniTvlExport("0xc62Ca231Cd2b0c530C622269dA02374134511a36", "avax", undefined, undefined, { hasStablePools: true, useDefaultCoreAssets: false, }), + }, +}; + diff --git a/projects/prism/index.js b/projects/prism/index.js index a1d0dc23c5..3e6fef1b27 100644 --- a/projects/prism/index.js +++ b/projects/prism/index.js @@ -1,30 +1,21 @@ -const { fetchURL } = require('../helper/utils') +const { queryContract } = require('../helper/chain/cosmos') async function tvl() { - const res = await fetchURL( - `https://lcd.terra.dev/wasm/contracts/terra1xw3h7jsmxvh6zse74e4099c6gl03fnmxpep76h/store?query_msg=%7B%22state%22%3A%20%7B%7D%7D` - ) + const res = await queryContract({ chain: 'terra2', contract: 'terra188mmw2vsp0yahen3vh2clup543qrttvdzkxl0h9myfuwjj56nausztpegt', data: { state: {}}}) return { - "terra-luna": res.data.result.total_bond_amount / 1e6, + "terra-luna-2": res.total_bond_amount / 1e6, } } -async function staking() { - const staked = await fetchURL( - `https://lcd.terra.dev/wasm/contracts/terra1042wzrwg2uk6jqxjm34ysqquyr9esdgm5qyswz/store?query_msg=%7B%22token_info%22%3A%20%7B%7D%7D` - ) - - return { - "prism-governance-token": Number(staked.data.result.total_supply) / 1e6 - } -} module.exports = { timetravel: false, terra: { + tvl: () => 0, + }, + terra2: { tvl, - staking, }, hallmarks:[ [1651881600, "UST depeg"], diff --git a/projects/privcash/config.js b/projects/privcash/config.js index b1c7f1d5ce..511b74e700 100644 --- a/projects/privcash/config.js +++ b/projects/privcash/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require('../helper/unwrapLPs') module.exports = { @@ -13,7 +14,7 @@ module.exports = { ], }, { - tokens: ['0xfa9343c3897324496a05fc75abed6bac29f8a40f'], // USDC + tokens: [ADDRESSES.telos.ETH], // USDC holders: [ "0xe4e992802314dbbd8BB9d050afae19ca1c45cB1A", // 10 "0x8DFB4d1925cC8C7446AfA92f1cDd6c8be567Ae7C", // 100 diff --git a/projects/protectorate/index.js b/projects/protectorate/index.js new file mode 100644 index 0000000000..20c9813de6 --- /dev/null +++ b/projects/protectorate/index.js @@ -0,0 +1,7 @@ +const { sumERC4626VaultsExport } = require("../helper/erc4626"); + +module.exports = { + ethereum: { + tvl: sumERC4626VaultsExport({ vaults: ["0xaF53431488E871D103baA0280b6360998F0F9926"], }), + }, +} \ No newline at end of file diff --git a/projects/proteo-farms/index.js b/projects/proteo-farms/index.js index f4aa84cbe0..b1d0f25828 100644 --- a/projects/proteo-farms/index.js +++ b/projects/proteo-farms/index.js @@ -1,37 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/chain/elrond') -const { tokens } = require('../helper/tokenMapping') -const { get } = require('../helper/http') -const sdk = require('@defillama/sdk') - -let prices - -async function getPrices() { - if (!prices) prices = _getPrices() - return prices - - async function _getPrices() { - const getApi = ({ token1, token2 }) => `https://api.multiversx.com/mex/pairs/${token1}/${token2}?fields=price` - const lps = [ - // { lp: 'PROTEOEGLD-baf054', token1: 'PROTEO-0c7311', token2: 'WEGLD-bd4d79', }, - { lp: 'ZPAYWEGLD-34e5c1', token1: 'ZPAY-247875', token2: 'WEGLD-bd4d79', }, - { lp: 'AEROWEGLD-81cc37', token1: 'AERO-458bbf', token2: 'WEGLD-bd4d79', }, - { lp: 'KROUSDC-7787ab', token1: 'USDC-c76f1f', token2: 'KRO-df97ec', }, - ] - - const prices = {} - await Promise.all(lps.map(async i => { - const { price } = await get(getApi(i)) - prices['elrond:' + i.lp] = i.token1.startsWith('USDC') ? 1 / price : price - })) - - return prices - } -} async function tvl() { const tokensAndOwners = [ - [tokens.null, 'erd1qqqqqqqqqqqqqpgqwqxfv48h9ssns5cc69yudvph297veqeeznyqr4l930'], - [tokens.null, 'erd1qqqqqqqqqqqqqpgqyhj3hk6kkw7405j42g20th3g2h5s8076znyqrpe2pr'], + [ADDRESSES.null, 'erd1qqqqqqqqqqqqqpgqwqxfv48h9ssns5cc69yudvph297veqeeznyqr4l930'], + [ADDRESSES.null, 'erd1qqqqqqqqqqqqqpgqyhj3hk6kkw7405j42g20th3g2h5s8076znyqrpe2pr'], ['USDC-c76f1f', 'erd1qqqqqqqqqqqqqpgq3lh80a92d49am3t2pfzheapdxtykzt5kznyqsjhfrx'], ['USDC-c76f1f', 'erd1qqqqqqqqqqqqqpgq25l7fgjdecaanxuuzxnquzs7k80q6mqaznyqzjclf5'], ['ZPAYWEGLD-34e5c1', 'erd1qqqqqqqqqqqqqpgqrpa6ezy0q4xuj6y9plgv85va43x7wy3dznyqr2rwcz'], @@ -41,18 +14,7 @@ async function tvl() { ['AEROWEGLD-81cc37', 'erd1qqqqqqqqqqqqqpgqapmdgehzl22pu6m5pkvy2fhzm49uxkxhznyqhwhcx5'], ['AEROWEGLD-81cc37', 'erd1qqqqqqqqqqqqqpgqnedra5da464rkcektgzyv0qxcgqgyh26znyq8q4phx'], ] - return computeTvl(tokensAndOwners) -} - -async function computeTvl(tokensAndOwners) { - const balances = await sumTokens({ chain: 'elrond', tokensAndOwners, }) - const prices = await getPrices() - Object.entries(prices).forEach(([token, price]) => { - if (!balances[token]) return; - sdk.util.sumSingleBalance(balances, 'tether', balances[token] * price) - delete balances[token] - }) - return balances + return sumTokens({tokensAndOwners}) } async function pool2() { @@ -61,11 +23,10 @@ async function pool2() { ['PROTEOEGLD-baf054', 'erd1qqqqqqqqqqqqqpgq6hzck3wac3ljmth7dkzk2wcw3c9lvcauznyq268sn6'], ] - return computeTvl(tokensAndOwners) + return sumTokens({tokensAndOwners}) } module.exports = { - misrepresentedTokens: true, timetravel: false, elrond: { tvl, diff --git a/projects/protoss-dex/abi.js b/projects/protoss-dex/abi.js new file mode 100644 index 0000000000..07114bcb6b --- /dev/null +++ b/projects/protoss-dex/abi.js @@ -0,0 +1,87 @@ +const fabis = [{ + "name": "allPairs", + "type": "function", + "inputs": [ + { + "name": "index", + "type": "felt" + } + ], + "outputs": [ + { + "name": "pair", + "type": "felt" + } + ], + "stateMutability": "view" +}, +{ + "name": "allPairsLength", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "length", + "type": "felt" + } + ], + "stateMutability": "view" +} +] + +const pabis = [ + { + "name": "token0", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "token0", + "type": "felt" + } + ], + "stateMutability": "view" + }, + { + "name": "token1", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "token1", + "type": "felt" + } + ], + "stateMutability": "view" + }, + { + "name": "getReserves", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "reserve0", + "type": "felt" + }, + { + "name": "reserve1", + "type": "felt" + }, + { + "name": "blockTimestampLast", + "type": "felt" + } + ], + "stateMutability": "view" + }, +] + + +const factory = {} +const pair = {} +fabis.forEach(i => factory[i.name] = i) +pabis.forEach(i => pair[i.name] = i) + +module.exports = { + factory, pair, fabis, pabis, +} \ No newline at end of file diff --git a/projects/protoss-dex/api.js b/projects/protoss-dex/api.js new file mode 100644 index 0000000000..bcfbb20001 --- /dev/null +++ b/projects/protoss-dex/api.js @@ -0,0 +1,38 @@ + +const { call, multiCall, parseAddress } = require('../helper/chain/starknet') +const abi = require('./abi') +const { transformDexBalances } = require('../helper/portedTokens') +const { getParamCalls } = require('../helper/utils') + +async function tvl() { + const factory = '0x04bd9ec70e3ee64fe0adefe0ae4eff797fe07b6fe19d72438db0b6d336ee77c8' + let pairLength = await call({ target: factory, abi: abi.factory.allPairsLength}) + let pairs = await multiCall({ abi: abi.factory.allPairs, target: factory, calls: getParamCalls(+pairLength)}) + + const calls = pairs.map(i => parseAddress(i)) + + const [ token0s, token1s, reserves ] = await Promise.all([ + multiCall({ abi: abi.pair.token0, calls }), + multiCall({ abi: abi.pair.token1, calls }), + multiCall({ abi: abi.pair.getReserves, calls }), + ]) + + const data = [] + reserves.forEach((reserve, i) => { + data.push({ + token0: parseAddress(token0s[i]), + token1: parseAddress(token1s[i]), + token0Bal: +reserve.reserve0, + token1Bal: +reserve.reserve1, + }) + }) + + return transformDexBalances({chain:'starknet', data}) +} + +module.exports = { + timetravel: false, + starknet: { + tvl, + } +} diff --git a/projects/protoss-dex/index.js b/projects/protoss-dex/index.js new file mode 100644 index 0000000000..674e8c995c --- /dev/null +++ b/projects/protoss-dex/index.js @@ -0,0 +1 @@ +module.exports = require('./api') \ No newline at end of file diff --git a/projects/prxy/index.js b/projects/prxy/index.js index 9906220f04..2fa417bf2b 100644 --- a/projects/prxy/index.js +++ b/projects/prxy/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = "uint256:getTVLInUsd"; const axios = require("axios"); -const usdc = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const usdc = ADDRESSES.ethereum.USDC; const prxy = "0xab3d689c22a2bb821f50a4ff0f21a7980dcb8591"; const prxyTransformed = `polygon:${prxy}`; -const wbtc = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; +const wbtc = ADDRESSES.ethereum.WBTC; const btcpx = "0x9C32185b81766a051E08dE671207b34466DD1021"; const farmProxy = "0x256116a8Ea8bAd13897462117d88082C464B68e1"; @@ -79,7 +80,7 @@ async function farmPrxyStaking(timestamp, ethBlock, chainBlocks){ chain: "polygon" })).output; -return {'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': farmStaking} +return {[ADDRESSES.ethereum.USDC]: farmStaking} } diff --git a/projects/pulsarswap/index.js b/projects/pulsarswap/index.js index cee0ea4ba7..eca81a5832 100644 --- a/projects/pulsarswap/index.js +++ b/projects/pulsarswap/index.js @@ -2,6 +2,7 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const config = { arbitrum: '0x336a2f76d2be24e7cb6f468665a4277d4d617d00', ethereum: '0x408f66057163d829a30d4d466092c6b0eebb692f', + mantle: '0xB5B03706C24c79D3F7a368b30562a1711d74F688', } module.exports = {}; diff --git a/projects/pulsedao/index.js b/projects/pulsedao/index.js index 9b0fdbc954..f05a113ee0 100644 --- a/projects/pulsedao/index.js +++ b/projects/pulsedao/index.js @@ -10,6 +10,9 @@ const lps = [ ] module.exports = { + hallmarks: [ + [1647216000, "Rug Pull"] + ], deadFrom: 1648765747, misrepresentedTokens: true, ...tombTvl(pld, pshare, rewardPool, boardroom, lps, "fantom", undefined, false, lps[1]) diff --git a/projects/pulsemaxfinance/index.js b/projects/pulsemaxfinance/index.js new file mode 100644 index 0000000000..40b9adf532 --- /dev/null +++ b/projects/pulsemaxfinance/index.js @@ -0,0 +1,17 @@ +const { tombTvl } = require("../helper/tomb"); + +const max = "0x368acF537B1A8EfFE4ceEF11054CBcEAF0302086"; +const pshare = "0xbc57572Ba711C8077222142C3374acE7B0c92231"; +const rewardpool = "0xEb8A0191Fa31F7aCEDeDe618246f7f7f907139bA"; +const boardroom = "0x4c5c8fD88Ba0709949e3C5Be3502500112Cd026c"; + +const pool2LPs = [ + "0x32D1D76bA3df143C7258d933dAfB048f137c42BA", // PSHARE-DAI + "0x0edC492E29Ce7bEd4c71f83513E435f5d81cDEF9", // MAX-DAI + "0x99B45b6f0Dd06866C955207c96431cDA2DA1d34b" // MAX-PSHARE +] + +module.exports = { + misrepresentedTokens: true, + ...tombTvl(max, pshare, rewardpool, boardroom, pool2LPs, "pulse", undefined, false, pool2LPs[0]) +} diff --git a/projects/pulserate/index.js b/projects/pulserate/index.js new file mode 100644 index 0000000000..feca6b1e78 --- /dev/null +++ b/projects/pulserate/index.js @@ -0,0 +1,22 @@ +const { getUniTVL, sumTokensExport } = require("../helper/unknownTokens"); +const PSHARE = "0x11D4109Cd7E5cE596471583E90e20e51d087de33"; +module.exports = { + misrepresentedTokens: true, + methodology: + "Factory address (0xE2332E5297b18a21DcE0E6ac461e821C353A00cA) is used to find the LP pairs. TVL is equal to the liquidity on the AMM. Staking balance is equal to the balance of PSHARE in Boardroom contract", + pulse: { + tvl: getUniTVL({ + factory: "0xE2332E5297b18a21DcE0E6ac461e821C353A00cA", + useDefaultCoreAssets: true, + fetchBalances: true, + }), + staking: sumTokensExport({ + owners: ["0xD7A2F5A72079654E7997C615cC07A1b92D850b32"], + tokens: [PSHARE], + lps: [ + '0x91d3E933B7f2ccBAdf4d5278d826Cb10659a1c55', + ], + useDefaultCoreAssets: true, + }), + }, +}; diff --git a/projects/pulsex-v2/index.js b/projects/pulsex-v2/index.js new file mode 100644 index 0000000000..9cec9bf684 --- /dev/null +++ b/projects/pulsex-v2/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + pulse: { + tvl: getUniTVL({ factory: '0x29ea7545def87022badc76323f373ea1e707c523', useDefaultCoreAssets: true }), + }, +}; // node test.js projects/pulsex/index.js \ No newline at end of file diff --git a/projects/pulsex/index.js b/projects/pulsex/index.js new file mode 100644 index 0000000000..c2a330054c --- /dev/null +++ b/projects/pulsex/index.js @@ -0,0 +1,10 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + methodology: + "Factory address (0x1715a3E4A142d8b698131108995174F37aEBA10D) is used to find the LP pairs. TVL is equal to the liquidity on the AMM.", + pulse: { + tvl: getUniTVL({ factory: '0x1715a3E4A142d8b698131108995174F37aEBA10D', useDefaultCoreAssets: true }), + }, +}; // node test.js projects/pulsex/index.js \ No newline at end of file diff --git a/projects/pumpkin-dao/index.js b/projects/pumpkin-dao/index.js index c8b78974be..92327e523d 100644 --- a/projects/pumpkin-dao/index.js +++ b/projects/pumpkin-dao/index.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0x0DEA39519cb8c7c549e321d3020E96f91Ed36Ed3"; module.exports = ohmTvl(treasuryAddress, [ //DAI - ["0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", false], + [ADDRESSES.fantom.DAI, false], //wFTM - ["0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", false], + [ADDRESSES.fantom.WFTM, false], //SPOOKY LP ["0xdf42866dc8fa6a962124b5d9eb8c91fa447f4feb", true] , //SPOOKY LP ["0x01e7f6506bc3661dc690a0a076ace9d3d0253d92", true] ], "fantom", "0x5d189D8224a9aFBc3eC69bedBe2f6dd89B937E73", "0x8eDDA0107D661E82df660DBa01Ff1D40FA17B70c" , addr=> - addr.toLowerCase()==="0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e"?"0x6b175474e89094c44da98b954eedeac495271d0f":`fantom:${addr}` + addr.toLowerCase()===ADDRESSES.fantom.DAI?[ADDRESSES.ethereum.DAI]:`fantom:${addr}` , undefined, false) \ No newline at end of file diff --git a/projects/purple-bridge-dex/index.js b/projects/purple-bridge-dex/index.js new file mode 100644 index 0000000000..aa1627babb --- /dev/null +++ b/projects/purple-bridge-dex/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + polygon: { + tvl: getUniTVL({factory: '0x9c9238b2E47D61482D36deaFcDCD448D8bAAd75b', useDefaultCoreAssets: true, }), + } +} \ No newline at end of file diff --git a/projects/pxswap/index.js b/projects/pxswap/index.js index 41c41a6080..f3db5efae1 100644 --- a/projects/pxswap/index.js +++ b/projects/pxswap/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { sumTokensExport } = require('../helper/unwrapLPs') const contract = "0x638B06F80FB28F109E65C9d5cC585aDf9A0c3f9f" -const usdcToken = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f" +const usdcToken = ADDRESSES.telos.ETH module.exports = { kava: { tvl: sumTokensExport({ owner: contract, tokens: [usdcToken]}) }, diff --git a/projects/pylon/index.js b/projects/pylon/index.js index 487a9684ba..2d76fbdb89 100644 --- a/projects/pylon/index.js +++ b/projects/pylon/index.js @@ -1,71 +1,8 @@ -const { queryContractStore, getBalance, sumSingleBalance, getDenomBalance, TOKEN_LIST, } = require('../helper/chain/terra') - -// taken from https://api.pylon.money/api/gateway/v1/projects/ -const pools = [ - "terra1z5j60wct88yz62ylqa4t8p8239cwx9kjlghkg2", - "terra149fxy4crxnhy4z2lezefwe7evjthlsttyse20m", - "terra1he8j44cv2fcntujjnsqn3ummauua555agz4js0", - "terra1xu84jh7x2ugt3gkpv8d450hdwcyejtcwwkkzgv", - "terra1zxtcxxjqp7c46g8jx0t25s5ysa5qawmwd2w7nr", - "terra1jk0xh49ft2ls4u9dlfqweed8080u6ysumvmtcz", - "terra15y9r79wlu8uqvlu3k7vgv0kgdy29m8j9tt9xgg", - "terra19zn5u7ej083em99was4y02j3yhracnxwxcvmt4", - "terra15y70slq4l4s5da2etsyqasyjht0dnquj03qm05", - "terra1g9kzlt58ycppx9elymnrgxmwssfawym668r2y4", - "terra1he8ymhmqmtuu5699akwk94urap6z09xnnews32", - "terra1vftcl08p73v3nkuwvv5ntznku44s7p2tq00mgn", - "terra132u62nsympysvtg3nng5xg6tjf6cr8sxrq7ena", - "terra1dyattlzq58ty7pat337a9dz6j46thldu5gn8ls", - "terra1xkw8vusucy9c2w9hxuw6lktxk2w8g72utdyq96", - "terra1jzsjs8qx9ehsukzea9smuqtfuklmngmeh5csl3" -] - -// Pools in https://gateway.pylon.money/ -async function tvl() { - const balances = {} - for (const pool of pools) { - const [aUSTBalance, ustcBalance] = await Promise.all([ - getBalance(TOKEN_LIST.anchorust, pool), - getDenomBalance('uusd', pool), - ]) - sumSingleBalance(balances, TOKEN_LIST.anchorust, aUSTBalance) - sumSingleBalance(balances, TOKEN_LIST.terrausd, ustcBalance) - } - - Object.entries(balances).forEach(([t, v]) => balances[t] = Number(v).toFixed(0)) - return balances -} - -async function pool2() { - const { assets } = await queryContractStore({ contract: 'terra134m8n2epp0n40qr08qsvvrzycn2zq4zcpmue48', queryParam: { "pool": {} } }) - let pylonAmount - let uusdAmount - - assets.forEach(i => { - if (i.info.token) pylonAmount = i.amount / 1e6 - else uusdAmount = i.amount / 1e6 - }) - - return { - "pylon-protocol": pylonAmount, - "terrausd": uusdAmount, - } -} - -async function staking() { - const { balance } = await queryContractStore({ contract: 'terra1kcthelkax4j9x8d3ny6sdag0qmxxynl3qtcrpy', queryParam: { "balance": { "address": "terra1xu8utj38xuw6mjwck4n97enmavlv852zkcvhgp" } } }) - return { - "pylon-protocol": balance / 1e6 - } -} - module.exports = { timetravel: false, methodology: 'TVL counts the UST that has been deposted to the Protocol. Data is pulled from the Pylon API:"https://api.pylon.money/api/launchpad/v1/projects/mine".', terra: { - pool2, - staking, - tvl + tvl: () => ({}), }, hallmarks:[ [1651881600, "UST depeg"], diff --git a/projects/qidao/index.js b/projects/qidao/index.js index cceb6d69f3..e1d8e0f58e 100644 --- a/projects/qidao/index.js +++ b/projects/qidao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require("../helper/unwrapLPs"); const sdk = require("@defillama/sdk"); @@ -83,7 +84,7 @@ const config = { moonriver: { vaults: [ // "0x97D811A7eb99Ef4Cb027ad59800cE27E68Ee1109", - "0x4a0474E3262d4DB3306Cea4F207B5d66eC8E0AA9", + //"0x4a0474E3262d4DB3306Cea4F207B5d66eC8E0AA9", ] }, harmony: { @@ -106,7 +107,8 @@ const config = { "0x8C45969aD19D297c9B85763e90D0344C6E2ac9d1", "0xcc61Ee649A95F2E2f0830838681f839BDb7CB823", "0x82E90EB7034C1DF646bD06aFb9E67281AAb5ed28", - "0xCA3EB45FB186Ed4e75B9B22A514fF1d4abAdD123" + "0xCA3EB45FB186Ed4e75B9B22A514fF1d4abAdD123", + "0x4ce4C542D96Ce1872fEA4fa3fbB2E7aE31862Bad" ] }, bsc: { @@ -186,15 +188,15 @@ const config = { ], // amWBTC // anchor [ - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", + ADDRESSES.polygon.USDC, "0x947D711C25220d8301C087b25BA111FE8Cbf6672", ], //USDC [ - "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", + ADDRESSES.polygon.USDT, "0xa4742A65f24291AA421497221AaF64c70b098d98", ], //USDT [ - "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", + ADDRESSES.polygon.DAI, "0x6062E92599a77E62e0cC9749261eb2eaC3aBD44F", ], //DAI ] diff --git a/projects/qilin/index.js b/projects/qilin/index.js index 782ab5611b..2135110787 100644 --- a/projects/qilin/index.js +++ b/projects/qilin/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { sumTokensExport } = require('../helper/unwrapLPs') const contract = "0x57A0B07dcD834cAbB844BEc8E7903A3B2faE6245" -const usdcToken = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" +const usdcToken = ADDRESSES.ethereum.USDC module.exports = { ethereum: { tvl: sumTokensExport({ owner: contract, tokens: [usdcToken]}) }, diff --git a/projects/quadrat/index.js b/projects/quadrat/index.js index 3716a442d7..bd9978676c 100644 --- a/projects/quadrat/index.js +++ b/projects/quadrat/index.js @@ -24,6 +24,10 @@ const config = { factory: '0xb8d498f025c45a8a7a63277cb1cca36c2599bbd7', fromBlock: 34510988, }, + bsc: { + factory: '0x28e9f86690449059734e079eaaa66d8913263bed', + fromBlock: 26497758, + }, } Object.keys(config).forEach(chain => { @@ -51,7 +55,7 @@ Object.keys(config).forEach(chain => { bals.forEach((val, i) => { if (!val) return; - const { amount0, amount1 } = val + const { amount0, amount1 } = val sdk.util.sumSingleBalance(balances, token0[i], amount0, api.chain) sdk.util.sumSingleBalance(balances, token1[i], amount1, api.chain) }) diff --git a/projects/quantumx-network/api.js b/projects/quantumx-network/api.js index 6473250325..95326af529 100644 --- a/projects/quantumx-network/api.js +++ b/projects/quantumx-network/api.js @@ -1,8 +1 @@ -const { getExports } = require('../helper/heroku-api') - -module.exports = { - methodology: "It counts the TVL from the Staking Farms/Pools of QuantumX.", - timetravel: false, - misrepresentedTokens: true, - ...getExports("quantumx-network", ['elrond']), -} +module.exports = require('./index') \ No newline at end of file diff --git a/projects/quantumx-network/farms.abi.json b/projects/quantumx-network/farms.abi.json deleted file mode 100644 index 23b7fad077..0000000000 --- a/projects/quantumx-network/farms.abi.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.67.0-nightly", - "commitHash": "b7bc90fea3b441234a84b49fdafeb75815eebbab", - "commitDate": "2022-11-21", - "channel": "Nightly", - "short": "rustc 1.67.0-nightly (b7bc90fea 2022-11-21)" - }, - "contractCrate": { - "name": "farms", - "version": "0.0.0" - }, - "framework": { - "name": "elrond-wasm", - "version": "0.38.0" - } - }, - "name": "Farms", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "getAllFarms", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - } - ], - "events": [], - "hasCallback": false, - "types": { - "EsdtTokenPayment": { - "type": "struct", - "fields": [ - { - "name": "token_identifier", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ] - }, - "Farm": { - "type": "struct", - "fields": [ - { - "name": "id", - "type": "BigUint" - }, - { - "name": "creator", - "type": "Address" - }, - { - "name": "creation_epoch", - "type": "u64" - }, - { - "name": "staked_token", - "type": "EgldOrEsdtTokenIdentifier" - }, - { - "name": "reward_token", - "type": "EgldOrEsdtTokenIdentifier" - } - ] - } - } -} diff --git a/projects/quantumx-network/index.js b/projects/quantumx-network/index.js index 71828e6f8e..5a7ca2265d 100644 --- a/projects/quantumx-network/index.js +++ b/projects/quantumx-network/index.js @@ -1,232 +1,8 @@ -const { toUSDTBalances } = require("../helper/balances"); -var abiFile = require("./farms.abi.json"); -var { - AbiRegistry, - ContractFunction, - ResultsParser, - SmartContract, - SmartContractAbi, - Address, -} = require("@elrondnetwork/erdjs/out"); -var { - ProxyNetworkProvider, -} = require("@elrondnetwork/erdjs-network-providers/out"); -var axios = require("axios"); -var BigNumber = require("bignumber.js"); -//provider -const provider = new ProxyNetworkProvider("https://api.multiversx.com", { - timeout: 30000, -}); - -// api -const BASE_URL = "https://api.multiversx.com"; -const api = axios.create({ - baseURL: BASE_URL, -}); - -// fetch multiversx economics for egld info -const getEconomics = async () => { - return await api.get("/economics"); -}; -// fetch tokens info -const getFromAllTokens = async ({ - size = 10000, - name = undefined, - identifier = undefined, - identifiers = undefined, - search = undefined, -}) => { - return await api.get("/tokens", { - params: { - identifier, - identifiers, - name, - size, - search, - }, - }); -}; -// api to fetch lp prices -const fetchLpPrices = async () => { - const { data } = await axios.get("https://eldar.solutions/api/lpapi.php"); - return data; -}; -const getMexPairs = async () => { - return await api.get("/mex/pairs?size=150"); -}; - -/* ---------------- UTILS ------------------------ */ -const getRealBalance = (balance1, decimal) => { - const divider = Math.pow(10, decimal ?? 18); - const balance = new BigNumber(balance1); - const real = balance.dividedBy(divider, 10); - return real.toNumber(); -}; -const formatBalanceDolar = (token, price) => { - if (token && token.balance) { - const strBalance = token.balance; - - const intBalance = Number(strBalance); - const intBalanceDolar = intBalance * Number(price); - const realDollarAmount = getRealBalance(intBalanceDolar, token.decimals); - return realDollarAmount; - } - return 0; -}; - -// fetch info from sc -const scQuery = async (funcName, args) => { - try { - const abiRegistry = await AbiRegistry.create(abiFile); - const abi = new SmartContractAbi(abiRegistry, ["Farms"]); - const contract = new SmartContract({ - address: new Address( - "erd1qqqqqqqqqqqqqpgql6dxenaameqn2uyyru3nmmpf7e95zmlxu7zskzpdcw" - ), - abi: abi, - }); - - const query = contract.createQuery({ - func: new ContractFunction(funcName), - args: args, - }); - const queryResponse = await provider.queryContract(query); - const endpointDefinition = contract.getEndpoint(funcName); - const parser = new ResultsParser(); - const data = parser.parseQueryResponse(queryResponse, endpointDefinition); - - return data; - } catch (error) { - console.log(`query error for ${funcName} : `, error); - } -}; - -// get Tvl -const tvl = async () => { - // tvl - let tvlDollar = 0; - - try { - const scFarmsRes = await scQuery("getAllFarms", []); - const allFarmsFirstValue = scFarmsRes?.firstValue?.valueOf(); - if (allFarmsFirstValue) { - // get all farms from sc - const allFarms = allFarmsFirstValue.map((farm) => { - return { - farm: { - farmId: farm.field0.id.toNumber(), - creationEpoch: farm.field0.creation_epoch.toNumber(), - stakingToken: farm.field0.staked_token, - rewardToken: farm.field0.reward_token, - creator: farm.field0.creator.bech32(), - }, - stakedBalance: farm.field1.toNumber(), - totalRewardsLeft: farm.field2.toNumber(), - }; - }); - - // array of tokens identifiers - const tokensIdentifiers = allFarms.map((f) => f.farm.stakingToken); - // all tokens info - let tokensInfo = []; - - // get the info of tokens in array from multiversx api - const { data: tokensData } = await getFromAllTokens({ - identifiers: tokensIdentifiers.join(","), - }); - // add info of the returned tokens to the array of info - tokensInfo = [...tokensData]; - - // if egld is include in tokens indentifeirs, we need to get the data of egld for price - const isEgldonTokens = tokensIdentifiers.includes("EGLD"); - if (isEgldonTokens) { - // fetch egld data - - const { data: egldData } = await getEconomics(); - - tokensInfo.unshift({ - type: "FungibleESDT", - identifier: "EGLD", - name: "EGLD", - ticker: "EGLD", - decimals: 18, - price: egldData.data.price, - marketCap: egldData.data.marketCap, - supply: egldData.data.totalSupply, - circulatingSupply: egldData.data.circulatingSupply, - }); - } - - const lptokensInfo = await fetchLpPrices(); - const { data: mexPairs } = await getMexPairs(); - const pools = mexPairs - ? allFarms.filter( - (farm) => - mexPairs.findIndex( - (mexPair) => mexPair.id === farm.farm.stakingToken - ) === -1 - ) - : []; - const farms = mexPairs - ? allFarms.filter( - (farm) => - mexPairs.findIndex( - (mexPair) => mexPair.id === farm.farm.stakingToken - ) !== -1 - ) - : []; - - // get tvl in dollar for farms - for (let i = 0; i < farms.length; i++) { - // info from sc about the farm - const farm = farms[i]; - - const stakingToken = tokensInfo.find( - (token) => token.identifier === farm.farm.stakingToken - ); - const lpPrice = - lptokensInfo.find( - (lpToken) => lpToken.token === farm.farm.stakingToken - )?.tokenvalue || 0; - if (lpPrice) { - tvlDollar += formatBalanceDolar( - { - balance: farm.stakedBalance, - decimals: stakingToken.decimals, - }, - Number(lpPrice) - ); - } - } - // // get tvl in dollar for pools - for (let i = 0; i < pools.length; i++) { - const farm = pools[i]; - - const stakingToken = tokensInfo.find( - (token) => token.identifier === farm.farm.stakingToken - ); - if (stakingToken?.price) { - tvlDollar += formatBalanceDolar( - { - balance: farm.stakedBalance, - decimals: stakingToken.decimals, - }, - stakingToken?.price - ); - } - } - - return toUSDTBalances(tvlDollar); - } - } catch (err) { - console.log("Exeption error : ", err); - } - return toUSDTBalances(tvlDollar); -}; +const { sumTokensExport } = require('../helper/sumTokens') module.exports = { - methodology: "It counts the TVL from the Staking Farms/Pools of QuantumX.", + timetravel: false, elrond: { - tvl, - }, -}; + tvl: sumTokensExport({ chain: 'elrond', owner: 'erd1qqqqqqqqqqqqqpgql6dxenaameqn2uyyru3nmmpf7e95zmlxu7zskzpdcw', }) + } +} \ No newline at end of file diff --git a/projects/quasar-swap/index.js b/projects/quasar-swap/index.js index 9a0b0abff1..950c31d241 100644 --- a/projects/quasar-swap/index.js +++ b/projects/quasar-swap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') //const { masterChefExports } = require('../helper/masterchef'); // const { sumTokens2 } = require("../helper/unwrapLPs"); const { getUniTVL, sumUnknownTokens } = require("../helper/unknownTokens"); @@ -7,7 +8,7 @@ const { getUniTVL, sumUnknownTokens } = require("../helper/unknownTokens"); const sntNova = "0x657a66332a65b535da6c5d67b8cd1d410c161a08"; const qsrToken = "0x356c044B99e9378C1B28A1cAb2F95Cd65E877F33"; // const qsrLP = "0xf8c1b66e95790467819bb25f852e37b59e47c16d" -const nUSD = "0x1F5396f254EE25377A5C1b9c6BfF5f44e9294fFF" +const nUSD = ADDRESSES.nova.NUSD const sntQsrFarm = "0x0e9768b0199e7b31852b4effb70031d860b812d6"; // const sntNusdFarm = "0x050bc8fa6da93dff0d7629923e0972c0aecebb9e"; const poolAuto = "0x71da5557c9D89a0b34Ef3A6FE0EcC750c93996e9"; diff --git a/projects/quasar/index.js b/projects/quasar/index.js new file mode 100644 index 0000000000..068a5a1689 --- /dev/null +++ b/projects/quasar/index.js @@ -0,0 +1,66 @@ +const { queryContract } = require('../helper/chain/cosmos') +const sdk = require('@defillama/sdk') + +const chain = 'quasar' + +const lpStrategyContracts = { + 1: [ + "quasar14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sy9numu", + "quasar1l468h9metf7m8duvay5t4fk2gp0xl94h94f3e02mfz4353de2ykqh6rcts", + "quasar1cp8cy5kvaury53frlsaml7ru0es2reln66nfj4v7j3kcfxl4datqsw0aw4", + "quasar1kj8q8g2pmhnagmfepp9jh9g2mda7gzd0m5zdq0s08ulvac8ck4dq9ykfps", + ], + 678: [ + "quasar1suhgf5svhu4usrurvxzlgn54ksxmn8gljarjtxqnapv8kjnp4nrsmslfn4", + "quasar1ma0g752dl0yujasnfs9yrk6uew7d0a2zrgvg62cfnlfftu2y0egqx8e7fv", + ], + 803: [ + "quasar1jgn70d6pf7fqtjke0q63luc6tf7kcavdty67gvfpqhwwsx52xmjq7kd34f", + "quasar1t9adyk9g2q0efn3xndunzy4wvdrnegjkpvp382vm2uc7hnvash5qpzmxe4", + ], + 833: [ + "quasar1ery8l6jquynn9a4cz2pff6khg8c68f7urt33l5n9dng2cwzz4c4qxhm6a2", + ], + 904: [ + "quasar1ch4s3kkpsgvykx5vtz2hsca4gz70yks5v55nqcfaj7mgsxjsqypsxqtx2a", + ], + 944: [ + "quasar1xkakethwh43dds3ccmsjals9jt7qsfmedgm9dvm9tpqq8watpv9q0458u6", + "quasar1ch4s3kkpsgvykx5vtz2hsca4gz70yks5v55nqcfaj7mgsxjsqypsxqtx2a", + ], +} + +async function tvl() { + const api = new sdk.ChainApi({ chain: 'osmosis' }) + + for (const poolID in lpStrategyContracts) { + let lpContracts = lpStrategyContracts[poolID]; + for (const contractAddress of lpContracts) { + try { + let ica_balances = await queryContract({ + contract: contractAddress, + chain: chain, + data: { 'ica_balance': {} } + }); + + let denom = ica_balances.amount.denom; + let amount = Number(ica_balances.amount.amount); + + api.add(denom, amount) + } catch (e) { + console.log(e) + continue; + } + } + } + + return api.getBalances() +} + +module.exports = { + timetravel: false, + methodology: "Total TVL on vaults", + osmosis: { + tvl, + }, +} \ No newline at end of file diff --git a/projects/qubit/index.js b/projects/qubit/index.js index 8500c0432e..5815aa0bc4 100644 --- a/projects/qubit/index.js +++ b/projects/qubit/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const BigNumber = require("bignumber.js"); const qBnb = "0xbE1B5D17777565D67A5D2793f879aBF59Ae5D351"; // qBNB -const wBnb = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; //wBNB +const wBnb = ADDRESSES.bsc.WBNB; //wBNB const qoreComptroller = "0xf70314eb9c7fe7d88e6af5aa7f898b3a162dcd48"; const dashboardKlaytn = "0x9A47D707FDffC561E3598990f25d3874af448568"; diff --git a/projects/quicksilver/index.js b/projects/quicksilver/index.js index 05e9ada73a..8a1aa8b3e2 100644 --- a/projects/quicksilver/index.js +++ b/projects/quicksilver/index.js @@ -5,6 +5,7 @@ const coinGeckoIds = { uatom: "cosmos", uosmo: "osmosis", uregen: "regen", + ujuno: "juno-network", ustars: "stargaze" }; diff --git a/projects/quickswap-perps/index.js b/projects/quickswap-perps/index.js new file mode 100644 index 0000000000..6f862694ff --- /dev/null +++ b/projects/quickswap-perps/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + polygon_zkevm:{ + tvl: gmxExports({ vault: '0x99b31498b0a1dae01fc3433e3cb60f095340935c', }) + }, +}; diff --git a/projects/quickswap/index.js b/projects/quickswap/index.js index e1f5f510f5..dc552207c5 100644 --- a/projects/quickswap/index.js +++ b/projects/quickswap/index.js @@ -5,7 +5,7 @@ module.exports = { timetravel: true, polygon:{ tvl: getChainTvl({ - polygon: 'https://polygon.furadao.org/subgraphs/name/quickswap' + polygon: 'https://api.thegraph.com/subgraphs/name/sameepsi/quickswap06' })('polygon') }, hallmarks:[ diff --git a/projects/quipuswap-stableswap/index.js b/projects/quipuswap-stableswap/index.js new file mode 100644 index 0000000000..54d77322af --- /dev/null +++ b/projects/quipuswap-stableswap/index.js @@ -0,0 +1,52 @@ +const { sumTokens2, getStorage, getBigMapById, } = require('../helper/chain/tezos') +const { PromisePool } = require('@supercharge/promise-pool') +const sdk = require('@defillama/sdk') + +const stableSwap = async (_, _1, _2, { api }) => { + const data = await getStorage('KT1UPiYB4HrLFcHQ5tkjahGnDM55E8iEbNAx') + const pools = await getBigMapById(data.storage.pool_id_to_address); + return sumTokens2({ owners: Object.values(pools), includeTezos: false, }) +} + +const sswapAndYupuna = async (_, _1, _2, { api }) => { + const data = await getStorage('KT1Q9gw5mZSLPGkoCaWc5a8FKLGDiTiULc6R') + const pools = await getBigMapById(data.storage.pool_id_to_address); + const { errors } = await PromisePool.withConcurrency(10) + .for(Object.values(pools).slice(0, 2)) + .process(async pool => { + const { storage: data } = await getStorage(pool) + const tokenInfos = await getBigMapById(data.pools); + const tokenDatas = await getBigMapById(data.tokens); + Object.keys(tokenInfos).forEach(key => { + const { tokens_info } = tokenInfos[key] + const tokenData = tokenDatas[key] + Object.keys(tokens_info).forEach(key => { + const token = getToken(tokenData[key]) + const { reserves } = tokens_info[key] + api.add(token, reserves) + }) + }) + }) + + if (errors && errors.length) + throw errors[0] + return api.getBalances() +} + +function getToken(object) { + if (object.fa12) return object.fa12 + if (object.fa2) { + const { token_id, token_address } = object.fa2 + if (token_id && token_id !== '0') return `${token_address}-${token_id}` + return token_address + } + throw new Error("Unknown token type" + JSON.stringify(object, null, 2)) +} + +module.exports = { + timetravel: false, + tezos: { + tvl: sdk.util.sumChainTvls([stableSwap, sswapAndYupuna]), + } +} + diff --git a/projects/quipuswap-v2/index.js b/projects/quipuswap-v2/index.js new file mode 100644 index 0000000000..106bf9b34e --- /dev/null +++ b/projects/quipuswap-v2/index.js @@ -0,0 +1,16 @@ +const { sumTokens2, getStorage, getBigMapById, } = require('../helper/chain/tezos') + + +const factory = 'KT1J8Hr3BP8bpbfmgGpRPoC9nAMSYtStZG43' +module.exports = { + timetravel: false, + tezos: { + tvl: async () => { + const data = await getStorage(factory) + const pools = await getBigMapById(data.storage.pairs); + const owners = Object.values(pools).map(i => i.bucket).filter(i => i) + owners.push(factory) + return sumTokens2({ owners, includeTezos: true, }) + }, + } +} diff --git a/projects/quipuswap-v3/index.js b/projects/quipuswap-v3/index.js new file mode 100644 index 0000000000..7f3cdf1615 --- /dev/null +++ b/projects/quipuswap-v3/index.js @@ -0,0 +1,12 @@ +const { sumTokens2, getStorage, getBigMapById, } = require('../helper/chain/tezos') + +module.exports = { + timetravel: false, + tezos: { + tvl: async () => { + const data = await getStorage('KT1JNNMMGyNNy36Zo6pcgRTMLUZyqRrttMZ4') + const pools = await getBigMapById(data.pools); + return sumTokens2({ owners: Object.values(pools), includeTezos: false, }) + }, + } +} diff --git a/projects/quipuswap/index.js b/projects/quipuswap/index.js index c1f64f64fa..209cd98281 100644 --- a/projects/quipuswap/index.js +++ b/projects/quipuswap/index.js @@ -1,23 +1,14 @@ +const { sumTokens2, getStorage, getBigMapById, } = require('../helper/chain/tezos') -const { sumTokens2, } = require('../helper/chain/tezos') -const { get, } = require('../helper/http') - -async function tvl() { - const tokenToTokenLPAddress = 'KT1VNEzpf631BLsdPJjt2ZhgUitR392x6cSi' - return sumTokens2({ owners: [tokenToTokenLPAddress, ... await getLPs('Quipuswap')], includeTezos: true, }) -} - -async function getLPs(dex) { - const { contracts } = await get('https://api.teztools.io/token/prices') - const LPs = {} - for (const { pairs } of contracts) - pairs.filter(p => p.dex === dex).forEach(p => LPs[p.address] = p) - return Object.keys(LPs) -} +const factory = 'KT1Lw8hCoaBrHeTeMXbqHPG4sS4K1xn7yKcD' module.exports = { timetravel: false, tezos: { - tvl, + tvl: async () => { + const data = await getStorage(factory) + const pools = await getBigMapById(data.token_to_exchange); + return sumTokens2({ owners: Object.values(pools), includeTezos: true, }) + }, } -} +} \ No newline at end of file diff --git a/projects/quoll/index.js b/projects/quoll/index.js index debd8046d0..26ea2999c5 100644 --- a/projects/quoll/index.js +++ b/projects/quoll/index.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); -const { ethers: {BigNumber} } = require("ethers") +const { ethers: { BigNumber } } = require("ethers") const { staking } = require("../helper/staking"); const abi = require('./abi.json'); const voterProxy = '0xe96c48C5FddC0DC1Df5Cf21d68A3D8b3aba68046'; @@ -10,95 +11,43 @@ const wom = '0xAD6742A35fB341A9Cc6ad674738Dd8da98b94Fb1'; const veWom = '0x3DA62816dD31c56D9CdF22C6771ddb892cB5b0Cc'; const chain = 'bsc'; -async function voterProxyBalances(block) { - const poolLength = await sdk.api.abi.call({ - abi: abi.poolLength, - target: masterWombat, - params: [], - block, - chain - }).then(l => parseInt(l.output.toString())); +async function voterProxyBalances(api) { + const poolLength = await api.call({ abi: abi.poolLength, target: masterWombat, }) - const masterWombatPoolInfos = await sdk.api.abi.multiCall({ - block, - abi: abi.poolInfo, - calls: Array.from(Array(poolLength).keys()).map((pid) => ({ target: masterWombat, params: [pid] })), - chain, - }); - - const masterWombatVoterProxyBalances = await sdk.api.abi.multiCall({ - block, - abi: abi.userInfo, - calls: Array.from(Array(poolLength).keys()).map((pid) => ({ target: masterWombat, params: [pid, voterProxy] })), - chain, - }); - - const lpTokenTargets = masterWombatPoolInfos.output.map((pool) => ({ target: pool.output.lpToken, params: [] })); + const masterWombatPoolInfos = await api.multiCall({ abi: abi.poolInfo, target: masterWombat, calls: Array.from(Array(+poolLength).keys()), }); + const masterWombatVoterProxyBalances = await api.multiCall({ abi: abi.userInfo, target: masterWombat, calls: Array.from(Array(+poolLength).keys()).map((pid) => ({ params: [pid, voterProxy] })), }); - const lpPools = await sdk.api.abi.multiCall({ - block, - abi: abi.pool, - calls: lpTokenTargets, - chain, - }); - - const underlyingTokens = await sdk.api.abi.multiCall({ - block, - abi: abi.underlyingToken, - calls: lpTokenTargets, - chain, - }); + const lpTokenTargets = masterWombatPoolInfos.map((pool) => pool.lpToken); + const lpPools = await api.multiCall({ abi: abi.pool, calls: lpTokenTargets, }); + const underlyingTokens = await api.multiCall({ abi: abi.underlyingToken, calls: lpTokenTargets, }); - const underlyingAmounts = await sdk.api.abi.multiCall({ - block, + const underlyingAmounts = await api.multiCall({ abi: abi.quotePotentialWithdraw, - calls: lpPools.output.map((pool, index) => { + calls: lpPools.map((pool, index) => { return { - target: pool.output, - params: [underlyingTokens.output[index].output, masterWombatVoterProxyBalances.output[index].output.amount], + target: pool, + params: [underlyingTokens[index], masterWombatVoterProxyBalances[index].amount], }; }), - chain, permitFailure: true, }); - return underlyingAmounts.output + return underlyingAmounts .map((a, i) => { - if (masterWombatVoterProxyBalances.output[i].output.amount === '0') return; - if (underlyingTokens.output[i].output.toLowerCase() === '0xE85aFCcDaFBE7F2B096f268e31ccE3da8dA2990A'.toLowerCase()) return; // disable aBNBc (ankr bnb) - return ({amount: a.output.amount, token: underlyingTokens.output[i].output}) - }).filter(i => i); + if (+masterWombatVoterProxyBalances[i].amount === 0) return; + if (underlyingTokens[i].toLowerCase() === ADDRESSES.bsc.ankrBNB.toLowerCase()) return; // disable aBNBc (ankr bnb) + if (a) + api.add(underlyingTokens[i], a.amount) + }) } -async function veWomBalance(block) { - return sdk.api.erc20.balanceOf({ - owner: voterProxy, - target: veWom, - block, - chain, - }).then(s => s.output); -} - -async function tvl(timestamp, ethereumBlock, chainBlocks) { - const block = chainBlocks[chain]; - - let balances = {}; - balances[`${chain}:${wom}`] = await veWomBalance(block); - - const vpBalances = await voterProxyBalances(block); - vpBalances.forEach(b => { - if (balances[`${chain}:${b.token}`]) { - balances[`${chain}:${b.token}`] = BigNumber.from(balances[`${chain}:${b.token}`]).add(BigNumber.from(b.amount)).toString(); - } else { - balances[`${chain}:${b.token}`] = b.amount; - } - }); - - return balances; +async function tvl(timestamp, ethereumBlock, chainBlocks, { api }) { + api.add(wom, await api.call({ abi: 'erc20:balanceOf', target: veWom, params: [voterProxy], })) + await voterProxyBalances(api) } module.exports = { methodology: - "TVL of Quoll Finance consists of Wombat LP tokens staked in MasterWombat, WOM tokens locked in veWOM, and Quoll tokens locked in QUO Vote Lock contract.", + "TVL of Quoll Finance consists of Wombat LP tokens staked in MasterWombat, WOM tokens locked in veWOM, and Quoll tokens locked in QUO Vote Lock contract.", bsc: { tvl, staking: staking( diff --git a/projects/rabbitfinance/index.js b/projects/rabbitfinance/index.js index 863dbf75ed..48b248c793 100644 --- a/projects/rabbitfinance/index.js +++ b/projects/rabbitfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { staking } = require("../helper/staking"); @@ -27,10 +28,10 @@ const bscTvl = async (timestamp, ethBlock, { [chain]: block }) => { // ).map((addr) => addr.contract_address); const poolsInfo = [ - '0x55d398326f99059ff775485246999027b3197955', - '0xe9e7cea3dedca5984780bafc599bd69add087d56', - '0x2170ed0880ac9a755fd29b2688956bd959f933f8', - '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', + ADDRESSES.bsc.USDT, + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.BTCB, '0x95a1199eba84ac5f19546519e287d43d2f0e1b41', '0x3ee2200efb3400fabb9aacf31297cbdd1d435d47', '0x9c65ab58d8d978db963e63f2bfb7121627e3a739', diff --git a/projects/rabbitx/index.js b/projects/rabbitx/index.js new file mode 100644 index 0000000000..6391347eec --- /dev/null +++ b/projects/rabbitx/index.js @@ -0,0 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: sumTokensExport({ owners: ['0xFc7f884DE22a59c0009C91733196b012Aecb8F41', '0x3b8F6D6970a24A58b52374C539297ae02A3c4Ae4', '0x7fAb440A0251dA67B316d2c0431E3Ccf4520Cd42',], tokens: [ADDRESSES.ethereum.USDT]}) + } +} diff --git a/projects/radao/index.js b/projects/radao/index.js index 305d5e460d..775f61b5b2 100644 --- a/projects/radao/index.js +++ b/projects/radao/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0x652A6F3459B276887bf2Fe9fb0FF810c9B24e1E3"; -const BUSD = "0xe9e7cea3dedca5984780bafc599bd69add087d56"; +const BUSD = ADDRESSES.bsc.BUSD; const RaStaking = "0xf45aE86eD6C7d7A6b6C4640e04FEc228641D4C64"; const RA = "0xcc238200cFfdA7A5E2810086c26d5334e64F1155"; diff --git a/projects/radiate-protocol/index.js b/projects/radiate-protocol/index.js new file mode 100644 index 0000000000..6e1c94227f --- /dev/null +++ b/projects/radiate-protocol/index.js @@ -0,0 +1,17 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(_, _b, _cb, { api, }) { + const vault = '0xC6dC7749781F7Ba1e9424704B2904f2F94D3eb63' + const dlp = await api.call({ abi: 'address:dlp', target: vault}) + const masterchef = await api.call({ abi: 'address:mfd', target: vault}) + const { total }= await api.call({ abi:"function lockedBalances(address user) view returns (uint256 total, uint256 unlockable, uint256 locked, uint256 lockedMultiplier, tuple(uint256 amount, uint256 unlockTime, uint256, uint256)[] lockData)", target: masterchef, params: vault }) + api.add(dlp, total) + return sumTokens2({ owner: vault, tokens: [dlp], api}) +} + +module.exports = { + doublecounted: true, + arbitrum: { + tvl, + }, +} \ No newline at end of file diff --git a/projects/radioshack/index.js b/projects/radioshack/index.js index 6f1a8ac0ad..1b8a3d7218 100644 --- a/projects/radioshack/index.js +++ b/projects/radioshack/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const { getUniTVL } = require('../helper/unknownTokens') @@ -13,7 +14,7 @@ const chainConfig = { }, polygon: { factory: '0xB581D0A3b7Ea5cDc029260e989f768Ae167Ef39B', - radio: '0x613a489785C95afEB3b404CC41565cCff107B6E0', + radio: ADDRESSES.polygon.RADIO, shack: '0x6E65Ae5572DF196FAe40Be2545Ebc2A9A24eAcE9', stakingContracts: ['0x1D72b58d2b73942451b1D0DFE2B6ef2c5a52a301', '0x01d97Df7dc98E97da0c14ffB27Adf00fda0245DD', '0x9E8C85c40001a7264a1a1B11999F8f7b0503D60a'], }, diff --git a/projects/raft/index.js b/projects/raft/index.js new file mode 100644 index 0000000000..3f05728ff5 --- /dev/null +++ b/projects/raft/index.js @@ -0,0 +1,23 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); +const ADDRESSES = require("../helper/coreAssets.json"); + +const RAFT_POSITION_MANAGER = "0x5f59b322eb3e16a0c78846195af1f588b77403fc"; +const WRAPPED_RETH = "0xb69e35fb4a157028b92f42655090b984609ae598"; + +function transformAddress(token) { + if (token === WRAPPED_RETH) { + return ADDRESSES.ethereum.RETH; + } + + return token; +} + +module.exports = { + ethereum: { + tvl: sumTokensExport({ + owner: RAFT_POSITION_MANAGER, + tokens: [ADDRESSES.ethereum.WSTETH, WRAPPED_RETH], + transformAddress: transformAddress, + }), + }, +}; diff --git a/projects/ragnarokdao/index.js b/projects/ragnarokdao/index.js index 74af7084bf..9f9d0b6357 100644 --- a/projects/ragnarokdao/index.js +++ b/projects/ragnarokdao/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasury = "0xfa9cCe3098C02F770DcB2D17Df9B8f5331bE86D0"; const rgk = "0x46fccf447f74ec97a521615fce111118597071f7"; const stakingContract = "0xeb6B44834E002ECDEAdF9E61448B21cCc33284ca"; const mim = "0x130966628846bfd36ff31a822705796e8cb8c18d"; -const usdc = "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664"; +const usdc = ADDRESSES.avax.USDC_e; const rgkMimJLP = "0xE8419ecDA1C76c38800b21e7D43BDB6B02f51ACE"; module.exports = { ...ohmTvl( diff --git a/projects/raidshift/index.js b/projects/raidshift/index.js index 68d1274fb8..a97ef50d2d 100644 --- a/projects/raidshift/index.js +++ b/projects/raidshift/index.js @@ -1,8 +1,8 @@ -const { multicall, sumTokens } = require('../helper/chain/tron') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') const contracts = [ - 'TC3TuowSyMxJSLaqiWJuCkZ2i3q7JCFR4x', - 'TGxDz3kgbxwEAESNtfWk4JFXXEgZAoWqeG', + // 'TC3TuowSyMxJSLaqiWJuCkZ2i3q7JCFR4x', + // 'TGxDz3kgbxwEAESNtfWk4JFXXEgZAoWqeG', 'TVMuhpXdRvNjjFAWqZ5urvhrQQyFvc19SN', 'TJmx4Zg4xMjCZR5Q3aoCyDmYY3r42xU2GZ', 'TMiHbWfnzh8cFmxNptoDgBvhuFSe2eiDFQ', @@ -16,13 +16,19 @@ const contracts = [ ] async function tvl() { - const tokenAs = await multicall({ calls: contracts, abi: 'tokenA()', isAddress: true,}) - const tokenBs = await multicall({ calls: contracts, abi: 'tokenB()', isAddress: true,}) + const { api } = arguments[3] + const tokenAs = await api.multiCall({ calls: contracts, abi: 'address:tokenA', permitFailure: true }) + const tokenBs = await api.multiCall({ calls: contracts, abi: 'address:tokenB', permitFailure: true }) const tokensAndOwners = [] - tokenAs.forEach((t, i) => tokensAndOwners.push([t, contracts[i]])) - tokenBs.forEach((t, i) => tokensAndOwners.push([t, contracts[i]])) - return sumTokens({ tokensAndOwners, }) -} + tokenAs.forEach((t, i) => tokensAndOwners.push([fixNullToken(t), contracts[i]])) + tokenBs.forEach((t, i) => tokensAndOwners.push([fixNullToken(t), contracts[i]])) + return sumTokens2({ api, tokensAndOwners, blacklistedTokens: ['TNEjtKFHWpz8bN2ZruLVY2NW2AD39uSUAs']}) + + + function fixNullToken(token) { + if (token === '0x') return nullAddress + return token + }} module.exports = { tron: { diff --git a/projects/ram.js b/projects/ram.js index d72e7beaac..d6f67cd28f 100644 --- a/projects/ram.js +++ b/projects/ram.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('./helper/coreAssets.json') const {usdCompoundExports} = require("./helper/compound"); const controllerAddress = "0x0d4fe8832857Bb557d8CFCf3737cbFc8aE784106"; module.exports = { timetravel: true, // but we don't have a thundercore archive node atm - thundercore: usdCompoundExports(controllerAddress, "thundercore", "0xeF5A0CE54a519B1Db3F350EB902C4cFbf7671D88", undefined, { cetheEquivalent: '0x413cEFeA29F2d07B8F2acFA69d92466B9535f717' }) + thundercore: usdCompoundExports(controllerAddress, "thundercore", "0xeF5A0CE54a519B1Db3F350EB902C4cFbf7671D88", undefined, { cetheEquivalent: ADDRESSES.thundercore.WTT }) }; diff --git a/projects/ramses-cl/index.js b/projects/ramses-cl/index.js new file mode 100644 index 0000000000..476cff6cc3 --- /dev/null +++ b/projects/ramses-cl/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + arbitrum: { factory: '0xaa2cd7477c451e703f3b9ba5663334914763edf8', fromBlock: 90593047, }, +}) \ No newline at end of file diff --git a/projects/range/abi.json b/projects/range/abi.json new file mode 100644 index 0000000000..240ac80526 --- /dev/null +++ b/projects/range/abi.json @@ -0,0 +1,3 @@ +{ + "underlyingBalance": "function getUnderlyingBalances() public view returns (uint256 amount0Current, uint256 amount1Current)" +} \ No newline at end of file diff --git a/projects/range/index.js b/projects/range/index.js new file mode 100644 index 0000000000..c4254faff6 --- /dev/null +++ b/projects/range/index.js @@ -0,0 +1,39 @@ +const { getLogs } = require('../helper/cache/getLogs') + +const ABI = require('./abi.json'); +const config = { + ethereum: { factory: '0xf1e70677fb1f49471604c012e8B42BA11226336b', fromBlock: 17266660, }, + arbitrum: { factory: '0xB9084c75D361D1d4cfC7663ef31591DeAB1086d6', fromBlock: 88503603, }, + bsc: { factory: '0xad2b34a2245b5a7378964BC820e8F34D14adF312', fromBlock: 28026886, }, + polygon: { factory: '0xad2b34a2245b5a7378964BC820e8F34D14adF312', fromBlock: 42446548, } +} + +module.exports = { + methodology: 'assets deployed on DEX as LP + asset balance of vaults', + doublecounted: true, + start: 1683965157, +}; + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topic: 'VaultCreated(address,address)', + eventAbi: 'event VaultCreated(address indexed uniPool, address indexed vault)', + onlyArgs: true, + fromBlock, + }) + const vaults = logs.map(log => log.vault) + const token0s = await api.multiCall({ abi: "address:token0", calls: vaults, }) + const token1s = await api.multiCall({ abi: "address:token1", calls: vaults, }) + const bals = await api.multiCall({ abi: ABI.underlyingBalance, calls: vaults, }) + bals.forEach(({ amount0Current, amount1Current }, i) => { + api.add(token0s[i], amount0Current) + api.add(token1s[i], amount1Current) + }) + } + } +}) \ No newline at end of file diff --git a/projects/rari/index.js b/projects/rari/index.js index f235779b61..5d8d5cfc69 100644 --- a/projects/rari/index.js +++ b/projects/rari/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { requery } = require("../helper/requery"); const abi = require("./abi"); @@ -5,6 +6,8 @@ const { default: BigNumber } = require("bignumber.js"); const { getCompoundV2Tvl } = require('../helper/compound') const { pool2 } = require('../helper/pool2'); const { getBlock } = require("../helper/http"); +const { sliceIntoChunks } = require("../helper/utils"); +const { sumTokens2 } = require("../helper/unwrapLPs"); const earnETHPoolFundControllerAddressesIncludingLegacy = [ '0xD9F223A36C2e398B0886F945a7e556B41EF91A3C', @@ -17,45 +20,51 @@ const earnDAIPoolControllerAddressesIncludingLegacy = [ ] const earnStablePoolAddressesIncludingLegacy = [ '0x4a785fa6fcd2e0845a24847beb7bddd26f996d4d', - '0x27C4E34163b5FD2122cE43a40e3eaa4d58eEbeaF', - '0x318cfd99b60a63d265d2291a4ab982073fbf245d', - '0xb6b79D857858004BF475e4A57D4A446DA4884866', - '0xD4be7E211680e12c08bbE9054F0dA0D646c45228', - '0xB202cAd3965997f2F5E67B349B2C5df036b9792e', - '0xe4deE94233dd4d7c2504744eE6d34f3875b3B439' + // '0x27C4E34163b5FD2122cE43a40e3eaa4d58eEbeaF', + // '0x318cfd99b60a63d265d2291a4ab982073fbf245d', + // '0xb6b79D857858004BF475e4A57D4A446DA4884866', + // '0xD4be7E211680e12c08bbE9054F0dA0D646c45228', + // '0xB202cAd3965997f2F5E67B349B2C5df036b9792e', + // '0xe4deE94233dd4d7c2504744eE6d34f3875b3B439' ] const fusePoolLensAddress = '0x8dA38681826f4ABBe089643D2B3fE4C6e4730493' const fusePoolDirectoryAddress = '0x835482FE0532f169024d5E9410199369aAD5C77E' const rariGovernanceTokenUniswapDistributorAddress = '0x1FA69a416bCF8572577d3949b742fBB0a9CD98c7' -const sushiETHRGTPairAddress = '0x18a797c7c70c1bf22fdee1c09062aba709cacf04' -const WETHTokenAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' -const RGTTokenAddress = '0xD291E7a03283640FDc51b121aC401383A46cC623' const RGTETHSushiLPTokenAddress = '0x18a797c7c70c1bf22fdee1c09062aba709cacf04' -const ETHAddress = '0x0000000000000000000000000000000000000000' +const ETHAddress = ADDRESSES.null const bigNumZero = BigNumber('0') const tokenMapWithKeysAsSymbol = { - 'DAI': '0x6b175474e89094c44da98b954eedeac495271d0f', - 'USDC': '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - 'USDT': '0xdac17f958d2ee523a2206206994597c13d831ec7', - 'TUSD': '0x0000000000085d4780b73119b644ae5ecd22b376', - 'BUSD': '0x4fabb145d64652a948d72533023f6e7a623c7c53', - 'SUSD': '0x57ab1ec28d129707052df4df418d58a2d46d5f51', + 'DAI': ADDRESSES.ethereum.DAI, + 'USDC': ADDRESSES.ethereum.USDC, + 'USDT': ADDRESSES.ethereum.USDT, + 'TUSD': ADDRESSES.ethereum.TUSD, + 'BUSD': ADDRESSES.ethereum.BUSD, + 'SUSD': ADDRESSES.ethereum.sUSD, 'MUSD': '0xe2f2a5c287993345a840db3b0845fbc70f5935a5' } const fusePoolData = {} async function getFusePoolData(pools, block) { - const data = await sdk.api.abi.multiCall({ + console.log({ target: fusePoolLensAddress, abi: abi['getPoolSummary'], block, - calls: pools.map((poolInfo) => ({ - params: [poolInfo[2]] - })) + calls: pools.map(i => i.comptroller) }) - requery(data, 'ethereum', block, abi['getPoolSummary']) + const data = { output: [] } + const chunks = sliceIntoChunks(pools.map(i => ({ params: i.comptroller })), 25) + for (const chunk of chunks) { + const items = await sdk.api2.abi.multiCall({ + target: fusePoolLensAddress, + abi: abi['getPoolSummary'], + block, + calls: chunk + }) + console.log(items) + data.output.push(...items.output) + } return data } @@ -72,6 +81,7 @@ async function getFusePools(timestamp, block, balances, borrowed) { fusePoolData[block] = getFusePoolData(fusePools, block) const poolSummaries = await fusePoolData[block] + console.log(poolSummaries) for (let summaryResult of poolSummaries.output) { if (summaryResult.success) { @@ -92,7 +102,7 @@ async function getFusePools(timestamp, block, balances, borrowed) { } async function borrowed(timestamp, block) { - if(block > 14684686){ + if (block > 14684686) { return {} // after fei hack } const balances = {} @@ -177,25 +187,41 @@ async function tvl(timestamp, block) { await getBalancesFromEarnPool(earnStablePoolAddressesIncludingLegacy) // Fuse - await getFusePools(timestamp, block, balances, false) + // await getFusePools(timestamp, block, balances, false) return balances } +async function fuseTvl(__, _b, _cb, { api, }) { + + const [_, pools] = (await api.call({ target: fusePoolDirectoryAddress, abi: abi['getPublicPools'] })) + const markets = (await api.multiCall({ abi: 'address[]:getAllMarkets', calls: pools.map(i => i.comptroller) })).flat() + const tokens = await api.multiCall({ abi: 'address:underlying', calls: markets }) + return sumTokens2({api , tokensAndOwners2: [tokens, markets]}) +} +async function fuseBorrowed(__, _b, _cb, { api, }) { + + const [_, pools] = (await api.call({ target: fusePoolDirectoryAddress, abi: abi['getPublicPools'] })) + const markets = (await api.multiCall({ abi: 'address[]:getAllMarkets', calls: pools.map(i => i.comptroller) })).flat() + const tokens = await api.multiCall({ abi: 'address:underlying', calls: markets }) + const bals = await api.multiCall({ abi: 'uint256:totalBorrows', calls: markets }) + api.addTokens(tokens, bals) + return api.getBalances() +} + module.exports = { - timetravel: true, misrepresentedTokens: true, doublecounted: true, start: 1596236058, // July 14, 2020 ethereum: { - tvl, + tvl: sdk.util.sumChainTvls([tvl, fuseTvl]), pool2: pool2(rariGovernanceTokenUniswapDistributorAddress, RGTETHSushiLPTokenAddress), borrowed, }, arbitrum: { // Borrowing is disabled, and Tetranode's locker is the only pool with significant tvl, so counting only that - tvl: getCompoundV2Tvl('0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716', 'arbitrum', undefined, undefined, undefined, false), - borrowed: getCompoundV2Tvl('0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716', 'arbitrum', undefined, undefined, undefined, true), + tvl: getCompoundV2Tvl('0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716', 'arbitrum', undefined, undefined, undefined, false), + borrowed: getCompoundV2Tvl('0xC7D021BD813F3b4BB801A4361Fbcf3703ed61716', 'arbitrum', undefined, undefined, undefined, true), }, hallmarks: [ [1651276800, "FEI hack"], diff --git a/projects/ray/index.js b/projects/ray/index.js index c12790da00..0dffad302e 100644 --- a/projects/ray/index.js +++ b/projects/ray/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); -const ETH_ADDRESS = '0x0000000000000000000000000000000000000000'; -const WETH_ADDRESS = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'; -const SAI_ADDRESS = '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359'; -const DAI_ADDRESS = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; -const USDC_ADDRESS = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; +const ETH_ADDRESS = ADDRESSES.null; +const WETH_ADDRESS = ADDRESSES.ethereum.WETH; +const SAI_ADDRESS = ADDRESSES.ethereum.SAI; +const DAI_ADDRESS = ADDRESSES.ethereum.DAI; +const USDC_ADDRESS = ADDRESSES.ethereum.USDC; const tokenAddresses = [ ETH_ADDRESS, diff --git a/projects/raydium.js b/projects/raydium.js index 95f62d1967..972f9f94e7 100644 --- a/projects/raydium.js +++ b/projects/raydium.js @@ -1,24 +1,53 @@ -const { get } = require("./helper/http"); -const sdk = require("@defillama/sdk"); +const { getConnection, sumTokens2, decodeAccount, getValidGeckoSolTokens, sumTokens, } = require("./helper/solana"); +const { PublicKey, } = require("@solana/web3.js"); +const sdk = require('@defillama/sdk') -async function fetch() { - const response = await get("https://api.raydium.io/pairs"); - return response.reduce((a, b) => { - if ( - [ - "5UCve2rYxMTe2xyCoqREsMXoTCCqr57XpnDsPq45r9dc", - "7MeQyLVRr4FL2aDFm9R6WBchdWJaMgNJCqhzbwziCPd8", - ].includes(b.amm_id) - ) - return a; - if (b.liquidity > 1e8) sdk.log(b); - return a + b.liquidity; - }, 0); +const CLMM = 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK' +const AmmV4 = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8' +const AmmStable = '5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h' + +async function ammStableTvl() { + const connection = getConnection() + const accounts = await connection.getProgramAccounts(new PublicKey(AmmStable), { + filters: [{ + dataSize: 1232 + }] + }) + const data = accounts.map(i => decodeAccount('raydiumLPStable', i.account)) + const tokenAccounts = data.map(i => [i.baseVault, i.quoteVault]).flat().map(i => i.toString()) + return sumTokens2({ tokenAccounts }) +} + +async function tvlCLMM() { + const connection = getConnection() + const accounts = await connection.getProgramAccounts(new PublicKey(CLMM), { + filters: [{ + dataSize: 1544 + }] + }) + const data = accounts.map(i => decodeAccount('raydiumCLMM', i.account)) + const tokenAccounts = data.map(i => [i.vaultA, i.vaultB]).flat().map(i => i.toString()) + return sumTokens2({ tokenAccounts }) +} + + +async function ammV4Tvl() { + const owner = '5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1' + return sumTokens2({ owner, tokens: [...await getValidGeckoSolTokens()], blacklistedTokens: [ + '674PmuiDtgKx3uKuJ1B16f9m5L84eFvNwj3xDMvHcbo7', // $WOOD + 'SNSNkV9zfG5ZKWQs6x4hxvBRV6s8SqMfSGCtECDvdMd', // SNS + 'A7rqejP8LKN8syXMr4tvcKjs2iJ4WtZjXNs1e6qP3m9g', // ZION + 'RdFHYW7mPJouuSpb5vEzUfbHeQedmQMuCoHN4VQkUDn', // LUCHOW + 'RFn7mUjf24UFMBdDVmoggAii4gyHdRDDqmKzGVbkd8c', // FOUR + 'FTD9EisrsMt5TW5wSTMqyXLh2o7xTb6KNuTiXgHhw8Q8', // POLYPLAY + ]}) } module.exports = { - hallmarks: [[1667865600, "FTX collapse"]], timetravel: false, - fetch, -}; -// node test.js projects/raydium.js + hallmarks: [[1667865600, "FTX collapse"]], + solana: { + tvl: sdk.util.sumChainTvls([tvlCLMM, ammStableTvl, ammV4Tvl]), + staking: () => sumTokens2({ tokenAccounts: ['8tnpAECxAT9nHBqR1Ba494Ar5dQMPGhL31MmPJz1zZvY']}) + }, +}; \ No newline at end of file diff --git a/projects/realt.js b/projects/realt.js index 9f07e1d089..e5d501ff7e 100644 --- a/projects/realt.js +++ b/projects/realt.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk") const BigNumber = require("bignumber.js") const { getConfig } = require('./helper/cache') // Loop through all RealT tokens listed by realt.community API and accumulate tokenprice * supply, where supply is biggest of xdai or mainnet // See https://api.realt.community/ for reference -const xdai_usdc = 'xdai:0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83' +const xdai_usdc = 'xdai:' + ADDRESSES.xdai.USDC async function xdaiTvl(timestamp, block, chainBlocks) { let realt_tokens = await getConfig('realt', 'https://api.realt.community/v1/token') diff --git a/projects/reax-one-dex/index.js b/projects/reax-one-dex/index.js new file mode 100644 index 0000000000..43fd2f353a --- /dev/null +++ b/projects/reax-one-dex/index.js @@ -0,0 +1,14 @@ +const { onChainTvl } = require('../helper/balancer') + +module.exports = { + mantle: { + tvl: onChainTvl('0x1AA7f1f5b51fe22478e683466232B5C8fc49407f', 10790, { + blacklistedTokens: [ + '0xf7dfe223e19701a514e78f3ce7ba98f2c5fbb5b2', + '0xa84bdecd44e6cee1c588a3c97fcc4482831fde05', + '0x62959ad021402f48d0d8067bc5c4c03f63fceaa4', + '0x8348b81b9ed72f29e52027c349f30703b42c0110' + ] + }), + } +} diff --git a/projects/reax-one-lending/index.js b/projects/reax-one-lending/index.js new file mode 100644 index 0000000000..0ed1782c2f --- /dev/null +++ b/projects/reax-one-lending/index.js @@ -0,0 +1,7 @@ +const { aaveV2Export } = require('../helper/aave.js'); + +module.exports = { + mantle: aaveV2Export('0x4bbea708f4e48eb0bb15e0041611d27c3c8638cf', { abis: { + "getReserveData": "function getReserveData(address asset) view returns (tuple(tuple(uint256 data) configuration, uint128 liquidityIndex, uint128 currentLiquidityRate, uint128 variableBorrowIndex, uint128 currentVariableBorrowRate, uint128 currentStableBorrowRate, uint40 lastUpdateTimestamp, uint16 id, address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, uint128 accruedToTreasury, uint128 unbacked, uint128 isolationModeTotalDebt))" + } }) +} diff --git a/projects/reax-one-synth/index.js b/projects/reax-one-synth/index.js new file mode 100644 index 0000000000..ed44820be5 --- /dev/null +++ b/projects/reax-one-synth/index.js @@ -0,0 +1,15 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + mantle: { + tvl: sumTokensExport({ + owner: '0x78B2fa94A94bF3E96fcF9CE965bed55bE49FA9E7', + tokens: [ + '0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111', + '0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE', + '0xCAbAE6f6Ea1ecaB08Ad02fE02ce9A44F09aebfA2', + '0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8' + ] + }), + } +} diff --git a/projects/redacted/index.js b/projects/redacted/index.js index c8cb5c7b81..01745540a4 100644 --- a/projects/redacted/index.js +++ b/projects/redacted/index.js @@ -1,16 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners, unwrapUniswapV3NFTs, genericUnwrapCvx } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') const { BigNumber } = require('ethers') const treasuries = ["0xa52fd396891e7a74b641a2cb1a6999fcf56b077e", "0x086c98855df3c78c6b481b6e1d47bef42e9ac36b"] -const CVXLocker = '0x72a19342e8f1838460ebfccef09f6585e32db86e' const cvxCRVStaking = '0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e' -const CVX = '0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b' -const cvxCRV = '0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7' +const CVX = ADDRESSES.ethereum.CVX +const cvxCRV = ADDRESSES.ethereum.cvxCRV const FXS = '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0' const veFXS = '0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0' -const CRV = '0xD533a949740bb3306d119CC777fa900bA034cd52' +const CRV = ADDRESSES.ethereum.CRV const veCRV = '0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2' const sOHM = '0x04906695D6D12CF5459975d7C3C03356E4Ccd460' const OHM = '0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5' @@ -19,7 +19,6 @@ const AURALocker = '0x3Fa73f1E5d8A792C80F426fc8F84FBF7Ce9bBCAC' const rlBTRFLY = '0x742B70151cd3Bc7ab598aAFF1d54B90c3ebC6027' const BTRFLYV2 = '0xc55126051B22eBb829D00368f4B12Bde432de5Da' const cvxCRVPool = '0x0392321e86F42C2F94FBb0c6853052487db521F0' -const cvxFXSPool = '0xf27AFAD0142393e4b3E5510aBc5fe3743Ad669Cb' const rlBTRFLYAbi = { lockedSupply: "uint256:lockedSupply", @@ -37,10 +36,8 @@ async function tvl(timestamp, block, chainBlocks){ [AURA, false], // BTRFLY/ETH Curve LP ['0x7483Dd57f6488b0e194A151C57Df6Ec85C00aCE9', false], - // USDC - ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', false], - // FRAX - ['0x853d955aCEf822Db058eb8505911ED77F175b99e', false], + [ADDRESSES.ethereum.USDC, false], + [ADDRESSES.ethereum.FRAX, false], ], treasuries, block) //Add UniswapV3 LPs @@ -54,7 +51,7 @@ async function tvl(timestamp, block, chainBlocks){ //Add vlCVX as CVX const vlCVXBalance = await sdk.api.erc20.balanceOf({ - target: CVXLocker, + target: ADDRESSES.ethereum.vlCVX, owner: treasuries[0], chain: 'ethereum', block: chainBlocks['ethereum'] diff --git a/projects/redbees/index.js b/projects/redbees/index.js deleted file mode 100644 index a62de818f3..0000000000 --- a/projects/redbees/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const {masterChefExports} = require("../helper/masterchef"); - -const token = "0xb6dd76ce852ff1b23cd8fe21aabb001a5a710a00"; -const masterchef = "0x2A807C49e506457D76ce3eBbD716fB2980AF6c79"; - -module.exports = { - ...masterChefExports(masterchef, "avax", token, false) -} \ No newline at end of file diff --git a/projects/reflexer/index.js b/projects/reflexer/index.js index 96390f0d46..8c696fd367 100644 --- a/projects/reflexer/index.js +++ b/projects/reflexer/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -10,7 +11,7 @@ const sdk = require("@defillama/sdk"); async function tvl(timestamp, block) { // WETH ERC20 contract - const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; + const weth = ADDRESSES.ethereum.WETH; // Contract holding all of the WETH balance in the system const ethCollateralJoin = "0x2D3cD7b81c93f188F3CB8aD87c8Acc73d6226e3A"; diff --git a/projects/rehold-v2/index.js b/projects/rehold-v2/index.js new file mode 100644 index 0000000000..d42de3b034 --- /dev/null +++ b/projects/rehold-v2/index.js @@ -0,0 +1,24 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { covalentGetTokens } = require('../helper/http') + +const VAULT_V2 = '0xde6b4964c4384bcdfa150a4a8be9865c5b91e29c'; + +async function tvl(_, _b, _cb, { api, }) { + const tokens = await covalentGetTokens(VAULT_V2, api.chain) + + return sumTokens2({ + api, + owner: VAULT_V2, + tokens, + blacklistedTokens: ['0x594f9274e08ba6c5760bacfba795b1879af17255'], + }); +} + +module.exports = { + ethereum: { tvl }, + bsc: { tvl }, + polygon: { tvl }, + avax: { tvl }, + arbitrum: { tvl }, + optimism: { tvl }, +}; diff --git a/projects/relayChain/index.js b/projects/relayChain/index.js index bc653ae613..9ad5a62559 100644 --- a/projects/relayChain/index.js +++ b/projects/relayChain/index.js @@ -1,56 +1,57 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getChainTransform } = require('../helper/portedTokens'); const { sumTokens } = require('../helper/unwrapLPs') -const usdtEth = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; -const daiEth = "0x6b175474e89094c44da98b954eedeac495271d0f"; -const wbtcEth = "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"; -const usdcEth = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; -const wethEth = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const usdtEth = ADDRESSES.ethereum.USDT; +const daiEth = ADDRESSES.ethereum.DAI; +const wbtcEth = ADDRESSES.ethereum.WBTC; +const usdcEth = ADDRESSES.ethereum.USDC; +const wethEth = ADDRESSES.ethereum.WETH; const relayEth = "0x5D843Fa9495d23dE997C394296ac7B4D721E841c"; const xcasEth = "0x7659CE147D0e714454073a5dd7003544234b6Aa0"; -const trueUSDEth = "0x0000000000085d4780B73119b644AE5ecd22b376"; +const trueUSDEth = ADDRESSES.ethereum.TUSD; const zeroEth = "0xF0939011a9bb95c3B791f0cb546377Ed2693a574"; const dxpEth="0x88aa4a6C5050b9A1b2Aa7e34D0582025cA6AB745"; -const usdtBsc = "0x55d398326f99059fF775485246999027B3197955"; +const usdtBsc = ADDRESSES.bsc.USDT; const daiBsc = "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3"; -const usdcBsc = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"; -const busdBsc = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; -const ethBsc = "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"; -const wbnbBsc = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; +const usdcBsc = ADDRESSES.bsc.USDC; +const busdBsc = ADDRESSES.bsc.BUSD; +const ethBsc = ADDRESSES.bsc.ETH; +const wbnbBsc = ADDRESSES.bsc.WBNB; const relayBsc = "0xE338D4250A4d959F88Ff8789EaaE8c32700BD175"; -const daiAvax = "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70"; -const wavax = "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"; +const daiAvax = ADDRESSES.avax.DAI; +const wavax = ADDRESSES.avax.WAVAX; const wbtcAvax = "0x50b7545627a5162F82A992c33b87aDc75187B218"; -const usdcAvax = "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664"; -const usdtAvax = "0xc7198437980c041c805A1EDcbA50c1Ce5db95118"; +const usdcAvax = ADDRESSES.avax.USDC_e; +const usdtAvax = ADDRESSES.avax.USDT_e; -const wHeco = "0x5545153CCFcA01fbd7Dd11C0b23ba694D9509A6F"; +const wHeco = ADDRESSES.heco.WHT; const wbtcHeco = "0x66a79D23E58475D2738179Ca52cd0b41d73f0BEa"; const ethHeco = "0x64FF637fB478863B7468bc97D30a5bF3A428a1fD"; -const usdcHeco = "0x9362Bbef4B8313A8Aa9f0c9808B80577Aa26B73B"; -const daiHeco = "0x3D760a45D0887DFD89A2F5385a236B29Cb46ED2a"; +const usdcHeco = ADDRESSES.heco.USDC_HECO; +const daiHeco = ADDRESSES.heco.DAI_HECO; const husdHeco = "0x0298c2b32eaE4da002a15f36fdf7615BEa3DA047"; const miMatic = "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1"; -const wmatic = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; -const wethMatic = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619"; -const wbtcMatic = "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6"; -const usdcMatic = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; -const daiMatic = "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063"; -const usdtMatic = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"; +const wmatic = ADDRESSES.polygon.WMATIC_2; +const wethMatic = ADDRESSES.polygon.WETH_1; +const wbtcMatic = ADDRESSES.polygon.WBTC; +const usdcMatic = ADDRESSES.polygon.USDC; +const daiMatic = ADDRESSES.polygon.DAI; +const usdtMatic = ADDRESSES.polygon.USDT; -const usdtMoonriver = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; +const usdtMoonriver = ADDRESSES.moonriver.USDT; const daiMoonriver = "0x80A16016cC4A2E6a2CACA8a4a498b1699fF0f844"; -const usdcMoonriver = "0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D"; +const usdcMoonriver = ADDRESSES.moonriver.USDC; const wbtcMoonriver = "0xE6a991Ffa8CfE62B0bf6BF72959A3d4f11B2E0f5"; const wethMoonriver = "0x3Ca3fEFA944753b43c751336A5dF531bDD6598B6"; const relayMoonriver = "0xAd7F1844696652ddA7959a49063BfFccafafEfe7"; @@ -59,9 +60,9 @@ const wMOVR = "0x98878B06940aE243284CA214f92Bb71a2b032B8A"; const usdtFantom = "0x1B27A9dE6a775F98aaA5B90B62a4e2A0B84DbDd9"; const relayFantom = "0x338003E074DabFec661E1901bdB397aF9Cab6A76"; -const daiFantom = "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e"; -const usdcFantom = "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75"; -const wFantom = "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"; +const daiFantom = ADDRESSES.fantom.DAI; +const usdcFantom = ADDRESSES.fantom.USDC; +const wFantom = ADDRESSES.fantom.WFTM; const btcFantom = "0x321162Cd933E2Be498Cd2267a90534A804051b11"; @@ -70,59 +71,59 @@ const relayHarmony = "0x0e4d3a20b757cea2a0910129991b9d42cc2be188"; const daiHarmony = "0xEf977d2f931C1978Db5F6747666fa1eACB0d0339"; const usdcHarmony = "0x985458e523db3d53125813ed68c274899e9dfab4"; const busdHarmony = "0xe176ebe47d621b984a73036b9da5d834411ef734"; -const woneOne = "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a"; +const woneOne = ADDRESSES.harmony.WONE; const wsdnShiden = "0x1a6a12953d5439e8965d94d3d8452464fbd53e30"; -const usdtShiden = "0x818ec0A7Fe18Ff94269904fCED6AE3DaE6d6dC0b"; -const usdcShiden = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f"; -const busdShiden = "0x65e66a61d0a8f1e686c2d6083ad611a10d84d97a"; +const usdtShiden = ADDRESSES.telos.USDC; +const usdcShiden = ADDRESSES.telos.ETH; +const busdShiden = ADDRESSES.shiden.BUSD; -const usdcMetis = "0xea32a96608495e54156ae48931a7c20f0dcc1a21"; -const usdtMetis = "0xbb06dca3ae6887fabf931640f67cab3e3a16f4dc"; -const relayMetis = "0xfe282Af5f9eB59C30A3f78789EEfFA704188bdD4"; -const maticMetis = "0x4b9D2923D875edF43980BF5dddDEde3Fb20fC742"; +const usdcMetis = ADDRESSES.metis.m_USDC; +const usdtMetis = ADDRESSES.metis.m_USDT; +const relayMetis = ADDRESSES.metis.RELAY; +const maticMetis = ADDRESSES.metis.MATIC; const mimMetis = "0x44Dd7C98885cD3086E723B8554a90c9cC4089C4C"; -const ftmMetis = "0x6aB6d61428fde76768D7b45D8BFeec19c6eF91A8" -const metis = "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000"; -const wbtcMetis = "0xa5B55ab1dAF0F8e1EFc0eB1931a957fd89B918f4"; -const avaxMetis = "0xE253E0CeA0CDD43d9628567d097052B33F98D611"; -const daiMetis = "0x4651B38e7ec14BB3db731369BFE5B08F2466Bd0A"; +const ftmMetis = ADDRESSES.oasis.USDT +const metis = ADDRESSES.metis.Metis; +const wbtcMetis = ADDRESSES.metis.WBTC; +const avaxMetis = ADDRESSES.metis.rAVAX; +const daiMetis = ADDRESSES.metis.DAI; const mdaiMetis="0x4c078361FC9BbB78DF910800A991C7c3DD2F6ce0"; -const usdtCronos = "0x66e428c3f67a68878562e79A0234c1F83c208770"; +const usdtCronos = ADDRESSES.cronos.USDT; const daiCronos = "0xF2001B145b43032AAF5Ee2884e456CCd805F677D"; -const usdcCronos = "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59"; -const wbtcCronos = "0x062e66477faf219f25d27dced647bf57c3107d52"; +const usdcCronos = ADDRESSES.cronos.USDC; +const wbtcCronos = ADDRESSES.cronos.WBTC; const wethCronos = "0xe44fd7fcb2b1581822d0c862b68222998a0c299a"; const relayCronos = "0x9C29650a1B273A031A35F3121914aae882B144A4"; -const busdCronos = "0x6aB6d61428fde76768D7b45D8BFeec19c6eF91A8"; +const busdCronos = ADDRESSES.oasis.USDT; const wCronos = "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23"; -const usdtIoTex = "0x6fbCdc1169B5130C59E72E51Ed68A84841C98cd1"; -const daiIoTex = "0x1CbAd85Aa66Ff3C12dc84C5881886EEB29C1bb9b"; -const usdcIoTex = "0x3B2bf2b523f54C4E454F08Aa286D03115aFF326c"; -const busdIoTex = "0xacee9b11cd4b3f57e58880277ac72c8c41abe4e4"; -const wIotex = "0xa00744882684c3e4747faefd68d283ea44099d03"; +const usdtIoTex = ADDRESSES.iotex.ioUSDT; +const daiIoTex = ADDRESSES.iotex.ioDAI; +const usdcIoTex = ADDRESSES.iotex.ioUSDC; +const busdIoTex = ADDRESSES.iotex.ioBUSD; +const wIotex = ADDRESSES.iotex.WIOTX; -const usdtOptimism = "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58"; -const daiOptimism = "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"; +const usdtOptimism = ADDRESSES.optimism.USDT; +const daiOptimism = ADDRESSES.optimism.DAI; const wbtcOptimism = "0x68f180fcCe6836688e9084f035309E29Bf0A2095"; -const wbtcArbitrum = "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f"; -const usdtArbitrum = "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"; -const daiArbitrum = "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"; +const wbtcArbitrum = ADDRESSES.arbitrum.WBTC; +const usdtArbitrum = ADDRESSES.arbitrum.USDT; +const daiArbitrum = ADDRESSES.optimism.DAI; @@ -170,7 +171,7 @@ async function ethTvl(timestamp, ethBlock) { }) tokenBalance = (await sdk.api.eth.getBalance({ target: eth1Addr })).output; - sdk.util.sumSingleBalance(balances, "ethereum:" + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", tokenBalance) + sdk.util.sumSingleBalance(balances, "ethereum:" + ADDRESSES.ethereum.WETH, tokenBalance) return sumTokens(balances, toa, ethBlock) } diff --git a/projects/ren/index.js b/projects/ren/index.js index fc9c935264..3ce3d800d7 100644 --- a/projects/ren/index.js +++ b/projects/ren/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { request, gql } = require("graphql-request"); const sdk = require("@defillama/sdk"); const { getTokenSupply } = require('../helper/solana') @@ -96,7 +97,7 @@ async function polygon(timestamp, ethBlock, chainBlocks) { async function arbitrum(timestamp, ethBlock, chainBlocks) { return { "0xeb4c2781e4eba804ce9a9803c67d0893436bb27d": (await sdk.api.erc20.totalSupply({ - target: "0xdbf31df14b66535af65aac99c32e9ea844e14501", + target: ADDRESSES.fantom.renBTC, chain: "arbitrum", block: chainBlocks.arbitrum })).output diff --git a/projects/reserve/index.js b/projects/reserve/index.js index d55e2e50cb..b5fea0f3d3 100644 --- a/projects/reserve/index.js +++ b/projects/reserve/index.js @@ -1,18 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getLogs } = require('../helper/cache/getLogs') -const { sumTokens2 } = require("../helper/unwrapLPs.js"); +const { sumTokens2, genericUnwrapCvxDeposit, unwrapCreamTokens } = require("../helper/unwrapLPs.js"); const vault = "0xaedcfcdd80573c2a312d15d6bb9d921a01e4fb0f"; -const deployerAddress = "0xFd6CC4F251eaE6d02f9F7B41D1e80464D3d2F377"; +const deployerAddresses = ["0xFd6CC4F251eaE6d02f9F7B41D1e80464D3d2F377", "0x5c46b718Cd79F2BBA6869A3BeC13401b9a4B69bB"]; const rsr = "0x320623b8E4fF03373931769A31Fc52A4E78B5d70"; async function tvl(_time, block, _, { api }) { // First section is for RSV which will soon be deprecated const ownerTokens = [[[ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", //usdc + ADDRESSES.ethereum.USDC, //usdc "0x8e870d67f660d95d5be530380d0ec0bd388289e1", //pax - "0x0000000000085d4780B73119b644AE5ecd22b376", //tusd - "0x4Fabb145d64652a948d72533023f6E7A623C7C53", //busd + ADDRESSES.ethereum.TUSD, //tusd + ADDRESSES.ethereum.BUSD, //busd ], vault]] + const blacklistedTokens = [rsr] + const fluxListWithOwner = [] const creationLogs = await _getLogs(api) const mains = creationLogs.map(i => i.main) @@ -21,18 +24,39 @@ async function tvl(_time, block, _, { api }) { const backingManagers = await api.multiCall({ abi: 'address:backingManager', calls: mains }) const basketHandlers = await api.multiCall({ abi: 'address:basketHandler', calls: mains }) const basketRes = await api.multiCall({ abi: "function quote(uint192, uint8) view returns (address[], uint256[])", calls: basketHandlers.map(i => ({ target: i, params: [0, 0] })) }) - const basketTokens = await Promise.all(basketRes.map(async ([tokens]) => { - const aTokens = await api.multiCall({ abi: 'address:ATOKEN', calls: tokens }) - aTokens.forEach((v, i) => v && ownerTokens.push([[v], tokens[i]])) - return tokens.filter((_, i) => !aTokens[i]) + await Promise.all(basketRes.map(async ([tokens], idx) => { + const rToken = rTokens[idx] + const manager = backingManagers[idx] + const names = await api.multiCall({ abi: 'string:name', calls: tokens, }) + + // handle Atokens + const aTokenBases = tokens.filter((_, i) => names[i].startsWith('Static ')) + tokens = tokens.filter((_, i) => !names[i].startsWith('Static ')) + const aTokens = await api.multiCall({ abi: 'address:ATOKEN', calls: aTokenBases}) + blacklistedTokens.push(...aTokenBases) + aTokens.forEach((v, i) => ownerTokens.push([[v], aTokenBases[i]])) + + // handle flux and convex deposit tokens + const baseTokens = tokens.filter((_, i) => names[i].endsWith('Convex Deposit')) + const fluxTokens = tokens.filter((_, i) => names[i].startsWith('Flux ')) + blacklistedTokens.push(...baseTokens) + blacklistedTokens.push(...fluxTokens) + tokens = tokens.filter((_, i) => !names[i].endsWith('Convex Deposit')) + tokens = tokens.filter((_, i) => !names[i].startsWith('Flux ')) + fluxTokens.forEach(token => { + fluxListWithOwner.push([token, rToken]) + fluxListWithOwner.push([token, manager]) + }) + // Update lpBalances for Curve tokens + await Promise.all(baseTokens.map((token) => genericUnwrapCvxDeposit({ api, token, owner: rToken }))) + await Promise.all(baseTokens.map((token) => genericUnwrapCvxDeposit({ api, token, owner: manager }))) + + ownerTokens.push([tokens, rToken]) + ownerTokens.push([tokens, manager]) })) - basketTokens.forEach((tokens, i) => { - ownerTokens.push([tokens, rTokens[i]]) - // ownerTokens.push([tokens, stRsrs[i]]) - ownerTokens.push([tokens, backingManagers[i]]) - }) + await unwrapCreamTokens(api.getBalances(), fluxListWithOwner, block) - return sumTokens2({ api, ownerTokens, blacklistedTokens: [rsr] }) + await sumTokens2({ api, ownerTokens, blacklistedTokens }) } async function staking(_time, block, _, { api }) { @@ -42,14 +66,16 @@ async function staking(_time, block, _, { api }) { } async function _getLogs(api) { - return getLogs({ - api, - target: deployerAddress, - topic: 'RTokenCreated(address,address,address,address,string)', - fromBlock: 16680995, - eventAbi: 'event RTokenCreated(address indexed main, address indexed rToken, address stRSR, address indexed owner, string version)', - onlyArgs: true, - }) + const resLog = (await Promise.all(deployerAddresses.map(deployerAddress => + getLogs({ + api, + target: deployerAddress, + topic: 'RTokenCreated(address,address,address,address,string)', + fromBlock: 16680995, + eventAbi: 'event RTokenCreated(address indexed main, address indexed rToken, address stRSR, address indexed owner, string version)', + onlyArgs: true, + })))).flat() + return resLog } module.exports = { diff --git a/projects/resonatefinance/index.js b/projects/resonatefinance/index.js new file mode 100644 index 0000000000..59c95a45ad --- /dev/null +++ b/projects/resonatefinance/index.js @@ -0,0 +1,41 @@ +const sdk = require('@defillama/sdk'); +const axios = require('axios'); + + +//Full Calculations for computing TVL for Resonate Finance is done internally by Resonate and exposed via API +//API Endpoint: https://api.resonate.finance/{chainId}/tvl +//https://github.com/Revest-Finance/railway-monorepo/blob/main/src/api.ts", +async function tvl(_, _1, _2, { api }) { + let usdValue = 0; + do { + const {data, success} = await axios.get(`https://api.resonate.finance/${api.chainId}/tvl`); + usdValue = data; + } while (usdValue == 0) + + return { + tether: usdValue, + }; +} + +module.exports = { + methodology: "We sum all the tokens deposited as principal and any unclaimed interest accrued on it.", + hallmarks: [ + [1682438400, "Launch of Regen Portal"], + [1687276800, "Launch of Frax Portal"] + ], + ethereum: { + tvl + }, + polygon: { + tvl + }, + optimism: { + tvl + }, + arbitrum: { + tvl + }, + fantom: { + tvl + }, + }; diff --git a/projects/retro/index.js b/projects/retro/index.js new file mode 100644 index 0000000000..990098bbd7 --- /dev/null +++ b/projects/retro/index.js @@ -0,0 +1,8 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + polygon: { + factory: "0x91e1B99072f238352f59e58de875691e20Dc19c1", + fromBlock: 43939793, + }, +}); diff --git a/projects/revert-v3-staker/index.js b/projects/revert-v3-staker/index.js index 836fd83f96..9a0b4d58b5 100644 --- a/projects/revert-v3-staker/index.js +++ b/projects/revert-v3-staker/index.js @@ -3,10 +3,14 @@ const { unwrapUniswapV3NFTs } = require('../helper/unwrapLPs') const config = { polygon: { owners: ['0x8c696deF6Db3104DF72F7843730784460795659a'] + }, + evmos: { + owners: ['0x3eb0fffa1470cdd3725b9eb29aded2736144b078'] } } module.exports = { + doublecounted: true }; Object.keys(config).forEach(chain => { diff --git a/projects/revest/index.js b/projects/revest/index.js index 1b788513fc..78e3638a45 100644 --- a/projects/revest/index.js +++ b/projects/revest/index.js @@ -1,21 +1,49 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require("../helper/unwrapLPs") const { covalentGetTokens, } = require("../helper/http") const { getUniqueAddresses } = require('../helper/utils') +const sdk = require("@defillama/sdk"); + +const CutoffABI = "function FNFT_CUTOFF() external view returns (uint256)" +const numFNFTSABI = "function fnftsCreated() external view returns (uint256)" +const getFNFTSupplyABI = "function getSupply(uint256 fnftId) external view returns (uint256)" +const getFNFTConfigABI = "function getFNFT(uint256 fnftId) external view returns (tuple(address asset,,,,,,,) memory)" +const balanceOfABI = "function balanceOf(address account) view returns (uint256)" +const getWalletABI = "function getFNFTAddress(uint256 fnftId) external view returns (address)" + +const ZERO_ADDRESS = ADDRESSES.null const config = { ethereum: { holder: '0xA81bd16Aa6F6B25e66965A2f842e9C806c0AA11F', revest: '0x120a3879da835a5af037bb2d1456bebd6b54d4ba', + tokenVaultV2: '0xD672f1E3411c23Edbb49e8EB6C6b1564b2BF8E17', + fnftHandler: '0xa07E6a51420EcfCB081917f40423D29529705e8a' }, polygon: { holder: '0x3cCc20d960e185E863885913596b54ea666b2fe7', + tokenVaultV2: '0xd2c6eB7527Ab1E188638B86F2c14bbAd5A431d78', + fnftHandler: '0x6c111d0b0c5f6577de586f7df262f15a6741ddb7' }, fantom: { holder: '0x3923E7EdBcb3D0cE78087ac58273E732ffFb82cf', + tokenVaultV2: '0x0ca61c96d1E0bE5F80f4773be367f4bF2025f224', + fnftHandler: '0xA6f5efC3499d41fF1Eca9d325cfe13C913a85F45' }, avax: { holder: '0x955a88c27709a1EEf4ACa0df0712c67B48240919', + fnftHandler: '0xd6E44901Ee92c85D7f019BdaF05cbD779f36Edaa' + }, + optimism: { + tokenVaultV2: '0x490867a64746AC33f721A778dD8C30BBb0074055', + fnftHandler: '0xA002Dc3E3C163732F4F5e6F941C87b61B5Afca74', + holder: '0x490867a64746AC33f721A778dD8C30BBb0074055' }, + arbitrum: { + tokenVaultV2: '0x209F3F7750d4CC52776e3e243717b3A8aDE413eB', + fnftHandler: '0xd90D465631a1718FDB3eA64C39F41290Addf70da', + holder: '0x209F3F7750d4CC52776e3e243717b3A8aDE413eB' + } } module.exports = { @@ -25,22 +53,195 @@ module.exports = { methodology: "We list all tokens in our vault and sum them together", }; - Object.keys(config).forEach(chain => { - const { holder, revest, } = config[chain] + const { holder, revest, tokenVaultV2, fnftHandler} = config[chain] module.exports[chain] = { tvl: async (_, _b, _1, { api }) => { + let balances = {} + const blacklist = [] if (revest) blacklist.push(revest.toLowerCase()) + blacklist.push(ZERO_ADDRESS.toLowerCase()) + + let owners = [] + + if (tokenVaultV2 != null) { + + let info = await api.batchCall([ + { + target: tokenVaultV2, + abi: CutoffABI, + chain: chain + }, + { + target: fnftHandler, + abi: numFNFTSABI, + chain: chain + } + ]) + + let cutoff = Number(info[0]) + let numFNFTS = Number(info[1]) + + //Build the Multicall to get the supply of each FNFT to check for ones that still exist + let fnftSupplyCalls = [] + for(let x = cutoff; x < numFNFTS; x++) { + fnftSupplyCalls.push({ + target: fnftHandler, + params: x, + }) + } + + //Get the supply of each to determine if an FNFT is still alive by supply > 0 + let fnftSupplys = await sdk.api.abi.multiCall({ + calls: fnftSupplyCalls, + abi: getFNFTSupplyABI, + requery: true, + permitFailure: false, + chain: chain + }) + + //If the FNFT still exists, track it's ID + let aliveFNFTCalls = [] + let aliveFNFTS = {} + fnftSupplys.output.forEach(supply => { + if (supply.output != 0) { + + //Track the supply of the FNFT + aliveFNFTS[supply.input.params[0]] = supply.output + + aliveFNFTCalls.push({ + target: tokenVaultV2, + params: supply.input.params[0], + }) + } + }) + + //Get the asset of the FNFT + let fnftConfigs = await sdk.api.abi.multiCall({ + calls: aliveFNFTCalls, + abi: getFNFTConfigABI, + requery: true, + permitFailure: false, + chain: chain + }) + + + //Link each FNFTId to its underlying token + let tokenAddressesPerFNFT = {} + let walletCalls = [] + fnftConfigs.output.forEach(config => { + if (!blacklist.includes(config.output[0].toLowerCase())) { + tokenAddressesPerFNFT[config.input.params[0]] = config.output[0] + + walletCalls.push({ + target: tokenVaultV2, + params: [config.input.params[0]], + }) + } + + }) + + //Get the wallet for each FNFT + let wallets = await sdk.api.abi.multiCall({ + abi: getWalletABI, + calls: walletCalls, + chain: chain, + requery: true, + permitFailure: false, + }) + + //Prepare Calldata to check the balance of each token in each wallet + let balanceOfMultiCalls = [] + wallets.output.forEach(wallet => { + balanceOfMultiCalls.push({ + target: tokenAddressesPerFNFT[wallet.input.params[0]], + params: wallet.output, + }) + }) + + let multiCallBalances = await sdk.api.abi.multiCall({ + abi: balanceOfABI, + calls: balanceOfMultiCalls, + chain: chain, + requery: true, + permitFailure: false, + }) + + //Record balances, increasing stored amount if necessary + multiCallBalances.output.forEach(balance => { + if (balances[balance.input.target] == undefined) { + balances[balance.input.target] = 0 + } + + balances[balance.input.target] = (Number(balances[balance.input.target]) + Number(balance.output)) + + }) + + } + + //Get values in tokenVaultV1 + owners.push(holder); let tokens = await covalentGetTokens(holder, api.chain) tokens = getUniqueAddresses(tokens).filter(t => !blacklist.includes(t)) // filter out staking and LP tokens - return sumTokens2({ api, owner: holder, tokens, }) + let tokenVaultV1Balances = await sumTokens2({ api, owners: owners, tokens, }) + + //For each key in V1 Balances append to regular balances and return + Object.keys(balances).forEach(key => { + if (tokenVaultV1Balances[key] == undefined) { + tokenVaultV1Balances[`${chain}:${key}`] = 0 + } + tokenVaultV1Balances[`${chain}:${key}`] += balances[key] + }) + return tokenVaultV1Balances; }, } if (revest) module.exports[chain].staking = async (_, _b, _1, { api }) => { - return sumTokens2({ api, owner: holder, tokens: [revest] }) - } -}) + //Get the number of FNFTS for the TokenVaultV2 + let info = await api.batchCall([ + { + target: config[chain].tokenVaultV2, + abi: CutoffABI, + chain: chain + }, + { + target: config[chain].fnftHandler, + abi: numFNFTSABI, + chain: chain + } + ]) + + let cutoff = Number(info[0]) + let numFNFTS = Number(info[1]) + //Build Multicall Data + let calls = [] + for(let x = cutoff; x < numFNFTS; x++) { + calls.push({ + target: config[chain].tokenVaultV2, + params: [x] + }) + } + + //Get the wallet address for each FNFT via multicall + let walletMultiCallList = await sdk.api.abi.multiCall({ + abi: getWalletABI, + calls: calls, + chain: chain, + requery: true, + permitFailure: false + }) + let wallets = [] + walletMultiCallList.output.forEach(wallet => { + // console.log(`output: ${JSON.stringify(wallet)}`) + wallets.push(wallet.output) + }) + + wallets.push(holder); + + //Return the balance of revest in every wallet. + return sumTokens2({ api, owners: wallets, tokens: [revest] }) + } +}) \ No newline at end of file diff --git a/projects/rhea/index.js b/projects/rhea/index.js index 2a70a01c6c..62dd90e398 100644 --- a/projects/rhea/index.js +++ b/projects/rhea/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const KDAI_RHEA_LP = "0x0b8ac02bf51e1c3a809f8f773dd44025c31c4467"; -const KDAI = "0x5c74070fdea071359b86082bd9f9b3deaafbe32b"; +const KDAI = ADDRESSES.klaytn.KDAI; const TREASURY = "0x32F71263CF373d726f4e45286Bbb6935d553E8D0"; const RHEA = "0x0758fb651282581f86316514e8f5021493e9ed83"; const STAKING_ADDR = "0xee0f2e95e69d4246f8267be6d0f2610ce75d993c"; diff --git a/projects/ribbon-earn/index.js b/projects/ribbon-earn/index.js index c14a017761..55a9bbe9ab 100644 --- a/projects/ribbon-earn/index.js +++ b/projects/ribbon-earn/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const abi = require("../ribbon/abi.json") const { sumTokensExport } = require('../helper/unwrapLPs'); @@ -8,8 +9,8 @@ const rearnUSDC = "0x84c2b16FA6877a8fF4F3271db7ea837233DFd6f0"; const rearnstETH = "0xCE5513474E077F5336cf1B33c1347FDD8D48aE8c"; // Ethereum Assets -const usdc = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; -const steth = "0xae7ab96520de3a18e5e111b5eaab095312d7fe84"; +const usdc = ADDRESSES.ethereum.USDC; +const steth = ADDRESSES.ethereum.STETH; async function addVaults({ balances, chain, vaults, block, transformAddress = a => a }) { const { output: balanceRes } = await sdk.api.abi.multiCall({ diff --git a/projects/ribbon/evm.js b/projects/ribbon/evm.js index f6fe4c9364..1d8c5385ea 100644 --- a/projects/ribbon/evm.js +++ b/projects/ribbon/evm.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { staking } = require("../helper/staking"); @@ -37,26 +38,26 @@ const pauserAvax = "0xf08d6a9c2C5a2Dc9B8645c5Ac0b529D4046D19aa"; const rearnUSDC = "0x84c2b16FA6877a8fF4F3271db7ea837233DFd6f0"; // Ethereum Assets -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; -const wbtc = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; -const usdc = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; -const aave = "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9"; +const weth = ADDRESSES.ethereum.WETH; +const wbtc = ADDRESSES.ethereum.WBTC; +const usdc = ADDRESSES.ethereum.USDC; +const aave = ADDRESSES.ethereum.AAVE; const perp = "0xbC396689893D065F41bc2C6EcbeE5e0085233447"; const ape = "0x4d224452801ACEd8B2F0aebE155379bb5D594381"; const bal = "0xba100000625a3754423978a60c9317c58a424e3D"; -const reth = "0xae78736Cd615f374D3085123A210448E74Fc6393"; -const steth = "0xae7ab96520de3a18e5e111b5eaab095312d7fe84"; +const reth = ADDRESSES.ethereum.RETH; +const steth = ADDRESSES.ethereum.STETH; const spell = "0x090185f2135308BaD17527004364eBcC2D37e5F6"; const badger = "0x3472A5A71965499acd81997a54BBA8D852C6E53d"; -const wsteth = "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0"; -const ldo = "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32"; +const wsteth = ADDRESSES.ethereum.WSTETH; +const ldo = ADDRESSES.ethereum.LIDO; const rbnWeth = "0xdb44a4a457c87225b5ba45f27b7828a4cc03c112"; -const uni = "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984"; +const uni = ADDRESSES.ethereum.UNI; // Avalanche Assets -const wavax = "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"; +const wavax = ADDRESSES.avax.WAVAX; const savax = "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE"; -const usdce = "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664"; +const usdce = ADDRESSES.avax.USDC_e; async function addVaults({ balances, chain, vaults, block, transformAddress = a => a }) { const { output: balanceRes } = await sdk.api.abi.multiCall({ @@ -130,7 +131,7 @@ module.exports = { bsc: { tvl: sumTokensExport({ tokensAndOwners: [ - ['0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', '0xC56d5a5BE96B5fB51C2bA5cBC59AfE77198838F7'], // BNB Theta vault + [ADDRESSES.bsc.WBNB, '0xC56d5a5BE96B5fB51C2bA5cBC59AfE77198838F7'], // BNB Theta vault ] }) } diff --git a/projects/ribbon/solana.js b/projects/ribbon/solana.js index b087876043..0dc32a44a6 100644 --- a/projects/ribbon/solana.js +++ b/projects/ribbon/solana.js @@ -1,15 +1,153 @@ -const { get } = require('../helper/http') - -const tvl = async () => { - const vault = await get("https://solana-vault.uc.r.appspot.com/tvl") - - return { - solana: +vault.sol.tvl - }; -}; +const { getProvider, sumTokens2, } = require('../helper/solana') +const { Program, } = require("@project-serum/anchor"); +async function tvl() { + const { api } = arguments[3] + const provider = getProvider() + const program = new Program(idl, 'RBN2XNc6JQU6ewFp9TyPq6WznsvNuumzSJkor1nJFcz', provider) + const vaults = await program.account.vault.all() + const tokenAccounts = vaults.map(({ account: { + underlyingMint, + startEpochVaultBalance, + vaultUnderlyingTokenAccount, + vaultDepositQueueUnderlyingTokenAccount, + vaultWithdrawQueueRedeemableTokenAccount, + } }) => { + api.add(underlyingMint.toString(), +startEpochVaultBalance) + return [vaultUnderlyingTokenAccount, vaultDepositQueueUnderlyingTokenAccount, vaultWithdrawQueueRedeemableTokenAccount] + }).flat().map(i => i.toString()) + return sumTokens2({ balances: api.getBalances(), tokenAccounts, }) +} module.exports = { solana: { tvl, }, }; + +const idl = { + "version": "0.1.0", + "name": "covered_call_vault", + "instructions": [], + "accounts": [ + { + "name": "Vault", + "type": { + "kind": "struct", + "fields": [ + { + "name": "vaultName", + "type": { + "array": [ + "u8", + 20 + ] + } + }, + { + "name": "vaultNonce", + "type": "u8" + }, + { + "name": "redeemableMintNonce", + "type": "u8" + }, + { + "name": "vaultUnderlyingTokenAccountNonce", + "type": "u8" + }, + { + "name": "depositQueueHeaderNonce", + "type": "u8" + }, + { + "name": "vaultDepositQueueUnderlyingTokenAccountNonce", + "type": "u8" + }, + { + "name": "withdrawQueueHeaderNonce", + "type": "u8" + }, + { + "name": "vaultWithdrawQueueRedeemableTokenAccountNonce", + "type": "u8" + }, + { + "name": "underlyingMint", + "type": "publicKey" + }, + { + "name": "redeemableMint", + "type": "publicKey" + }, + { + "name": "vaultUnderlyingTokenAccount", + "type": "publicKey" + }, + { + "name": "vaultDepositQueueUnderlyingTokenAccount", + "type": "publicKey" + }, + { + "name": "vaultWithdrawQueueRedeemableTokenAccount", + "type": "publicKey" + }, + { + "name": "depositLimit", + "type": "u64" + }, + { + "name": "epochSequenceNumber", + "type": "u64" + }, + { + "name": "startEpoch", + "type": "u64" + }, + { + "name": "endDeposits", + "type": "u64" + }, + { + "name": "startSettlement", + "type": "u64" + }, + { + "name": "endEpoch", + "type": "u64" + }, + { + "name": "epochCadence", + "type": "u32" + }, + { + "name": "startEpochVaultBalance", + "type": "u64" + }, + { + "name": "optionMint", + "type": "publicKey" + }, + { + "name": "optionsRemaining", + "type": "bool" + }, + { + "name": "collateralCollected", + "type": "bool" + }, + { + "name": "depositQueueHeader", + "type": "publicKey" + }, + { + "name": "withdrawQueueHeader", + "type": "publicKey" + } + ] + } + } + ], + "types": [], + "events": [], + "errors": [] +} \ No newline at end of file diff --git a/projects/rigoblock/index.js b/projects/rigoblock/index.js new file mode 100644 index 0000000000..7026005543 --- /dev/null +++ b/projects/rigoblock/index.js @@ -0,0 +1,67 @@ +const sdk = require('@defillama/sdk') +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { getUniqueAddresses } = require('../helper/tokenMapping') + +const E_WHITELIST = '0xB43baD2638696F8bC82247B92bD56B8DF37d89aB' +const REGISTRY = '0x06767e8090bA5c4Eca89ED00C3A719909D503ED6' // same on all chains + +module.exports = { + methodology: `Rigoblock TVL on Ethereum, Arbitrum, Optimism and Polygon pulled from onchain data`, +} +const config = { + ethereum: { fromBlock: 15817831, GRG_VAULT_ADDRESSES: '0xfbd2588b170Ff776eBb1aBbB58C0fbE3ffFe1931', GRG_TOKEN_ADDRESSES: '0x4FbB350052Bca5417566f188eB2EBCE5b19BC964', }, + arbitrum: { fromBlock: 32290603, GRG_VAULT_ADDRESSES: '0xE86a667F239A2531C9d398E81154ba125030497e', GRG_TOKEN_ADDRESSES: '0x7F4638A58C0615037deCc86f1daE60E55fE92874', }, + optimism: { fromBlock: 31239008, GRG_VAULT_ADDRESSES: '0x5932C223186F7856e08A1D7b35ACc2Aa5fC57BfD', GRG_TOKEN_ADDRESSES: '0xEcF46257ed31c329F204Eb43E254C609dee143B3', }, + polygon: { fromBlock: 34751673, GRG_VAULT_ADDRESSES: '0xF241De983959A483F376fDC8Ed09DC580BA66109', GRG_TOKEN_ADDRESSES: '0xBC0BEA8E634ec838a2a45F8A43E7E16Cd2a8BA99', }, +} + +Object.keys(config).forEach(chain => { + const { fromBlock, GRG_TOKEN_ADDRESSES, GRG_VAULT_ADDRESSES } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const { pools, tokens } = await getPoolInfo(api) + return sumTokens2({ owners: pools, tokens, api, resolveUniV3: true, blacklistedTokens: [GRG_TOKEN_ADDRESSES] }) + }, + staking: async (_, _b, _cb, { api, }) => { + const { pools, tokens } = await getPoolInfo(api) + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls: pools, target: GRG_VAULT_ADDRESSES }) + bals.forEach(i => api.add(GRG_TOKEN_ADDRESSES, i)) + return sumTokens2({ owners: pools, tokens: [GRG_TOKEN_ADDRESSES], api, resolveUniV3: true, uniV3WhitelistedTokens: [GRG_TOKEN_ADDRESSES] }) + }, + } + + async function getPoolInfo(api) { + const poolKey = `${api.chain}-${api.block}` + if (!poolData[poolKey]) poolData[poolKey] = _getPoolInfo() + return poolData[poolKey] + + async function _getPoolInfo() { + const registeredLogs = await getLogs({ + api, + target: REGISTRY, + fromBlock, + topic: 'Registered(address,address,bytes32,bytes32,bytes32)', + onlyArgs: true, + eventAbi: 'event Registered(address indexed group, address pool, bytes32 indexed name, bytes32 indexed symbol, bytes32 id)' + }) + const whitelistedTokensLogs = await getLogs({ + api, + target: E_WHITELIST, + fromBlock, + topic: 'Whitelisted(address,bool)', + onlyArgs: true, + eventAbi: 'event Whitelisted(address indexed token, bool isWhitelisted)' + }) + const pools = registeredLogs.map(i => i.pool) + let tokens = whitelistedTokensLogs.map(i => i.token) + tokens.push(nullAddress) + // we may have duplicates if a token is first whitelisted than removed + tokens = getUniqueAddresses(tokens) + sdk.log('chain: ', api.chain, 'pools: ', pools.length, 'tokens: ', tokens.length) + return { pools, tokens } + } + } +}) + +const poolData = {} \ No newline at end of file diff --git a/projects/rikkei-finance/index.js b/projects/rikkei-finance/index.js index 048c5c3540..9ce99e76ab 100644 --- a/projects/rikkei-finance/index.js +++ b/projects/rikkei-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require("../helper/compound"); module.exports = { @@ -6,7 +7,7 @@ module.exports = { '0x4f3e801Bd57dC3D641E72f2774280b21d31F64e4', 'bsc', '0x157822aC5fa0Efe98daa4b0A55450f4a182C10cA', - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' + ADDRESSES.bsc.WBNB ) } }; \ No newline at end of file diff --git a/projects/rising-undead/index.js b/projects/rising-undead/index.js new file mode 100644 index 0000000000..37fe07560a --- /dev/null +++ b/projects/rising-undead/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs'); + +const owner = "0xc732471083342a842a728221878327c8DeE8aEDB"; +const tokens = [ + {symbol: "WKAVA", address: ADDRESSES.kava.WKAVA }, + {symbol: "ETH", address: ADDRESSES.moonriver.USDC }, + {symbol: "USDC", address: ADDRESSES.telos.ETH }, + {symbol: "USDT", address: ADDRESSES.moonriver.USDT }, +] + +module.exports = { + kava: { + tvl: sumTokensExport({ owner, tokens: tokens.map(i => i.address)}) + } +} \ No newline at end of file diff --git a/projects/risk-harbor/index.js b/projects/risk-harbor/index.js index bdddf1b61e..22fa805bd9 100644 --- a/projects/risk-harbor/index.js +++ b/projects/risk-harbor/index.js @@ -1,9 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { - queryV1Beta1, queryContract, - getDenomBalance, -} = require("../helper/chain/terra"); + sumTokens: sumTokensCosmos, +} = require("../helper/chain/cosmos"); const { sumTokens, } = require("../helper/unwrapLPs"); const vaultManagerAbi = "address[]:getVaults"; const vaultAbi = 'function self() view returns (tuple(address underwritingToken, uint32 start, uint32 expiration, uint8 underwritingTokenDecimals) config, tuple(tuple(tuple(uint128 numerator, uint128 denominator)[] expectedXVector, tuple(uint128 numerator, uint128 denominator)[] varCovarMatrix, tuple(uint128 numerator, uint128 denominator) lambda) config) amm, tuple(tuple(address standard, address rollover) underwritingPositionERC20, address nextVault, uint56 poolCount, uint32 latestInteraction, bool paused, uint256 premiums, uint256 premiumsAccruedPerShare, uint256 premiumDripBasis, uint256[] allocationVector) state)' @@ -16,48 +16,65 @@ const networks = { vaults: [ // [underwritingAsset, vaultAddress] [ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + ADDRESSES.ethereum.USDC, "0x83944C256e5C057A246aE1b1945934440eb35Af6", ], [ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + ADDRESSES.ethereum.USDC, "0x8D999a2f262FfDA47A734B987D1A15bc984e45Be", ], [ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + ADDRESSES.ethereum.USDC, "0x0881Ec8e0e743906E1c1dFeE8Ae12BfDc0611b24", ], [ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + ADDRESSES.ethereum.USDC, "0x8529687adD661120C9E23E366Cc7F545f1A03ADf", ], [ - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + ADDRESSES.ethereum.USDC, "0x61635d1De721DD1DB35f8aCFD0f1ea367dF65671", ], ], }, arbitrum: { + vaultManager: "0x713C8810F79B4F101f66bB5b5a1326473ae5c7f7", vaults: [ [ - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", + ADDRESSES.arbitrum.USDC, "0x207472891AF32F5636c35d9ca8e17464Df7108bB", ], [ - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", + ADDRESSES.arbitrum.USDC, "0xbcA81A2118982182d897845571BE950aE94C619c", ], [ - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", + ADDRESSES.arbitrum.USDC, "0x2DafE4DD7C661c2CEaf967d51206f5130AA32782", ], + [ + ADDRESSES.arbitrum.USDC, + "0xdd74ee6c6568429537bf30cb63dab0061b83c41a" + ], + [ + ADDRESSES.arbitrum.USDC, + "0xc7c52aa35d499e0c18ff3854f24e65d43c97d5a4" + ], + [ + ADDRESSES.arbitrum.USDC, + "0x695d803207579bb4f34c97ab3e3a449de8ad042e" + ], + [ + ADDRESSES.arbitrum.USDC, + "0x451709e54474a7a7df889e98124180847782cb4a" + ] ], }, avax: { vaultManager: "0xBf8c506a56F355d2340F37a91FA6569737b08254", vaults: [ [ - "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", + ADDRESSES.avax.USDC, "0x2DafE4DD7C661c2CEaf967d51206f5130AA32782", ], [ @@ -66,11 +83,11 @@ const networks = { "0x2DafE4DD7C661c2CEaf967d51206f5130AA32782", ], [ - "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", + ADDRESSES.avax.USDC, "0xBe09C11d28683E283fdf7566DE1685A6A221B6bf", ], [ - "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e", + ADDRESSES.avax.USDC, "0xBe09C11d28683E283fdf7566DE1685A6A221B6bf", ], ], @@ -78,7 +95,7 @@ const networks = { fantom: { vaults: [ [ - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", + ADDRESSES.fantom.USDC, "0xca67B16b02E418CFbC9EF287C7C20B77dbb665f2", ], ], @@ -86,7 +103,7 @@ const networks = { aurora: { vaults: [ [ - "0xb12bfca5a55806aaf64e99521918a4bf0fc40802", + ADDRESSES.aurora.USDC_e, "0x8D999a2f262FfDA47A734B987D1A15bc984e45Be", ], ], @@ -95,11 +112,48 @@ const networks = { vaultManager: "0x7c1187AF4D6B23F7f7682799454168E24bC06EED", vaults: [ [ - "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", + ADDRESSES.optimism.USDC, "0xfB969b45Fa9186CD8B420407552aD447F7c3817b", ], + [ + ADDRESSES.optimism.USDC, + "0x88e7385eacf8e31c9cddce7632bfe654b58f4a09", + ], + [ + ADDRESSES.optimism.USDC, + "0x88e7385eacf8e31c9cddce7632bfe654b58f4a09" + ], + [ + ADDRESSES.optimism.USDC, + "0x01bd59477e03d9034684a118ba67cfa32cd9b123" + ], + [ + ADDRESSES.optimism.USDC, + "0xdf9d37e1a19474e5928fb410a3f8513a25ba680c" + ] + ], }, + polygon: { + vaults: [ + [ + ADDRESSES.polygon.USDC, + "0xdf9d37e1a19474e5928fb410a3f8513a25ba680c" + ], + [ + ADDRESSES.polygon.USDC, + "0xadaab38f3ecdf2b486eb3cab7f54bdcbdfb7fd66" + ], + [ + ADDRESSES.polygon.USDC, + "0x4db26943e581c1befaa5d682f6404de17c028487" + ], + [ + ADDRESSES.polygon.USDC, + "0xa644bdf7f0da0b83623ac4d01607ea91a24b1ede" + ] + ] + }, terra: { vaults: [ "terra1dlfz2teqt5shxuw87npfecjtv7xlrxvqd4sapt", // Ozone v1 pool 1 @@ -107,6 +161,7 @@ const networks = { ], }, terra2: { + wrapped_luna: "terra1ufj34v4agxlazv6gv36fsdm5e8y4kclqgp0qt0l8ureql9pcwssspma238", factory: "terra1lnq5rk4gla2c537hpyxq6wjs8g0k0dedxug2p50myydaqjtm4g5ss94y8n", masterPool: "terra1gz50vgzjssefzmld0kfkt7sfvejgel9znun9chsc82k09xfess5qqu8qyc", // Ozone v2 underwriting master pool @@ -148,69 +203,33 @@ async function getManagedVaults(vaultManager, block, chain) { return res; } -async function terra2(timestamp, ethBlock, chainBlocks) { - const balances = { "terra-luna-2": 0 }; - - const { vaults } = await queryContract({ +async function terra2(timestamp, ethBlock, chainBlocks, { api }) { + const { addresses } = await queryContract({ contract: networks.terra2.factory, - isTerra2: true, + chain: "terra2", data: { get_vaults: {}, }, }); - // Go through each vault and add it's underwriting balance - // stored in allocation_vector slot 0 // 09-28-22 As of now, the only asset supported for deposit // is Luna2 in the form of wrapped Luna2 since RH Ozone v2 does // not support native token types - vaults.forEach((vault) => { - balances["terra-luna-2"] += - parseInt(vault.state.allocation_vector[0]) / 1e6; - }); - - // Query the Master underwriting vault - balances["terra-luna-2"] += - (await getDenomBalance( - "uluna", - networks.terra2.masterPool, - chainBlocks.terra2, - { - isTerra2: true, - } - )) / 1e6; + // For each vault, query its wrapped LUNA2 balance + for (const address of addresses) { + const { balance } = await queryContract({ + contract: networks.terra2.wrapped_luna, + chain: 'terra2', + data: { balance: { address: address } } + }) + api.add('terra-luna-2', balance / 1e6) + } - return balances; + return sumTokensCosmos({ balances: api.getBalances(), owner: networks.terra2.masterPool, chain: "terra2", }) } async function terra(timestamp, ethBlock, chainBlocks) { - const balances = { terrausd: 0 }; - - for (const vaultAddr of networks.terra.vaults) { - let paginationKey; - - do { - const data = await queryV1Beta1( - `bank/v1beta1/balances/${vaultAddr}`, - paginationKey, - chainBlocks.terra - ); - - paginationKey = data.pagination.next_key; - - data.balances.forEach(({ denom, amount }) => { - /** - * 3/10/2022 - As of now the only supported underwriting token for Risk Harbor Ozone is UST, so - * balances should always be an array of length 1. Added support for dynamic balances length, denom checking, and pagination for - * future proofing and safety. - */ - if (denom === "uusd") { - balances["terrausd"] += parseInt(amount) / 1e6; - } - }); - } while (paginationKey); - } - return balances; + return sumTokensCosmos({ owners: networks.terra.vaults, chain: "terra" }); } function evm(chainName) { @@ -262,5 +281,8 @@ module.exports = { optimism: { tvl: evm("optimism"), }, + polygon: { + tvl: evm("polygon"), + }, hallmarks: [[1651881600, "UST depeg"]], }; diff --git a/projects/risq.js b/projects/risq.js index 32670d0633..4a66cec738 100644 --- a/projects/risq.js +++ b/projects/risq.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { transformBscAddress } = require('./helper/portedTokens'); const bnbPool = "0x55D10490C500FBF334C0fD91A0b205a5D64b9367"; //BNB_POOL -const WBNBAddresss = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"; +const WBNBAddresss = ADDRESSES.bsc.WBNB; const poolsV1 = [ "0x3BEC8B9e416d65209eB5432aDDCb38146E977CcB", //WBTC_POOL @@ -17,8 +18,8 @@ const poolsV1 = [ ]; const tokens = [ - "0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c", //WBTC - "0x2170ed0880ac9a755fd29b2688956bd959f933f8", //WETH + ADDRESSES.bsc.BTCB, //WBTC + ADDRESSES.bsc.ETH, //WETH "0x8ff795a6f4d97e7887c79bea79aba5cc76444adf", //BCH "0x4338665cbb7b2485a8855a139b75d5e34ab0db94", //LTC "0x52ce071bd9b1c4b00a0b92d298c512478cad67e8", //COMP diff --git a/projects/roaring-lion/index.js b/projects/roaring-lion/index.js index 39ab03fe87..788051bb15 100644 --- a/projects/roaring-lion/index.js +++ b/projects/roaring-lion/index.js @@ -1,5 +1,5 @@ const sdk = require("@defillama/sdk"); -const { unwrapBalancerPool } = require('../helper/unwrapLPs') +const { unwrapBalancerToken } = require('../helper/unwrapLPs') const LION = "0x3CC9E655B6c4f530DFc1b1fC51CeEa65c6344716"; const LSHARE = "0x50d8D7F7CcEA28cc1C9dDb996689294dC62569cA"; @@ -8,22 +8,14 @@ const rewardPool = "0x119ad97096fff8629347f5af7f36ac1a32de4f2d"; //users can only lock lps in the boardroom -async function pool2(timestamp, block, chainBlocks) { - return await unwrapBalancerPool({ - chain: 'bsc', - chainBlocks, - balancerPool: "0x950667EF678bAe44Ef037c721E564C365FC8303E", - owner: boardroom, }) +async function pool2(timestamp, block, chainBlocks, { api }) { + return unwrapBalancerToken({ api, balancerToken: "0x950667EF678bAe44Ef037c721E564C365FC8303E", owner: boardroom, }) } -async function tvl(timestamp, block, chainBlocks) { - let balances = {}; - return balances; -} module.exports = { methodology: 'TVL consists of 30DAI-70LSHARE balancer pools that users can lock in the boardroom', bsc: { - tvl: tvl, + tvl: () => ({}), pool2: pool2, //staking: LshareRewardPool has no tokens locked } diff --git a/projects/rocifi-v2/index.js b/projects/rocifi-v2/index.js index 8e7b584cc8..5afc21779c 100644 --- a/projects/rocifi-v2/index.js +++ b/projects/rocifi-v2/index.js @@ -1,29 +1,40 @@ const { sumTokens2 } = require("../helper/unwrapLPs"); const sdk = require('@defillama/sdk') -const ROCI_COLLATERAL_MANAGER = "0xd85af14C32Cc98Be9Fe5195eDb797773af8bB609"; -const ROCI_SETTINGS_PROVIDER = "0xb2e577a112A6F2C6d3d511ade2AD512cEA312a6d"; -const ROCI_LIMIT_MANAGER = "0x347892c2c0C230f0803127F4E1137b3e975F57E4"; +const ROCI_COLLATERAL_MANAGER = { + polygon: '0xd85af14C32Cc98Be9Fe5195eDb797773af8bB609', + era: '0x0C10f6BeaF642Fa43bA8375f160F45704c865E65' +} + +const ROCI_SETTINGS_PROVIDER = { + polygon: '0xb2e577a112A6F2C6d3d511ade2AD512cEA312a6d', + era: '0x719b5f658C13C943010718266a22D8F76cbfc8B9' +} + +const ROCI_LIMIT_MANAGER = { + polygon: '0x347892c2c0C230f0803127F4E1137b3e975F57E4', + era: '0xc8531874Dfe8bc6415e06C1C1eD64dbf5dCeEa18' +} const limitManagerAbi = 'function poolToBorrowedAmount(address) view returns (uint256)' -async function getPools(api) { - const pools = await api.call({ target: ROCI_SETTINGS_PROVIDER, abi: "address[]:getPools", }); +const getPools = async (chain, api) => { + const pools = await api.call({ target: ROCI_SETTINGS_PROVIDER[chain], abi: "address[]:getPools", }); const underlyings = await api.multiCall({ abi: "address:underlyingToken", calls: pools }) return { pools, underlyings } } -async function tvl(_, __, _1, { api }) { - const { pools, underlyings } = await getPools(api); +const tvl = (chain) => async (_, __, _1, { api }) => { + const { pools, underlyings } = await getPools(chain, api); const collaterals = await api.call({ - target: ROCI_COLLATERAL_MANAGER, + target: ROCI_COLLATERAL_MANAGER[chain], abi: "address[]:getCollaterals", }); const toa = [ ...pools.map((pool, i) => [underlyings[i], pool]), - ...collaterals.map((collateral) => [collateral, ROCI_COLLATERAL_MANAGER]), + ...collaterals.map((collateral) => [collateral, ROCI_COLLATERAL_MANAGER[chain]]), ]; return sumTokens2({ @@ -32,18 +43,22 @@ async function tvl(_, __, _1, { api }) { }); } -async function borrowed(_, __, _1, { api }) { - const { pools, underlyings } = await getPools(api); +const borrowed = (chain) => async (_, __, _1, { api }) => { + const { pools, underlyings } = await getPools(chain, api); const balances = {}; - const borrowed = await api.multiCall({ abi: limitManagerAbi, calls: pools, target: ROCI_LIMIT_MANAGER }) + const borrowed = await api.multiCall({ abi: limitManagerAbi, calls: pools, target: ROCI_LIMIT_MANAGER[chain] }) underlyings.forEach((v, i) => sdk.util.sumSingleBalance(balances, v, borrowed[i], api.chain)) return balances } module.exports = { polygon: { - tvl, - borrowed, + tvl: tvl('polygon'), + borrowed: borrowed('polygon'), + }, + era: { + tvl: tvl('era'), + borrowed: borrowed('era'), }, }; diff --git a/projects/rocifiv1/index.js b/projects/rocifiv1/index.js index 207b2098c2..053acce371 100644 --- a/projects/rocifiv1/index.js +++ b/projects/rocifiv1/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') -const USDC = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; -const WETH = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619" +const USDC = ADDRESSES.polygon.USDC; +const WETH = ADDRESSES.polygon.WETH_1 const ROCI_POOLS = [ '0x883F10Dc3960493f38F69b8696dC331D22fdEd76', diff --git a/projects/rocketpool/index.js b/projects/rocketpool/index.js index 4531c423b7..fead07a1d6 100644 --- a/projects/rocketpool/index.js +++ b/projects/rocketpool/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk") const abi = require('./abi.json') @@ -5,7 +6,7 @@ const rocketMinipoolManager = '0x6293B8abC1F36aFB22406Be5f96D893072A8cF3a' const rocketVault = '0x3bDC69C4E5e13E52A65f5583c23EFB9636b469d6' const rocketNodeStaking_contract = '0x3019227b2b8493e45Bf5d25302139c9a2713BF15' -const weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const weth = ADDRESSES.ethereum.WETH const rpl = '0xd33526068d116ce69f19a9ee46f0bd304f21a51f' async function tvl(timestamp, ethBlock, chainBlocks) { diff --git a/projects/rodeo/index.js b/projects/rodeo/index.js index 6357615d1d..a353abdedb 100644 --- a/projects/rodeo/index.js +++ b/projects/rodeo/index.js @@ -20,4 +20,7 @@ async function tvl(_, _b, _cb, { api, }) { module.exports = { arbitrum: { tvl, borrowed, }, methodology: `The TVL shown is the result of subtracting the borrow from the supply for each Rodeo lending pool`, + hallmarks: [ + [Math.floor(new Date('2023-07-11')/1e3), 'Protocol was exploited'], + ], }; diff --git a/projects/rollup-fi/index.js b/projects/rollup-fi/index.js new file mode 100644 index 0000000000..7217c03e83 --- /dev/null +++ b/projects/rollup-fi/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + era:{ + tvl: gmxExports({ vault: '0xefdE2AeFE307A7362C7E0E3BE019D1491Dc7E163', }) + }, +}; diff --git a/projects/rose-finance/index.js b/projects/rose-finance/index.js index f37296f695..bdd7b2ede8 100644 --- a/projects/rose-finance/index.js +++ b/projects/rose-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, unknownTombs } = require("../helper/unknownTokens"); const token = "0x07D49375A3213eF25aAA47C97A2d23A754bB8f8a"; @@ -23,5 +24,5 @@ module.exports = unknownTombs({ module.exports.arbitrum.tvl = sumTokensExport({ owner: GenMasterchef, - tokens: ['0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'] + tokens: [ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.USDC] }) diff --git a/projects/rose/index.js b/projects/rose/index.js index bb3fb23785..3f6d920792 100644 --- a/projects/rose/index.js +++ b/projects/rose/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { default: BigNumber } = require("bignumber.js"); @@ -13,16 +14,16 @@ const rusdPool = "0x79B0a67a4045A7a8DC04b17456F4fe15339cBA34"; // token addresses const DAI = "0xe3520349F477A5F6EB06107066048508498A291b"; -const USDC = "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802"; -const USDT = "0x4988a896b1227218e4A686fdE5EabdcAbd91571f"; -const FRAX = "0xda2585430fef327ad8ee44af8f1f989a2a91a3d2"; +const USDC = ADDRESSES.aurora.USDC_e; +const USDT = ADDRESSES.aurora.USDT_e; +const FRAX = ADDRESSES.aurora.FRAX; const UST = "0x5ce9F0B6AFb36135b5ddBF11705cEB65E634A9dC"; -const MAI = "0xdFA46478F9e5EA86d57387849598dbFB2e964b02"; +const MAI = ADDRESSES.moonbeam.MAI; // const BUSD = "0x5C92A4A7f59A9484AFD79DbE251AD2380E589783"; const RUSD = "0x19cc40283B057D6608C22F1D20F17e16C245642E"; const ROSE = "0xdcD6D4e2B3e1D1E1E6Fa8C21C8A323DcbecfF970"; const STROSE = "0xe23d2289FBca7De725DC21a13fC096787A85e16F"; -const NEAR = "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d"; +const NEAR = ADDRESSES.aurora.NEAR; const WETH = "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB"; const WBTC = "0xf4eb217ba2454613b15dbdea6e5f22276410e89e"; diff --git a/projects/routerprotocol/index.js b/projects/routerprotocol/index.js index d3f0334c40..c8fafab9c4 100644 --- a/projects/routerprotocol/index.js +++ b/projects/routerprotocol/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require('../helper/unwrapLPs') const NATIVE_ADDRESS = "NATIVE"; @@ -6,83 +7,83 @@ const config = { arbitrum: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", decimals: 6 }, - { name: "weth", address: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", decimals: 18 }, + { name: "usd-coin", address: ADDRESSES.arbitrum.USDC, decimals: 6 }, + { name: "weth", address: ADDRESSES.arbitrum.WETH, decimals: 18 }, ] }, avax: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.avax.USDC_e, decimals: 6 }, { name: "wbnb", address: "0x264c1383EA520f73dd837F915ef3a732e204a493", decimals: 18 }, - { name: "wrapped-avax", address: "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", decimals: 18 }, - { name: "weth", address: "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB", decimals: 18 }, + { name: "wrapped-avax", address: ADDRESSES.avax.WAVAX, decimals: 18 }, + { name: "weth", address: ADDRESSES.avax.WETH_e, decimals: 18 }, ] }, fantom: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.fantom.USDC, decimals: 6 }, { name: "wmatic", address: "0x40DF1Ae6074C35047BFF66675488Aa2f9f6384F3", decimals: 18 }, { name: "wbnb", address: "0x27f26F00e1605903645BbaBC0a73E35027Dccd45", decimals: 18 }, { name: "wrapped-avax", address: "0x511D35c52a3C244E7b8bd92c0C297755FbD89212", decimals: 18 }, - { name: "wrapped-fantom", address: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", decimals: 18 }, + { name: "wrapped-fantom", address: ADDRESSES.fantom.WFTM, decimals: 18 }, { name: "weth", address: "0x74b23882a30290451A17c44f4F05243b6b58C76d", decimals: 18 }, ] }, optimism: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", decimals: 6 }, - { name: "weth", address: "0x4200000000000000000000000000000000000006", decimals: 18 }, + { name: "usd-coin", address: ADDRESSES.optimism.USDC, decimals: 6 }, + { name: "weth", address: ADDRESSES.tombchain.FTM, decimals: 18 }, ] }, polygon: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.polygon.USDC, decimals: 6 }, { name: "mimatic", address: "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1", decimals: 18 }, { name: "route", address: "0x16ECCfDbb4eE1A85A33f3A9B21175Cd7Ae753dB4", decimals: 18 }, { name: "wmatic", address: "0x4c28f48448720e9000907bc2611f73022fdce1fa", decimals: 18 }, { name: "dfyn-network", address: "0xC168E40227E4ebD8C1caE80F7a55a4F0e6D66C97", decimals: 18 }, - { name: "wbnb", address: "0x5c4b7CCBF908E64F32e12c6650ec0C96d717f03F", decimals: 18 }, + { name: "wbnb", address: ADDRESSES.polygon.BNB, decimals: 18 }, { name: "wrapped-avax", address: "0x2C89bbc92BD86F8075d1DEcc58C7F4E0107f286b", decimals: 18 }, { name: "wrapped-fantom", address: "0xC9c1c1c20B3658F8787CC2FD702267791f224Ce1", decimals: 18 }, - { name: "weth", address: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", decimals: 18 }, + { name: "weth", address: ADDRESSES.polygon.WETH_1, decimals: 18 }, ] }, bsc: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", decimals: 18 }, + { name: "usd-coin", address: ADDRESSES.bsc.USDC, decimals: 18 }, { name: "wmatic", address: "0xcc42724c6683b7e57334c4e856f4c9965ed682bd", decimals: 18 }, - { name: "wbnb", address: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", decimals: 18 }, + { name: "wbnb", address: ADDRESSES.bsc.WBNB, decimals: 18 }, { name: "binance-peg-avalanche", address: "0x1CE0c2827e2eF14D5C4f29a091d735A204794041", decimals: 18 }, { name: "wrapped-fantom", address: "0xAD29AbB318791D579433D831ed122aFeAf29dcfe", decimals: 18 }, - { name: "weth", address: "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", decimals: 18 }, + { name: "weth", address: ADDRESSES.bsc.ETH, decimals: 18 }, ] }, ethereum: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.ethereum.USDC, decimals: 6 }, { name: "route", address: "0x16ECCfDbb4eE1A85A33f3A9B21175Cd7Ae753dB4", decimals: 18 }, - { name: "wmatic", address: "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", decimals: 18 }, + { name: "wmatic", address: ADDRESSES.ethereum.MATIC, decimals: 18 }, { name: "dfyn-network", address: "0x9695e0114e12C0d3A3636fAb5A18e6b737529023", decimals: 18 }, - { name: "wbnb", address: "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", decimals: 18 }, + { name: "wbnb", address: ADDRESSES.ethereum.BNB, decimals: 18 }, { name: "avalanche-wormhole", address: "0x85f138bfEE4ef8e540890CFb48F620571d67Eda3", decimals: 18 }, - { name: "fantom", address: "0x4E15361FD6b4BB609Fa63C81A2be19d873717870", decimals: 18 }, - { name: "weth", address: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", decimals: 18 }, + { name: "fantom", address: ADDRESSES.ethereum.FTM, decimals: 18 }, + { name: "weth", address: ADDRESSES.ethereum.WETH, decimals: 18 }, { name: "wrapped-cro", address: "0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b", decimals: 18 }, ] }, aurora: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.aurora.USDC_e, decimals: 6 }, { name: "weth", address: "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", decimals: 18 }, - { name: "wmatic", address: "0x6aB6d61428fde76768D7b45D8BFeec19c6eF91A8", decimals: 18 }, - { name: "wbnb", address: "0x2bF9b864cdc97b08B6D79ad4663e71B8aB65c45c", decimals: 18 }, + { name: "wmatic", address: ADDRESSES.oasis.USDT, decimals: 18 }, + { name: "wbnb", address: ADDRESSES.syscoin.USDC, decimals: 18 }, { name: "wrapped-avax", address: "0x80A16016cC4A2E6a2CACA8a4a498b1699fF0f844", decimals: 18 }, ], }, @@ -95,19 +96,19 @@ const config = { cronos: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.cronos.USDC, decimals: 6 }, { name: "wrapped-cro", address: "0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23", decimals: 18 }, { name: "wmatic", address: "0xad79AC3c5a5c15C6B9194F5568e451b3fc3C2B40", decimals: 18 }, - { name: "wbnb", address: "0xfa9343c3897324496a05fc75abed6bac29f8a40f", decimals: 18 }, - { name: "wrapped-avax", address: "0x765277eebeca2e31912c9946eae1021199b39c61", decimals: 18 }, + { name: "wbnb", address: ADDRESSES.telos.ETH, decimals: 18 }, + { name: "wrapped-avax", address: ADDRESSES.shiden.ETH, decimals: 18 }, { name: "weth", address: "0xe44Fd7fCb2b1581822D0c862B68222998a0c299a", decimals: 18 }, - { name: "wrapped-fantom", address: "0xB44a9B6905aF7c801311e8F4E76932ee959c663C", decimals: 18 }, + { name: "wrapped-fantom", address: ADDRESSES.moonriver.USDT, decimals: 18 }, ], }, kava: { contractAddress: "0x6e14f48576265272B6CAA3A7cC500a26050Be64E", tokens: [ - { name: "usd-coin", address: "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f", decimals: 6 }, + { name: "usd-coin", address: ADDRESSES.telos.ETH, decimals: 6 }, ], }, } diff --git a/projects/rubic/index.js b/projects/rubic/index.js index 914356c364..952db83665 100644 --- a/projects/rubic/index.js +++ b/projects/rubic/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const solana = require('../helper/solana') const { stakings } = require('../helper/staking'); @@ -22,17 +23,17 @@ const pools = { }; const usdcByChain = { - bsc: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', - ethereum: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - polygon: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', - fantom: '0x04068da6c83afcfa0e13ba15a6696662335d5b75', - avax: '0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664', + bsc: ADDRESSES.bsc.USDC, + ethereum: ADDRESSES.ethereum.USDC, + polygon: ADDRESSES.polygon.USDC, + fantom: ADDRESSES.fantom.USDC, + avax: ADDRESSES.avax.USDC_e, harmony: '0x985458e523db3d53125813ed68c274899e9dfab4', - moonriver: '0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', - arbitrum: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', - aurora: '0xB12BFcA5A55806AaF64E99521918A4bf0fC40802', - solana: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', - kava: '0xfA9343C3897324496A05fC75abeD6bAC29f8A40f' + moonriver: ADDRESSES.moonriver.USDC, + arbitrum: ADDRESSES.arbitrum.USDC, + aurora: ADDRESSES.aurora.USDC_e, + solana: ADDRESSES.solana.USDC, + kava: ADDRESSES.telos.ETH } function chainTvl(chain) { diff --git a/projects/rubicon/index.js b/projects/rubicon/index.js index 5f7ad1b245..53b4768732 100644 --- a/projects/rubicon/index.js +++ b/projects/rubicon/index.js @@ -1,42 +1,47 @@ -const {transformOptimismAddress} = require('../helper/portedTokens') -const {sumTokensAndLPsSharedOwners} = require('../helper/unwrapLPs') +const { cachedGraphQuery } = require('../helper/cache') +const { sumTokens2 } = require('../helper/unwrapLPs') -const tokens = [ - "0x7f5c764cbc14f9669b88837ca1490cca17c31607", //USDC - "0x68f180fcce6836688e9084f035309e29bf0a2095", //WBTC - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", //DAI - "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58", //USDT - "0x8700daec35af8ff88c16bdf0418774cb3d7599b4", //SNX - "0x4200000000000000000000000000000000000006", //ETH - "0x4200000000000000000000000000000000000042" //OP -] +const RUBICON_MARKET_OPTIMISM = '0x7a512d3609211e719737E82c7bb7271eC05Da70d' +const RUBICON_MARKET_ARBITRUM = '0xC715a30FDe987637A082Cf5F19C74648b67f2db8' -const owners = [ - "0x7a512d3609211e719737E82c7bb7271eC05Da70d", // Rubicon Market - // * Bath Tokens * TODO: drive dynamically off of subgraph query - "0xB0bE5d911E3BD4Ee2A8706cF1fAc8d767A550497", // bathETH - "0x7571CC9895D8E997853B1e0A1521eBd8481aa186", // bathWBTC - "0xe0e112e8f33d3f437D1F895cbb1A456836125952", // bathUSDC - "0x60daEC2Fc9d2e0de0577A5C708BcaDBA1458A833", // bathDAI - "0xfFBD695bf246c514110f5DAe3Fa88B8c2f42c411", // bathUSDT - "0xeb5F29AfaaA3f44eca8559c3e8173003060e919f", // bathSNX - "0x574a21fE5ea9666DbCA804C9d69d8Caf21d5322b" // bathOP -] +module.exports = { + methodology: "Counts the tokens on the market (orders in the orderbook) and in bath pools", + hallmarks: [ + [1657915200, "OP Rewards Start"], + [1685073974, "V2 Upgrade"], + [1688184374, "OP Rewards for Makers"], + [1688616374, "Arbitrum Launch"] + ] +} -async function tvl(time, ethBlock, {optimism: block}){ - const balances={} - const transform = await transformOptimismAddress() - await sumTokensAndLPsSharedOwners(balances, tokens.map(t=>[t, false]), owners, block, "optimism", transform) - return balances +const config = { + optimism: { + endpoint: 'https://api.thegraph.com/subgraphs/name/denverbaumgartner/rubiconmetricsoptimism', + owners: [ + RUBICON_MARKET_OPTIMISM, // Rubicon Market + "0xB0bE5d911E3BD4Ee2A8706cF1fAc8d767A550497", // bathETH + "0x7571CC9895D8E997853B1e0A1521eBd8481aa186", // bathWBTC + "0xe0e112e8f33d3f437D1F895cbb1A456836125952", // bathUSDC + "0x60daEC2Fc9d2e0de0577A5C708BcaDBA1458A833", // bathDAI + "0xfFBD695bf246c514110f5DAe3Fa88B8c2f42c411", // bathUSDT + "0xeb5F29AfaaA3f44eca8559c3e8173003060e919f", // bathSNX + "0x574a21fE5ea9666DbCA804C9d69d8Caf21d5322b" // bathOP + ] + }, + arbitrum: { + endpoint: 'https://api.thegraph.com/subgraphs/name/jossduff/rubiconmetricsarbitrum', + owners: [RUBICON_MARKET_ARBITRUM,] + } } -module.exports={ - methodology: "Counts the tokens on the bath pools and on the market (orders in the orderbook)", - optimism:{ - tvl - }, - hallmarks:[ - [1657915200, "OP Rewards Start"], - ] -} \ No newline at end of file +Object.keys(config).forEach(chain => { + const { endpoint, owners } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const response = await cachedGraphQuery('rubicon/' + chain, endpoint, `{ tokens { address } }`) + const tokens = response.tokens.map(i => i.address) + return sumTokens2({ api, tokens, owners}) + } + } +}) \ No newline at end of file diff --git a/projects/ruby-exchange-stable/index.js b/projects/ruby-exchange-stable/index.js index e66f1295fb..bba6b7561d 100644 --- a/projects/ruby-exchange-stable/index.js +++ b/projects/ruby-exchange-stable/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { europa: { tvl: sumTokensExport({ ownerTokens: [ [ [ - '0x73d22d8a2D1f59Bf5Bcf62cA382481a2073FAF58', - '0x1c0491E3396AD6a35f061c62387a95d7218FC515', - '0x5F795bb52dAC3085f578f4877D450e2929D2F13d', - '0xD05C4be5f3be302d376518c9492EC0147Fa5A718', + ADDRESSES.europa.USDP, + ADDRESSES.europa.USDT, + ADDRESSES.europa.USDC, + ADDRESSES.europa.DAI, ], '0x45c550dc634bcc271c092a20d36761d3bb834e5d'] ] })} diff --git a/projects/rubydex/index.js b/projects/rubydex/index.js index 6a14e3bb33..59164aa6d8 100644 --- a/projects/rubydex/index.js +++ b/projects/rubydex/index.js @@ -1,10 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); -const ARBITRUM_USDT = '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'; -const VAULT_CONTRACT = '0xa55D96B2EC5c5899fC69886CACfCba65b91bf8B6'; +const VAULT_ARBITRUM = '0x4a7c10780afdba628332e31c9e7d1675cfad594c'; +const VAULT_BSC = '0xedB6CD4fdd2F465d2234f978276F9Ed2EE02102c'; +const VAULT_ZKSYNC_ERA = '0x211ac72f3ee4a35523B41aA8D67644E1eF860059'; +const VAULT_ETHEREUM = '0x1DE35eB48f92Fb38dee51041AAE86FFf18029E90'; module.exports = { - methodology: 'counts the number of USDT tokens in the RubyDex Vault contract.', + methodology: 'USDT tokens held by the RubyDex Vault contract.', arbitrum: { - tvl: sumTokensExport({ owner: VAULT_CONTRACT, tokens: [ARBITRUM_USDT] }), - } -}; \ No newline at end of file + tvl: sumTokensExport({ owner: VAULT_ARBITRUM, tokens: [ADDRESSES.arbitrum.USDT] }), + }, + bsc: { + tvl: sumTokensExport({ owner: VAULT_BSC, tokens: [ADDRESSES.bsc.USDT] }), + }, + era: { + tvl: sumTokensExport({ owner: VAULT_ZKSYNC_ERA, tokens: [ADDRESSES.era.USDT] }), + }, + ethereum: { + tvl: sumTokensExport({ owner: VAULT_ETHEREUM, tokens: [ADDRESSES.ethereum.USDT] }), + }, +}; diff --git a/projects/rubyfinance/index.js b/projects/rubyfinance/index.js index d7ec589bf1..f26ba2153f 100644 --- a/projects/rubyfinance/index.js +++ b/projects/rubyfinance/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); const { getFixBalances } = require("../helper/portedTokens"); const { getTokenPrices } = require("../helper/unknownTokens") const { stakingUnknownPricedLP } = require("../helper/staking") -const wkavaAddress = "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b"; +const wkavaAddress = ADDRESSES.kava.WKAVA; const rshareTokenAddress = "0x5547F680Ad0104273d0c007073B87f98dEF199c6"; const rshareRewardPoolAddress = "0x63c8069EE16BA666800cECaFd99f4C75ad6dd7Aa"; const genesisPoolAddress = "0x0D6f8847EdB9ea4203241529ee753f6b26920f11"; @@ -88,6 +89,9 @@ async function KavaPool2(timestamp, block, chainBlocks) { } module.exports = { + hallmarks: [ + [1660521600, "incentives not given"] + ], methodology: "Pool2 deposits consist of RUBY/USDC, RUBY/KAVA, RSHARE/KAVA and RUBY/RSHARE LP deposits while the staking TVL consists of the RSHARE tokens locked within the Boardroom contract.", kava: { diff --git a/projects/rugdao/index.js b/projects/rugdao/index.js index 56751521a6..49657a9e06 100644 --- a/projects/rugdao/index.js +++ b/projects/rugdao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x9e0eE5E4c93e300fF024518d090f98c719504560"; @@ -7,9 +8,9 @@ module.exports = ohmTvl( //MIM ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], //USDT - ["0xc7198437980c041c805a1edcba50c1ce5db95118", false], + [ADDRESSES.avax.USDT_e, false], //USDC - ["0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", false], + [ADDRESSES.avax.USDC_e, false], // RUG-MIM JLP ["0x8b667C1e422c08f9874709939Bc90E71c2BEA167", true] ], diff --git a/projects/ryoshi/index.js b/projects/ryoshi/index.js index dd549a8aec..951d7cf81a 100644 --- a/projects/ryoshi/index.js +++ b/projects/ryoshi/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { masterchefExports } = require('../helper/unknownTokens') -const wDoge = '0xB7ddC6414bf4F5515b52D8BdD69973Ae205ff101' -const nullAddress = '0x0000000000000000000000000000000000000000' +const wDoge = ADDRESSES.dogechain.WWDOGE +const nullAddress = ADDRESSES.null module.exports = masterchefExports({ diff --git a/projects/rysk/index.js b/projects/rysk/index.js index e3770b8575..f76bef041b 100644 --- a/projects/rysk/index.js +++ b/projects/rysk/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, } = require('../helper/unwrapLPs') const sdk = require('@defillama/sdk') @@ -13,9 +14,11 @@ async function tvl(_, _b, _cb, { api, }) { return sumTokens2({ api, balances, tokensAndOwners: [ - ['0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', '0xc10b976c671ce9bff0723611f01422acbae100a5'], // LP - ['0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', '0xb9F33349db1d0711d95c1198AcbA9511B8269626'], // marginPool - ['0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', '0xb9F33349db1d0711d95c1198AcbA9511B8269626'], // marginPool + [ADDRESSES.arbitrum.USDC, '0xc10b976c671ce9bff0723611f01422acbae100a5'], // LP alpha + ["0xaf88d065e77c8cC2239327C5EDb3A432268e5831", '0x217749d9017cB87712654422a1F5856AAA147b80'], // LP beyond USDC native + [ADDRESSES.arbitrum.USDC, '0xb9F33349db1d0711d95c1198AcbA9511B8269626'], // marginPool + ["0xaf88d065e77c8cC2239327C5EDb3A432268e5831", '0xb9F33349db1d0711d95c1198AcbA9511B8269626'], // marginPool USDC native + [ADDRESSES.arbitrum.WETH, '0xb9F33349db1d0711d95c1198AcbA9511B8269626'], // marginPool ] }) } diff --git a/projects/sablier-v2/index.js b/projects/sablier-v2/index.js new file mode 100644 index 0000000000..7f056a6c56 --- /dev/null +++ b/projects/sablier-v2/index.js @@ -0,0 +1,57 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') +const { covalentGetTokens } = require('../helper/http') +const { isWhitelistedToken } = require('../helper/streamingHelper') +const { getUniqueAddresses } = require('../helper/utils') +const { cachedGraphQuery } = require('../helper/cache') + +const blacklistedTokens = [ + ADDRESSES.ethereum.sUSD_OLD, + // TODO: We shouldn't need to lowercase here + ADDRESSES.ethereum.SAI.toLowerCase(), + ADDRESSES.ethereum.MKR, +] + +async function getTokensConfig(api, isVesting) { + const ownerTokens = [] + const { endpoints } = config[api.chain] + let i = 0 + for (const endpoint of endpoints) { + i++ + const { contracts, assets } = await cachedGraphQuery('sablier-v2/' + api.chain + '-' + i, endpoint, `{ + contracts { id address category } + assets { id chainId symbol } + }`) + const owners = contracts.map(i => i.address) + let tokens = assets.map(i => i.id) + const symbols = assets.map(i => i.symbol) + tokens = tokens.filter((v, i) => isWhitelistedToken(symbols[i], v, isVesting)) + owners.forEach(owner => ownerTokens.push([tokens, owner])) + } + + return { ownerTokens } +} + +async function tvl(_, block, _1, { api }) { + const { owners } = config[api.chain] + return api.sumTokens(await getTokensConfig(api, false)) +} + +async function vesting(_, block, _1, { api }) { + const { owners } = config[api.chain] + return api.sumTokens(await getTokensConfig(api, true)) +} + +const config = { + ethereum: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2'], }, + arbitrum: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2-arbitrum'], }, + bsc: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2-bsc'], }, + xdai: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2-gnosis'], }, + optimism: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2-optimism'], }, + polygon: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2-polygon'], }, + avax: { endpoints: ['https://api.thegraph.com/subgraphs/name/sablier-labs/sablier-v2-avalanche'], }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl, vesting } +}) \ No newline at end of file diff --git a/projects/sablier/index.js b/projects/sablier/index.js index 8f5f5124e6..c9bf052a0d 100644 --- a/projects/sablier/index.js +++ b/projects/sablier/index.js @@ -1,37 +1,67 @@ -const { GraphQLClient, gql } = require('graphql-request') -const { sumTokens2 } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') +const { covalentGetTokens } = require('../helper/http') const { isWhitelistedToken } = require('../helper/streamingHelper') - -const sablierAddresses = { - "v1.0.0": "0xA4fc358455Febe425536fd1878bE67FfDBDEC59a", - "v1.1.0": "0xCD18eAa163733Da39c232722cBC4E8940b1D8888", -} +const { getUniqueAddresses } = require('../helper/utils') const blacklistedTokens = [ - '0x57ab1e02fee23774580c119740129eac7081e9d3', // sUSD legacy + ADDRESSES.ethereum.sUSD_OLD, + // TODO: We shouldn't need to lowercase here + ADDRESSES.ethereum.SAI.toLowerCase(), + ADDRESSES.ethereum.MKR, ] -async function getTokens(isVesting) { - const graphQLClient = new GraphQLClient('https://api.thegraph.com/subgraphs/name/sablierhq/sablier') - var query = gql`{tokens (first: 1000) { id name symbol }}` - const results = await graphQLClient.request(query) - return results.tokens.filter(i => isWhitelistedToken(i.symbol, i.id, isVesting)).map(i => i.id) +async function getTokens(api, owners, isVesting) { + let tokens = (await Promise.all(owners.map(i => covalentGetTokens(i, api.chain)))).flat().filter(i => !blacklistedTokens.includes(i)) + tokens = getUniqueAddresses(tokens) + const symbols = await api.multiCall({ abi: 'erc20:symbol', calls: tokens }) + return tokens.filter((v, i) => isWhitelistedToken(symbols[i], v, isVesting)) } -async function tvl(_, block) { - const tokens = await getTokens(false) - return sumTokens2({ block, owners: Object.values(sablierAddresses), tokens: tokens, blacklistedTokens, }) +async function tvl(_, block, _1, { api }) { + const { owners } = config[api.chain] + const tokens = await getTokens(api, owners, false) + return sumTokens2({ api, owners, tokens, blacklistedTokens, }) } -async function vesting(_, block) { - const tokens = await getTokens(true) - return sumTokens2({ block, owners: Object.values(sablierAddresses), tokens: tokens, blacklistedTokens, }) +async function vesting(_, block, _1, { api }) { + const { owners } = config[api.chain] + const tokens = await getTokens(api, owners, true) + return sumTokens2({ api, owners, tokens, blacklistedTokens, }) } module.exports = { hallmarks: [ - [Math.floor(new Date('2022-10-03')/1e3), 'Vesting tokens are not included in tvl'], + [Math.floor(new Date('2022-10-03') / 1e3), 'Vesting tokens are not included in tvl'], ], start: 1573582731, - ethereum: { tvl, vesting, } -}; \ No newline at end of file + timetravel: false, + ronin: { + tvl: sumTokensExport({ + owner: '0xDe9dCc27aa1552d591Fc9B9c21881feE43BD8118', + tokens: [ + ADDRESSES.ronin.USDC, + ADDRESSES.ronin.WETH, + ADDRESSES.ronin.AXS, + ] + }) + } +}; + +const config = { + ethereum: { + owners: [ + "0xA4fc358455Febe425536fd1878bE67FfDBDEC59a", // v1.0.0 + "0xCD18eAa163733Da39c232722cBC4E8940b1D8888", // v1.1.0 + ] + }, + arbitrum: { owners: ['0xaDB944B478818d95659067E70D2e5Fc43Fa3eDe9'], }, + avax: { owners: ['0x73f503fad13203C87889c3D5c567550b2d41D7a4'], }, + bsc: { owners: ['0x05BC7f5fb7F248d44d38703e5C921A8c16825161'], }, + optimism: { owners: ['0x6C5927c0679e6d857E87367bb635decbcB20F31c'], }, + polygon: { owners: ['0xAC18EAB6592F5fF6F9aCf5E0DCE0Df8E49124C06'], }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl, vesting } +}) \ No newline at end of file diff --git a/projects/saddle/contracts.json b/projects/saddle/contracts.json index 11b1eae8cb..c90c85bb98 100644 --- a/projects/saddle/contracts.json +++ b/projects/saddle/contracts.json @@ -4,5 +4,6 @@ "fantom": "0x7003102c75587E8D29c56124060463Ef319407D0", "evmos": "0xBa684B8E05415726Ee1fFE197eaf1b82E4d44418", "optimism": "0x0E510c9b20a5D136E75f7FD2a5F344BD98f9d875", - "kava": "0x3A0c2A793a8DB779e0293699D0Ce77c77617FE0f" + "kava": "0x3A0c2A793a8DB779e0293699D0Ce77c77617FE0f", + "aurora": "0x29FD31d37AB8D27f11EAB68F96424bf64231fFce" } diff --git a/projects/safedollar/index.js b/projects/safedollar/index.js index ba1fa0e21f..35820df099 100644 --- a/projects/safedollar/index.js +++ b/projects/safedollar/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const farmUtils = require('./farm-utils'); const BigNumber = require('bignumber.js'); @@ -9,10 +10,10 @@ const utils = require('../helper/utils'); const Contracts = { SafeAssets: [{ collateralAddress: "0x736Fb0CbB5F55941ecF6A811be4926c2cFa4dD4b", - address: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174" + address: ADDRESSES.polygon.USDC },{ collateralAddress: "0xbd75b2a992ea83abed729e60022c9fe8fe539e54", - address: "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270" + address: ADDRESSES.polygon.WMATIC_2 }], boardRoom: "0x46C6a9b8E3243FB0dfB069119D5Fc6a75EEc8604", diff --git a/projects/safeohm/index.js b/projects/safeohm/index.js index 94abfb2c6d..a5eb06e187 100644 --- a/projects/safeohm/index.js +++ b/projects/safeohm/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x16d657D5CfD6D7f894BFdB2F5481f8a23bDce269" module.exports = ohmTvl(treasury, [ - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], + [ADDRESSES.bsc.WBNB, false], ["0xb2e7793aad96e4e3048e0eb8d091e13a12087a52", true], ], "bsc", "0x7C340D53252A5b921754A436Ce3211Ac6E0F267D", "0xBDaa094a95e452c6bA175cE9EdfeFBa04e6a51Ac") \ No newline at end of file diff --git a/projects/sagebet/index.js b/projects/sagebet/index.js new file mode 100644 index 0000000000..c05f9d4744 --- /dev/null +++ b/projects/sagebet/index.js @@ -0,0 +1,11 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +async function tvl(_, _b, _cb, { api, }) { + const [markets] = await api.call({ target: '0xd350c2b3d8eb1de65cfa68928ea135eda88326b6', abi: "function getAllActiveMarkets() view returns (address[], string[], bool[])"}) + const tokens = await api.multiCall({ abi: 'address:collateralToken', calls: markets}) + return sumTokens2({ api, tokensAndOwners2: [tokens, markets]}) +} + +module.exports = { + arbitrum: { tvl } +} \ No newline at end of file diff --git a/projects/sakeperp/index.js b/projects/sakeperp/index.js index 334cbdcf84..20d230a11c 100644 --- a/projects/sakeperp/index.js +++ b/projects/sakeperp/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -8,7 +9,7 @@ const bscSake = "0x8BD778B12b15416359A227F0533Ce2D91844e1eD"; const bscFactory = "0xA534cf041Dcd2C95B4220254A0dCb4B905307Fd8"; const bscSakebar = "0xbC83FAdA7D0881F772daaB2B4295F949FA309B59"; const perpVault = "0xa34dA41edB2b15A20893d2208377E24D8dcdeB6e"; -const bUsd = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const bUsd = ADDRESSES.bsc.BUSD; async function tvl(factory, block, chain) { let balances = {}; diff --git a/projects/salem/index.js b/projects/salem/index.js index 8a8bc8229e..915b93a4e2 100644 --- a/projects/salem/index.js +++ b/projects/salem/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { addFundsInMasterChef } = require("../helper/masterchef"); const { stakingUnknownPricedLP } = require("../helper/staking"); @@ -27,8 +28,8 @@ const ftmPool2 = [ ] const translate = { - "0xb44a9b6905af7c801311e8f4e76932ee959c663c": "fantom:0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", - "0xf2001b145b43032aaf5ee2884e456ccd805f677d": "0x6b175474e89094c44da98b954eedeac495271d0f", + [ADDRESSES.moonriver.USDT]: "fantom:" + ADDRESSES.fantom.WFTM, + "0xf2001b145b43032aaf5ee2884e456ccd805f677d": ADDRESSES.ethereum.DAI, "0x7dff46370e9ea5f0bad3c4e29711ad50062ea7a4": "bsc:0x570a5d26f7765ecb712c0924e4de545b89fd43df" }; diff --git a/projects/salsa/index.js b/projects/salsa/index.js new file mode 100644 index 0000000000..2f689343e7 --- /dev/null +++ b/projects/salsa/index.js @@ -0,0 +1,16 @@ +const { call } = require("../helper/chain/elrond"); + +const ADDRESSES = require('../helper/coreAssets.json'); + +const tvl = async (_, _1, _2, { api }) => { + const tokenPrice = await call({ target: 'erd1qqqqqqqqqqqqqpgqaqxztq0y764dnet95jwtse5u5zkg92sfacts6h9su3', abi: 'getTokenPrice', responseTypes: ['number'] }); + const lsTokenSupply = await call({ target: 'erd1qqqqqqqqqqqqqpgqaqxztq0y764dnet95jwtse5u5zkg92sfacts6h9su3', abi: 'getLiquidTokenSupply', responseTypes: ['number'] }); + api.add(ADDRESSES.null, tokenPrice * lsTokenSupply / 1e18) +}; + +module.exports = { + timetravel: false, + elrond: { + tvl, + }, +}; diff --git a/projects/samodao/index.js b/projects/samodao/index.js index 8d7c105e1d..e03b48b92b 100644 --- a/projects/samodao/index.js +++ b/projects/samodao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); @@ -5,7 +6,7 @@ const token = "0xcd7CBc46d083A245B45E22Cb4bE2c569947Ce896"; const tokenStaking = "0x082e884e640eC62C67ea3dC791793E4dF2C46c2D"; const treasury = "0xBB575FbDd418E9e8405D97A33043818A379CD2Ca"; const treasurytokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ["0x4a49858B15F934306725B32582FFa55f95D9F90a", true] // CAKE LP (samoDAO-BUSD) ] diff --git a/projects/sandclock/index.js b/projects/sandclock/index.js index 328404beaf..d1e20d7210 100644 --- a/projects/sandclock/index.js +++ b/projects/sandclock/index.js @@ -1,28 +1,37 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { sumTokens2 } = require('../helper/unwrapLPs') -const LUSD = '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0'; +const LUSD = ADDRESSES.ethereum.LUSD; +const WETH = ADDRESSES.ethereum.WETH; +const USDC = ADDRESSES.ethereum.USDC; const YEARN_VAULT = '0x4fe4bf4166744bcbc13c19d959722ed4540d3f6a'; -const YERAN_STRATEGY = '0x9043268b2e280de7df8aafe7feb86e553bd90fdd'; const LIQUITY_VAULT = '0x91a6194f1278f6cf25ae51b604029075695a74e5'; -const LIQUITY_STRATEGY = '0x537ee18ca78c42e1e7fb87fecfe9fc811c3d3575'; +const WETH_VAULT = '0x1Fc623b96c8024067142Ec9c15D669E5c99c5e9D'; +const USDC_VAULT = '0x1038Ff057b7092f17807358c6f68b42661d15caB'; -const vaults = [YEARN_VAULT, LIQUITY_VAULT]; -const strategies = [YERAN_STRATEGY, LIQUITY_STRATEGY]; +const v1Vaults = [YEARN_VAULT, LIQUITY_VAULT]; +const v2Vaults = [WETH_VAULT, USDC_VAULT]; async function tvl(_, _b, _cb, { api, chain, block, }) { const balances = {} - const strategyBalances = await api.multiCall({ - abi: 'uint256:investedAssets', - calls: strategies, + const v1VaultBalances = await api.multiCall({ + abi: 'uint256:totalUnderlying', + calls: v1Vaults, }) - strategyBalances.forEach(i => sdk.util.sumSingleBalance(balances, LUSD, i, chain)) - return sumTokens2({ balances, chain, block, tokens: [LUSD], owners: vaults, }) + v1VaultBalances.forEach(i => sdk.util.sumSingleBalance(balances, LUSD, i, chain)) + const v2VaultBalances = await api.multiCall({ + abi: 'uint256:totalAssets', + calls: v2Vaults, + }) + sdk.util.sumSingleBalance(balances, WETH, v2VaultBalances[0], chain) + sdk.util.sumSingleBalance(balances, USDC, v2VaultBalances[1], chain) + return sumTokens2({ balances, chain, block, }) } module.exports = { misrepresentedTokens: false, - methodology: 'add underlying asset balances in all the vaults and strategies together.', + methodology: 'add underlying asset balances in all the vaults together.', doublecounted: true, start: 15308000, // The first vault YEARN_VAULT was deployed ethereum: { diff --git a/projects/sapphiremine.js b/projects/sapphiremine.js index e6d343a957..81d620c4b0 100644 --- a/projects/sapphiremine.js +++ b/projects/sapphiremine.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const target = '0x7146854856E3f373675105556c7D964B329606be'; -const WMATIC = '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270'; +const WMATIC = ADDRESSES.polygon.WMATIC_2; async function tvl(timestamp, block, chainBlocks) { return { [ `polygon:${WMATIC}` ]: diff --git a/projects/sashimidao/index.js b/projects/sashimidao/index.js index 14c3c14578..015f1abed7 100644 --- a/projects/sashimidao/index.js +++ b/projects/sashimidao/index.js @@ -36,6 +36,9 @@ async function avaxTvl(timestamp, chainBlocks) { } module.exports = { + hallmarks: [ + [1642464000, "Rug Pull"] + ], misrepresentedTokens: true, avax: { staking: stakings(sashimidaoStakings, SASHI, "avax"), diff --git a/projects/sashimiswap/index.js b/projects/sashimiswap/index.js index b292dd2c54..32409899dd 100644 --- a/projects/sashimiswap/index.js +++ b/projects/sashimiswap/index.js @@ -1,66 +1,147 @@ -const sdk = require("@defillama/sdk"); -const {uniTvlExport} = require("../helper/calculateUniTvl"); -const { compoundExports } = require("../helper/compound"); +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') const { staking } = require("../helper/staking"); -const factoryETH = "0xF028F723ED1D0fE01cC59973C49298AA95c57472"; -const comprollerETH = "0xB5d53eC97Bed54fe4c2b77f275025c3fc132D770"; -const sIETH = "0xC597F86424EEb6599Ea40f999DBB739e3Aca5d82"; -const WETHEquivalent = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; - -const factoryBSC = "0x1DaeD74ed1dD7C9Dabbe51361ac90A69d851234D"; -const comprollerBSC = "0x88fEf82FDf75E32e4BC0e662d67CfcEF4838F026"; -const sIBNB = "0x6Df484F552115fa7F54bE4A6D7aE2999cadB2324"; -const WBNBEquivalent = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; - -const factoryHECO = "0xC28E27870558cF22ADD83540d2126da2e4b464c2"; -const comprollerHECO = "0x6Cb9d7ecf84b0d3E7704ed91046e16f9D45C00FA"; -const sIHT = "0xf13d3E10DEE31b80887422c89285112Dd00ce0B5"; -const WHTEquivalent = "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f"; - -const {tvl: ethMarketsTvl, borrowed: borrowedEth} = compoundExports( - comprollerETH, - "ethereum", - sIETH, - WETHEquivalent -) - -const {tvl: bscMarketsTvl, borrowed: borrowedBsc} = compoundExports( - comprollerBSC, - "bsc", - sIBNB, - WBNBEquivalent -) - -const {tvl: hecoMarketsTvl, borrowed: borrowedHeco} = compoundExports( - comprollerHECO, - "heco", - sIHT, - WHTEquivalent -) - -const ethTvl = uniTvlExport(factoryETH, "ethereum"); - -const bscTvl = uniTvlExport(factoryBSC, "bsc"); - -const hecoTvl = uniTvlExport(factoryHECO, "heco"); - module.exports = { - timetravel: true, - doublecounted: false, + methodology: + "We count liquidity on the Farms (LP tokens) threw Factory Contract; and on the lending markets same as compound", + hallmarks: [ + [Math.floor(new Date('2021-12-30')/1e3), 'Protocol was hacked for 210K USD'], + ], +}; + +const config = { ethereum: { - tvl: sdk.util.sumChainTvls([ethTvl,ethMarketsTvl]), - staking: staking("0x6ed306DbA10E6c6B20BBa693892Fac21f3B91977", "0xC28E27870558cF22ADD83540d2126da2e4b464c2"), - borrowed: borrowedEth, + dexFactory: '0xF028F723ED1D0fE01cC59973C49298AA95c57472', + dexFromBlock: 10943133, + comptroller: '0xB5d53eC97Bed54fe4c2b77f275025c3fc132D770', + // cToken: '0xC597F86424EEb6599Ea40f999DBB739e3Aca5d82', + stakingContracts: ['0x6ed306DbA10E6c6B20BBa693892Fac21f3B91977'], + stakingToken: '0xC28E27870558cF22ADD83540d2126da2e4b464c2', }, bsc: { - tvl: sdk.util.sumChainTvls([bscTvl, bscMarketsTvl]), - borrowed: borrowedBsc, + dexFactory: '0x1DaeD74ed1dD7C9Dabbe51361ac90A69d851234D', + dexFromBlock: 5208518, + comptroller: '0x88fEf82FDf75E32e4BC0e662d67CfcEF4838F026', + // cToken: '0xC597F86424EEb6599Ea40f999DBB739e3Aca5d82', }, heco: { - tvl: sdk.util.sumChainTvls([hecoTvl,hecoMarketsTvl]), - borrowed: borrowedHeco, + dexFactory: '0xC28E27870558cF22ADD83540d2126da2e4b464c2', + dexFromBlock: 783990, + comptroller: '0x6Cb9d7ecf84b0d3E7704ed91046e16f9D45C00FA', + // cToken: '0xC597F86424EEb6599Ea40f999DBB739e3Aca5d82', }, - methodology: - "We count liquidity on the Farms (LP tokens) threw Factory Contract; and on the lending markets same as compound", -}; +} + +Object.keys(config).forEach(chain => { + const { stakingContracts, stakingToken, dexFactory, comptroller, dexFromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const ownerTokens = [] + if (comptroller) { + const markets = await api.call({ abi: 'address[]:getAllMarkets', target: comptroller, }) + let uTokens = await api.multiCall({ abi: 'address:underlying', calls: markets, permitFailure: true }) + uTokens = uTokens.map(i => i ?? nullAddress) + ownerTokens.push(...markets.map((m, i) => [[uTokens[i]], m])) + } + if (dexFactory) { + const logs = await getLogs({ + api, + target: dexFactory, + topics: ['0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9'], + eventAbi: 'event PairCreated (address indexed token0, address indexed token1, address pair, uint256)', + onlyArgs: true, + fromBlock: dexFromBlock, + }) + const routers = await api.multiCall({ abi: 'address:router', calls: logs.map(i => i.pair) }) + routers.forEach((r, i) => ownerTokens.push([[logs[i].token0, logs[i].token1], r])) + } + return sumTokens2({ api, ownerTokens, blacklistedTokens, }) + }, + borrowed: async (_, _b, _cb, { api, }) => { + if (comptroller) { + const markets = await api.call({ abi: 'address[]:getAllMarkets', target: comptroller, }) + let uTokens = await api.multiCall({ abi: 'address:underlying', calls: markets, permitFailure: true }) + uTokens = uTokens.map(i => i ?? nullAddress) + let borrows = await api.multiCall({ abi: 'uint256:totalBorrows', calls: markets }) + api.addTokens(uTokens, borrows) + } + api.getBalances() + }, + } + + if (stakingContracts) { + module.exports[chain].staking = staking(stakingContracts, stakingToken) + } +}) + +const blacklistedTokens = [ + // ethereum + '0x24efe6b87bf1bfe9ea2ccb5a9d0a959c7172b364', + '0x786448439d9401e0a8427acf7ca66a5114eb2368', + '0x32503febaa15d0bcfda2a9d8fe492d14a750e52c', + '0x7756661eea92e4423ae4680f552aa0be0da040f1', + '0x03012a6f9bb5bff61997aee59477a893debd203b', + '0x0c7858badb509262e736748e6041b8d7b0b94dbf', + '0xb904d3f16bf305e99fd785dda1bb13df354c381b', + '0x674dcbde5c622abb3122d6934fcce446b95060dc', + '0x90b4fc25a6bd9a666aa4507148f07198a4abc849', + '0x0aa387225497ccca54fe9de989d3274c1377efe7', + '0x823b35caa9d0c66a5f9ffb6d042fa130f34cb760', + '0x9e844c8a08b6e56c7c89c7428d63599b64f62ea9', + '0x7a77073c1191f2d2fd31a71c758d44f3de0af831', + '0xbacbd121f37557e5ea1d0c4bb67756867866c3fe', + '0xf1b43f4e14650ac8c4bb009d9b56eb77c1ae87cd', + '0x5b8c75d6f91663c515bb12e3cf7c29ade0e1a302', + '0x7578fd876752a5e4999a16fb80cfe30c1056de11', + '0x1ad47ee8074ee1adabd76e97b23b94713de9d175', + '0x9a3eed88730378393e903387087964184b462c71', + '0xdd530cbe1409df4e7e2dfd18931292c81d8c5e17', + '0x6e4e0a7f4dc3068970ecb81fd28cd19d4119125b', + '0x0c662c1e8635aead580714ffa19ab5f008ab7aeb', + '0x30404353bdceebe86e0b6391fe66db1082bc6cb7', + '0xa503ddef9c88b5b566705298f8c8faace130b80b', + '0x002141edcfb5814ad2772e3aecb73a3312f0b60c', + '0xa6ce576e27ee546cb64e280bb2aa18ad438c28cc', + '0xa35ff70c648acd83cf0742b919bce4d1b424dca4', + '0x079308fcea7973da3ae2b45904948a5b51f3cba3', + '0x4ff5b5108f4db6f925cd76a68bb80565fd8053e6', + '0x0df2d534cc6849558a9d237c98be560b5ff502f8', + + // bsc + '0xc28e27870558cf22add83540d2126da2e4b464c2', + '0x4b64a2d17231882e62d7d5d84daa92e6a39e93b4', + '0xd9f2894257a57333e84682f463c01e539af15f3a', + '0x627c99cfc6421224a99b88cec08ba9894253779c', + '0xabc2984de273dd6fc4cfe602d5a9736ab94402be', + '0xd7bfb8faa3c395d475ac97f337f528565b2ea2c6', + '0x216ca859fbc236a32d6464ce17b18591dd72c3d3', + '0x5fbce2d40ea2c5233c2ba399e27a2a21b0d6964c', + '0xa9cb2cb1f0080b2d479e4be62a27969d80b6577c', + '0x2f11f3a4656732c2f9e77c8642ed8a7d42aa2a02', + '0x6047ac230eef705d294ece482f1652235dac6405', + '0xd771dcc836d69f45e8ed604be03a26bdf4be2623', + '0x01876dccb99cd6172f343a874021427afe550472', + '0x176c673a31904dbfff4255f2501567b4ddc73f65', + '0x7213c252e7857b529582dddc770ddb275759d1ec', + + // heco + '0xc2037c1c13dd589e0c14c699dd2498227d2172cc', + '0x03271182cf2b47929978d0e4ca4af0846f66e2de', + '0x891daabf6de7a648c9665928e1097b808c1721e2', + '0xe9c95876f144bbdf5dc33d1a35c26cab0611903f', + '0x389eec1b8795853770874b76b912ec18de796e1b', + '0xeaac96f59e40d38bd970b37879a79a1d28737d8a', + '0x6c606fb47d99d1e66f9b599f8c5602cd4eb44d5a', + '0xae399aea42867fec2cd4a04963a7f0e247a39431', + '0x818bbc9b9d37685f9f4db032d46b52a70d890632', + '0x6ccbc3a5ae94e8a75f9571438a78f3e3aa956655', + '0xc2d36a8c0b1235ddecac2ed519139e9177e67736', + '0x611e93a7718a215bfda3c63f7175d764793272df', + '0x377dca38ff279a73a9075f25d36d00b98515a9a1', + '0x937a48287fdc4b503d608cb988ac35eee75f076f', + '0x3f3aaaa941ad756fc49a4b3241a87a7c04e39a4e', + '0x06068d90e0cbf9b7ccfd21efddb9bceb4c47fd31', + '0xe2a246c36fa86eee290acef79a8dc66b6b7f25ba', + '0x8fc67b8ed339c740a58ebd7aae24ba9d57d8dd25', +] diff --git a/projects/satori/index.js b/projects/satori/index.js new file mode 100644 index 0000000000..ac5666b224 --- /dev/null +++ b/projects/satori/index.js @@ -0,0 +1,24 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const USDT_TOKEN_CONTRACT = "0x1E4a5963aBFD975d8c9021ce480b42188849D41d"; +const WALLET_ADDR = [ + "0x62e724cB4d6C6C7317e2FADe4A03001Fe7856940", + "0xA59a2365D555b24491B19A5093D3c99b119c2aBb", +]; +module.exports = { + methodology: + "TVL includes the total token value inside the protocol's liquidity pools.", + polygon_zkevm: { + tvl: sumTokensExport({ owners: WALLET_ADDR, tokens: [USDT_TOKEN_CONTRACT]}), + }, + era: { + tvl: sumTokensExport({ + owners: [ + "0x0842b33529516abe86CA8EA771aC4c84FDd0eeE0", + "0x48756b37Fd643bB40F669804730024F02900C476", + ], + tokens: [ADDRESSES.era.USDC], + }), + }, +}; diff --git a/projects/savvy/contracts.json b/projects/savvy/contracts.json new file mode 100644 index 0000000000..41cce45ab1 --- /dev/null +++ b/projects/savvy/contracts.json @@ -0,0 +1,46 @@ +{ + "infoAggregator": "0x68D54ff41BA47355b95Bd477Bcf4d5ff4b2c2A59", + "tokenHolders": { + "SavvyPositionManagerBTC": "0x3204d81C73F8100766C1691A67078b16Ec7c142c", + "SavvyPositionManagerETH": "0x5c4eb1909fB21e39Fc45ee753420AeDeBA07F3EF", + "SavvyPositionManagerUSD": "0x36358A1597DB299033b16fda567010D53c0A4EdA", + "YieldStrategyManagerBTC": "0xdC82E20111767f4a2A76A65BD85E41F7859c7b9f", + "YieldStrategyManagerETH": "0x23627eb1C6692Adf25AD79285FDe2bc6bdf12C82", + "YieldStrategyManagerUSD": "0x09Dde6661fd023cf7c3751555347a5cB8687F806", + "SavvySwapWETH": "0xb5231e17596bEAf436A25B018bd63e5b42e14135", + "SavvySwapBTCb": "0x43be188901F529c11337f28bC1F753a878B2F691", + "SavvySwapWBTC": "0x9A3A3ba687Fcb8AFE6367Eff3A5F5A11F51626DA", + "SavvySwapUSDCe": "0xD9565AB01AA30D7Aa2b982b8b1c740480C1C8497", + "SavvySwapUSDT": "0x0E56d518E5d3F5e6cFCfD46095B6B4024541027b", + "SavvySwapDAI": "0x03fA5a7fA80E5EA464559d21B8843E15b7969c07", + "SavvySageBTC": "0x2fcCd0f67d0722f5EB7c1A404DFF0224544155E3", + "SavvySageETH": "0xCd5156Fdd53fD9A0f5bfc37B212DD9c989C10533", + "SavvySageUSD": "0x78A370c3d5fFF93Da53a2B088a117244c52AF857", + "savvyAArbWBTC": "0xDD7e69c478288A9596DECc2230A39c7b922413Dd", + "savvyAArbWETH": "0xCaB3886D48bAd0F749ba7e7c7A255b636c64F937", + "savvyAArbUSDC": "0xCdFF8576683E22621f512fc2E6d347A9D241DAd3", + "JonesAdapterUSDC": "0x9394b6B85bEab8cba1e4aA35FbBB5C31c258224A" + }, + "savvyTokens": { + "SVY": "0x43aB8f7d2A8Dd4102cCEA6b438F6d747b1B9F034", + "svBTC": "0xeEE18334c414A47FB886a7317E1885b2Bfb8c2A6", + "svETH": "0xf7728582002ef82908c8242CF552E969BA863Ffa", + "svUSD": "0xF202Ab403Cd7E90197ec0f010ee897E283037706" + }, + "baseTokens": { + "WETH": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + "WBTC": "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", + "USDCe": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", + "USDT": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", + "DAI": "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1", + "BTCb": "0x2297aEbD383787A160DD0d9F71508148769342E3" + }, + "yieldTokens": { + "aArbWBTC": "0x078f358208685046a11C85e8ad32895DED33A249", + "aArbWETH": "0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8", + "aArbUSDC": "0x625E7708f30cA75bfd92586e17077590C60eb4cD", + "jUSDC": "0xe66998533a1992ecE9eA99cDf47686F4fc8458E0" + } + +} + diff --git a/projects/savvy/index.js b/projects/savvy/index.js new file mode 100644 index 0000000000..72d6b843be --- /dev/null +++ b/projects/savvy/index.js @@ -0,0 +1,16 @@ +const contracts = require("./contracts.json"); +const { sumTokens2 } = require("../helper/unwrapLPs"); + +function tvl(chain) { + return async (timestamp, block, chainBlocks, { api }) => { + const tokens = Object.values(contracts.baseTokens).concat(Object.values(contracts.yieldTokens)); + await sumTokens2({ tokens, api, owners: Object.values(contracts.tokenHolders) }) + }; +} + +module.exports = { + methodology: 'The calculated TVL is the current sum of all base tokens and yield tokens in our contracts.', + arbitrum: { + tvl: tvl("arbitrum") + } +} \ No newline at end of file diff --git a/projects/scallop/index.js b/projects/scallop/index.js index a07c77d0ab..5d7ad92a46 100644 --- a/projects/scallop/index.js +++ b/projects/scallop/index.js @@ -2,7 +2,9 @@ const anchor = require("@project-serum/anchor"); const { PublicKey } = require("@solana/web3.js"); const activePoolBases = require("./active-pools.json"); const { getConnection, decodeAccount } = require("../helper/solana"); +const sui = require("../helper/chain/sui"); const sdk = require('@defillama/sdk') +const BigNumber = require("bignumber.js"); const SCALLOP_PROGRAM_ID = new PublicKey("SCPv1LabixHirZbX6s7Zj3oiBogadWZvGUKRvXD3Zec"); @@ -10,6 +12,8 @@ const SCALLOP_PROGRAM_ID = new PublicKey("SCPv1LabixHirZbX6s7Zj3oiBogadWZvGUKRvX const COUPON_SEED = "coupon_seed"; const POOL_AUTHORITY = "pool_authority_seed"; +const SCALLOP_SUI_MARKET_ID = "0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9" + function getTokenGeckoId(mintAuthority) { for (let i = 0; i < activePoolBases.length; i++) { const pubkey = new PublicKey(activePoolBases[i].base) @@ -22,7 +26,7 @@ function getTokenGeckoId(mintAuthority) { } } -async function tvl() { +async function solanaTvl() { const connection = getConnection() // at Scallop, coupon representing deposited amount of a pool @@ -54,9 +58,58 @@ async function tvl() { return balances; } +async function suiBorrowed() { + const { api } = arguments[3] + const object = await sui.getObject(SCALLOP_SUI_MARKET_ID) + + const balanceSheetsFields = await sui.getDynamicFieldObjects({ + parent: object.fields.vault.fields.balance_sheets.fields.table.fields.id.id, + }); + + const balanceSheets = await sui.getObjects(balanceSheetsFields.map((e) => e.fields.id.id)) + + balanceSheets.forEach((e) => { + const coinType = '0x' + e.fields.name.fields.name + const amount = new BigNumber(e.fields.value.fields.debt).toString() + api.add(coinType, amount) + }) +} + +async function suiTvl() { + const { api } = arguments[3] + const object = await sui.getObject(SCALLOP_SUI_MARKET_ID) + + const balanceSheetsFields = await sui.getDynamicFieldObjects({ + parent: object.fields.vault.fields.balance_sheets.fields.table.fields.id.id, + }); + + const balanceSheets = await sui.getObjects(balanceSheetsFields.map((e) => e.fields.id.id)) + + balanceSheets.forEach((e) => { + const coinType = '0x' + e.fields.name.fields.name + const amount = new BigNumber(e.fields.value.fields.cash).toString() + api.add(coinType, amount) + }) + + const collateralStatsFields = await sui.getDynamicFieldObjects({ + parent: object.fields.collateral_stats.fields.table.fields.id.id, + }); + + const collateralStats = await sui.getObjects(collateralStatsFields.map((e) => e.fields.id.id)) + + collateralStats.forEach((e) => { + const coinType = '0x' + e.fields.name.fields.name + api.add(coinType, e.fields.value.fields.amount) + }) +} + module.exports = { timetravel: false, solana: { - tvl, + tvl: solanaTvl, + }, + sui: { + tvl: suiTvl, + borrowed: suiBorrowed, }, } \ No newline at end of file diff --git a/projects/scanto/index.js b/projects/scanto/index.js new file mode 100644 index 0000000000..8f7882ca47 --- /dev/null +++ b/projects/scanto/index.js @@ -0,0 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') +async function tvl(_, _b, _cb, { api }){ + const supply = await api.call({ abi: "function totalSupply() view returns (uint256)", target:"0x9F823D534954Fc119E31257b3dDBa0Db9E2Ff4ed" }) + return { + ["canto:" + ADDRESSES.null]: supply + } +} + +module.exports={ + canto:{ + tvl + } +} \ No newline at end of file diff --git a/projects/scientixfinance/index.js b/projects/scientixfinance/index.js index c376765495..79d32727ba 100644 --- a/projects/scientixfinance/index.js +++ b/projects/scientixfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*================================================== Modules ==================================================*/ @@ -16,7 +17,7 @@ const Farm = '0x68145F3319F819b8E01Dfa3c094fa8205E9EfB9a'; const VotingEscrow = '0xF92aBA2A79dC133278DE2CDDB38Db775A4b5B024'; // Token -const BUSD = "0xe9e7cea3dedca5984780bafc599bd69add087d56"; +const BUSD = ADDRESSES.bsc.BUSD; const ibALPACA = "0xf1be8ecc990cbcb90e166b71e368299f0116d421"; const scUSD = "0x0E5C2b15666EEE4b66788E45CF4Da0392C070fa7"; const SCIX = "0x2CFC48CdFea0678137854F010b5390c5144C0Aa5"; diff --git a/projects/scion-finance/addresses.js b/projects/scion-finance/addresses.js index f3277a765a..b0d1ee3554 100644 --- a/projects/scion-finance/addresses.js +++ b/projects/scion-finance/addresses.js @@ -1,4 +1,5 @@ -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const ADDRESSES = require('../helper/coreAssets.json') +const USDC = ADDRESSES.ethereum.USDC; module.exports = { moonriver: [ diff --git a/projects/scream/index.js b/projects/scream/index.js index f992f35803..26b8f3ef01 100644 --- a/projects/scream/index.js +++ b/projects/scream/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getCompoundV2Tvl } = require('../helper/compound') const { transformFantomAddress } = require('../helper/portedTokens') const { staking } = require('../helper/staking') @@ -7,7 +8,7 @@ function lending(borrowed) { const transformAdress = await transformFantomAddress() const balances = await getCompoundV2Tvl("0x260e596dabe3afc463e75b6cc05d8c46acacfb09", "fantom", addr => { if (addr === "0xAd84341756Bf337f5a0164515b1f6F993D194E1f") { - return "0x0000000000085d4780b73119b644ae5ecd22b376" + return ADDRESSES.ethereum.TUSD } return transformAdress(addr) }, undefined, undefined, borrowed)(...params) diff --git a/projects/scrubinvest/index.js b/projects/scrubinvest/index.js index f6ce9b7215..b2eea9d54f 100644 --- a/projects/scrubinvest/index.js +++ b/projects/scrubinvest/index.js @@ -1,16 +1,69 @@ -const { sumTokensExport } = require("../helper/unwrapLPs"); +const { sumUnknownTokens } = require("../helper/unknownTokens"); +async function tvl(_, _b, _cb, { api, }) { + + const calls = [ + { target: '0x075CA53543D304c02Ee692C0b691770AEB273dA4', params: '0x4402Cf5433D57266563979654d20887AcE672393' }, + { target: '0x69cEf0795FFFa66DfC4Ffc90E8Bd05c399388650', params: '0xa2355f35Ab85f1771FB1085a0e5b2599B8F47457' }, + { target: '0xe2C935041aEF672974A31d46c41A4F292982e621', params: '0x2c1C6aaB89272d07B7f78bFe93eefb6D2631Cf94' }, + { target: '0x46B9FCac1B698AE54b9c1D52A734338964e28AEE', params: '0x070110b0cAd64833b1a6a9E86337A4e4eE786607' }, + { target: '0xA250a3b6a5e5E8b398092537951F8Bd80639ed5c', params: '0xE04539bD52618B7d197Be54B3e4D80732082906E' }, + { target: '0xCa0d15B4BB6ad730fE40592f9E25A2E052842c92', params: '0xEa892552BD31A20F42ceb3476D6A280c405883d0' }, + { target: '0xa27a1f03479cfe4B0b97Fd8c772a84aD815C1946', params: '0xa1FA74fD861FFf2fc5f7a618A05beB12709fB419' }, + { target: '0x74AE6bB3138DB1969c52f39e2c311d997528633B', params: '0x2D1D648c2AEdf62037f2b80f9cC8c93258179380' }, + { target: '0x8EEA85dA61b397EaB933C001DAAD6fC1C5A4c67C', params: '0xcf4673F714183C42DADc1B42DAC21BE09cfc3684' }, + { target: '0xc28fcef5970fd23e5bfcdc31ce1ba72ef98cc70a', params: '0xef7541FCa94988fA423bC418a854f7967f83a3E0' }, + { target: '0x371d33963fb89ec9542a11ccf955b3a90391f99f', params: '0x43Ac7f627e41EBDa7515FEaCa425306AaB9cB602' }, + { target: '0x1E5573b2A7C1D08112d0Ff22e9F2D8EFc9583532', params: '0x9e890FBD4295D92c41fA12a2083b51C387699Fd8' }, + { target: '0x8fE243F8B47107c468537D74514d7c52Cd61E937', params: '0x56a9c9230d6D3b7bF147c10fdDBCD8F2eB1a2B6d' }, + //NEW LPs 14/07 - GAUGE / CONTRACT + { target: '0x5383dEB37479599a33584f7Bbc346ab299e30FF0', params: '0x79eb3848B7B4630D1d883172f8e56B2e8fb18521' }, + { target: '0x776d2Ae19FC4c5982D5b20d8c14BCDae09755796', params: '0x1C415Ce79D0A18A4aA835D3d9083d2aF4d7894FC' }, + { target: '0x1f343A11b317EB54F08D80FD3cF9d706eDA5982c', params: '0xF35265f9713FD7ab6a27D387B2D02C1306FFB606' }, + + ] + const bals = await api.multiCall({ abi: 'erc20:balanceOf', calls }) + const lps = await api.multiCall({ abi: 'address:stake', calls: calls.map(i => i.target)}) + api.addTokens(lps, bals) + + return sumUnknownTokens({ + api, + tokensAndOwners: [ + // YieldOptimizers Mare + ['0x066C98E48238e8D77006a5fA14EC3B080Fd2848d', '0xcd017B495DF1dE2DC8069b274e2ddfBB78561176'], + ['0x92e17FD2DA50775FBD423702E4717cCD7FB2A6BB', '0x88555c4d8e53ffB223aB5baDe0B5e6B2Cd3966c4'], + ['0x58333b7D0644b52E0e56cC3803CA94aF9e0B52C3', '0xB4Ba7ba722eacAE8f1e4c6213AF05b5E8B27dbdB'], + ['0x24149e2D0D3F79EBb7Fc464b09e3628dE395b39D', '0xB9774bB2A18Af59Ec9bf86dCaeC07473A2D2F230'], + ['0x0B6c2a9d4d739778dF6cD1cf815754BD1438063c', '0x3CcA2C0d433E00433082ba16e968CA11dA6Dc156'], + ['0x2f9e61D4E9A9A3694CcDc287c790EA5cc3302E88', '0x1504B9EDdD57Ed8252b3b3b407DdE27B72A80790'], + ['0x350c4A0aC240755Bb6432FeB907eCAFbbBc75770', '0xC05021F3b3601BF33aB59dc75577B85985ACaab7'], + ['0x8E00102d96b34BEF29F3E1e0e5DBd0a611Cac312', '0x6d81FcA3abD89Bd89D400281aE5f1Ee0D62Cd16f'], + // also count base assets if available + ['0xfA9343C3897324496A05fC75abeD6bAC29f8A40f', '0xcd017B495DF1dE2DC8069b274e2ddfBB78561176'], + ['0xB44a9B6905aF7c801311e8F4E76932ee959c663C', '0x88555c4d8e53ffB223aB5baDe0B5e6B2Cd3966c4'], + ['0x765277EebeCA2e31912C9946eAe1021199B39C61', '0xB4Ba7ba722eacAE8f1e4c6213AF05b5E8B27dbdB'], + ['0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b', '0xB9774bB2A18Af59Ec9bf86dCaeC07473A2D2F230'], + ['0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', '0x3CcA2C0d433E00433082ba16e968CA11dA6Dc156'], + ['0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d', '0x1504B9EDdD57Ed8252b3b3b407DdE27B72A80790'], + ['0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b', '0xC05021F3b3601BF33aB59dc75577B85985ACaab7'], + // New Scrub Pool + ['0x471F79616569343e8e84a66F342B7B433b958154', '0x67041094c4fc1492A1AB988Fb8De0ab4A0a4A080'], + + // WETH + + // Vaults Equilibre Scrub + // ['0xeA848151ACB1508988e56Ee7689F004df2B15ced', "0x4402Cf5433D57266563979654d20887AcE672393"], + // ['0x7f8ed7d31795dc6f5fc5f6685b11419674361501', "0xa2355f35Ab85f1771FB1085a0e5b2599B8F47457"], + // ['0x09d6561b3795ae237e42f7adf3dc83742e10a2e8', "0x2c1C6aaB89272d07B7f78bFe93eefb6D2631Cf94"], + ], + useDefaultCoreAssets: true, + resolveLP: true, + lps + }) +} module.exports = { - kava: { - tvl: sumTokensExport({ - chain: 'kava', - tokensAndOwners: [ - // [tokenAddress, ownerContractAddress] - ['0x066C98E48238e8D77006a5fA14EC3B080Fd2848d', '0xcd017B495DF1dE2DC8069b274e2ddfBB78561176'], - ['0x92e17FD2DA50775FBD423702E4717cCD7FB2A6BB', '0x88555c4d8e53ffB223aB5baDe0B5e6B2Cd3966c4'], - ['0x58333b7D0644b52E0e56cC3803CA94aF9e0B52C3', '0xB4Ba7ba722eacAE8f1e4c6213AF05b5E8B27dbdB'], - ['0x24149e2D0D3F79EBb7Fc464b09e3628dE395b39D', '0xB9774bB2A18Af59Ec9bf86dCaeC07473A2D2F230'], - ], - }), - } + misrepresentedTokens: true, + kava: { + tvl, + } }; diff --git a/projects/seashell/index.js b/projects/seashell/index.js new file mode 100644 index 0000000000..e78ce92610 --- /dev/null +++ b/projects/seashell/index.js @@ -0,0 +1,13 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const SGLP_TOKEN = "0x5402B5F40310bDED796c7D0F3FF6683f5C0cFfdf"; +const BLUEBERRY_GLP_COMPOUNDER_CONTRACT = + "0x5BAC5eEfA13696Cf815388021235b215587263Ea"; + +module.exports = { + methodology: "Total assets in Seashell's Blueberry GLP Compounder contract", + start: 66190371, + arbitrum: { + tvl: sumTokensExport({ owner: BLUEBERRY_GLP_COMPOUNDER_CONTRACT, tokens: [SGLP_TOKEN]}), + }, +}; diff --git a/projects/securedao/index.js b/projects/securedao/index.js index 02e9af33f4..7d9391d5d8 100644 --- a/projects/securedao/index.js +++ b/projects/securedao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {ohmTvl} = require("../helper/ohm"); const scr = "0x8183C18887aC4386CE09Dbdf5dF7c398DAcB2B5a"; @@ -7,7 +8,7 @@ const stakingContract = "0x3d97040e407078823891C59BB07eadb2dDF3AE32" module.exports = { misrepresentedTokens: true, ...ohmTvl(treasury, [ - ["0x82f0b8b456c1a451378467398982d4834b6829c1", false], // MIM + [ADDRESSES.fantom.MIM, false], // MIM ["0x468c174cc015d4a697586C0a99F95E045F7e6f91", true] // scrMim SPIRIT LP ], "fantom", stakingContract, scr, undefined, undefined, false) } \ No newline at end of file diff --git a/projects/seeder/index.js b/projects/seeder/index.js index c7a48f3d5b..adf7db3294 100644 --- a/projects/seeder/index.js +++ b/projects/seeder/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { transformBscAddress } = require("../helper/portedTokens"); @@ -6,7 +7,7 @@ const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); const farmContract = "0x1aF28E7b1A03fA107961897a28449F4F9768ac75"; const bankContract = "0x99dD1c7a2893931D209fA5C57FE65f34d4C11db8"; const LEAF = "0x1cbddf83de068464eba3a4e319bd3197a7eea12c"; -const WBNB = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; +const WBNB = ADDRESSES.bsc.WBNB; const bscTvl = async (chainBlocks) => { const balances = {}; diff --git a/projects/selfex/index.js b/projects/selfex/index.js new file mode 100644 index 0000000000..78a9d22d46 --- /dev/null +++ b/projects/selfex/index.js @@ -0,0 +1,11 @@ +const { getUniTVL } = require('../helper/unknownTokens') +const chains = ['kava'] + +module.exports = { + misrepresentedTokens: true, + methodology: "Using DefiLlama's SDK for making on-chain calls to Selfex Factory Contract to iterate over Liquidity Pools & count token balances therein.", +}; + +chains.forEach(chain => { + module.exports[chain] = { tvl: getUniTVL({ factory: '0x98a3567692Eb055fA1F05D616cad494DE9B05512', useDefaultCoreAssets: true, }) } +}) diff --git a/projects/senpai/index.js b/projects/senpai/index.js index c8f3e72380..08b229e9b9 100644 --- a/projects/senpai/index.js +++ b/projects/senpai/index.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {ohmTvl} = require('../helper/ohm') const transforms = { - "0xf74195bb8a5cf652411867c5c2c5b8c2a402be35": "0x6b175474e89094c44da98b954eedeac495271d0f", - "0x66a2a913e447d6b4bf33efbec43aaef87890fbbc": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + [ADDRESSES.boba.DAI]: ADDRESSES.ethereum.DAI, + [ADDRESSES.boba.USDC]: ADDRESSES.ethereum.USDC, } module.exports={ ...ohmTvl("0xbfFC76cDC85A496404662dc7D8A270cE9567C544", [ - ["0xf74195Bb8a5cf652411867c5C2C5b8C2a402be35", false], //dai + [ADDRESSES.boba.DAI, false], //dai ["0xF582bC0437a1F1D0476f3a0c8efeEc8d05E6bc96", true], ["0x32fDfeA5CdCe7E417818ed5093E8bD4cA85dfE06", true], - ["0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc", false] //usdc + [ADDRESSES.boba.USDC, false] //usdc ], "boba", "0xAECFc89Da2f125D893Da6Fb6d157b5DfF1F0aD9E", "0xaC3a4aF1778203c8B651dAfA73cEd5b79c80F239", addr=> transforms[addr.toLowerCase()] , diff --git a/projects/sentiment/index.js b/projects/sentiment/index.js index aefd268e8b..c0c8973ab5 100644 --- a/projects/sentiment/index.js +++ b/projects/sentiment/index.js @@ -1,29 +1,42 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { graphFetchById } = require('../helper/http') + async function tvl(timestamp, ethBlock, { arbitrum: block }, { api }) { const tokens = await api.call({ target: "0x17b07cfbab33c0024040e7c299f8048f4a49679b", abi: "address[]:getAllLTokens", }) const assets = await api.multiCall({ calls: tokens, abi: "address:asset", }) const totalAssets = await api.multiCall({ calls: tokens, abi: "uint256:totalAssets", }) api.addTokens(assets, totalAssets) - const userAccounts = await api.call({ target: "0x17b07cfbab33c0024040e7c299f8048f4a49679b", abi: "address[]:getAllAccounts", }) + // const userAccounts = await api.call({ target: "0x17b07cfbab33c0024040e7c299f8048f4a49679b", abi: "address[]:getAllAccounts", }) + const data = await graphFetchById({ endpoint: 'https://api.thegraph.com/subgraphs/name/r0ohafza/sentiment', query, api, options: { useBlock: true, } }) + const userAccounts = data.map(i => i.id) const [equity, borrows] = await Promise.all([ - api.multiCall({ target: "0xc0ac97A0eA320Aa1E32e9DEd16fb580Ef3C078Da", calls: userAccounts, abi: "function getBalance(address account) view returns (uint256)", }), - api.multiCall({ target: "0xc0ac97A0eA320Aa1E32e9DEd16fb580Ef3C078Da", calls: userAccounts, abi: "function getBorrows(address account) view returns (uint256)", }), + api.multiCall({ target: "0xc0ac97A0eA320Aa1E32e9DEd16fb580Ef3C078Da", calls: userAccounts, abi: "function getBalance(address account) view returns (uint256)", permitFailure: true, }), + api.multiCall({ target: "0xc0ac97A0eA320Aa1E32e9DEd16fb580Ef3C078Da", calls: userAccounts, abi: "function getBorrows(address account) view returns (uint256)", permitFailure: true, }), ]) - for (let i = 0; i < equity.length; i++) - api.add('0x82af49447d8a07e3bd95bd0d56f35241523fbab1', equity[i] - borrows[i], {}) -} - -async function borrowed(timestamp, ethBlock, { arbitrum: block }, { api }) { - const tokens = await api.call({ target: "0x17b07cfbab33c0024040e7c299f8048f4a49679b", abi: "address[]:getAllLTokens", }) - const assets = await api.multiCall({ calls: tokens, abi: "address:asset", }) - const borrows = await api.multiCall({ calls: tokens, abi: "uint256:borrows", }) - api.addTokens(assets, borrows) + for (let i = 0; i < equity.length; i++) { + const equity_ = equity[i] ?? 0 + const borrow = borrows[i] ?? 0 + api.add(ADDRESSES.arbitrum.WETH, equity_ - borrow) + } } module.exports = { misrepresentedTokens: true, arbitrum: { tvl, }, hallmarks: [ - [Math.floor(new Date('2023-04-04')/1e3), '1M hack'], + [Math.floor(new Date('2023-04-04') / 1e3), '1M hack'], ], }; + +const query = `query get_accounts($lastId: String!, $block: Int!) { + accounts( + first: 1000 + block: {number: $block} + where: {and: [{id_gt: $lastId}, {or: [{balance_gt: 0}, {debt_gt: 0}]}]} + ) { + id + balance + debt + } +}` \ No newline at end of file diff --git a/projects/serum.js b/projects/serum.js index 8cf1a10ba5..9e1f68e6c5 100644 --- a/projects/serum.js +++ b/projects/serum.js @@ -32,6 +32,7 @@ module.exports = { timetravel: false, hallmarks: [ [1667826000, "FTX/Alameda collapse"], + [1680310800, "Move to onchain data"], ], solana: { tvl, }, } diff --git a/projects/set-protocol/v1.js b/projects/set-protocol/v1.js index fe2b1d23c3..8db98ead55 100644 --- a/projects/set-protocol/v1.js +++ b/projects/set-protocol/v1.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); @@ -9,19 +10,19 @@ Settings const cTokenDecimalScale = BigNumber("10").pow(18); const tokens = [ - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC - '0x514910771AF9Ca656af840dff83E8264EcF986CA', // LINK - '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', // SAI - '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.LINK, + ADDRESSES.ethereum.SAI, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, '0x39AA39c021dfbaE8faC545936693aC917d5E7563', // cUSDC '0x5d3a536e4d6dbd6114cc1ead35777bab948e3643', // cDAI ] const cTokensMap = { - '0x39AA39c021dfbaE8faC545936693aC917d5E7563': '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // cUSDC: USDC - '0x5d3a536e4d6dbd6114cc1ead35777bab948e3643': '0x6B175474E89094C44Da98b954EedeAC495271d0F' // cDAI: DAI + '0x39AA39c021dfbaE8faC545936693aC917d5E7563': ADDRESSES.ethereum.USDC, // cUSDC: USDC + '0x5d3a536e4d6dbd6114cc1ead35777bab948e3643': ADDRESSES.ethereum.DAI // cDAI: DAI } /*================================================== diff --git a/projects/set-protocol/v2.js b/projects/set-protocol/v2.js index dd7b39231a..148e05fa7d 100644 --- a/projects/set-protocol/v2.js +++ b/projects/set-protocol/v2.js @@ -4,7 +4,6 @@ const BigNumber = require('bignumber.js'); const SUPPLY_SCALE = BigNumber("10").pow(18) const START_BLOCK = 10830496; -const EXTERNAL_POSITION = '1'; const getSets = "address[]:getSets" const getPositions = 'function getPositions() view returns (tuple(address component, address module, int256 unit, uint8 positionState, bytes data)[])'; @@ -48,7 +47,6 @@ module.exports = async function tvl(timestamp, block) { }), })).output; - let uniswapPositions = {}; positionsForSets.forEach(function(positionForSet, i) { const setSupply = BigNumber(supplies[i].output); if(positionForSet.output === null){ @@ -58,7 +56,6 @@ module.exports = async function tvl(timestamp, block) { const componentAddress = position[0]; const positionUnits = BigNumber(position[2]); - const isExternalPosition = position[3] == EXTERNAL_POSITION; balances[componentAddress] = BigNumber(balances[componentAddress] || 0).plus((positionUnits).times(setSupply).div(SUPPLY_SCALE)).toFixed(0); }); }); diff --git a/projects/sft-protocol/index.js b/projects/sft-protocol/index.js index a3f0f02f24..aa3b06591d 100644 --- a/projects/sft-protocol/index.js +++ b/projects/sft-protocol/index.js @@ -1,25 +1,30 @@ -const {sumTokens2} = require('../helper/unwrapLPs'); -const {utils} = require("ethers"); -const {get} = require('../helper/http'); +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2 } = require('../helper/unwrapLPs'); +const { utils } = require("ethers"); +const { getConfig } = require('../helper/cache'); const tokens = [ - '0x0000000000000000000000000000000000000000', // FIL + ADDRESSES.null, // FIL ] const getActiveMinersFromRPC = async () => { - const resp = await get('https://api.sftproject.io/api/v1/public/dashboard/info') + const resp = await getConfig('sft-protocol', 'https://ww8.sftproject.io/api/c/api/v1/public/dashboard/info') let nodes = [] let node_i = [] - nodes = resp.data.combined.map(({ miner }) => { + nodes = resp.data.combined + .filter(i => i.miner && i.miner !== '') + .map(({ miner }) => { let node = parseInt(miner.slice(2,)) let bytes = Buffer.alloc(20); bytes.writeUint8(0xff, 0); bytes.writeBigUint64BE(BigInt(node), 12); return utils.getAddress('0x' + bytes.toString('hex')); }); - + if (resp.data.independent !== null) { - node_i = resp.data.independent.map(({ miner }) => { + node_i = resp.data.independent + .filter(i => i.miner && i.miner !== '') + .map(({ miner }) => { let node = parseInt(miner.slice(2,)) let bytes = Buffer.alloc(20); bytes.writeUint8(0xff, 0); @@ -33,12 +38,12 @@ const getActiveMinersFromRPC = async () => { module.exports = { filecoin: { - tvl: async (_, _1, _2, {api}) => { + tvl: async (_, _1, _2, { api }) => { let balances = {}; let minerAddrs = await getActiveMinersFromRPC(); - await sumTokens2({balances, owners: minerAddrs, tokens, api, }); + await sumTokens2({ balances, owners: minerAddrs, tokens, api, }); return balances; } diff --git a/projects/shadecash/index.js b/projects/shadecash/index.js index db7d98e6b0..f03bb42deb 100644 --- a/projects/shadecash/index.js +++ b/projects/shadecash/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require('../helper/unwrapLPs') const addresses = require('./contracts.json') const { transformFantomAddress } = require("../helper/portedTokens"); @@ -6,14 +7,14 @@ const {staking} = require('../helper/staking'); const {pool2} = require('../helper/pool2') const tokens = { - "USDC": "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", + "USDC": ADDRESSES.fantom.USDC, "xBOO": "0xa48d959AE2E88f1dAA7D5F611E01908106dE7598", "SHADE": "0x3A3841f5fa9f2c283EA567d5Aeea3Af022dD2262" }; async function tvl(_, _ethBlock, chainBlocks) { let balances = { - "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83": 0 + [ADDRESSES.fantom.WFTM]: 0 } let calls = []; @@ -24,9 +25,9 @@ async function tvl(_, _ethBlock, chainBlocks) { block: chainBlocks['fantom'], chain: "fantom" }).then(b => { - balances["0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"] = + balances[ADDRESSES.fantom.WFTM] = Number(b.output) + - Number(balances["0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83"]); + Number(balances[ADDRESSES.fantom.WFTM]); }); } // GET ERC20 BALANCES diff --git a/projects/shadeprotocol-derivatives/index.js b/projects/shadeprotocol-derivatives/index.js new file mode 100644 index 0000000000..6b03ff08d6 --- /dev/null +++ b/projects/shadeprotocol-derivatives/index.js @@ -0,0 +1,15 @@ +const { get } = require("../helper/http") + +async function tvl(_, _b, _cb, { api, }) { + const data = await get('https://ruvzuawwz7.execute-api.us-east-1.amazonaws.com/prod-analytics-v1/derivatives') + return { + tether: data.totalUsd + } +} + +module.exports = { + misrepresentedTokens: true, + secret: { + tvl + } +} \ No newline at end of file diff --git a/projects/shadeprotocol-lend/index.js b/projects/shadeprotocol-lend/index.js new file mode 100644 index 0000000000..2bf9299ee7 --- /dev/null +++ b/projects/shadeprotocol-lend/index.js @@ -0,0 +1,24 @@ +const { get } = require("../helper/http") + +// Total Collateral Deposited in Vaults +async function tvl(_, _b, _cb, { api, }) { + const data = await get('https://ruvzuawwz7.execute-api.us-east-1.amazonaws.com/prod-analytics-v1/lend') + + let totalValue = 0; + + for (let i = 0; i < data.collaterals.length; i++) { + // Add the value of each collateral to the total value + totalValue += data.collaterals[i].value; + } + + return { + tether: totalValue + } +} + +module.exports = { + misrepresentedTokens: true, + secret: { + tvl + } +} diff --git a/projects/shadeprotocol-silk/index.js b/projects/shadeprotocol-silk/index.js new file mode 100644 index 0000000000..0b1d3f2a40 --- /dev/null +++ b/projects/shadeprotocol-silk/index.js @@ -0,0 +1,15 @@ +const { get } = require("../helper/http") + +async function tvl(_, _b, _cb, { api, }) { + const data = await get('https://ruvzuawwz7.execute-api.us-east-1.amazonaws.com/prod-analytics-v1/silk') + return { + tether: data.totalUsd + } +} + +module.exports = { + misrepresentedTokens: true, + secret: { + tvl + } +} \ No newline at end of file diff --git a/projects/shadeprotocol-swap/index.js b/projects/shadeprotocol-swap/index.js new file mode 100644 index 0000000000..26666b229d --- /dev/null +++ b/projects/shadeprotocol-swap/index.js @@ -0,0 +1,17 @@ +const { get } = require("../helper/http") + +async function tvl(_, _b, _cb, { api, }) { + const data = await get('https://na36v10ce3.execute-api.us-east-1.amazonaws.com/API-mainnet-STAGE/shadeswap/pairs') + return { + tether: data.map(i => +i.liquidity_usd).filter(i=>i<1e9).reduce((a, i) => a + i) + } + +} + + +module.exports = { + misrepresentedTokens: true, + secret: { + tvl + } +} \ No newline at end of file diff --git a/projects/shadeswap/index.js b/projects/shadeswap/index.js index d04e866b48..26666b229d 100644 --- a/projects/shadeswap/index.js +++ b/projects/shadeswap/index.js @@ -3,7 +3,7 @@ const { get } = require("../helper/http") async function tvl(_, _b, _cb, { api, }) { const data = await get('https://na36v10ce3.execute-api.us-east-1.amazonaws.com/API-mainnet-STAGE/shadeswap/pairs') return { - tether: data.map(i => +i.liquidity_usd).reduce((a, i) => a + i) + tether: data.map(i => +i.liquidity_usd).filter(i=>i<1e9).reduce((a, i) => a + i) } } diff --git a/projects/shapeshift/index.js b/projects/shapeshift/index.js index af38c84c7f..8e6a4836e8 100644 --- a/projects/shapeshift/index.js +++ b/projects/shapeshift/index.js @@ -1,18 +1,35 @@ const { staking } = require("../helper/staking"); +const { pool2 } = require("../helper/pool2"); // Contracts -const StakingYieldContract = "0xDd80E21669A664Bce83E3AD9a0d74f8Dad5D9E72"; -const StakingYieldContractV2 = "0xc54b9f82c1c54e9d4d274d633c7523f2299c42a0"; +const stakingUNIv2Contracts = [ + "0xDd80E21669A664Bce83E3AD9a0d74f8Dad5D9E72", // v1 + "0xc54b9f82c1c54e9d4d274d633c7523f2299c42a0", // v2 + "0x212ebf9fd3c10f371557b08e993eaab385c3932b", // v3 + "0x24FD7FB95dc742e23Dc3829d3e656FEeb5f67fa0", // v4 + "0xC14eaA8284feFF79EDc118E06caDBf3813a7e555", // v5 + "0xEbB1761Ad43034Fd7FaA64d84e5BbD8cB5c40b68", // v6 +]; +const stakingFoxy = "0xee77aa3Fd23BbeBaf94386dD44b548e9a785ea4b"; // Tokens Or LPs const ETH_FOX_UNIV2 = "0x470e8de2eBaef52014A47Cb5E6aF86884947F08c"; const FOX = "0xc770eefad204b5180df6a14ee197d99d808ee52d"; +const tFOX = "0x808D3E6b23516967ceAE4f17a5F9038383ED5311"; +const FOXy = "0xDc49108ce5C57bc3408c3A5E95F3d864eC386Ed3"; module.exports = { ethereum: { - pool2: staking([StakingYieldContract, StakingYieldContractV2], [ETH_FOX_UNIV2]), - tvl: async ()=>({}), + pool2: pool2( + [...stakingUNIv2Contracts, ], + [ETH_FOX_UNIV2, ] + ), + staking: staking( + [stakingFoxy], + [FOX, tFOX] + ), + tvl: async () => ({}), }, methodology: - "We count liquidity of ETH-FOX LP deposited on Uniswap V2 pool through StakingYieldContract contract; and the staking of native token", + "We count liquidity of ETH-FOX LP deposited on Uniswap V2 pool through StakingYieldContract contracts; and the staking of native token", }; diff --git a/projects/sharedstake/index.js b/projects/sharedstake/index.js index 9bd72b48d7..5dae9057b0 100644 --- a/projects/sharedstake/index.js +++ b/projects/sharedstake/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const {unwrapUniswapLPs} = require('../helper/unwrapLPs') -const wethAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const wethAddress = ADDRESSES.ethereum.WETH const sgtStakingPool = "0xc637dB981e417869814B2Ea2F1bD115d2D993597" const sgt = "0x84810bcF08744d5862B8181f12d17bfd57d3b078" const pool2StakingPool = "0x64A1DB33f68695df773924682D2EFb1161B329e8" diff --git a/projects/sharelock/index.js b/projects/sharelock/index.js new file mode 100644 index 0000000000..d3810ed4ab --- /dev/null +++ b/projects/sharelock/index.js @@ -0,0 +1,7 @@ +const { getUniTVL} = require("../helper/unknownTokens") + +module.exports = { + era: { + tvl: getUniTVL({ factory: '0xea51CE8A1f9C1Cbbf5B89D9B1dA4A94fB1557866', fetchBalances: true, }) + }, +} diff --git a/projects/sharky/helper/index.js b/projects/sharky/helper/index.js index 25f9b4f23b..49a955cc8c 100644 --- a/projects/sharky/helper/index.js +++ b/projects/sharky/helper/index.js @@ -27,7 +27,7 @@ async function borrowed(timestamp, _, _1, { api }) { return +time.start + +time.duration > timestamp }) api.log('active loans count: ',loans.length) - loans.forEach(i => api.add(i.valueTokenMint, i.principalLamports.toString())) + loans.forEach(i => api.add(i.valueTokenMint.toString(), i.principalLamports.toString())) } async function tvl(timestamp, _, _1, { api }) { @@ -38,7 +38,7 @@ async function tvl(timestamp, _, _1, { api }) { return !i.loanState.taken }) api.log('Loans yet to be taken: ',loans.length) - loans.forEach(i => api.add(i.valueTokenMint, i.principalLamports.toString())) + loans.forEach(i => api.add(i.valueTokenMint.toString(), i.principalLamports.toString())) } module.exports = { diff --git a/projects/sheesha.js b/projects/sheesha.js index 972a062be2..2562c0a91d 100644 --- a/projects/sheesha.js +++ b/projects/sheesha.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumLPWithOnlyOneToken } = require("./helper/unwrapLPs"); const { stakingUnknownPricedLP } = require("./helper/staking"); async function pool2(timestamp, block, chainBlocks) { const balances = {}; - await sumLPWithOnlyOneToken(balances, "0xB31Ecb43645EB273210838e710f2692CC6b30a11", "0x5d350F07c1D9245c1Ecb7c622c67EDD49c6a0A35", "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`) + await sumLPWithOnlyOneToken(balances, "0xB31Ecb43645EB273210838e710f2692CC6b30a11", "0x5d350F07c1D9245c1Ecb7c622c67EDD49c6a0A35", ADDRESSES.bsc.WBNB, chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`) return balances } diff --git a/projects/shell/index.js b/projects/shell/index.js index 6c0cec1f2c..c66fc55209 100644 --- a/projects/shell/index.js +++ b/projects/shell/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, sumTokensExport, } = require('../helper/unwrapLPs'); const OCEAN_CONTRACT = '0xC32eB36f886F638fffD836DF44C124074cFe3584'; -const DAI_CONTRACT = '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1'; -const USDC_CONTRACT = '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8'; -const USDT_CONTRACT = '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'; -const WBTC_CONTRACT = '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f'; +const DAI_CONTRACT = ADDRESSES.optimism.DAI; +const USDC_CONTRACT = ADDRESSES.arbitrum.USDC; +const USDT_CONTRACT = ADDRESSES.arbitrum.USDT; +const WBTC_CONTRACT = ADDRESSES.arbitrum.WBTC; const WSTETH_CONTRACT = '0x5979D7b546E38E414F7E9822514be443A4800529'; const ARB_CONTRACT = '0x912ce59144191c1204e64559fe8253a0e49e6548'; diff --git a/projects/sherlock/index.js b/projects/sherlock/index.js index e1e605cb46..7c11bbbd08 100644 --- a/projects/sherlock/index.js +++ b/projects/sherlock/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); const usdcabi = require('./usdcabi.json'); const sherlockV2abi = require('./sherlockV2abi.json'); const BigNumber = require("bignumber.js"); -const USDC = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; +const USDC = ADDRESSES.ethereum.USDC; const SherlockContract = '0xacbBe1d537BDa855797776F969612df7bBb98215'; const SherlockV2Contract = '0x0865a889183039689034dA55c1Fd12aF5083eabF'; diff --git a/projects/shibance-bsc/constants/abi.json b/projects/shibance-bsc/constants/abi.json deleted file mode 100644 index 195cb3b29b..0000000000 --- a/projects/shibance-bsc/constants/abi.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "poolInfo": "function poolInfo(uint256) view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accCakePerShare)", - "totalAllocPoint": "uint256:totalAllocPoint" -} \ No newline at end of file diff --git a/projects/shibance-bsc/constants/bsc/contracts.js b/projects/shibance-bsc/constants/bsc/contracts.js deleted file mode 100644 index 6994418857..0000000000 --- a/projects/shibance-bsc/constants/bsc/contracts.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - masterChef: { - 56: "0x4fbEebd68B71aE4367F778129d4218668151EB99", - 97: "0x5559C8a6267b0b1bcDe0005a44db0B1546711B76", - }, - sousChef: { - 56: "0x0703c295644ba1d333e14367e510773629264Ee2", - 97: "0x4A2947DE6A35F0B83cc26827A9Cf832193c38614", - }, - multiCall: { - 56: "0x3dB443d8e82700FaBdB831dBe180994B6b109790", - 97: "0x6a45C680E74c81797E287Ccf48284698f85909b4", - }, - woofVault: { - 56: "0x09fE45A62502E7a0b226a99f18043F3eC32F78E8", - 97: "0x238d502163AC149Da69A180Cbae59347d72AE842", - }, - woofCollectibles: { - 56: "0x89e36408cc275168ab235e8a5902a2dd4c8fbaa7", - 97: "", - }, -}; diff --git a/projects/shibance-bsc/constants/bsc/farms.js b/projects/shibance-bsc/constants/bsc/farms.js deleted file mode 100644 index b6fb682aba..0000000000 --- a/projects/shibance-bsc/constants/bsc/farms.js +++ /dev/null @@ -1,215 +0,0 @@ -const tokens = require("./tokens"); -const farms = [ - { - pid: 0, - lpSymbol: "WOOF", - lpAddresses: { - 56: "0x9e26c50B8A3b7652c3fD2B378252A8647a0C9268", - 97: "0x43eef5BA4899431F7F9D855E9C5Ed06016c8227b", - }, - token: tokens.syrup, - quoteToken: tokens.wbnb, - }, - { - pid: 1, - lpSymbol: "WOOF-BNB LP", - lpAddresses: { - 56: "0xccefc6013a4f3e1c4e71c5006353a55e228f4c2d", - 97: "0x5d6ddb67bcef8dd94a7f4ade4f5b912da9bacd62", - }, - token: tokens.woof, - quoteToken: tokens.wbnb, - }, - { - pid: 18, - lpSymbol: "CUPCAKE-WOOF LP", - lpAddresses: { - 97: "", - 56: "0x897a60da157cdca5faff2fd9314e72b763dda9cd", - }, - token: tokens.cupcake, - quoteToken: tokens.woof, - }, - { - pid: 21, - lpSymbol: "CUPCAKE-BUSD LP", - lpAddresses: { - 97: "", - 56: "0x9e20535e12d1ef96a3838ea27256ee6c767f644f", - }, - token: tokens.cupcake, - quoteToken: tokens.busd, - }, - { - pid: 3, - lpSymbol: "WOOF-BUSD SHIBANCE LP", - lpAddresses: { - 97: "0x00ce857d4a66beF6614E2EBAcf16c8fF5C451146", - 56: "0x6e729f2ed894fbcebc14dfd7344975a558052c55", - }, - token: tokens.woof, - quoteToken: tokens.busd, - }, - { - pid: 4, - lpSymbol: "WOOF-BUSD PANCAKESWAP LP", - lpAddresses: { - 97: "0x638798c119ffC95482423981884c0461664d7195", - 56: "0xe064a0666b86d5554e83adf4bf14fa6d5ffc4175", - }, - token: tokens.woof, - quoteToken: tokens.busd, - }, - { - pid: 2, - lpSymbol: "BUSD-BNB LP", - lpAddresses: { - 56: "0xf5ef5e2ecfb73126ea2db39703e4f6269d484f61", - 97: "0x354f0d65790d44ac7ad65354e150dd8a1aa76f48", - }, - token: tokens.busd, - quoteToken: tokens.wbnb, - }, - { - pid: 6, - lpSymbol: "DOGE-BUSD LP", - lpAddresses: { - 97: "0xaC0AEC94af77eDCc868BDb7BA816380c5129E163", - 56: "0xe076028cecc3e9390e9ae1222b7c99b13de95627", - }, - token: tokens.doge, - quoteToken: tokens.busd, - }, - { - pid: 20, - lpSymbol: "BIRB-WOOF LP", - lpAddresses: { - 97: "", - 56: "0x9809eFcc1E1cDEE2BbA0Efd23ec000ca840725cb", - }, - token: tokens.birb, - quoteToken: tokens.woof, - }, - { - pid: 15, - lpSymbol: "MOONSHOT-WOOF LP", - lpAddresses: { - 97: "", - 56: "0xaa19A0bF68acc25e6a853044AA0f9E9c08C97A7d", - }, - token: tokens.moonshot, - quoteToken: tokens.woof, - }, - { - pid: 8, - lpSymbol: "CUMMIES-WOOF LP", - lpAddresses: { - 97: "", - 56: "0x8Fe92296F007F7B864765BAEc58fCfB7820d71B6", - }, - token: tokens.cummies, - quoteToken: tokens.woof, - }, - { - pid: 11, - lpSymbol: "CUMMIES-BUSD LP", - lpAddresses: { - 97: "", - 56: "0x82b34a5384d337a8f306d1d49063d7e22ebcc296", - }, - token: tokens.cummies, - quoteToken: tokens.busd, - }, - { - pid: 16, - lpSymbol: "CAKE-WOOF LP", - lpAddresses: { - 97: "", - 56: "0xba7e74e2d06d7a76025413a1f338ab849084843b", - }, - token: tokens.cake, - quoteToken: tokens.woof, - }, - { - pid: 17, - lpSymbol: "CAKE-BUSD LP", - lpAddresses: { - 97: "", - 56: "0xcda8205d6bd1619bf79b27e765e4e29651fd987e", - }, - token: tokens.cake, - quoteToken: tokens.busd, - }, - { - pid: 14, - lpSymbol: "ASS-WOOF LP", - lpAddresses: { - 97: "", - 56: "0x2e4a51084eae9237388bec1dce2a26afcbbdb568", - }, - token: tokens.ass, - quoteToken: tokens.woof, - }, - { - pid: 13, - lpSymbol: "ASS-BUSD LP", - lpAddresses: { - 97: "0xF7a8F04bFE8813Ad888d1b6a123aACc2DD86B120", - 56: "0xb719c3f92cdbf7d8426217ae323509b8cee8f4b9", - }, - token: tokens.ass, - quoteToken: tokens.busd, - }, - { - pid: 9, - lpSymbol: "SAFEMOON-WOOF LP", - lpAddresses: { - 97: "", - 56: "0x5261bd9a6fed9361cbf5d00c831e11d7db6bdf54", - }, - token: tokens.safemoon, - quoteToken: tokens.woof, - }, - { - pid: 10, - lpSymbol: "SAFEMOON-BUSD LP", - lpAddresses: { - 97: "", - 56: "0x916c7e58017e24de428b48a05db7531dd478a75b", - }, - token: tokens.safemoon, - quoteToken: tokens.busd, - }, - { - pid: 7, - lpSymbol: "BABYDOGE-WOOF LP", - lpAddresses: { - 97: "", - 56: "0x3627589F64e3942b18549361fC35a5F2Bd08eF77", - }, - token: tokens.babydoge, - quoteToken: tokens.woof, - }, - { - pid: 12, - lpSymbol: "BABYDOGE-BUSD LP", - lpAddresses: { - 97: "", - 56: "0x1f6753200130e3478c7d02671bb7234220f4520c", - }, - token: tokens.babydoge, - quoteToken: tokens.busd, - }, - { - pid: 5, - lpSymbol: "USDT-BUSD LP", - lpAddresses: { - 97: "0x2E2b6cdB1ea0C39b397EbFc50BF2117437819002", - 56: "0x6f5ae0eb19343b8b1b1426fc11fa9ae1f0a15159", - }, - token: tokens.usdt, - quoteToken: tokens.busd, - }, -]; - -module.exports = farms; \ No newline at end of file diff --git a/projects/shibance-bsc/constants/bsc/pools.js b/projects/shibance-bsc/constants/bsc/pools.js deleted file mode 100644 index b1b6fae888..0000000000 --- a/projects/shibance-bsc/constants/bsc/pools.js +++ /dev/null @@ -1,79 +0,0 @@ -const tokens = require("./tokens"); - -const PoolCategory = { - 'COMMUNITY' :'Community', - 'CORE' : 'Core', - 'BINANCE' : 'Binance', // Pools using native BNB behave differently than pools using a token - 'AUTO' : 'Auto', -} - -const pools = [ - { - sousId: 0, - stakingToken: tokens.woof, - earningToken: tokens.woof, - contractAddress: { - 97: "0x5559C8a6267b0b1bcDe0005a44db0B1546711B76", - 56: "0x4fbEebd68B71aE4367F778129d4218668151EB99", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "10", - sortOrder: 1, - isFinished: false, - }, - { - sousId: 1, - stakingToken: tokens.woof, - earningToken: tokens.ass, - contractAddress: { - 97: "0x1E3C2695Aa1b040a56e9aE7db7E7b2B96125e17A", - 56: "0xb2b694833e0875eA76AF7Fe50800658A41831fcF", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "3260302.556", - sortOrder: 1, - }, - { - sousId: 2, - stakingToken: tokens.woof, - earningToken: tokens.busd, - contractAddress: { - 97: "0x4Cad350eA6F1C0010A11aA6b4Df26617A50AD8fF", - 56: "0x52C68033b2eEEFD7b6875b3f9b880a5ccDc51eF7", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "0.011574", - sortOrder: 1, - }, - { - sousId: 3, - stakingToken: tokens.woof, - earningToken: tokens.cummies, - contractAddress: { - 97: "0x88f1Ee74eE6727Cb77208A8935261146F9b64293", - 56: "0x2d7831a6C7018dCEF7f9764Bee684B8f7d505222", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "0.230902777", - sortOrder: 1, - }, - { - sousId: 4, - stakingToken: tokens.woof, - earningToken: tokens.cupcake, - contractAddress: { - 97: "", - 56: "0xD7a7b01C47497339ECaDcca579492De45bE68A71", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "1765", - sortOrder: 2, - }, -]; - -module.exports = pools; \ No newline at end of file diff --git a/projects/shibance-bsc/constants/bsc/tokens.js b/projects/shibance-bsc/constants/bsc/tokens.js deleted file mode 100644 index 66a265ade1..0000000000 --- a/projects/shibance-bsc/constants/bsc/tokens.js +++ /dev/null @@ -1,134 +0,0 @@ -const tokens = { - bnb: { - symbol: "BNB", - projectLink: "https://www.binance.com/", - }, - woof: { - symbol: "WOOF", - address: { - 56: "0x9e26c50B8A3b7652c3fD2B378252A8647a0C9268", - 97: "0x43eef5BA4899431F7F9D855E9C5Ed06016c8227b", - }, - decimals: 18, - projectLink: "https://shibance.com/", - }, - syrup: { - symbol: "DOGGYPOUND", - address: { - 56: "0x516B3D832379cd9417bFA3cc54459460CB91fd33", - 97: "0xCBc317eFa8f0b18683C6c1b9e1842BcaCbC46f36", - }, - decimals: 18, - projectLink: "https://pancakeswap.finance/", - }, - wbnb: { - symbol: "wBNB", - address: { - 56: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - 97: "0xae13d989dac2f0debff460ac112a837c89baa7cd", - }, - decimals: 18, - projectLink: "https://pancakeswap.finance/", - }, - busd: { - symbol: "BUSD", - address: { - 56: "0xe9e7cea3dedca5984780bafc599bd69add087d56", - 97: "0x8301f2213c0eed49a7e28ae4c3e91722919b8b47", - }, - decimals: 18, - projectLink: "https://www.paxos.com/busd/", - }, - usdt: { - symbol: "USDT", - address: { - 56: "0x55d398326f99059ff775485246999027b3197955", - 97: "0x9D4BB7939D27D3bd7F425744DFBf7eE777490388", - }, - decimals: 18, - projectLink: "https://usdt.com/", - }, - doge: { - symbol: "DOGE", - address: { - 56: "0xba2ae424d960c26247dd6c32edc70b295c744c43", - 97: "0x30c638Fd87379Dc280fA1892667a1BFA4ff31387", - }, - decimals: 8, - projectLink: "https://doge.com/", - }, - babydoge: { - symbol: "BABYDOGE", - address: { - 56: "0xc748673057861a797275cd8a068abb95a902e8de", - 97: "", - }, - decimals: 18, - projectLink: "https://babydogecoin.com/", - }, - cummies: { - symbol: "CUMMIES", - address: { - 56: "0x27ae27110350b98d564b9a3eed31baebc82d878d", - 97: "", - }, - decimals: 18, - projectLink: "https://cumrocket.io/", - }, - safemoon: { - symbol: "SAFEMOON", - address: { - 56: "0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3", - 97: "", - }, - decimals: 9, - projectLink: "https://safemoon.net/", - }, - ass: { - symbol: "ASS", - address: { - 56: "0x7c63f96feafacd84e75a594c00fac3693386fbf0", - 97: "0x422227357806ed386de58340d34c17b60d68046e", - }, - decimals: 9, - projectLink: "https://assfinance.com/", - }, - moonshot: { - symbol: "MOONSHOT", - address: { - 56: "0xd27d3f7f329d93d897612e413f207a4dbe8bf799", - 97: "", - }, - decimals: 9, - projectLink: "https://project-moonshot.me/", - }, - cake: { - symbol: "CAKE", - address: { - 56: "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - 97: "", - }, - decimals: 18, - projectLink: "https://pancakeswap.finance/", - }, - cupcake: { - symbol: "CUPCAKE", - address: { - 56: "0x5d74b0f8c474f96e093c70b507452399573cff73", - 97: "", - }, - decimals: 18, - projectLink: "https://cupcakecoin.io/", - }, - birb: { - symbol: "BIRB", - address: { - 56: "0x82a479264b36104be4fdb91618a59a4fc0f50650", - 97: "", - }, - decimals: 18, - projectLink: "https://birb.co/", - }, -}; - -module.exports = tokens; \ No newline at end of file diff --git a/projects/shibance-bsc/constants/chain.js b/projects/shibance-bsc/constants/chain.js deleted file mode 100644 index 16c7147896..0000000000 --- a/projects/shibance-bsc/constants/chain.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - kcc: 321, - bsc: 56, -}; \ No newline at end of file diff --git a/projects/shibance-bsc/constants/kcc/contracts.js b/projects/shibance-bsc/constants/kcc/contracts.js deleted file mode 100644 index 929889ec98..0000000000 --- a/projects/shibance-bsc/constants/kcc/contracts.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - masterChef: { - 321: "0x1Ae33198c47799e9333bbcd74cd3aB80DC03D283", - }, - sousChef: { - 321: "0xE35a1619319BBfa5Bf985e4Ca14964210774aB31", - }, - multiCall: { - 321: "0xEdf9cC6cC32842D74ffD6D85D7985ee9283B1E24", - }, - woofVault: { - 321: "0x5cE1e2F6c99aFcfbB6E640354837C263ec3a5664", - }, -}; \ No newline at end of file diff --git a/projects/shibance-bsc/constants/kcc/farms.js b/projects/shibance-bsc/constants/kcc/farms.js deleted file mode 100644 index 0abaf129c3..0000000000 --- a/projects/shibance-bsc/constants/kcc/farms.js +++ /dev/null @@ -1,105 +0,0 @@ -const tokens = require("./tokens"); - -const farms = [ - { - pid: 0, - lpSymbol: "KWOOF", - lpAddresses: { - 321: "0x192F72eFD1009D90B0e6F82Ff27a0a2389F803e5", - }, - token: tokens.syrup, - quoteToken: tokens.wbnb, - }, - { - pid: 10, - lpSymbol: "KAFE-KWOOF LP", - lpAddresses: { - 321: "0x016b2ec91d6eebf65827c16b612a35187e0db6f9", - }, - token: tokens.kafe, - quoteToken: tokens.kwoof, - }, - { - pid: 11, - lpSymbol: "KAFE-USDT LP", - lpAddresses: { - 321: "0x473666ca99a69c3d445386c0c4d1b524c9e8fd35", - }, - token: tokens.kafe, - quoteToken: tokens.busd, - }, - { - pid: 1, - lpSymbol: "KWOOF-KCS LP", - lpAddresses: { - 321: "0x463e451d05f84da345d641fbaa3129693ce13816", - }, - token: tokens.kwoof, - quoteToken: tokens.wbnb, - }, - { - pid: 3, - lpSymbol: "KWOOF-USDT LP", - lpAddresses: { - 321: "0x5ea4ee58945c7e94c6efdce53d0b46d3dfbcf7db", - }, - token: tokens.kwoof, - quoteToken: tokens.busd, - }, - { - pid: 4, - lpSymbol: "KWOOF-USDC LP", - lpAddresses: { - 321: "0xd05be4d487beffb4eb9dbec9f16158d7c9e60a7c", - }, - token: tokens.kwoof, - quoteToken: tokens.usdc, - }, - { - pid: 2, - lpSymbol: "USDT-KCS LP", - lpAddresses: { - 321: "0x5a4b75cec96b99bc7dda80c42914636a5a46dfb1", - }, - token: tokens.busd, - quoteToken: tokens.wbnb, - }, - { - pid: 5, - lpSymbol: "USDC-KCS LP", - lpAddresses: { - 321: "0x3705eef160335a9aaa375ce31f858ba0a64aade0", - }, - token: tokens.usdc, - quoteToken: tokens.wbnb, - }, - { - pid: 6, - lpSymbol: "USDC-USDT LP", - lpAddresses: { - 321: "0x7060d8bfe77df123c8992d6ebf36b66163124c33", - }, - token: tokens.usdc, - quoteToken: tokens.busd, - }, - { - pid: 7, - lpSymbol: "GHOST-KWOOF LP", - lpAddresses: { - 321: "0x35540268609fbfbbed512bc917d75668e5f5d11d", - }, - token: tokens.ghost, - quoteToken: tokens.kwoof, - }, - { - pid: 8, - lpSymbol: "KUST-KWOOF LP", - lpAddresses: { - 321: "0x4eda6784ed216a30d89da18a73c05dff810c69e2", - }, - token: tokens.kust, - quoteToken: tokens.kwoof, - }, -]; - -module.exports = farms; diff --git a/projects/shibance-bsc/constants/kcc/pools.js b/projects/shibance-bsc/constants/kcc/pools.js deleted file mode 100644 index b9593ae39a..0000000000 --- a/projects/shibance-bsc/constants/kcc/pools.js +++ /dev/null @@ -1,39 +0,0 @@ -const tokens = require("./tokens"); - -const PoolCategory = { - COMMUNITY: "Community", - CORE: "Core", - BINANCE: "Binance", // Pools using native BNB behave differently than pools using a token - AUTO: "Auto", -}; - -const pools = [ - { - sousId: 0, - stakingToken: tokens.kwoof, - earningToken: tokens.kwoof, - contractAddress: { - 321: "0x1Ae33198c47799e9333bbcd74cd3aB80DC03D283", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "10", - sortOrder: 1, - isFinished: false, - }, - { - sousId: 1, - stakingToken: tokens.kwoof, - earningToken: tokens.kafe, - contractAddress: { - 321: "0x27d55dd01cb6bff2791f46e4a7657e69257e80df", - }, - poolCategory: PoolCategory.CORE, - harvest: true, - tokenPerBlock: "0.00289", - sortOrder: 1, - isFinished: false, - }, -]; - -module.exports = pools; diff --git a/projects/shibance-bsc/constants/kcc/tokens.js b/projects/shibance-bsc/constants/kcc/tokens.js deleted file mode 100644 index 4e5d9de11d..0000000000 --- a/projects/shibance-bsc/constants/kcc/tokens.js +++ /dev/null @@ -1,72 +0,0 @@ -const tokens = { - bnb: { - symbol: "BNB", - projectLink: "https://www.kucoin.com/", - }, - kwoof: { - symbol: "KWOOF", - address: { - 321: "0x192F72eFD1009D90B0e6F82Ff27a0a2389F803e5", - }, - decimals: 18, - projectLink: "https://shibance.com/", - }, - syrup: { - symbol: "DOGGYPOUND", - address: { - 321: "0xc72B04864aE423CD97F83E49D53b76b5937de8C8", - }, - decimals: 18, - projectLink: "https://shibance.com/", - }, - wbnb: { - symbol: "wBNB", - address: { - 321: "0x4446fc4eb47f2f6586f9faab68b3498f86c07521", - }, - decimals: 18, - projectLink: "https://www.kcc.io/", - }, - busd: { - symbol: "BUSD", - address: { - 321: "0x0039f574ee5cc39bdd162e9a88e3eb1f111baf48", - }, - decimals: 18, - projectLink: "https://www.kcc.io/", - }, - usdc: { - symbol: "USDC", - address: { - 321: "0x980a5afef3d17ad98635f6c5aebcbaeded3c3430", - }, - decimals: 18, - projectLink: "https://www.kcc.io/", - }, - ghost: { - symbol: "GHOST", - address: { - 321: "0x3341a4cc481637a773187400227446f85f66da0a", - }, - decimals: 9, - projectLink: "https://twitter.com/kughostkcc/", - }, - kust: { - symbol: "KUST", - address: { - 321: "0xfc56a7e70f6c970538020cc39939929b4d393f1f", - }, - decimals: 18, - projectLink: "https://kustarter.com/", - }, - kafe: { - symbol: "KAFE", - address: { - 321: "0x516F50028780B60e2FE08eFa853124438f9E46a7", - }, - decimals: 18, - projectLink: "https://kukafe.finance/", - }, -}; - -module.exports = tokens; diff --git a/projects/shibance-bsc/farm.js b/projects/shibance-bsc/farm.js deleted file mode 100644 index 97ba169f07..0000000000 --- a/projects/shibance-bsc/farm.js +++ /dev/null @@ -1,318 +0,0 @@ - - -const chains = require('./constants/chain'); -const { BIG_TEN, BIG_ZERO } = require("./format"); -const sdk = require("@defillama/sdk"); -const multiCall = sdk.api.abi.multiCall; -const allABI = require("./constants/abi.json"); -const BigNumber = require("bignumber.js"); - -const fetchFarm = async (chain, farm, block) => { - const { pid, lpAddresses, token, quoteToken } = farm; - const chainId = chains[chain]; - const addresses = require("./constants/" + chain + "/contracts.js"); - - function getAddress(addrs) { - return addrs[chainId]; - } - - const getMasterChefAddress = () => { - return getAddress(addresses.masterChef); - }; - - const lpAddress = lpAddresses[chainId]; - const farmFetch = async () => { - var _a; - const balances = ( - await multiCall({ - chain, - block, - calls: [ - // Balance of token in the LP contract - { - target: getAddress(token.address), - params: lpAddress, - }, - // Balance of quote token on LP contract - { - target: getAddress(quoteToken.address), - params: lpAddress, - }, - // Balance of LP tokens in the master chef contract - { - target: lpAddress, - params: getMasterChefAddress(), - }, - ].filter((_) => _.params), - abi: "erc20:balanceOf", - }) - ).output.map((_) => _.output); - - const decimals = ( - await multiCall({ - chain, - block, - calls: [ - { - target: getAddress(token.address), - }, - { - target: getAddress(quoteToken.address), - }, - ], - abi: "erc20:decimals", - }) - ).output.map((_) => _.output); - - const lpTotal = ( - await multiCall({ - chain, - block, - calls: [ - { - target: lpAddress, - }, - ], - abi: "erc20:totalSupply", - }) - ).output.map((_) => _.output); - - - const [tokenBalanceLP, quoteTokenBalanceLP, lpTokenBalanceMC] = balances; - const [lpTotalSupply] = lpTotal; - const [tokenDecimals, quoteTokenDecimals] = decimals; - - // Ratio in % of LP tokens that are staked in the MC, vs the total number in circulation - const lpTokenRatio = new BigNumber(lpTokenBalanceMC).div( - new BigNumber(lpTotalSupply) - ); - // Raw amount of token in the LP, including those not staked - const tokenAmountTotal = new BigNumber(tokenBalanceLP).div( - BIG_TEN.pow(tokenDecimals) - ); - const quoteTokenAmountTotal = new BigNumber(quoteTokenBalanceLP).div( - BIG_TEN.pow(quoteTokenDecimals) - ); - // Amount of token in the LP that are staked in the MC (i.e amount of token * lp ratio) - const tokenAmountMc = tokenAmountTotal.times(lpTokenRatio); - const quoteTokenAmountMc = quoteTokenAmountTotal.times(lpTokenRatio); - // Total staked in LP, in quote token value - const lpTotalInQuoteToken = quoteTokenAmountMc.times(new BigNumber(2)); - - // Only make masterchef calls if farm has pid - const [info, totalAllocPoint] = - pid || pid === 0 - ? [ - ( - await multiCall({ - chain, - block, - calls: [ - { - target: getMasterChefAddress(), - name: "poolInfo", - params: [pid], - }, - ], - abi: allABI["poolInfo"], - }) - ).output.map((_) => _.output)[0], - ( - await multiCall({ - chain, - block, - calls: [ - { - target: getMasterChefAddress(), - name: "totalAllocPoint", - }, - ], - abi: allABI["totalAllocPoint"], - }) - ).output.map((_) => _.output)[0], - ] - : [null, null]; - - const allocPoint = info ? new BigNumber(info.allocPoint) : BIG_ZERO; - const poolWeight = totalAllocPoint - ? allocPoint.div(new BigNumber(totalAllocPoint)) - : BIG_ZERO; - return { - ...farm, - tokenAmountMc: tokenAmountMc.toJSON(), - quoteTokenAmountMc: quoteTokenAmountMc.toJSON(), - tokenAmountTotal: tokenAmountTotal.toJSON(), - quoteTokenAmountTotal: quoteTokenAmountTotal.toJSON(), - lpTotalSupply: new BigNumber(lpTotalSupply).toJSON(), - lpTotalInQuoteToken: lpTotalInQuoteToken.toJSON(), - tokenPriceVsQuote: quoteTokenAmountTotal.div(tokenAmountTotal).toJSON(), - poolWeight: poolWeight.toJSON(), - multiplier: `${allocPoint.div(100).toString()}X`, - }; - }; - // // In some browsers promise above gets stuck that causes fetchFarms to not proceed. - // const timeout = new Promise((resolve) => { - // const id = setTimeout(() => { - // clearTimeout(id); - // resolve({}); - // }, 25000); - // }); - return await farmFetch(); -}; - -const filterFarmsByQuoteToken = ( - farms, - preferredQuoteTokens = ["BUSD", "wBNB"] -) => { - const preferredFarm = farms.find((farm) => { - return preferredQuoteTokens.some((quoteToken) => { - return farm.quoteToken.symbol === quoteToken; - }); - }); - return preferredFarm || farms[0]; -}; - - -const getFarmFromTokenSymbol = ( - farms, - tokenSymbol, - preferredQuoteTokens -) => { - const farmsWithTokenSymbol = farms.filter( - (farm) => farm.token.symbol === tokenSymbol - ); - const filteredFarm = filterFarmsByQuoteToken( - farmsWithTokenSymbol, - preferredQuoteTokens - ); - return filteredFarm; -}; - -const getFarmBaseTokenPrice = ( - farm, - quoteTokenFarm, - bnbPriceBusd -) => { - const hasTokenPriceVsQuote = Boolean(farm.tokenPriceVsQuote); - - if (farm.quoteToken.symbol === "BUSD") { - return hasTokenPriceVsQuote - ? new BigNumber(farm.tokenPriceVsQuote) - : BIG_ZERO; - } - - if (farm.quoteToken.symbol === "wBNB") { - return hasTokenPriceVsQuote - ? bnbPriceBusd.times(farm.tokenPriceVsQuote) - : BIG_ZERO; - } - - // We can only calculate profits without a quoteTokenFarm for BUSD/BNB farms - if (!quoteTokenFarm) { - return BIG_ZERO; - } - - // Possible alternative farm quoteTokens: - // UST (i.e. MIR-UST), pBTC (i.e. PNT-pBTC), BTCB (i.e. bBADGER-BTCB), ETH (i.e. SUSHI-ETH) - // If the farm's quote token isn't BUSD or wBNB, we then use the quote token, of the original farm's quote token - // i.e. for farm PNT - pBTC we use the pBTC farm's quote token - BNB, (pBTC - BNB) - // from the BNB - pBTC price, we can calculate the PNT - BUSD price - if (quoteTokenFarm.quoteToken.symbol === "wBNB") { - const quoteTokenInBusd = bnbPriceBusd.times( - quoteTokenFarm.tokenPriceVsQuote - ); - return hasTokenPriceVsQuote && quoteTokenInBusd - ? new BigNumber(farm.tokenPriceVsQuote).times(quoteTokenInBusd) - : BIG_ZERO; - } - - if (quoteTokenFarm.quoteToken.symbol === "BUSD") { - const quoteTokenInBusd = quoteTokenFarm.tokenPriceVsQuote; - return hasTokenPriceVsQuote && quoteTokenInBusd - ? new BigNumber(farm.tokenPriceVsQuote).times(quoteTokenInBusd) - : BIG_ZERO; - } - - // Catch in case token does not have immediate or once-removed BUSD/wBNB quoteToken - return BIG_ZERO; -}; - -const getFarmQuoteTokenPrice = ( - farm, - quoteTokenFarm, - bnbPriceBusd -) => { - if (farm.quoteToken.symbol === "BUSD") { - return new BigNumber(1); - } - - if (farm.quoteToken.symbol === "wBNB") { - return bnbPriceBusd; - } - - if (!quoteTokenFarm) { - return BIG_ZERO; - } - - if (quoteTokenFarm.quoteToken.symbol === "wBNB") { - return quoteTokenFarm.tokenPriceVsQuote - ? bnbPriceBusd.times(quoteTokenFarm.tokenPriceVsQuote) - : BIG_ZERO; - } - - if (quoteTokenFarm.quoteToken.symbol === "BUSD") { - return quoteTokenFarm.tokenPriceVsQuote - ? new BigNumber(quoteTokenFarm.tokenPriceVsQuote) - : BIG_ZERO; - } - - return BIG_ZERO; -}; - -const fetchFarmsPrices = async (farms) => { - const bnbBusdFarm = farms.find((farm) => farm.pid === 2); - const bnbPriceBusd = bnbBusdFarm.tokenPriceVsQuote - ? new BigNumber(1).div(bnbBusdFarm.tokenPriceVsQuote) - : BIG_ZERO; - - const farmsWithPrices = farms.map((farm) => { - const quoteTokenFarm = getFarmFromTokenSymbol( - farms, - farm.quoteToken.symbol - ); - const baseTokenPrice = getFarmBaseTokenPrice( - farm, - quoteTokenFarm, - bnbPriceBusd - ); - const quoteTokenPrice = getFarmQuoteTokenPrice( - farm, - quoteTokenFarm, - bnbPriceBusd - ); - const token = { ...farm.token, busdPrice: baseTokenPrice.toJSON() }; - const quoteToken = { - ...farm.quoteToken, - busdPrice: quoteTokenPrice.toJSON(), - }; - return { ...farm, token, quoteToken }; - }); - - return farmsWithPrices; -}; - - -async function fetchFarms(chain, block) { - try { - const farms = require("./constants/" + chain + "/farms"); - let allInfos = await Promise.all( - farms.map((_) => fetchFarm(chain, _, block)) - ); - allInfos = fetchFarmsPrices(allInfos); - return allInfos; - } catch(e) { - sdk.log("fetchFarms.error", e); - } -} - -module.exports = fetchFarms; \ No newline at end of file diff --git a/projects/shibance-bsc/format.js b/projects/shibance-bsc/format.js deleted file mode 100644 index dbca93475e..0000000000 --- a/projects/shibance-bsc/format.js +++ /dev/null @@ -1,43 +0,0 @@ - -const BigNumber = require("bignumber.js"); -const BIG_TEN = new BigNumber(10) -const BIG_ZERO = new BigNumber(0); -/** - * Take a formatted amount, e.g. 15 BNB and convert it to full decimal value, e.g. 15000000000000000 - */ -const getDecimalAmount = (amount, decimals = 18) => { - return new BigNumber(amount).times(BIG_TEN.pow(decimals)) -} - -const getBalanceAmount = (amount, decimals = 18) => { - return new BigNumber(amount).dividedBy(BIG_TEN.pow(decimals)) -} - -/** - * This function is not really necessary but is used throughout the site. - */ -const getBalanceNumber = (balance, decimals = 18) => { - return getBalanceAmount(balance, decimals).toNumber() -} - -const getFullDisplayBalance = (balance, decimals = 18, decimalsToAppear) => { - return getBalanceAmount(balance, decimals).toFixed(decimalsToAppear) -} - -const formatNumber = (number, minPrecision = 2, maxPrecision = 2) => { - const options = { - minimumFractionDigits: minPrecision, - maximumFractionDigits: maxPrecision, - } - return number.toLocaleString(undefined, options) -} - -module.exports = { - BIG_ZERO, - BIG_TEN, - formatNumber, - getFullDisplayBalance, - getBalanceNumber, - getBalanceAmount, - getDecimalAmount -} \ No newline at end of file diff --git a/projects/shibance-bsc/index.js b/projects/shibance-bsc/index.js deleted file mode 100644 index 5661d118fa..0000000000 --- a/projects/shibance-bsc/index.js +++ /dev/null @@ -1,92 +0,0 @@ -const BigNumber = require("bignumber.js"); -const { getBalanceNumber } = require('./format'); -const chains = require('./constants/chain'); - -const fetchPublicVaultData = require("./vault"); -const fetchFarms = require('./farm'); -const { fetchPoolsTotalStaking } = require('./pool'); - -function getChainTvl(chain) { - return function (timestamp, _ethBlock, chainBlocks) { - return getTvl(chain, timestamp, _ethBlock, chainBlocks); - }; -} - -async function getTvl(chain, timestamp, _ethBlock, chainBlocks) { - const block = chainBlocks ? chainBlocks[chain] : null; - const chainPid = { - kcc: 1, - bsc: 3 - }; - - const chainId = chains[chain]; - const [vData, pools, farmsLP] = await Promise.all([ - fetchPublicVaultData(chain, block), - fetchPoolsTotalStaking(chain, block), - fetchFarms(chain, block), - ]); - - const totalCakeInVault = new BigNumber(vData.totalCakeInVault); - const woofLp = farmsLP.filter(_ => _.pid == chainPid[chain])[0]; - const woofPrice = new BigNumber(woofLp.token.busdPrice); - - const farmsLiquidity = farmsLP - .map((farm) => { - if ( - farm.pid !== 0 && - farm.multiplier !== "0X" && - farm.lpTotalInQuoteToken && - farm.quoteToken.busdPrice - ) { - return new BigNumber(farm.lpTotalInQuoteToken).times( - farm.quoteToken.busdPrice - ); - } - return null; - }) - .filter((liquidity) => !!liquidity) - .reduce((a, b) => a.plus(b)); - - let poolsStaked = null; - - if (woofPrice.gt(0) && totalCakeInVault.gt(0)) { - const staked = pools.map((pool) => { - if (pool.sousId === 0) { - return new BigNumber(pool.totalStaked) - .minus(totalCakeInVault) - .times(woofPrice); - } - return new BigNumber(pool.totalStaked).times(woofPrice); - }); - poolsStaked = staked.reduce((a, b) => a.plus(b)); - } - - const tvl = - farmsLiquidity && totalCakeInVault && poolsStaked - ? farmsLiquidity - .plus( - getBalanceNumber( - totalCakeInVault.times(woofPrice).plus(poolsStaked), - 18 - ) - ) - : null; - - const balances = {}; - const usdMappings = { - 'bsc' : '0x4fabb145d64652a948d72533023f6e7a623c7c53' - } - const baseToken = usdMappings[chain]; - balances[`${chain}:${baseToken}`] = tvl.toNumber(); - - return tvl.toNumber(); -} - - -module.exports = { - misrepresentedTokens: true, - methodology: "We count liquidity on the dexes, pulling data from onchain", - bsc: { - tvl: getChainTvl("bsc"), - } -}; \ No newline at end of file diff --git a/projects/shibance-bsc/pool.js b/projects/shibance-bsc/pool.js deleted file mode 100644 index c8533bf5fa..0000000000 --- a/projects/shibance-bsc/pool.js +++ /dev/null @@ -1,78 +0,0 @@ -const chains = require("./constants/chain"); -const sdk = require("@defillama/sdk"); -const multiCall = sdk.api.abi.multiCall; -const BigNumber = require("bignumber.js"); - -const fetchPoolsTotalStaking = async (chain, block) => { - const chainId = chains[chain]; - const tokens = require("./constants/" + chain + "/tokens"); - const poolsConfig = require("./constants/" + chain + "/pools"); - - function getAddress(addrs) { - return addrs[chainId]; - } - - const getWbnbAddress = () => { - return getAddress(tokens.wbnb.address); - }; - try { - - const nonBnbPools = poolsConfig.filter( - (p) => p.stakingToken.symbol !== "BNB" - ); - const bnbPool = poolsConfig.filter((p) => p.stakingToken.symbol === "BNB"); - const callsNonBnbPools = nonBnbPools - .map((poolConfig) => { - return { - target: getAddress(poolConfig.stakingToken.address), - params: getAddress(poolConfig.contractAddress), - }; - }) - .filter((_) => _.params); - - const callsBnbPools = bnbPool - .map((poolConfig) => { - return { - target: getWbnbAddress(), - params: getAddress(poolConfig.contractAddress), - }; - }) - .filter((_) => _.params); - - const nonBnbPoolsTotalStaked = ( - await multiCall({ - chain, - block, - calls: callsNonBnbPools, - abi: "erc20:balanceOf", - }) - ).output.map((_) => _.output); - - const bnbPoolsTotalStaked = ( - await multiCall({ - chain, - block, - calls: callsBnbPools, - abi: "erc20:balanceOf", - }) - ).output.map((_) => _.output); - - return [ - ...nonBnbPools.map((p, index) => ({ - sousId: p.sousId, - totalStaked: new BigNumber(nonBnbPoolsTotalStaked[index]).toJSON(), - })), - ...bnbPool.map((p, index) => ({ - sousId: p.sousId, - totalStaked: new BigNumber(bnbPoolsTotalStaked[index]).toJSON(), - })), - ]; - } catch (e) { - sdk.log("fetchPoolsTotalStaking", e); - } -}; - - -module.exports = { - fetchPoolsTotalStaking, -}; \ No newline at end of file diff --git a/projects/shibance-bsc/vault.js b/projects/shibance-bsc/vault.js deleted file mode 100644 index 5d5832ae2f..0000000000 --- a/projects/shibance-bsc/vault.js +++ /dev/null @@ -1,88 +0,0 @@ -const cakeVaultAbi = { - getPricePerFullShare: "uint256:getPricePerFullShare", - totalShares: "uint256:totalShares", - calculateHarvestCakeRewards: "uint256:calculateHarvestCakeRewards", - calculateTotalPendingCakeRewards: "uint256:calculateTotalPendingCakeRewards", -} -const BigNumber = require("bignumber.js"); -const { - getBalanceNumber, - getFullDisplayBalance, - getDecimalAmount, -} = require("./format"); - -const woofVaultContractAddres = { - kcc: "0x5cE1e2F6c99aFcfbB6E640354837C263ec3a5664", - bsc: "0x09fE45A62502E7a0b226a99f18043F3eC32F78E8", -}; -const sdk = require("@defillama/sdk") - -const convertSharesToWoof = ( - shares, - cakePerFullShare, - decimals = 18, - decimalsToRound = 3 -) => { - const sharePriceNumber = getBalanceNumber(cakePerFullShare, decimals); - const amountInCake = new BigNumber(shares.multipliedBy(sharePriceNumber)); - const cakeAsNumberBalance = getBalanceNumber(amountInCake, decimals); - const cakeAsBigNumber = getDecimalAmount( - new BigNumber(cakeAsNumberBalance), - decimals - ); - const cakeAsDisplayBalance = getFullDisplayBalance( - amountInCake, - decimals, - decimalsToRound - ); - return { cakeAsNumberBalance, cakeAsBigNumber, cakeAsDisplayBalance }; -}; - -const fetchPublicVaultData = async (chain, block) => { - const woofVaultAddress = woofVaultContractAddres[chain]; - const [ - sharePrice, - shares, - estimatedCakeBountyReward, - totalPendingCakeHarvest, - ] = await Promise.all([ - sdk.api.abi.call({ - block, chain, - target: woofVaultAddress, - abi: cakeVaultAbi.getPricePerFullShare - }), - sdk.api.abi.call({ - block, chain, - target: woofVaultAddress, - abi: cakeVaultAbi.totalShares - }), - sdk.api.abi.call({ - block, chain, - target: woofVaultAddress, - abi: cakeVaultAbi.calculateHarvestCakeRewards - }), - sdk.api.abi.call({ - block, chain, - target: woofVaultAddress, - abi: cakeVaultAbi.calculateTotalPendingCakeRewards - }), - ]).then(response => response.map(a => a.output)); - - const totalSharesAsBigNumber = new BigNumber(shares); - const sharePriceAsBigNumber = new BigNumber(sharePrice); - const totalCakeInVaultEstimate = convertSharesToWoof( - totalSharesAsBigNumber, - sharePriceAsBigNumber - ); - return { - totalShares: totalSharesAsBigNumber.toJSON(), - pricePerFullShare: sharePriceAsBigNumber.toJSON(), - totalCakeInVault: totalCakeInVaultEstimate.cakeAsBigNumber.toJSON(), - estimatedCakeBountyReward: new BigNumber( - estimatedCakeBountyReward - ).toJSON(), - totalPendingCakeHarvest: new BigNumber(totalPendingCakeHarvest).toJSON(), - }; -}; - -module.exports = fetchPublicVaultData; \ No newline at end of file diff --git a/projects/shibshift/index.js b/projects/shibshift/index.js new file mode 100644 index 0000000000..2b850ab197 --- /dev/null +++ b/projects/shibshift/index.js @@ -0,0 +1,8 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + pulse: { + tvl: getUniTVL({ factory: '0xD56B9f53A1CAf0a6b66B209a54DAE5C5D40dE622', useDefaultCoreAssets: true, fetchBalances: true, }), + }, +}; \ No newline at end of file diff --git a/projects/shibui/index.js b/projects/shibui/index.js index cea8b3181e..5f2242bb84 100644 --- a/projects/shibui/index.js +++ b/projects/shibui/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); const { pool2s } = require("../helper/pool2"); @@ -6,8 +7,8 @@ const CHAINS = ["boba"]; const Boba_SHIBUI = "0xf08ad7c3f6b1c6843ba027ad54ed8ddb6d71169b"; -const Boba_BOBA = "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7"; -const Boba_USDT = "0x5de1677344d3cb0d7d465c10b72a8f60699c062d"; +const Boba_BOBA = ADDRESSES.boba.BOBA; +const Boba_USDT = ADDRESSES.boba.USDT; const Boba_SHIBUI_WETH = "0xcE9F38532B3d1e00a88e1f3347601dBC632E7a82"; const Boba_SHIBUI_USDT = "0x3f714fe1380ee2204ca499d1d8a171cbdfc39eaa"; const Boba_4Koyo = "0xDAb3Fc342A242AdD09504bea790f9b026Aa1e709"; diff --git a/projects/shield/index.js b/projects/shield/index.js index 98984c951d..526c871f47 100644 --- a/projects/shield/index.js +++ b/projects/shield/index.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') -const USDT = "0x55d398326f99059fF775485246999027B3197955"; +const USDT = ADDRESSES.bsc.USDT; const publicPool = "0x65081C21228dc943f47b1Cdb394Eb8db022bc744"; const privatePool = "0xFa4e13EfAf2C90D6Eaf5033A4f3cB189ee4eF189"; diff --git a/projects/shiftdollar/index.js b/projects/shiftdollar/index.js index e04d053a37..2d46a70db1 100644 --- a/projects/shiftdollar/index.js +++ b/projects/shiftdollar/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const { tombTvl } = require('../helper/tomb') @@ -6,7 +7,7 @@ const SHIFT = "0x4f9bd6be8455ee2b3c7ff76bbb885e6654797137"; const SFSHARE = "0xE64fF204Df5f3D03447dA4895C6DA1fB590F1290"; const boardroom = "0x251672021bE4Cbf8eD5a6Acb66478a29c95c7Cb5"; const rewardPool = "0x585ab630996dB20F7aCc0dbC48e7c332620E7D59"; -const USDC = "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59" +const USDC = ADDRESSES.cronos.USDC const factory = "0x9fB58aBA4a3aD49d273b42cb8F495C58e9a8d14F" const lps = [ "0xCbEA9C785D0D6233d3F965baC901ea42A7a3B05c", diff --git a/projects/shipyard-finance/index.js b/projects/shipyard-finance/index.js index 10544aa3d8..f54788b5a7 100644 --- a/projects/shipyard-finance/index.js +++ b/projects/shipyard-finance/index.js @@ -1,7 +1,7 @@ const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); const {usdtAddress} = require("../helper/balances"); -const { post } = require('../helper/http') +const { get } = require('../helper/http') const USDT_DECIMALS = 6; @@ -37,9 +37,7 @@ function chainTvl(chain, config) { coins.push(`${chain}:${want}`.toLowerCase()); } - const getCoins = post("https://coins.llama.fi/prices", { - "coins": coins - }) + const getCoins = get(`https://coins.llama.fi/prices/current/${coins.join(',')}`) const coinsData = (await getCoins).coins; @@ -81,5 +79,8 @@ module.exports = { }, ethereum: { tvl: chainTvl('ethereum', ETHEREUM), - } + }, + hallmarks: [ + [1677200400, "Vaults deprecated"] + ] }; diff --git a/projects/shoebillFinance/index.js b/projects/shoebillFinance/index.js index da496599b8..9db30a8c81 100644 --- a/projects/shoebillFinance/index.js +++ b/projects/shoebillFinance/index.js @@ -1,9 +1,9 @@ const { toUSDTBalances } = require("../helper/balances"); -const shoebillDataProviderAddress = "0xBdc26Ba6a0ebFD83c76CEf76E8F9eeb7714A5884"; const protocolDataProviderAbi = "function getAllAggregatedReservesData() view returns (tuple(tuple(string internalSymbol, address internalAddress, string externalSymbol, address externalAddress, address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress) token, tuple(uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus, uint256 reserveFactor, bool usageAsCollateralEnabled, bool borrowingEnabled, bool stableBorrowRateEnabled, bool isActive, bool isFrozen, uint256 decimals) configuration, tuple(uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp, bool isCollateral, address yieldAddress) overview, uint256 oraclePrice)[])" async function tvl(timestamp, ethBlock, chainBlocks, { api }) { + const shoebillDataProviderAddress = config[api.chain].dataProvider const aggregatedData = await api.call({ target: shoebillDataProviderAddress, abi: protocolDataProviderAbi }) const data = aggregatedData.filter(i => i.overview).map((e) => { @@ -17,6 +17,7 @@ async function tvl(timestamp, ethBlock, chainBlocks, { api }) { return toUSDTBalances(totalSupplyTvl); } async function borrowed(timestamp, ethBlock, chainBlocks, { api }) { + const shoebillDataProviderAddress = config[api.chain].dataProvider const aggregatedData = await api.call({ target: shoebillDataProviderAddress, abi: protocolDataProviderAbi }) const data = aggregatedData.map((e) => { @@ -33,8 +34,13 @@ module.exports = { doublecounted: true, methodology: "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending", - klaytn: { - tvl, - borrowed, - }, }; + +const config = { + klaytn: { dataProvider: '0xBdc26Ba6a0ebFD83c76CEf76E8F9eeb7714A5884', }, + kava: { dataProvider: '0xb2631276eE6524C6A7f205600F44E1408F21235F', }, +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl, borrowed, } +}) \ No newline at end of file diff --git a/projects/shrike-perps/index.js b/projects/shrike-perps/index.js new file mode 100644 index 0000000000..46c9de0491 --- /dev/null +++ b/projects/shrike-perps/index.js @@ -0,0 +1,7 @@ +const { gmxExports } = require('../helper/gmx') + +module.exports = { + polygon_zkevm:{ + tvl: gmxExports({ vault: '0x3371195e36f45cBDc6cC0EF9e94d87AC8424621D', }) + }, +}; diff --git a/projects/sierra/index.js b/projects/sierra/index.js index f48d243865..7692061507 100644 --- a/projects/sierra/index.js +++ b/projects/sierra/index.js @@ -9,6 +9,9 @@ const treasuryTokens = [ ]; module.exports = { + hallmarks: [ + [1648765747, "Rug Pull"] + ], deadFrom: 1648765747, misrepresentedTokens: true, ...ohmTvl(treasury, treasuryTokens, "avax", tokenStaking, token, undefined, undefined, false) diff --git a/projects/sigmafi/index.js b/projects/sigmafi/index.js new file mode 100644 index 0000000000..0845f58e59 --- /dev/null +++ b/projects/sigmafi/index.js @@ -0,0 +1,26 @@ +const { nullAddress } = require('../helper/tokenMapping') +const { sumTokensExport } = require('../helper/chain/ergo') +const axios = require('axios') + +async function borrowed(_, _b, _cb, { api, }) { + const { data } = await axios.get('https://api.sigmaexplorer.org/sigmafi/loans/ongoing?limit=10000') + data.forEach(({ repayment: { tokenId, amount}}) => { + api.add(tokenId === 'erg' ? nullAddress : tokenId, amount) + }) + return api.getBalances() +} + +module.exports = { + timetravel: false, + ergo: { + tvl: sumTokensExport({ owners: [ + '47r8CNpYJhLaJy9vQAyyhVX7SLu73dg8EDmi9zzei7YWomvTAbNaZMAHdM38TsFoiZfAcKuyrgngD6ZS2uPQktLfFpvypxkRiRi9LswRYd5tk6B5HHDsFNMfLcdqeWT9RDR2SRq1zm2HF9F913aY1gc9gVyeh8PGED2ThKJ2NCG19XhyPqCbgTFY5uTC6RaqpGCdH9p58fD4DWDd46D3EfUXz3XLzqGQvDGXTghkh9UtZ1LB7nFFoPDFc2QVDt6BCtTQwq4Jh9vFfTfBG9q6ReVF5cVX7nA6vXhWjUuHKMd7Zw5anM2u95e', + '2f7L4F3Q9eCjdWRmxSENw18Bw5SPAf3vBaimRqgpWB5JayiqSWG2tvnc6kF8ae8mpYwtZasmVDzmgjbfa8EBTdA1u55yB8ypRZDDFhs6DmhQekuGvzBoViApMyKdAXCPriXMaJWgHxAdjtR7QhXSjdnyozxZ7ApXrQY6hDSX6H2Fg9siuGUQpTQ3oJDa8nScMGdLNK2T5A7oHs', + '2jMoa21VMLebD9C3j1jXHBCSZitYqMdcqJt7jSKAVwAsVaKifkspA8jfSeRp2dnnQVgjdsXfRDzo4h1hmroTnPsMAB8qiBnyGjStmMxxFirroejmZFgH25zouApdAZtjTERNrvn67QFPGhGRpxopGEZYrQbpj3PmNR4UPyvKkCHzWbkM7cMA2o45RadU4gY6LAoDwvop35QmPsbP2CuETfJPWUKHgDw87wzwPfpBHYxNht3btUuaNB7ifL1To8KotbFKQyRQ3s84vsbed5abchfWhgSkU6HDvJJM9vmt2axcC5P72jEtPsdK19oGw3FsYZp5S9DpKmQRJasDStTRtgBEbD6vnP6orTrje9oJEpvarFdRE9gG1gQKoQdUn5PtssaVhWG3yX67BSyy1mQVkdPq17CrD4di6mhuakBKi9Wn6YTFCvdeLqfSTAaFJPA3uitsqpSkLxNGyqMMtHZ5oahuZ3jVtx3As5N2ZTt835XUYsFE31n3CzfZPvyHCDtahYTRqeCBvPMZw8vdh3a1XtfqNX15AmQy7Jf8W6Y7McsKQVwG5gogXu6XSSCrGn9r2j9m3DBPitUPpEdNqavvxX5Jqrrp2UNLNNfsZZRT26ifnWWa1W5LnjVQVeRFdki5Haf', + '3FdyuY8fqeTtYcsuvTsmsw4ZBGde2cad6hyntGxzSY3rd4JtTwTvK64xp3XJZvYNTijrTMZMQxkFiULuHpq46VFbAiSSHXLe1qy5WXNRELj4tcx6wEPbSDqzDyVbY6wKFQhmvYQT2XjqLJAiBGV9F6f2uXrjXFPzPnXpVeJnWc8ob1wMqbfgBQKdfu24qx3pejkAfAz2hmQQ57xgzGwHCcGyJdad7UxwmDetAUER8iwE32rygGCmqXaVeKGcJ33epYNGpDLPnYUg3Qz7eYuHHb7mAqwkEp6XGE1jWbf8nS7TA1taNpakssbWYN2YmB9NBG8nWNzLhc9QBdqyAn9WQ63Jh1znt2up6sQJR7xnon9ZsYoeo7bErzg4uoJbTLzwjhZBJ9En9bMX72xUb5zhvSSua6CseMMA6s86g2mwrieRwqFM7CGDypy78MzWS1nagUBKLet8LAFFpb6DKBK1h2HpAvLnMbWB7Kp3rJ4be6ed5crNdZTqhbSww96P2KNSZemhwfgAkUFjMJzB2dEG9VNAW1dMk5nBrS8JsRHhYpPqFcJiFtQvcar1ijs2PqsR9k4P41Y99iomfYXkSoA6z612v1U1C19ASVurzuxGP1vNwNyKLceFVTYXbgkgUFX8Z2nwMz6d2TCa4XTpt9daV5sBV88YJgCiYbL5QhxnoTdYRZbxu725jnV7gbnX9FWjLNaXYJubi5u8kPs3MYzSALeUvtfx6wJV1XyBn5DMbvy8XgFFMKyxtUrfU3dAVaZmUZJnYy8Dz6qrf8tyKx3uU7RfosjV7rcAFRDpozznWRfsxZUir5EzcVFQc9NbjB4HdgJxxvUJ9Nr9F8XCQLL89wCTtaNZBFF284qLtrQ', + '3FdyuY8fqeBRBVN7uhPo71JiPcmugpqdCjG5gakgXSPR7DKEGbXWkwm4dfer46kn8nCbAK1Ycw8svJGj2fMLM2kiA7GsZZdVEqDeR9K3RcVHRUCATB9qo9pf9FmekGVfG6pbzRMNrPp3TaWimHFhZCLUyqukuSaf4h9JuDqJE29hHCtdb8W7AeXTV2kfB18jUpDhCKxET3EnoBTHC1buAg3SdhPiBhVAYJFw5NVfph6kfV37nHn6hdawVrdtLbnC47xgQ7KzeMG9spHbEbn73Mz9bhCdPeqnS75jAQSjokrDLDeQSgKU8aN3Cb4i5oE5MUT9p55ignJnjzJ335UfAiEGve4tbr489sCcZ5sCNeXZEGK1WYWp39RbwdpdsfhyrVNKCpXn9xHsjSPwZVGduc5fanzGDGHEESEJCV1JYzzJ32ai274q1aQMgJuPB3CSvcy4pqcJe2XNKVSMrrwou9VXNrpeNv4DTDcnVSjB8kc6omgSYKaWBjGwaSVs6vuHK9gLfvQrDa3G1EMhfpuM3Vqs2TaHqxjc4XQyGRjJnhhqKwN4td5bo54MXEa8kojxXrXSFbi2DwcVzMQemjzxs1m5VqLv3wjCSzP9wXDEhyFMCsRbfNPTju5j7HVsRf4YBgViG6vXbAvbUcE7bA3nHMpB9SKyuGQZRVabo5899yfJpWyUM1DEwAnPDjoK4v1UYsSvUBHfs6adrHWu6oVDhZBFZZXYMVvmo56jhSXhGYTrecnhPY25a2UV5cN64bPcE3vFnW7Lpvo1nvh8XYGT9bJuP9fn1ohgnKqBwpgnwMEZxoCWHqvSsbyp4SV6nMcA416YCBYrNmwfiwFqmhYYFfAYCFdutEx52xa8E2r', + '3FdyuY8fqvU21gvgv1A5Vo8XkkR4ba8RzyqwDv6ig7466wTwax4fbJc5bJMeGnYrRsvS5uiAisS7gykBJsxYgE4LRuRuKr9KzZn4BtcNeT3Hsw3zncjE7yhzSPKoW7FkbijxtTUoKYXuby5W8TEk9L1kBaDzgKRpG1YahyHVghtJYgMcy3utVjRZXxBqZbij3cZtqSNqk3UZJmTBZKufYT17C5Mae62DckHwk6ZSZi9GVSTvw2xiENo5koKya67JcX4n23WPQ4dCVsEKcQ2cGjETJhSCi4fsvFUteGkayZW9Q4jqkuum3hz3imhdSAyPvhHnRTMEPG7PKvnn4E7hbiPsbTRAd5L8DruVosvQkcyFPXJ8qhaKDrzmcqy4baHzWHN5GRqY1CrFMnSMJTmznHXzdPwm4MfdjHXppvxBsmDTFxoRdGtriafByVmvYtkKmH9pS3agL142ByqKo79yFSWucVQnE6ojfY8gmVb7uwHqxq1Lez2Nxjbupu2tC9hHdYeM3kX3VBYrjTnXP72sv3Gr3eocm383ZGC5Ppa3pB4DSYmtiJ9LdxU85WBA36KzfrLLEsnHj9gRFWwqEfA6akTNgtboo4wQH9HTCSyHRFnu4HZh4fHaLZe6Wg1LrbbTrcEWUaMFaTEaGhKR32KG2Pd75BxVbYeF6LTQ5yfVeSyhvLWBgKD49X6Y2AemNdV2JE62cS42WDFNH7NwJL7Zqrf465mWhJ137rcrzUpm4sGqv3fnVuxcT2bY2AD8UKindPGjSzP9cg8Pey8EqG4c5jZ44D4rbmNSGaVBzm47tvNyEZRNAmhRPhkuvqsMDoNNjAGwUDxQ2XCShQHhdQAMSdTfKiPMGxmqv7n25js', + ] }), + borrowed, + }, +} diff --git a/projects/sigmao/index.js b/projects/sigmao/index.js new file mode 100644 index 0000000000..01cf185e77 --- /dev/null +++ b/projects/sigmao/index.js @@ -0,0 +1,34 @@ +const { sumTokensExport } = require('../helper/sumTokens') + +module.exports = { + timetravel: false, + ergo: { + tvl: sumTokensExport({ + owners: [ + "2PnwgiUqPKQyKUNfDShUyoZZA1DLwJyVE7oNri6JrKVWf4DYCiBqqoBYFfokffDVaV9VYahvpDiKBt9x6NVXBkBm4LgE5tM3wC8w2Qhbhh9Ps7scNLGXJZ3tLbZpu1E78ynnrn4MBouTuE7rqTaG6Su8PwkzhBFBaiQgZKqCtQMVDLrN1D6MzAj5MvbpscFEsLTqaWEemPQvxKfx7rW1HgcMSCccWAvzy4pThM7re7Mqxz9Su7ETX2RRmjGksPpHMJxVV5cGM8ijQwNsdakuMWDVLJ7qL1FEaBAbwEih6CdRZMnkYV6sNS3FFrepAa8G1nA21ztiadoQdT9wKx9gfQZJwPe2DJWoeTEp3s2TezdUiZEM67MFa5RiSEtQwkuYzin8nQ7EMWenqmSQkRfhf1QyfwEsWz7cGYHHndBp8Axg29qp1kEzcGBMUA4f8Qivi3JLPrzqKPZH7neTRYmcbYKxSTFkdzBvbKJSVoKcUaUb4QVvpcdNg4TywHELP4B2JRjhaDJFgKQvZT14owh1xuB62VoMGQhoRg8Xub4fJVJUXVSAVLcZ5qhmrc1X6Gwt5a5Nju1t4R6LFERuBYmfreofxpACfsq3oN83cSQCSiNbkRn4YVQzZqGnrHaDbsDgR2wEJbdYfXpfV6YMX525MfCj6t2TXjBzuhyYtBTnQyp7bRQeQ47kfm77gYU6esdCokZj4ic2jxyxnpm6AHxkM2oDLqrvQ8uXCM4oToNEsr8xJWFRmDsUvtu5zs9dm5HGoyXjfjojCXuE2ZMhgweU4v7N21mzGgKepzpJvWARzjtnFFK7wRpCyZvLcgq9Hf4gqdR82Pmiko5azFBYA3T1su3L1u93RxAZTSWEGJ54uoYnbBWr1mT3GDo8iXPjXQ8S5SCwJ5xzASCsvi1DAtS5jmMWp745TJPekGFE7jovG9eoqzYCgoTmjfuFHv6cuMK6TQpFRKqLGPyprmDEGSVZ2TUTzP7JoJZgQxRHrwoAwFRejgJzgVxdxH9LXCuvYvzy4GnNaTJ3eatzhwpHPQjsMdZjBsEbLujgqWV4je5d719sAb5Lqc3Dd6LRFNqR6SRw8cL3XXKiRnEmVBrTokA91CFnjroSgQ3erYBabNTpQF64Nd4BrLxKVt3UEppfXFghaQ8AjBnkjwjkrnCrwt83XtnehwjMGpJksiy9yYKoP281njgfe2S8y6JQziy9peQoSLuUXtLE9Ptz6MmKgn22NonRxMA7Rzqw8Wywsbs9Z7yrpKyzNJJ89Vwyd9aRWBuPLuNEwoLqv54bUsPoiqeyfSK8RaCpE1WhzoCK6Uncrx9pAbysJNZVesMCu5CydDKTJC3MY7ryLe4cL82PxzTjTTrvGPmdtKfro4jpR3nnPFg8FkJ3YktHKzzJjM91fs283hjVJBxuvugQTbd5SdfTro9fd3P3YPSQPzRhEHY63642x8qez4Q2HnhKeKuvhvTNiN6XpvzFMtu5DN268BYwP3V4qc2btLbEWtVG3QLVL363Q4UiBgscq5XV", + "2k6W1ZcLsgRi4qtmdmFKEXGL6c5Av34BGEeRrEVAZ3jeKzmdAX37YEmd3bDCz9sZkf7tP6Pvz6qWcXnWGxvrrBwPqrJvCgubAD4Tn5WipkY5YXz8yjNCzEPaFmwZm6iMqtFsrjhWc9QE91ZYoWzAPU8fmf8uZxuJn37W9wHAV5Qxs96VWiJ1rjo7AiWX7SavEZC3nCBeDKpSnjgsoaq5qEkhYWDYR4woDT6B7ui8o38ZuHS3jDx88YHaMEqKWLHJYmRszJFMM2x1keJgHX3syPXgVfkinmMC8wVACDgQkaALBodq6fcVsF2Hs82XvmaMu4fDkA9uLG9cgw86AWCNWaMhcGp678UPNCeT9hsd31nPaUETxhgyibmonHpJk5if5QPyn3p45rYn3i71Y1Wgq3uvMCwuC682K8vCzc8DVHCDZDQgnBYbbQNypEWAadSWv6iVZU78mjwZ", + "7uQ7MoQgMkyP9RxB7cfAAtZFWUtuWGEWzskvUq4ZxEvh4nDruTmrRQejoBbVmZXirMTmG8Yxk3p7HPQwzziugxxXrQhgXP62k6jrz28xXVz1bNJfACUstvozRNBzcB5MuX2RYMoE", + "V9BoRZ3WH5ph9FY7MfrNc6cNtPdd6PNA7EWZVkHCDiuxwrcore2gCWbGcZWQxpwkqQK5rp78KPSSD1DLV8nqv4RnuN4Q7oaknZxYEN2LbVDcZHNffxSJ1sEVsqDMe418qyzYoaSvTBGZ3e6UkEWVvCb3vzQATAcv7zAEP3dzs7kZEB9prJChfn4mjUNGpdeeh8KwsrxMdS5m2a7TmkkWJ6SH4KCJpVaQikKqUYk2wMKgH3yBLL6h1ZnPtdptL7F6YRkfU74UFxubsFb5ZrkmWV1ynjJ1orz7c8Nzdh44tqCX1VUdFWwqUwH5wXggawXPNwSCR8qLQawkrhAdR7kRBEMGTWMXvwdtXbtQGpiC8VXWbYS77d7L82CYBwqwZk1eYatASrNrzyc7LXpjKZ3JzAibeDJiKSpQzH79QT1F84zvF3pFYR9XTmYMRcNSS3a8qupqyRG1JawzF4FUnnQpsyhTmQYnfQGiG5ob9ymQyBHdj4fE3787VzQRhoJQQtztBhvQye992odAQyJZbdfgF4KetoCPK6t9XTHfKxGtse1yk7MZGUQC4WMF4dyhJnaRcfrJupn4Y5UcqYhMN9vmCUe8BvypkqPUsUW834Q", + "3i4iuEoB17WB96toihTpjxoGeMFs7y9oMkvB5GnAkS8mPpPNbJuyHNAZBaDqURaurt93CwV532VNXe1sQmCGXySDGLmsx8WQXP7yNdK1L5cz3yLfxZkMUKddYejNnyV53CfHs8QVyRLUjCXwZB3g27UxwsirTNvhuWC4F2ACMwvqSgpVuDjpSEb3sgBqjFG1tpJHxHiyss5GyriA2X54Nip35ANWQJ9KXfXRj1ogjoNUNFQVtotPkfA9LdCoF9ZCuT94UpgXw1kj6Ndp1Y3Rvmy4crrxBt2J9PcwiGvq1WNH5PdVyUJCgYpwhHELbZTBABbhmcj92mp3cbBHqF6qHqvG4ZjoVMLvT5CXKkx2u8psshcqTdEqpe2D3QH6CJNAwANv2iY3kaVct2jhjNqNoY7S8RMT18ZCZQo9RJQX26QFyEBwkoAsxAFCLAqVRRosrUUTWkUUfzaVYzMZJ8gsQLAjbD4WcChktk6B5ju3f5WG4YX2C3wjGkFBsvzMcMwZt8ZfiRpdKp7ooJryVBPp8sf4aZEm8GjorjzV58xMzUa2crRLDd3rg3FTAvPzGWKpaaAAbTRyePEy1Vm5B44t32x3Rv2mR9jbCcxfQDAHAXNJSgVFNDaUCUk2p2QqraQNUFY98sg7Q9PDQhbMPafyBpyS2AvPLQgP4JvfB67TzAVwS121FNjdfczHSETJMEf8q7gXXhDu2zuXhVwS4tcWNabS9rJ2hnL7zubi3TsKN2LLboHs8KNkcoGLY1rcfgmhoovF92nK3p5ZP1hE2YyZDwUyH88WydUJiKW4R7GEzqZ88bPfH3NArzenoRQAfWcsbbzBTbMJvfBeRwv57RYUciWqNe2nrAom6GoyFi1RuHfJb3W4Y8d6Ez4Fn17Guhtu7aMBa7uaWaHKuv58wAf8wQgv6vpvETEhPJvSGTaXY4dpbKyGhqSiPSqPNJsLjWMyMWqT9ceQAjhMpitxq7e2TuHCGYzQdvtJbgN2UfyX14r2BEkbzE6xxEQunF3eugXwoG22ymgeFw2qMURmuREV7QThf96o2sQ396tUBJNuMvnbCBRB4XK6wAfiN5xUh3CFwajw5yhtikhjc2o2Uj6yZTPpFcGGqaWbCEBc3zqVQZivXJSp1QcF3eGXqKKJKyoPc4g4uxrk448a1Aa4PugVWqmUsnKyfuh1vd3L6TYNVhmxbnMbkSAm2i31fgMaJTSnodTZ1QcPtvWngZtbwEHEmbAkXppoe9cT9zq42dHAfskPZ4MPysaGbqEKPJcUmNwP4SSa1CtgVShHrtL6Z4CsZJCNjatZXNhSczPE9WDewUZ22jnUaYFQd4ULuJFS5zfU2iBTRvxR83q6xU8NNiWTH2VvquPg2gBJMZS7bRL4AD71Hsq29r3UxNHGDQHDo7YouA7mKUdyLp2BhaZHrbNdbK22T9Y1e6U1D9Y2GGpcX2gu2zEKRe3eLZAiCqC942BoYJob147SoDPmrJcJ1pngJVVg8ECzA3aq8XNWuT3VPbWnyhNAaqqMLYC3RHw7ch7SnUzctq6GVbcEcA11YgvrwVYjnPFLxd9d4MisfARjN", + "4tQGGLNJFJ2pSiGpQZZRxamsS2moL5vEZ2Y35pnqyjXNVdoRQgTNwcwZN2wKpHt1DAndD6pkBeuZbCEKC4khRKxFd9KEJvpEesmZUvQ2RMXTTeXXioMMonSbGHouMX5Ng6GixyNfyHWXrDUJEmbNqgcGsMxUKaab4fCgQt95GU1dgJ9XFVchpbJ62m3R9ZEEWrUPCBM5MmC57xV7uKhdJkJdw74QU6pAMeFxgru3CSTWznFm62zMx3GKeMQsVMLVuJrDkUe5jDQ8Ru5uwZSc5pqdMTPQVDMP3GKxr5g5ghBj229zLJFZZcMjVE1amzioJqeLVFLFmw7bN739P39oPBnmoccJXn7YZzx1tEtkzxCwSv8z7Nson6UEt98emWremVCAYbWpHqqiaUnZzSckLENiAnq4MBdSht7xhRf3NjCRLQEsm9RaGs1hUHVXaynNXJt4uoYddFhZPZC3ZqftdtxUNgwBqAdMQPNaEantUL1Q5qum5iW8oiPJFj7yp4dbt5xBab3ot5eb5yGSkR4LtENHJ4x36gheFmRNx51bxYt5cbzPZLrRNyFLRFaABxKmTT9FHAkgZVb1zNKgnviw2nzreC5Gspqsa2L3tRFGdHQCcEYE2QpkUw3ntTfUfPx4sTkYgimMJ23W2t7wWdb7Q9mT1cyRSD5GzDuvXwKHbKvedVgZSvvLVPUgfK7YyHhTPcv2LyZCho1j6NUcXY525FhbfdquMFmcR6JedSRv8hpWHYJ7QcfWG2StoaM5CjzqGzMWtNXJ6hrmK526jzWzBaDVETaN4afb9k6CspQL3zfkpY3Wu7Dhv8APN7nAH2y4b7vZ3DShvQjNBAipXKnim1b5JQaxGJCFPL8FGXXDnJUx5NPZrh4TgDAzBA7c3erqYHBa2Q44pUoZLBnQBzjEsDAQvfaW7AjX5p7HBZoa2aVVf8QpsBkxwqTxs5QQ6q8An9PYXagocKWMaX7zbvjvXrAQ3RLMPgDQtM1LkiSvL9fQVKaBXcnzwUhiPB5S7UNNdBfBdRa9o2rG9Q1EDZkdqZpQgShkHchN93S4BMVFzJa2e3tbCqyyMRTYeZ3Yi24k3EVSp9hYspKjW37ghPajqLnwrXHowM9dm7JUi2g8nnGowTPsu7TuPaEZfFsCkPUwVyHqntArHwdy24tLHuogD2FYxYNMSS4psT3TJxZJWSCvjmYxpsB1pm24rSEmjcRnbLGwC6J42qE8ceKeY3pLHJS9yEYvBkNjWkw8QjT7hejABFMA9QYoir7fAdEDq6feVUvRVgVNKis9Th1L8AGVSDVPJdSwE1p5NGenH2x1giKsDQVfNeQ9FbaZsQFS1d3CUc3fcSahov1nBnMYWr5HwqeeCotCbL3HT1zjfpZmsYA5hyGjthTur8dMKvy7vQoKjK1RoZW11fQr6FmGsFUa2rAj3wdrMfXHbMdU5hPNN6hjDFknmeGNGzXDfRLUWrUptaiU5bQKhkzSH3vyG7CyjCuQo3hpJGbmSmvdV6px4C3jFLfYDhYTT2zieos3yadm12fpB1Nxt15KWXv69EsJCHba4sng1Expk8TgeNp6s6TzerpsxSCu5Ccc6a6L9phLeVqCQ2QqVWqv8Ve3fW9N8JD3bRY5rrvS9MA9j", + "4tQGGLNJFJ2pSiGpQZZRxamsS2moL5vEZ2Y35pnqyjXNVdoRQgTNwcwZN2wKpHt1DAndD6pkBeuZbCEKC4khRKxFd9KEJvpEesmZUvQ2RMXTTeXXioMMonSbGHouMX5Ng6GixyNfyHWXrDUJEmbNqgcGsMxUKaab4fCgQt95GU1dgJ9XFVchpbJ62m3R9ZEEWrUPCBM5MmC57xV7uKhdJkJdw74QU6pAMeFxgru3CSTWznFm62zMx3GKeMQsVMLVuJrDkUe5jDQ8Ru5uwafpAmWPbXWv7XFV6Yx1pFJUg3q1Y5Cxi4TvYU5z6yhupeXQZgccL253TQKbFupXLzqSJ8J85QNAM3hFCg4xvVTMsdM5ovVsvSXLNXvM2VX12BR5otuJwfJVBAfYdYwPSecEbeGjoCecPS1SCw4S5rErEE8RcTEG9zn8Gpt1aKyT8qhwvvapksxcfGG5d9wCg8k3La87LW1DT5djS6nMZ9XH5zMUPuxHnMsoEj2UhQYBHyX3nuX3u8qmFb2JVgTUZqbYfu1SGHe6FTsQcTgm9e6zt8KFxzrMAk1QSHhC4FD6jS65cyWhwLVPyF2miB8KeoGLCoUdc26vhen7uDiwyz8gZZMaWcSKrVWsS45xK6vi1BNA5LrLYRE6YM8X69jXkcLdZHUgkph1Z9gjr3tCzYXXrPvUsHBLZhkaUTXzNkcnPj4LFTHLS2NGnxUcnvRDjk5eZ6mj7dDtux3HWqzf8bmdd25e4qALwRXDdmoPRw6L6MMvojHAJndjW4LEPmk3Stkffo1EHAvrDBPcmuhkzJ6tq4Lc355AykviKo7daJgN7aAwBW5r7p21RcHwuth6po9eUsp8nwJhrBDHv9CenPAtpjUTE2twL8YavVFbcDigGqQMcCa4puKsGyCmF2bfbgzSWw7R4gh2i4eb9NmaJXqSceYiqv39HDbVuaQhzhitfXXG9E15sCf7MK95F7zfmepD1uLzUbErGZGWDtDbNnVNA3QR66QkwivhHXQh6Ce1ERp3xAa7V5hNa4HnKZJLgGqNC6fCvLphUp7ZaKX883bSyTUn6VSAL414ss6oxejQT1C2CFrYceSecF8RhLSDBUeqiusYuwPgNrNyn7jyRxs2KuoiJQZpftnvF6rpg5fs5MyzkhG7hG6RwvfMG2D6BxDobHYumQq8ZHGZ9RYeiKZQuScAYsNF7JmondyYXSW97ciyCSGLskSdGxHq6auJzc5SE8bq8tjJUPpgKhqfbew8Ry93oWgSkzUnDjS2Na2UG6mf1RqZcVphH6LWrpvdtJEQXxYcoN8w4ogTMhm8iM5WEXDL4H49iBKpHkqcntyKx7sEGt8xqif4bbgBkpPvFDAz4z6aqTASnjgKdmmBQfbj1cAJTPNtZbnyQBghjohqEyHgnZ3NA5qm1Ax289QHtsiTLvB7c4HhdqRQ5reV3APRxg3Tq9fENvZB9UAeHoc68QkuPqEnFCtK29i94zAVrJiMu6zX1p9NprPf5a1Q3MYspfMicf4zJfeJtZj3Qo4jbnVUkjrtDwuY8Mjaaari32ipiqXFeATYvt7w9J3hky98aK7VZh4v7EdAmMzckYyjxZMhejr3gTj8H1g9nx22R3AzZaAXkZLdvSXArKKhB", + "9YRY2j5TBZrc5T8aJWNMmxmPWyA8JMCRvtTQmpz7QJSJKED1fnjgt2FLEf5tgHZAKtZZvprxZdLx91q4zDYbZ9GCAd8DNmoAJe4fpEU89HMWa7NdQTuisS8vKGN6HuBj73rjzCfUuA6xupEq5ihPSC1a9f7w3GayayDtDJvK9wjdpf8tV18893kPW3sbZAzs6fbvZZhMpaA8EmVg7n1UemRDAv1jxgGs6vHpPb3FUk59Lpa6r41Fp3ycwiGMy53bVUT4V36bFXV9sJyE4dCnyjK4Aik8LVc3u5jymVH1boSC31q6m3PMNsUiWxq8N91m4NXnDZiic5jT8iGou1g9FodbTN5ntExFr4s1rHnJ2FbrSqxPbZnvZFekSBJVFDFXYbGnwpkoEEk4h9RZLHGrUgYqp6sCEWoiUddKyrxgN8fjUZx1aEEV6N5kgrarJpfpUQr8YCreCJH6cxfgSeGxrHKMKK1xdfyhGfHgfgo2XKWmGPySFuSTJDkNAJZ9C5KS3RKCMuFvn2zREw1T26hNQXpwMADnMF3SBqHrqhdzxdaaPBkUXncoFnbVKYTxo4x2WeTCx4Pp7ZeWkWBpGaoAiMwRenqcK9GbXy89Ff3DF9UGunGsGMzch4qwicWviFrqcUhw87CZu9jhEEj7Akw6A6p8JwqEEkM4qFpHCpn3DApvViDpLZoCNGF23uh9ydy2Sa7v71ohFBSojDv6dQexKY9J8UwxuLm6FjLm1XwBwX7Dq678zdKdTHkxekwx2ec1x5Sd48NrVNHSoVNbA4ZQvbh66R6B68S14HE1oDn5yAS39wQxPpe8y2qg25wa4nFKPJRo7LXa9adP7sCyQvrp26PhMp8E5b1VCYNfSu1dBDxEU33JVKyaKB1rU8bQk798wLRtqnGo5Bg3MXVdSmoM6zGrDuzYfmCmKj78yTP59EHLEd9P64hLVB7igtSZWaBipkadxAFUFSvoaNCgG4T7p7wYSXjCPcKnL5BPaEwvdovd9VjpoaahSEac3QRaDFtfduym4GC6ACXW9bs8zYRygGf3hEkyLMwHfEpHJTP6U4cVka8tPDpmZq2L7aBkSYph64SctB8yKe3HuQEQJnUwtuEry3ysbAaS12CQZj7xgGyCqhVQc4Eqe1Dvk7bBmKbxD9ABcMypiMUpciEg4xAutR64TJBbrbvQ5R4JuX6a3oc68WExV8YM8MufyeTyGhn6NBCCttzRJS3FRJjhyrjDDx8C4i7Xcmz1b6SDTiM9MrzffCExDxKabhUucTkxoA5sA6P8aqyw7yGBLZ1aAbULL6vasLqrihF1agY6SSthh9cjjyidZBytvZ5k9v1CsunKBoc4G742RQUzERXhpyikiPEqqRE6tY5oTGaAdaTihTLG54iRkYZgwMen83sXLTUzjSYA4q8A666nVaTHLafdHs7BdgqtrK651ntW7BC8Vm6sSWs2GnyfsPQxWQYhnFGX5ZTaWMnPuSGviXr3xcXRknqcvaGZDW4BuUgzDSdug5npopJw6FLbGKTyXZDsQDKgHTHKr7iegEPazg53RxKBsqiAivNiqz9dBNFwrSwu8eVMkL7thQy4zCgnhY1gxAbasMPMqcNDDWPq7tvS4LR5GTMrxzzzZiszXnSfnJrF8nSrK", + "2wF8sNAVsk5NkVqW2tt34Q6HgnHMX8b3v2TWAsHfkFGHF5ep16ZUU8vTnKdiunuoQEvHJCtXuok1LL77t5izFHkRzF8YVNPYEvT2efNJDKdj4YAxRH3F92XMh8VqFGyikYopcd5rvCcnciHW21fhnEGUdZcvSfjtyCWbywgZc95y7vm6GvTXTxNdaDKJNinkzNiTvbqnzyRFDSWaALpmTGAkaXtaTKVyQrgwieBV6W5xbW23FT1ibjirjLBoEWaKfK9NfQMDDzjYDu82PvRXBFdE8Sxosv5LnwGVXVtAVmrEbgLtb9zXsy8BKjhhUbmZmjjjqcDSKbmQ1R3E4oX7dAnb6wwPHSJQtKUW47KPV8pDAwP89hVTik57VEAJ1Tp2ssUN7CVZc1HhUYrmuoFCfrWPPwoYhCXR8NEUzjvVaZc2JmofKo4huZFTyD4YV1JnUiaAtwMUkBGZdJpQbrMqtUUww5H4p5VtDir8di9tAxBBewkimAc1YeraJUpCbWsb1MJWwk97bkZo9XiMUX2uucVMjq8EnMWcmfcihxRp2omZ4KPLfYMsQaDu8hDc5JL6mdtcPKAyFKV5LW2ALcdbNoqyPEV7AanwnP5SL81PSX6L7PTcCCrkyBcmTp2Vix7DpxVerZpbpxxWsAhGQPu6BnwSioNJDXUNGyMKZKuLnMu3nBqYeSkWf2XUaouTb8N5UE53iAw81gCvHyHjyqUcNhAGW3CCQG7VfQSwVuwqtZyg94kjcS6nuNvtBBottQZi63XbiicmeFPZJNdBUxXpEiTjQmBdTdYmNbL8mDH9XMo7DpRnPGdAYwnUXpreXxAxnAX6yvAbMVCeK5dsx65Cw2jJyeGbKCQ47bjmMPLtsgzvoXqBnHwBNu6eWuEW9q3shTqeyGsgAjxtxA7JLpkGVE5EyVSPuiAqMnsThNXeopshL2sd5a3HS6De4VXtXQLeiUvLYPTpqipiD59obempFrj8DsTWu5oP2LkCGzHErtfSyp8GvVRbg3fm4HGiSbP8DEr3CPGRKgTWkedVGQ3wT5R6ULUsVTXjZXCv7V8McZhCxH1skeJHqEt2u1jbtWmaS9KH4n5J1rp59GFeqZaLSbrsRoXVa495yppeSG2ga52iJcE96ZUTuHVMLTVmTZ9fVnT1JJdbkeRQcTxXNQQnMADBPNgSfbT7cL6JkkrAiRgtA74rUajW2WYFuSEm6bgtfKTmUk8VgADHEQsPhpJ9egibddASoezYw1PuWWWeq4Qp2QcwbwgWbiMRZPyga4eezzZVZP3f1X8kCXWxJapqTBvZtogDfWnoHKKe3kX3yG6ntUZ2BJ9DTj5ZUUwdZP6vrk3C1KTJoMMuXxhVTwGsDoLADx4qGw8aPpdobKBMEfWHjSu5yNbZoffBDvrcsQsxMAC9vbeMmqSYBxvGvqLQNfV5oU3ZHS6uB8ys6ESSGUxS9HLrSMEZrHmwWeYX7XRSE6gYmemWBnWB3wfjSiMk62n6nnhTweEQhj6pAUWGoqdsVCfAyzZ6C9x1JETc2YbGGQJET8kisX6rzqfx4APm786vSK7wyK7xCEMe1JZrdtpTv7xXwxAn3R9NcvJZAyi6Ms5BJYPpEt5bXMn4fYHZD7JrJRHuQiBctnpARmv6PLB9", + "DfVFCdP3wxHvs1T6zV3UaL1RWXGbVUouKbBja63RCjur5imaiNUSPWh4DJUzkQ74FK9exj66xjtRYwtYtndzyJZWvbAPjML1znXQZ8S3hVTNBfHXmyZvCpK3oSdproRWHQBHYtPsxDqtFoqdwLPqo7B2fpjUxoPksRpimGzqWUkQpPb79NW6B8H9qr7ktmfpy864YgMDcXZAQPoTVZRPsozRaB7UJ3xbgVmFfGfkivF9Zm6FCWHe76M9rjFGoZjZbEZWSv1pyn2XhGMZhQYPYysMToaEKrgXZwnvkejzWdt2jk7PYbzCeVGQ3vaTrgvZWfMuMxwTiFiRKxb55gkNbcSnojSDzk91mA55CV42K6HtijTjn4JukcwafcfsM26N6eD8s9a5wDhtVFNy6XSU54nvkWo4AcSijRL8hHwAHS2LyhgjDmExQc384TtXhjjmKUqBKumJw77gFX7H7vitSPpSejHLJ7AaNtoZEaVhPEVUnSgTLizkfCEZkSsAufXpRVgHNWtyFRwSqraDfUBkuTgDBYE17N9efhNA5tHAQDKBkFxofR4cQL9veBMPCJSSAPieoXjo5a8J1NXZuyAiub53J2J8g8FBkHtesNZRuEzLQYUtDmDfXhjBSxDV8GDa4eVgbX2FyPddAfen79vXUKWDEzAVnDkHezvmmJSd24in5vYCuhPDhBXvBcXt4NL6MmH5gHcUWzWEcj9pXvs5E2tuFhPJGbyVGqJkqVcAMX6dTA2Y5Y25CHPU9W4SVo7d78avDa1G23nGhGzf59BBQPJiDeCs7Mo5qS7PX6RFFeKtwEnzvhh4vmzbXNcSpE9wvpZyaPaiscmjurti9djNMd74zecbii9bgUKEyh913ze79xcYZ7s1DZEj65u9vHgVmMUbyfzBhnc5FpwpdQF999DEdioYhJ2gioYxA97gLbmzHjqxFt59Gr1STcn9UeDsiwg7rJJRu34DNxbmSa8x51kBQYCFQ5ZQ7izJzk5FVAaNkurJ9wh8tUC8iXzqd1o33rpEb84jrNJdxnkB1JHo6PrkWfHxQ2LvAZSTPS2W9EmmS2qPF5i2Hegd5Mt4zzCSsdAQYBJG2DDoDAyMskZPLqfJ6sgS1i5rRV84CiGsvhoJg6d7xZc6px7oCpxpnMU3iGRm6Z5avWo4dJBbUYRvdtiASxzqz1UqZJA5SGZ5iad6xmQ61dSGT7RpSWnXZ8Cw5nNicUD4YxYy5fckVSZ3qkt8BxBsB2r5Q3x4ZVKMMe9oPE32mgY5YPqVyXnanz4LubBFhKmC4LoyHLxRjuSkvMpBwN8usbwTj87zp4sxomMtcEhKsagTpSg5Qvms46ERpLdsiywQAhLkiMEeychcZtVhXTTPdE2sTVPaaR21uALrLWwsWsss1awugG3eZFdR8oAZF9TTdAjTMViMcuh3GxzhmgoxEeWPuv6TyzkpWQkAZVCafnchPJxa9QfWZ6Z6rt7gAry6d5eHWkm3Qx6aQ5DCaA6JMrjufubGJJK12mHRnEvjU6xNj2PZzj8y6WhSSh3L4ADDLhvprwUT2udQHPgMZmGf5X2oBXyNj9hAmYJi8mdHeHfF6LAAaDmEduWtDGmzy8778Txy1ZT1SjE2Hqhwb5figyFvfMtTY9wdv3nQ7Gws8", + "DfVFCdP3wxHvs1T6zV3UaL1RWXGbVUouKbBja63RCjur5imaiNUSPWh4DJUzkQ74FK9exj66xjtRYwtYtndzyJZWvbAPjML1znXQZ8S3hVTNBfHXmyZvCpK3oSdproRWHQBHYtPsxDqtFoqdwLPqo7B2fpjUxoPksRpimGzqWUkQpPb79NW6B8H9qr7ktmfpy864YgMDcXZAQPoTVZRPsozRaB7UJ3xbgVmFfGfkivF9Zm6FCWHe76M9rjFGoZjZbEZWSv1pyn2XhGMZhQYPYysMToaEKrdFPymjFMFAsNt2vSWhVxh7X7KigVuWQCTv5ig7qcM7aShwN9fnpMtLMxh6jadCWN5ozS1oQ4pQxx4E5RzQwen7YJ1j6jisP2XjJ3vSozEzBqeui2kUevVQwDxc2jziAodhPc5PWNS7KaAX7y7m5PmgKU6sSnXnuPj6d85gv95fmEr3w8DpttTf9m2oQP4PERchifotFQPNQ83cod3c2tj7BCHnbFR5JaJadjbbxk3634R6JFJ56v9S3JGuBDZjZ7dVo6giLJUybDBRbN7xYTbzBLHyYdvnhXnczMvRGQ6XNVdNVbHkLheRQGqH6UAsMR6SCkyuW66H8boKGjTbNFigtjj9MGPbyvjAVQUWteUpJY9UqmNYVpbNesm2jx3sVQLy9oEMzmACKkjrM8ZBk31SN9CQLshVfPdBFPJ7Tb82uckM3t4gYXEWJXJGQ1JVMriwHGizXJ6pM8gckfPb5XLo11hu1P1eXz1FDQzqUoNyocTA8TT5KArePH7CjyQUZ5PAKv6d8UbZMcJwdxiwFhRQtthPGbhbWKe6ttwqz3pw3Vm15y4PUeknf6ULzWzvZok31J7fB1QXyPvsPZMZQ4eWGf4mqkM7W5ff5DgtvXaRP2oJCDQueTr1DyApSwXP796uEWyC3M3dczzsS4DJ4fe3Sxz8PSWFoKKZR4KwxJW9gtBdYN8WyEjwouzsf7tGtPQN5y6jF7VS914grZkMMVYBCVqsN58vAazAHVnqdSkoUmrdiHjUp1bFFZhcQLZx3arj1JK9mFGzarthvxJYMUH1aweoAE84o18acqrxNJsQpDGE1oiLrBukBs2j8t7bC5Cb9wJ4NtM9bD4vsC1mSpyW3utVZHDWcZQT9dD18MyDFzkoeQsKFhcNtkGzyUg1yo3uy5YfM79pnMnmGYWxpYz8h75DL8BFESjJvdwGXYzAgo6fGep7t7hzdV18tmrXUhUwW8VFnqjwLki8ceEzvz3bzc9q7c76qrRCt1fe2pAD2ku9HhZhpFBQ13yLR1inM71Brq9KdWD1ek8GSCDmanqmuV7EKf2WtjsuytbBmHs3qQ3djCZPX4hfDfqXbKqfsVfAATRsk9bNCbgGqqfGUgMrkxV6ErMtShWKc8GS6qHYdJ7p6TPu2Xw9SntozAXg3GSFLXrGyFhKQ2z77woL3EG8MTWnbjqJsWPJm6nrPtcZjErwJ5uArH5s5mTPU95mrmRDrtVQDGEZJ363APFmNNiqaJVigkHtiRAnHhStL49xK5pDhzmTxhmEwt6Y2yYmaSqAxoMa7szdwqZaJ1b7qbq3gfSzBdUE9K7HjL2MAoTKu8W7dL8P8j7fXbqLbPN2KHfAGDim6hb2BXsgtXT5D", + "DfVFCdP3wxHvs1T6zV3UaL1RWXGbVUouKbBja63RCjur5imaiNUSPWh4DJUzkQ74FK9exj66xjtRYwtYtndzyJZWvbAPjML1znXQZ8S3hVTNBfHXmyZvCpK3oSdproRWHQBHYtPsxDqtFoqdwLPqo7B2fpjUxoPksRpimGzqWUkQpPb79NW6B8H9qr7ktmfpy864YgMDcXZAQPoTVZRPsozRaB7UJ3xbgVmFfGfkivF9Zm6FCWHe76M9rjFGoZjZbEZWSv1pyn2XhGMZhQYPYysMToaEKreqRNRKK6po3m1zS8u2h5wn3N767WB2LZkGSY5ayo74A9nTXGteRuZU1cv4ZUudsmAHbLR7XCvgKxGPnZ2hfYv2n9c2xqcUyjJaaewAMhrEBw3ZswNvNA9zobF49ak1yXZA2EJ29bghhMk7EFZqSTTP3mfUtunS2aCfhgeMJ7HBgLT6HHxyJfygfvW6XEjNgfnzFGQjfq3SNFCGcbDirQJ36wEbZemFahCLGi5oPLzPzTSgN5i8wpNuyNJoaBGBwpVTnHdTAi6HPda67xTbRxyM6A8pNprveRGPtgxt6Y9CughZatz3M5kxT7GToXUWTuv3zZCceRPkxffcscSWDyHrvPcweWgJS54MA38njaKKBRAQMwvDUt332uiUTNVzSaAHkZzDNUS7JoJjRQZiUGBua9t7YRxoibPCQVPtcFQqy6rJNawrkUyVqDLxDnuCfttCwxzhshtvZf6jtgGm9E6XDw3m6rtFqqyUWFwQrnE4jc1imJf9reFR5pU2VhVLF7GoMb9GTHrXG8x5vLGuDsPb3GNsPDcMMC75a3qpPMtTVRmwAY4gfghhmCAEiFwV2fTZuXVLKJRUUkmTVB9qwFpBpyH5hsjVxG7LshYNBWfqj3a7p8u8nHKS2sVaFaQXsoRcNzmduTrK8mdvBRkQ8XbQGeN1pRiVVoAhTM2sqv2KHMLAmHswtyKFc5JD9jkqNV14SpkXETMQDQLRh8X5j3TvAyMK6kBXdqwwdPzGVGqrjbpsZJd5GtquJSfSDh1mF1yUrq9CaXtxCALBDXNgj4ZrjXUvGeXC7SgjdSubtBcdjWVuBkKUAUurszLnT6j9LY9gvQLn6HhAB661Yy7yqYKRR8KciVrRJtAjp7VN8HjNixdALCx47kGp2wm293FHshLmBRtGMHSsNmHBr6bYUtTsZV6jVRxqaqFo66ZXVjt4ofdhYCAK39ubmaBB7WXajuG5XrZzK7if3HwVUbCjo4cSJwVUzujdQNNtK7DyjunPkBQqwbPKPN1c5kLdYippp6bN2JHZHpEWedfw38dTtDwFavc6qyL3pVAcRjuJWeUeR1Wb8Lsji639VmCLk2Bog4tDbQGzDsmr8h7Q2tCFWmgVameJJWpV5j3JXC1C7GNfWwUAE4JUnYoTssCLTCzPchJJ6UqetZQgmvG2w4zZbz185gNea4HtzkMhgREaZW4tjhkQqRppN3DhgsHXp6KYf1w3YkPEmX1qVED3hQrvghP2Mdt3WbxVYDJcurMTCht2EvdjZyEHTbz13ULFvsUxRCa8XkoGcgq96LRac724fPQrK6dCzQVeUkj5ygvAcXcqMJm5kVhPJRxYTgU8Xho5VPgy14ZbRZ5wBojGu64Mm", + "DfVFCdP3wxHvs1T6zV3UaL1RWXGbVUouKbBja63RCjur5imaiNUSPWh4DJUzkQ74FK9exj66xjtRYwtYtndzyJZWvbAPjML1znXQZ8S3hVTNBfHXmyZvCpK3oSdproRWHQBHYtPsxDqtFoqdwLPqo7B2fpjUxoPksRpimGzqWUkQpPb79NW6B8H9qr7ktmfpy864YgMDcXZAQPoTVZRPsozRaB7UJ3xbgVmFfGfkivF9Zm6FCWHe76M9rjFGoZjZbEZWSv1pyn2XhGMZhQYPYysMToaEKrDP659LKft7LjBqo5YaTaYmdThf8X71Ky2sUoLWEWjHX2uKqhdKHnS95Ngwovo4YFWKMA4pWNpy23AaK7a5Qxs8Uc31RgjDekU2Yhm1goy3xk7sa4rwJfQPHKp7CBQn6NcWVW2fwmk6SVYAWDgj1jvK3kWTxmuBFReAVpdMXCTfRALMi7MuWkXVkuYgrgxpScMTfCZgYFApDhCgz1r46Y6AWgcJW1h6HejfatJCQmdujEoTSz76CP3g7VxyZFSmosAyRkQaDAkvud3bgkdawWftihkwUHvrwnHWtRqehsR7ybQa4Fgipfg67nMGJPMLcc2T6fR4Q9jFehDPU1aBaaBprxneHERTSJNUF5ospECkQXK4VDAcZscz4kJkTnbAnrBd8a65Wa6eWUWQqUQUYYP7yPCUeDy3mJDQJm5MKUSM5YxphNucf8a2MT9KdLvR1CM78jgpztiKupoparB2mBw1HAN7uLMZzRgbumypf66w5rLsVp3GbEBWnD2S3UJX1qxQZBGVcDdXviWoBq3V4NiqidruRUfyKhg8yJ74GGJtJfgBrE9oFDQ5zPqTkqkrm7k8b77C7E4G5gp79udZyKn5FbkazdVA8rE8PyzMj2Q8H2qJ1ozapi6y5qi7os4CNwiqxoUMyvQxvqHViL5HzhiejKgnsCMXEm18msPtxrx8yvQPu1u1HCe5PEdNAU9UiGhrDYeTywfbgw2ANaN5BRYwLqb7SYzs4zrBHV889D6VXKVqpTPBWuHhsLpCEMfcbp5qS8tVX5ubHQA1Fip3nWqizMdXi3XY84WwBc1FjyHUnRrJCDa3PRWMzAzqVZyjgCyGQP8iq7baKDAGw4R8DmKXdfVV8dqmYP5479vaqutCWLEz7AtZtQve3zf9MRpQLtXnepmaQ7J9Ddw7BRb4DkjWR2acubBMDcJvEhUJbMr3tqcA9pABzUTyKmYU1igEkCZTDRqArs81yUP5MDJ28vq6TuGrrcm27V4SJcKEdxUG7PATsYWuBSRpk29iCYDz7hG9DxsnSps67HRREZeE6kZRr8rTR3G971eqZys1992fk4LGLZHKUBDyXkyKtCrNCGwt3UeqcJuewxvQj4RZ3z3gZaZiBX7pAS7inpb6jxyio8Grt6poyfwCykhb7NaNYHGZGx9TvYgzcEudXpTuzhFRgg4aTwbhcU4LKuqY8ZQ964MrRTJGmem8HN5LvrpRDpn7R2FERfWoKRsEmrULR2rmjpEe1p4WsVcpxNhT6RZeoBvL33sD4XnV1bstiwiD48RXt9S9UE5YnhjNZPaLkp5v581EZzk4US8JdXCh6X9sSxYjF5G6rA3EEBiXeAgQ9d6pdcTwkdwPXbvHEr2CK", + "4tQGGLNJFJ2pSiGpQZZRxamsS2moL5vEZ2Y35pnqyjXNVdoRQgTNwcwZN2wKpHt1DAndD6pkBeuZbCEKC4khRKxFd9KEJvpEesmZUvQ2RMXTTeXXioMMonSbGHouMX5Ng6GixyNfyHWXrDUJEmbNqgcGsMxUKaab4fCgQt95GU1dgJ9XFVchpbJ62m3R9ZEEWrUPCBM5MmC57xV7uKhdJkJdw74QU6pAMeFxgru3CSTWznFm62zMx3GKeMQsVMLVuJrDkUe5jDQ8Ru5uwyCBu5zHeqqGcGzqjvHbHHGH1ev98wMmeqGbeGpi4yL5Cxq4FRgLDUTr5g9C6eTkrwuE31q3YYoDAzwfzFHtq7eognqaiWMR2t25qb69QGDt8wnYKHMNkxNuug7kBM4btmhPm9D6NcLJsCScWueFAtHnQKgHGmUSde9HqsiFXehmXcnJL2rQpWaj12ktNcruUdLKYrpbAGAoUtt7QFD4jwaXmnJZcPPymV6fb3EQ71NMAL6VBaSu8wqhYAXDsfHa2s3pfYxydmWiY4n1FwLYAgfh5mPhK5ukjzxbA7ioBvWpHhDMAnZhGdj6AHKN1zwruyjEmrRHFP9J8bA5nVhgQ7uqQmHatrZY2e3i2Y2jvgWSZrj12b6YKW3pihasyR9fiYLy9MGtV5cvEHCr28h8F2xFStkhkEP3WqkjTXzJYuv8cL6xVMv1gXxM9xpUBkchSw9WWdzn5Mii5xafufEqVTT1L7Zpbr8jr36S4h84HUhcnfton1pEJb3Enr8eCEjcJqvsPZaxjr1pkL3rjvVHRWM1rWYp86LTEGwQgAcAvBdkRw1QoJASBH6uMfZWMgRrAsyNPdbnQHX1Aupku3Gvy115p3VPhPtnC1p1NSW3dUGH94z6MRq3aG1kVpn3vjnG6mKuFWRBqNTHVj2wk7cJgjXsSeydDcVxGNNh9FyCwSjjLnp7H4FNESK8d21TYPfNSha5mPu6UGTRo2oNrSbjHRnFPubYL4te1zzowjb9JsQLGKzfYyXoBgrLmjvcqZcNJuL798eSr1yACpWm5928K13536MV8BTtR8FgNA57WNkzLQkuUi3hEwWEkG8hBK1DRbr5kU35paQ9FuXo6ZDhvokenubw5xXxnXMg59Ky3ce2xA7qnkYTv5orD7ipLybrNL8PN4KHx2te1dhV399qEPChRPegiFL56sDavsJuRjgWCWxkSoKaL3hvR7eLBuMwxdAch21Kpv8w6ex2di9kHFEuXKZCfrEtWfHbp8KbfRcyzkG7DwVMrHygPbvkBNXxnEqvBXqBaA2TJxUQsmvaPRahYtiyUSpSsScQwkTEnEGMNxo6NKFiLn1aiN64b6bfgELNHqV3tJ99WvhvNNQBjRAzJZFk6EeURiJFwYyn4w9MyA8hPeoGAt2WgvqAMYfKfysoiHZdtfnyQJKXAC3Bu2wj3qZ7Su9jzKJgykFsrUvBkcGPTaQ15KWbiyQ5xvBW3xvw53Xw8uFvMb2DM1FdZTguysxxH7HLj3ZfkcDeL1iykH9RVS3mABVFe9XvRss2Qwg5aoqcKfbtDnTSrAGkrJ6iZSgKePbUVDavN479WJhZ9oXLjuQWHhjtTQ6LCeFGZroTksLAppottiXNDy4un", + "4tQGGLNJFJ2pSiGpQZZRxamsS2moL5vEZ2Y35pnqyjXNVdoRQgTNwcwZN2wKpHt1DAndD6pkBeuZbCEKC4khRKxFd9KEJvpEesmZUvQ2RMXTTeXXioMMonSbGHouMX5Ng6GixyNfyHWXrDUJEmbNqgcGsMxUKaab4fCgQt95GU1dgJ9XFVchpbJ62m3R9ZEEWrUPCBM5MmC57xV7uKhdJkJdw74QU6pAMeFxgru3CSTWznFm62zMx3GKeMQsVMLVuJrDkUe5jDQ8Ru5uzBrpBUJWAamhRD8zzu3iHTh6MN2Zb5m64ydpNUrtxhECCWPDaSSRBXu9noUmHTR93e72FFyXcxxCwx2oq2N9S2DyoEoytLur2nzgczMPKqEMvEfy8X19xp2ih7hNCthn2eq6Hqr7pamZUWp7srji587CkDFq11YnKMgXeGweRHQ3hPTGeFCnaLMJ6SAPjj8VgPKQMEhnT6graMsAgZiwqDKiLtPWqVCvzZ8Dhhma62moTthnBc9aw1v4WNsnnX43VnEgWVQFnnxwLp55uv7AAhxHC96EnA3jPrXcUNadm82njEaHBayfzLy9dr9PVjPHhrrsWThvG41ZPa8iP936EA81c2usCtWKqsie71hrmxB5CzJypFV5U6eurtf7t8pZab1tyKCgn4pN6HBPuFTzRV3Tcw5JTsdTbTvG7f7eieC9UrnuxFFwHdUgdGXnfAmND6j3Jrzhxsc9rzbEAv561QdKmns113JZeLNrUdkfvPr7XiSethpQugvUt1n2cNHwj77whEHMFnKgEsygJUD5xVKtG8cxS9AdB4egPe6gwSuGuW63oBXq6xKt8RURmy3FGf865LqBtb5a7Q1SdxnyFWPQsjJrPpE9SsyBfN8VFh3wEsTqNUtfnh6WwJ1SdRFycSJBiuFK7mWHKqJQNNMwrzS88Fw1AJscbvq23AvgCj9RboGSn1CLd4o3yqNec26i9Ucgy2djVxZjjdCsxDhqsRoevNjrNsRbAE3fiddJ2T5pxWg75NYBiCDiqd9hc361MUNy8n8BXA87CdexrstrGUHQd4EW424cVAoV7X48kYmHJnUuegA6aXKCSYvrMhEGPC38trrYgDav4DN1VzKK81nE3zjHS2JrnXGiNsmven8JFH3yEL463iWLw3rZAVGpjSaEHWsgKnf3JLB72kA2D6WrFjv7PWWPuQiKLgsSTxLkcbDcQ7ttdBfzMuMLFPtahcsdYgjrrRc7v99UYEyMnfJMbJqWAAquguZQ1WvacdjdJmRue46QyboQeKE3LuscRk4nhBvubpSPbLcwEaHsjeDaw4PwSEPS5H1GQt9iWvCybjmnFvSB9G5a6udRjJj9nVL8N483uJUfzSfxgLLmEQ57EoJ5rDptM8oAUB1zd12KuE7Bzgg8t1ENoS1MxPWRHKSgmC9qWjpVQHxKwPT1PyRaxsj6CM2ysqiwtEaok7G5d7dMdA7eom8ENB2JoSFSbsii6zSDBGkuzfakJeatfWvYtu9phtvykaWAqbqwk33u9jZkbTP6vjrgoxzGDQkdsdqNKn3BXwihmTwJfG7HQidueaW7LWiq8LR1Hw3X2pWzsrwn8vag48qhBfxm65gvm2wGVVvxthDPMvHeLPuZS", + "9YRY2j5TBZrc5T8aJWNMmxmPWyA8JMCRvtTQmpz7QJSJKED1fnjgt2FLEf5tgHZAKtZZvprxZdLx91q4zDYbZ9GCAd8DNmoAJe4fpEU89HMWa7NdQTuisS8vKGN6HuBj73rjzCfUuA6xupEq5ihPSC1a9f7w3GayayDtDJvK9wjdpf8tV18893kPW3sbZAzs6fbvZZhMpaA8EmVg7n1UemRDAv1jxgGs6vHpPb3FUk59Lpa6r41Fp3ycwiGMy53bVUT4V36bFXV9sJyE4dCnyjK4AiLX8BnsqZm5G1dTdPUaJD4XAi5pQa46XTS2NL7fZpLnUVJcfH6dnLxdmTEuppABYqXiGM5pT9FQbkaSyVxiqfFS4j6Q18pn6WSz1DQfTJRQtt1r4UA79UaimUsoMEoQBXVyVyHCEpChf99faDaasNmZ7Qc7WECCRi7yazV7roJNAb2EmhBMGqXQjokt7NwcRFJPd82k6NtyjEH7CXsVgRQGnZ2Sie6H4A51L71MsbMV5cy6rmJHzXVYe7fGwcZGxVeCmfCQVBz7w1xazYSZAM1HfoFAkggj29Zq1N1rbpBRXQvSZd7d9rLGFwgozk5N7AMmwJY9r7HiQWioZdM9A5tXtKDZ5PnFi163HtyZHaLA5AwnBzpUutigkYwT4KpPdzqFJNtu3heu9ZBJ6VxQZaXHbG2YmZaU84c53dEyLitW2j6V4CXVzDTLxe6briherveYiwvnGiujFCGuisBktzGMcgsA32qR45pnRFRYfWuvPTNjLWUkd3LR4jjEgeds41PW85rD195Lc9Aqtt7X1f9TMBuR5cmyL9enRhEipaSiReynxcp2iofKH63gneHkCbite6sJDojdK5tnUhzPSjZHYeqHfd2eNhWUYdZG9kFjxfBGk8v4jDXvbp7Y7mKPf6VTLieBcJK9ufke3ZonA15pRAG14fzKNxWvYr3qPEWAJUF96sms6TFuLV77PbZigKJooajg6kzDzvPEbwaDg2x9j5rATPEXv2iqUXK1TJLRetS6mckqQQ7CsQy1a2sbQ1UmzxAtmRLU2KFmxkcWiPEqeQvkgMYKksySajBEKybTDimesVoDkPLrNeFQmXr46voqPo9hNaerkZN86zjspPWBLLmGE3BWJVyzMiEGzPPJTDDki4n6hww3zbeiniJqboSTf7DrvaBRL3YiG3RgqfvH3spVjsbDB96KtqLRPqXCQHftnt3jwCSGYW5P1hVGdfQSnq8Re2a8xhkoQpbRaa7B5JEmVyfNXFoLbzwXwdE8f8AeQbchCNgCHJjksdJ7BsRCGTZoqS1VDLSyEC8183XG5rsUHpKWvibbHXDiZ7sfVDa1n3jSFGNpQvKisivXhZR4ETVfYg6bfLdbZyNuY3so8ax1vCTTsanXtxva57PMLPnn44s1BG1nHf6pPFYhBubJTbG7qvGf8TLdthZYVohsoVW6j7kGiMhziupRLJp5oL9joBg1AjxrhT3Z6mkDiJUc8KTvmZjtnbR5E2JEti2WCwabGCi28nnX4hQ5GNGLnRJPyAQwzXTce5HCWjD8qn7L94Uv17cChouKNw7q4A8jp6udJCLGFuF1rdUUBmkjtwQG1vCP6hYe6VmP2mG7s7WP2ctSb7qDdzahSr4qo", + "2RsDz4W1HJ6FBsRyHnBfHFpLfJkeVLAVVc3SN1xCct4EEs88B7jHasKNoPVyer4sLhafNViWaSbsKaNUiqwnb1c7LHF49bKDTZtp5KgC1scYWCJoRLu9Qr8LuzVNmS97QsSV2raZKKMG7e6uyCGAFqn2VCSnBWtUhgHRtg8r1KSnZYd8BpWthL8QMqxSjABYp8oEjCnP69Fg2LugAApCj5YkdJDknYUw4Ph8iAnmzHBRggiazCcRKscYkM6ZySqGUJ8gjtBdnWt5TZQ9rVdoPiRa9z5tVNcwgYQi5WoWdr4Mj9RhPskN63rKBifnAJnnbXCcZdAFKLvQvy1weiY27tWTRD9eLYujw4ZLGh9wFk1er86zCsg1ntyU5CJ638J8y3i3pf4yUhmKC2DhRA1YqMpiukRjxqeiiXVLGMhhWsXRv8N4JHA1N53SzmZmi4Ba1V566SgwGbFaWJQYSNmLSRqgaoKWTuqz4bcG2AYBXoitrrsgraVsh3Nh56KLzeNLPPJTMpnQMS8MKCCoq8XkwdRjf1fd5vmoV43dAAUfez9joYWBZdiCNZfHUCB5PCPjuZJTLXDVcmwEn5ALJurdH6gyUPu57Z9Dd2a2BbQjb9YdHEegaaKn36BJoA3iS32rexEf6uQF4yyhu4N8NBQqoTbBE2BWXAEf81dZ76J6vuc7ZHg53UBW4E4KiymHfbHPfLAU6vLBcuaAemxAP4YgsbU9a7MYR9hMxtdSc4mpcauDT2tEGBT9fMm98wVurk2qXBS47oXNWXDUbQhDMU4DhB2NthU9qkWTvjtsXGdBA44Rogk3FXftUBfYwDR1Sfw9PnNaYaqdqnADhFCe33jGXD3z49bu1htufZRnoHK3QULiUiN6SMgHDhvCjEK7tvuNSTtbjZ8rBxF8FFkHNTD76W8cdkw4bGjPeNnQn7ujGhkD4zvtS14o8bPH6wA8qthaHDHmyvA62R8C7Ybw2L3gwYaKjCnTHuDB2CiFZKvhpVUbmvNXJLMtAJ66J5UjE19JmjcGTEnbSrXCtooYpVntPUFqAjgfddFk2TyNBr8SwhKLSAAPdmN8R21qArCxqoR97968JkQh5SC3kH8b55Kos3KAsFMBbJgek9Cs7DErithUsB4CM4HN275saRSNkREGdRkSKbLmdbER26D8sr6VBdFz7CYRDUoWejhWsG7vgAeWbZPpncCsAQmu9gMirps1aY3xPSm9nfmHFQ67SFzBE4yg2rbBTqbuhQ46yBALRjuAPC1vn1MyrVuagDcoA4NSXVARkCNnipGqUPm55WDDq9zZixSjfVQ2qr3RrDkZJA5ucb67h7hAVQpBJtacer4GCCHseEh2yTip2pYPwn7h9BHAcrkxNNVbmb9iscbVtP7o7dVBCrQCmi59f7QXHhk8rET8JPanWDCJhwnXbmLJUJ4hSUkzVw1LvyFY9qFj4MZegr3HdKr8GzWHnoay9MibfxwMjBH2gUre2bjUtGHgAeMnhMAd17vfaD3aUjUQE4pwXsAGdoeUzn2Yb68vBZs3jqbaktpcm9Uzm8DB5iqR6mp2Vd1y2xXWG8J7bHcUPdR5y9hL2fpPUH7hhR5byJNDHZYnMLLETmF9J6TmEE2k6cABvF9wetw5a38dcpS1EV8WXh8uPpQERn3", + "4tQGGLNJFJ2pSiGpQZZRxamsS2moL5vEZ2Y35pnqyjXNVdoRQgTNwcwZN2wKpHt1DAndD6pkBeuZbCEKC4khRKxFd9KEJvpEesmZUvQ2RMXTTeXXioMMonSbGHouMX5Ng6GixyNfyHWXrDUJEmbNqgcGsMxUKaab4fCgQt95GU1dgJ9XFVchpbJ62m3R9ZEEWrUPCBM5MmC57xV7uKhdJkJdw74QU6pAMeFxgru3CSTWznFm62zMx3GKeMQsVMLVuJrDkUe5jDQ8Ru5uwyFfu8QeAwhd3MwnV7kFhdAXsvoDWj9SsyXtdF9EJhHBmod6E34PmJgQWhp9qEnu1qwQw5Pqaw48EQKoYbME1ceE13vXNcQmWYGTYJT5qVq3wHJEsVWTSQYzSNGcTaDrSonH2b8rmAPGceLLv8Dcp76aw8UbBEUXZSBRnTekkh52GRYJYqHoXf1Pyxqtudu5FUWvxwGkq2ZJDgqLpTkCw9SrkuPQJn8QZErrNqzEaFzS9YbDoHs99SxaX5kmzMt353Q3dcCQe6YE65jjKydFkNCuMEfybDbP3Dk7t8dxhpMcrL1qdh4YhMV3QV1z2Q7qfYNoLbwjMxdqL4ESX7VZTXhJ5MuJ8GMHoqsKiRWz4ge1z474gksy8DXKVKDFisWpNhcL7hvJov7mKj5gjq2xM37fJe79QoKEb8WNywGzAgVsntvKKTtParmkiNtWW9bJMr1ewzW27FBhDzvaXutkXejfJKp7GiHGiLUDkS89Jqy8YnZUwqo7Vus5fgVjxYXJHACHHhGuPPSkKf5PaFDUCJhDLKz7to1djuVeNCJBnDU1JjHVNeznQWL1wmsuurTgWnaCww1raacT8jnxc3rj4v4BYuTfTdgJsY6sPpuX5KHNNjWGyvR3r8R4HhKUJteC7mv6czPTPTSy38rKkNW5pT9NxUQQgpSxFt3s6Py9sPvovSj8xU3Cu9RhvPQQnsKfEWZDXs6BfhTdVaXWB8CYz4Reeb2CCwtdYbyxvTz2T9i12EA4PecRXGjqxddm9CwVBEnWhzLFiSgVgBWyGpirSjujv6v6SKUc2MWyyqDRBWmBTZjKrf7DHvGDe5fVWZf4kwiU4jMLkF7T6AdSDrMnnUsdfWA9NcajV7U1VTnANaUtcB1oc2E4NiqfdFQHDrMbeN7K2HKzod6bjuNAYh3sQ6BBotKAsJdNbWCM6THYceY4nSfkSfVBsUdaiqXaUHKEXYH1LNRBdr5Rx7jPGm6sAUbSdLWD6UT362gK69rBc3auv5rZSfThL9bY8MPLhJN6hzetknw1bnsrc4UVqmYNgXX4tVJHYGwiPw2hjQsJC6f45QbvyFct2jeQ62ARhi1kmV5Vvb5VfT2DnCjKkgjXgXw93JVmhpgnC7jAiWJr2iFzHjfgvUQUBgMCT7DnjixDrmJfTXVu4BZjP7AVaBa34PBkgznofoz7ojJKJ1sjtRKj2Gg8gknwLsVaTjKaqXsgLtt3TFRYGmoWHtpihadJ3ELBbb1S8w2LmUDiWbJXw4oyHdcVuW6TWofniQQh9XFZX3uu7omug68ttLGnbbtfmvqmdmYNAz4apixj2EW1shev7ciwAh5ZF5hCvFsrJBYFSbxb1BGRoRQWvxQ77z6Hq", + "2RsDz4W1HJ6FBsRyHnBfHFpLfJkeVLAVVc3SN1xCct4EEs88B7jHasKNoPVyer4sLhafNViWaSbsKaNUiqwnb1c7LHF49bKDTZtp5KgC1scYWCJoRLu9Qr8LuzVNmS97QsSV2raZKKMG7e6uyCGAFqn2VCSnBWtUhgHRtg8r1KSnZYd8BpWthL8QMqxSjABYp8oEjCnP69Fg2LugAApCj5YkdJDknYUw4Ph8iAnmzHBRggiazCcRKscYkM6ZySqGUJ8gjtBdnWt5TZQ9rVdoPiRa9z5tVNcwgYQiS3EhZMmc78gU1DqGVM4HruSkCZoeiReXaUwE232Uprm8P6dK8NM8nGL2NC6bMraxqpKNUvx39ENjSy9z8rcQuU9t4KUP2tfvHxWFwZ6nU2EWgpTDVkdwg1nbJyDLeGL37FgfiqzdGhS1QgmZsinpN1cowo8P7fyyngHuUzD5E6aiqS7uNVvUmLvQ4TDGA7sDa6UQqhd8eTxcm7EksetrQqXKGZMzJApp1HLvgxdGBNUMMajSbauk1bjVjyCpcjkJyLznFerZEqcmwEhEnCXUVdQaM9dtRhiMVVVgujt925rEDbjGcjkT1XCibxrcKBT2raL7W6ScSFTm9py8z3CtBrU4w9htwDoQ7n3pwheEAP7LKkMzBXdEi3J9sXAJy2pJBqM5bGLvRqXykdswpKCzogpGktfXRpiQ5d6TooH7MTEfTibvk9aEoGDhhuf5oakcvJnBGkebMfK9S7tbaWQF1NudjFrUJoD6ZGFFeJGQs51HTTCT4UWhQyYED6ZdCD351YJXG5bZnVr4Tc8oTDV1LtSVbRAjtMT9Fai5fh6P1Lb9P2NGnXayVWHdkHFGFT7drCDAjsqyA4ar5bWUwadLgpPzKpim9yuCdAdiey6FUitJfqtWt63MMEGBd76ahd7SHnXS9QVsuytrgu4FKRYbnfo3akTTWio1d4EorrebqgpcCuyvduR4bU4dJHsqYfZ8qmL4FtqiHLw7P8dKoeWkwvV2quu4nuxWtZ4TWLP2MqeYYyCFEtC6eY1b9cJXt7VMVCJGjsoy63vWmZ13S7pQytguUNmipW77TL7z5TZSsBEY5WsDNeGTFr522YynUp6fWv1sYzxSDDg2Xb5gEaDWx8McJYZjbyBUmwPoaiuEizs47A2fKP6dTbBck8QAGEeD5XeXWRS2equjpF242CDMY4UeGWvVbD9BzfitimAtK923nRtFr6LGP1GsTAL4TNKMMHxVpWLHfXbsWF8uq2ZJj8vPFBeymaaNdqnoPXzaRmt8T5vDuZYvFzqgKdLsr42e6sX7j2iNgNFt4obmR6fqYk3EABHVYHJ166ArX16XNRbF1MPDyTqESLiBQA5MGEd4jA89YzMM1CtzcnRpy9DrJsDR7xZqhq89aVCfB2WGF7sENKcrRBRXRvAGts2ciytTKTj2aToq8AifQMBFZiWieHtRwQUWz3ieLU99Ygrh7zya57wAYpJ2W1DhyjjXpvkgAKrJ3FRFqLMkz21iSSwFTjJk9d15FxGun13wyKcjcwaRytmwbx4QreQP88mqsNcSVZ2UYkfCaRa2HreDf19RmxzCQuXWpbhX5GhyDqMvrMn9rW9t3afKn7wpZ26UQWkDHM8L2edatcH6ojmb2tV", + "DfVFCdP3wxHvs1T6zV3UaL1RWXGbVUouKbBja63RCjur5imaiNUSPWh4DJUzkQ74FK9exj66xjtRYwtYtndzyJZWvbAPjML1znXQZ8S3hVTNBfHXmyZvCpK3oSdproRWHQBHYtPsxDqtFoqdwLPqo7B2fpjUxoPksRpimGzqWUkQpPb79NW6B8H9qr7ktmfpy864YgMDcXZAQPoTVZRPsozRaB7UJ3xbgVmFfGfkivF9Zm6FCWHe76M9rjFGoZjZbEZWSv1pyn2XhGMZhQYPYysMToaEKrVo1ikPrYsQKMPDqBa3Pg5U4ZXUK58YY6Q4n8H4NQM4fYo8JchQqqhu7Hhf5oSGnkZPJ8MhCPLbg5i1XRLZDFSsm6Jq3LCdrdLuyiGUafaWznLi54oghwQcTBdhjABWLZiZydxMxjq7uD3NULABrXrC8FCaKfTLEe64FyhjxuFch2EmrrmhmKGjvzYqvc67xrWpvYSZLDmVwkH2wC7hQmYxTwPzant3GwCx1uhREnHHJLvv2keK8bAwhb4H9GCygx1p4s72e91NXBHg1RmR7YQLChEDjMLgCydCNAayi81SGzspNkqGQy4CThqYGRP6vxXPHP3ZYyn8TGvyQDtGahgqNchSHTGbcxcTp83fJ7wEEDpoEQF7yAVDkosRFYz7b98uiSFzhQ4PVtmLhY3fGCBySCqUhjNjqYeufh2uE4P23ELxEbVQJAFQw6aFcpudZmHuyXreQmenqYfnSuU1ZixwNGs2TJrqGVVTbpKNtEqZCp6ZbdPTETJPHtja94qBBdh5qgTfWeZQVfXrZsnXqWbjPBBQC2j96ZX4cZLXSc1GEzQXb6ci7yFQvZoUY4JPETwCQetSNUajLcnZUay7V9pFbKv9sWJfgUBKh3nZ7fsKcYBgMmfnqcbtHjZ1fypQj9TS1cnDSGj5tkbuZUVdGh7PoCbTSC8LE1eCEA6KBSJzSZLVLUFT2JQVnbb28fYEMtRcwB48T84mP1MTDuP1BP1Bpsntm2EWcuRHA4mVTBpcm8AYksFpyBwpiSHosBwRhxoGiSsFp9YB7cNSjQQa3k5EHbAm4Far2qYiSymWXWDVejdCygubcLD6dctAMcqswj9js6XyWRcBxgCBUQCXTM1HohBLye8DYe1k51doqLVuEqnniWqNSHR1Bik6Fxkxi26zsmwB9uMdfovRJ8jYmtr6BSKY4Ameb83ozKTDsMHcoq2tVP6GkCm7Um8FtwRYQRGLTzJcT8BH1QyUCwnThFwtoD45x9YoteLdY4ahY12DK1dx2dpFhC5dyKbpXMaBEZ6xZKmBJE6Vr2WBK8Y3VYmvsdNuyktEvNdMmSmLck63uM1xCRdpSWpRy1RioKkk8myvCF45mhNgmZXcDo8BY4raFjfLCtUzsvQXyoeS3pWuvJnkuv9JSe48XKqXtWDxukrbzzjU9ZrNskEBzMUfao4LFYDSy6FVEo6kpNBWwa3yeN83gozACAK31HqRYV3XhpwjsUyNiE4cqpvdWACYkbQvFKJZ137B4b76vFC3h4aqdcF86cxsRbZ7jE3sifk15ZKfbQJ3CbseD1XiBoLMCdgefKoYLTZGDvimwh1pAP7s3M8ttRxM19UNLHGatTtEiSB654Qo3MkaosdceFUzC", + "DfVFCdP3wxHvs1T6zV3UaL1RWXGbVUouKbBja63RCjur5imaiNUSPWh4DJUzkQ74FK9exj66xjtRYwtYtndzyJZWvbAPjML1znXQZ8S3hVTNBfHXmyZvCpK3oSdproRWHQBHYtPsxDqtFoqdwLPqo7B2fpjUxoPksRpimGzqWUkQpPb79NW6B8H9qr7ktmfpy864YgMDcXZAQPoTVZRPsozRaB7UJ3xbgVmFfGfkivF9Zm6FCWHe76M9rjFGoZjZbEZWSv1pyn2XhGMZhQYPYysMToaEKrESE3griYC7sq7LWyGr6NTyzbgn2arrrCEjKoUe1HdXRERBe2YjxTMtFgFqXGeB8dyZddrQ75apZoGzXheCbHt4PXesqwzTPg1ybNoqiBDLr4AyoWqkt8BNFCzGxNL8Rb5dGozChvJG82batVEwbjbygaL9mmFHxBi4kNvY7abk8bh6gCwFVE4dKBq6mrvXaoqnR27DpwrcgSHKpBkB4KuWqKBMdKXCmDSFj5E7LRezwEWyUTu5exovMknqgj9hiMKzczK8RzDhLsEL9w4a1FKfn4UYcpk9dNNguftUQgQkyzmUPDaMX17acbgW99qNvMgGvc2xc2aTqyCNTKtzbaRiXyStQz8onT4SmgxjvdEXiTRCtnG953sCYHYGKrYRtvdXQw4yTRhoXznKPiFoYC5fse51S5PRZV5VjLbQZxX3BfMmwEXMt18TQyBd2WJLryKVdVtDR5pmxPrrpHjeRdAt1Ar7r7hDy4mQ5kAaFLzDVsTWCXkRZdAG45S8FvQfWV7Mh8JLEC41HdSBuZdaNXbBRagKj5W92EyDyajYLPQ5nzUmq2VJprLitQmzTrBvV6qBJcxZm42kDazY3TKfwZ2d1bHezxNPbiYZivy8qm58Z8aPKQQd1qEL3WbrfMQRTGFTDEC9RUaLKPnS3fdovKpbxkmfU1oou26MeWFrATRp5FNJiGNZ7Gb2TaLokPUhrv9sCMg7g5x7MGBhGpeXdAyb8hri6K5SbVaWj7fHgEDJnjhTDvF2Y9A75GE4tpcsM9XHaqnvDeBZakjUdW88F28LfTUHmyCjGmopsgChL1rjKFoYnqV5fDHKWqJtSLjeg6RzXV94CGzyq6BD7mojdVtmMQjnQEbFcnrs5am55w8nUE4F7jk6XsEsiZinN23ehG9zuAMJUiXtVMPWbXefRAUwHLpbnCur32C7suwCcFzzxFS3w1sMkJhvPYi6bfienqhX1tks6cfR4YkPWuu1HaHVbCrYybdA5fnR8hqM5URG4HSXXfLe8hnK4Lro6rJx1m1bXeYxdgzJdczejDKj3rmedSu4HC2BMZSGVatPScReH9sQVpZ3GS7ALpr5TMm6jisYLqFT6JWfZsJmydqrn5QZMZv5x9XAwkWEoEB8Sk8W7SuH1ZwvS4m8pDmegVFKWXTLqPxW11q9ydWZQ8zjqMxDTR42K2oVJUkRk3qgcsYiJSjyLBrbpheArpxB7z1JneQ7b97zu8j1KQS1aHTFvxU4ANRU3quRtySxy6iPNLapmwpBWwK6uniGkv3UmjWjvhzx3fiTC2rrMj6NdqP1fLAUkMTczWHkdCA4abRmPHiTYP3YuTvyy1QcQhAowwcdQsnD959dHXtJ4XsKAb4z8", + "4tQGGLNJFJ2pSiGpQZZRxamsS2moL5vEZ2Y35pnqyjXNVdoRQgTNwcwZN2wKpHt1DAndD6pkBeuZbCEKC4khRKxFd9KEJvpEesmZUvQ2RMXTTeXXioMMonSbGHouMX5Ng6GixyNfyHWXrDUJEmbNqgcGsMxUKaab4fCgQt95GU1dgJ9XFVchpbJ62m3R9ZEEWrUPCBM5MmC57xV7uKhdJkJdw74QU6pAMeFxgru3CSTWznFm62zMx3GKeMQsVMLVuJrDkUe5jDQ8Ru5uxJcBB868FiQToHL5G1dW9W7RfJrD6ZqAgLBm8V48XCSG9TfZhrjjmj4hukQ8etisz7FuDu1Tx3Tf2bEhfeqm9j1WUpzRt5DwYQc8Tu21gdT3zzwNgPkTugxgzJH6cPL393tgktCXNF5Ar64s5E6DodUXhc5NEapAc1uSCP5RaZ7spaEhXr5XsUqH9VUzMhSXSss2ziDiTU31Stz9DLGdhumXMzbR1y89zHEeKEWA9PFqNqf9svF41hiuTinRNeSDtpMqcf2EPDyEbB87kMQE4UHTzFn18DEHryVpkUGbbL1GT5c8E89rUqNGtEG1z1Aw8849veWDoX4xqDnomWT5FWWj2ozAMbbRZqYBDGxWZfPq8XZdXwz836Z6m1GysiCJVCTuMXUZnZ6Lqo49thrK8SPUX656rik8M6Vec6QRri517wf6EWR69iLe9ZUKK99XbwqkFb1y3kni6mqz4Z2q6a8QdepMNfCUXTPoFe2MMJRQZ3XdxSSKd3Ht71RfrGbDdR4Gu9xojZY46paGSBGDsDmvQFbnqQiN4yZjcNFwrVvpWPFVQL5hh6BBiHU2WGgEZ3doc8hU6kcJUMaNkLMAKusMCzhDWr4rC9m9qoagpBojNTqttqnvERLPggwKcpP9wtYrwRXgoSVKiQTFmbRtTofcCgFjCU8wgU3DMRWY289oH5VvKX3WkJ1k8UbDcnymv3V18zCRhmaLwygDSbzXR8ye92fjxrHPEQa56D7WVy8dRjVxAPfmWw75QVTusmRswcKNipLE4RSE5Kx1gfGcsN52NkwVYwV6aGN9T65MJccvEdUbG16Lz515QbCFtK5ay1TBkzi21XpR5jwiUBU4zc98VqS21YmAyVgbRf4JMCJXHzKWyhpYaa3BFGuVx5by59DVv3ZTjghKdHt2osCGSHPmoXRw2MA6RdvZuiPntJ7TsNcSpSmJqftZTCSXvkYGkDuoj8YRHbzKANs1cu2zkYHz6HANxiTgD71px8Xrtooh13RZBQ5PQ3ZdzpyT3etAGEHqcYsvAwm12zhtctL7NXuDpgJ7V1NYcuAXsRoRkBVMU5WUPCZ3ZmySyAXFyGf6XP2U1mKVoTxKRDay6JJr6kDa57zDYQJD3L1beKBUMXQnFhfyzBBMDwVVTvw7n2t73wz6k5jHggtU1eBKhRmhwTvur9otMJmtXN5yGDY7vcxxnP3MFeptq1zAGXYFFdQcU26ceThahq9TpixmZFALohtyjUCxBYpSJVdZNRW71Uueu7sqjKdBtAAC9e8NtdekJMYqsBdRRiui8ectZjJL6Dz4zuEmq19ruQsqxF4v1zgEQaTX35djjg44k91kBdQN1TzNHCvn3XireZyP9NKRW", + "2wF8sNAVsk5NkVqW2tt34Q6HgnHMX8b3v2TWAsHfkFGHF5ep16ZUU8vTnKdiunuoQEvHJCtXuok1LL77t5izFHkRzF8YVNPYEvT2efNJDKdj4YAxRH3F92XMh8VqFGyikYopcd5rvCcnciHW21fhnEGUdZcvSfjtyCWbywgZc95y7vm6GvTXTxNdaDKJNinkzNiTvbqnzyRFDSWaALpmTGAkaXtaTKVyQrgwieBV6W5xbW23FT1ibjirjLBoEWaKfK9NfQMDDzjYDu82PvRXBFdE8nyhYmsYXmX8dGVfg6kMcKgMqXR4C5QsmUqJ5bazAcWYPCv4LpsQtw1oMa31f25LgXMt88HWa5V1iQoZNXbh7drCERXhrpGsPGwAbgRqJZ5DfRvc4EtoqYiR4N66i5PkrpVHYJTV9VHtMv8zFJEavDaRaUk9wPXqprTXhjk4f8r3U2QtBTPrp9YUMWL1YxoeAtdQCMLSqRwRVVvJbXPcQEKzTUUDvqsUdDofPXwVHVq23Z93BU9WKDZ3YR98VnRdrFMKavE6uGbT99ay5XtYZAKhNVrZNdJnQyLHDsT1DnT4QDZ5mcAJSAVpNgwoPFmvJYrcntoVH1Pye7rJHCxZSRrwo9kTeM1RBS8frGMJmUiPcC1K9yGb6JeXQADEsNPPG8ZXTRry16JdUCjDW1JYMV4YrhuX3Kr69R2LHJ5AVgk2Cup2LjSEJ8FJ2MjHaAgGPPegn3UCWbZYM2VBWm1pBLaXEEYP8cc22JmGWVcbv2zP6ixGDefdGS2E9sEnQj76avTz8qcejTgaP8tTVsgBdi7sTSr5xE6peqK7tbT7PWL2Skwhr4BKQyfi38nVbyfH1gVtKLVoiK4bcpVdzdXRtkCoqqVeerXzonnFHSgzYFuH3fUrbJQrDwSCfyE42dZjeC3SD2aqdTkvLyKbhs1ws2diRcioJ6ZmwQ6T8qANEzoavbKbzsJqbCFQEdQVy67jsXiJhFQX83LzAcVkcmqdmCcGfNpBze1gshH72YpTf5as9DysZZYnUmSdYAxuHo69S69WNiKs5oQyUfvyLkMpUh16BCho4BP5dJF8Xou26Vwfzb8BXrMQf5RG65tzfy1tqsADWq4gCkFwhSp9vG7BxxvLFvWGZCa1GKjrHPagPEchuekA4s8kMEvZzkC119myDLjniThawLxGF9CLzW9kXfEPRVCoVpFYs3vqVcxLMAKyuHGCRumWgEjJJbtDAxSnMYAr5iRkDXoLfyvvip28167L16xfLD4d5VNrk6hsu3Ta8WUqt2y1WnMAXYkdLE5zswhGFQVyTow1CH2oqezoJLJLs3Vp4HAb6ng2WS6JBGDxL3EhRrAgzruezYBYCZBMoeMDn8Lt2M8kHxCaKax5mzves8AaE1ooi8m5uiLFVPmd6NJCTM2Tia7XLZTxu3YLEbztRqz1tTox8muB481c7SEn9S5L9ENHxPswy4KdS5k8BVMT86yxnnctx4ruEnLRYENmMDp2McBz22z3tJ4tVq37nn3hMuc5pajTnR99it5wBbwZWbHXzyU9uMeK8MjS9GmVz52KqAwi53WnbnkyboKeFunH99Dt4D8AhJoH3iFNXn9PTXLcGw7AMonWCB4qMfwQieMJgRAHf1PGUnzV", + ] + }) + }, +} diff --git a/projects/sigmausd/index.js b/projects/sigmausd/index.js index 6fe990661c..81e46d3f51 100644 --- a/projects/sigmausd/index.js +++ b/projects/sigmausd/index.js @@ -1,17 +1,10 @@ -const utils = require('../helper/utils'); - -async function tvl() { - const {data: { confirmed }} = await utils.fetchURL('https://api.ergoplatform.com/api/v1/addresses/MUbV38YgqHy7XbsoXWF5z7EZm524Ybdwe5p9WDrbhruZRtehkRPT92imXer2eTkjwPDfboa1pR3zb3deVKVq3H7Xt98qcTqLuSBSbHb7izzo5jphEpcnqyKJ2xhmpNPVvmtbdJNdvdopPrHHDBbAGGeW7XYTQwEeoRfosXzcDtiGgw97b2aqjTsNFmZk7khBEQywjYfmoDc9nUCJMZ3vbSspnYo3LarLe55mh2Np8MNJqUN9APA6XkhZCrTTDRZb1B4krgFY1sVMswg2ceqguZRvC9pqt3tUUxmSnB24N6dowfVJKhLXwHPbrkHViBv1AKAJTmEaQW2DN1fRmD9ypXxZk8GXmYtxTtrj3BiunQ4qzUCu1eGzxSREjpkFSi2ATLSSDqUwxtRz639sHM6Lav4axoJNPCHbY8pvuBKUxgnGRex8LEGM8DeEJwaJCaoy8dBw9Lz49nq5mSsXLeoC4xpTUmp47Bh7GAZtwkaNreCu74m9rcZ8Di4w1cmdsiK1NWuDh9pJ2Bv7u3EfcurHFVqCkT3P86JUbKnXeNxCypfrWsFuYNKYqmjsix82g9vWcGMmAcu5nagxD4iET86iE2tMMfZZ5vqZNvntQswJyQqv2Wc6MTh4jQx1q2qJZCQe4QdEK63meTGbZNNKMctHQbp3gRkZYNrBtxQyVtNLR8xEY8zGp85GeQKbb37vqLXxRpGiigAdMe3XZA4hhYPmAAU5hpSMYaRAjtvvMT3bNiHRACGrfjvSsEG9G2zY5in2YWz5X9zXQLGTYRsQ4uNFkYoQRCBdjNxGv6R58Xq74zCgt19TxYZ87gPWxkXpWwTaHogG1eps8WXt8QzwJ9rVx6Vu9a5GjtcGsQxHovWmYixgBU8X9fPNJ9UQhYyAWbjtRSuVBtDAmoV1gCBEPwnYVP5GCGhCocbwoYhZkZjFZy6ws4uxVLid3FxuvhWvQrVEDYp7WRvGXbNdCbcSXnbeTrPMey1WPaXX/balance/total'); - - return { - ergo: confirmed.nanoErgs / 1e9 - }; -} +const { nullAddress } = require('../helper/tokenMapping') +const { sumTokensExport } = require('../helper/chain/ergo') module.exports = { - timetravel: false, - ergo:{ - tvl - }, - methodology: `SigmaUSD TVL is calculated by calling the sigmaUSD bank (via the ergo blockchain explorer API), this returns the confirmed total within the contract in nanoERGs` -} \ No newline at end of file + timetravel: false, + ergo: { + tvl: sumTokensExport({ owner: 'MUbV38YgqHy7XbsoXWF5z7EZm524Ybdwe5p9WDrbhruZRtehkRPT92imXer2eTkjwPDfboa1pR3zb3deVKVq3H7Xt98qcTqLuSBSbHb7izzo5jphEpcnqyKJ2xhmpNPVvmtbdJNdvdopPrHHDBbAGGeW7XYTQwEeoRfosXzcDtiGgw97b2aqjTsNFmZk7khBEQywjYfmoDc9nUCJMZ3vbSspnYo3LarLe55mh2Np8MNJqUN9APA6XkhZCrTTDRZb1B4krgFY1sVMswg2ceqguZRvC9pqt3tUUxmSnB24N6dowfVJKhLXwHPbrkHViBv1AKAJTmEaQW2DN1fRmD9ypXxZk8GXmYtxTtrj3BiunQ4qzUCu1eGzxSREjpkFSi2ATLSSDqUwxtRz639sHM6Lav4axoJNPCHbY8pvuBKUxgnGRex8LEGM8DeEJwaJCaoy8dBw9Lz49nq5mSsXLeoC4xpTUmp47Bh7GAZtwkaNreCu74m9rcZ8Di4w1cmdsiK1NWuDh9pJ2Bv7u3EfcurHFVqCkT3P86JUbKnXeNxCypfrWsFuYNKYqmjsix82g9vWcGMmAcu5nagxD4iET86iE2tMMfZZ5vqZNvntQswJyQqv2Wc6MTh4jQx1q2qJZCQe4QdEK63meTGbZNNKMctHQbp3gRkZYNrBtxQyVtNLR8xEY8zGp85GeQKbb37vqLXxRpGiigAdMe3XZA4hhYPmAAU5hpSMYaRAjtvvMT3bNiHRACGrfjvSsEG9G2zY5in2YWz5X9zXQLGTYRsQ4uNFkYoQRCBdjNxGv6R58Xq74zCgt19TxYZ87gPWxkXpWwTaHogG1eps8WXt8QzwJ9rVx6Vu9a5GjtcGsQxHovWmYixgBU8X9fPNJ9UQhYyAWbjtRSuVBtDAmoV1gCBEPwnYVP5GCGhCocbwoYhZkZjFZy6ws4uxVLid3FxuvhWvQrVEDYp7WRvGXbNdCbcSXnbeTrPMey1WPaXX', tokens: [nullAddress] }) + }, + methodology: `Spectrum Finance TVL is achieved by making a call to its API: https://api.spectrum.fi/v1/amm/platform/stats.` +} 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 diff --git a/projects/silo/index.js b/projects/silo/index.js index cf538e56c6..d7089c1a70 100644 --- a/projects/silo/index.js +++ b/projects/silo/index.js @@ -16,6 +16,9 @@ const config = { }, } +const XAI = '0xd7c9f0e536dc865ae858b0c0453fe76d13c3beac' +const fallbackBlacklist = ["0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa",]; + async function tvl(_, block, _1, { api }) { const siloArray = await getSilos(api) const assets = await api.multiCall({ @@ -24,43 +27,37 @@ async function tvl(_, block, _1, { api }) { }) const toa = assets.map((v, i) => ([v, siloArray[i]])) - return sumTokens2({ api, ownerTokens: toa, }) + return sumTokens2({ api, ownerTokens: toa, blacklistedTokens: [XAI], }) } async function borrowed(_, block, _1, { api }) { - const balances = {} 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) => sdk.util.sumSingleBalance(balances, assets[j], i.totalBorrowAmount, api.chain)) + assetsStorage + .forEach((i, j) => { + if (assets[j].toLowerCase() === XAI) return; + return api.add(assets[j], i.totalBorrowAmount) + }) }) - - return balances } -let silos = {} - async function getSilos(api) { const chain = api.chain const { SILO_FACTORY, START_BLOCK, } = config[chain] - if (!silos[chain]) silos[chain] = _getSilos() - return silos[chain] - - async function _getSilos() { - const logs = ( - await getLogs({ - api, - target: SILO_FACTORY, - fromBlock: START_BLOCK, - topic: 'NewSiloCreated(address,address,uint128)', - }) - ) + const logs = ( + await getLogs({ + api, + target: SILO_FACTORY, + fromBlock: START_BLOCK, + topic: 'NewSiloCreated(address,address,uint128)', + }) + ) - return logs.map((log) => `0x${log.topics[1].substring(26)}`) - } + return logs.map((log) => `0x${log.topics[1].substring(26)}`).filter((address) => fallbackBlacklist.indexOf(address.toLowerCase()) === -1); } diff --git a/projects/single/abi.js b/projects/single/abi.js new file mode 100644 index 0000000000..af989a76c5 --- /dev/null +++ b/projects/single/abi.js @@ -0,0 +1,29 @@ +const camelotMasterAbi = { + "poolLength": 'function poolsLength() view returns (uint256)', + "getPoolAddressByIndex": "function getPoolAddressByIndex(uint256 index) view returns (address)", + "getPoolInfo": "function getPoolInfo(address) view returns (address poolAddress, uint256 allocPoint, uint256 lastRewardTime, uint256 reserve, uint256 poolEmissionRate)", +} + +const camelotNFTPoolAbi = { + "balanceOf": "function balanceOf(address owner) view returns (uint256 balance)", + "tokenOfOwnerByIndex": "function tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)", + "getPoolInfo": "function getPoolInfo() view returns (address lpToken, address grailToken, address xGrailToken, uint256 lastRewardTime, uint256 accRewardsPerShare, uint256 lpSupply, uint256 lpSupplyWithMultiplier, uint256 allocPoint)", + "getStakingPosition" : "function getStakingPosition(uint256 tokenId) view returns (uint256 amount, uint256 amountWithMultiplier, uint256 startLockTime, uint256 lockDuration, uint256 lockMultiplier, uint256 rewardDebt, uint256 boostPoints, uint256 totalMultiplier)" +} + +const camelotNitroPoolAbi = { + "nftPool": "function nftPool() view returns (address)", + "userInfo": "function userInfo(address) view returns (uint256 totalDepositAmount, uint256 rewardDebtToken1, uint256 rewardDebtToken2, uint256 pendingRewardsToken1, uint256 pendingRewardsToken2)" +} + +const wCamelotSpNFTAbi = { + "stakedNitroPool": "function stakedNitroPool(uint256) view returns (address stakedNitroPool)", +} + + +module.exports = { + camelotMasterAbi, + camelotNFTPoolAbi, + camelotNitroPoolAbi, + wCamelotSpNFTAbi, +} \ No newline at end of file diff --git a/projects/single/helpers.js b/projects/single/helpers.js index fca342f9e5..964e69e226 100644 --- a/projects/single/helpers.js +++ b/projects/single/helpers.js @@ -1,8 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); +const bn = require('bignumber.js'); const abi = require('../helper/abis/masterchef.json'); const { unwrapLPsAuto } = require('../helper/unwrapLPs'); const userInfoAbi = 'function userInfo(uint256, address) view returns (uint256 amount, uint256 rewardDebt)' const { getChainTransform } = require('../helper/portedTokens'); +const { camelotMasterAbi, camelotNFTPoolAbi, camelotNitroPoolAbi, wCamelotSpNFTAbi } = require("./abi") /** this is adapted from `projects/helpers/masterchef/getUserMasterChefBalances` * to deal with VVS's CraftsmanV2 Contract, which does not have @@ -36,6 +39,76 @@ async function getUserCraftsmanV2Balances({ balances = {}, masterChefAddress, us return balances; } +async function getUserCamelotMasterBalances({ balances = {}, masterChefAddress, userAddres: wCamelotSpNFT, block, chain = 'ethereum', transformAddress, excludePool2 = false, onlyPool2 = false, pool2Tokens = [] }) { + if (!transformAddress) + transformAddress = await getChainTransform(chain); + + const tempBalances = {}; + const poolLength = (await sdk.api.abi.call({ abi: camelotMasterAbi.poolLength, target: masterChefAddress, block, chain, })).output; + + const dummyArray = Array.from(Array(Number(poolLength)).keys()); + const poolAddressCalls = dummyArray.map(i => ({ target: masterChefAddress, params: i, })); + const poolAddresses = (await sdk.api.abi.multiCall({ block, calls: poolAddressCalls, abi: camelotMasterAbi.getPoolAddressByIndex, chain, })).output + .map(a => a.output) + + const poolInfoCalls = dummyArray.map(i => ({ target: poolAddresses[i] })); + const lpTokens = (await sdk.api.abi.multiCall({ block, calls: poolInfoCalls, abi: camelotNFTPoolAbi.getPoolInfo, chain, })).output + .map(a => a.output.lpToken) + + const userSpNFTBalanceCalls = dummyArray.map(i => ({ target: poolAddresses[i], params: wCamelotSpNFT, })); + const userSpNFTBalance = (await sdk.api.abi.multiCall({ block, calls: userSpNFTBalanceCalls, abi: camelotNFTPoolAbi.balanceOf, chain, })).output + .map(a => a.output) + + const userLpBalance = await Promise.all(userSpNFTBalance.map(async (spNFTBalance, idx) => { + if (isNaN(+spNFTBalance) || +spNFTBalance <= 0) return; + const dummySpNFTArray = Array.from(Array(Number(spNFTBalance)).keys()); + const spNFTIdCalls = dummySpNFTArray.map(i => ({ target: poolAddresses[idx], params: [wCamelotSpNFT, i] })); + const userSpNFTId = (await sdk.api.abi.multiCall({ block, calls: spNFTIdCalls, abi: camelotNFTPoolAbi.tokenOfOwnerByIndex, chain, })).output + .map(a => a.output) + const stakingPositionsCalls = dummySpNFTArray.map(i => ({ target: poolAddresses[idx], params: userSpNFTId[i] })); + const userLpBalance = (await sdk.api.abi.multiCall({ block, calls: stakingPositionsCalls, abi: camelotNFTPoolAbi.getStakingPosition, chain, })).output + .map(a => a.output.amount) + return { + lpToken: lpTokens[idx], + balance: userLpBalance.reduce((partialSum, a) => partialSum.plus(a), bn(0)).toFixed() + }; + })) + userLpBalance.forEach((data, idx) => { + if (!data) return; + tempBalances[transformAddress(data.lpToken)] = data.balance + }) + + const nitroPoolAddressesCalls = dummyArray.map(i => ({ target: wCamelotSpNFT, params: i })); + const nitroPoolAddresses = (await sdk.api.abi.multiCall({ block, calls: nitroPoolAddressesCalls, abi: wCamelotSpNFTAbi.stakedNitroPool, chain, })).output + .map(a => a.output) + const nitroPoolUserLpBalanceCalls = nitroPoolAddresses + .filter((v) => v !== ADDRESSES.null) + .map((v, i) => ({ target: v, params: wCamelotSpNFT })); + const nitroPoolUserLpBalance = (await sdk.api.abi.multiCall({ block, calls: nitroPoolUserLpBalanceCalls, abi: camelotNitroPoolAbi.userInfo, chain, })).output + .map((v, i) => { + if (!v.output?.totalDepositAmount || v.output.totalDepositAmount === "0") return + const lpTokenIdx = nitroPoolAddresses.findIndex(addr => addr === nitroPoolUserLpBalanceCalls[i].target) + if (lpTokenIdx === -1) return; + return { + lpToken: lpTokens[lpTokenIdx], + balance: v.output.totalDepositAmount + } + }) + nitroPoolUserLpBalance.forEach((data, idx) => { + if (!data) return; + if (tempBalances[transformAddress(data.lpToken)]) { + tempBalances[transformAddress(data.lpToken)] = bn(tempBalances[transformAddress(data.lpToken)]).plus(data.balance).toFixed() + } else { + tempBalances[transformAddress(data.lpToken)] = data.balance + } + }) + + await unwrapLPsAuto({ balances: tempBalances, chain, block, transformAddress, excludePool2, onlyPool2, pool2Tokens }); + Object.keys(tempBalances).forEach(key => sdk.util.sumSingleBalance(balances, key, tempBalances[key])); + return balances; +} + module.exports = { - getUserCraftsmanV2Balances + getUserCraftsmanV2Balances, + getUserCamelotMasterBalances, } \ No newline at end of file diff --git a/projects/single/index.js b/projects/single/index.js index ab4004ba0f..dd73cbed6d 100644 --- a/projects/single/index.js +++ b/projects/single/index.js @@ -1,7 +1,7 @@ const { sumTokens2 } = require("../helper/unwrapLPs") const { getFixBalances } = require("../helper/portedTokens") const { getUserMasterChefBalances } = require("../helper/masterchef") -const { getUserCraftsmanV2Balances } = require("./helpers") +const { getUserCraftsmanV2Balances, getUserCamelotMasterBalances } = require("./helpers") const vvsPoolInfoABI = 'function poolInfo(uint256) view returns (address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accVVSPerShare)' const spookyMasterChefV2PoolInfoABI = 'function lpToken(uint256) view returns (address)' const { getConfig } = require('../helper/cache') @@ -33,6 +33,9 @@ const getWMasterChefBalances = ({ masterChef: masterChefAddress, wMasterChef, na if (name === "spookyMultiYield" || name === "sushi") { return getUserMasterChefBalances({ ...commonParams, poolInfoABI: spookyMasterChefV2PoolInfoABI, getLPAddress: a => a, ...args }) } + if (name === "camelot") { + return getUserCamelotMasterBalances({ ...commonParams, ...args }) + } return getUserMasterChefBalances({ ...commonParams, poolInfoABI: vvsPoolInfoABI, ...args }) } const data = { diff --git a/projects/singularityDAO/index.js b/projects/singularityDAO/index.js index 3c405f2a36..226ba618b2 100644 --- a/projects/singularityDAO/index.js +++ b/projects/singularityDAO/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json"); const http = require("../helper/http"); const sdk = require("@defillama/sdk"); @@ -121,12 +122,12 @@ async function staking(ts, block) { async function tvlBNB(ts, EthBlock, { bsc: block }) { const tokensAndOwners = [ - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", DYNASETSBNB], // BNB - ["0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", DYNASETSBNB], // BUSD + [ADDRESSES.bsc.WBNB, DYNASETSBNB], // BNB + [ADDRESSES.bsc.BUSD, DYNASETSBNB], // BUSD ["0x7083609fCE4d1d8Dc0C979AAb8c869Ea2C873402", DYNASETSBNB], // BDOT - ["0x2170Ed0880ac9A755fd29B2688956BD959F933F8", DYNASETSBNB], // BETH + [ADDRESSES.bsc.ETH, DYNASETSBNB], // BETH ["0x1D2F0da169ceB9fC7B3144628dB156f3F6c60dBE", DYNASETSBNB], // BXRP - ["0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c", DYNASETSBNB], // WBTC + [ADDRESSES.bsc.BTCB, DYNASETSBNB], // WBTC ["0x1CE0c2827e2eF14D5C4f29a091d735A204794041", DYNASETSBNB], // BAVAX ["0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47", DYNASETSBNB], // BADA ["0xCC42724C6683B7E57334c4E856f4c9965ED682bD", DYNASETSBNB], // BMATIC diff --git a/projects/sio2/abi.json b/projects/sio2/abi.json deleted file mode 100644 index c35aa8a2bc..0000000000 --- a/projects/sio2/abi.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "getReservesList": "address[]:getReservesList", - "getCurrentTokens": "address[]:getCurrentTokens", - "getReserveData": "function getReserveData(address _reserve) view returns (uint256 totalLiquidity, uint256 availableLiquidity, uint256 totalBorrowsStable, uint256 totalBorrowsVariable, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 utilizationRate, uint256 liquidityIndex, uint256 variableBorrowIndex, address sTokenAddress, uint40 lastUpdateTimestamp)", - "getReserveConfigurationData": "function getReserveConfigurationData(address _reserve) view returns (uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus, address interestRateStrategyAddress, bool usageAsCollateralEnabled, bool borrowingEnabled, bool stableBorrowRateEnabled, bool isActive)", - "getReserves": "address[]:getReserves", - "getAddressesProvidersList": "address[]:getAddressesProvidersList", - "getAddress": "function getAddress(bytes32 id) view returns (address)", - "getAllSTokens": "function getAllSTokens() view returns (tuple(string symbol, address tokenAddress)[])", - "getUnderlying": "address:UNDERLYING_ASSET_ADDRESS", - "getReserveDataV2": "function getReserveData(address asset) view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", - "getHelperReserveData": "function getReserveData(address asset) view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", - "getReserveTotalBorrows": "function getReserveTotalBorrows(address _reserve) view returns (uint256)" -} \ No newline at end of file diff --git a/projects/sio2/constants.js b/projects/sio2/constants.js deleted file mode 100644 index 9e38813747..0000000000 --- a/projects/sio2/constants.js +++ /dev/null @@ -1,38 +0,0 @@ -const DEFAULT_DECIMALS = 18 - -const DOT_TOKEN = "polkadot" -const DOT_DECIMALS = 10 - -const TOKENS = { - // WASTR - "0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720": "astar", - // DOT - "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF": DOT_TOKEN, - // BAI - "0x733ebcC6DF85f8266349DEFD0980f8Ced9B45f35": "bai-stablecoin", - // USDC - "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - // USDT - "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283": - "0xdac17f958d2ee523a2206206994597c13d831ec7", - // BUSD - "0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E": "binance-usd", - // DAI - "0x6De33698e9e9b787e09d3Bd7771ef63557E148bb": - "0x6b175474e89094c44da98b954eedeac495271d0f", - // WETH - "0x81ECac0D6Be0550A00FF064a4f9dd2400585FE9c": - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - // wBTC - "0xad543f18cFf85c77E140E3E5E3c3392f6Ba9d5CA": - "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - // BNB - "0x7f27352D5F83Db87a5A3E00f4B07Cc2138D8ee52": "binancecoin", -}; - -module.exports = { - DEFAULT_DECIMALS, - DOT_DECIMALS, - DOT_TOKEN, - TOKENS, -} diff --git a/projects/sio2/index.js b/projects/sio2/index.js index d101ddd84c..cc7942e896 100644 --- a/projects/sio2/index.js +++ b/projects/sio2/index.js @@ -1,55 +1,11 @@ -const { getReserves, getSio2Tvl } = require("./sio2"); -const BigNumber = require("bignumber.js"); -const { getBorrowed } = require("../helper/aave"); -const { TOKENS, DOT_TOKEN, DOT_DECIMALS, DEFAULT_DECIMALS } = require("./constants"); - -const transferFromAddress = (underlying) => TOKENS[underlying] - -function astar(borrowed) { - return async (timestamp, _, {star: block}) => { - const balances = {}; - const [sTokens, reserveTokens, validProtocolDataHelpers] = - await getReserves(block); - - const chain = "astar"; - - if (borrowed) { - await getBorrowed( - balances, - block, - chain, - reserveTokens, - validProtocolDataHelpers, - transferFromAddress - ); - } else { - await getSio2Tvl( - balances, - block, - chain, - sTokens, - reserveTokens, - transferFromAddress - ); - } - - return Object.keys(balances).reduce((res, key) => { - if (key.startsWith("0x")) - return { ...res, [key]: balances[key] }; - if (key === DOT_TOKEN) - return { ...res, [key]: new BigNumber(balances[key]).shiftedBy(-DOT_DECIMALS).toNumber() }; - return { ...res, [key]: new BigNumber(balances[key]).shiftedBy(-DEFAULT_DECIMALS).toNumber() }; - }, {}); - }; -} - - +const { aaveExports } = require("../helper/aave"); module.exports = { timetravel: true, methodology: `Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending.`, - astar: { - tvl: astar(false), - borrowed: astar(true) - } -} + astar: aaveExports("astar", '0x9D8bB85b1c728f69672923dD4A0209EC8b75EFda', undefined, undefined, { + abis: { + getAllATokens: "function getAllSTokens() view returns (tuple(string symbol, address tokenAddress)[])" + } + }) +} \ No newline at end of file diff --git a/projects/sio2/sio2.js b/projects/sio2/sio2.js deleted file mode 100644 index e0edb4b8ee..0000000000 --- a/projects/sio2/sio2.js +++ /dev/null @@ -1,100 +0,0 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const { default: BigNumber } = require("bignumber.js"); -const addressesProviderRegistry = "0x9D8bB85b1c728f69672923dD4A0209EC8b75EFda"; // from https://sio2-finance.gitbook.io/en/development/contract-addresses - -async function getReserves(block) { - const chain = "astar"; - const addressesProviders = ( - await sdk.api.abi.call({ - target: addressesProviderRegistry, - abi: abi["getAddressesProvidersList"], - block, - chain, - }) - ).output; - - const protocolDataHelpers = ( - await sdk.api.abi.multiCall({ - calls: addressesProviders.map((provider) => ({ - target: provider, - params: - "0x0100000000000000000000000000000000000000000000000000000000000000", - })), - abi: abi["getAddress"], - block, - chain, - }) - ).output; - - const validProtocolDataHelpers = protocolDataHelpers - .filter( - (helper) => helper.output !== "0x0000000000000000000000000000000000000000" - ) - .map((p) => p.output); - - const sTokenMarketData = ( - await sdk.api.abi.multiCall({ - calls: validProtocolDataHelpers.map((dataHelper) => ({ - target: dataHelper, - })), - abi: abi["getAllSTokens"], - block, - chain, - }) - ).output; - - let sTokenAddresses = []; - sTokenMarketData.map((sTokensData) => { - sTokenAddresses = [ - ...sTokenAddresses, - ...sTokensData.output.map((sToken) => sToken[1]), - ]; - }); - const underlyingAddressesData = ( - await sdk.api.abi.multiCall({ - calls: sTokenAddresses.map((sToken) => ({ - target: sToken, - })), - abi: abi["getUnderlying"], - block, - chain, - }) - ).output; - - const reserveAddresses = underlyingAddressesData.map( - (reserveData) => reserveData.output - ); - return [sTokenAddresses, reserveAddresses, validProtocolDataHelpers[0]]; -} - -async function getSio2Tvl( - balances, - block, - chain, - sTokens, - reserveTokens, - transformAddress -) { - const balanceOfUnderlying = await sdk.api.abi.multiCall({ - calls: sTokens.map((sToken, index) => ({ - target: reserveTokens[index], - params: sToken, - })), - abi: "erc20:balanceOf", - block, - chain, - }); - - sdk.util.sumMultiBalanceOf( - balances, - balanceOfUnderlying, - true, - transformAddress - ); -} - -module.exports = { - getReserves, - getSio2Tvl, -}; diff --git a/projects/sio2/utils.js b/projects/sio2/utils.js deleted file mode 100644 index 696def55e5..0000000000 --- a/projects/sio2/utils.js +++ /dev/null @@ -1,11 +0,0 @@ -const BigNumberJs = require("bignumber.js"); -BigNumberJs.config({ EXPONENTIAL_AT: 1e9 }) - -const toBigNumberJsOrZero = (value) => { - const bn = new BigNumberJs(value) - return bn.isNaN() ? new BigNumberJs('0') : bn -} - -module.exports = { - toBigNumberJsOrZero -} diff --git a/projects/sirius-finance/constants.js b/projects/sirius-finance/constants.js index eb050cb000..63486dab00 100644 --- a/projects/sirius-finance/constants.js +++ b/projects/sirius-finance/constants.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /*** Astar Addresses ***/ const usdPoolAddress = "0x417E9d065ee22DFB7CC6C63C403600E27627F333"; @@ -15,26 +16,26 @@ const AvaultPoolAddress = "0xD8Bc543273B0E19eed34a295614963720c89f9e4" const SRS = "0x9448610696659de8F72e1831d392214aE1ca4838" const VotingEscrow = "0xc9D383f1e6E5270D77ad8e198729e237b60b6397" -const DAI = '0x6De33698e9e9b787e09d3Bd7771ef63557E148bb' -const USDC = '0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98' -const USDT = '0x3795C36e7D12A8c252A20C5a7B455f7c57b60283' -const BUSD = '0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E' -const oUSD = '0x29F6e49c6E3397C3A84F715885F9F233A441165C'; -const BAI = '0x733ebcC6DF85f8266349DEFD0980f8Ced9B45f35'; -const LDAI = '0x4dd9c468A44F3FEF662c35c1E9a6108B70415C2c' -const LUSDC = '0xc404e12d3466accb625c67dbab2e1a8a457def3c' -const LUSDT = '0x430D50963d9635bBef5a2fF27BD0bDDc26ed691F' -const LBUSD = '0xb7aB962c42A8Bb443e0362f58a5A43814c573FFb' -const JPYC = '0x431d5dff03120afa4bdf332c61a6e1766ef37bdb' -const WBTC = '0xad543f18cff85c77e140e3e5e3c3392f6ba9d5ca' -const WETH = '0x81ecac0d6be0550a00ff064a4f9dd2400585fe9c' -const WBNB = '0x7f27352d5f83db87a5a3e00f4b07cc2138d8ee52' -const nASTR = '0xE511ED88575C57767BAfb72BfD10775413E3F2b0' +const DAI = ADDRESSES.astar.DAI +const USDC = ADDRESSES.moonbeam.USDC +const USDT = ADDRESSES.astar.USDT +const BUSD = ADDRESSES.oasis.ceUSDT +const oUSD = ADDRESSES.astar.oUSD; +const BAI = ADDRESSES.astar.BAI; +const LDAI = ADDRESSES.astar.lDAI +const LUSDC = ADDRESSES.astar.lUSDC +const LUSDT = ADDRESSES.astar.lUSDT +const LBUSD = ADDRESSES.astar.lBUSD +const JPYC = ADDRESSES.astar.JPYC +const WBTC = ADDRESSES.astar.WBTC +const WETH = ADDRESSES.moonbeam.USDT +const WBNB = ADDRESSES.milkomeda.BNB +const nASTR = ADDRESSES.astar.nASTR const wASTR = '0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720' -const aBaiUsdc = '0xDBd71969aC2583A9A20Af3FB81FE9C20547f30F3' -const aDaiUsdc = '0x9914Bff0437f914549c673B34808aF6020e2B453' -const aBusdUsdc = '0x347e53263F8fb843EC605A1577eC7C8c0cAC7a58' -const aUsdtUsdc = '0x02Dac4898B2c2cA9D50fF8D6a7726166CF7bCFD0' +const aBaiUsdc = ADDRESSES.astar.aBaiUsdc +const aDaiUsdc = ADDRESSES.astar.aDaiUsdc +const aBusdUsdc = ADDRESSES.astar.aBusdUsdc +const aUsdtUsdc = ADDRESSES.astar.aUsdtUsdc module.exports = { diff --git a/projects/skeleton/index.js b/projects/skeleton/index.js index f4921b054a..5ed7340038 100644 --- a/projects/skeleton/index.js +++ b/projects/skeleton/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { getParamCalls } = require('../helper/utils') const masterChefContract = "0x4fff737de45da4886f711b2d683fb6A6cf62C60C"; -const USDC = "0x04068da6c83afcfa0e13ba15a6696662335d5b75"; +const USDC = ADDRESSES.fantom.USDC; const chain = 'fantom' const ftmTvl = async (_, _b, { fantom: block }) => { diff --git a/projects/skydex/index.js b/projects/skydex/index.js new file mode 100644 index 0000000000..52156dd304 --- /dev/null +++ b/projects/skydex/index.js @@ -0,0 +1,22 @@ +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const pools = [ + "0xe59eA42466f3dD0ea620A622701085983A068863", + "0x33b4424A65cfE19CDf0Dff4E54e399782327a1b6", +]; + +const blacklistedTokens = [] + +async function tvl(timestamp, ethereumBlock, chainBlocks, { api }) { + const tokensArray = await api.multiCall({ abi: "address[]:getTokens", calls: pools}) + const tokens = tokensArray.flat() + const calls = tokensArray.map((t, i)=> t.map((token) => ({ target: pools[i], params: token }))).flat() + const owners = await api.multiCall({ abi:"function assetOf(address) view returns (address)", calls}) + return sumTokens2({ api, tokensAndOwners2: [tokens, owners], blacklistedTokens }); +} + +module.exports = { + era: { + tvl, + }, +}; diff --git a/projects/slsd/index.js b/projects/slsd/index.js new file mode 100644 index 0000000000..51fd1bcbf3 --- /dev/null +++ b/projects/slsd/index.js @@ -0,0 +1,32 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { staking } = require("../helper/staking"); +const { sumTokens2, nullAddress } = require("../helper/unwrapLPs"); +const FACTORY_CONTRACT = "0x253924C4D0806Fd6A81f72e0bEa400CD97c64700"; + +const SLSD_LP = '0x712Ed536645e66d0d8605d3cB22d1ed3b2Dc255B'; +const SLSD = '0xB668f51f1D63452b566456053fA348c3037E2B1F'; +const eSLSD = '0x2dd8f7378fce12c9dfe36a6c155fc2446d18b3f9'; +const abis = { + "getStakingTokens": "function getStakingTokens() view returns (address[])", + "getStakingPoolAddress": "function getStakingPoolAddress(address) view returns (address)", +} + +async function tvl(_, _1, _2, { api }) { + const tokens = await api.call({ abi: abis.getStakingTokens, target: FACTORY_CONTRACT, }) + const owners = await api.multiCall({ abi: abis.getStakingPoolAddress, target: FACTORY_CONTRACT, calls: tokens }) + tokens.forEach((v, i) => { + if (v === nullAddress) { + tokens.push(ADDRESSES.ethereum.WETH) + owners.push(owners[i]) + } + }) + return sumTokens2({ api, tokensAndOwners2: [tokens, owners], blacklistedTokens: [SLSD_LP, SLSD, eSLSD,] }) +} + +module.exports = { + start: 17142918, + ethereum: { + tvl, + pool2: staking('0xBE13DC5235a64d090E9c62952654DBF3c65199d9', SLSD_LP) + } +}; diff --git a/projects/smartcredit.js b/projects/smartcredit.js index d4c30455f5..1ce29666de 100644 --- a/projects/smartcredit.js +++ b/projects/smartcredit.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { GraphQLClient, } = require('graphql-request') const sdk = require('@defillama/sdk') const { default: BigNumber } = require('bignumber.js') @@ -14,7 +15,7 @@ async function getStats() { function replaceEth(addr) { if (addr.toLowerCase() === '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee') - return '0x0000000000000000000000000000000000000000' + return ADDRESSES.null return addr } diff --git a/projects/smbswap-v3/index.js b/projects/smbswap-v3/index.js new file mode 100644 index 0000000000..05f2539157 --- /dev/null +++ b/projects/smbswap-v3/index.js @@ -0,0 +1,5 @@ +const { uniV3Export } = require('../helper/uniswapV3') + +module.exports = uniV3Export({ + bsc: { factory: '0xa9b5d4eac94cb98117abdcc0ecbd7731960f91d9', fromBlock: 27043748, isAlgebra: false,}, +}) \ No newline at end of file diff --git a/projects/smurfmoney/index.js b/projects/smurfmoney/index.js index 86d24bd8f5..ff519ee693 100644 --- a/projects/smurfmoney/index.js +++ b/projects/smurfmoney/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { addFundsInMasterChef } = require("../helper/masterchef"); const clever = "0x465bc6d1ab26efa74ee75b1e565e896615b39e79"; @@ -9,8 +10,8 @@ async function tvl (timestamp, block, chainBlocks) { let balances = {}; await addFundsInMasterChef(balances, clevermasterchef, chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`, undefined, [mushy, clever], true, true, clever); await addFundsInMasterChef(balances, mushymasterchef, chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`, undefined, [mushy, clever], true, true, mushy); - balances["0x6b175474e89094c44da98b954eedeac495271d0f"] = balances["fantom:0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"]; - delete balances["fantom:0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"]; + balances[ADDRESSES.ethereum.DAI] = balances["fantom:" + ADDRESSES.fantom.DAI]; + delete balances["fantom:" + ADDRESSES.fantom.DAI]; return balances; } diff --git a/projects/snarklaunch/index.js b/projects/snarklaunch/index.js new file mode 100644 index 0000000000..bdac5aaf12 --- /dev/null +++ b/projects/snarklaunch/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +const STAKING_SNRK_CONTRACT = "0xEbA49A81501b036234578D10e78685ca8BbD2901"; +const SNRK_TOKEN = "0x533b5F887383196C6bc642f83338a69596465307"; + +module.exports = { + methodology: 'TVL for SNRK staking is computed by summing the balance of SNRK tokens held by the staking contract.', + era: { + staking: sumTokensExport({ owners: [STAKING_SNRK_CONTRACT], tokens: [SNRK_TOKEN] }), + tvl: () => 0, + }, +} diff --git a/projects/snowball/index.js b/projects/snowball/index.js index a37e79db5a..618c5a5980 100644 --- a/projects/snowball/index.js +++ b/projects/snowball/index.js @@ -1,4 +1,3 @@ -const sdk = require('@defillama/sdk'); const { request, gql } = require("graphql-request"); const { sumTokens2 } = require("../helper/unwrapLPs"); const { staking } = require('../helper/staking.js'); @@ -27,18 +26,19 @@ query { const XSNOB_CONTRACT = '0x83952E7ab4aca74ca96217D6F8f7591BEaD6D64E'; const SNOB_TOKEN_CONTRACT = '0xc38f41a296a4493ff429f1238e030924a1542e50'; -async function getStableVaultBalances(balances, stablevaults, block, api) { +async function getStableVaultBalances(stablevaults, api) { const calls = stablevaults.map(i => [0, 1, 2, 3].map(num => ({ params: num, target: i.swapAddress }))).flat() - const tokens = await api.multiCall({ abi: abi.getToken, calls: calls, withMetadata: true, }) + const tokens = await api.multiCall({ abi: abi.getToken, calls: calls, withMetadata: true, + permitFailure: true, }) const toa = [] tokens.forEach(i => { if (!i.output) return; toa.push([i.output, i.input.target]) }) - return sumTokens2({ balances, api, tokensAndOwners: toa }) + return sumTokens2({ api, tokensAndOwners: toa }) } -async function getSnowglobeBalances(balances, snowglobes, block, api) { +async function getSnowglobeBalances(snowglobes, api) { const singleSidedPairs = snowglobes.map(globe => globe.snowglobeAddress).filter(i => i) const [tokens, tokenBalances] = await Promise.all([ api.multiCall({ @@ -50,25 +50,18 @@ async function getSnowglobeBalances(balances, snowglobes, block, api) { abi: abi.balance }) ]) - tokens.map((token, idx) => { - sdk.util.sumSingleBalance(balances, `avax:${token}`, tokenBalances[idx]); - }) - return balances + api.addTokens(tokens, tokenBalances) } async function tvl(_timestamp, _ethereumBlock, chainBlocks, { api }) { - const balances = {} - const block = chainBlocks['avax']; - let data = await request(API_URL, query); const deprecatedSnowglobes = data.DeprecatedContracts.filter(contract => contract.kind === "Snowglobe").map(contract => ({ pair: contract.pair, snowglobeAddress: contract.contractAddresses[0] })); const deprecatedStablevaults = data.DeprecatedContracts.filter(contract => contract.kind === "Stablevault").map(contract => ({ swapAddress: contract.contractAddresses[2] })); await Promise.all([ - getStableVaultBalances(balances, data.StablevaultContracts.concat(deprecatedStablevaults), block, api), - getSnowglobeBalances(balances, data.SnowglobeContracts.concat(deprecatedSnowglobes), block, api), + getStableVaultBalances(data.StablevaultContracts.concat(deprecatedStablevaults), api), + getSnowglobeBalances(data.SnowglobeContracts.concat(deprecatedSnowglobes), api), ]) - return balances; } module.exports = { diff --git a/projects/snowdogdao/index.js b/projects/snowdogdao/index.js index d8974dc243..bd4938f6da 100644 --- a/projects/snowdogdao/index.js +++ b/projects/snowdogdao/index.js @@ -1,16 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') +module.exports.hallmarks=[ + [1637798400,"Rug Pull"] +], module.exports=ohmTvl("0xC0E7DA06e56727F3B55B24F58e9503FdaAfb2a68", [ //mim ["0x130966628846bfd36ff31a822705796e8cb8c18d", false], //wavax - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false], + [ADDRESSES.avax.WAVAX, false], //spell ["0xce1bffbd5374dac86a2893119683f4911a2f7814", false], //joe - ["0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", false], + [ADDRESSES.avax.JOE, false], //weth - ["0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab", false], + [ADDRESSES.avax.WETH_e, false], //LP_sdog_mim ["0xa3f1f5076499ec37d5bb095551f85ab5a344bb58", true] ], "avax", "0xc970dab38627bc7Ba1487754d832A327E0e626Cd", "0xde9e52f1838951e4d2bb6c59723b003c353979b6") \ No newline at end of file diff --git a/projects/snowflake/constants.js b/projects/snowflake/constants.js index 6a61bb7ce9..10b6fc4dd1 100644 --- a/projects/snowflake/constants.js +++ b/projects/snowflake/constants.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') /** * lp token addresses */ @@ -7,9 +8,9 @@ const MAIN_USDT_LP = "0x3dc2a544A3A9C4D86d58D52bCaD1ECA8c1EC2361"; const MAIN_DAI_LP = "0x59a49E5bd704fC70E2cD9fe3d4D5D03991278015"; const MAIN_MAI_LP = "0xD0dCF24aA7784e34F022AdF43447578e54e2a695"; -const USDC = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; -const USDT = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"; -const DAI = "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063"; +const USDC = ADDRESSES.polygon.USDC; +const USDT = ADDRESSES.polygon.USDT; +const DAI = ADDRESSES.polygon.DAI; const MAI = "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1"; module.exports = { diff --git a/projects/snowswap.js b/projects/snowswap.js index 7c8fdfdfe0..f70ae28211 100644 --- a/projects/snowswap.js +++ b/projects/snowswap.js @@ -1,19 +1,20 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { staking } = require('./helper/staking'); const { sumTokens2, } = require('./helper/unwrapLPs'); -const wBTC = '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599' +const wBTC = ADDRESSES.ethereum.WBTC const y2DAI = { addr: "0xacd43e627e64355f1861cec6d3a6688b31a6f952", dec: 18, getPrice: false, type: 'yv', pfsDec: 18 } ///y2DAI yv const y2USDC = { addr: "0x597ad1e0c13bfe8025993d9e79c69e1c0233522e", dec: 6, getPrice: false, type: 'yv', pfsDec: 18 } ///y2USDC yv const y2USDT = { addr: "0x2f08119c6f07c006695e079aafc638b8789faf18", dec: 6, getPrice: false, type: 'yv', pfsDec: 18 } ///y2USDT yv const Y2TUSD = { addr: "0x37d19d1c4e1fa9dc47bd1ea12f742a0887eda74a", dec: 18, getPrice: false, type: 'yv', pfsDec: 18 } ///Y2TUSD yv const yyDAIT = { addr: "0x5dbcf33d8c2e976c6b560249878e6f1491bca25c", dec: 18, getPrice: false, type: 'yv', pfsDec: 18 } ///yyDAI+yUSDC+yUSDT+yTUSD hbtc const yyDAIB = { addr: "0x2994529c0652d127b7842094103715ec5299bbed", dec: 18, getPrice: false, type: 'yv', pfsDec: 18 } ///yyDAI+yUSDC+yUSDT+yBUSD hbtc -const WETH = { addr: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", dec: 18, get getPrice() { return this.addr }, type: '' } ///WETH crvETH +const WETH = { addr: ADDRESSES.ethereum.WETH, dec: 18, get getPrice() { return this.addr }, type: '' } ///WETH crvETH const eCRV = { addr: "0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c", dec: 18, getPrice: WETH.getPrice, type: '' } ///eCRV crvETH const steCRV = { addr: "0x06325440d014e39736583c165c2963ba99faf14e", dec: 18, getPrice: WETH.getPrice, type: '' } ///steCRV crvETH const ankrCRV = { addr: "0xaa17a236f2badc98ddc0cf999abb47d47fc0a6cf", dec: 18, getPrice: WETH.getPrice, type: '' } ///ankrCRV crvETH -const usdc = { addr: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", dec: 6, getPrice: false, type: '' } ///fUSD +const usdc = { addr: ADDRESSES.ethereum.USDC, dec: 6, getPrice: false, type: '' } ///fUSD const fUSDC = { addr: "0xf0358e8c3cd5fa238a29301d0bea3d63a17bedbe", dec: 6, getPrice: false, type: 'yv', pfsDec: 6 } ///fUSD const fUSDT = { addr: "0x053c80ea73dc6941f518a68e2fc52ac45bde7c9c", dec: 6, getPrice: false, type: 'yv', pfsDec: 6 } ///fUSD const fDAI = { addr: "0xab7fa2b2985bccfc13c6d86b1d5a17486ab1e04c", dec: 18, getPrice: false, type: 'yv', pfsDec: 18 } ///fUSD @@ -32,9 +33,9 @@ const ycrvRenWSBTC = { addr: '0x7ff566e1d69deff32a7b244ae7276b9f90e9d0f6', dec: // TODO: the next should be yv const fcrvRenWBTC = { addr: '0x5f18c75abdae578b483e5f43f12a39cf75b973a9', dec: 18, getPrice: wBTC, type: '', pfsDec: 18 } ///btcSnow -const polyDai = { addr: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", dec: 18, getPrice: false } ///penguin -const polyUsdc = { addr: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", dec: 6, getPrice: false } ///penguin -const polyUSDT = { addr: "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", dec: 6, getPrice: false } ///penguin +const polyDai = { addr: ADDRESSES.polygon.DAI, dec: 18, getPrice: false } ///penguin +const polyUsdc = { addr: ADDRESSES.polygon.USDC, dec: 6, getPrice: false } ///penguin +const polyUSDT = { addr: ADDRESSES.polygon.USDT, dec: 6, getPrice: false } ///penguin const snow = { addr: '0xfe9a29ab92522d14fc65880d817214261d8479ae', dec: 18, get getPrice() { return this.addr } } ///Frosty diff --git a/projects/soarpulse/index.js b/projects/soarpulse/index.js new file mode 100644 index 0000000000..074ad87848 --- /dev/null +++ b/projects/soarpulse/index.js @@ -0,0 +1,9 @@ +const { sumTokensExport, nullAddress } = require("../helper/unwrapLPs"); + +const contract = "0xb29201EBB420b28Bb43052Ad58C23F43d6899F51"; + +module.exports = { + pulse: { + tvl: sumTokensExport({ owner: contract, tokens: [nullAddress]}), + }, +}; \ No newline at end of file diff --git a/projects/sobal/index.js b/projects/sobal/index.js new file mode 100644 index 0000000000..0f52626b48 --- /dev/null +++ b/projects/sobal/index.js @@ -0,0 +1,14 @@ +const { onChainTvl } = require('../helper/balancer') + +const V2_ADDRESS = '0x7122e35ceC2eED4A989D9b0A71998534A203972C'; // Vault + +const config = { + neon_evm: { fromBlock: 206166057, }, +} + +Object.keys(config).forEach(chain => { + const { fromBlock } = config[chain] + module.exports[chain] = { + tvl: onChainTvl(V2_ADDRESS, fromBlock) + } +}) diff --git a/projects/socialswap/index.js b/projects/socialswap/index.js index 1e67570095..d57f5dc8b6 100644 --- a/projects/socialswap/index.js +++ b/projects/socialswap/index.js @@ -1,12 +1,16 @@ -const utils = require("../helper/utils"); +const sdk = require('@defillama/sdk') +const { getUniTVL } = require('../helper/unknownTokens.js') -// There are staking and pool2 parts, but the Social Swap Token (SST) is not on coingecko yet. It'll be updated !! - -async function fetch(timestamp, chainBlocks) { - const tvl = await utils.fetchURL("https://backend.socialswap.io/api/v1/tlv"); - return tvl.data.total_usdt; -} +const TRON_FACTORY_V1 = 'TN57jo2jGQz3v5YDybyLFHFtvkmRQvCNFz' +const TRON_FACTORY_V2 = 'TSzrq5j2Btn27eVcBAvZj9WQK3FhURamDQ' module.exports = { - fetch, -}; + timetravel: false, + misrepresentedTokens: true, + tron: { + tvl: sdk.util.sumChainTvls([ + getUniTVL({ factory: TRON_FACTORY_V1, useDefaultCoreAssets: true, }), + getUniTVL({ factory: TRON_FACTORY_V2, useDefaultCoreAssets: true, }), + ]) + } +} diff --git a/projects/soda-protocol/index.js b/projects/soda-protocol/index.js index 1fc3e83172..b9c4ae64ba 100644 --- a/projects/soda-protocol/index.js +++ b/projects/soda-protocol/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/solana') async function tvl() { const owner = '5cv5tMwrCMAVbwAC5icUPB5XB4qQpsaf3KaGP7Ygdomc' const tokens = [ "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", - "So11111111111111111111111111111111111111112", + ADDRESSES.solana.SOL, "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + ADDRESSES.solana.USDC, + ADDRESSES.solana.USDT, "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", ] diff --git a/projects/sohei/index.js b/projects/sohei/index.js index 3bb9e33f21..4882d9f116 100644 --- a/projects/sohei/index.js +++ b/projects/sohei/index.js @@ -5,5 +5,8 @@ const ceth = "0x685d1f1a83ff64e75fe882e7818e4ad9173342ca"; const chain = "arbitrum"; module.exports = { + hallmarks: [ + [1680480000, "Team out of funds announced"] + ], arbitrum: compoundExports('0x9f750cf10034f3d7a18221aec0bddab7fc6f32ba', chain, ceth, nullAddress, undefined, undefined, { blacklistedTokens: ['0x6e002cb9bf8c17409eeb6c593ef6548faddd2985']}), }; \ No newline at end of file diff --git a/projects/solace-finance/config.js b/projects/solace-finance/config.js index 7ea017e1e5..51f428ae11 100644 --- a/projects/solace-finance/config.js +++ b/projects/solace-finance/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { ethereum: { solace: '0x501acE9c35E60f03A2af4d484f49F9B1EFde9f40', @@ -5,27 +6,27 @@ module.exports = { uwp_address: '0x5efC0d9ee3223229Ce3b53e441016efC5BA83435', tokens: [ { - PoolToken: "0x853d955aCEf822Db058eb8505911ED77F175b99e", + PoolToken: ADDRESSES.ethereum.FRAX, TokenTicker: "FRAX", }, { - PoolToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + PoolToken: ADDRESSES.ethereum.USDC, TokenTicker: "USDC", }, { - PoolToken: "0xdAC17F958D2ee523a2206206994597C13D831ec7", + PoolToken: ADDRESSES.ethereum.USDT, TokenTicker: "USDT", }, { - PoolToken: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + PoolToken: ADDRESSES.ethereum.DAI, TokenTicker: "DAI", }, { - PoolToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + PoolToken: ADDRESSES.ethereum.WETH, TokenTicker: "WETH", }, { - PoolToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + PoolToken: ADDRESSES.ethereum.WBTC, TokenTicker: "WBTC", }, ] @@ -35,7 +36,7 @@ module.exports = { solace: '0x501acE9c35E60f03A2af4d484f49F9B1EFde9f40', tokens: [ { - PoolToken: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + PoolToken: ADDRESSES.polygon.WMATIC_2, TokenTicker: "WMATIC", }, { @@ -43,23 +44,23 @@ module.exports = { TokenTicker: "FRAX", }, { - PoolToken: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + PoolToken: ADDRESSES.polygon.USDC, TokenTicker: "USDC", }, { - PoolToken: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + PoolToken: ADDRESSES.polygon.USDT, TokenTicker: "USDT", }, { - PoolToken: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + PoolToken: ADDRESSES.polygon.DAI, TokenTicker: "DAI", }, { - PoolToken: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + PoolToken: ADDRESSES.polygon.WETH_1, TokenTicker: "WETH", }, { - PoolToken: "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6", + PoolToken: ADDRESSES.polygon.WBTC, TokenTicker: "WBTC", }, ] @@ -70,23 +71,23 @@ module.exports = { lp: '0xdDAdf88b007B95fEb42DDbd110034C9a8e9746F2', tokens: [ { - PoolToken: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + PoolToken: ADDRESSES.aurora.NEAR, TokenTicker: "WNEAR", }, { - PoolToken: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + PoolToken: ADDRESSES.aurora.AURORA, TokenTicker: "AURORA", }, { - PoolToken: "0xDA2585430fEf327aD8ee44Af8F1f989a2A91A3d2", + PoolToken: ADDRESSES.aurora.FRAX, TokenTicker: "FRAX", }, { - PoolToken: "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802", + PoolToken: ADDRESSES.aurora.USDC_e, TokenTicker: "USDC", }, { - PoolToken: "0x4988a896b1227218e4A686fdE5EabdcAbd91571f", + PoolToken: ADDRESSES.aurora.USDT_e, TokenTicker: "USDT", }, { diff --git a/projects/solanax.js b/projects/solanax.js index 7deb202e35..59b5fa2a04 100644 --- a/projects/solanax.js +++ b/projects/solanax.js @@ -15,7 +15,7 @@ module.exports = { misrepresentedTokens: true, methodology: `TVL is fetched by making calls to the Solanax API (https://solanax.org/api/data/)`, solana: { - tvl: fetch, + tvl: () => ({}), } }; \ No newline at end of file diff --git a/projects/solarbeam/index.js b/projects/solarbeam/index.js index d9e941fbfd..a59a5ff7eb 100644 --- a/projects/solarbeam/index.js +++ b/projects/solarbeam/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); @@ -51,13 +52,13 @@ const stableSwapPools = { const stableSwapTokens = { USDC: { - address: '0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D', + address: ADDRESSES.moonriver.USDC, decimals: 6, symbol: 'USDC', gecko: 'usd-coin' }, USDT: { - address: '0xB44a9B6905aF7c801311e8F4E76932ee959c663C', + address: ADDRESSES.moonriver.USDT, decimals: 6, symbol: 'USDT', gecko: 'tether' @@ -113,7 +114,7 @@ const stableSwapTokens = { WBTC: { symbol: 'WBTC', name: 'Wrapped BTC', - address: '0x6aB6d61428fde76768D7b45D8BFeec19c6eF91A8', + address: ADDRESSES.oasis.USDT, decimals: 8, gecko: 'bitcoin' } @@ -168,9 +169,9 @@ const dexTVL = getUniTVL({ coreAssets: [ '0xf50225a84382c74CbdeA10b0c176f71fc3DE0C4d', // moonriver "0x98878B06940aE243284CA214f92Bb71a2b032B8A", // WMOVR - // "0xb44a9b6905af7c801311e8f4e76932ee959c663c", // usdt - "0xe3f5a90f9cb311505cd691a46596599aa1a0ad7d", // usdc - "0x639a647fbe20b6c8ac19e48e2de44ea792c62c5c", // eth + // ADDRESSES.moonriver.USDT, // usdt + ADDRESSES.moonriver.USDC, // usdc + ADDRESSES.moonriver.ETH, // eth ] }) diff --git a/projects/solhero/index.js b/projects/solhero/index.js index 3cac3ab0b6..1a941679b1 100644 --- a/projects/solhero/index.js +++ b/projects/solhero/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const utils = require('../helper/utils') const { getConnection } = require('../helper/solana') const BigNumber = require('bignumber.js') @@ -8,11 +9,11 @@ const poolInfoKey = new PublicKey('CsMSJ2wJAsQBNZU9LuL3FAx2Do9ndY4Ae15JAXhFMc1p' const decimals = { 'Hero6s7zJXsw9hfCXLVR5stLqgCok3E7CCkpQEoLAk2g': 6, // HERO - 'So11111111111111111111111111111111111111112': 9, // SOL + [ADDRESSES.solana.SOL]: 9, // SOL '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R': 6, // RAY 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So': 9, // mSOL - 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v': 6, // USDC - 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB': 6, // USDT + [ADDRESSES.solana.USDC]: 6, // USDC + [ADDRESSES.solana.USDT]: 6, // USDT 'rEmtKCiw6DQL8kAaGzhSryqnqNckYabPxTNXDdj2Jur': 6, // hero-usdc 'Epm4KfTj4DMrvqn6Bwg2Tr2N8vhQuNbuK8bESFp4k33K': 9, // sol-usdt '8HoQnePLqPj4M7PUDzfw8e3Ymdwgc7NLGnaTUapubyvu': 9, // sol-usdc @@ -188,7 +189,7 @@ async function staking() { var tvl = new BigNumber(0) - var solPrice = await getTokenPrice('So11111111111111111111111111111111111111112') + var solPrice = await getTokenPrice(ADDRESSES.solana.SOL) var amounts = [] @@ -237,7 +238,7 @@ async function farmPool() { var tvl = new BigNumber(0) - var solPrice = await getTokenPrice('So11111111111111111111111111111111111111112') + var solPrice = await getTokenPrice(ADDRESSES.solana.SOL) var amounts = [] @@ -283,7 +284,7 @@ async function lpTvl() { var tvl = new BigNumber(0) - var solPrice = await getTokenPrice('So11111111111111111111111111111111111111112') + var solPrice = await getTokenPrice(ADDRESSES.solana.SOL) var lpTvl = await getHeroLp() lpTvl = lpTvl.div(solPrice) diff --git a/projects/solid-world/abi.json b/projects/solid-world/abi.json new file mode 100644 index 0000000000..5b52c1fc79 --- /dev/null +++ b/projects/solid-world/abi.json @@ -0,0 +1,7 @@ +{ + "getTotalAmounts": "function getTotalAmounts() external view returns (uint256 total0, uint256 total1)", + "totalSupply": "uint256:totalSupply", + "balanceOf": "erc20:balanceOf", + "token0": "address:token0", + "token1": "address:token1" +} diff --git a/projects/solid-world/config.js b/projects/solid-world/config.js new file mode 100644 index 0000000000..f1b5182f65 --- /dev/null +++ b/projects/solid-world/config.js @@ -0,0 +1,15 @@ +const config = { + polygon: { + pools: [ + { + crispToken: "0xEF6Ab48ef8dFe984FAB0d5c4cD6AFF2E54dfdA14", + hypervisor: "0x4a39cBb8198376AB08c24e596fF5E668c3ca269E", + stakingContract: "0xaD7Ce5Cf8E594e1EFC6922Ab2c9F81d7a0E14337" + } + ] + } +}; + +module.exports = { + config +}; diff --git a/projects/solid-world/index.js b/projects/solid-world/index.js new file mode 100644 index 0000000000..7694ec1fb4 --- /dev/null +++ b/projects/solid-world/index.js @@ -0,0 +1,65 @@ +const sdk = require("@defillama/sdk"); +const BigNumber = require("bignumber.js"); +const { config } = require("./config"); +const abi = require("./abi.json"); + +async function tvl(timestamp, ethBlock, _, { api }) { + const chainConfig = config[api.chain]; + const crispSupplies = await api.multiCall({ + calls: chainConfig.pools.map(pool => pool.crispToken), + abi: abi.totalSupply + }); + + const TVL = {}; + chainConfig.pools.forEach(({ crispToken }, i) => { + sdk.util.sumSingleBalance(TVL, crispToken, crispSupplies[i], api.chain); + }); + + return TVL; +} + +async function pool2(timestamp, ethBlock, _, { api }) { + const chainConfig = config[api.chain]; + const [token0s, token1s, totalAmounts, totalSupplies, stakedAmounts] = await Promise.all([ + api.multiCall({ calls: chainConfig.pools.map(pool => pool.hypervisor), abi: abi.token0 }), + api.multiCall({ calls: chainConfig.pools.map(pool => pool.hypervisor), abi: abi.token1 }), + api.multiCall({ calls: chainConfig.pools.map(pool => pool.hypervisor), abi: abi.getTotalAmounts }), + api.multiCall({ calls: chainConfig.pools.map(pool => pool.hypervisor), abi: abi.totalSupply }), + api.multiCall({ + calls: chainConfig.pools.map(pool => ({ + target: pool.hypervisor, + params: [pool.stakingContract] + })), abi: abi.balanceOf + }) + ]); + + // zip the results + const poolStats = chainConfig.pools.map((_, i) => ({ + token0: token0s[i], + token1: token1s[i], + totalAmount: totalAmounts[i], + totalSupply: totalSupplies[i], + stakedAmount: stakedAmounts[i] + })); + + const TVL = {}; + poolStats.forEach((e) => { + sdk.util.sumSingleBalance(TVL, e.token0, adjustAmount(e.totalAmount.total0, e.stakedAmount, e.totalSupply), api.chain); + sdk.util.sumSingleBalance(TVL, e.token1, adjustAmount(e.totalAmount.total1, e.stakedAmount, e.totalSupply), api.chain); + }); + + return TVL; +} + +function adjustAmount(amount, numerator, denominator) { + return BigNumber(amount).times(numerator).div(denominator).toFixed(0); +} + +module.exports = { + start: 1684477800, // Fri May 19 2023 06:30:00 GMT+0000 + methodology: "TVL is a measure of the health of the Solid World ecosystem. It's the total amount of value that is locked up in our staking contract, and it's calculated by adding up the value of all the LP tokens that are staked. The LP tokens represent the amount of liquidity that has been provided to the Solid World platform.", + polygon: { + tvl, + pool2 + } +}; diff --git a/projects/solo/index.js b/projects/solo/index.js index 1b0df6dfaa..586f6db237 100644 --- a/projects/solo/index.js +++ b/projects/solo/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require("bignumber.js") const abi = require('./abi.json'); @@ -13,10 +14,10 @@ const VAULT_BSC = "0x7033A512639119C759A51b250BfA461AE100894b" const VAULT_POLYGON = "0xE95876787B055f1b9E4cfd5d3e32BDe302BF789d" const VAULT_OEC = "0xa8AF3199aCE72E47c1DEb56E58BEA1CD41C37c22" -const USDT_HECO = "0xa71EdC38d189767582C38A3145b5873052c3e47a" -const USDT_BSC = "0x55d398326f99059fF775485246999027B3197955" -const USDT_POLYGON = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F" -const USDT_OEC = "0x382bB369d343125BfB2117af9c149795C6C65C50" +const USDT_HECO = ADDRESSES.heco.USDT +const USDT_BSC = ADDRESSES.bsc.USDT +const USDT_POLYGON = ADDRESSES.polygon.USDT +const USDT_OEC = ADDRESSES.okexchain.USDT const tvlHeco = async (timestamp, blockETH, chainBlocks) => { let block = chainBlocks[CHAIN_HECO]; diff --git a/projects/soluna/index.js b/projects/soluna/index.js index fa1acf2bd8..3d913ed08d 100644 --- a/projects/soluna/index.js +++ b/projects/soluna/index.js @@ -1,11 +1,7 @@ -const { sumSingleBalance, TOKEN_LIST, getBalance, } = require('../helper/chain/terra') +const { sumTokens, } = require('../helper/chain/cosmos') async function tvl(timestamp, ethBlock, { terra: block }) { - const balances = {} - const aUSTBalance = await getBalance(TOKEN_LIST.anchorust, 'terra1aug2pyftq4e85kq5590ud30yswnewa42n9fmr8', block) - sumSingleBalance(balances, TOKEN_LIST.anchorust, aUSTBalance) - - return balances + return sumTokens({ owner: 'terra1qwzdua7928ugklpytdzhua92gnkxp9z4vhelq8', chain: 'terra'}) } module.exports = { diff --git a/projects/solunea/index.js b/projects/solunea/index.js index 8aec783a39..91cc9da46a 100644 --- a/projects/solunea/index.js +++ b/projects/solunea/index.js @@ -9,4 +9,11 @@ module.exports = { hasStablePools: true, }) }, + arbitrum: { + tvl: getUniTVL({ + factory: '0x6ef065573cd3fff4c375d4d36e6ca93cd6e3d499', + useDefaultCoreAssets: true, + hasStablePools: true, + }) + }, } diff --git a/projects/solv-protocol-v3/abi.json b/projects/solv-protocol-v3/abi.json new file mode 100644 index 0000000000..a7d28aec89 --- /dev/null +++ b/projects/solv-protocol-v3/abi.json @@ -0,0 +1,7 @@ +{ + "concrete": "address:concrete", + "slotTotalValue": "function slotTotalValue(uint256 slot_) view returns (uint256)", + "slotBaseInfo": "function slotBaseInfo(uint256 slot_) view returns (tuple(address issuer, address currency, uint64 valueDate, uint64 maturity, uint64 createTime, bool transferable, bool isValid))", + "decimals": "uint8:decimals", + "balanceOf": "function balanceOf(address _owner) view returns (uint256 balance)" +} \ No newline at end of file diff --git a/projects/solv-protocol-v3/index.js b/projects/solv-protocol-v3/index.js new file mode 100644 index 0000000000..81ec0c4950 --- /dev/null +++ b/projects/solv-protocol-v3/index.js @@ -0,0 +1,100 @@ +const { default: BigNumber } = require("bignumber.js"); +const abi = require("./abi.json"); +const { cachedGraphQuery } = require("../helper/cache"); + +// The Graph +const graphUrlList = { + ethereum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-prod/version/latest', + bsc: 'https://api.thegraph.com/subgraphs/name/slov-payable/solv-v3-earn-factory', + arbitrum: 'https://api.studio.thegraph.com/query/40045/solv-payable-factory-arbitrum/version/latest', +} + +const filterSlot = [ + "24463698369598535545979799361840946803505909684060624549876546521811809090281", + "35721610559268442584760110830641808857798079704888818123868248602816498531758", + "71384167217207433357665203528199852676074195415546219658272700694805764131696", + "94855382073997775269187449187472275689000980913702165029893305070390069014119" +]; + +async function tvl() { + const { api } = arguments[3]; + const network = api.chain; + const slots = await getSlot(api.timestamp, network); + if (slots.length <= 0) { + return; + } + const concretes = await concrete(slots, api); + + const totalValues = await api.multiCall({ + abi: abi.slotTotalValue, + calls: slots.map((index) => ({ + target: concretes[index.contractAddress], + params: [index.slot] + })), + }) + + const baseInfos = await api.multiCall({ + abi: abi.slotBaseInfo, + calls: slots.map((index) => ({ + target: concretes[index.contractAddress], + params: [index.slot] + })), + }) + + const decimalList = await api.multiCall({ + abi: abi.decimals, + calls: baseInfos.map(i => i[1]), + }) + + for (let i = 0; i < totalValues.length; i++) { + const decimals = decimalList[i]; + const balance = BigNumber(totalValues[i]).div(BigNumber(10).pow(18 - decimals)).toNumber(); + api.add(baseInfos[i][1], balance) + } +} + +async function concrete(slots, api) { + var slotsList = []; + var only = {}; + for (var i = 0; i < slots.length; i++) { + if (!only[slots[i].contractAddress]) { + slotsList.push(slots[i]); + only[slots[i].contractAddress] = true; + } + } + + const concreteLists = await api.multiCall({ + calls: slotsList.map((index) => index.contractAddress), + abi: abi.concrete, + }) + + let concretes = {}; + for (var k = 0; k < concreteLists.length; k++) { + concretes[slotsList[k].contractAddress] = concreteLists[k]; + } + + return concretes; +} + + +async function getSlot(timestamp, chain) { + const slotDataQuery = `query BondSlotInfos { + bondSlotInfos(first: 1000, where:{maturity_gt:${timestamp}}) { + contractAddress + slot + } + }`; + const slots = (await cachedGraphQuery(`solv-protocol/graph-data/${chain}`, graphUrlList[chain], slotDataQuery)).bondSlotInfos; + let slotList = []; + for (let i = 0; i < slots.length; i++) { + const bondSlotInfo = slots[i]; + if (filterSlot.indexOf(bondSlotInfo.slot) == -1) { + slotList.push(bondSlotInfo) + } + } + return slotList; +} + +['ethereum', 'bsc', 'arbitrum'].forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/solv-protocol/index.js b/projects/solv-protocol/index.js index bb0e680875..a03f135fec 100644 --- a/projects/solv-protocol/index.js +++ b/projects/solv-protocol/index.js @@ -1,84 +1,36 @@ -const { sumTokens, } = require('../helper/unwrapLPs') -const { staking } = require('../helper/staking'); -const { getChainTransform } = require("../helper/portedTokens"); -const { getConfig } = require('../helper/cache') +const { getConfig } = require("../helper/cache"); +const { sumTokens2 } = require("../helper/unwrapLPs"); // token list const tokenListsApiEndpoint = "https://token-list.solv.finance/vouchers-prod.json" -// Staking Tvls -const solvEthereumTokenAddress = '0x256F2d67e52fE834726D2DDCD8413654F5Eb8b53' -const solvEthereumPoolAddress = '0x7D0C93DcAD6f6B38C81431d7262CF0E48770B81a' -const solvBscTokenAddress = '0xC073c4eD65622A9423b5e5BDe2BFC8B81EBC471c' -const solvBscPoolAddress = '0xE5742912EDb4599779ACC1CE2acB6a06E01f1089' -const ethereumTVL = async (timestamp, block, chainBlocks) => { - const transform = await getChainTransform('ethereum'); - return tvl(timestamp, block, chainBlocks, "ethereum", 1, transform); -} - -const polygonTVL = async (timestamp, block, chainBlocks) => { - const transform = await getChainTransform('polygon'); - return tvl(timestamp, block, chainBlocks, "polygon", 137, transform); -} - -const arbitrumTVL = async (timestamp, block, chainBlocks) => { - const transform = await getChainTransform('arbitrum'); - return tvl(timestamp, block, chainBlocks, "arbitrum", 42161, transform); -}; - -const bscTVL = async (timestamp, block, chainBlocks) => { - const transform = await getChainTransform('bsc'); - return tvl(timestamp, block, chainBlocks, "bsc", 56, transform); -}; - -async function tvl(timestamp, block, chainBlocks, network, chainId, transform) { - let balances = {}; // Setup the balances object - const tokens = await tokenList(chainId); - let tokenPairs = [] - for (let i = 0; i < tokens.length; i++) { - const token = tokens[i]; - tokenPairs.push([ - token.address, - token.pool - ]) - } - - await sumTokens(balances, tokenPairs, chainBlocks[network], network, transform) - - return balances; +async function tvl() { + const { api } = arguments[3] + const chainId = api.getChainId() + const tokens = await tokenList(chainId); + await sumTokens2({ api, tokensAndOwners: tokens.map(i => [i.address, i.pool]), permitFailure: true }) } async function tokenList(chainId) { - let tokens = []; - const allTokens = (await getConfig('solv-protocol', tokenListsApiEndpoint)).tokens; - for (let token of allTokens) { - if (chainId == token.chainId) { - if (token.extensions.voucher.underlyingToken && token.extensions.voucher.underlyingToken.symbol != "SOLV") { - tokens.push({ - address: token.extensions.voucher.underlyingToken.address, - pool: token.extensions.voucher.vestingPool - }) - } + let tokens = []; + const allTokens = (await getConfig('solv-protocol', tokenListsApiEndpoint)).tokens; + for (let token of allTokens) { + if (chainId == token.chainId) { + if (token.extensions.voucher.underlyingToken != undefined) { + if (token.extensions.voucher.underlyingToken.symbol != "SOLV" && token.extensions.voucher.underlyingToken.symbol.indexOf("_") == -1) { + tokens.push({ + address: token.extensions.voucher.underlyingToken.address, + pool: token.extensions.voucher.vestingPool + }) } + } } + } - return tokens; -} -// node test.js projects/solv-protocol/index.js -module.exports = { - ethereum: { - tvl: ethereumTVL, - staking: staking(solvEthereumPoolAddress, solvEthereumTokenAddress) - }, - bsc: { - tvl: bscTVL, - staking: staking(solvBscPoolAddress, solvBscTokenAddress, "bsc") - }, - polygon: { - tvl: polygonTVL - }, - arbitrum: { - tvl: arbitrumTVL - } + return tokens; } + +['ethereum', 'bsc', 'polygon', 'arbitrum'].forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/sommelier/index.js b/projects/sommelier/index.js index bb1ac6aa41..a263c6bd29 100644 --- a/projects/sommelier/index.js +++ b/projects/sommelier/index.js @@ -23,11 +23,29 @@ const cellarsV0816 = [ { id: STEADY_MATIC, startBlock: 16192732 }, ]; +// v2 Cellars +const DEFI_STARS = "0x03df2a53cbed19b824347d6a45d09016c2d1676a"; const REAL_YIELD_USD = "0x97e6e0a40a3d02f12d1cec30ebfbae04e37c119e"; const REAL_YIELD_ETH = "0xb5b29320d2dde5ba5bafa1ebcd270052070483ec"; +const REAL_YIELD_LINK = "0x4068bdd217a45f8f668ef19f1e3a1f043e4c4934"; +const REAL_YIELD_1INCH = "0xc7b69e15d86c5c1581dacce3cacaf5b68cd6596f"; +const REAL_YIELD_UNI = "0x6a6af5393dc23d7e3db28d28ef422db7c40932b6"; +const REAL_YIELD_SNX = "0xcbf2250f33c4161e18d4a2fa47464520af5216b5"; +const REAL_YIELD_ENS = "0x18ea937aba6053bc232d9ae2c42abe7a8a2be440"; +const REAL_YIELD_BTC = "0x0274a704a6d9129f90a62ddc6f6024b33ecdad36"; +const FRAXIMAL = "0xdbe19d1c3f21b1bb250ca7bdae0687a97b5f77e6"; + const cellarsV2 = [ + { id: DEFI_STARS, startBlock: 17181497 }, { id: REAL_YIELD_USD, startBlock: 16431804 }, { id: REAL_YIELD_ETH, startBlock: 16986127 }, + { id: REAL_YIELD_LINK, startBlock: 17377190 }, + { id: REAL_YIELD_1INCH, startBlock: 17377190 }, + { id: REAL_YIELD_UNI, startBlock: 17377190 }, + { id: REAL_YIELD_SNX, startBlock: 17377190 }, + { id: REAL_YIELD_ENS, startBlock: 17377190 }, + { id: REAL_YIELD_BTC, startBlock: 17667535 }, + { id: FRAXIMAL, startBlock: 17589948 }, ]; async function tvl(timestamp, block, chainBlocks, { api }) { diff --git a/projects/sorbetto/abi.json b/projects/sorbetto/abi.json deleted file mode 100644 index 6283c08f89..0000000000 --- a/projects/sorbetto/abi.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "token0": "address:token0", - "token0PerShareStored": "uint256:token0PerShareStored", - "token1": "address:token1", - "token1PerShareStored": "uint256:token1PerShareStored" -} \ No newline at end of file diff --git a/projects/sorbetto/index.js b/projects/sorbetto/index.js deleted file mode 100644 index 2466c79418..0000000000 --- a/projects/sorbetto/index.js +++ /dev/null @@ -1,31 +0,0 @@ -const sdk = require('@defillama/sdk') -const { getConfig } = require('../helper/cache') - -const abi = require('./abi.json'); -const BigNumber = require('bignumber.js') - -const addressAPI = "https://analytics.back.popsicle.finance/api/v1/FragolaApy" - -async function tvl(timestamp, ethBlock) { - const addresses = (await getConfig('sorbetto', addressAPI)).map(t => t.fragolaAddress) - const balances = {} - const [token0, token1, token0PerShareStored, token1PerShareStored, totalSupply] = await Promise.all( - ["token0", "token1", "token0PerShareStored", "token1PerShareStored"] - .map(method => abi[method]).concat(['erc20:totalSupply']).map(abi => sdk.api.abi.multiCall({ - abi, - calls: addresses.map(a => ({ target: a })), - block: ethBlock - })) - ) - for (let i = 0; i < addresses.length; i++) { - sdk.util.sumSingleBalance(balances, token0.output[i].output, BigNumber(token0PerShareStored.output[i].output).times(totalSupply.output[i].output).div(1e18).toFixed(0)) - sdk.util.sumSingleBalance(balances, token1.output[i].output, BigNumber(token1PerShareStored.output[i].output).times(totalSupply.output[i].output).div(1e18).toFixed(0)) - } - return balances -} - -module.exports = { - ethereum: { - tvl - }, -} \ No newline at end of file diff --git a/projects/soulswap/index.js b/projects/soulswap/index.js index 2ec11bd38e..c4f86c5b24 100644 --- a/projects/soulswap/index.js +++ b/projects/soulswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { calculateUsdSoulTvl } = require('./helper/getUsdSoulTvl.js') const { staking } = require('../helper/staking.js'); const { underworldLending } = require('./underworld-lending.js') @@ -5,18 +6,18 @@ const { underworldLending } = require('./underworld-lending.js') const factory_fantom = '0x1120e150dA9def6Fe930f4fEDeD18ef57c0CA7eF' const farm_fantom = '0xb898226dE3c5ca980381fE85F2Bc10e35e00634c' const soul_fantom = '0xe2fb177009ff39f52c0134e8007fa0e4baacbd07' -const wftm_fantom = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83' +const wftm_fantom = ADDRESSES.fantom.WFTM const rndm_fantom = '0x49ac072c793fb9523f0688a0d863aadfbfb5d475' -const usdc_fantom = '0x04068da6c83afcfa0e13ba15a6696662335d5b75' +const usdc_fantom = ADDRESSES.fantom.USDC const wbtc_fantom = '0x321162cd933e2be498cd2267a90534a804051b11' const factory_avax = '0x5BB2a9984de4a69c05c996F7EF09597Ac8c9D63a' const farm_avax = '0xB1e330401c920077Ddf157AbA5594238d36b54B1' const soul_avax = '0x11d6DD25c1695764e64F439E32cc7746f3945543' -const wavax_avax = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7' -const usdc_avax = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E' +const wavax_avax = ADDRESSES.avax.WAVAX +const usdc_avax = ADDRESSES.avax.USDC const wbtc_avax = '0x50b7545627a5162F82A992c33b87aDc75187B218' -const weth_avax = '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB' +const weth_avax = ADDRESSES.avax.WETH_e const wl_fantom = [ usdc_fantom, soul_fantom, rndm_fantom, wbtc_fantom ] const wl_avax = [ usdc_avax, soul_avax, wbtc_avax, weth_avax ] diff --git a/projects/sovryn.js b/projects/sovryn.js deleted file mode 100644 index f84c4ccdf0..0000000000 --- a/projects/sovryn.js +++ /dev/null @@ -1,18 +0,0 @@ -const { get } = require('./helper/http') - -async function fetch() { - const data = await get('https://backend.sovryn.app/tvl') - const tvl = data.tvlLending.totalUsd + data.tvlAmm.totalUsd + data.tvlProtocol.totalUsd + data.tvlSubprotocols.totalUsd - return tvl; -} - -module.exports = { - methodology: "Sum up TVL of all Sovryn contracts and subprotocols (Lending Protocol, AMMs, Protocol Contract that holds margin trading collateral, Zero Lending Protocol and Mynt Bitcoin-backed stablecoin protocol). This data comes from the Sovryn backend API, which is open source and can be found here: https://github.com/DistributedCollective/Sovryn-graph-wrapper", - rsk: { - fetch - }, - fetch, - hallmarks: [ - [1680685098, "Mynt and Zero added to TVL"] - ] -} \ No newline at end of file diff --git a/projects/soyfinance/index.js b/projects/soyfinance/index.js index 2bccdac4e5..4b64eca10c 100644 --- a/projects/soyfinance/index.js +++ b/projects/soyfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') module.exports = { @@ -20,7 +21,7 @@ module.exports = { }, bittorrent: { tvl: getUniTVL({ - factory: '0xbf6c50889d3a620eb42c0f188b65ade90de958c4', + factory: ADDRESSES.callisto.BUSDT, chain: 'bittorrent', useDefaultCoreAssets: true, }) diff --git a/projects/spadefinance/index.js b/projects/spadefinance/index.js index 61fb058fdf..e49d8db310 100644 --- a/projects/spadefinance/index.js +++ b/projects/spadefinance/index.js @@ -24,6 +24,8 @@ module.exports = { staking: stakingPricedLP(spadechef, spade, "fantom", spadeFtmLP, "fantom"), pool2: pool2Exports(spadechef, [spadeFtmLP, spadeUsdcLP], "fantom"), }, - + hallmarks: [ + [1647734400, "Rug Pull"] + ] } diff --git a/projects/spark-fi/index.js b/projects/spark-fi/index.js new file mode 100644 index 0000000000..424ee87296 --- /dev/null +++ b/projects/spark-fi/index.js @@ -0,0 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const { aaveExports } = require('../helper/aave'); + +module.exports = { + ethereum: aaveExports('ethereum', '0x03cFa0C4622FF84E50E75062683F44c9587e6Cc1', undefined, ["0xFc21d6d146E6086B8359705C8b28512a983db0cb"], { v3: true, blacklistedTokens: [ADDRESSES.ethereum.DAI]}) +}; \ No newline at end of file diff --git a/projects/spartacus/index.js b/projects/spartacus/index.js index 617a89235c..0495b35761 100644 --- a/projects/spartacus/index.js +++ b/projects/spartacus/index.js @@ -1,24 +1,8 @@ const { staking } = require('../helper/staking') -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') -const { transformFantomAddress } = require('../helper/portedTokens') - - -const treasury = "0x8CFA87aD11e69E071c40D58d2d1a01F862aE01a8" - -async function tvl(time, ethBlock, chainBlocks) { - const balances = {} - const transform = await transformFantomAddress() - await sumTokensAndLPsSharedOwners(balances, [ - ["0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", false], - ["0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", false], // FTM asset - ["0xfa5a5f0bc990be1d095c5385fff6516f6e03c0a7", true] - ], [treasury], chainBlocks.fantom, "fantom", transform) - return balances -} module.exports = { fantom: { - tvl, + tvl: () => 0, staking: staking("0x9863056B4Bdb32160A70107a6797dD06B56E8137", "0x5602df4A94eB6C680190ACCFA2A475621E0ddBdc", "fantom") } } \ No newline at end of file diff --git a/projects/specfinance.js b/projects/specfinance.js index d0fd173c2c..0e8ec7817c 100644 --- a/projects/specfinance.js +++ b/projects/specfinance.js @@ -1,9 +1,9 @@ const axios = require('axios') async function tvl(){ - const tvl = await axios.get('https://api.spec.finance/api/stat') + const tvl = await axios.get('https://spec-api-eeh8efcmd2b0fffh.z01.azurefd.net/api/data?type=lpVault') return { - 'terrausd': tvl.data.tvl, + 'terrausd': tvl.data.stat.tvl / 1e6, } } @@ -18,7 +18,7 @@ module.exports = { misrepresentedTokens: true, timetravel: false, terra:{ - tvl + tvl: () => ({}), }, terra2:{ tvl: terra2 diff --git a/projects/sperax-demeter/index.js b/projects/sperax-demeter/index.js index e3eaa44c0e..ba6ffd03ee 100644 --- a/projects/sperax-demeter/index.js +++ b/projects/sperax-demeter/index.js @@ -15,9 +15,23 @@ async function tvl(_, _b, _cb, { api, }) { rewardTokens[i].forEach(t => toa.push([t, o])) }); await sumTokens2({ api, owners: farms, resolveUniV3: true, }) + const camelotFarms = (await api.multiCall({ abi: 'address:nftPool', calls: farms, permitFailure: true, })).map((v, i) => v ? [v, farms[i]] : null).filter(v => v) + await Promise.all(camelotFarms.map(i => getFarmTvl(api, i))) return sumTokens2({ api, tokensAndOwners: toa, }) } +async function getFarmTvl(api, [nftPool, farm]) { + const poolInfo = await api.call({ abi: "function getPoolInfo() view returns (address lpToken, address grailToken, address xGrailToken, uint256 lastRewardTime, uint256 accRewardsPerShare, uint256 lpSupply, uint256 lpSupplyWithMultiplier, uint256 allocPoint)", target: nftPool, }) + const tokenCount = await api.call({ abi: 'erc20:balanceOf', target: nftPool, params: farm, }) + const calls = [] + for (let i= 0;i< +tokenCount;i++) calls.push({ params: [farm, i]}) + const tokenIds = await api.multiCall({ abi: 'function tokenOfOwnerByIndex(address,uint256) view returns (uint256)', calls, target: nftPool}) + const positions = await api.multiCall({ abi: "function getStakingPosition(uint256 tokenId) view returns (uint256 amount, uint256 amountWithMultiplier, uint256 startLockTime, uint256 lockDuration, uint256 lockMultiplier, uint256 rewardDebt, uint256 boostPoints, uint256 totalMultiplier)", calls: tokenIds, target: nftPool,}) + positions.forEach((position, i) => { + api.add(poolInfo.lpToken, position.amount) + }) +} + module.exports = { doublecounted: true, arbitrum: { tvl } diff --git a/projects/spice-finance/index.js b/projects/spice-finance/index.js index cc6bcc399f..a5e83ababe 100644 --- a/projects/spice-finance/index.js +++ b/projects/spice-finance/index.js @@ -1,9 +1,14 @@ -const VAULT = "0x6110d61DD1133b0f845f1025d6678Cd22A11a2fe"; +const vaults = [ + '0xAe11ae7CaD244dD1d321Ff2989543bCd8a6Db6DF', // Flagship + '0xd68871bd7D28572860b2E0Ee5c713b64445104F9', // Leverage + '0x6110d61DD1133b0f845f1025d6678Cd22A11a2fe', // VIP + '0xfC287513E2DD58fbf952eB0ED05D511591a6215B', // Blur +] async function tvl(_1, _2, chainBlocks, { api }) { - return { - "ethereum:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": await api.call({ target: VAULT, abi: 'uint256:totalAssets'}), - }; + const tokens = await api.multiCall({ abi: 'address:asset', calls: vaults }) + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: vaults }) + api.addTokens(tokens, bals) } module.exports = { diff --git a/projects/spiral-dao/abi.json b/projects/spiral-dao/abi.json new file mode 100644 index 0000000000..bc914099df --- /dev/null +++ b/projects/spiral-dao/abi.json @@ -0,0 +1,6 @@ +{ + "poolCount": "function poolCount() external view returns (uint256)", + "poolInfo": "function poolInfo(uint256 poolId) external view returns (tuple(address target, address adapter, uint256 targetPoolId, uint256 rewardableDeposits) memory)", + "lockableToken": "function lockableToken(uint256) external view returns (address)" +} + diff --git a/projects/spiral-dao/index.js b/projects/spiral-dao/index.js new file mode 100644 index 0000000000..839789b86d --- /dev/null +++ b/projects/spiral-dao/index.js @@ -0,0 +1,28 @@ +const { staking } = require('../helper/staking') +const sdk = require('@defillama/sdk'); +const abi = require('./abi.json'); + +const MASTERMIND = "0xFACE8DED582816E2f2cD4C6cc1cbD1aCCc9df65E" +const STAKING = "0x6701e792b7cd344bae763f27099eeb314a4b4943" +const COIL = '0x823E1B82cE1Dc147Bbdb25a203f046aFab1CE918' + +async function tvl(_, _1, _2, { api }) { + const balances = {} + let pools = await api.fetchList({ target: MASTERMIND, itemAbi: abi.poolInfo, lengthAbi: abi.poolCount, }) + let poolInputs = await api.fetchList({ target: MASTERMIND, itemAbi: abi.lockableToken, lengthAbi: abi.poolCount, }) + for (let i = 0; i < pools.length; i++) { + await sdk.util.sumSingleBalance(balances, poolInputs[i], pools[i].rewardableDeposits) + } + return balances; +} + + +module.exports = { + methodology: 'Information is retrieved from both the blockchain and the SpiralDAO API. "https://api.spiral.farm".', + start: 16991020, + ethereum: { + tvl, + staking: staking(STAKING, COIL), + } +}; + diff --git a/projects/spiral-fi-mixer/index.js b/projects/spiral-fi-mixer/index.js index 732b986ef7..2032acb827 100644 --- a/projects/spiral-fi-mixer/index.js +++ b/projects/spiral-fi-mixer/index.js @@ -1,7 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { era: { - tvl: sumTokensExport({ owner: '0xcd98e2C68248de044c3E44144C34D9EBb09337a9', tokens: ['0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4']}) + tvl: sumTokensExport({ owner: '0xcd98e2C68248de044c3E44144C34D9EBb09337a9', tokens: [ADDRESSES.era.USDC]}) + }, + polygon_zkevm: { + tvl: sumTokensExport({owner: '0x96DaD05740807e76892076684F433D5E0b3569fB', tokens: [ADDRESSES.polygon_zkevm.USDC]}) } } \ No newline at end of file diff --git a/projects/spookyswap/index.js b/projects/spookyswap/index.js index d266bfd34a..9416f18f21 100644 --- a/projects/spookyswap/index.js +++ b/projects/spookyswap/index.js @@ -1,9 +1,7 @@ -const { getChainTvl } = require("../helper/getUniSubgraphTvl") +const { getUniTVL } = require("../helper/unknownTokens") module.exports={ misrepresentedTokens: true, fantom:{ - tvl: getChainTvl({ - fantom: 'https://api.thegraph.com/subgraphs/name/eerieeight/spookyswap' - })('fantom') - } -} \ No newline at end of file + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x152eE697f2E276fA89E96742e9bB9aB1F2E61bE3' }), + }, +} \ No newline at end of file diff --git a/projects/squid-dao/index.js b/projects/squid-dao/index.js index e8381c45b2..51679a4ca5 100644 --- a/projects/squid-dao/index.js +++ b/projects/squid-dao/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x61d8a57b3919e9F4777C80b6CF1138962855d2Ca" module.exports = ohmTvl(treasury, [ - ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", false], + [ADDRESSES.ethereum.WETH, false], ["0xfad704847967d9067df7a60910399155fca43fe8", true] ], "ethereum", "0x5895b13da9beb11e36136817cdcf3c4fcb16aaea", "0x21ad647b8f4fe333212e735bfc1f36b4941e6ad2") \ No newline at end of file diff --git a/projects/squidstake/index.js b/projects/squidstake/index.js index 3615c85885..c2bcdd77b9 100644 --- a/projects/squidstake/index.js +++ b/projects/squidstake/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { transformBscAddress } = require("../helper/portedTokens"); const { addFundsInMasterChef } = require("../helper/masterchef"); @@ -11,7 +12,7 @@ const squidBnbLP = "0x2e0484D3684701dC032f29cce59c785A5837B34E"; const solWbnbLP = { lpToken: "0x9d5B48AD38748c6DBD77399eccE3FD8B6f980456", token0: ["solana"], - token1: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + token1: ADDRESSES.bsc.WBNB, }; const getReserves = 'function getReserves() view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast)'; diff --git a/projects/stUSDT/index.js b/projects/stUSDT/index.js new file mode 100644 index 0000000000..cd4ac290b6 --- /dev/null +++ b/projects/stUSDT/index.js @@ -0,0 +1,10 @@ +module.exports = { + tron: { + tvl: async (_, _b, _cb, { api, }) => { + const supply = await api.call({ abi: "erc20:totalSupply", target: "TThzxNRLrW2Brp9DcTQU8i4Wd9udCWEdZ3" }) + return { + "0xdac17f958d2ee523a2206206994597c13d831ec7": supply/1e12 + } + } + } +} diff --git a/projects/stabilizefi/index.js b/projects/stabilizefi/index.js index 9bd38c9ce2..f7ad8696a5 100644 --- a/projects/stabilizefi/index.js +++ b/projects/stabilizefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { getLiquityTvl } = require("../helper/liquity"); const { pool2 } = require('../helper/pool2'); @@ -10,16 +11,16 @@ const FARM_ADDRESS_SET_USDC = "0xAA31D7Bc8186888D9Eebb5524C47268E4bC87496" const LP_ADDRESS_SET_USDC = "0x31fa3838788A07607D95C9c640D041eAec649f50" // system coll -const AVAX_ADDRESS = '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7'; +const AVAX_ADDRESS = ADDRESSES.avax.WAVAX; const AVAX_TROVE_MANAGER_ADDRESS = "0x7551A127C41C85E1412EfE263Cadb49900b0668C"; -const ETH_ADDRESS = '0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab'; +const ETH_ADDRESS = ADDRESSES.avax.WETH_e; const ETH_TROVE_MANAGER_ADDRESS = "0x7837C2dB2d004eB10E608d95B2Efe8cb57fd40b4"; const BTC_ADDRESS = '0x50b7545627a5162f82a992c33b87adc75187b218'; const BTC_TROVE_MANAGER_ADDRESS = "0x56c194F1fB30F8cdd49E7351fC9C67d8C762a86F"; -const DAI_ADDRESS = '0xd586e7f844cea2f87f50152665bcbc2c279d8d70'; +const DAI_ADDRESS = ADDRESSES.avax.DAI; const DAI_TROVE_MANAGER_ADDRESS = "0x54b35c002468a5Cc2BD1428C011857d26463ecbC"; diff --git a/projects/stabl-v2/abi.json b/projects/stabl-v2/abi.json new file mode 100644 index 0000000000..0d3c531577 --- /dev/null +++ b/projects/stabl-v2/abi.json @@ -0,0 +1,5 @@ +{ + "getAllAssets": "address[]:getAllAssets", + "checkBalance": "function checkBalance(address _asset) view returns (uint256 balance)", + "isSupportedAsset": "function supportsAsset(address _asset) view returns (bool)" + } \ No newline at end of file diff --git a/projects/stabl-v2/index.js b/projects/stabl-v2/index.js new file mode 100644 index 0000000000..e013ecb186 --- /dev/null +++ b/projects/stabl-v2/index.js @@ -0,0 +1,39 @@ +const sdk = require("@defillama/sdk"); +const abi = require("./abi.json"); + +const vault = "0x2D62f6D8288994c7900e9C359F8a72e84D17bfba"; + +const polygonTvl = async (timestamp, ethBlock, chainBlocks) => { + const balances = {}; + + const stablecoins = ( + await sdk.api.abi.call({ + abi: abi.getAllAssets, + target: vault, + block: chainBlocks['polygon'], + chain: 'polygon' + }) + ).output; + + for (let i = 0; i < stablecoins.length; i++) { + const balance_stablecoin = ( + await sdk.api.abi.call({ + abi: abi.checkBalance, + target: vault, + params: stablecoins[i], + block: chainBlocks['polygon'], + chain: 'polygon' + }) + ).output; + + sdk.util.sumSingleBalance(balances, stablecoins[i], balance_stablecoin,'polygon'); + } + + return balances; +}; + +module.exports = { + polygon: { + tvl: polygonTvl, + }, +}; diff --git a/projects/stabl/index.js b/projects/stabl/index.js index 8d282b980c..fdfba33a84 100644 --- a/projects/stabl/index.js +++ b/projects/stabl/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const vaults = { @@ -5,7 +6,7 @@ const vaults = { } const assets = { - polygon: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", //USDC + polygon: ADDRESSES.polygon.USDC, //USDC } const abi = "uint256:checkBalance" diff --git a/projects/stabledoin/index.js b/projects/stabledoin/index.js index b0ca812c78..3b72f821e3 100644 --- a/projects/stabledoin/index.js +++ b/projects/stabledoin/index.js @@ -5,6 +5,9 @@ const factory = "0x7bbAB21475d99C09a92fc4B93Fa2DDa987DbA17c" module.exports = { misrepresentedTokens: true, + hallmarks: [ + [1666656000, "Rug Pull"] + ], dogechain: { tvl: sdk.util.sumChainTvls([ getUniTVL({ chain: 'dogechain', factory, useDefaultCoreAssets: true, }), diff --git a/projects/stablekoi/index.js b/projects/stablekoi/index.js index 799bb8432e..fba993ed4a 100644 --- a/projects/stablekoi/index.js +++ b/projects/stablekoi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require("../helper/unwrapLPs"); const { getFixBalances } = require("../helper/portedTokens"); const { GraphQLClient, gql } = require("graphql-request"); @@ -99,7 +100,7 @@ const v1Pools = [ }, { "symbol": "USDC|bsc", - "address": "0xfA307CfdEA89DC197A346c338a98aC85d517af6e", + "address": ADDRESSES.godwoken_v1.USDC_bsc, } ] }, @@ -127,7 +128,7 @@ const v1Pools = [ }, { "symbol": "USDT|bsc", - "address": "0xDFF2faCdFe47C1D5b51f18231f900949F1d5988f", + "address": ADDRESSES.godwoken_v1.USDT_bsc, } ] }, @@ -137,11 +138,11 @@ const v1Pools = [ "tokens": [ { "symbol": "WBTC|eth", - "address": "0x82455018F2c32943b3f12F4e59D0DA2FAf2257Ef", + "address": ADDRESSES.godwoken_v1.WBTC_eth, }, { "symbol": "BTCB|bsc", - "address": "0xEF2439e020509259FA603c34B35A81FFe676CFB4", + "address": ADDRESSES.godwoken_v1.BTCB_bsc, } ] } diff --git a/projects/stablz/index.js b/projects/stablz/index.js index fd13aaab03..9c3e33e54f 100644 --- a/projects/stablz/index.js +++ b/projects/stablz/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7"; +const USDT = ADDRESSES.ethereum.USDT; const STABLZ_CANNAVEST_RWA_POOL = "0xa030f3e984A08B5Ada0377A9f4EaAF846E6A2cB0"; async function borrowed(_, block, _1, { api }) { diff --git a/projects/stacker/index.js b/projects/stacker/index.js index 570509cff4..b882d291df 100644 --- a/projects/stacker/index.js +++ b/projects/stacker/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const vaults = [ // farm, token used - ['0x067b9FE006E16f52BBf647aB6799f87566480D2c', '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'], // USDC - ['0x70e51DFc7A9FC391995C2B2f027BC49D4fe01577', '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'], // WETH - ['0x17E9ed51feD2F190D50f5bd4f1a8C9CbCd36162A', '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'], // WBTC + ['0x067b9FE006E16f52BBf647aB6799f87566480D2c', ADDRESSES.ethereum.USDC], // USDC + ['0x70e51DFc7A9FC391995C2B2f027BC49D4fe01577', ADDRESSES.ethereum.WETH], // WETH + ['0x17E9ed51feD2F190D50f5bd4f1a8C9CbCd36162A', ADDRESSES.ethereum.WBTC], // WBTC ] async function tvl(timestamp, block, chainBlocks) { diff --git a/projects/stacks/index.js b/projects/stacks/index.js index 553e782d3d..f2624c3dce 100644 --- a/projects/stacks/index.js +++ b/projects/stacks/index.js @@ -9,6 +9,7 @@ async function tvl(timestamp) { } module.exports = { + timetravel: false, stacks: { tvl }, diff --git a/projects/stackswap.js b/projects/stackswap.js index 5be904df0b..0038db1eac 100644 --- a/projects/stackswap.js +++ b/projects/stackswap.js @@ -1,16 +1,7 @@ -const { get } = require('./helper/http') - -async function fetch() { - let poolValues = ( - await get("https://app.stackswap.org/api/v1/pools") - ) - .filter(p => p.pair_name !== 'STSW-lBTC') - .map(p => p.liquidity_locked); - poolValues = poolValues.map(v => v.substring(0, v.indexOf('USD'))); - return poolValues.reduce((a, b) => a + parseFloat(b), 0); -} +const { getExports } = require('./helper/heroku-api') module.exports = { - timetravel: false, - fetch, -}; + timetravel: false, + misrepresentedTokens: true, + ...getExports("stackswap", ['stacks']), +} diff --git a/projects/stackswap/api.js b/projects/stackswap/api.js new file mode 100644 index 0000000000..89c64945e2 --- /dev/null +++ b/projects/stackswap/api.js @@ -0,0 +1,38 @@ +const sdk = require('@defillama/sdk') +const { call } = require('../helper/chain/stacks-api') +const { transformDexBalances } = require('../helper/portedTokens') +const { getCache, setCache, } = require('../helper/cache') + +const factory = 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275.stackswap-swap-v5k' + +module.exports = { + stacks: { tvl } +} + +async function tvl(_, _b, _cb, { api, }) { + const data = [] + const { value: pairCount } = await call({ target: factory, abi: 'get-pair-count' }) + const cache = await getCache('stackswap', 'stacks-config') + if (!cache.pairData) cache.pairData = [] + for (let i = cache.pairData.length +1; i <= pairCount; i++) { + const pair = await call({ target: factory, abi: 'get-pair-contracts', inputArgs: [{ type: 'number', value: i }] }) + cache.pairData.push(pair) + console.log('pair count: ', cache.pairData.length) + } + + await setCache('stackswap', 'stacks-config', cache) + let j = 0 + + for (const pair of cache.pairData) { + if (pair['liquidity-token'].value === 'SP1Z92MPDQEWZXW36VX71Q25HKF5K2EPCJ304F275.liquidity-token-v5krqbd8nh6') continue // ignore STSW-lBTC + const pairData = await call({ target: pair['liquidity-token'].value, abi: 'get-lp-data', }) + data.push({ + token0: pair['token-x'].value, + token1: pair['token-y'].value, + token0Bal: +pairData.value['balance-x'].value + +pairData.value['fee-balance-x'].value, + token1Bal: +pairData.value['balance-y'].value + +pairData.value['fee-balance-y'].value, + }) + console.log('pair data: ',++j) + } + return transformDexBalances({ chain: 'stacks', data}) +} \ No newline at end of file diff --git a/projects/stader/index.js b/projects/stader/index.js index a927826224..2e308d7b4f 100644 --- a/projects/stader/index.js +++ b/projects/stader/index.js @@ -1,3 +1,4 @@ +const { nullAddress } = require('../helper/unwrapLPs') const { fetchURL } = require("../helper/utils") async function hbarTvl(timestamp) { @@ -52,9 +53,9 @@ module.exports = { tvl: hbarTvl, }, // its on ethereum because funds are locked there - ethereum: { + /* ethereum: { tvl: maticTvl - }, + }, */ fantom: { tvl: ftmTvl }, @@ -67,7 +68,18 @@ module.exports = { near: { tvl: nearTvl }, - hallmarks:[ + ethereum: { + tvl: async (_, _1, _2, { api }) => { + + const res = await fetchURL("https://universe.staderlabs.com/common/tvl") + return { + "matic-network": res.data.polygon.native, + [nullAddress]: await api.call({ abi: 'uint256:totalAssets', target: '0xcf5ea1b38380f6af39068375516daf40ed70d299' }) + // [nullAddress]: await api.call({ abi: 'uint256:totalSupply', target: '0xa35b1b31ce002fbf2058d22f30f95d405200a15b' }) + } + } + }, + hallmarks: [ [1651881600, "UST depeg"], ] } diff --git a/projects/stafi/index.js b/projects/stafi/index.js index b39be88f9b..da7757101b 100644 --- a/projects/stafi/index.js +++ b/projects/stafi/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const {chainExports} = require('../helper/exports') const {usdtAddress} = require('../helper/balances') const {getApiTvl} = require('../helper/historicalApi'); const { fetchURL } = require('../helper/utils'); -const wethAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const wethAddress = ADDRESSES.ethereum.WETH async function ethereum(timestamp, block) { const supply = await sdk.api.erc20.totalSupply({ @@ -24,6 +25,9 @@ const chainToParams={ kusama: ["RKSM", "kusama"], solana: ["RSOL", "solana"], cosmos: ["RATOM", "cosmos"], + carbon: ["RSWTH", "switcheo"], + chihuahua: ["RHUAHUA", "chihuahua-token"], + irisnet:["RIRIS","iris-network"] } function getTvlFunction(token, cgId){ @@ -53,17 +57,17 @@ function chainTvl(chain){ module.exports = { timetravel: true, ethereum: { - tvl: ethereum, + tvl: sdk.util.sumChainTvls([chainTvl('polygon'), ethereum]), staking: getTvlFunction("RFIS", "stafi") }, bsc: { tvl: chainTvl('bsc') - }, + },/* polygon: { - tvl: chainTvl('polygon') - }, + tvl: chainTvl('polygon') //exported along with ethereum tvl since MATIC's are staked on the Ethereum Mainnet + },*/ cosmos: { - tvl: chainTvl('cosmos') + tvl: sdk.util.sumChainTvls([chainTvl('cosmos'), chainTvl('carbon'), chainTvl('chihuahua'), chainTvl('irisnet')]) }, solana: { tvl: chainTvl('solana') diff --git a/projects/stakedao/index.js b/projects/stakedao/index.js index bb29a55831..9382c955e7 100644 --- a/projects/stakedao/index.js +++ b/projects/stakedao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require('./abi.json') const { sumTokens2 } = require('../helper/unwrapLPs') @@ -77,19 +78,19 @@ async function tvl(timestamp, block, _, { api }) { const angle_sanUSDC_V3 = { contract: angle_protocol.locker, sanUsdcEurGauge: '0x51fE22abAF4a26631b2913E417c0560D547797a7', - usdcToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + usdcToken: ADDRESSES.ethereum.USDC, abi: 'balanceOf', } const angle_sanDAI_V3 = { contract: angle_protocol.locker, sanDaiEurGauge: '0x8E2c0CbDa6bA7B65dbcA333798A3949B07638026', - daiToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + daiToken: ADDRESSES.ethereum.DAI, abi: 'balanceOf', } const angle_sanFRAX_V3 = { contract: angle_protocol.locker, sanFraxEurGauge: '0xb40432243E4F317cE287398e72Ab8f0312fc2FE8', - fraxToken: '0x853d955aCEf822Db058eb8505911ED77F175b99e', + fraxToken: ADDRESSES.ethereum.FRAX, abi: 'balanceOf', } const angle_sushi_agEUR_V3 = { @@ -112,13 +113,15 @@ async function tvl(timestamp, block, _, { api }) { sanFraxEurV3, angleSushiAgEurV3, angleGuniAgEurUSDCV3, - ] = await api.multiCall({ abi: abi[angle_sanUSDC_V3.abi], calls: [ - angle_sanUSDC_V3.sanUsdcEurGauge, - angle_sanDAI_V3.sanDaiEurGauge, - angle_sanFRAX_V3.sanFraxEurGauge, - angle_sushi_agEUR_V3.sushiAgEURGauge, - angle_guni_agEUR_usdc_V3.guniAgEURUsdcGauge, - ].map(i => ({ target: i, params: angle_sanUSDC_V3.contract}))}) + ] = await api.multiCall({ + abi: abi[angle_sanUSDC_V3.abi], calls: [ + angle_sanUSDC_V3.sanUsdcEurGauge, + angle_sanDAI_V3.sanDaiEurGauge, + angle_sanFRAX_V3.sanFraxEurGauge, + angle_sushi_agEUR_V3.sushiAgEURGauge, + angle_guni_agEUR_usdc_V3.guniAgEURUsdcGauge, + ].map(i => ({ target: i, params: angle_sanUSDC_V3.contract })) + }) // ==== Calls Rate ==== // const [ @@ -158,16 +161,60 @@ async function tvl(timestamp, block, _, { api }) { lockersInfos.push({ contract: `${resp[i].infos.locker}`, veToken: `${resp[i].infos.ve}`, token: `${resp[i].infos.token}` }) } + // To deal with special vePendle case + const vePendle = "0x4f30A9D41B80ecC5B94306AB4364951AE3170210" + const veMAV = "0x4949Ac21d5b2A0cCd303C20425eeb29DCcba66D8".toLowerCase() const calls = [] - for (let i = 0; i < lockersInfos.length; ++i) - calls.push({ - target: lockersInfos[i].veToken, - params: lockersInfos[i].contract - }) - const lockerBals = await api.multiCall({ abi: abi.locked, calls }) - lockerBals.forEach(({ amount }, i) => sdk.util.sumSingleBalance(balances, lockersInfos[i].token, amount)) - - return sumTokens2({ api, tokensAndOwners: strategies, balances, }) + const callsPendle = [] + const callsMAV = [] + for (let i = 0; i < lockersInfos.length; ++i) { + if (lockersInfos[i].veToken == vePendle) { + callsPendle.push({ + target: lockersInfos[i].veToken, + params: lockersInfos[i].contract + }) + } else if (lockersInfos[i].veToken.toLowerCase() == veMAV) { + callsMAV.push({ + veToken: lockersInfos[i].veToken, + contract: lockersInfos[i].contract + }) + } else { + calls.push({ + target: lockersInfos[i].veToken, + params: lockersInfos[i].contract + }) + } + } + + let lockerBals = await api.multiCall({ abi: abi.locked, calls }) + let lockerPendleBal = await api.multiCall({ abi: "function positionData(address arg0) view returns (uint128 amount, uint128 end)", calls: callsPendle }) + let lockerMAVBal = [] + + for (const { contract, veToken } of callsMAV) { + const count = await api.call({ abi: 'function lockupCount(address) view returns (uint256)', target: veToken, params: contract }) + let balance = 0 + for (let i = 0; i < count; i++) { + const lockup = await api.call({ abi: 'function lockups(address,uint256) view returns (uint256 amount, uint256 end, uint256 points)', target: veToken, params: [contract, i] }) + balance += +lockup.amount + } + lockerMAVBal.push({ amount: balance, end: 0 }) + } + + console.log(lockerBals, lockerPendleBal, lockerMAVBal) + + for (let i = 0; i < lockersInfos.length; ++i) { + let amount; + if (lockersInfos[i].veToken == vePendle) { + amount = lockerPendleBal.shift().amount + } else if (lockersInfos[i].veToken.toLowerCase() == veMAV) { + amount = lockerMAVBal.shift().amount + } else { + amount = lockerBals.shift().amount + } + sdk.util.sumSingleBalance(balances, lockersInfos[i].token, amount) + } + + return sumTokens2({ api, tokensAndOwners: strategies, balances, }) } async function staking(timestamp, block) { @@ -226,7 +273,7 @@ async function bsc(timestamp, ethBlock, chainBlocks, { api }) { fusdt3EPS_vault_bsc ].map(i => i.contract) - const [bitcoin, usdc, tether] = (await api.multiCall({ abi: abi.balance, calls: vaultsBsc}) ).map(i => i/1e18) + const [bitcoin, usdc, tether] = (await api.multiCall({ abi: abi.balance, calls: vaultsBsc })).map(i => i / 1e18) return { bitcoin, tether, 'usd-coin': usdc } diff --git a/projects/stakedicp/index.js b/projects/stakedicp/index.js new file mode 100644 index 0000000000..1dd10aa8d1 --- /dev/null +++ b/projects/stakedicp/index.js @@ -0,0 +1,23 @@ +const BigNumber = require("bignumber.js"); +const axios = require('axios'); + +const url = 'https://h6uvl-xiaaa-aaaap-qaawa-cai.ic0.app/tvl'; + +async function tvl(_timestamp, _block) { + const tvl = (await axios.get(url)).data.tvl; + if (tvl === undefined) { + // API didn't return a tvl number to work with + throw new Error("Unknown"); + } + return { + "coingecko:internet-computer": BigNumber(tvl).div(1e8).toFixed(0), + }; +} + +module.exports = { + timetravel: false, + methodology: "TVL counts ICP deposited as collateral to mint stICP", + icp: { + tvl, + }, +}; diff --git a/projects/stakedotlink/index.js b/projects/stakedotlink/index.js index 9045332c7d..c345f9cb13 100644 --- a/projects/stakedotlink/index.js +++ b/projects/stakedotlink/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const sdlToken = "0xA95C5ebB86E0dE73B4fB8c47A45B792CFeA28C23"; const sdlStakingPool = "0xAEF186611EC96427d161107fFE14bba8aA1C2284"; -const linkToken = "0x514910771af9ca656af840dff83e8264ecf986ca"; +const linkToken = ADDRESSES.ethereum.LINK; const linkStakingPool = "0xb8b295df2cd735b15BE5Eb419517Aa626fc43cD5"; async function tvl(timestamp, ethBlock, chainBlocks) { diff --git a/projects/stakehound/index.js b/projects/stakehound/index.js index 64a64b7239..dfe1e698e9 100644 --- a/projects/stakehound/index.js +++ b/projects/stakehound/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); -const wethAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const wethAddress = ADDRESSES.ethereum.WETH async function tvl(timestamp, block) { const supply = await sdk.api.erc20.totalSupply({ diff --git a/projects/stakesteak/index.js b/projects/stakesteak/index.js index 828993fa5a..f254b23a9c 100644 --- a/projects/stakesteak/index.js +++ b/projects/stakesteak/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {addFundsInMasterChef} = require('../helper/masterchef') const sdk = require('@defillama/sdk') const {staking} = require('../helper/staking') const {transformFantomAddress} = require('../helper/portedTokens') const poolInfoAbi = 'function getPoolInfo(uint256 _pid) view returns (tuple(address stakingToken, uint256 stakingTokenTotalAmount, uint32 lastRewardTime, uint256[] AccRewardsPerShare, uint256[] AllocPoints))' -const tusd = "0x0000000000085d4780b73119b644ae5ecd22b376" +const tusd = ADDRESSES.ethereum.TUSD const ifusd = "0x9fC071cE771c7B27b7d9A57C32c0a84c18200F8a" async function tvl(_t, _b, chainBlocks){ diff --git a/projects/stakewise/index.js b/projects/stakewise/index.js index bcf39ecb60..280a693dac 100644 --- a/projects/stakewise/index.js +++ b/projects/stakewise/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js') const { getLogs } = require('../helper/cache/getLogs') -const wethAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +const wethAddress = ADDRESSES.ethereum.WETH async function tvl(timestamp, block, _1, { api }) { const supply = await sdk.api.erc20.totalSupply({ @@ -32,7 +33,7 @@ async function xdaiTvl(timestamp, ethBlock, { xdai: block }) { }) return { - "0x6810e776880c02933d47db1b9fc05908e5386b96": supply.output + [ADDRESSES.ethereum.GNO]: supply.output } } diff --git a/projects/standcash/index.js b/projects/standcash/index.js index fb5b061000..62665eeb70 100644 --- a/projects/standcash/index.js +++ b/projects/standcash/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -39,16 +40,12 @@ const poolContracts = [ ]; const tokenAddresses = [ - //USDT - "0xdac17f958d2ee523a2206206994597c13d831ec7", - //USDC - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - //FRAX - "0x853d955acef822db058eb8505911ed77f175b99e", + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.FRAX, //ESD "0x36F3FD68E7325a35EB768F1AedaAe9EA0689d723", - //DAI - "0x6b175474e89094c44da98b954eedeac495271d0f", + ADDRESSES.ethereum.DAI, //BAC "0x3449fc1cd036255ba1eb19d65ff4ba2b8903a69a", //AETH diff --git a/projects/starbank/index.js b/projects/starbank/index.js index 67b4fe0a7c..4b1d55824e 100644 --- a/projects/starbank/index.js +++ b/projects/starbank/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs'); module.exports = { @@ -6,11 +7,11 @@ module.exports = { owner: '0x18df7884DEa0B24334800C8b05763112Eb592ce0', tokens: [ '0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720', - '0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98', - '0x3795C36e7D12A8c252A20C5a7B455f7c57b60283', - '0x75364D4F779d0Bd0facD9a218c67f87dD9Aff3b4', - '0x6De33698e9e9b787e09d3Bd7771ef63557E148bb', - '0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E', + ADDRESSES.moonbeam.USDC, + ADDRESSES.astar.USDT, + ADDRESSES.astar.SDN, + ADDRESSES.astar.DAI, + ADDRESSES.oasis.ceUSDT, ], }) } diff --git a/projects/starfish-finance/index.js b/projects/starfish-finance/index.js index 5ec7980ef1..e04e94d4b7 100644 --- a/projects/starfish-finance/index.js +++ b/projects/starfish-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking.js"); const { onChainTvl } = require("../helper/balancer"); @@ -13,15 +14,15 @@ module.exports = { tvl: onChainTvl('0x496F6125E1cd31f268032bd4cfaA121D203639b7', 3258352, { preLogTokens: [ '0xEa093b81ca103585FC8Df82CB3D5D7F2e394AB70', - '0x75364D4F779d0Bd0facD9a218c67f87dD9Aff3b4', + ADDRESSES.astar.SDN, '0xEe8138B3bd03905cF84aFE10cCD0dCcb820eE08E', - '0x733ebcC6DF85f8266349DEFD0980f8Ced9B45f35', - '0x6De33698e9e9b787e09d3Bd7771ef63557E148bb', - '0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF', + ADDRESSES.astar.BAI, + ADDRESSES.astar.DAI, + ADDRESSES.astar.DOT, '0x5E60Af4d06A9fc89eb47B39b5fF1b1b42a19ef39', - '0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98', + ADDRESSES.moonbeam.USDC, '0xfFFfffFF000000000000000000000001000007C0', - '0x3795C36e7D12A8c252A20C5a7B455f7c57b60283', + ADDRESSES.astar.USDT, ] }), staking: staking(addresses.astar.seanStaking, addresses.astar.seanToken,), diff --git a/projects/starfish-liq-staking/index.js b/projects/starfish-liq-staking/index.js index 1cf16b04e2..ba01ddbbbd 100644 --- a/projects/starfish-liq-staking/index.js +++ b/projects/starfish-liq-staking/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { astar: { tvl: async (_, _1, _2, { api }) => { const bal = await api.call({ abi: 'uint256:internalDotBalance', target: '0x5E60Af4d06A9fc89eb47B39b5fF1b1b42a19ef39'}) - api.add('0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF', bal) + api.add(ADDRESSES.astar.DOT, bal) } } } \ No newline at end of file diff --git a/projects/stargate-finance/api.js b/projects/stargate-finance/api.js new file mode 100644 index 0000000000..606277d156 --- /dev/null +++ b/projects/stargate-finance/api.js @@ -0,0 +1,4 @@ +const index = require('./index') +const { ohmStaking } = require('../helper/treasury') + +module.exports = ohmStaking(index) \ No newline at end of file diff --git a/projects/stargate-finance/index.js b/projects/stargate-finance/index.js index 229f79c51a..e5d541b91a 100644 --- a/projects/stargate-finance/index.js +++ b/projects/stargate-finance/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0xA2B48Ad28c09cc64CcCf9eD73e1EfceD052877d5"; module.exports = ohmTvl(treasuryAddress, [ //BSC-USD - ["0x55d398326f99059ff775485246999027b3197955", false], + [ADDRESSES.bsc.USDT, false], //BUSD - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.BUSD, false], //BABY LP ["0xd397a40884ce00e662b419673e0b15cae628877f", true] , //Pancake LP diff --git a/projects/stargatefinance/index.js b/projects/stargatefinance/index.js index 2195e9fa8f..5c6978ff5b 100644 --- a/projects/stargatefinance/index.js +++ b/projects/stargatefinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require("./abi.json") const { nullAddress, sumTokens2, } = require('../helper/unwrapLPs') @@ -35,7 +36,7 @@ module.exports = { goerli:{ tvl: async (_, _b, _cb, { api, })=>{ return { - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": await api.call({ abi: 'erc20:balanceOf', target: "0xdD69DB25F6D620A7baD3023c5d32761D353D3De9", params:["0x88124ef4a9ec47e691f254f2e8e348fd1e341e9b"] }) + [ADDRESSES.ethereum.WETH]: await api.call({ abi: 'erc20:balanceOf', target: "0xdD69DB25F6D620A7baD3023c5d32761D353D3De9", params:["0x88124ef4a9ec47e691f254f2e8e348fd1e341e9b"] }) } } } diff --git a/projects/starkex/abi.js b/projects/starkex/abi.js new file mode 100644 index 0000000000..7ae4cfbdf7 --- /dev/null +++ b/projects/starkex/abi.js @@ -0,0 +1,87 @@ +const fabis = [{ + "name": "allPairs", + "type": "function", + "inputs": [ + { + "name": "index", + "type": "felt" + } + ], + "outputs": [ + { + "name": "pair", + "type": "felt" + } + ], + "stateMutability": "view" +}, +{ + "name": "allPairsLength", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "length", + "type": "felt" + } + ], + "stateMutability": "view" +} +] + +const pabis = [ + { + "name": "token0", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "token0", + "type": "felt" + } + ], + "stateMutability": "view" + }, + { + "name": "token1", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "token1", + "type": "felt" + } + ], + "stateMutability": "view" + }, + { + "name": "getReserves", + "type": "function", + "inputs": [], + "outputs": [ + { + "name": "reserve0", + "type": "felt" + }, + { + "name": "reserve1", + "type": "felt" + }, + { + "name": "blockTimestampLast", + "type": "felt" + } + ], + "stateMutability": "view" + }, +] + + +const factory = {} +const pair = {} +fabis.forEach(i => factory[i.name] = i) +pabis.forEach(i => pair[i.name] = i) + +module.exports = { + factory, pair, fabis, pabis, +} diff --git a/projects/starkex/api.js b/projects/starkex/api.js new file mode 100644 index 0000000000..e0541fe5b2 --- /dev/null +++ b/projects/starkex/api.js @@ -0,0 +1,38 @@ + +const { call, multiCall, parseAddress } = require('../helper/chain/starknet') +const abi = require('./abi') +const { transformDexBalances } = require('../helper/portedTokens') +const { getParamCalls } = require('../helper/utils') + +async function tvl() { + const factory = '0x07df3bce30857e8f9c08bcd9d9668df34166e94dd968db6e2920b870c4410e34' + let pairLength = await call({ target: factory, abi: abi.factory.allPairsLength}) + let pairs = await multiCall({ abi: abi.factory.allPairs, target: factory, calls: getParamCalls(+pairLength)}) + + const calls = pairs.map(i => parseAddress(i)) + + const [ token0s, token1s, reserves ] = await Promise.all([ + multiCall({ abi: abi.pair.token0, calls }), + multiCall({ abi: abi.pair.token1, calls }), + multiCall({ abi: abi.pair.getReserves, calls }), + ]) + + const data = [] + reserves.forEach((reserve, i) => { + data.push({ + token0: parseAddress(token0s[i]), + token1: parseAddress(token1s[i]), + token0Bal: +reserve.reserve0, + token1Bal: +reserve.reserve1, + }) + }) + + return transformDexBalances({chain:'starknet', data}) +} + +module.exports = { + timetravel: false, + starknet: { + tvl, + } +} diff --git a/projects/starkex/index.js b/projects/starkex/index.js new file mode 100644 index 0000000000..11f5177a67 --- /dev/null +++ b/projects/starkex/index.js @@ -0,0 +1 @@ +module.exports = require('./api') diff --git a/projects/starlay/abi.json b/projects/starlay/abi.json deleted file mode 100644 index a897dd15f6..0000000000 --- a/projects/starlay/abi.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "getReservesList": "address[]:getReservesList", - "getCurrentTokens": "address[]:getCurrentTokens", - "getReserveData": "function getReserveData(address _reserve) view returns (uint256 totalLiquidity, uint256 availableLiquidity, uint256 totalBorrowsStable, uint256 totalBorrowsVariable, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 utilizationRate, uint256 liquidityIndex, uint256 variableBorrowIndex, address lTokenAddress, uint40 lastUpdateTimestamp)", - "getReserveConfigurationData": "function getReserveConfigurationData(address _reserve) view returns (uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus, address interestRateStrategyAddress, bool usageAsCollateralEnabled, bool borrowingEnabled, bool stableBorrowRateEnabled, bool isActive)", - "getReserves": "address[]:getReserves", - "getAddressesProvidersList": "address[]:getAddressesProvidersList", - "getAddress": "function getAddress(bytes32 id) view returns (address)", - "getAllLTokens": "function getAllLTokens() view returns (tuple(string symbol, address tokenAddress)[])", - "getUnderlying": "address:UNDERLYING_ASSET_ADDRESS", - "getReserveDataV2": "function getReserveData(address asset) view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", - "getHelperReserveData": "function getReserveData(address asset) view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", - "getReserveTotalBorrows": "function getReserveTotalBorrows(address _reserve) view returns (uint256)" -} \ No newline at end of file diff --git a/projects/starlay/constanrs.js b/projects/starlay/constanrs.js deleted file mode 100644 index 8f84b0f069..0000000000 --- a/projects/starlay/constanrs.js +++ /dev/null @@ -1,52 +0,0 @@ -const DEFAULT_DECIMALS = 18 - -const TOKEN_INFO = { - dot: { key: "polkadot", decimals:10 }, - ausd: { key: "acala-dollar", decimals:12 } -} - -const LAY_ADDRESS = "0xc4335B1b76fA6d52877b3046ECA68F6E708a27dd" - -const TOKENS = { - // WASTR - "0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720": "astar", - // WETH - "0x81ECac0D6Be0550A00FF064a4f9dd2400585FE9c": - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - // wBTC - "0xad543f18cFf85c77E140E3E5E3c3392f6Ba9d5CA": - "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - // SDN - "0x75364D4F779d0Bd0facD9a218c67f87dD9Aff3b4": "shiden", - // USDC - "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98": - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - // USDT - "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283": - "0xdac17f958d2ee523a2206206994597c13d831ec7", - // DAI - "0x6De33698e9e9b787e09d3Bd7771ef63557E148bb": - "0x6b175474e89094c44da98b954eedeac495271d0f", - // BUSD - "0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E": "binance-usd", - // MATIC - "0xdd90E5E87A2081Dcf0391920868eBc2FFB81a1aF": "matic-network", - // BNB - "0x7f27352D5F83Db87a5A3E00f4B07Cc2138D8ee52": "binancecoin", - // DOT - "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF": TOKEN_INFO.dot.key, - // aUSD - "0xfFFFFfFF00000000000000010000000000000001": TOKEN_INFO.ausd.key, - // LAY - [LAY_ADDRESS]: "starlay-finance", -}; - -const VOTING_ESCROW_ADDRESS = "0xDf32D28c1BdF25c457E82797316d623C2fcB29C8" - -module.exports = { - DEFAULT_DECIMALS, - TOKEN_INFO, - LAY_ADDRESS, - TOKENS, - VOTING_ESCROW_ADDRESS, -} diff --git a/projects/starlay/index.js b/projects/starlay/index.js index 9936364876..fb7f3a7a12 100644 --- a/projects/starlay/index.js +++ b/projects/starlay/index.js @@ -1,65 +1,16 @@ -const { getReserves, getStarlayTvl } = require("./starlay"); -const BigNumber = require("bignumber.js"); -const { getBorrowed } = require("../helper/aave"); -const { TOKENS, TOKEN_INFO, DEFAULT_DECIMALS, LAY_ADDRESS } = require("./constanrs"); -const { getLockedLAY } = require("./ve"); - -const transferFromAddress = (underlying) => TOKENS[underlying] - -function astar(borrowed) { - return async (timestamp, _, {astar: block}) => { - const balances = {}; - const [lTokens, reserveTokens, validProtocolDataHelpers] = - await getReserves(block); - const chain = "astar"; - - if (borrowed) { - await getBorrowed( - balances, - block, - chain, - reserveTokens, - validProtocolDataHelpers, - transferFromAddress - ); - } else { - await getStarlayTvl( - balances, - block, - chain, - lTokens, - reserveTokens, - transferFromAddress - ); - } - - return Object.keys(balances).reduce((res, key) => { - if (key.startsWith("0x")) - return { ...res, [key]: balances[key] }; - for (const token of Object.values(TOKEN_INFO)) { - if (key === token.key) - return { ...res, [key]: new BigNumber(balances[key]).shiftedBy(-token.decimals).toFixed(0) }; - } - return { ...res, [key]: new BigNumber(balances[key]).shiftedBy(-DEFAULT_DECIMALS).toFixed(0) }; - }, {}); - }; -} - -async function staking(_timestamp, _block, {astar: block}) { - const chain = "astar" - const stakedLay = await getLockedLAY(chain, block) - return { - [transferFromAddress(LAY_ADDRESS)]: stakedLay.shiftedBy(-DEFAULT_DECIMALS).toFixed(0) - } -} - +const { aaveExports } = require("../helper/aave"); +const ADDRESSES = require('../helper/coreAssets.json') +const VOTING_ESCROW_ADDRESS = "0xDf32D28c1BdF25c457E82797316d623C2fcB29C8"; +const { staking } = require("../helper/staking"); module.exports = { - timetravel: true, methodology: `Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending.`, astar: { - tvl: astar(false), - borrowed: astar(true), - staking, - }, + ...aaveExports("astar", '0xF6206297b6857779443eF7Eca4a3cFFb1660F952', undefined, undefined, { + abis: { + getAllATokens: "function getAllLTokens() view returns (tuple(string symbol, address tokenAddress)[])" + } + }), + staking: staking(VOTING_ESCROW_ADDRESS, ADDRESSES.astar.LAY), + } }; diff --git a/projects/starlay/starlay.js b/projects/starlay/starlay.js deleted file mode 100644 index 4f2cb85a8d..0000000000 --- a/projects/starlay/starlay.js +++ /dev/null @@ -1,97 +0,0 @@ -const sdk = require("@defillama/sdk"); -const abi = require("./abi.json"); -const { default: BigNumber } = require("bignumber.js"); -const addressesProviderRegistry = "0xF6206297b6857779443eF7Eca4a3cFFb1660F952"; - -async function getReserves(block) { - const chain = "astar"; - const addressesProviders = ( - await sdk.api.abi.call({ - target: addressesProviderRegistry, - abi: abi["getAddressesProvidersList"], - block, - chain, - }) - ).output; - - const protocolDataHelpers = ( - await sdk.api.abi.multiCall({ - calls: addressesProviders.map((provider) => ({ - target: provider, - params: - "0x0100000000000000000000000000000000000000000000000000000000000000", - })), - abi: abi["getAddress"], - block, - chain, - }) - ).output; - const validProtocolDataHelpers = protocolDataHelpers - .filter( - (helper) => helper.output !== "0x0000000000000000000000000000000000000000" - ) - .map((p) => p.output); - - const lTokenMarketData = ( - await sdk.api.abi.multiCall({ - calls: validProtocolDataHelpers.map((dataHelper) => ({ - target: dataHelper, - })), - abi: abi["getAllLTokens"], - block, - chain, - }) - ).output; - - let lTokenAddresses = []; - lTokenMarketData.map((lTokensData) => { - lTokenAddresses = [ - ...lTokenAddresses, - ...lTokensData.output.map((lToken) => lToken[1]), - ]; - }); - const underlyingAddressesData = ( - await sdk.api.abi.multiCall({ - calls: lTokenAddresses.map((lToken) => ({ - target: lToken, - })), - abi: abi["getUnderlying"], - block, - chain, - }) - ).output; - const reserveAddresses = underlyingAddressesData.map( - (reserveData) => reserveData.output - ); - return [lTokenAddresses, reserveAddresses, validProtocolDataHelpers[0]]; -} - -async function getStarlayTvl( - balances, - block, - chain, - lTokens, - reserveTokens, - transformAddress -) { - const balanceOfUnderlying = await sdk.api.abi.multiCall({ - calls: lTokens.map((lToken, index) => ({ - target: reserveTokens[index], - params: lToken, - })), - abi: "erc20:balanceOf", - block, - chain, - }); - sdk.util.sumMultiBalanceOf( - balances, - balanceOfUnderlying, - true, - transformAddress - ); -} - -module.exports = { - getReserves, - getStarlayTvl, -}; diff --git a/projects/starlay/utils.js b/projects/starlay/utils.js deleted file mode 100644 index 696def55e5..0000000000 --- a/projects/starlay/utils.js +++ /dev/null @@ -1,11 +0,0 @@ -const BigNumberJs = require("bignumber.js"); -BigNumberJs.config({ EXPONENTIAL_AT: 1e9 }) - -const toBigNumberJsOrZero = (value) => { - const bn = new BigNumberJs(value) - return bn.isNaN() ? new BigNumberJs('0') : bn -} - -module.exports = { - toBigNumberJsOrZero -} diff --git a/projects/starlay/ve.js b/projects/starlay/ve.js deleted file mode 100644 index 7b87a9204a..0000000000 --- a/projects/starlay/ve.js +++ /dev/null @@ -1,19 +0,0 @@ -const sdk = require("@defillama/sdk"); -const { toBigNumberJsOrZero } = require("./utils.js"); - -const { VOTING_ESCROW_ADDRESS, LAY_ADDRESS } = require("./constanrs"); - -const getLockedLAY = async (chain, block) => { - const lockedLAYBalance = (await sdk.api.abi.call({ - target: LAY_ADDRESS, - abi: 'erc20:balanceOf', - params: [VOTING_ESCROW_ADDRESS], - block, - chain, - })).output - return toBigNumberJsOrZero(lockedLAYBalance) -} - -module.exports = { - getLockedLAY -} diff --git a/projects/starmaker/index.js b/projects/starmaker/index.js new file mode 100644 index 0000000000..c40d3eadde --- /dev/null +++ b/projects/starmaker/index.js @@ -0,0 +1,9 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + era: { + tvl: getUniTVL({ factory: '0x7096Cebc52012e2611a1E88c45bC54ee2A88dcB4', useDefaultCoreAssets: true, fetchBalances: true, }), + }, + methodology: "Counts liquidity in pools", +}; \ No newline at end of file diff --git a/projects/steadefi/index.js b/projects/steadefi/index.js new file mode 100644 index 0000000000..e6f3bdd1eb --- /dev/null +++ b/projects/steadefi/index.js @@ -0,0 +1,44 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { getConfig } = require('../helper/cache'); +const { sumTokens2 } = require('../helper/unwrapLPs'); + +async function getProjectInfo() { + return Promise.all([ + getConfig('steadefi/lendingPools', 'https://api.steadefi.com/lending-pools'), + getConfig('steadefi/vaults', 'https://api.steadefi.com/vaults'), + ]) +} + +const config = { + arbitrum: { fsglp: ADDRESSES.arbitrum.fsGLP }, + avax: { fsglp: '0x9e295B5B976a184B14aD8cd72413aD846C299660' }, +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const { fsglp } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const chainId = api.getChainId() + let [lendingPools, vaults] = await getProjectInfo() + lendingPools = lendingPools.filter(i => i.chainId === chainId).map(i => i.address) + vaults = vaults.filter(i => i.chainId === chainId).map(i => i.address) + const lpAssets = await api.multiCall({ abi: 'address:asset', calls: lendingPools }) + const managers = await api.multiCall({ abi: 'address:manager', calls: vaults }) + let lpTokens = await api.multiCall({ abi: 'address:lpToken', calls: managers, permitFailure: true, }) + const glpPoolManagers = managers.filter((_, i) => !lpTokens[i]) + glpPoolManagers.forEach(v => { + lpAssets.push(fsglp) + lendingPools.push(v) + }) + const lpPoolManagers = managers.filter((_, i) => lpTokens[i]) + lpTokens = lpTokens.filter(i => i) + const bals = await api.multiCall({ abi: 'uint256:lpTokenAmt', calls: lpPoolManagers }) + api.addTokens(lpTokens, bals) + // api.add('tether', tokenValue.reduce((a, v) => a + v/1e13, 0), { skipChain: true}) + return sumTokens2({ api, tokensAndOwners2: [lpAssets, lendingPools] }) + } + } +}) \ No newline at end of file diff --git a/projects/steak/terra.js b/projects/steak/terra.js index 05a53da536..d7b4fdcea0 100644 --- a/projects/steak/terra.js +++ b/projects/steak/terra.js @@ -6,15 +6,7 @@ const GRPC_API_URL = "https://lcd.terra.dev"; const STEAK_HUB = "terra15qr8ev2c0a0jswjtfrhfaj5ucgkhjd7la2shlg"; async function tvl() { - const queryMsg = { state: {} }; - - const response = await axios.get( - `${GRPC_API_URL}/terra/wasm/v1beta1/contracts/${STEAK_HUB}/store?query_msg=${encodeBase64(queryMsg)}` - ); - - return { - "terra-luna": parseInt(response.data.query_result.total_uluna) / 1e6, - }; + return {} } module.exports = { tvl }; diff --git a/projects/steakbank/index.js b/projects/steakbank/index.js index 7f24ddeed2..9a4f7c52c8 100644 --- a/projects/steakbank/index.js +++ b/projects/steakbank/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const abis = require('./abis.json') const stakingContract = "0x79DB0dAa012F4b98F332A9D45c80A1A3FFaa6f9a" -const wbnb = "bsc:0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c" +const wbnb = "bsc:" + ADDRESSES.bsc.WBNB async function tvl(timestamp, ethBlock, chainBlocks){ const stakedBNB = await sdk.api.abi.call({ diff --git a/projects/steer/index.js b/projects/steer/index.js new file mode 100644 index 0000000000..968135991b --- /dev/null +++ b/projects/steer/index.js @@ -0,0 +1,43 @@ +const { getLogs } = require('../helper/cache/getLogs') +const config = { + polygon: { registry: '0x24825b3c44742600d3995d1d3760ccee999a7f0b', fromBlock: 41535540, }, + arbitrum: { registry: '0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc', fromBlock: 88698956, }, + optimism: { registry: '0xC1Ecd10398A6D7036CceE1f50551ff169715081c', fromBlock: 96971465, }, + avax: { registry: '0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc', fromBlock: 30434642, }, + bsc: { registry: '0x31e4ee367d4f2685BAfcAb9566e9C87E60D48983', fromBlock: 28461459, }, + evmos: { registry: '0xD90c8970708FfdFC403bdb56636621e3E9CCe921', fromBlock: 13671900, }, + metis: { registry: '0x116Dba5DcE9CcDA828218b7eB46406810632014C', fromBlock: 6067741, }, + polygon_zkevm: { registry: '0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc', fromBlock: 1022413, }, + celo: { registry: '0x116Dba5DcE9CcDA828218b7eB46406810632014C', fromBlock: 19813127, }, + thundercore: { registry: '0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9', fromBlock: 135181847, }, +} + +module.exports = {}; + +Object.keys(config).forEach(chain => { + const { registry, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: registry, + topic: "VaultCreated(address,address,string,uint256,address)", + eventAbi: 'event VaultCreated(address deployer, address vault, string beaconName, uint256 indexed tokenId, address vaultManager)', + onlyArgs: true, + fromBlock, + }) + const vaults = logs.map(log => log.vault) + const bals = await api.multiCall({ abi: "function getTotalAmounts() view returns (uint256 total0, uint256 total1)", calls: vaults, permitFailure: true, }) + const token0s = await api.multiCall({ abi: "address:token0", calls: vaults, permitFailure: true, }) + const token1s = await api.multiCall({ abi: "address:token1", calls: vaults, permitFailure: true, }) + bals.forEach((bal, i) => { + const token0 = token0s[i] + const token1 = token1s[i] + if (!bal || !token0 || !token1) return // skip failures + api.add(token0, bal.total0) + api.add(token1, bal.total1) + }) + return api.getBalances() + } + } +}) \ No newline at end of file diff --git a/projects/stellaswap-v3/index.js b/projects/stellaswap-v3/index.js new file mode 100644 index 0000000000..460e043759 --- /dev/null +++ b/projects/stellaswap-v3/index.js @@ -0,0 +1,9 @@ +const { uniV3Export } = require("../helper/uniswapV3"); + +module.exports = uniV3Export({ + moonbeam: { + factory: "0xabe1655110112d0e45ef91e94f8d757e4ddba59c", + fromBlock: 2649801, + isAlgebra: true, + }, +}); diff --git a/projects/stellaswap.js b/projects/stellaswap.js index 3e8fc3d4ef..3f373be999 100644 --- a/projects/stellaswap.js +++ b/projects/stellaswap.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { getUniTVL } = require('./helper/unknownTokens') const { staking } = require('./helper/staking') const sdk = require('@defillama/sdk') @@ -16,6 +17,8 @@ async function stablePoolTVL(_, _b, { [chain]: block }) { '0xb86271571c90ad4e0c9776228437340b42623402', // ETH '0x7FbE3126C03444D43fC403626ec81E3e809E6b46', // MAI B4P '0xB1BC9f56103175193519Ae1540A0A4572b1566F6', // 4pool WH + '0x5c3dc0ab1bd70c5cdc8d0865e023164d4d3fd8ec', // Frax pool + '0x95953409374e1ed252c6D100E7466E346E3dC5b9', // 2pool ] let { output: lpTokens } = await sdk.api.abi.multiCall({ @@ -47,7 +50,7 @@ module.exports = { misrepresentedTokens: true, moonbeam: { tvl: sdk.util.sumChainTvls([dexTVL, stablePoolTVL]), - staking: staking('0x06A3b410b681c82417A906993aCeFb91bAB6A080', '0x0E358838ce72d5e61E0018a2ffaC4bEC5F4c88d2', 'moonbeam') + staking: staking('0x06A3b410b681c82417A906993aCeFb91bAB6A080', ADDRESSES.moonbeam.STELLA, 'moonbeam') } } diff --git a/projects/stellaxyz-io/index.js b/projects/stellaxyz-io/index.js new file mode 100644 index 0000000000..915e42eb5e --- /dev/null +++ b/projects/stellaxyz-io/index.js @@ -0,0 +1,40 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs, getAddress } = require('../helper/cache/getLogs'); + +const config = { + arbitrum: { + lendingContracts: [ + '0x3251f402cc06b33e742f08e1adbe0d2e4c1ea2fa', + '0x36569fbc5a9d4c59d71e81d46db24256a09d1ad6', + '0x5ecb93b3ef882bf42fee65541942d50a7dab4b33', + '0x8e57143d14bae132210cfeec58d0c48875f7d415', + '0xab416e57ec74e87295b8a1507745a954b0bb9f02', + ], + factory: '0x573a89fBc6b4a5B11a55DC9814A1018a3A9cD0CA', + fromBlock: 101291920, + } +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const { lendingContracts, factory, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x0803371633b57311f58d10924711080d2dae75ab17c5c0c262af3887cfca00bb'], + fromBlock, + }) + + const strategies = logs.map(i => getAddress(i.data.slice(64, 64 * 2 + 2))) + const positionManagers = await api.multiCall({ abi: 'address:positionManager', calls: strategies}) + + const tokens = await api.multiCall({ abi: 'address:depositToken', calls: lendingContracts }) + await sumTokens2({ api, tokensAndOwners2: [tokens, lendingContracts] }) + return sumTokens2({ api, owners: positionManagers, resolveUniV3: true, }) + } + } +}) \ 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..281458b084 --- /dev/null +++ b/projects/steth-win/index.js @@ -0,0 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs'); + +const POOL_CONTRACT = '0x2758b8d894b08342f0d00ac5f9466fdc795e4618'; +const STETH_CONTRACT = ADDRESSES.ethereum.STETH; + +module.exports = { + methodology: 'Counts the number of stETH tokens in the pool and calculates its TVL', + ethereum: { + tvl: sumTokensExport({ owner: POOL_CONTRACT, tokens: [STETH_CONTRACT] }), + } +}; diff --git a/projects/stfil/index.js b/projects/stfil/index.js index 11adf1db8c..62785876ad 100644 --- a/projects/stfil/index.js +++ b/projects/stfil/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {sumTokens2} = require('../helper/unwrapLPs'); const {utils} = require("ethers"); const {get} = require('../helper/http'); const poolAddr = '0xC8E4EF1148D11F8C557f677eE3C73901CD796Bf6' // pool address const tokens = [ - '0x0000000000000000000000000000000000000000', // FIL + ADDRESSES.null, // FIL ] const getActiveMinersFromRPC = async () => { diff --git a/projects/stipend.js b/projects/stipend.js index 2f07f953be..1a63e27412 100644 --- a/projects/stipend.js +++ b/projects/stipend.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { staking } = require("./helper/staking.js"); module.exports = { kava: { tvl: staking( "0xfc30fE377f7E333cC1250B7768107a7Da0277c44", - "0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b", + ADDRESSES.kava.WKAVA, ) } }; diff --git a/projects/stlos-liquid-staking/index.js b/projects/stlos-liquid-staking/index.js index 9dc8558013..39c9136879 100644 --- a/projects/stlos-liquid-staking/index.js +++ b/projects/stlos-liquid-staking/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const sTlosAbi = require("./sTlos.json"); -const sTLOS = "0xb4b01216a5bc8f1c8a33cd990a1239030e60c905"; +const sTLOS = ADDRESSES.telos.STLOS; async function tvl(timestamp, _, { telos: block }) { const pooledTLOS = await sdk.api.abi.call({ diff --git a/projects/stonedefi/index.js b/projects/stonedefi/index.js index f4f09d247d..0dd3242770 100644 --- a/projects/stonedefi/index.js +++ b/projects/stonedefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const {BigNumber} = require("bignumber.js"); @@ -135,7 +136,7 @@ module.exports = { pool2: pool2s([bsccakevault, stbnbcakevault], [stbnbcakelp, bsccakelp], "bsc", addr=>{ addr = addr.toLowerCase(); if (addr === "0xd523a3c371c0c301794120c7ca9639f22c02839a") { - return "bsc:0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" + return "bsc:" + ADDRESSES.bsc.WBNB } else if (addr === "0xf7fb08c187e6cd1f2149e6c818d0b6d4d4ef1430") { return "0xe63d6b308bce0f6193aec6b7e6eba005f41e36ab" diff --git a/projects/stream/abi.js b/projects/stream/abi.js new file mode 100644 index 0000000000..59be2467e3 --- /dev/null +++ b/projects/stream/abi.js @@ -0,0 +1,4 @@ +module.exports = { + currentExchangeRate: + "function currentExchangeRate() view returns (uint256 vaultToken, uint256 baseToken)", +}; diff --git a/projects/stream/index.js b/projects/stream/index.js new file mode 100644 index 0000000000..2c07821302 --- /dev/null +++ b/projects/stream/index.js @@ -0,0 +1,42 @@ +const sdk = require("@defillama/sdk"); +const abi = require("./abi.js"); +const USDW4_TOKEN_CONTRACT = "0xadf789e61bf38c463e4ba5b2b6e9c1af6659e11b"; +const TBILL_VAULT_CLUB_BOND_CONTRACT = + "0xd86FFB404147163e19E010a0e9d4995E0e36F335"; + +async function tvl(_, _1, _2, { api }) { + const totalSupply = await api.call({ + abi: "erc20:totalSupply", + target: USDW4_TOKEN_CONTRACT, + }); + + const decimals = await api.call({ + abi: "erc20:decimals", + target: USDW4_TOKEN_CONTRACT, + }); + + const vaultBalance = await api.call({ + abi: "erc20:balanceOf", + target: USDW4_TOKEN_CONTRACT, + params: [TBILL_VAULT_CLUB_BOND_CONTRACT], + }); + + const { vaultToken, baseToken } = await api.call({ + abi: abi.currentExchangeRate, + target: TBILL_VAULT_CLUB_BOND_CONTRACT, + }); + + return { + "usd-coin": + (totalSupply - vaultBalance) / (vaultToken / baseToken) / 10 ** decimals, + }; +} + +module.exports = { + misrepresentedTokens: true, + methodology: "Calculates the TVL of the General Purpose T-Bills Vault.", + start: 16685700, + ethereum: { + tvl, + }, +}; diff --git a/projects/streamflow/index.js b/projects/streamflow/index.js index 956f69e4b5..517cc1b681 100644 --- a/projects/streamflow/index.js +++ b/projects/streamflow/index.js @@ -1,18 +1,27 @@ const { getCache } = require('../helper/http') -const SOLANA = "SOLANA"; const TVL_KEY = "tvl"; const VESTING_KEY = "tvl_vested"; const api = "https://metabase.internal-streamflow.com/_public/api/v1/stats/accumulated"; +const chains = [ + "solana", + "aptos", + "bsc", + "polygon", + "ethereum", +]; +const chainMapping = { + bsc: 'bnb' +}; -const getValueForKey = (arr, key) => { +const getValueForKey = (arr, chain, key) => { for (let i = 0; i < arr.length; i++) { - if (arr[i].chain === SOLANA && arr[i][key] !== undefined) { + if (arr[i].chain.toLowerCase() === (chainMapping[chain] || chain) && arr[i][key] !== undefined) { return arr[i][key]; } } - return null; + return 0; } async function getCachedApiRespnse() { @@ -21,14 +30,14 @@ async function getCachedApiRespnse() { return apiResponse; } -async function tvl() { +async function tvl(_, _1, _2, { api }) { return { - tether: getValueForKey(await getCachedApiRespnse(), TVL_KEY), + tether: getValueForKey(await getCachedApiRespnse(), api.chain, TVL_KEY), } } -async function vesting() { +async function vesting(_, _1, _2, { api }) { return { - tether: getValueForKey(await getCachedApiRespnse(), VESTING_KEY), + tether: getValueForKey(await getCachedApiRespnse(), api.chain, VESTING_KEY), } } @@ -36,7 +45,9 @@ module.exports = { methodology: 'Token breakdown: https://metabase.internal-streamflow.com/public/dashboard/fe3731c1-fbe4-4fb6-8960-515af1d6e72d', timetravel: false, misrepresentedTokens: true, - solana: { - tvl, vesting, - }, } +chains.forEach((chain) => { + module.exports[chain] = { + tvl, vesting + }; +}); diff --git a/projects/stride/index.js b/projects/stride/index.js index 6d2efbbd8e..ad75c2740e 100644 --- a/projects/stride/index.js +++ b/projects/stride/index.js @@ -9,6 +9,8 @@ const coinGeckoIds = { uluna: "terra-luna-2", aevmos: "evmos", inj: "injective-protocol", + uumee: "umee", + ucmdx: "comdex", }; function getCoinDenom(denom) { @@ -26,7 +28,7 @@ async function tvl() { const balances = {}; const { host_zone: hostZones } = await get( - "https://stride-library.main.stridenet.co/api/Stride-Labs/stride/stakeibc/host_zone" + "https://stride-fleet.main.stridenet.co/api/Stride-Labs/stride/stakeibc/host_zone" ); const { supply: assetBalances } = await get( diff --git a/projects/strike/index.js b/projects/strike/index.js index c93a23b020..40f8308780 100644 --- a/projects/strike/index.js +++ b/projects/strike/index.js @@ -1,5 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {fullCoumpoundExports} = require('../helper/compound') const comptroller = "0xe2e17b2CBbf48211FA7eB8A875360e5e39bA2602" -module.exports=fullCoumpoundExports(comptroller, "ethereum", "0xbEe9Cf658702527b0AcB2719c1FAA29EdC006a92", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2") \ No newline at end of file +module.exports=fullCoumpoundExports(comptroller, "ethereum", "0xbEe9Cf658702527b0AcB2719c1FAA29EdC006a92", ADDRESSES.ethereum.WETH) \ No newline at end of file diff --git a/projects/strips/index.js b/projects/strips/index.js index e285ac2af0..0068a5f02d 100644 --- a/projects/strips/index.js +++ b/projects/strips/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const abi = require('./abi.json'); const stripsContract = '0xFC03E4A954B7FF631e4a32360CaebB27B6849457'; -const usdc = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'; +const usdc = ADDRESSES.ethereum.USDC; const chain = 'arbitrum'; async function getMarkets(block) { diff --git a/projects/struct-finance/index.js b/projects/struct-finance/index.js new file mode 100644 index 0000000000..891238abff --- /dev/null +++ b/projects/struct-finance/index.js @@ -0,0 +1,29 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const addresses = { + struct: { + gmxYieldSource: "0x6aE12b0adF9716181c07D19dfe76442AB1b3817b", + gmxFactory: "0x46f8765781ac36e5e8f9937658fa311af9d735d7", + }, + token: { + fsGlp: "0x9e295b5b976a184b14ad8cd72413ad846c299660", + }, +}; + +async function tvl(ts, _, __, { api }) { + const vaults = await api.fetchList({ lengthAbi: 'uint256:totalProducts', itemAbi: "function allProducts(uint256) external view returns (address)", target: addresses.struct.gmxFactory}) + vaults.push(addresses.struct.gmxYieldSource); + + return sumTokens2({ + api, + owners: vaults, + tokens: [ADDRESSES.avax.BTC_b, ADDRESSES.avax.USDC, addresses.token.fsGlp], + }); +} + +module.exports = { + avax: { + tvl, + }, +}; diff --git a/projects/sturdy/index.js b/projects/sturdy/index.js index ced46b9041..55d9f32cb5 100644 --- a/projects/sturdy/index.js +++ b/projects/sturdy/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { aaveV2Export, } = require('../helper/aave'); const { mergeExports, } = require('../helper/utils'); @@ -7,8 +8,11 @@ module.exports = mergeExports([ }, { misrepresentedTokens: true, + hallmarks: [ + [Math.floor(new Date('2023-06-11')/1e3), 'Protocol was hacked'], + ], ethereum: aaveV2Export('0xA422CA380bd70EeF876292839222159E41AAEe17', { useOracle: true }), - fantom: aaveV2Export('0x7ff2520cd7b76e8c49b5db51505b842d665f3e9a', { useOracle: true, baseCurrency: '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e' }), + fantom: aaveV2Export('0x7ff2520cd7b76e8c49b5db51505b842d665f3e9a', { useOracle: true, baseCurrency: ADDRESSES.fantom.DAI }), methodology: "Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending.. TVL is calculated by getting the market addresses from comptroller and calling the getCash() on-chain method to get the amount of tokens locked in each of these addresses, then we get the price of each token from coingecko. To view the Borrowed amounts along with the currently liquidity, click the 'Borrowed' check box", } ]) diff --git a/projects/sudoswap-v2/index.js b/projects/sudoswap-v2/index.js new file mode 100644 index 0000000000..43b20ad057 --- /dev/null +++ b/projects/sudoswap-v2/index.js @@ -0,0 +1,34 @@ +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +async function tvl(_, _b, _cb, { api, }) { + const multicallAddy = '0xca11bde05977b3631167028862be2a173976ca11' + const logs1155 = await getLogs({ + api, + target: '0xA020d57aB0448Ef74115c112D18a9C231CC86000', + topics: ['0x2966b6b401975e778520aec46cbefbe73799119a5670feda3e8f884c7c3ffb11'], + eventAbi: 'event NewERC1155Pair(address indexed pool, uint256 initialBalance)', + onlyArgs: true, + fromBlock: 17309203, + extraKey: 'erc1155', + }) + const logs721 = await getLogs({ + api, + target: '0xA020d57aB0448Ef74115c112D18a9C231CC86000', + topics: ['0xe8e1cee58c33f242c87d563bbc00f2ac82eb90f10a252b0ba8498ae6c1dc241a'], + eventAbi: 'event NewERC721Pair(address indexed pool, uint256[] initialIds)', + onlyArgs: true, + fromBlock: 17309203, + extraKey: 'erc721', + }) + const pools = logs721.map(i => i.pool) + const allPools = [...logs1155, ...logs721].map(log => log.pool) + const nfts = await api.multiCall({ abi: 'address:nft', calls: pools}) + const ethBals = await api.multiCall({ abi: 'function getEthBalance(address) view returns (uint256)', calls: allPools, target: multicallAddy}) + ethBals.forEach(i => api.add(nullAddress, i)) + await sumTokens2({ api, tokensAndOwners2: [nfts, pools], permitFailure: true, }) +} + +module.exports = { + ethereum: { tvl, } +} \ No newline at end of file diff --git a/projects/sudoswap/index.js b/projects/sudoswap/index.js index 28ae7d9a9f..5b1235cf79 100644 --- a/projects/sudoswap/index.js +++ b/projects/sudoswap/index.js @@ -31,16 +31,15 @@ query get_pairs($lastId: String, $block: Int) { module.exports = { methodology: 'Sum up all the ETH in pools and count whitelisted NFT values as well (price fetched from chainlink)', - hallmarks: [ - [Math.floor(new Date('2022-12-06') / 1e3), 'TVL includes whitelisted nft value as well'], - ], ethereum: { tvl: async (timestamp, block, chainBlocks, { api }) => { const data = await graphFetchById({ endpoint: 'https://api.thegraph.com/subgraphs/name/zeframlou/sudoswap', query, + api, options: { - timestamp, chain: 'ethereum', chainBlocks, useBlock: true, + useBlock: true, + safeBlockLimit: 500, } }) const balances = {} @@ -62,3 +61,36 @@ module.exports = { } } } + +/* +const { getLogs } = require('../helper/cache/getLogs') +const { getCache, setCache } = require('../helper/cache') +const { nullAddress, } = require('../helper/unwrapLPs') + +module.exports = { + methodology: 'Sum up all the ETH & nfts in pools', + ethereum: { + tvl: async (_, block, _1, { api }) => { + const PairFactory = '0xb16c1342E617A5B6E4b631EB114483FDB289c0A4' + const logs = await getLogs({ + api, + target: PairFactory, + topics: ['0xf5bdc103c3e68a20d5f97d2d46792d3fdddfa4efeb6761f8141e6a7b936ca66c'], + eventAbi: 'event NewPair(address pool)', + onlyArgs: true, + fromBlock: 14645816, + }) + const pools = logs.map(i => i.pool) + const cache = await getCache('sudoswap-v1', api.chain) + if (!cache.pools) cache.nfts = [] + const missingPools = pools.slice(cache.nfts.length) + const missingNfts = await api.multiCall({ abi: 'address:nft', calls: missingPools}) + cache.nfts.push(...missingNfts) + + if (missingPools.length > 0) await setCache('sudoswap-v1', api.chain, cache) + await api.sumTokens({ owners: pools, tokens: [nullAddress]}) + return api.sumTokens({ tokensAndOwners2: [cache.nfts, pools], blacklistedTokens: ['0x08142348e6bbf233002b81047bc2f27026af10a5']}) + } + } +} +*/ \ No newline at end of file diff --git a/projects/sugarswap/index.js b/projects/sugarswap/index.js index cadf7af546..23df7132dc 100644 --- a/projects/sugarswap/index.js +++ b/projects/sugarswap/index.js @@ -1,11 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') const sdk = require('@defillama/sdk') const uniTvl = getUniTVL({ factory: '0x1486397B3C0e6fEB8c483faD2F03E8c404cAEDe7', useDefaultCoreAssets: true }) const masterchef = '0x45eecDADa0B58B0E78F94549F65FDAF447b35c17' const sugar = '0xd3ccBF3867FF0204730173eB4cad3C4B5fd07c69' -const weth = '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' +const weth = ADDRESSES.arbitrum.WETH module.exports = { + hallmarks: [ + [1673827200, "Rug Pull"] + ], misrepresentedTokens: true, arbitrum: { tvl: sdk.util.sumChainTvls([uniTvl, staking({ diff --git a/projects/summer-fi/api.js b/projects/summer-fi/api.js new file mode 100644 index 0000000000..702709855f --- /dev/null +++ b/projects/summer-fi/api.js @@ -0,0 +1,7 @@ +const {getExports} = require('../helper/heroku-api') +const chains = ['ethereum'] + +module.exports = { + timetravel: false, + ...getExports("summer-fi", chains) +} diff --git a/projects/summer-fi/constants/abi.js b/projects/summer-fi/constants/abi.js new file mode 100644 index 0000000000..5dc735e42b --- /dev/null +++ b/projects/summer-fi/constants/abi.js @@ -0,0 +1,17 @@ +module.exports = { + TriggerAdded: + "event TriggerAdded(uint256 indexed triggerId, address indexed commandAddress, uint256 indexed cdpId, bytes triggerData)", + TriggerExecuted: + "event TriggerExecuted(uint256 indexed triggerId, uint256 indexed cdpId, bytes executionData)", + TriggerRemoved: + "event TriggerRemoved(uint256 indexed cdpId, uint256 indexed triggerId)", + activeTriggers: + "function activeTriggers(uint256) view returns (bytes32 triggerHash, uint256 cdpId)", + self: "address:self", + serviceRegistry: "address:serviceRegistry", + triggersCounter: "uint256:triggersCounter", + getVaultInfo: + "function getCdpInfo(uint256 vaultId,bytes32) view returns (uint256 collateralLocked, uint256)", + ilks: "function ilks(uint256) view returns (bytes32)", + info: "function info(bytes32 ilk) view returns (string name, string symbol, uint256 class, uint256 dec, address gem, address pip, address join, address xlip)", +}; diff --git a/projects/summer-fi/constants/contracts.js b/projects/summer-fi/constants/contracts.js new file mode 100644 index 0000000000..d33ef54c98 --- /dev/null +++ b/projects/summer-fi/constants/contracts.js @@ -0,0 +1,6 @@ +module.exports = { + AutomationV1Contract: "0x6E87a7A0A03E51A741075fDf4D1FCce39a4Df01b", + McdMonitorV2: "0xa59d5E94BFE605A9a4aC7e02f5380e02061c8dd2", + CdpManager: "0x5ef30b9986345249bc32d8928b7ee64de9435e39", + IlkRegistry: "0x5a464c28d19848f44199d003bef5ecc87d090f87", +}; diff --git a/projects/summer-fi/constants/creation-blocks.js b/projects/summer-fi/constants/creation-blocks.js new file mode 100644 index 0000000000..be10d07edc --- /dev/null +++ b/projects/summer-fi/constants/creation-blocks.js @@ -0,0 +1,5 @@ +const creationBlocks = { + AutomationV1Contract: 14583413, +}; + +module.exports = creationBlocks; diff --git a/projects/summer-fi/constants/endpoints.js b/projects/summer-fi/constants/endpoints.js new file mode 100644 index 0000000000..fade9273d9 --- /dev/null +++ b/projects/summer-fi/constants/endpoints.js @@ -0,0 +1,11 @@ +const { getEnv } = require("../../helper/env"); + +const endpoints = { + aave: getEnv("SUMMER_HISTORY_ENDPOINT"), + ajna: getEnv("SUMMER_AJNA_ENDPOINT"), + makerVaults: getEnv("SUMMER_CONFIRMED_VAULTS_ENDPOINT"), +}; + +module.exports = { + endpoints, +}; diff --git a/projects/summer-fi/constants/index.js b/projects/summer-fi/constants/index.js new file mode 100644 index 0000000000..382d964231 --- /dev/null +++ b/projects/summer-fi/constants/index.js @@ -0,0 +1,11 @@ +const creationBlocks = require("./creation-blocks"); +const abi = require("./abi"); +const contracts = require("./contracts"); +const logsTopic = require("./logs-topic"); + +module.exports = { + creationBlocks, + abi, + contracts, + logsTopic, +}; diff --git a/projects/summer-fi/constants/logs-topic.js b/projects/summer-fi/constants/logs-topic.js new file mode 100644 index 0000000000..46580cecb3 --- /dev/null +++ b/projects/summer-fi/constants/logs-topic.js @@ -0,0 +1,8 @@ +module.exports = { + TriggerAdded: + "0xcb616360dd177f28577e33576c8ac7ffcc1008cba7ac2323e0b2f170faf60bd2", + TriggerExecuted: + "0xc10f224f2f1ceab5e36f97effaa05c4b75eccbecd77b65bfb20c484de9096cdd", + TriggerRemoved: + "0xb4a1fc324bd863f8cd42582bebf2ce7f2d309c6a84bf371f28e069f95a4fa9e1", +}; diff --git a/projects/summer-fi/handlers/automation-v1.js b/projects/summer-fi/handlers/automation-v1.js new file mode 100644 index 0000000000..7458782616 --- /dev/null +++ b/projects/summer-fi/handlers/automation-v1.js @@ -0,0 +1,30 @@ +const { + getCdpData, + getCdpManagerData, + getIlkRegistryData, + getDecimalsData, +} = require("../helpers"); + +const automationTvl = async ({ api, cdpIdList }) => { + let positionsWithTriggersAndCollateral = 0; + + const cdpIds = [...cdpIdList]; + const ilkNames = await getCdpManagerData(cdpIds, api); + const cdpIlkIds = {} + ilkNames.forEach((val, idx) => cdpIlkIds[cdpIds[idx]] = val) + const ilkIds = [...new Set(ilkNames)]; + const tokens = (await getIlkRegistryData(ilkIds, api)).map((i) => i[4]); + const decimals = await getDecimalsData(tokens, api); + const collData = await getCdpData(cdpIds.map(i => [i, cdpIlkIds[i]]), api); + collData.forEach(({ collateralLocked }, i) => { + if (collateralLocked > 0) { + positionsWithTriggersAndCollateral++; + } + const idx = ilkIds.indexOf(ilkNames[i]); + api.add(tokens[idx], collateralLocked / 10 ** (18 - decimals[idx])); + }); +}; + +module.exports = { + automationTvl, +}; diff --git a/projects/summer-fi/handlers/dpm-positions.js b/projects/summer-fi/handlers/dpm-positions.js new file mode 100644 index 0000000000..a77cf2423f --- /dev/null +++ b/projects/summer-fi/handlers/dpm-positions.js @@ -0,0 +1,108 @@ +const BigNumber = require("bignumber.js"); +const { blockQuery } = require("../../helper/http"); +const { endpoints } = require("../constants/endpoints"); + +const NEGATIVE_WAD_PRECISION = -18; +const WETH_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; + +const aaveQuery = (block) => ` +query { + positions(first: 10000, where: { + and: [ + { collateral_gt: 0 }, + { or: [{ protocol: "AAVE" }, { protocol: "AAVE_V3" }] } + ] + }, block: { number: ${block} }) { + collateral + collateralAddress + } +}`; + +const ajnaQuery = (block) => ` +query { + accounts(first: 10000, where: { + and: [ + { isDPM: true }, + { protocol: "Ajna" }, + ] + }, block: { number: ${block} }) { + collateralToken + borrowPositions { + collateral + } + pool { + address + } + } + pools(block: { number: ${block} }) { + address + depositSize + debt + quoteTokenAddress + } +}`; + +const dpmPositions = async ({ api, }) => { + const aave = await blockQuery(endpoints.aave, aaveQuery(api.block), { api }); + const ajna = await blockQuery(endpoints.ajna, ajnaQuery(api.block), { api }); + + const supportedAjnaPools = [ + ...new Set(ajna.accounts.map(({ pool: { address } }) => address)), + ]; + + const aaveBorrowishPositions = aave.positions.map( + ({ collateral, collateralAddress }) => ({ + collateral: new BigNumber(collateral), + collateralAddress, + }) + ); + const ajnaBorrowishPositions = ajna.accounts + .filter(({ borrowPositions }) => borrowPositions.length) + .map(({ borrowPositions: [{ collateral }], collateralToken }) => ({ + collateral: new BigNumber(collateral).shiftedBy(NEGATIVE_WAD_PRECISION), + collateralAddress: collateralToken, + })); + const ajnaEarnPositions = ajna.pools + .filter(({ address }) => supportedAjnaPools.includes(address)) + .map(({ debt, depositSize, quoteTokenAddress }) => ({ + collateral: new BigNumber(depositSize) + .minus(new BigNumber(debt)) + .shiftedBy(NEGATIVE_WAD_PRECISION), + collateralAddress: quoteTokenAddress, + })); + + const tokensWithAmounts = [ + ...aaveBorrowishPositions, + ...ajnaBorrowishPositions, + ...ajnaEarnPositions, + ].reduce( + (total, { collateral, collateralAddress }) => ({ + ...total, + [collateralAddress]: total[collateralAddress] + ? total[collateralAddress].plus(collateral) + : collateral, + }), + {} + ); + + const fallbackDecimal = await api.call({ + abi: "erc20:decimals", + target: WETH_ADDRESS, + }); + const decimals = await api.multiCall({ + abi: "erc20:decimals", + calls: Object.keys(tokensWithAmounts), + }); + + Object.keys(tokensWithAmounts).forEach((collateralAddress, i) => { + api.add( + collateralAddress, + tokensWithAmounts[collateralAddress].toNumber() * + 10 ** (decimals[i] || fallbackDecimal) + ); + }); +}; + +module.exports = { + dpmPositions, +}; diff --git a/projects/summer-fi/handlers/index.js b/projects/summer-fi/handlers/index.js new file mode 100644 index 0000000000..d0ebe456ac --- /dev/null +++ b/projects/summer-fi/handlers/index.js @@ -0,0 +1,9 @@ +const { automationTvl } = require("./automation-v1"); +const { dpmPositions } = require("./dpm-positions"); +const { makerTvl } = require("./maker-vaults"); + +module.exports = { + automationTvl, + dpmPositions, + makerTvl, +}; diff --git a/projects/summer-fi/handlers/maker-vaults.js b/projects/summer-fi/handlers/maker-vaults.js new file mode 100644 index 0000000000..9c2e810ded --- /dev/null +++ b/projects/summer-fi/handlers/maker-vaults.js @@ -0,0 +1,44 @@ +const { + getCdpData, + getCdpManagerData, + getIlkRegistryData, + getDecimalsData, +} = require("../helpers"); + +const makerTvl = async ({ api, cdpIdList, confirmedSummerFiMakerVaults }) => { + const confirmedSummerFiMakerVaultsArray = [ + ...Object.keys(confirmedSummerFiMakerVaults), + ]; + const confirmedSummerFiMakerVaultsSet = new Set( + confirmedSummerFiMakerVaultsArray + ); + ([...cdpIdList]).forEach((cdpId) => { + confirmedSummerFiMakerVaultsSet.delete(cdpId); + }); + + const filteredVaultsList = [...confirmedSummerFiMakerVaultsSet].filter( + (i) => { + const [startBlock] = confirmedSummerFiMakerVaults[i]; + return api.block > startBlock; + } + ); + const cdpIds = [...new Set(filteredVaultsList)] + const ilkNames = await getCdpManagerData(cdpIds, api); + const cdpIlkIds = {} + ilkNames.forEach((val, idx) => cdpIlkIds[cdpIds[idx]] = val) + const ilkIds = [...new Set(ilkNames)]; + const tokens = (await getIlkRegistryData(ilkIds, api)).map((i) => i[4]); + const decimals = await getDecimalsData(tokens, api); + const collData = await getCdpData(filteredVaultsList.map(i => [i, cdpIlkIds[i]]), api); + collData.forEach(({ collateralLocked }, i) => { + const idx = ilkIds.indexOf(ilkNames[i]); + if (idx === -1) { + return; + } + api.add(tokens[idx], collateralLocked / 10 ** (18 - decimals[idx])); + }); +}; + +module.exports = { + makerTvl, +}; diff --git a/projects/summer-fi/helpers/calls.js b/projects/summer-fi/helpers/calls.js new file mode 100644 index 0000000000..cf2c8223d9 --- /dev/null +++ b/projects/summer-fi/helpers/calls.js @@ -0,0 +1,94 @@ +const { sliceIntoChunks } = require("@defillama/sdk/build/util/index.js"); +const abi = require("../constants/abi.js"); +const contracts = require("../constants/contracts.js"); +const sdk = require("@defillama/sdk"); + +const getCdpData = async (cdpIds, api) => { + const res = []; + const chunks = sliceIntoChunks(cdpIds, 100); + for (const chunk of chunks) + res.push( + ...(await api.multiCall({ + abi: abi.getVaultInfo, + target: contracts.McdMonitorV2, + calls: chunk.map(i => ({ params: i})), + })) + ); + + return res; +}; + +const getCdpManagerData = async (cdpIds, api) => { + return cachedCalls({ + items: cdpIds, + multiCall: async (calls) => + api.multiCall({ + abi: abi.ilks, + target: contracts.CdpManager, + calls, + }), + key: "getCdpManagerData", + }); +}; + +const getIlkRegistryData = async (ilks, api) => { + return cachedCalls({ + items: ilks, + multiCall: async (calls) => + api.multiCall({ + abi: abi.info, + target: contracts.IlkRegistry, + calls, + }), + key: "getIlkRegistryData", + }); +}; + +const getDecimalsData = async (tokens, api) => { + return cachedCalls({ + items: tokens, + multiCall: async (calls) => + api.multiCall({ + abi: "erc20:decimals", + calls, + }), + key: "getDecimalsData", + }); +}; + +let cache = {}; +function setCallCache(_cache) { + cache = _cache; +} + +async function cachedCalls({ items, multiCall, key }) { + if (!cache[key]) cache[key] = {}; + const res = []; + const missingIds = []; + const missingIndices = []; + items.forEach((id, i) => { + if (cache[key][id]) res[i] = cache[key][id]; + else { + missingIds.push(id); + missingIndices.push(i); + } + }); + + if (missingIds.length) { + sdk.log("Missing ids", missingIds.length, "key", key); + const tempRes = await multiCall(missingIds); + missingIds.forEach((id, i) => { + res[missingIndices[i]] = tempRes[i]; + cache[key][id] = tempRes[i]; + }); + } + return res; +} + +module.exports = { + getCdpData, + getCdpManagerData, + getIlkRegistryData, + getDecimalsData, + setCallCache, +}; diff --git a/projects/summer-fi/helpers/get-automation-cdp-ids.js b/projects/summer-fi/helpers/get-automation-cdp-ids.js new file mode 100644 index 0000000000..6df1731a7f --- /dev/null +++ b/projects/summer-fi/helpers/get-automation-cdp-ids.js @@ -0,0 +1,52 @@ +const { getLogs } = require("../../helper/cache/getLogs"); + +const { abi, contracts, logsTopic, creationBlocks } = require("../constants"); + +const getAutomationCdpIdList = async ({ api }) => { + const cdpIdList = new Set(); + const [triggerAddedEvents, triggerRemovedEvents, triggerExecutedEvents] = + await Promise.all( + Object.keys(logsTopic).map((key) => + getLogs({ + api, + fromBlock: creationBlocks.AutomationV1Contract, + target: contracts.AutomationV1Contract, + topics: [logsTopic[key]], + eventAbi: abi[key], + extraKey: key, + onlyArgs: true, + }) + ) + ); + const triggerEvents = [ + ...triggerAddedEvents.map((event) => ({ + cdp: event.cdpId.toString(), + trigger: event.triggerId.toString(), + action: "triggerAdded", + })), + ...triggerRemovedEvents.map((event) => ({ + cdp: event.cdpId.toString(), + trigger: event.triggerId.toString(), + action: "triggerRemoved", + })), + ...triggerExecutedEvents.map((event) => ({ + cdp: event.cdpId.toString(), + trigger: event.triggerId.toString(), + action: "triggerExecuted", + })), + ].sort((a, b) => a.trigger - b.trigger); + + triggerEvents.forEach((event) => { + const { cdp, action } = event; + if (action === "triggerAdded") { + cdpIdList.add(cdp); + } else if (action === "triggerRemoved" || action === "triggerExecuted") { + cdpIdList.delete(cdp); + } + }); + return cdpIdList; +}; + +module.exports = { + getAutomationCdpIdList, +}; diff --git a/projects/summer-fi/helpers/index.js b/projects/summer-fi/helpers/index.js new file mode 100644 index 0000000000..ccad34a095 --- /dev/null +++ b/projects/summer-fi/helpers/index.js @@ -0,0 +1,17 @@ +const { getAutomationCdpIdList } = require("./get-automation-cdp-ids"); +const { + getCdpData, + getCdpManagerData, + getIlkRegistryData, + getDecimalsData, + setCallCache, +} = require("./calls"); + +module.exports = { + setCallCache, + getAutomationCdpIdList, + getCdpData, + getCdpManagerData, + getIlkRegistryData, + getDecimalsData, +}; diff --git a/projects/summer-fi/index.js b/projects/summer-fi/index.js new file mode 100644 index 0000000000..8ac5635c8e --- /dev/null +++ b/projects/summer-fi/index.js @@ -0,0 +1,33 @@ +const { automationTvl, dpmPositions, makerTvl } = require("./handlers"); +const { getAutomationCdpIdList, setCallCache } = require("./helpers"); +const sdk = require("@defillama/sdk"); +const { getConfig, getCache, setCache } = require("../helper/cache"); +const { endpoints } = require("./constants/endpoints"); + +module.exports = { + doublecounted: true, + ethereum: { tvl }, +}; + +async function tvl(_, _1, _2, { api }) { + await api.getBlock(); + const executionStart = Date.now() / 1000; + const [confirmedSummerFiMakerVaults, cdpIdList, cache] = await Promise.all([ + await getConfig("summer-fi/maker-vaults", endpoints.makerVaults), + getAutomationCdpIdList({ api }), + getCache("summer-fi/cache", api.chain), + ]); + + setCallCache(cache); + + sdk.log([...cdpIdList].length, "cdpIdList"); + + await Promise.all([ + dpmPositions({ api }), + automationTvl({ api, cdpIdList }), + makerTvl({ api, cdpIdList, confirmedSummerFiMakerVaults }), + ]); + + await setCache("summer-fi/cache", api.chain, cache); + sdk.log("Execution time", Date.now() / 1000 - executionStart, "seconds"); +} diff --git a/projects/summitdefi/index.js b/projects/summitdefi/index.js index cbf1851cc0..2d3b40002b 100644 --- a/projects/summitdefi/index.js +++ b/projects/summitdefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); const abi = require("./abi.json"); @@ -152,7 +153,7 @@ async function staking(timestamp, block, chainBlocks) { block, chain })).output; - sdk.util.sumSingleBalance(balances, "fantom:0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", BigNumber(summitInEverest).times(summitValueInUSDC).toFixed(0)); + sdk.util.sumSingleBalance(balances, "fantom:" + ADDRESSES.fantom.DAI, BigNumber(summitInEverest).times(summitValueInUSDC).toFixed(0)); return balances; } diff --git a/projects/sun/index.js b/projects/sun/index.js index 72a83ffdbd..916ed60c3b 100644 --- a/projects/sun/index.js +++ b/projects/sun/index.js @@ -1,109 +1,100 @@ -const sdk = require('@defillama/sdk') -const { getTokenBalance, getTrxBalance, unverifiedCall, sumTokens } = require('../helper/chain/tron'); +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') const pools = [ { pool: 'TKcEU8ekq2ZoFzLSGFYCUY6aocJBX9X31b', stablecoins: [ - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", // USDT - "TMwFHYXLJaRUPeW6421aqXL4ZEzPRFGkGT", // // USDJ - "TUpMhErZL2fhh4sVNULAbNKLokS4GjC1F4", // // TUSD + ADDRESSES.tron.USDT, // USDT + ADDRESSES.tron.USDJ, + ADDRESSES.tron.TUSD, ] }, { pool: 'TKVsYedAY23WFchBniU7kcx1ybJnmRSbGt', stablecoins: [ // USDD 3pool - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", // USDT - "TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn", // USDD - "TUpMhErZL2fhh4sVNULAbNKLokS4GjC1F4", // // TUSD + ADDRESSES.tron.USDT, // USDT + ADDRESSES.tron.USDD, // USDD + ADDRESSES.tron.TUSD, ] }, { pool: 'TAUGwRhmCP518Bm4VBqv7hDun9fg8kYjC4', stablecoins: [ // USDD 2pool - "TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn", // USDD - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", // USDT + ADDRESSES.tron.USDD, // USDD + ADDRESSES.tron.USDT, // USDT ] }, { pool: 'TQx6CdLHqjwVmJ45ecRzodKfVumAsdoRXH', stablecoins: [ - "TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8", // // USDC + ADDRESSES.tron.USDC, // // USDC ] }, { pool: 'TB6zgiG14iQkNxqU4mYe7cMiS5aCYfyidL', stablecoins: [ - "TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8", // // USDC + ADDRESSES.tron.USDC, // // USDC ] }, { pool: 'TNTfaTpkdd4AQDeqr8SGG7tgdkdjdhbP5c', stablecoins: [ // USDD 2pool - "TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn", // USDD - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", // USDT + ADDRESSES.tron.USDD, // USDD + ADDRESSES.tron.USDT, // USDT ] }, { pool: 'TExeaZuD5YPi747PN5yEwk3Ro9eT2jJfB6', stablecoins: [ // USDC 2pool - "TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8", // // USDC - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", // USDT + ADDRESSES.tron.USDC, // // USDC + ADDRESSES.tron.USDT, // USDT ] }, { pool: 'TS8d3ZrSxiGZkqhJqMzFKHEC1pjaowFMBJ', stablecoins: [ // new TUSD 2pool - "TUpMhErZL2fhh4sVNULAbNKLokS4GjC1F4", // // TUSD - "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", // USDT + ADDRESSES.tron.TUSD, + ADDRESSES.tron.USDT, // USDT ] }, { pool: 'TE7SB1v9vRbYRe5aJMWQWp9yfE2k9hnn3s', stablecoins: [ // new USDD/2USD - "TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8", // // USDC + ADDRESSES.tron.USDC, // // USDC ] }, { pool: 'TKBqNLyGJRQbpuMhaT49qG7adcxxmFaVxd', stablecoins: [ // new USDJ/2USD - "TMwFHYXLJaRUPeW6421aqXL4ZEzPRFGkGT", // // USDJ + ADDRESSES.tron.USDJ, ] }, { pool: 'TLssvTsY4YZeDPwemQvUzLdoqhFCbVxDGo', stablecoins: [ // new USDC/2USD - "TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn", // USDD + ADDRESSES.tron.USDD, // USDD ] } ] - async function tvl() { - const tokensAndOwners = pools.map(({ pool, stablecoins}) => { - return stablecoins.map(v => [v, pool]) - }).flat() - return sumTokens({ tokensAndOwners }) - } +const ownerTokens = pools.map(({ pool, stablecoins }) => { + return [stablecoins, pool] +}) const stakingContract = "TXbA1feyCqWAfAQgXvN1ChTg82HpBT8QPb" -const sun = "TSSMHYeV2uE9qYH95DqyoCuNCzEL1NvU3S" -async function staking() { - return { - "sun-token": await getTokenBalance(sun, stakingContract) - } -} +const sun = ADDRESSES.tron.SUN const lpToken = 'TDQaYrhQynYV9aXTYj63nwLAafRffWSEj6' const oldLpStaking = "TGsymdggp98tLKZWGHcGX58TjTcaQr9s4x" const lpStaking = "TAkrcKsS5FW9f3ZfzvWy6Zvsz9uEjUxPoV" -async function pool2() { +/* async function pool2() { + const { api } = arguments[3] const [lpTokenAmount, sunInLp, trxInLp, totalSupply] = await Promise.all([ getTokenBalance(lpToken, lpStaking), getTokenBalance(sun, lpToken), getTrxBalance(lpToken), - unverifiedCall({ target: lpToken, abi: 'totalSupply()', isBigNumber: true }), + call({ target: lpToken, abi: 'totalSupply()', resTypes: ['number'] }), ]) - return { - "sun-token": sunInLp * lpTokenAmount / (totalSupply / 10 ** 6), - "tron": trxInLp * lpTokenAmount / totalSupply, - } + api.add(sun, sunInLp * lpTokenAmount / totalSupply) + api.add(nullAddress, trxInLp * lpTokenAmount / totalSupply) } - + */ module.exports = { tron: { - tvl, - staking, - pool2 + tvl: sumTokensExport({ ownerTokens }), + staking: sumTokensExport({ owner: stakingContract, tokens: [sun] }), + // pool2 }, } diff --git a/projects/sunSwap/index.js b/projects/sunSwap/index.js deleted file mode 100644 index 2dc34a6ee5..0000000000 --- a/projects/sunSwap/index.js +++ /dev/null @@ -1,28 +0,0 @@ -const axios = require('axios') - -let nowDate = new Date(); -nowDate.setFullYear(nowDate.getFullYear() - 1); -let T = parseInt(nowDate.getTime() / 1000); - -const url = "https://apilist.tronscan.org/api/defiTvl?type=tvlline&project=&startTime=" + T; - -function getItemByName (projectName, listArr) { - for (let i = 0; i < listArr.length; i++) { - if (listArr[i].project === projectName) { - return listArr[i]; - } - } -} - -async function fetch(){ - const pools = await axios.get(url); - let item = getItemByName('SUN.io', pools.data.projects); - return parseInt(item.locked); -} - -module.exports = { - tron: { - fetch - }, - fetch -} \ No newline at end of file diff --git a/projects/sunswap-v2/api.js b/projects/sunswap-v2/api.js new file mode 100644 index 0000000000..4d82220cd4 --- /dev/null +++ b/projects/sunswap-v2/api.js @@ -0,0 +1,7 @@ +const {getExports} = require('../helper/heroku-api') +const chains = ['tron'] + +module.exports = { + timetravel: false, + ...getExports("sunswap-v2", chains) +} diff --git a/projects/sunswap-v2/index.js b/projects/sunswap-v2/index.js new file mode 100644 index 0000000000..8d96bbac22 --- /dev/null +++ b/projects/sunswap-v2/index.js @@ -0,0 +1,9 @@ +const { getUniTVL } = require('../helper/unknownTokens.js') + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + tron: { + tvl: getUniTVL({ factory: 'TKWJdrQkqHisa1X8HUdHEfREvTzw4pMAaY', useDefaultCoreAssets: true, queryBatched: 21 }), + } +} diff --git a/projects/superbots/index.js b/projects/superbots/index.js index b070cb5ed8..a5dcb72c1a 100644 --- a/projects/superbots/index.js +++ b/projects/superbots/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const { pool2 } = require('../helper/pool2') const { staking } = require('../helper/staking') const vault_tokens = [ - '0xe9e7cea3dedca5984780bafc599bd69add087d56', // BUSD - '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', // WBNB - '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c', // BTCB - '0x2170ed0880ac9a755fd29b2688956bd959f933f8', // WETH + ADDRESSES.bsc.BUSD, // BUSD + ADDRESSES.bsc.WBNB, // WBNB + ADDRESSES.bsc.BTCB, // BTCB + ADDRESSES.bsc.ETH, // WETH ] const vaults = [ '0x4558684869b1f814b4d8b177dcb0a2e10f4e007d', diff --git a/projects/superlauncher/index.js b/projects/superlauncher/index.js new file mode 100644 index 0000000000..5579c6d7b2 --- /dev/null +++ b/projects/superlauncher/index.js @@ -0,0 +1,13 @@ +const { stakings } = require("../helper/staking"); + +const LAUNCH = "0xF6D9a093A1C69a152d87e269A7d909E9D76B1815"; +const STAKING_CONTRACT = "0xA05385Ec1F4fFe5a43336f3864Ae66f536D95602"; + +module.exports = { + misrepresentedTokens: true, + era: { + tvl: () => ({}), + staking: stakings([STAKING_CONTRACT], [LAUNCH], 'era','superlauncher-dao',18) + }, + methodology: "TVL is calculated by summing the total LAUNCH held in the staking contract.", +}; \ No newline at end of file diff --git a/projects/surfswap/index.js b/projects/surfswap/index.js index 945f956c45..2513959972 100644 --- a/projects/surfswap/index.js +++ b/projects/surfswap/index.js @@ -6,6 +6,9 @@ const dexTVL = getUniTVL({ }) module.exports = { + hallmarks: [ + [1660521600, "incentives not given"] + ], misrepresentedTokens: true, kava: { tvl:dexTVL, diff --git a/projects/surge/index.js b/projects/surge/index.js new file mode 100644 index 0000000000..92df270fbb --- /dev/null +++ b/projects/surge/index.js @@ -0,0 +1,31 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + arbitrum: { factory: '0x503A14768e23456620fB3Cb61e37A36A2736Cbd0', fromBlock: 107875529, } +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + const _getLogs = (api) => getLogs({ + api, + target: factory, + topics: ['0xfd4f84c703fbc9ed47d26b2769a6133a02ea690b88125c716c7321699d0115fa'], + eventAbi: 'event PoolDeployed(uint256 poolId, address pool, address indexed collateralToken, address indexed loanToken, uint256 indexed maxCollateralRatioMantissa, uint256 surgeMantissa, uint256 collateralRatioFallDuration, uint256 collateralRatioRecoveryDuration, uint256 minRateMantissa, uint256 surgeRateMantissa, uint256 maxRateMantissa)', + onlyArgs: true, + fromBlock, + }) + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await _getLogs(api) + const ownerTokens = logs.map(l => [[l.collateralToken, l.loanToken], l.pool]) + return sumTokens2({ api, ownerTokens, }) + }, + borrowed: async (_, _b, _cb, { api, }) => { + const logs = await _getLogs(api) + const borrowed = await api.multiCall({ abi: 'uint256:lastTotalDebt', calls: logs.map(i => i.pool) }) + api.addTokens(logs.map(i => i.loanToken), borrowed) + return api.getBalances() + }, + } +}) \ No newline at end of file diff --git a/projects/sushiswap-kashi/kashi-lending.js b/projects/sushiswap-kashi/kashi-lending.js index ca93ff369a..171a303f19 100644 --- a/projects/sushiswap-kashi/kashi-lending.js +++ b/projects/sushiswap-kashi/kashi-lending.js @@ -1,7 +1,5 @@ -const sdk = require("@defillama/sdk"); -const { request, gql } = require("graphql-request"); -const { getBlock } = require("../helper/http"); -const { getChainTransform } = require("../helper/portedTokens"); +const ADDRESSES = require('../helper/coreAssets.json') +const { blockQuery } = require("../helper/http"); const { BigNumber } = require("ethers"); const graphUrls = { @@ -22,7 +20,7 @@ const bentoboxes = { const toAmountAbi ='function toAmount(address token, uint256 share, bool roundUp) view returns (uint256 amount)' -const kashiQuery = gql` +const kashiQuery = ` query get_pairs($block: Int) { kashiPairs(block: { number: $block }, first: 1000) { id @@ -44,23 +42,19 @@ const kashiQuery = gql` `; function kashiLending(chain, borrowed) { - return async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; + return async (timestamp, ethBlock, chainBlocks, {api}) => { const graphUrl = graphUrls[chain]; - let block = await getBlock(timestamp, chain, chainBlocks) - block = block - 100; //subgraphs can be late by few seconds/minutes - const transform = await getChainTransform(chain); // Query graphql endpoint - const { kashiPairs } = await request(graphUrl, kashiQuery, { - block: block, + const { kashiPairs } = await blockQuery(graphUrl, kashiQuery, { + api }); const calls = [] kashiPairs.map(async (pair) => { if ( - pair.asset.id === "0x0000000000000000000000000000000000000000" || - pair.collateral.id === "0x0000000000000000000000000000000000000000" + pair.asset.id === ADDRESSES.null || + pair.collateral.id === ADDRESSES.null ) { return; } @@ -87,15 +81,13 @@ function kashiLending(chain, borrowed) { } }) - const { output } = await sdk.api.abi.multiCall({ - calls, chain, block, abi: toAmountAbi, target: bentoboxes[chain], + const output = await api.multiCall({ + calls,abi: toAmountAbi, target: bentoboxes[chain], }) - output.forEach(({ input: { params: [token]}, output: balance, success, }) => { - if(success) sdk.util.sumSingleBalance(balances, transform(token), balance) + output.forEach((balance, idx) => { + api.add(calls[idx].params[0], balance) }) - - return balances; }; } diff --git a/projects/sushiswap-trident/index.js b/projects/sushiswap-trident/index.js index e2a7364057..226b5e2705 100644 --- a/projects/sushiswap-trident/index.js +++ b/projects/sushiswap-trident/index.js @@ -4,7 +4,7 @@ const modulesToExport = {}; const trident_chains = [ "polygon", "optimism", - "kava", + // "kava", "metis", "bittorrent", "arbitrum", @@ -22,3 +22,5 @@ module.exports = { misrepresentedTokens: false, ...modulesToExport, }; + +module.exports.kava = { tvl: () => 0} \ No newline at end of file diff --git a/projects/sushiswap-trident/trident.js b/projects/sushiswap-trident/trident.js index 05f934a8e7..268baae7e7 100644 --- a/projects/sushiswap-trident/trident.js +++ b/projects/sushiswap-trident/trident.js @@ -1,6 +1,4 @@ -const sdk = require("@defillama/sdk"); -const { request, gql } = require("graphql-request"); -const { getChainTransform } = require("../helper/portedTokens"); +const { blockQuery } = require('../helper/http') const graphUrls = { polygon: "https://api.thegraph.com/subgraphs/name/sushi-v2/trident-polygon", @@ -17,7 +15,7 @@ const graphUrls = { avax: "https://api.thegraph.com/subgraphs/name/sushi-v2/trident-avalanche", }; -const tridentQueryWithBlock = gql` +const tridentQueryWithBlock = ` query get_tokens($block: Int) { tokens( block: { number: $block } @@ -33,7 +31,7 @@ const tridentQueryWithBlock = gql` } `; -const tridentQuery = gql` +const tridentQuery = ` query get_tokens { tokens( first: 1000 @@ -49,43 +47,23 @@ const tridentQuery = gql` `; function trident(chain) { - return async (timestamp, ethBlock, chainBlocks) => { - const balances = {}; + return async (timestamp, ethBlock, chainBlocks, { api }) => { const graphUrl = graphUrls[chain]; - const block = chainBlocks[chain]; - const transform = await getChainTransform(chain); - // Query graphql endpoint let result; - if (block) { - result = await request(graphUrl, tridentQueryWithBlock, { - block: block - 50, //subgraphs can be late by few seconds/minutes - }); - } else { - result = await request(graphUrl, tridentQuery); - } + result = await blockQuery(graphUrl, tridentQueryWithBlock, { api }); if (chain == "polygon") { //add pools that haven't been migrated to the new router result.tokens.push( - ...(!block - ? await request(graphUrls["polygonOldRouter"], tridentQuery) - : await request( - graphUrls["polygonOldRouter"], - tridentQueryWithBlock, - { - block: block - 50, //subgraphs can be late by few seconds/minutes - } - ) - ).tokens + ...(await blockQuery(graphUrls["polygonOldRouter"], tridentQuery, { api })).tokens ); } result.tokens.forEach((token) => { - sdk.util.sumSingleBalance(balances, transform(token.id), token.liquidity); + api.add(token.id, token.liquidity); }); - return balances; }; } diff --git a/projects/sushiswap-v3/index.js b/projects/sushiswap-v3/index.js index d53d1891f1..9dea5ba634 100644 --- a/projects/sushiswap-v3/index.js +++ b/projects/sushiswap-v3/index.js @@ -1,19 +1,61 @@ -const { uniV3Export } = require('../helper/uniswapV3') +const { uniV3Export } = require("../helper/uniswapV3"); module.exports = uniV3Export({ - ethereum: { factory: '0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F', fromBlock: 16955547, }, - arbitrum: { factory: '0x1af415a1EbA07a4986a52B6f2e7dE7003D82231e', fromBlock: 75998697, }, - optimism: { factory: '0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0', fromBlock: 85432013, }, - polygon: { factory: '0x917933899c6a5F8E37F31E19f92CdBFF7e8FF0e2', fromBlock: 41024971, }, - //arbitrum_nova: { factory: '0xaa26771d497814E81D305c511Efbb3ceD90BF5bd', fromBlock: 16955547, }, - avax: { factory: '0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715', fromBlock: 28186391 , }, - bsc: { factory: '0x126555dd55a39328F69400d6aE4F782Bd4C34ABb', fromBlock: 26976538 , }, - fantom: { factory: '0x7770978eED668a3ba661d51a773d3a992Fc9DDCB', fromBlock: 58860670 , }, - // fuse 0x1b9d177CcdeA3c79B6c8F40761fc8Dc9d0500EAa - xdai: { factory: '0xf78031CBCA409F2FB6876BDFDBc1b2df24cF9bEf', fromBlock: 27232871, }, - moonbeam: { factory: '0x2ecd58F51819E8F8BA08A650BEA04Fc0DEa1d523', fromBlock: 3264275, }, - moonriver: { factory: '0x2F255d3f3C0A3726c6c99E74566c4b18E36E3ce6', fromBlock: 3945310, }, - // boba 0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904 - polygon_zkevm: { factory: '0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506', fromBlock: 80860, }, -}) - + ethereum: { + factory: "0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F", + fromBlock: 16955547, + }, + arbitrum: { + factory: "0x1af415a1EbA07a4986a52B6f2e7dE7003D82231e", + fromBlock: 75998697, + }, + optimism: { + factory: "0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0", + fromBlock: 85432013, + }, + polygon: { + factory: "0x917933899c6a5F8E37F31E19f92CdBFF7e8FF0e2", + fromBlock: 41024971, + }, + arbitrum_nova: { + factory: "0xaa26771d497814e81d305c511efbb3ced90bf5bd", + fromBlock: 4242300, + }, + avax: { + factory: "0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715", + fromBlock: 28186391, + }, + bsc: { + factory: "0x126555dd55a39328F69400d6aE4F782Bd4C34ABb", + fromBlock: 26976538, + }, + fantom: { + factory: "0x7770978eED668a3ba661d51a773d3a992Fc9DDCB", + fromBlock: 58860670, + }, + fuse: { + factory: "0x1b9d177CcdeA3c79B6c8F40761fc8Dc9d0500EAa", + fromBlock: 22556035, + }, + xdai: { + factory: "0xf78031CBCA409F2FB6876BDFDBc1b2df24cF9bEf", + fromBlock: 27232871, + }, + moonbeam: { + factory: "0x2ecd58F51819E8F8BA08A650BEA04Fc0DEa1d523", + fromBlock: 3264275, + }, + moonriver: { + factory: "0x2F255d3f3C0A3726c6c99E74566c4b18E36E3ce6", + fromBlock: 3945310, + }, + // boba: { factory: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904', fromBlock: 998556, }, + polygon_zkevm: { + factory: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + fromBlock: 80860, + }, + thundercore: { + factory: "0xc35dadb65012ec5796536bd9864ed8773abc74c4", + fromBlock: 132536332, + }, +}); diff --git a/projects/sushiswap/api.js b/projects/sushiswap/api.js index c6c21a5794..977473cc2f 100644 --- a/projects/sushiswap/api.js +++ b/projects/sushiswap/api.js @@ -1,12 +1,9 @@ -const { request, gql } = require("graphql-request"); const { toUSDTBalances } = require('../helper/balances'); -const { getBlock } = require('../helper/http') +const { blockQuery } = require('../helper/http') const { getUniTVL } = require("../helper/unknownTokens") -const sdk = require('@defillama/sdk'); -const { getChainTransform } = require("../helper/portedTokens"); const graphUrl = 'https://api.thegraph.com/subgraphs/name/zippoxer/sushiswap-subgraph-fork' -const graphQuery = gql` +const graphQuery = ` query get_tvl($block: Int) { uniswapFactory( id: "0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac", @@ -17,7 +14,7 @@ query get_tvl($block: Int) { } } `; -const graphQueryPolygon = gql` +const graphQueryPolygon = ` query get_tvl($block: Int) { factory( id: "0xc35dadb65012ec5796536bd9864ed8773abc74c4", @@ -28,33 +25,16 @@ query get_tvl($block: Int) { } `; -async function eth(timestamp, ethBlock, chainBlocks) { - let block = ethBlock - if (block === undefined) { - block = await getBlock(timestamp, 'ethereum', chainBlocks) - } - const { uniswapFactory } = await request( - graphUrl, - graphQuery, - { - block: block - 50, - } - ); +async function eth(timestamp, ethBlock, chainBlocks, { api }) { + const { uniswapFactory } = await blockQuery(graphUrl, graphQuery, { api, }); const usdTvl = Number(uniswapFactory.totalLiquidityUSD) return toUSDTBalances(usdTvl) } -function getChainTVL(chain) { - return async (timestamp, _b, chainBlocks) => { - const block = await getBlock(timestamp, chain, chainBlocks, false) - const { factory } = await request( - 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange-' + chain, - graphQueryPolygon, - { - block: block - 100, - } - ); +function getChainTVL() { + return async (timestamp, _b, chainBlocks, { api }) => { + const { factory } = await blockQuery('https://api.thegraph.com/subgraphs/name/sushiswap/exchange-' + api.chain, graphQueryPolygon, { api, }); const usdTvl = Number(factory.liquidityUSD) return toUSDTBalances(usdTvl) @@ -62,187 +42,42 @@ function getChainTVL(chain) { } const factory = '0xc35DADB65012eC5796536bD9864eD8773aBc74C4' +const tvl = getUniTVL({ + factory, useDefaultCoreAssets: true, blacklist: [ + '0xed0b4b0f0e2c17646682fc98ace09feb99af3ade', // RVRS + '0x00598f74DA03489d4fFDb7Fde54db8E3D3AA9a61', // GSHIB + '0xE38928cd467AD7347465048b3637893124187d02', // GSHIB + '0xc0e39cbac6a5c5cdcdf2c1a1c29cbf5917754943', // GSHIB + ], +}) module.exports = { - telos: { - tvl: getUniTVL({ - factory, - chain: 'telos', - useDefaultCoreAssets: true, - }), - }, - palm: { - tvl: getUniTVL({ - factory, - chain: 'palm', - useDefaultCoreAssets: true, - }), - }, - moonriver: { - tvl: getUniTVL({ - factory, - chain: 'moonriver', - useDefaultCoreAssets: true, - }), - }, - celo: { - tvl: getUniTVL({ - factory, - chain: 'celo', - useDefaultCoreAssets: true, - }), - }, - okexchain: { - tvl: getUniTVL({ - factory, - chain: 'okexchain', - useDefaultCoreAssets: true, - }), - }, - arbitrum: { - tvl: getUniTVL({ - factory, - chain: 'arbitrum', - useDefaultCoreAssets: true, - }), - }, - xdai: { - tvl: getUniTVL({ - factory, - chain: 'xdai', - useDefaultCoreAssets: true, - }) - }, - harmony: { - tvl: getUniTVL({ - factory, - chain: 'harmony', - useDefaultCoreAssets: true, - blacklist: [ - '0xed0b4b0f0e2c17646682fc98ace09feb99af3ade', // RVRS - ], - }) - }, - ethereum: { - tvl: eth, - }, - polygon: { - tvl: getUniTVL({ - factory, - chain: 'polygon', - useDefaultCoreAssets: true, - }), - }, - fantom: { - tvl: getUniTVL({ - factory, - chain: 'fantom', - useDefaultCoreAssets: true, - }), - }, - bsc: { - tvl: getUniTVL({ - factory, - chain: 'bsc', - useDefaultCoreAssets: false, - blacklist: [ - '0x00598f74DA03489d4fFDb7Fde54db8E3D3AA9a61', // GSHIB - '0xE38928cd467AD7347465048b3637893124187d02', // GSHIB - '0xc0e39cbac6a5c5cdcdf2c1a1c29cbf5917754943', // GSHIB - ] - }), - }, - heco: { - tvl: getUniTVL({ - factory, - chain: 'heco', - useDefaultCoreAssets: true, - }), - }, - boba: { - tvl: getUniTVL({ - factory, - chain: 'boba', - useDefaultCoreAssets: true, - }), - }, - boba_avax: { - tvl: getUniTVL({ - factory, - chain: 'boba_avax', - useDefaultCoreAssets: true, - }), - }, - boba_bnb: { - tvl: getUniTVL({ - factory, - chain: 'boba_bnb', - useDefaultCoreAssets: true, - }), - }, - avax: { - tvl: getUniTVL({ - factory, - chain: 'avax', - useDefaultCoreAssets: true, - }), - }, + telos: { tvl, }, + palm: { tvl, }, + moonriver: { tvl, }, + celo: { tvl, }, + okexchain: { tvl, }, + arbitrum: { tvl, }, + xdai: { tvl, }, + harmony: { tvl, }, + ethereum: { tvl: eth, }, + polygon: { tvl, }, + fantom: { tvl, }, + bsc: { tvl, }, + heco: { tvl, }, + boba: { tvl, }, + boba_avax: { tvl, }, + boba_bnb: { tvl, }, + avax: { tvl, }, fuse: { - tvl: getUniTVL({ - factory: '0x43eA90e2b786728520e4f930d2A71a477BF2737C', - chain: 'fuse', - useDefaultCoreAssets: true, - }), - }, - arbitrum_nova: { - tvl: getUniTVL({ - chain: 'arbitrum_nova', - useDefaultCoreAssets: true, - factory, - }) + tvl: getUniTVL({ factory: '0x43eA90e2b786728520e4f930d2A71a477BF2737C', useDefaultCoreAssets: true, }), }, + arbitrum_nova: { tvl, }, //moved kava to trident adapter - //kava: { - // tvl: kavaTridentTvl, - //}, + //kava: { // tvl: kavaTridentTvl, //}, } module.exports.polygon.tvl = getChainTVL('polygon') // module.exports.bsc.tvl = getChainTVL('bsc') -module.exports.fantom.tvl = getChainTVL('fantom') +// module.exports.fantom.tvl = getChainTVL('fantom') // module.exports.harmony.tvl = getChainTVL('harmony') - -async function kavaTridentTvl(ts, _b, cb) { - const chain = 'kava' - const graph = 'https://pvt.graph.kava.io/subgraphs/name/sushiswap/trident-kava' - const query = `query get_tvl($block: Int){ - pairs( - block: { number: $block } - size: 1000 - ){ - id - name - type - reserve0 - reserve1 - token0 { - id - } - token1 { - id - } - } - }` - const block = await getBlock(ts, chain, cb, false) - const { pairs } = await request(graph, query, { - block: block - 100, - }) - // const bentoBox = '0xc35DADB65012eC5796536bD9864eD8773aBc74C4' - const balances = {} - const transform = await getChainTransform(chain) - pairs.forEach(i => { - sdk.util.sumSingleBalance(balances, transform(i.token0.id), i.reserve0) - sdk.util.sumSingleBalance(balances, transform(i.token1.id), i.reserve1) - } ) - return balances -} diff --git a/projects/sushiswap/historical.js b/projects/sushiswap/historical.js index f1d5d957f8..97278060cf 100644 --- a/projects/sushiswap/historical.js +++ b/projects/sushiswap/historical.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const { getChainTvl } = require('../helper/getUniSubgraphTvl') const {staking} = require('../helper/staking') @@ -31,7 +32,7 @@ const subgraphChainTvls = Object.keys(subgraphs).reduce((obj, chain) => ({ }), {}) const xSUSHI = "0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272" -const SUSHI = "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2" +const SUSHI = ADDRESSES.ethereum.SUSHI subgraphChainTvls.ethereum.staking = staking(xSUSHI, SUSHI, 'ethereum'); diff --git a/projects/sushiswap/index.js b/projects/sushiswap/index.js index 8edede279a..7eaf665f7c 100644 --- a/projects/sushiswap/index.js +++ b/projects/sushiswap/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {staking} = require('../helper/staking') const { getExports } = require('../helper/heroku-api') const indexExports = require('./api') const xSUSHI = "0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272" -const SUSHI = "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2" +const SUSHI = ADDRESSES.ethereum.SUSHI // const chainKeys = Object.keys(indexExports).filter(chain => typeof indexExports[chain] === 'object' && indexExports[chain].tvl) // // module.exports = { diff --git a/projects/suter-shield/index.js b/projects/suter-shield/index.js index e8dc49815d..f47367ef18 100644 --- a/projects/suter-shield/index.js +++ b/projects/suter-shield/index.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require("bignumber.js") // ETH -const ETH_COIN = '0x0000000000000000000000000000000000000000'; +const ETH_COIN = ADDRESSES.null; const SUTER_ETH_V1 = '0x02b4E089E96a0A672dE0a0d93E2869B899b15a44'; const SUTER_ETH_V2 = '0x934cc5704165711296207b5AFc87933AE0685a4C'; -const USDT_COIN = '0xdAC17F958D2ee523a2206206994597C13D831ec7'; +const USDT_COIN = ADDRESSES.ethereum.USDT; const SUTER_USDT_V1 = '0x29abf1a011cdfb9548dc8faa6d19b1b39808bf58'; const SUTER_USDT_V2 = '0xB8fcF79EAd34E98e45fc21E5dB1C5C561d906371'; -const DAI_COIN = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; +const DAI_COIN = ADDRESSES.ethereum.DAI; const SUTER_DAI_V1 = '0x54A8e0C76Eec21DD30842FbbcA2D336669102b77'; const SUTER_DAI_V2 = '0xbdf418486D438e44F5aAC6aF86330dA638ea70AD'; @@ -18,13 +19,13 @@ const SUTER_COIN = '0xAA2ce7Ae64066175E0B90497CE7d9c190c315DB4'; const SUTER_SUTER_V1 = '0xab4e72599e2cec5dcc8249657833b3408905900e'; // BSC -// const BNB_COIN = '0x0000000000000000000000000000000000000000'; +// const BNB_COIN = ADDRESSES.null; // WBNB -const BNB_COIN = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'; +const BNB_COIN = ADDRESSES.bsc.WBNB; const SUTER_BNB_V1 = '0x2A00d7d2de1E147a3BCAa122B4EC5D6f9F0c1147'; const SUTER_BNB_V2 = '0x5bb6eE37a6503fe381207c3BAC0Aa6d7B33590Fa'; -const BUSD_COIN = '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56'; +const BUSD_COIN = ADDRESSES.bsc.BUSD; const SUTER_BUSD_V1 = '0xe557c77Ed24df7cDF21ED55a8C56Ea36CeBD5BD2'; const SUTER_BUSD_V2 = '0x382926Ba4D92E5d7652A85Aa7085Ffb15b6b6C89'; diff --git a/projects/svn/index.js b/projects/svn/index.js index 114b3a93df..d0d8cf77d5 100644 --- a/projects/svn/index.js +++ b/projects/svn/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { stakingPricedLP } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -5,7 +6,7 @@ const token0Abi = 'address:token0' const token1Abi = 'address:token1' const { default: BigNumber } = require("bignumber.js"); -let token = "0x654bAc3eC77d6dB497892478f854cF6e8245DcA9"; +let token = ADDRESSES.cronos.SVN; let share = "0xf8b9facB7B4410F5703Eb29093302f2933D6E1Aa"; const rewardPool = "0xA51054BDf0910E3cE9B233e6B5BdDc0931b2E2ED"; const masonry = "0x2CcbFD9598116cdF9B94fF734ece9dCaF4c9d471"; @@ -93,7 +94,7 @@ async function tvl(timestamp, block, chainBlocks) { "cronos", (addr) => `cronos:${addr}` ); - delete balances['cronos:0x654bac3ec77d6db497892478f854cf6e8245dca9']; + delete balances['cronos:' + ADDRESSES.cronos.SVN]; return balances; } diff --git a/projects/swaap-v2/index.js b/projects/swaap-v2/index.js new file mode 100644 index 0000000000..a2f7d3325a --- /dev/null +++ b/projects/swaap-v2/index.js @@ -0,0 +1,27 @@ +const { getLogs } = require('../helper/cache/getLogs') + +const config = { + ethereum: { factory: '0x03C01Acae3D0173a93d819efDc832C7C4F153B06', fromBlock: 17598603, }, + polygon: { factory: '0x03C01Acae3D0173a93d819efDc832C7C4F153B06', fromBlock: 44521619, }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc'], + eventAbi: 'event PoolCreated (address indexed pool)', + onlyArgs: true, + fromBlock, + }) + const pools = logs.map(log => log.pool) + const vault = await api.call({ abi: 'address:getVault', target: factory }) + const poolIds = await api.multiCall({ abi: 'function getPoolId() view returns (bytes32)', calls: pools }) + const data = await api.multiCall({ abi: 'function getPoolTokens(bytes32) view returns (address[] tokens, uint256[] balances, uint256 lastChangeBlock)', calls: poolIds, target: vault }) + data.forEach(({ tokens, balances }) => api.addTokens(tokens, balances)) + } + } +}) \ No newline at end of file diff --git a/projects/swaap/index.js b/projects/swaap/index.js index bf5d6f10ce..a269c0e564 100644 --- a/projects/swaap/index.js +++ b/projects/swaap/index.js @@ -1,7 +1,7 @@ -const { GraphQLClient, gql } = require("graphql-request"); const { sumTokens2 } = require('../helper/unwrapLPs') +const { cachedGraphQuery } = require('../helper/cache') -const configV1 = { +const configV1 = { polygon: { startBlock: 29520285, blockDelay: 30, @@ -18,33 +18,26 @@ const configV1 = { } function tvlFunctionGetterV1(chain) { - - return async function tvlFunction(timestamp, ethBlock, chainBlocks) { - - var graphQLClient = new GraphQLClient(configV1[chain]['theGraph']['endpoint']); - + return async function tvlFunction(timestamp, ethBlock, chainBlocks, { api }) { let block = chainBlocks[chain] if (block) - block = configV1[chain]['startBlock'] + configV1[chain]['blockDelay'] > chainBlocks[chain]['startBlock'] ? - configV1[chain]['startBlock'] : chainBlocks[chain] - configV1[chain]['blockDelay'] // delayed to allow subgraph to update - - const fetchAllPools = gql`query ($block: Int) { ${configV1[chain]['theGraph']['query']} }`; - const results = await graphQLClient.request(fetchAllPools, { - block, + block = configV1[chain]['startBlock'] + configV1[chain]['blockDelay'] > chainBlocks[chain]['startBlock'] ? + configV1[chain]['startBlock'] : chainBlocks[chain] - configV1[chain]['blockDelay'] // delayed to allow subgraph to update + + const fetchAllPools = `query ($block: Int) { ${configV1[chain]['theGraph']['query']} }`; + const results = await cachedGraphQuery('swaaap-v1/' + chain, configV1[chain]['theGraph']['endpoint'], fetchAllPools, { + variables: { block, } }); const toa = results.pools.map(i => i.tokens.map(j => ([j.address, i.id]))).flat() - return sumTokens2({ chain, block, tokensAndOwners: toa, }) - } + return sumTokens2({ api, tokensAndOwners: toa, }) + } } module.exports = { start: 1655130642, // Jun-13-2022 02:30:42 PM +UTC - timetravel: true, - misrepresentedTokens: false, methodology: `The TVL is retrieved using a mix of TheGraph (to get the list of pools) and on-chain (to get the pools' assets balance) calls.`, polygon: { tvl: tvlFunctionGetterV1("polygon"), }, - hallmarks:[] }; diff --git a/projects/swampfinance/index.js b/projects/swampfinance/index.js index 4f87a741e0..674d31402a 100644 --- a/projects/swampfinance/index.js +++ b/projects/swampfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { yieldHelper, } = require("../helper/yieldHelper") module.exports = yieldHelper({ @@ -5,5 +6,5 @@ module.exports = yieldHelper({ chain: 'bsc', masterchef: '0x33AdBf5f1ec364a4ea3a5CA8f310B597B8aFDee3', nativeToken: '0xc5A49b4CBe004b6FD55B30Ba1dE6AC360FF9765d', - blacklistedTokens: ['0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c'] + blacklistedTokens: [ADDRESSES.bsc.BTCB] }) \ No newline at end of file diff --git a/projects/swapline/index.js b/projects/swapline/index.js index e4d876ec28..e1b9a93133 100644 --- a/projects/swapline/index.js +++ b/projects/swapline/index.js @@ -1,20 +1,24 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const factories = { - fantom: '0xdD693b9F810D0AEE1b3B74C50D3c363cE45CEC0C', + fantom: '0x640801a6983c109805E928dc7d9794080C21C88E', + optimism: '0xd08C98F6409fCAe3E61f3157B4147B6595E60cf3', + polygon_zkevm: '0x5A5c0C4832828FF878CE3ab4fEc44d21200b1496', + arbitrum: '0xEE0616a2DEAa5331e2047Bc61E0b588195A49cEa', } + async function tvl(_, _b, _cb, { api, }) { const pools = await api.fetchList({ target: factories[api.chain], - itemAbi: 'function allLBPairs(uint256) view returns (address)', + itemAbi: 'function getLBPairAtIndex(uint256) view returns (address)', lengthAbi: 'uint256:getNumberOfLBPairs', }) const tokenA = await api.multiCall({ - abi: 'address:tokenX', + abi: 'address:getTokenX', calls: pools, }) const tokenB = await api.multiCall({ - abi: 'address:tokenY', + abi: 'address:getTokenY', calls: pools, }) const toa = [] @@ -26,8 +30,22 @@ async function tvl(_, _b, _cb, { api, }) { } module.exports = { + hallmarks: [ + [1682298000,"Launch on Optimism"], + [1687827600,"Launch on Polygon zkEVM"], + [1689037200,"Launch on Arbitrum"] + ], methodology: 'We count the token balances in in different liquidity book contracts', fantom:{ tvl, }, + optimism:{ + tvl, + }, + polygon_zkevm:{ + tvl, + }, + arbitrum:{ + tvl, + }, }; \ No newline at end of file diff --git a/projects/swapmatic/index.js b/projects/swapmatic/index.js index 6a82b18512..868193d1a7 100644 --- a/projects/swapmatic/index.js +++ b/projects/swapmatic/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const BigNumber = require('bignumber.js'); const { getLogs } = require('../helper/cache/getLogs') const START_BLOCK = 3285065 - 1; const FACTORY = '0x90D882B2789523403ff263D1F93Ead986c38446C'; -const MATIC = '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0'.toLowerCase(); +const MATIC = ADDRESSES.ethereum.MATIC.toLowerCase(); async function tvl(_, _block, cb, { api }) { const chain = 'polygon' diff --git a/projects/swaprum/index.js b/projects/swaprum/index.js new file mode 100644 index 0000000000..d0953fdc4f --- /dev/null +++ b/projects/swaprum/index.js @@ -0,0 +1,19 @@ +const { getUniTVL } = require("../helper/unknownTokens"); +const { stakings } = require("../helper/staking"); + +const factory = "0xD757C986a28F82761Fe874Bc40073718dC1e980C"; +const SAPR = "0x2aE25460c44d578E6f41aB900a7A5425b6492C16" +const pools = [ + "0x2B6deC18E8e4DEf679b2E52e628B14751F2f66bc", +] + +module.exports = { + misrepresentedTokens: true, + arbitrum: { + staking: stakings(pools, SAPR,), + tvl: getUniTVL({ fetchBalances: true, useDefaultCoreAssets: true, factory }) + }, + hallmarks: [ + [Math.floor(new Date('2023-05-18')/1e3), 'Project rugged!'], + ], +}; \ No newline at end of file diff --git a/projects/swapscanner-staking/index.js b/projects/swapscanner-staking/index.js new file mode 100644 index 0000000000..e0d48b9560 --- /dev/null +++ b/projects/swapscanner-staking/index.js @@ -0,0 +1,24 @@ +const sdk = require("@defillama/sdk"); +const { nullAddress } = require('../helper/unwrapLPs'); +const chain = 'klaytn' + +const SCNR = { + GCKLAY: '0x999999999939ba65abb254339eec0b2a0dac80e9' +} + +module.exports = { + klaytn: { + tvl: async (_, _b, {klaytn:block}) => { + const gcklayBal = await sdk.api2.abi.call({ + target: SCNR.GCKLAY, + abi: 'erc20:totalSupply', + chain, block, + }) + + const balances = {} + sdk.util.sumSingleBalance(balances, nullAddress, gcklayBal, chain) + return balances; + } + }, + timetravel: false, +} diff --git a/projects/swapsicle/iceBoxABI.json b/projects/swapsicle/iceBoxABI.json new file mode 100644 index 0000000000..49c8cc7fb4 --- /dev/null +++ b/projects/swapsicle/iceBoxABI.json @@ -0,0 +1,3 @@ +{ + "totalPrimaryStaked": "uint256:totalPrimaryStaked" +} \ No newline at end of file diff --git a/projects/swapsicle/icevaultABI.json b/projects/swapsicle/icevaultABI.json new file mode 100644 index 0000000000..8e73ce09e5 --- /dev/null +++ b/projects/swapsicle/icevaultABI.json @@ -0,0 +1,3 @@ +{ + "totalStaked": "uint256:totalStaked" +} \ No newline at end of file diff --git a/projects/swapsicle/index.js b/projects/swapsicle/index.js index 0f63bd91a3..7788764abe 100644 --- a/projects/swapsicle/index.js +++ b/projects/swapsicle/index.js @@ -1,19 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { ethers } = require("ethers"); const { getUniTVL } = require('../helper/unknownTokens') const { stakingPricedLP } = require("../helper/staking") const sdk = require("@defillama/sdk") const BigNumber = require("bignumber.js"); +const iceBoxABI = require("./iceBoxABI.json"); +const iceVaultABI = require("./icevaultABI.json"); -//const stakingContract_IB = "0x6aA10ead8531504a8A3B04a9BfCFd18108F2d2c2"; -const WAVAX = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7' -const WTLOS = '0xd102ce6a4db07d247fcc28f366a623df0938ca9e' +const WAVAX = ADDRESSES.avax.WAVAX +//const WTLOS = ADDRESSES.telos.WTLOS const contracts = { avax: { factory: "0x9c60c867ce07a3c403e2598388673c10259ec768", pops: "0x240248628B7B6850352764C5dFa50D1592A033A8", - usdc: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", + usdc: ADDRESSES.avax.USDC, stakingContract_sPOPS: "0x5108176bC1B7e72440e6B48862c51d7eB0AEd5c4", stakingContract_IB: "0x6aA10ead8531504a8A3B04a9BfCFd18108F2d2c2", stakingContract_IB2: "0x737CAE995aCec229a6958B49f6d3eB9F383480Ab", @@ -42,8 +44,9 @@ const contracts = { stakingContract_sPOPS: "0x14e374cef17d800109710aa2c2d73e50db76d367", stakingContract_IB: '0xac448d75e945923b176ebca4ff2b5a82de73f812', stakingContract_IB2: '0x08010b76d4b03cabcfb0f6ba9db7de8336c715fe', + stakingContract_NFT: '0x552fd5743432eC2dAe222531e8b88bf7d2410FBc', pops: "0x173fd7434b8b50df08e3298f173487ebdb35fd14", - stlos: "0xB4B01216a5Bc8F1C8A33CD990A1239030E60C905" + stlos: ADDRESSES.telos.STLOS } } @@ -58,7 +61,7 @@ function getTLOSAddress(address) { // AVAX (ETH) staking product async function iceBox(contract, block, chain) { let balances = { - "0x0000000000000000000000000000000000000000": ( + [ADDRESSES.null]: ( await sdk.api.eth.getBalance({ target: contract, block, chain: chain }) ).output, }; @@ -66,21 +69,16 @@ async function iceBox(contract, block, chain) { } // Avalanche - IceVault Staking (USDC) -async function stakedUSDC(timestamp, ethBlock, chainBlocks) { +async function stakedUSDC(timestamp, _, { avax: block }) { const balances = {}; - const tokenBalance = new BigNumber( - ( - await sdk.api.abi.call({ - abi: "erc20:balanceOf", - chain: "avax", - target: contracts.avax.usdc, - params: [contracts.avax.stakingContract_IV], - block: chainBlocks["avax"], - }) - ).output - ); - - balances[getAVAXAddress(contracts.avax.usdc)] = tokenBalance; + + const tokenBalance = await sdk.api.abi.call({ + target: contracts.avax.stakingContract_IV, + abi: iceVaultABI.totalStaked, + chain: "avax", block, + }); + + balances[getAVAXAddress(contracts.avax.usdc)] = tokenBalance.output; return balances; } @@ -90,7 +88,7 @@ async function stakedAVAXIceBox(timestamp, ethBlock, chainBlocks) { const block = chainBlocks.avax; const ibBalance = await iceBox(contracts.avax.stakingContract_IB, block, 'avax'); - balances[getAVAXAddress(WAVAX)] = ibBalance["0x0000000000000000000000000000000000000000"]; + balances[getAVAXAddress(WAVAX)] = ibBalance[ADDRESSES.null]; return balances; } @@ -100,8 +98,20 @@ async function stakedAVAXIceBox2(timestamp, ethBlock, chainBlocks) { const block = chainBlocks.avax; const ibBalance2 = await iceBox(contracts.avax.stakingContract_IB2, block, 'avax'); - balances[getAVAXAddress(WAVAX)] = ibBalance2["0x0000000000000000000000000000000000000000"] + balances[getAVAXAddress(WAVAX)] = ibBalance2[ADDRESSES.null] + + return balances; +} + +async function stakedTLOSIceBox(timestamp, _, { telos: block }) { + const balances = {}; + const stakedSTLOS = await sdk.api.abi.call({ + target: contracts.telos.stakingContract_IB2, + abi: iceBoxABI.totalPrimaryStaked, + chain: "telos", block, + }); + balances[getTLOSAddress(contracts.telos.stlos)] = stakedSTLOS.output; return balances; } @@ -144,7 +154,10 @@ module.exports = { staking: sdk.util.sumChainTvls([ // Ice Cream Van stakingPricedLP(contracts.telos.stakingContract_sPOPS, contracts.telos.pops,'telos','0x6dee26f527adb0c24fef704228d8e458b46f9f5f',"wrapped-telos",true), + // NFT's + stakingPricedLP(contracts.telos.stakingContract_NFT, contracts.telos.pops,'telos','0x6dee26f527adb0c24fef704228d8e458b46f9f5f',"wrapped-telos",true), // Ice Box + stakedTLOSIceBox ]) }, //start: 15434772, diff --git a/projects/swell/index.js b/projects/swell/index.js new file mode 100644 index 0000000000..0a97b03fd2 --- /dev/null +++ b/projects/swell/index.js @@ -0,0 +1,14 @@ +const { nullAddress } = require("../helper/unwrapLPs"); + +module.exports = { + ethereum: { + tvl: async (_, _1, _2, { api }) => { + const totalSupply = await api.call({ target: '0xf951E335afb289353dc249e82926178EaC7DEd78', abi: 'uint256:totalSupply'}); + const rate = await api.call({ target: '0xf951E335afb289353dc249e82926178EaC7DEd78', abi: 'uint256:getRate'}); + + return { + [nullAddress]: (totalSupply * rate)/1e18 + }; + } + } +}; diff --git a/projects/swerve.js b/projects/swerve.js index db69f7aa07..dee065753d 100644 --- a/projects/swerve.js +++ b/projects/swerve.js @@ -1,137 +1,16 @@ -const BigNumber = require("bignumber.js"); -const sdk = require("@defillama/sdk"); -const { get } = require('./helper/http') - -let swaps = [ - { - 'name': 'swerve', - 'address': '0x329239599afB305DA0A2eC69c58F8a6697F9F88d', - 'coins': [0,1,2,3], - 'type': 1, - } -] - -let coinDecimals = [ - { - '0x8dAEBADE922dF735c38C80C7eBD708Af50815fAa': '18', - '0x0316EB71485b0Ab14103307bf65a021042c6d380': '18', - '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D': '8', - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599': '8', - '0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6': '18', - '0x196f4727526eA7FB1e17b2071B3d8eAA38486988': '18', - '0xe2f2a5C287993345a840Db3B0845fbC70f5935a5': '18', - '0x0E2EC54fC0B509F445631Bf4b91AB8168230C752': '18', //linkusd - '0x674C6Ad92Fd080e4004b2312b45f796a192D27a0': '18', //USDN - '0x1c48f86ae57291F7686349F12601910BD8D470bb': '18', //USDK - '0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd': '2', //GUSD - '0x39AA39c021dfbaE8faC545936693aC917d5E7563': '8', //cUSD - '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643': '8', //cDAI - '0xdAC17F958D2ee523a2206206994597C13D831ec7': '6', //USDT - '0x73a052500105205d34Daf004eAb301916DA8190f': '18', //yTUSD - '0xd6aD7a6750A7593E092a9B218d66C0A814a3436e': '6', ///yUSDC - '0x16de59092dAE5CcF4A1E6439D611fd0653f0Bd01': '18', ///yDAI - '0x83f798e925BcD4017Eb265844FDDAbb448f1707D': '6', ///yUSDT - '0x8E870D67F660D95d5be530380D0eC0bd388289E1': '18', //PAX - '0x9777d7E2b60bB01759D0E2f8be2095df444cb07E': '6', ///ycUSDC - '0x99d1Fa417f94dcD62BfE781a1213c092a47041Bc': '18', ///ycDAI - '0x1bE5d71F2dA660BFdee8012dDc58D024448A0A59': '6', ///ycUSDT - '0x04bC0Ab673d88aE9dbC9DA2380cB6B79C4BCa9aE': '18', //Y2busd - '0x26EA744E5B887E5205727f55dFBE8685e3b21951': '6', ///y2USDC - '0xC2cB1040220768554cf699b0d863A3cd4324ce32': '18', ///y2DAI - '0xE6354ed5bC4b393a5Aad09f21c46E101e692d447': '6', ///y2USDT - '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51': '18', //sUSD - '0x6B175474E89094C44Da98b954EedeAC495271d0F': '18', //DAI - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': '6', //USDC - '0x5BC25f649fc4e26069dDF4cF4010F9f706c23831': '18', //dusd - '0x0000000000085d4780B73119b644AE5ecd22b376': '18' - } -] - -async function tvl(ts, block) { - var price_feed = await get('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,cdai,compound-usd-coin&vs_currencies=usd&include_market_cap=true&include_24hr_vol=true&include_24hr_change=true') - - var tvl = 0; - var btcTVL = 0; - - await Promise.all( - swaps.map(async item => { - await Promise.all( - item.coins.map(async i => { - const poolAmount = await calc(item, i, price_feed, block); - if (item.type == 'btc') { - btcTVL += parseFloat(poolAmount); - } else { - tvl += parseFloat(poolAmount ) - } - }) - ) - }) - ) - - const balances = {} - const wBTC = '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599' - sdk.util.sumSingleBalance(balances, wBTC, btcTVL * 1e8) - sdk.util.sumSingleBalance(balances, '0xdac17f958d2ee523a2206206994597c13d831ec7', tvl * 1e6) // add as usdt - return balances; -} - -async function getVirtualPrice(contract, block) { - const { output: virtualPrice } = await sdk.api.abi.call({ - block, - target: contract, - abi: "uint256:getPricePerFullShare", - }) - return virtualPrice; -} - - - -async function calc(item, i, price_feed, block) { - const { output: balances } = await sdk.api.abi.call({ - block, - target: item.address, - params: [i], - abi: "function balances(int128 arg0) view returns (uint256)" - }) - const { output: coins } = await sdk.api.abi.call({ - block, - target: item.address, - params: [i], - abi: "function coins(int128 arg0) view returns (address)" - }) - - - var poolAmount = new BigNumber(balances).div(10 ** coinDecimals[0][coins]).toFixed(2); - - let multiplier - if (item.type == 'compound') { - multiplier = 1; - if (coins === '0x39AA39c021dfbaE8faC545936693aC917d5E7563') { - multiplier = price_feed['compound-usd-coin'].usd; - } - if (coins === '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643') { - multiplier = price_feed.cdai.usd; - } - poolAmount = poolAmount * multiplier; - } - - if (item.type == 'yToken') { - multiplier = 1; - if (coins !== '0x8E870D67F660D95d5be530380D0eC0bd388289E1') { // PAX exception - multiplier = await getVirtualPrice(coins, block) - multiplier = new BigNumber(multiplier).div(10 ** 18).toFixed(4); - } - poolAmount = poolAmount * multiplier; - } - - return poolAmount; -} - - +const { sumTokensExport } = require('./helper/unwrapLPs') +const ADDRESSES = require('./helper/coreAssets.json') module.exports = { - timetravel: false, ethereum: { - tvl + tvl: sumTokensExport({ + owner: '0x329239599afB305DA0A2eC69c58F8a6697F9F88d', + tokens: [ + ADDRESSES.ethereum.TUSD, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, + ] + }) } } diff --git a/projects/swim/config.js b/projects/swim/config.js index f033bd4124..68dc4e7723 100644 --- a/projects/swim/config.js +++ b/projects/swim/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { solana: { tvl: { @@ -5,12 +6,12 @@ module.exports = { { pool: 'AfhhYsLMXXyDxQ1B7tNqLTXXDHYtDxCzPcnXWXzHAvDb', // Hexapool tokens: [ - 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // Solana-USDC - 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', // Solana-USDT + ADDRESSES.solana.USDC, // Solana-USDC + ADDRESSES.solana.USDT, // Solana-USDT 'A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM', // Eth-USDC 'Dn4noZ5jgGfkntzcQSUZ8czkreiZ1ForXYoV2H8Dm7S1', // Eth-USDT - '5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2', // Bsc-BUSD - '8qJSyQprMC57TWKaYEmetUR3UUiTP2M3hXdcvFhkZdmv', // Bsc-USDT + ADDRESSES.solana.BUSDbs, // Bsc-BUSD + ADDRESSES.solana.USDTbs, // Bsc-USDT ], symbols: [ "usd-coin", diff --git a/projects/swirllend/index.js b/projects/swirllend/index.js new file mode 100644 index 0000000000..bb0102d318 --- /dev/null +++ b/projects/swirllend/index.js @@ -0,0 +1,9 @@ +const { compoundExports2 } = require("../helper/compound"); + +module.exports = { + linea: compoundExports2({ + comptroller: "0xcAABf6Ffb76634183254B0a4a3D5fb36180FdAE4", + fetchBalances: true, + cether: '0x91067b912f89dfca50c3f5529dbeb78b63c6a2e5', + }), +}; diff --git a/projects/swivel/index.js b/projects/swivel/index.js index 1783d9bef8..ff654a4a7d 100644 --- a/projects/swivel/index.js +++ b/projects/swivel/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unknownTokens"); module.exports = { @@ -13,11 +14,14 @@ module.exports = { ], tokens: [ "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", // cDAI - "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + "0x39AA39c021dfbaE8faC545936693aC917d5E7563", // cUSDC, // "0xEb91861f8A4e1C12333F42DCE8fB0Ecdc28dA716", // eUSDC - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", // Lido stETH - "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0" // Lido wstETH + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.WSTETH, + "0x5E8422345238F34275888049021821E8E08CAa1f", // frxETH + ADDRESSES.ethereum.sfrxETH ] }) } diff --git a/projects/swop/index.js b/projects/swop/index.js index a036c598e5..e97e99921c 100644 --- a/projects/swop/index.js +++ b/projects/swop/index.js @@ -1,5 +1,17 @@ -const { wavesExport } = require('../helper/chain/wavesAdapter') +const { get } = require("../helper/http"); +const { toUSDTBalances } = require("../helper/balances"); -const endpoint = "/swop" +const swopfiBackendEndpoint = "https://backend.swop.fi"; -module.exports = wavesExport("/swop", item => item.totalLocked / 1e6) \ No newline at end of file +const getSwopFiTVL = async () => { + const poolsStats = await get(`${swopfiBackendEndpoint}/pools`); + return toUSDTBalances(poolsStats.overall.liquidity); +} + +module.exports = { + timetravel: false, // Waves blockchain, + methodology: "Counts the tokens locked on AMM pools", + waves: { + tvl: getSwopFiTVL, + } +}; diff --git a/projects/symbiosis-finance/config.js b/projects/symbiosis-finance/config.js index 3ba7b6a362..d344a09f57 100644 --- a/projects/symbiosis-finance/config.js +++ b/projects/symbiosis-finance/config.js @@ -1,8 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { chains: [ { name: 'ethereum', - stable: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC + tokens: [ + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, + ], holders: [ '0xb80fDAA74dDA763a8A158ba85798d373A5E84d84', // portal v1 '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 @@ -10,7 +14,11 @@ module.exports = { }, { name: 'bsc', - stable: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + tokens: [ + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.ETH, + ], holders: [ '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 '0x5Aa5f7f84eD0E5db0a4a85C3947eA16B53352FD4', // portal v2 @@ -19,7 +27,10 @@ module.exports = { }, { name: 'avax', - stable: '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', // USDC.e + tokens: [ + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.USDC, + ], holders: [ '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 '0xE75C7E85FE6ADd07077467064aD15847E6ba9877', // portal v2 @@ -29,7 +40,10 @@ module.exports = { }, { name: 'polygon', - stable: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC + tokens: [ + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.WETH_1, + ], holders: [ '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 @@ -40,7 +54,9 @@ module.exports = { }, { name: 'telos', - stable: '0x818ec0a7fe18ff94269904fced6ae3dae6d6dc0b', // USDC + tokens: [ + ADDRESSES.telos.USDC, + ], holders: [ '0x17A0E3234f00b9D7028e2c78dB2caa777F11490F', // portal v1 '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 @@ -49,23 +65,20 @@ module.exports = { }, { name: 'aurora', - stable: '0xB12BFcA5A55806AaF64E99521918A4bf0fC40802', // USDC + tokens: [ + ADDRESSES.aurora.USDC_e, + ], holders: [ '0x17A0E3234f00b9D7028e2c78dB2caa777F11490F', // portal v1 '0x7Ff7AdE2A214F9A4634bBAA4E870A5125dA521B8', // v1 pool with BNB chain '0x7F1245B61Ba0b7D4C41f28cAc9F8637fc6Bec9E4', // v1 pool with Polygon ] }, - // { - // name: 'milkomeda', - // stable: '0x42110A5133F91B49E32B671Db86E2C44Edc13832', // sUSDC - // holders: [ - // '0x3Cd5343546837B958a70B82E3F9a0E857d0b5fea', // portal v1 - // ] - // }, { name: 'boba', - stable: '0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc', // USDC + tokens: [ + ADDRESSES.boba.USDC, + ], holders: [ '0xD7F9989bE0d15319d13d6FA5d468211C89F0b147', // portal v1 '0xb8f275fBf7A959F4BCE59999A2EF122A099e81A8', // portal v2 @@ -75,38 +88,100 @@ module.exports = { }, { name: 'boba_avax', - stable: '0x126969743a6d300bab08F303f104f0f7DBAfbe20', // USDC.e + tokens: [ + ADDRESSES.boba_avax.USDC_e, + ], holders: [ '0xd8db4fb1fEf63045A443202d506Bcf30ef404160', // portal v2 ] }, { name: 'boba_bnb', - stable: '0x9F98f9F312D23d078061962837042b8918e6aff2', // USDC + tokens: [ + ADDRESSES.boba_bnb.USDC, + ], holders: [ '0x6148FD6C649866596C3d8a971fC313E5eCE84882', // pool v2 ] }, { name: 'kava', - stable: '0xfA9343C3897324496A05fC75abeD6bAC29f8A40f', // USDC + tokens: [ + ADDRESSES.kava.USDC, + ADDRESSES.kava.USDt, + ], holders: [ '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 ] }, { name: 'era', - stable: '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', // USDC + tokens: [ + ADDRESSES.era.USDC, + ADDRESSES.era.WETH, + ], holders: [ '0x39dE19C9fF25693A2311AAD1dc5C790194084A39', // portal v2 ] }, { name: 'arbitrum', - stable: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', // USDC + tokens: [ + ADDRESSES.arbitrum.USDC, // USDC.e + ADDRESSES.arbitrum.USDC_CIRCLE, + ADDRESSES.arbitrum.WETH, + ], holders: [ '0x01A3c8E513B758EBB011F7AFaf6C37616c9C24d9', // portal v2 ] }, + { + name: 'optimism', + tokens: [ + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.WETH_1, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, + { + name: 'arbitrum_nova', + tokens: [ + ADDRESSES.arbitrum_nova.USDC, + ADDRESSES.arbitrum_nova.WETH, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, + { + name: 'polygon_zkevm', + tokens: [ + ADDRESSES.polygon_zkevm.USDC, + ADDRESSES.polygon_zkevm.WETH, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, + { + name: 'mantle', + tokens: [ + ADDRESSES.mantle.USDC, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, + { + name: 'linea', + tokens: [ + ADDRESSES.linea.WETH, + ], + holders: [ + '0x292fC50e4eB66C3f6514b9E402dBc25961824D62', // portal v2 + ] + }, ] } \ No newline at end of file diff --git a/projects/symbiosis-finance/index.js b/projects/symbiosis-finance/index.js index 2b6ff2d4b4..2b5d1b4542 100644 --- a/projects/symbiosis-finance/index.js +++ b/projects/symbiosis-finance/index.js @@ -6,8 +6,8 @@ module.exports = { }; config.chains.forEach(chainInfo => { - const {name: chain, stable, holders} = chainInfo + const {name: chain, tokens, holders} = chainInfo module.exports[chain] = { - tvl: sumTokensExport({ chain, tokens: [ stable ], owners: holders }) + tvl: sumTokensExport({ chain, tokens, owners: holders }) } }) diff --git a/projects/symphony/index.js b/projects/symphony/index.js index 431c7d979a..05145fe349 100644 --- a/projects/symphony/index.js +++ b/projects/symphony/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getConfig } = require('../helper/cache') const abi = require('./abi.json'); @@ -7,7 +8,7 @@ const yoloAddress = { 'polygon': "0x935b97586FE291750F46Bf4eD7BeB8E1c3d110A2", 'optimism': "0x3Ff61F4d7e1d912CA3Cb342581B2e764aE24d017" } -const zeroAddress = '0x0000000000000000000000000000000000000000'; +const zeroAddress = ADDRESSES.null; const TOKENLIST_URL = "https://raw.githubusercontent.com/symphony-finance/token-list/master/symphony.tokenlist.json"; const calcTvl = async (balances, id, chain, block, transformAddress) => { diff --git a/projects/synapse/config.js b/projects/synapse/config.js index 2d7eb44f7b..af2ca176fc 100644 --- a/projects/synapse/config.js +++ b/projects/synapse/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { ethereum: { tvl: { @@ -5,9 +6,9 @@ module.exports = { { pool: '0x1116898dda4015ed8ddefb84b6e8bc24528af2d8', tokens: [ - "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC - "0xdac17f958d2ee523a2206206994597c13d831ec7", // USDT + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, ] }, ], @@ -15,17 +16,17 @@ module.exports = { address: '0x2796317b0fF8538F253012862c06787Adfb8cEb6', tokens: [ '0x98585dfc8d9e7d48f0b1ae47ce33332cf4237d96', // NEWO - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH + ADDRESSES.ethereum.WETH, '0x0ab87046fBb341D058F17CBC4c1133F25a20a52f', // gOHM '0x71ab77b7dbb4fa7e017bc15090b2163221420282', // HIGH - '0x853d955acef822db058eb8505911ed77f175b99e', // FRAX + ADDRESSES.ethereum.FRAX, '0xbaac2b4491727d78d2b78815144570b9f2fe8899', // DOG '0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f', // SDT - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC - '0xdac17f958d2ee523a2206206994597c13d831ec7', // USDT + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, '0xb753428af26e81097e7fd17f40c88aaa3e04902c', // SFI - '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // wBTC + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WBTC, '0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8', // agEUR '0x0642026E7f0B6cCaC5925b4E7Fa61384250e1701', // H2O '0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B', // USDB @@ -44,14 +45,14 @@ module.exports = { pool: '0xE27BFf97CE92C3e1Ff7AA9f86781FDd6D48F5eE9', tokens: [ // '0x809DC529f07651bD43A172e8dB6f4a7a0d771036', // neth - '0x121ab82b49B2BC4c7901CA46B8277962b4350204', // weth + ADDRESSES.optimism.WETH, ] }, { pool: '0xF44938b0125A6662f9536281aD2CD6c499F22004', tokens: [ - // '0x67C10C397dD0Ba417329543c1a40eb48AAa7cd00', // nusd - '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // usdc + // ADDRESSES.metis.SYN, // nusd + ADDRESSES.optimism.USDC, ] }, ], @@ -62,10 +63,10 @@ module.exports = { bridge: { address: '0xC05e61d0E7a63D27546389B7aD62FdFf5A91aACE', tokens: [ - '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', // WAVAX + ADDRESSES.avax.WAVAX, '0x1f1e7c893855525b303f99bdf5c3c05be09ca251', // SYN '0x321E7092a180BB43555132ec53AaA65a5bF84251', // gOHM - '0x152b9d0FdC40C096757F570A51E494bd4b943E50', // BTC.b + ADDRESSES.avax.BTC_b, '0x5aB7084CB9d270c2Cb052dd30dbecBCA42F8620c', // USDB '0x62edc0692BD897D2295872a9FFCac5425011c661', // GMX ] @@ -74,9 +75,9 @@ module.exports = { { pool: '0xED2a7edd7413021d440b09D654f3b87712abAB66', tokens: [ - "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", // DAI - "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", // USDC - "0xc7198437980c041c805a1edcba50c1ce5db95118", // USDT + ADDRESSES.avax.DAI, + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.USDT_e, // "0xCFc37A6AB183dd4aED08C204D1c2773c0b1BDf46", // nusd ] }, @@ -100,7 +101,7 @@ module.exports = { { pool: '0xCb6674548586F20ca39C97A52A0ded86f48814De', tokens: [ - "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59", // DAI + ADDRESSES.cronos.USDC, // "0x396c9c192dd323995346632581BEF92a31AC623b", // nusd ] }, @@ -114,7 +115,7 @@ module.exports = { tokens: [ '0x5f4bde007dc06b867f86ebfe4802e34a1ffeed63', // HIGH '0xaA88C603d142C371eA0eAC8756123c5805EdeE03', // DOG - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + ADDRESSES.bsc.BUSD, '0x0FE9778c005a5A6115cBE12b0568a2d50b765A51', // NFD '0x130025eE738A66E691E6A7a62381CB33c6d9Ae83', // JUMP '0xc8699AbBba90C7479dedcCEF19eF78969a2fc608', // USDB @@ -124,9 +125,9 @@ module.exports = { { pool: '0x28ec0B36F0819ecB5005cAB836F4ED5a2eCa4D13', tokens: [ - "0xe9e7cea3dedca5984780bafc599bd69add087d56", // BUSD - "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", // USDC - "0x55d398326f99059ff775485246999027b3197955", // USDT + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.USDT, // "0x23b891e5c62e0955ae2bd185990103928ab817b3", // nusd ] }, @@ -139,16 +140,16 @@ module.exports = { address: '0x8f5bbb2bb8c2ee94639e55d5f41de9b4839c1280', tokens: [ '0xd8cA34fd379d9ca3C6Ee3b3905678320F5b45195', // gOHM - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // wMATIC + ADDRESSES.polygon.WMATIC_2, ] }, pools: [ { pool: '0x85fCD7Dd0a1e1A9FCD5FD886ED522dE8221C3EE5', tokens: [ - "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", // DAI - "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", // USDC - "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", // USDT + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.USDT, // "0xb6c473756050de474286bed418b77aeac39b02af", // nusd ] }, @@ -161,7 +162,7 @@ module.exports = { address: '0xAf41a65F786339e7911F4acDAD6BD49426F2Dc6b', tokens: [ '0x91fa20244Fb509e8289CA630E5db3E9166233FDc', // gOHM - '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', // wFTM + ADDRESSES.fantom.WFTM, '0x6Fc9383486c163fA48becdEC79d6058f984f62cA', // USDB ] }, @@ -169,17 +170,17 @@ module.exports = { { pool: '0x85662fd123280827e11c59973ac9fcbe838dc3b4', tokens: [ - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", // USDC - "0x049d68029688eabf473097a2fc38ef61633a3c7a", // fUSDT + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.fUSDT, // "0xED2a7edd7413021d440b09D654f3b87712abAB66", // nusd ] }, { - pool: '0x2913E812Cf0dcCA30FB28E6Cac3d2DCFF4497688', + pool: ADDRESSES.arbitrum.nUSD, tokens: [ - "0x82f0b8b456c1a451378467398982d4834b6829c1", // MIM - "0x04068da6c83afcfa0e13ba15a6696662335d5b75", // USDC - "0x049d68029688eabf473097a2fc38ef61633a3c7a", // USDT + ADDRESSES.fantom.MIM, + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.fUSDT, // "0xED2a7edd7413021d440b09D654f3b87712abAB66", // nusd ] }, @@ -187,7 +188,7 @@ module.exports = { pool: '0x8D9bA570D6cb60C7e3e0F31343Efe75AB8E65FB1', tokens: [ "0x74b23882a30290451A17c44f4F05243b6b58C76d", // weth - // "0x67c10c397dd0ba417329543c1a40eb48aaa7cd00", // neth + // ADDRESSES.metis.SYN, // neth ] }, ] @@ -204,16 +205,16 @@ module.exports = { { pool: '0x753bb855c8fe814233d26Bb23aF61cb3d2022bE5', tokens: [ - "0xd203De32170130082896b4111eDF825a4774c18E", // weth + ADDRESSES.boba.WETH, // "0x96419929d7949D6A801A6909c145C8EEf6A40431", // neth ] }, { pool: '0x75FF037256b36F15919369AC58695550bE72fead', tokens: [ - "0xf74195Bb8a5cf652411867c5C2C5b8C2a402be35", // DAI - "0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc", // USDC - "0x5DE1677344D3Cb0D7D465c10b72A8f60699C062d", // USDT + ADDRESSES.boba.DAI, + ADDRESSES.boba.USDC, + ADDRESSES.boba.USDT, // "0x6B4712AE9797C199edd44F897cA09BC57628a1CF", // nusd ] }, @@ -232,14 +233,14 @@ module.exports = { { pool: '0x09fec30669d63a13c666d2129230dd5588e2e240', tokens: [ - "0x420000000000000000000000000000000000000a", // weth + ADDRESSES.metis.WETH, // "0x931b8f17764362a3325d30681009f0edd6211231", // neth ] }, { pool: '0x555982d2E211745b96736665e19D9308B615F78e', tokens: [ - "0xea32a96608495e54156ae48931a7c20f0dcc1a21", // USDC + ADDRESSES.metis.m_USDC, // "0x961318fc85475e125b99cc9215f62679ae5200ab", // nusd ] }, @@ -251,32 +252,32 @@ module.exports = { bridge: { address: '0x6F4e8eBa4D337f874Ab57478AcC2Cb5BACdc19c9', tokens: [ - '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a', + ADDRESSES.arbitrum.GMX, ] }, pools: [ { pool: '0xa067668661C84476aFcDc6fA5D758C4c01C34352', tokens: [ - "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // weth + ADDRESSES.arbitrum.WETH, // "0x3ea9b0ab55f34fb188824ee288ceaefc63cf908e", // neth ] }, { pool: '0x9Dd329F5411466d9e0C488fF72519CA9fEf0cb40', tokens: [ - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", // USDT - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC - // "0x2913e812cf0dcca30fb28e6cac3d2dcff4497688", // nusd + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC, + // ADDRESSES.arbitrum.nUSD, // nusd ] }, { pool: '0x0Db3FE3B770c95A0B99D1Ed6F2627933466c0Dd8', tokens: [ - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", // USDT - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC - "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a", // MIM - // "0x2913e812cf0dcca30fb28e6cac3d2dcff4497688", // nusd + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.MIM, + // ADDRESSES.arbitrum.nUSD, // nusd ] }, ] @@ -293,9 +294,9 @@ module.exports = { { pool: '0xcEf6C2e20898C2604886b888552CA6CcF66933B0', tokens: [ - "0xB12BFcA5A55806AaF64E99521918A4bf0fC40802", // USDC - "0x4988a896b1227218e4A686fdE5EabdcAbd91571f", // USDT - // "0x07379565cD8B0CaE7c60Dc78e7f601b34AF2A21c", // nusd + ADDRESSES.aurora.USDC_e, + ADDRESSES.aurora.USDT_e, + // ADDRESSES.aurora.nUSD, // nusd ] }, ] @@ -306,8 +307,8 @@ module.exports = { bridge: { address: '0xAf41a65F786339e7911F4acDAD6BD49426F2Dc6b', tokens: [ - '0x72cb10c6bfa5624dd07ef608027e366bd690048f', // JEWEL - '0xa9ce83507d872c5e1273e745abcfda849daa654f', // xJEWEL + ADDRESSES.harmony.JEWEL, + ADDRESSES.harmony.xJEWEL, '0x24eA0D436d3c2602fbfEfBe6a16bBc304C963D04', // DFKTEARS ] }, @@ -322,16 +323,16 @@ module.exports = { ] }, { - pool: '0x2913E812Cf0dcCA30FB28E6Cac3d2DCFF4497688', + pool: ADDRESSES.arbitrum.nUSD, tokens: [ "0x6983d1e6def3690c4d616b13597a09e6193ea013", // 1ETH - // "0x0b5740c6b4a97f90ef2f0220651cca420b868ffb", // neth + // ADDRESSES.optimism.gOHM, // neth ] }, { pool: '0x00A4F57D926781f62D09bb05ec76e6D8aE4268da', tokens: [ - "0xb12c13e66ade1f72f71834f2fc5082db8c091358", // avax + ADDRESSES.harmony.AVAX, // "???", // synAvax ] }, @@ -367,23 +368,23 @@ module.exports = { }, pools: [ { - pool: '0x07379565cD8B0CaE7c60Dc78e7f601b34AF2A21c', + pool: ADDRESSES.aurora.nUSD, tokens: [ - "0x4e71a2e537b7f9d9413d3991d37958c0b5e1e503", // NOTE + ADDRESSES.canto.NOTE, // "0xd8836af2e565d3befce7d906af63ee45a57e8f80", // nUSD ] }, { pool: '0x273508478e099Fdf953349e6B3704E7c3dEE91a5', tokens: [ - "0x80b5a32e4f032b2a058b4f29ec95eefeeb87adcd", // USDC + ADDRESSES.functionx.WFX, // "0xd8836af2e565d3befce7d906af63ee45a57e8f80", // nusd ] }, { pool: '0xF60F88bA0CB381b8D8A662744fF93486273c22F9', tokens: [ - "0x5fd55a1b9fc24967c4db09c513c3ba0dfa7ff687", // cantoETH + ADDRESSES.functionx.PURSE, // "0x09fec30669d63a13c666d2129230dd5588e2e240", // nETH ] }, @@ -408,7 +409,7 @@ module.exports = { pool: '0xfdbad1699a550f933efebf652a735f2f89d3833c', tokens: [ "0xd6dab4cff47df175349e6e7ee2bf7c40bb8c05a3", // USDT - "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", // o.USDT + ADDRESSES.klaytn.oUSDT, ] }, ] diff --git a/projects/synapse/index.js b/projects/synapse/index.js index 214b382bd7..d5a5ed90fc 100644 --- a/projects/synapse/index.js +++ b/projects/synapse/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens, } = require("../helper/unwrapLPs") -const { sumSingleBalance, TOKEN_LIST, getDenomBalance, } = require('../helper/chain/terra') +const { sumTokens: sumTokensCosmos, } = require('../helper/chain/cosmos') const sdk = require("@defillama/sdk") const { getChainTransform, getFixBalances } = require("../helper/portedTokens") const config = require("./config") -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null Object.keys(config).forEach(chain => { const chainExport = { @@ -45,10 +46,7 @@ module.exports.ethereum.pool2 = async (ts, block) => { module.exports.terra = {} module.exports.terra.tvl = async (timestamp, ethBlock, { terra: block }) => { - const balances = {} - const balance = await getDenomBalance('uusd', 'terra1qwzdua7928ugklpytdzhua92gnkxp9z4vhelq8', block) - sumSingleBalance(balances, TOKEN_LIST.terrausd, balance) - return balances + return sumTokensCosmos({ owner: 'terra1qwzdua7928ugklpytdzhua92gnkxp9z4vhelq8', chain: 'terra'}) } module.exports.hallmarks = [ [1651881600, "UST depeg"], diff --git a/projects/syncdex-finance/index.js b/projects/syncdex-finance/index.js index 04db3fbd43..e84840811e 100644 --- a/projects/syncdex-finance/index.js +++ b/projects/syncdex-finance/index.js @@ -1,29 +1,8 @@ -const { sumTokensExport } = require("../helper/unwrapLPs"); - -const native_staking_contract = "0x9212456Da7804245BDF02e7294E4f36D27f9c2B1"; -const usdc_staking_contract = "0xa8CD01322Ad632c9656879e99Fd7FbC11ca8E3BB"; -const sydx_staking_contract = "0xB2bD1427b04d84eA14214582C59CB16D4F1d676E"; -const native_usdc_farming_contract = "0x3F90A802B5D6E984A6f296F697AB847C5fE23F31"; -const native_sydx_farming_contract = "0xDA24F9528102A5A126Cd7eeE8c6e22A786cAE844"; -const sydx_usdc_farming_contract = "0x75aC887df149076b7DF4deAA0267711475b71572"; -const usdc_usdplus_farming_contract = "0xF0B42d393eAB886bd9310AaF0A2B1eDbaaD31fdE" - -const assets = [ - "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4", - "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91", - "0x0000000000000000000000000000000000000000", // This is address of native token (ETH), you can check native_staking_contract - "0x8E86e46278518EFc1C5CEd245cBA2C7e3ef11557" -]; -const SYNC_DEX = '0x3a34FA9a1288597Ad6C1Da709f001D37FeF8b19e' - -const owners = [native_staking_contract, usdc_staking_contract, sydx_staking_contract, native_usdc_farming_contract, native_sydx_farming_contract, sydx_usdc_farming_contract, usdc_usdplus_farming_contract] - module.exports = { era: { hallmarks: [ [1681340401,"Rug Pull"] ], tvl: () => 0, - staking: () => 0, }, }; \ No newline at end of file diff --git a/projects/syncswap/index.js b/projects/syncswap/index.js index 214956024e..8b76cdcb78 100644 --- a/projects/syncswap/index.js +++ b/projects/syncswap/index.js @@ -1,22 +1,11 @@ const { getLogs } = require('../helper/cache/getLogs') const { transformDexBalances } = require('../helper/portedTokens') const sdk = require('@defillama/sdk') -const vault = '0x621425a1Ef6abE91058E9712575dcc4258F8d091' - -async function getFactoryLogs(api, factory) { - return getLogs({ - api, - target: factory, - fromBlock: 9775, - topic: 'PoolCreated(address,address,address)', - eventAbi: 'event PoolCreated(address indexed token0, address indexed token1, address pool)', - onlyArgs: true, - }) -} async function tvl(timestamp, ethBlock, chainBlocks, { api }) { - const stableLogs = await getFactoryLogs(api, '0x5b9f21d407F35b10CbfDDca17D5D84b129356ea3') - const classicLogs = await getFactoryLogs(api, '0xf2DAd89f2788a8CD54625C60b55cD3d2D0ACa7Cb') + const { fromBlock, stableFactory, classicFactory, } = config[api.chain] + const stableLogs = await getFactoryLogs(api, stableFactory) + const classicLogs = await getFactoryLogs(api, classicFactory) const balances = {} const data = [] const stableReserves = await api.multiCall({ abi: 'function getReserves() external view returns (uint, uint)', calls: stableLogs.map(i => i.pool) }) @@ -28,10 +17,27 @@ async function tvl(timestamp, ethBlock, chainBlocks, { api }) { classicReserves.forEach(([token0Bal, token1Bal], i) => { data.push({ token0Bal, token1Bal, token0: classicLogs[i].token0, token1: classicLogs[i].token1, }) }) - return transformDexBalances({ balances, data, chain: 'era' }) + return transformDexBalances({ balances, data, chain: api.chain }) + + async function getFactoryLogs(api, factory) { + return getLogs({ + api, + target: factory, + fromBlock, + topic: 'PoolCreated(address,address,address)', + eventAbi: 'event PoolCreated(address indexed token0, address indexed token1, address pool)', + onlyArgs: true, + }) + } +} + +const config = { + era: { fromBlock: 9775, stableFactory: '0x5b9f21d407F35b10CbfDDca17D5D84b129356ea3', classicFactory: '0xf2DAd89f2788a8CD54625C60b55cD3d2D0ACa7Cb', }, + linea: { fromBlock: 716, stableFactory: '0xE4CF807E351b56720B17A59094179e7Ed9dD3727', classicFactory: '0x37BAc764494c8db4e54BDE72f6965beA9fa0AC2d', }, } module.exports = { misrepresentedTokens: true, - era: { tvl, } -} \ No newline at end of file +} + +Object.keys(config).forEach(chain => { module.exports[chain] = { tvl } }) diff --git a/projects/synfutures-v1/index.js b/projects/synfutures-v1/index.js index 59bea27f05..0fd6498c91 100644 --- a/projects/synfutures-v1/index.js +++ b/projects/synfutures-v1/index.js @@ -1,62 +1,29 @@ -// SynFutures-v1 TVL from chain -const { request, gql } = require("graphql-request"); const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs, getAddress } = require('../helper/cache/getLogs'); -const QUERY_PAIRS = gql`{ - pairs(first: 1000, where: {state_: {status_not_in: [CREATED]}}) { - id - symbol - ammProxy - futuresProxy - quote { - id - symbol - decimals - } - state{ - status - } - } -}`; - -const info = { - ethereum: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/ethereum-v1', - }, - bsc: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/bsc-v1', - }, - polygon: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/polygon-v1', - }, - arbitrum: { - subgraph: 'https://api.thegraph.com/subgraphs/name/synfutures/arbitrum-one-v1', - }, +const config = { + ethereum: { factory: '0x6e893ddfa75d67febb853e00f81c913c151bf9a9', fromBlock: 12599579 }, + bsc: { factory: '0x6e893ddfa75d67febb853e00f81c913c151bf9a9', fromBlock: 8142455 }, + arbitrum: { factory: '0x1e7db497d664e77fc96321a1ad0bf018e55cbff8', fromBlock: 218877 }, + polygon: { factory: '0x6e893ddfa75d67febb853e00f81c913c151bf9a9', fromBlock: 15508720 }, } -function chainTvl(chain) { - return async (_, _b, {[chain]: block}) => { - const pairsData = await request(info[chain].subgraph,QUERY_PAIRS,{ block }); - const toa = [] - - for (let pair of pairsData.pairs) - toa.push([pair.quote.id, pair.id]) - return sumTokens2({ chain, block, tokensAndOwners: toa, }) +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xee193dabd87eb415480c4b61fae32c09068f2348d08b811bbf3a004404eae51b'], + fromBlock, + }) + const tokensAndOwners = logs.map((i) => { + const token = getAddress(i.data.slice(64, 64 * 2 + 2)); + const pool = getAddress(i.data.slice(64 * 5, 64 * 6 + 2)); + return [token, pool]; + }); + return sumTokens2({ tokensAndOwners, api, }) + } } -} - -module.exports = { - timetravel: false, - polygon: { - tvl: chainTvl('polygon'), - }, - bsc: { - tvl: chainTvl('bsc'), - }, - ethereum: { - tvl: chainTvl('ethereum'), - }, - arbitrum: { - tvl: chainTvl('arbitrum'), - }, -} \ No newline at end of file +}) \ No newline at end of file diff --git a/projects/synfutures-v2/index.js b/projects/synfutures-v2/index.js new file mode 100644 index 0000000000..be1e4a63a0 --- /dev/null +++ b/projects/synfutures-v2/index.js @@ -0,0 +1,26 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getLogs, getAddress } = require('../helper/cache/getLogs'); + +const config = { + polygon: { factory: '0x1267c6e5d4048318ae48f936130c292e2e0edd73', fromBlock: 32799818 }, +} + +Object.keys(config).forEach(chain => { + const { factory, fromBlock, } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0x3e54f626b503b6952f636f8f05b35a3a2c6345dd88a99285dede80fc89961706'], + fromBlock, + }) + const tokensAndOwners = logs.map((i) => { + const token = getAddress(i.data.slice(0, 64 + 2)); + const pool = getAddress(i.data.slice(64 * 3, 64 * 4 + 2)); + return [token, pool]; + }); + return sumTokens2({ tokensAndOwners, api, }) + } + } +}) \ No newline at end of file diff --git a/projects/synlev.js b/projects/synlev.js index 8e675589af..ab041be759 100644 --- a/projects/synlev.js +++ b/projects/synlev.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk") -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH = ADDRESSES.ethereum.WETH; async function tvl(ts, block) { const balances = {} const { output: balance1 } = await sdk.api.eth.getBalance({ target: '0xFf40827Ee1c4Eb6052044101E1C6E28DBe1440e3', block }) diff --git a/projects/synthetix/api.js b/projects/synthetix/api.js index bedf71b8d0..1850690eed 100644 --- a/projects/synthetix/api.js +++ b/projects/synthetix/api.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); const abi = require('./abi.json'); @@ -21,7 +22,7 @@ const synthetixStates = { optimism: '0x8377b25B8564f6Be579865639776c5082CB37163' // It's Issuer, not SynthetixState but has the same issuanceRatio function } const synthetixs = { - ethereum: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', + ethereum: ADDRESSES.ethereum.SNX, optimism: '0x8700daec35af8ff88c16bdf0418774cb3d7599b4' } const snxGraphEndpoints = { @@ -29,7 +30,7 @@ const snxGraphEndpoints = { optimism: 'https://api.thegraph.com/subgraphs/name/0xngmi/snx-lite-optimism-regenesis' } const ethStaking = "0xc1aae9d18bbe386b102435a8632c8063d31e747c" -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" +const weth = ADDRESSES.ethereum.WETH function chainTvl(chain) { return async (timestamp, ethBlock, chainBlocks) => { diff --git a/projects/synthetix/apiCache.js b/projects/synthetix/apiCache.js index ff8300cddd..735e61a8fd 100644 --- a/projects/synthetix/apiCache.js +++ b/projects/synthetix/apiCache.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); const abi = require('./abi.json'); @@ -24,7 +25,7 @@ const synthetixStates = { optimism: '0x8377b25B8564f6Be579865639776c5082CB37163' // It's Issuer, not SynthetixState but has the same issuanceRatio function } const synthetixs = { - ethereum: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', + ethereum: ADDRESSES.ethereum.SNX, optimism: '0x8700daec35af8ff88c16bdf0418774cb3d7599b4' } const snxGraphEndpoints = { @@ -32,7 +33,7 @@ const snxGraphEndpoints = { optimism: 'https://api.thegraph.com/subgraphs/name/0xngmi/snx-lite-optimism-regenesis' } const ethStaking = "0xc1aae9d18bbe386b102435a8632c8063d31e747c" -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" +const weth = ADDRESSES.ethereum.WETH function chainTvl(chain) { return async (timestamp, ethBlock, chainBlocks) => { diff --git a/projects/synthex/index.js b/projects/synthex/index.js new file mode 100644 index 0000000000..228326c2ab --- /dev/null +++ b/projects/synthex/index.js @@ -0,0 +1,28 @@ +const ADDRESSES = require('../helper/coreAssets.json') + +const { sumTokensExport } = require("../helper/unwrapLPs"); +const poolC = '0x8d6E834277E4f513BacF83B0A87524c913eF8691'; +const poolF = "0x0546458d110Dff9D394C0F4621423Bc8f009A779"; +const USDC = ADDRESSES.arbitrum.USDC; +const WBTC = ADDRESSES.arbitrum.WBTC; +const ARB = "0x912CE59144191C1204E64559FE8253a0e49E6548"; +const ETH = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; +const WETH = ADDRESSES.arbitrum.WETH; +const USDT = ADDRESSES.arbitrum.USDT; +const DAI = ADDRESSES.optimism.DAI; + + +module.exports = { + methodology: "counts value of assets in the PoolC and PoolF", + start: 82762407, + arbitrum: { + tvl: sumTokensExport({ + ownerTokens: [ + [[USDC, WBTC, ARB, ETH, WETH], poolC], + [[USDC, DAI, USDT], poolF], + ] + }), + }, +}; + + diff --git a/projects/syrupfinance/index.js b/projects/syrupfinance/index.js index b76635caeb..d053dd4752 100644 --- a/projects/syrupfinance/index.js +++ b/projects/syrupfinance/index.js @@ -8,6 +8,9 @@ const srxToken = "0xdef49c195099e30e41b2df7dad55e0bbbe60a0c5"; module.exports = { + hallmarks: [ + [1675209600, "Rug Pull"] + ], bsc: { staking: staking(bscStaking, srxToken, "bsc", undefined, undefined), tvl: gmxExports({ vault: bscVault }) diff --git a/projects/t-protocol/index.js b/projects/t-protocol/index.js new file mode 100644 index 0000000000..dad6f75eea --- /dev/null +++ b/projects/t-protocol/index.js @@ -0,0 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const USDC_TOKEN_CONTRACT = ADDRESSES.ethereum.USDC; +const TREASURY_CONTRACT = "0xa01D9bc8343016C7DDD39852e49890a8361B2884"; +const STBT = '0x530824DA86689C9C17CdC2871Ff29B058345b44a' + +module.exports = { + methodology: "counts value of assets in the Treasury", + start: 1677913260, + ethereum: { + tvl: sumTokensExport({ owner: TREASURY_CONTRACT, tokens: [USDC_TOKEN_CONTRACT, STBT] }), + }, +}; diff --git a/projects/tai-money/index.js b/projects/tai-money/index.js new file mode 100644 index 0000000000..8691301bbc --- /dev/null +++ b/projects/tai-money/index.js @@ -0,0 +1,31 @@ +const { sumTokens2 } = require('../helper/unwrapLPs'); + +const config = { + ethereum: { + coinJoins: { + "GEB_JOIN_ETH_A": "0xf6c35af06ed2d97f62b31d7030370f8ae33bd3b1", + "GEB_JOIN_ETH_B": "0xa822e24f944127f445d8ad30adcddd721a5616e9", + "GEB_JOIN_ETH_C": "0x793a0de4db6f96cf30d371ef28278496b66223f8", + "GEB_JOIN_WSTETH_A": "0x5d527c9641effeb3802f2ffafdd15a1b95e41c8c", + "GEB_JOIN_WSTETH_B": "0x9e240daf92dd0edf903def1ff1dd036ca447aaf7", + "GEB_JOIN_RETH_A": "0xf4e8267f05cf1ead340ac7f2bff343528526f16b", + "GEB_JOIN_RETH_B": "0x7daedd26e1202897c9c6bf3967fb5ae45616aef5", + "GEB_JOIN_RAI_A": "0x67b97de3f10ad081fbddf36099699d5ab488828e", + "GEB_JOIN_CBETH_A": "0x10ff8d4376798f920fae147f109157fa6b9a985b", + "GEB_JOIN_CBETH_B": "0xb4941d2a62421adc6ce939cb466f884535bfbff9", + }, + }, +} + +module.exports = {} + +Object.keys(config).forEach(chain => { + let { coinJoins } = config[chain] + coinJoins = Object.values(coinJoins) + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const tokens = await api.multiCall({ abi: 'address:collateral', calls: coinJoins }) + return sumTokens2({ api, tokensAndOwners2: [tokens, coinJoins]}) + } + } +}) \ No newline at end of file diff --git a/projects/taichi/index.js b/projects/taichi/index.js index 7c3e1539cc..daeb79d21d 100644 --- a/projects/taichi/index.js +++ b/projects/taichi/index.js @@ -1,13 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0xD4b0DC48AB6BD7907E3698A62CCD1DBE2d46d310" module.exports = { + hallmarks: [ + [1648765747,"Rug Pull"] + ], deadFrom: 1648765747, ...ohmTvl(treasury, [ //BUSD - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.BUSD, false], //WBNB - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], + [ADDRESSES.bsc.WBNB, false], //pancakeswap LP ["0x5ef473d91e89c613b3e5138fa8279884bf5b7adf", true], ], "bsc", "0xb12Ef3033D5CE0F3f80f3A15dE7E90Cd87a5973e", "0xe49bfc53a195a62d78a941a1967d7b0f83a47c14") diff --git a/projects/talentprotocol/index.js b/projects/talentprotocol/index.js index 5b9daa817e..4ce8d9ea7b 100644 --- a/projects/talentprotocol/index.js +++ b/projects/talentprotocol/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') -const cUSDTokenAddress = "0x765DE816845861e75A25fCA122bb6898B8B1282a" +const cUSDTokenAddress = ADDRESSES.celo.cUSD const stakingContract = "0x8ea91a982d93836415CE3abbaf12d59fb8cE3Ff8" diff --git a/projects/tangent-protocol/index.js b/projects/tangent-protocol/index.js new file mode 100644 index 0000000000..235771d647 --- /dev/null +++ b/projects/tangent-protocol/index.js @@ -0,0 +1,8 @@ +const { sumTokensExport } = require('../helper/chain/cardano') + +module.exports = { + cardano: { + tvl: () => 0, + staking: sumTokensExport({ owner: 'addr1q92f5qddkudgq6sna3qfsqrwnk9253gv4qwmfw735xvluhrsqycc2x23z60333ktgjrrufgv8xh2gnxr4m6av63jkassawurfj'}), + }, +}; \ No newline at end of file diff --git a/projects/tangent/index.js b/projects/tangent/index.js index 8a79817c1f..caba175906 100644 --- a/projects/tangent/index.js +++ b/projects/tangent/index.js @@ -1,13 +1,10 @@ const { default: axios } = require('axios'); -async function fetch(){ - +async function fetch() { return (await axios.get('https://api.tangent.bar/api/v1/MainStatistics')).data.allTVL - - } module.exports = { methodology: "Data is retrieved from the api at https://api.tangent.bar/", timetravel: false, - fetch + fetch: () => 0 } diff --git a/projects/tarot/index.js b/projects/tarot/index.js index a99f5036fb..7bdb44c97e 100644 --- a/projects/tarot/index.js +++ b/projects/tarot/index.js @@ -15,6 +15,7 @@ const config = { '0x1D90fDAc4DD30c3ba38d53f52A884F6e75d0989e', // Tarot Opaline '0xD7cABeF2c1fD77a31c5ba97C724B82d3e25fC83C', // Tarot Velours '0x49DF1fe24cAf1a7dcBB2E2b1793b93b04eDb62bF', // Tarot Jupiter + '0xBA47316035E6C95b31cb55BfB93458Ad41E4Da04', // Tarot Velouté ] }, arbitrum: { @@ -58,6 +59,11 @@ const config = { '0x36Df0A76a124d8b2205fA11766eC2eFF8Ce38A35', // Tarot Paprika ] }, + era: { + factories: [ + '0xf450b51fb2E1e4f05DAf9Cf7D9BB97714540B4f4', // Tarot Zeniths + ] + }, } module.exports = {} diff --git a/projects/tashi/index.js b/projects/tashi/index.js new file mode 100644 index 0000000000..e08d509c35 --- /dev/null +++ b/projects/tashi/index.js @@ -0,0 +1,7 @@ +const { compoundExports } = require('../helper/compound') +const ADDRESSES = require('../helper/coreAssets.json') + +module.exports = { + methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets", + evmos: compoundExports("0x053841Bd1D291380726a007eA834Ecd296923260", "evmos", "0x1cd248D72248A0618932F77093Dc4ceC9757759d", ADDRESSES.null, undefined, undefined, { fetchBalances: true, }) +} diff --git a/projects/tbill.js b/projects/tbill.js index 51a20e63a9..4ab4a7a815 100644 --- a/projects/tbill.js +++ b/projects/tbill.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); async function tvl(timestamp, _, { theta: block }) { return { "theta-fuel": ( await sdk.api.eth.getBalance({ - target: "0x4dc08b15ea0e10b96c41aec22fab934ba15c983e", + target: ADDRESSES.theta.WTFUEL, block, chain: "theta", decimals: 18, diff --git a/projects/tbtc/index.js b/projects/tbtc/index.js index 8b28482c38..214a888e48 100644 --- a/projects/tbtc/index.js +++ b/projects/tbtc/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') async function tvl(ts, block) { return { - '0x18084fba666a33d37592fa2633fd49a74dd93a88': (await sdk.api.erc20.totalSupply({ target: '0x18084fba666a33d37592fa2633fd49a74dd93a88', block })).output + [ADDRESSES.ethereum.tBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.tBTC, block })).output } } diff --git a/projects/teahouse-v3/abi.json b/projects/teahouse-v3/abi.json new file mode 100644 index 0000000000..b6e21cbcbb --- /dev/null +++ b/projects/teahouse-v3/abi.json @@ -0,0 +1,4 @@ +{ + "assetToken1": "function assetToken1() view returns (address)", + "estimatedValueIntoken1": "function estimatedValueInToken1() view returns (uint256 value1)" +} diff --git a/projects/teahouse-v3/index.js b/projects/teahouse-v3/index.js new file mode 100644 index 0000000000..25f35be4e0 --- /dev/null +++ b/projects/teahouse-v3/index.js @@ -0,0 +1,40 @@ +const abi = require("./abi.json"); +const { getConfig } = require("../helper/cache"); + +// teahouse public api for vault +const teahouseVaultAPI = "https://vault-content-api.teahouse.finance/vaults"; + +// get vault contract addresses from teahouse api +async function getVaultContractsAddress(chain) { + let plAddress = []; + const { vaults } = await getConfig("teahouse", teahouseVaultAPI); + vaults.forEach((element) => { + // v3 vaults + if (element.isDeFi == true && element.isActive == true) { + if (element.chain === chain) plAddress.push(element.share.address); + } + }); + return plAddress; +} + +const chains = ["ethereum", "optimism", "arbitrum"]; + +chains.forEach((chain) => { + module.exports[chain] = { + tvl: async (_, _b, _cb, { api }) => { + const vaults = await getVaultContractsAddress(chain); + const tokens = await api.multiCall({ + abi: abi.assetToken1, + calls: vaults, + }); + const bals = await api.multiCall({ + abi: abi.estimatedValueIntoken1, + calls: vaults, + }); + api.addTokens(tokens, bals); + return api.getBalances(); + }, + }; +}); + +module.exports.misrepresentedTokens = true \ No newline at end of file diff --git a/projects/teahouse/abi.json b/projects/teahouse/abi.json new file mode 100644 index 0000000000..4ec981ae73 --- /dev/null +++ b/projects/teahouse/abi.json @@ -0,0 +1,6 @@ +{ + "globalState": "function globalState() view returns (uint128 depositLimit, uint128 lockedAssets, uint32 cycleIndex, uint64 cycleStartTimestamp, uint64 fundingLockTimestamp, bool fundClosed)", + "cycleState": "function cycleState(uint32) view returns (uint128 totalFundValue, uint128 fundValueAfterRequests, uint128 requestedDeposits, uint128 convertedDeposits, uint128 requestedWithdrawals, uint128 convertedWithdrawals)", + "asset": "function asset() view returns (address assetTokenAddress)", + "latestAnswer": "function latestAnswer() view returns (int256)" +} diff --git a/projects/teahouse/index.js b/projects/teahouse/index.js new file mode 100644 index 0000000000..62853ef81d --- /dev/null +++ b/projects/teahouse/index.js @@ -0,0 +1,49 @@ +const abi = require("./abi.json"); +const { getConfig } = require("../helper/cache"); + +// teahouse public api for vault +const teahouseVaultAPI = "https://vault-content-api.teahouse.finance/vaults"; + +// get vault contract addresses from teahouse api +async function getVaultContractsAddress(chain) { + let htAddress = []; + const { vaults } = await getConfig("teahouse", teahouseVaultAPI); + vaults.forEach((element) => { + // v2 vaults + if (element.isDeFi == false && element.isActive == true) { + if (element.chain === chain) htAddress.push(element.share.address); + } + }); + return htAddress; +} + + +const chains = ["ethereum", "optimism", "arbitrum"]; + +chains.forEach((chain) => { + module.exports[chain] = { + tvl: async (_, _b, _cb, { api }) => { + const vaults = await getVaultContractsAddress(chain); + const tokens = await api.multiCall({ + abi: "address:asset", + calls: vaults, + }); + const cycleIndices = ( + await api.multiCall({ abi: abi.globalState, calls: vaults }) + ).map((i) => i.cycleIndex); + const bals = ( + await api.multiCall({ + abi: abi.cycleState, + calls: vaults.map((vault, i) => ({ + target: vault, + params: cycleIndices[i] - 1, + })), + }) + ).map((i) => i.fundValueAfterRequests); + api.addTokens(tokens, bals); + return api.getBalances(); + }, + }; +}); + +module.exports.misrepresentedTokens = true \ No newline at end of file diff --git a/projects/teddy/index.js b/projects/teddy/index.js index 678449fd6f..3f93e997c0 100644 --- a/projects/teddy/index.js +++ b/projects/teddy/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); @@ -11,8 +12,8 @@ const TEDDY = "0x094bd7b2d99711a1486fb94d4395801c6d0fddcc"; const stakingPool2Contract = "0x9717Ff7406Be065EA177bA9ab1bE704060Af8370"; const WAVAX_TSD_PGL = "0x67E395B6ACd948931eeE8F52C7c1Fe537E7f1a7a"; -const NATIVE_ADDRESS = "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"; -//const LUSD_TOKEN_ADDRESS = "0x5f98805a4e8be255a32880fdec7f6728c6568ba0"; +const NATIVE_ADDRESS = ADDRESSES.avax.WAVAX; +//const LUSD_TOKEN_ADDRESS = ADDRESSES.ethereum.LUSD; const TROVE_MANAGER_ADDRESS = "0xd22b04395705144Fd12AfFD854248427A2776194"; diff --git a/projects/tegisto/index.js b/projects/tegisto/index.js index 24d20a58d5..699f072594 100644 --- a/projects/tegisto/index.js +++ b/projects/tegisto/index.js @@ -1,8 +1,16 @@ const { staking } = require("../helper/staking") +const { getUniTVL } = require("../helper/unknownTokens") +const sdk = require('@defillama/sdk') module.exports = { kava: { - tvl: () => 0, + tvl: sdk.util.sumChainTvls([ + getUniTVL({ factory: '0x07fA706528c0bb721327798B5686B620BCcf5b99', useDefaultCoreAssets: true, fetchBalances: true }), + getUniTVL({ factory: '0xfdF832fe60a5145909e7b24Cff225830c1850917', useDefaultCoreAssets: true, fetchBalances: true }), + ]), staking: staking('0x744Dd9f79b80437a9e5eb0292128045F51C48b6d', '0x87F1E00d6bcD3712031e5edD26DFcdB0FEd35D20', undefined, 'tegisto', 18), + }, + celo: { + tvl: getUniTVL({ factory: '0x1FA136Ba715889B691305a687A0fbD82e6287A67', useDefaultCoreAssets: true, fetchBalances: true }), } } \ No newline at end of file diff --git a/projects/tegro/index.js b/projects/tegro/index.js index 13c2fcb3e7..e66a25a663 100644 --- a/projects/tegro/index.js +++ b/projects/tegro/index.js @@ -1,25 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { get } = require('../helper/http') -const { transformDexBalances } = require('../helper/portedTokens') +const { getConfig } = require('../helper/cache') +const { getTonBalance } = require('../helper/chain/ton') const sdk = require('@defillama/sdk') -const nullAddress = '0x0000000000000000000000000000000000000000' +const nullAddress = ADDRESSES.null module.exports = { misrepresentedTokens: true, timetravel: false, ton: { - tvl: async () => { - const pools = await get('https://api.tegro.finance/v1/pairs') - sdk.log(pools.length) - - return transformDexBalances({ - chain: 'ton', - data: pools.map(i => ({ - token0: i.base.address ?? nullAddress, - token1: i.quote.address ?? nullAddress, - token0Bal: i.reserve.base, - token1Bal: i.reserve.quote, - })) - }) + tvl: async (_, _1, _2, { api}) => { + const pools = await getConfig('tegro-fi', 'https://api.tegro.finance/v1/pairs') + let tonPools = pools.filter(i => !i.base.address ).map(i => i.address) + sdk.log(pools.length, tonPools.length) + const tonBalances = await Promise.all(tonPools.map(getTonBalance)) + tonBalances.forEach(i => api.add(nullAddress, i * 2)) } } } diff --git a/projects/templar/api.js b/projects/templar/api.js new file mode 100644 index 0000000000..cd075bf1b6 --- /dev/null +++ b/projects/templar/api.js @@ -0,0 +1,18 @@ +const index = require('./index') + +module.exports = { + bsc: { + tvl: index.bsc.tvl, + staking: index.bsc.staking, + }, + /* + moonriver: { + tvl: () => 0, + staking: index.moonriver.staking, + }, + harmony: { + tvl: () => 0, + staking: index.harmony.staking, + }, + */ +} \ No newline at end of file diff --git a/projects/templar/index.js b/projects/templar/index.js index 65e3b0fb8a..31a8172a02 100644 --- a/projects/templar/index.js +++ b/projects/templar/index.js @@ -1,90 +1,30 @@ -const sdk = require("@defillama/sdk"); -const {staking} = require("../helper/staking"); -const {sumTokensAndLPsSharedOwners} = require("../helper/unwrapLPs"); -const {getFixBalancesSync} = require("../helper/portedTokens"); +const { sumTokensExport } = require("../helper/unwrapLPs"); - -const bscTem = "0x19e6BfC1A6e4B042Fb20531244D47E252445df01"; const bscStaking = "0xa1f61Ca61fe8655d2a204B518f6De964145a9324"; -const bscTreasuryContract = "0xd01e8D805BB310F06411e70Fd50eB58cAe2B4C27"; - -async function bscTvl(timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners( - balances, - [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], // WBNB - ["0xfe19f0b51438fd612f6fd59c1dbb3ea319f433ba", false], // MIM - ["0x9911e98974d0badde85bd5f4d1f93087aa3ec5fa", true], // MIM-BUSD CAKELP - ["0xbf598a387c5f96f8bac9bdccf8fb68bc189cdff7", true], // TEM-MIM CAKELP - ["0x1ede821daade714edade648f525ada0c5fe4ee3a", true], // TEM-BUSD CAKELP - ], - [bscTreasuryContract], - chainBlocks.bsc, - "bsc", - (addr) => { - if (addr.toLowerCase() === "0xfe19f0b51438fd612f6fd59c1dbb3ea319f433ba") { - return "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3"; - } - return `bsc:${addr}`; - } - ); - return balances; -} - -const moonriverTem = "0xD86E3F7B2Ff4e803f90c799D702955003bcA9875"; -const moonriverStaking = "0xa1f61Ca61fe8655d2a204B518f6De964145a9324"; -const moonriverTreasuryContract = "0xd01e8D805BB310F06411e70Fd50eB58cAe2B4C27"; - -async function moonriverTvl (timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, [ - ["0x5eF6e7e82b2402d354a22a0714299920135B45bE", true], // temMim HBLP - ["0x0cae51e1032e8461f4806e26332c030e34de3adb", false], // MIM - ["0x98878B06940aE243284CA214f92Bb71a2b032B8A", false] // WMOVR - ], [moonriverTreasuryContract], chainBlocks.moonriver, "moonriver", addr=> { - if (addr.toLowerCase() === "0xd86e3f7b2ff4e803f90c799d702955003bca9875") { - return "bsc:0x19e6BfC1A6e4B042Fb20531244D47E252445df01" - } - return `moonriver:${addr}` - }) - return balances; -} - - -const harmonyTem = "0xd754ae7bb55feb0c4ba6bc037b4a140f14ebe018"; -const harmonyStaking = "0xd86e3f7b2ff4e803f90c799d702955003bca9875"; -const harmonyTreasury = "0x92ae908d7bcf891ffa47ae10596e6a66cf43a77a"; +const bscStakingV2 = "0xffC7B93b53BC5F4732b414295E989684702D0eb5"; -async function harmonyTvl (timestamp, block, chainBlocks) { - let balances = {}; - await sumTokensAndLPsSharedOwners(balances, [ - ["0xef977d2f931c1978db5f6747666fa1eacb0d0339", false], // DAI - ["0xeed838406194feba1bd654cfdf85a941ac0944bc", true], // TEM DAI SLP - ["0xcf664087a5bb0237a0bad6742852ec6c8d69a27a", false] // WONE - ], [harmonyTreasury], chainBlocks.harmony, "harmony", addr=> { - addr = addr.toLowerCase(); - if (addr == "0xd754ae7bb55feb0c4ba6bc037b4a140f14ebe018") { - return `bsc:0x19e6BfC1A6e4B042Fb20531244D47E252445df01`; - } - return `harmony:${addr}`; - }); - getFixBalancesSync('harmony')(balances); - return balances; -} +const bscTokens = { + TEM: "0x19e6BfC1A6e4B042Fb20531244D47E252445df01", +}; module.exports = { - bsc: { - tvl: bscTvl, - staking: staking(bscStaking, bscTem, "bsc") - }, - moonriver: { - tvl: moonriverTvl, - staking: staking(moonriverStaking, moonriverTem, "moonriver", "bsc:0x19e6BfC1A6e4B042Fb20531244D47E252445df01") - }, - harmony: { - tvl: harmonyTvl, - staking: staking(harmonyStaking, harmonyTem, "harmony", "bsc:0x19e6BfC1A6e4B042Fb20531244D47E252445df01") - }, -} + bsc: { + staking: sumTokensExport({ + owners: [bscStaking, bscStakingV2], + tokens: [bscTokens.TEM], + }), + tvl: () => 0, + }, + ethereum: { + tvl: () => 0, + staking: () => 0, + }, + moonriver: { + tvl: () => 0, + staking: () => 0, + }, + harmony: { + tvl: () => 0, + staking: () => 0, + }, +}; \ No newline at end of file diff --git a/projects/templedao-trade/index.js b/projects/templedao-trade/index.js index 2e155b27dd..b0cb2306af 100644 --- a/projects/templedao-trade/index.js +++ b/projects/templedao-trade/index.js @@ -1,12 +1,10 @@ const sdk = require("@defillama/sdk"); - - -const FRAX = "0x853d955aCEf822Db058eb8505911ED77F175b99e"; +const ADDRESSES = require('../helper/coreAssets.json') const tvlContracts = [ { address: '0x98257C876ACe5009e7B97843F8c71b3AE795c71E', // AMMrouter - token: FRAX + token: ADDRESSES.ethereum.FRAX } ]; diff --git a/projects/templedao/index.js b/projects/templedao/index.js index 739b105295..3cc965307c 100644 --- a/projects/templedao/index.js +++ b/projects/templedao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); const { sumTokens, sumTokens2, unwrapUniswapV3NFTs } = require("../helper/unwrapLPs") @@ -14,9 +15,9 @@ const TEMPLE = "0x470ebf5f030ed85fc1ed4c2d36b9dd02e77cf1b7"; const auraLocker = '0x3Fa73f1E5d8A792C80F426fc8F84FBF7Ce9bBCAC'; const templeTreasuryContract = "0x5c8898f8e0f9468d4a677887bc03ee2659321012"; -const FRAX = "0x853d955acef822db058eb8505911ed77f175b99e"; +const FRAX = ADDRESSES.ethereum.FRAX; const FXS = "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0"; -const CVX_FXS = "0xFEEf77d3f69374f66429C91d732A244f074bdf74"; +const CVX_FXS = ADDRESSES.ethereum.cvxFXS; const AURA = '0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF' const TEMPLE_DENDEND1 = '0x8A5058100E60e8F7C42305eb505B12785bbA3BcA'; const TEMPLE_DENDEND2 = '0xb0D978C8Be39C119922B99f483cD8C4092f0EA56'; diff --git a/projects/tempodao/index.js b/projects/tempodao/index.js index a0af66dd95..97279e02c2 100644 --- a/projects/tempodao/index.js +++ b/projects/tempodao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0xd069c8c4aD8CCE7076BdD1dca8AA9199dC980Ea8"; @@ -7,5 +8,5 @@ module.exports = ohmTvl(treasuryAddress, [ //JOE LP ["0x720dd9292b3d0dd78c9afa57afd948c2ea2d50d8", true], // WAVAX - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false] + [ADDRESSES.avax.WAVAX, false] ], "avax", "0x6323c227f71b30babdd6fe84093027079a955662", "0x88a425b738682f58c0ff9fcf2cceb47a361ef4cf") \ No newline at end of file diff --git a/projects/tempus.js b/projects/tempus.js index 2c71ab3c4e..3e62811b4b 100644 --- a/projects/tempus.js +++ b/projects/tempus.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; -const YFI = "0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const USDT = ADDRESSES.ethereum.USDT; +const USDC = ADDRESSES.ethereum.USDC +const DAI = ADDRESSES.ethereum.DAI; +const YFI = ADDRESSES.ethereum.YFI; +const WETH = ADDRESSES.ethereum.WETH; const CHAIN_DATA = { ethereum: { diff --git a/projects/tender-finance/index.js b/projects/tender-finance/index.js index e91dfff289..bc9ca25784 100644 --- a/projects/tender-finance/index.js +++ b/projects/tender-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require("../helper/compound"); module.exports = { @@ -5,5 +6,5 @@ module.exports = { [1678190400,"Oracle Exploit"] ], methodology: "Same as compound, we just get all the collateral (not borrowed money) on the lending markets.", - arbitrum: compoundExports('0xeed247Ba513A8D6f78BE9318399f5eD1a4808F8e', 'arbitrum', '0x0706905b2b21574DEFcF00B5fc48068995FCdCdf', '0x82af49447d8a07e3bd95bd0d56f35241523fbab1') + arbitrum: compoundExports('0xeed247Ba513A8D6f78BE9318399f5eD1a4808F8e', 'arbitrum', '0x0706905b2b21574DEFcF00B5fc48068995FCdCdf', ADDRESSES.arbitrum.WETH) }; diff --git a/projects/tendieswap-app/index.js b/projects/tendieswap-app/index.js new file mode 100644 index 0000000000..be38e7a01a --- /dev/null +++ b/projects/tendieswap-app/index.js @@ -0,0 +1,13 @@ +const { staking } = require("../helper/staking.js"); +const { getUniTVL } = require("../helper/unknownTokens.js"); + +const masterchef = "0x6dDb25ca46656767f8f2385D653992dC1cdb4470"; +const tendie = "0x0260F440AEa04a1690aB183Dd63C5596d66A9a43" + +module.exports = { + misrepresentedTokens: true, + tenet: { + tvl: getUniTVL({ useDefaultCoreAssets: true, factory: '0x2D2ee1a4aec9f3c8c14dFcE837e1C89b639dd1E4', }), + // staking: staking(masterchef, tendie) + }, +}; \ No newline at end of file diff --git a/projects/tenx-exchange/index.js b/projects/tenx-exchange/index.js new file mode 100644 index 0000000000..4fddb4762c --- /dev/null +++ b/projects/tenx-exchange/index.js @@ -0,0 +1,3 @@ +const { uniTvlExport } = require('../helper/unknownTokens') + +module.exports = uniTvlExport('tenet', '0xbaB158ED71F7FD4AD43b1db1aAc5d0EFA0a8469f') \ No newline at end of file diff --git a/projects/terra-bridge/index.js b/projects/terra-bridge/index.js index 42d539faa0..df12bcd855 100644 --- a/projects/terra-bridge/index.js +++ b/projects/terra-bridge/index.js @@ -1,46 +1,17 @@ -const sdk = require('@defillama/sdk') -const { fetchAssets } = require('../helper/chain/terra') -const { getChainTransform } = require('../helper/portedTokens') - -const data = { - ethereum: { - path: '/shuttle/eth.json' - }, - bsc: { - path: '/shuttle/bsc.json', - }, - harmony: { - path: '/shuttle/hmy.json', - }, -} - -function getTVLFunction(chain) { - return async function tvl(timestamp, ethBlock, {[chain]: block}) { - const balances = {} - const chainData = data[chain]; - const chainTokens = await fetchAssets(chainData.path); - - const transform = await getChainTransform(chain) - const calls = Object.values(chainTokens.data.mainnet).map(t => ({ target: t })) - const { output: results } = await sdk.api.abi.multiCall({ abi: 'erc20:totalSupply', calls, block, chain }) - results.forEach(({ input, output }) => sdk.util.sumSingleBalance(balances, transform(input.target), output)) - - return balances - } -} +const { sumTokensExport } = require('../helper/sumTokens') module.exports = { - methodology: "Sums tokens that are bridged (minted) to other chains via Terra Bridge (shuttle).", - ethereum: { - tvl: getTVLFunction('ethereum'), - }, - bsc: { - tvl: getTVLFunction('bsc'), - }, - harmony: { - tvl: getTVLFunction('harmony'), - }, - hallmarks:[ - [1651881600, "UST depeg"], - ], + methodology: "Sums tokens that are bridged (minted) to other chains via Terra Bridge (shuttle).", + terra: { + tvl: sumTokensExport({ + owners: [ + 'terra13yxhrk08qvdf5zdc9ss5mwsg5sf7zva9xrgwgc', + 'terra1g6llg3zed35nd3mh9zx6n64tfw3z67w2c48tn2', + 'terra1rtn03a9l3qsc0a9verxwj00afs93mlm0yr7chk', + ] + }) + }, + hallmarks: [ + [1651881600, "UST depeg"], + ], }; diff --git a/projects/tetu/abi.json b/projects/tetu/abi.json index 798eaf0443..8604871d56 100644 --- a/projects/tetu/abi.json +++ b/projects/tetu/abi.json @@ -2,6 +2,7 @@ "vaultsLength": "uint256:vaultsLength", "vaults": "function _vaults(uint256) view returns (address)", "vaultTvlUsdc": "function vaultTvlUsdc(address _vault) view returns (uint256)", + "totalTvlUsdc": "function totalTvlUsdc(address[] _vault) view returns (uint256)", "strategy": "address:strategy", "platform": "uint8:platform", "vaultsList": "address[]:vaultsList", diff --git a/projects/tetu/index.js b/projects/tetu/index.js index 3766e68402..3fddd12187 100644 --- a/projects/tetu/index.js +++ b/projects/tetu/index.js @@ -30,142 +30,71 @@ const config = { fantom: { bookkeeper: '0x00379dD90b2A337C4652E286e4FBceadef940a21', contract_Reader: '0xa4EB2E1284D9E30fb656Fe6b34c1680Ef5d4cBFC', - controllerV2: '', - veTETU: '', }, bsc: { bookkeeper: '0x8A571137DA0d66c2528DA3A83F097fbA10D28540', contract_Reader: '0xE8210A2d1a7B56115a47B8C06a72356773f6838E', - controllerV2: '', - veTETU: '', }, ethereum: { bookkeeper: '0xb8bA82F19A9Be6CbF6DAF9BF4FBCC5bDfCF8bEe6', contract_Reader: '0x6E4D8CAc827B52E7E67Ae8f68531fafa36eaEf0B', - controllerV2: '', - veTETU: '', }, } Object.keys(config).forEach(chain => { const { bookkeeper, contract_Reader, controllerV2, veTETU } = config[chain] module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => { - const vaultLength = ( - await sdk.api.abi.call({ - abi: abi.vaultsLength, - target: bookkeeper, - block, chain, - }) - ).output; - let calls = getParamCalls(vaultLength) - const { output: vaultAddresses } = await sdk.api.abi.multiCall({ - target: bookkeeper, - abi: abi.vaults, - calls, chain, block, - }) - - calls = vaultAddresses.map(i => ({ target: i.output })) - const { output: strategies } = await sdk.api.abi.multiCall({ - abi: abi.strategy, - calls, - chain, block, - }) - - calls = strategies.map(i => ({ target: i.output })) - const { output: platforms } = await sdk.api.abi.multiCall({ - abi: abi.platform, - calls, chain, block, - }) - + tvl: async (_, _b, { [chain]: block }, { api }) => { + const vaultAddresses = await api.fetchList({ lengthAbi: abi.vaultsLength, itemAbi: abi.vaults, target: bookkeeper }) + const strategies = await api.multiCall({ abi: abi.strategy, calls: vaultAddresses, }) + const platforms = await api.multiCall({ abi: abi.platform, calls: strategies, }) const vaultsCall = [] - for (let i = 0; i < vaultLength; i++) { - if (EXCLUDED_PLATFORMS[platforms[i].output] === true) + + for (let i = 0; i < vaultAddresses.length; i++) { + if (EXCLUDED_PLATFORMS[platforms[i]] === true) continue; // exclude duplication count or broken vaults - if (EXCLUDED_VAULTS[chain] && EXCLUDED_VAULTS[chain][vaultAddresses[i].output.toLowerCase()] === true) + if (EXCLUDED_VAULTS[chain] && EXCLUDED_VAULTS[chain][vaultAddresses[i].toLowerCase()] === true) continue; - vaultsCall.push({ params: vaultAddresses[i].output }) + vaultsCall.push(vaultAddresses[i]) } // TetuV2 vaults let usdcsV2 = []; - if(controllerV2 && controllerV2 !== '') { - const vaultsV2Call = []; - const vaultsV2 = ( - await sdk.api.abi.call({ - abi: abi.vaultsList, - target: controllerV2, - block, chain, - }) - ).output; - for(const vault of vaultsV2) { - vaultsV2Call.push({ params: vault }) - } - const { output: _usdcsV2 } = await sdk.api.abi.multiCall({ - target: contract_Reader, - abi: abi.vaultERC4626TvlUsdc, - calls: vaultsV2Call, - chain, block, - }) - usdcsV2 = _usdcsV2; + if (controllerV2) { + const vaultsV2 = (await api.call({ abi: abi.vaultsList, target: controllerV2, })); + usdcsV2 = await api.multiCall({ target: contract_Reader, abi: abi.vaultERC4626TvlUsdc, calls: vaultsV2, permitFailure: true, }) } // veTETU let veTETU_USDC = 0; - if(veTETU && veTETU !== '') { - for(let i = 0; i < 100; i++) { + if (veTETU) { + for (let i = 0; i < 100; i++) { let token = ''; try { - token = ( - await sdk.api.abi.call({ - abi: abi.veTokens, - target: veTETU, - params: i, - block, chain - }) - ).output; + token = (await api.call({ abi: abi.veTokens, target: veTETU, params: i, })); } catch (e) { // assume that tokens ended // we don't have length for tokens so this workaround break; } - const amount = ( - await sdk.api.abi.call({ - abi: abi.balanceOf, - target: token, - params: veTETU, - block, chain, - }) - ).output; - - const price = ( - await sdk.api.abi.call({ - abi: abi.getPrice, - target: contract_Reader, - params: token, - block, chain, - }) - ).output; + const amount = (await api.call({ abi: abi.balanceOf, target: token, params: veTETU, })); + const price = (await api.call({ abi: abi.getPrice, target: contract_Reader, params: token, })); // assume all tokens inside with decimal 18 // if not need addtionial call with decimals veTETU_USDC += amount * price / 1e36; } - } - const { output: usdcs } = await sdk.api.abi.multiCall({ - target: contract_Reader, - abi: abi.vaultTvlUsdc, - calls: vaultsCall, - chain, block, - }) - let total = veTETU_USDC - usdcs.forEach(i => total += i.output / 1e18) - usdcsV2.forEach(i => total += i.output / 1e18) + for (const vault of vaultsCall) { + const usdcs = await api.call({ target: contract_Reader, abi: abi.totalTvlUsdc, params: [[vault]], }) + total += usdcs / 1e18 + } + + usdcsV2.forEach(i => total += i / 1e18) return { 'usd-coin': total } diff --git a/projects/tezos-baking/index.js b/projects/tezos-baking/index.js index 1d9eacc2c0..b19412e8a2 100644 --- a/projects/tezos-baking/index.js +++ b/projects/tezos-baking/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress } = require('../helper/sumTokens') module.exports = { tezos: { - tvl: sumTokensExport({ owner: 'KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5', tokens: [nullAddress, 'KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn'] }), + tvl: sumTokensExport({ owner: 'KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5', tokens: [nullAddress, ADDRESSES.tezos.tzBTC] }), }, methodology: "Liquidity on tezos' tzBTC-XTZ pair" } \ No newline at end of file diff --git a/projects/thales/abi.json b/projects/thales/abi.json index 374310a1b7..fff29c16a5 100644 --- a/projects/thales/abi.json +++ b/projects/thales/abi.json @@ -1,5 +1,7 @@ { "activeMarkets": "function activeMarkets(uint256 index, uint256 pageSize) view returns (address[])", "totalDeposited": "uint256:totalDeposited", - "getUnderlyingBalance": "function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)" -} \ No newline at end of file + "tradingAllocation": "uint256:tradingAllocation", + "getUnderlyingBalance": "function getUnderlyingBalances() view returns (uint256 amount0Current, uint256 amount1Current)", + "activeParlayMarkets": "function activeParlayMarkets(uint index, uint pageSize) external view returns (address[] memory)" +} diff --git a/projects/thales/index.js b/projects/thales/index.js index 47dec6df39..01b3cb6a2e 100644 --- a/projects/thales/index.js +++ b/projects/thales/index.js @@ -1,155 +1,90 @@ -const sdk = require('@defillama/sdk') -const { sumTokensAndLPsSharedOwners } = require('../helper/unwrapLPs') +const { sumTokens2 } = require('../helper/unwrapLPs') const { staking } = require('../helper/staking') const abi = require('./abi.json') const { dodoPool2 } = require('../helper/pool2') +const ADDRESSES = require('../helper/coreAssets.json') const ethMarketsManager = "0x5ed98Ebb66A929758C7Fe5Ac60c979aDF0F4040a" -const ETH_SUSD = "0x57ab1ec28d129707052df4df418d58a2d46d5f51" -const ETH_THALES = "0x8947da500eb47f82df21143d0c01a29862a8c3c5" -const ETH_WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" -const ETH_USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" const opMarketsManager = "0xBE086E0A2c588Ad64C8530048cE4356190D6a6F3" -const OP_SUSD = "0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9" +const OP_SUSD = ADDRESSES.optimism.sUSD const opThalesStaking = "0xc392133eea695603b51a5d5de73655d571c2ce51" -const opThalesAmm = "0x5ae7454827d83526261f3871c1029792644ef1b1" +const opThalesAmm = "0x278b5a44397c9d8e52743fedec263c4760dc1a1a" +const opRangedAmm = "0x2d356b114cbCA8DEFf2d8783EAc2a5A5324fE1dF" +const opParlayAmm = "0x82B3634C0518507D5d817bE6dAb6233ebE4D68D9" +const opSportsLp = "0x842e89b7a7eF8Ce099540b3613264C933cE0eBa5" +const opSportsVault = ["0x43d19841d818b2ccc63a8b44ce8c7def8616d98e", "0x5e2b49c68f1fd68af1354c377eacec2f05632d3f", "0x8285047f33c26c1bf5b387f2b07f21a2af29ace2", "0xbaac5464bf6e767c9af0e8d4677c01be2065fd5f", "0xc922f4CDe42dD658A7D3EA852caF7Eae47F6cEcd"] +const opAmmVault = ["0xb484027CB0c538538Bad2bE492714154f9196F93", "0x6c7Fd4321183b542E81Bcc7dE4DfB88F9DBca29F", "0x43318DE9E8f65b591598F17aDD87ae7247649C83"] const opThalesLpToken = "0xac6705BC7f6a35eb194bdB89066049D6f1B0B1b5"; const opThalesToken = "0x217d47011b23bb961eb6d93ca9945b7501a5bb11" - const opSportsMarketsManager = "0xFBffEbfA2bF2cF84fdCf77917b358fC59Ff5771e" -const opSportsAmm = "0x170a5714112daEfF20E798B6e92e25B86Ea603C1" const polygonMarketsManager = "0x85f1B57A1D3Ac7605de3Df8AdA056b3dB9676eCE" -const polygon_USDC = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" -const polygonThalesAmm = "0x9b6d76B1C6140FbB0ABc9C4a348BFf4e4e8a1213" +const polygon_USDC = ADDRESSES.polygon.USDC +const polygonThalesAmm = "0xd52B865584c25FEBfcB676B9A87F32683356A063" +const polygonRangedAMM = "0xe8e022405505a9F2b0B7452C844F1e64423849fC" const arbitrumMarketsManager = "0x95d93c88c1b5190fA7FA4350844e0663e5a11fF0" -const arbitrum_USDC = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8" +const arbitrum_USDC = ADDRESSES.arbitrum.USDC +const arbThalesStaking = "0x160Ca569999601bca06109D42d561D85D6Bb4b57" const arbitrumThalesAMM = "0x2b89275efB9509c33d9AD92A4586bdf8c4d21505" +const arbSportsMarketsManager = "0x72ca0765d4bE0529377d656c9645600606214610" +const arbParlayAmm = "0x2Bb7D689780e7a34dD365359bD7333ab24903268" +const arbSportsLp = "0x8e9018b48456202aA9bb3E485192B8475822B874" +const arbSportsVault = ["0xfF7AEA98740fA1e2a9eB81680583e62aaFf1e3Ad", "0xE26374c7aFe71a2a6AB4A61080772547C43B87E6", "0xA852a651377fbE23f3d3acF5919c3D092aD4b77d", "0x31c2947c86412A5e33794105aA034DD9312eb711"] +const arbAmmVault = ["0x640c34D9595AD5351Da8c5C833Bbd1AfD20519ea", "0x0A29CddbdAAf56342507574820864dAc967D2683", "0x008A4e30A8b41781F5cb017b197aA9Aa4Cd53b46"] +const arbThalesToken = "0xE85B662Fe97e8562f4099d8A1d5A92D4B453bF30" - -const L2toL1Synths = { - //THALES - "0x217d47011b23bb961eb6d93ca9945b7501a5bb11": ETH_THALES, - // sUSD - "0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9": ETH_SUSD, - // WETH - "0x4200000000000000000000000000000000000006": ETH_WETH, - // USDC - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174": ETH_USDC, -} - -const transform = (addr)=>{ - return L2toL1Synths[addr] || addr; +async function guniPool2(_timestamp, _ethBlock, chainBlocks, { api }) { + const [lp, token0, token1] = await api.batchCall([ + { target: opThalesLpToken, abi: abi.getUnderlyingBalance, }, + { target: opThalesLpToken, abi: 'address:token0', }, + { target: opThalesLpToken, abi: 'address:token1', }, + ]) + api.add(token0, lp[0]) + api.add(token1, lp[1]) } -async function eth_tvl(_time, block){ - const markets = await sdk.api.abi.call({ - target: ethMarketsManager, - abi: abi.activeMarkets, - block, - params:[0, 1000] - }) - const balances = {} - await sumTokensAndLPsSharedOwners(balances, [[ETH_SUSD, false]], markets.output, block) - return balances +async function getMarkets(api, manager) { + return api.call({ target: manager, abi: abi.activeMarkets, params: [0, 1000] }) } -async function op_tvl(_time, block, cb){ - block = cb.optimism - const markets = await sdk.api.abi.call({ - target: opMarketsManager, - abi: abi.activeMarkets, - block, - params:[0, 1000], - chain: "optimism" - }) - const balances = {} - await sumTokensAndLPsSharedOwners(balances, [[OP_SUSD, false]], markets.output, block, "optimism", transform) - return balances +async function addSportsLPTvl(api, contract, token) { + api.add(token, await api.call({ target: contract, abi: abi.totalDeposited, })) } -async function sports_tvl(_time, block, cb){ - block = cb.optimism - const markets = await sdk.api.abi.call({ - target: opSportsMarketsManager, - abi: abi.activeMarkets, - block, - params:[0, 1000], - chain: "optimism" - }) - const balances = {} - await sumTokensAndLPsSharedOwners(balances, [[OP_SUSD, false]], markets.output, block, "optimism", transform) - return balances -} - -async function polygon_tvl(_time, block, cb){ - block = cb.polygon - const markets = await sdk.api.abi.call({ - target: polygonMarketsManager, - abi: abi.activeMarkets, - block, - params:[0, 1000], - chain: "polygon" - }) - const balances = {} - await sumTokensAndLPsSharedOwners(balances, [[polygon_USDC, false]], markets.output, block, "polygon") - return balances -} - -async function arbitrum_tvl(_time, block, cb){ - block = cb.arbitrum - const markets = await sdk.api.abi.call({ - target: arbitrumMarketsManager, - abi: abi.activeMarkets, - block, - params:[0, 1000], - chain: "arbitrum" - }) - const balances = {} - await sumTokensAndLPsSharedOwners(balances, [[arbitrum_USDC, false]], markets.output, block, "arbitrum") - return balances -} - -function guniPool2(_time, chain="optimism") { - return async (_timestamp, _ethBlock, chainBlocks) => { - const block = chainBlocks[chain] - const lp = await sdk.api.abi.call({ - target: opThalesLpToken, - abi: abi.getUnderlyingBalance, - block, - chain: "optimism" - }) - const balances = {} - sdk.util.sumSingleBalance(balances, ETH_THALES, lp.output.amount0Current) - sdk.util.sumSingleBalance(balances, ETH_WETH, lp.output.amount1Current) - return balances - } -} - -module.exports={ - methodology: "sUSD/USDC locked on markets", - ethereum:{ - tvl: eth_tvl, - pool2: dodoPool2("0x136829c258e31b3ab1975fe7d03d3870c3311651", "0x031816fd297228e4fd537c1789d51509247d0b43") +module.exports = { + methodology: "sUSD/USDC locked on markets", + ethereum: { + tvl: async (_, _1, _2, { api }) => { + return sumTokens2({ api, owners: await getMarkets(api, ethMarketsManager), tokens: [ADDRESSES.ethereum.sUSD] }) + }, + pool2: dodoPool2("0x136829c258e31b3ab1975fe7d03d3870c3311651", "0x031816fd297228e4fd537c1789d51509247d0b43"), + }, + polygon: { + tvl: async (_, _1, _2, { api }) => { + const markets = await getMarkets(api, polygonMarketsManager) + markets.push(polygonThalesAmm, polygonRangedAMM) + return sumTokens2({ api, owners: markets, tokens: [polygon_USDC] }) }, - optimism:{ - tvl: sdk.util.sumChainTvls([op_tvl, sports_tvl, // sUSD in all active markets - staking(opThalesAmm, OP_SUSD, "optimism", ETH_SUSD), - staking(opSportsAmm, OP_SUSD, "optimism", ETH_SUSD), - ]), - staking: staking(opThalesStaking, opThalesToken, "optimism", ETH_THALES), - pool2: guniPool2() + }, + optimism: { + tvl: async (_, _1, _2, { api }) => { + await addSportsLPTvl(api, opSportsLp, OP_SUSD) + const markets = (await Promise.all([opMarketsManager, opSportsMarketsManager,].map(i => getMarkets(api, i)))).flat() + markets.push(opThalesAmm, opParlayAmm, opRangedAmm, ...opSportsVault, ...opAmmVault) + return sumTokens2({ api, tokens: [OP_SUSD], owners: markets }) }, - polygon:{ - tvl: sdk.util.sumChainTvls([polygon_tvl, // USDC in all active markets - staking(polygonThalesAmm, polygon_USDC, "polygon", ETH_USDC), - ]) + staking: staking(opThalesStaking, opThalesToken), + pool2: guniPool2, + }, + arbitrum: { + tvl: async (_, _1, _2, { api }) => { + await addSportsLPTvl(api, arbSportsLp, arbitrum_USDC) + const markets = (await Promise.all([arbitrumMarketsManager, arbSportsMarketsManager,].map(i => getMarkets(api, i)))).flat() + markets.push(arbitrumThalesAMM, arbParlayAmm, ...arbSportsVault, ...arbAmmVault) + return sumTokens2({ api, tokens: [arbitrum_USDC], owners: markets }) }, - arbitrum:{ - tvl: sdk.util.sumChainTvls([arbitrum_tvl, // USDC in all active markets - staking(arbitrumThalesAMM, arbitrum_USDC, "arbitrum", ETH_USDC), - ]) - } + staking: staking(arbThalesStaking, arbThalesToken), + }, } \ No newline at end of file diff --git a/projects/the-idols/index.js b/projects/the-idols/index.js index 929ecfa073..d9a0bb3cf5 100644 --- a/projects/the-idols/index.js +++ b/projects/the-idols/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x439cac149b935ae1d726569800972e1669d17094" const virtue_token = "0x9416ba76e88d873050a06e5956a3ebf10386b863" const stakingAddress = "0x0dd5a35fe4cd65fe7928c7b923902b43d6ea29e7" const treasuryTokens = [ - ["0xae7ab96520de3a18e5e111b5eaab095312d7fe84", false], //stETH + [ADDRESSES.ethereum.STETH, false], //stETH ] module.exports = ohmTvl(treasury, treasuryTokens, "ethereum", stakingAddress, virtue_token, undefined, undefined, true) \ No newline at end of file diff --git a/projects/themis-capital-dex/index.js b/projects/themis-capital-dex/index.js new file mode 100644 index 0000000000..4aa8f78572 --- /dev/null +++ b/projects/themis-capital-dex/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + filecoin: { + tvl: getUniTVL({ + factory: '0xe250A89d23F466c14B26BDF60a0DC3b54974FBE9', + useDefaultCoreAssets: true, + fetchBalances: true, + }) + }, +}; \ No newline at end of file diff --git a/projects/themis-capital-ohm/index.js b/projects/themis-capital-ohm/index.js new file mode 100644 index 0000000000..22ed94313c --- /dev/null +++ b/projects/themis-capital-ohm/index.js @@ -0,0 +1,14 @@ +const { sumTokensExport } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + filecoin: { + tvl: () => ({}), + staking: sumTokensExport({ + owner: '0xA8a3136111ca0b010C9FD5C2D6d7c71e4982606A', + tokens: ['0x005E02A4A934142d8Dd476F192d0dD9c381b16b4'], + lps: ['0x45680718F6BdB7Ec3A7dF7D61587aC7C3fB49d50'], + useDefaultCoreAssets: true, + }) + }, +}; \ No newline at end of file diff --git a/projects/themis-exchange/index.js b/projects/themis-exchange/index.js new file mode 100644 index 0000000000..f93a5b4685 --- /dev/null +++ b/projects/themis-exchange/index.js @@ -0,0 +1,42 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + arbitrum: { addressProvider: '0x75F805e2fB248462e7817F0230B36E9Fae0280Fc', }, +} + +module.exports = { + hallmarks: [ + [Math.floor(new Date('2023-06-27')/1e3), 'Protocol was exploited and lost $370k'], + ], +}; +Object.keys(config).forEach(chain => { + const { addressProvider } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const tokens = await api.call({ abi: abi.getReservesList, target: addressProvider }) + const tokenData = await api.multiCall({ abi: abi.getReserveData, target: addressProvider, calls: tokens, }) + return sumTokens2({ api, tokensAndOwners2: [tokens, tokenData.map(i => i.aTokenAddress)], }) + }, + // borrowed, + } +}) + +async function borrowed(_, _b, _cb, { api, }) { + const { addressProvider } = config[api.chain] + const tokens = await api.call({ abi: abi.getReservesList, target: addressProvider }) + const tokenData = await api.multiCall({ abi: abi.getReserveData, target: addressProvider, calls: tokens, }) + const vDebtSupply = await api.multiCall({ abi: 'erc20:totalSupply', calls: tokenData.map(i => i.variableDebtTokenAddress), }) + const sDebtSupply = await api.multiCall({ abi: 'erc20:totalSupply', calls: tokenData.map(i => i.stableDebtTokenAddress), }) + tokens.forEach((token, i) => { + const variableDebt = vDebtSupply[i] + const stableDebt = sDebtSupply[i] + api.add(token, variableDebt) + api.add(token, stableDebt) + }) + return api.getBalances() +} + +const abi = { + "getReserveData": "function getReserveData(address asset) view returns (tuple(tuple(uint256 data) configuration, uint128 liquidityIndex, uint128 currentLiquidityRate, uint128 variableBorrowIndex, uint128 currentVariableBorrowRate, uint128 currentStableBorrowRate, uint40 lastUpdateTimestamp, uint16 id, address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, uint128 accruedToTreasury, uint128 unbacked, uint128 isolationModeTotalDebt))", + "getReservesList": "address[]:getReservesList", +} \ No newline at end of file diff --git a/projects/thetanuts/index.js b/projects/thetanuts/index.js index 54f067bfd9..0e32d6ffc4 100644 --- a/projects/thetanuts/index.js +++ b/projects/thetanuts/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') // Ethereum Vaults @@ -69,46 +70,52 @@ const bobaPutVault = '0xff5fe7909fc4d0d6643f1e8be8cba72610d0b485' //Arbitrum Vaults const arbCallVault = '0x0833EC3262Dcc417D88f85Ed5E1EBAf768080f41' +//zkEVM vaults +const stMaticCallVault = '0x7bF3c7C23501EA3E09B237D6F8AdcB7Ea3CeF41C' + // Ethereum Assets -const weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' -const usdc = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' -const wbtc = '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599' +const weth = ADDRESSES.ethereum.WETH +const usdc = ADDRESSES.ethereum.USDC +const wbtc = ADDRESSES.ethereum.WBTC const ust = '0xa693b19d2931d498c5b318df961919bb4aee87a5' const tUSDC = '0x9f238fae3d1f1982716f136836fc2c0d1c2928ab' const tAlgo = '0x0354762a3c01730d07d2f7098365d64dc81b565d' const bit = '0x1a4b46696b2bb4794eb3d4c26f1c55f9170fa4c5' // Avalanche Assets -const wavax = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7' -const usdce = '0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664' -const usdc_avax = '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E' +const wavax = ADDRESSES.avax.WAVAX +const usdce = ADDRESSES.avax.USDC_e +const usdc_avax = ADDRESSES.avax.USDC // Fantom Assets -const wftm = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83' -const fusdc = '0x04068da6c83afcfa0e13ba15a6696662335d5b75' +const wftm = ADDRESSES.fantom.WFTM +const fusdc = ADDRESSES.fantom.USDC // Binance Smart Chain Assets -const busd = '0xe9e7cea3dedca5984780bafc599bd69add087d56' +const busd = ADDRESSES.bsc.BUSD const ada = '0x3ee2200efb3400fabb9aacf31297cbdd1d435d47' const bch = '0x8ff795a6f4d97e7887c79bea79aba5cc76444adf' -const wbnb = '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c' +const wbnb = ADDRESSES.bsc.WBNB const woo = '0x4691937a7508860F876c9c0a2a617E7d9E945D4B' // Polygon Assets -const wmatic = '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270' -const pousdc = '0x2791bca1f2de4661ed88a30c99a7a9449aa84174' +const wmatic = ADDRESSES.polygon.WMATIC_2 +const pousdc = ADDRESSES.polygon.USDC const ust_matic_wormhole = '0xE6469Ba6D2fD6130788E0eA9C0a0515900563b59' // Aurora Assets -const near = '0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d' +const near = ADDRESSES.aurora.NEAR // Boba Assets -let boba = '0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7' -const bobaUSDC = '0x66a2A913e447d6b4BF33EFbec43aAeF87890FBbc' +let boba = ADDRESSES.boba.BOBA +const bobaUSDC = ADDRESSES.boba.USDC // Arbitrum assets let arb = '0x912ce59144191c1204e64559fe8253a0e49e6548' +// zkEVM assets +const stMatic = '0x83b874c1e09D316059d929da402dcB1A98e92082'; + module.exports = { methodology: `Only the funds deposited by the users into our vaults are calculated as TVL.`, hallmarks: [ @@ -198,6 +205,11 @@ const config = { [near, nearCallVault,], ] }, + polygon_zkevm: { + tokensAndOwners: [ + [stMatic, stMaticCallVault,], + ] + } } Object.keys(config).forEach(chain => { diff --git a/projects/thorchain/index.js b/projects/thorchain/index.js index 9fb93092b7..dce3ed2f53 100644 --- a/projects/thorchain/index.js +++ b/projects/thorchain/index.js @@ -18,6 +18,7 @@ const chainMapping = { LTC: 'litecoin', BCH: 'bitcoin-cash', DOGE: 'dogecoin', + GAIA: 'cosmos', } const defillamaChainMapping = { diff --git a/projects/thorusfi/index.js b/projects/thorusfi/index.js index 1c796a5e84..ffbe60e5e4 100644 --- a/projects/thorusfi/index.js +++ b/projects/thorusfi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { getUniTVL } = require('../helper/unknownTokens') @@ -7,7 +8,7 @@ const thorusMaster_avax = "0x871d68cFa4994170403D9C1c7b3D3E037c76437d"; const THO_avax = "0xAE4AA155D2987B454C29450ef4f862CF00907B61"; const thorusMaster_moonbeam = "0xEeB84a24e10502D8A5c97B11df381D1550B25b9d"; -const THO_moonbeam = "0x735aBE48e8782948a37C7765ECb76b98CdE97B0F"; +const THO_moonbeam = ADDRESSES.shiden.JPYC; module.exports = { diff --git a/projects/thunderpokt/index.js b/projects/thunderpokt/index.js index abc2278808..11a62a118e 100644 --- a/projects/thunderpokt/index.js +++ b/projects/thunderpokt/index.js @@ -21,7 +21,7 @@ async function tvl(timestamp, ethBlock, chainBlocks) { module.exports = { methodology: 'tPOKT is backed 1:1 by POKT. Total supply of tPOKT is pulled and multiplied by POKT price to get the TVL', - polygon: { + pokt: { tvl } } \ No newline at end of file diff --git a/projects/tidalfinance/index.js b/projects/tidalfinance/index.js index 39d83d3309..fa4fb8eefb 100644 --- a/projects/tidalfinance/index.js +++ b/projects/tidalfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { transformPolygonAddress } = require("../helper/portedTokens"); @@ -9,7 +10,7 @@ const sellerContract = "0xc73C6C3e80C28dBc55F65bBdC895E828bb98C72d"; const stakingContract = "0x21edB57A75ee69BCe0Fe3D0EfC5674bcF1D5BF93"; // Tokens -const USDC = "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"; +const USDC = ADDRESSES.polygon.USDC; const TIDAL = "0xB41EC2c036f8a42DA384DDE6ADA79884F8b84b26"; /*** Staking of native token (TIDAL) TVL portion ***/ diff --git a/projects/tifi-bank/index.js b/projects/tifi-bank/index.js index bd554f8a09..1b512da688 100644 --- a/projects/tifi-bank/index.js +++ b/projects/tifi-bank/index.js @@ -1,9 +1,35 @@ const { getUniTVL } = require('../helper/unknownTokens') -const { staking } = require('../helper/staking') +const { sumTokensExport } = require("../helper/unknownTokens"); +const { stakings } = require('../helper/staking') + +const stakingContracts = [ + // Staking in the RESERVIOR + "0x0AEfF3d761F6706295f3828C87ccE29c9418a93B", + // Loan + "0x8A6F7834A9d60090668F5db33FEC353a7Fb4704B", + // Lock to Earn + "0xA015263066da13e94526a8b897eDB0E3cd55B19A" +]; + +const lpContract = [ + //PinkLock TIFI Bank + "0x407993575c91ce7643a4d4ccacc9a98c36ee1bbe", + //PinkLock Cake + "0x7ee058420e5937496f5a2096f04caa7721cf70cc" +] + +const lpTokens = [ + // TiFi bank LP token + "0x707B6F02fFC0C7fD9fe3a4F392Aef47218021337", + // Cake LP token + "0xB62BB233Af2F83028Be19626256A9894B68AAe5E" +] + module.exports = { bsc: { tvl: getUniTVL({ chain: 'bsc', factory: '0xb3456550c17128ca7ebbcc47d4be6cae29d43853', }), - staking: staking('0x0AEfF3d761F6706295f3828C87ccE29c9418a93B', '0x17E65E6b9B166Fb8e7c59432F0db126711246BC0', 'bsc') + staking: stakings(stakingContracts, '0x17E65E6b9B166Fb8e7c59432F0db126711246BC0', 'bsc'), + // pool2: sumTokensExport({ tokens: lpTokens, owners: lpContract, useDefaultCoreAssets: true }), } } diff --git a/projects/tigris/index.js b/projects/tigris/index.js new file mode 100644 index 0000000000..3a3764af3c --- /dev/null +++ b/projects/tigris/index.js @@ -0,0 +1,61 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { staking } = require("../helper/staking"); +const { sumTokens2 } = require("../helper/unwrapLPs"); + +const TigrisAddresses = { + arbitrum: { + TIG: "0x3A33473d7990a605a88ac72A78aD4EFC40a54ADB", + xTIG: "0x19694Cf64572e6adf643Ae7B13d5b2921215B4E5", + // tigUSD and USDT are 1:1 exchangeable via stable vault + tigUSD: "0x7E491F53bF807f836E2dd6C4A4FBd193e1913EFd", + USDT: ADDRESSES.arbitrum.USDT, + TigStaking: "0x6E8BFBb31A46D0F5502426050Ea28b19F8E761f4", + TokenSale: "0x45F52502aF87e7e4E446BA15BDf223A19b47DA98", + StableVault: "0xe82fcefbDD034500B5862B4827CAE5c117f6b921", + Treasury: "0xf416c2b41fb6c592c9ba7cb6b2f985ed593a51d7", + Lock: "0x76e0c3bda3dD22A2cFDCdbCafdaC997927F80483", + TeamVesting: "0x97F1b43ED98587B2ab5A649aa63Ecc28403282bC", + }, + polygon: { + TIG: "0x7157Fe7533f2fc77498755Cc253d79046c746560", + TigStaking: "0xC6c32eD781450228dFadfa49A430d7868B110F44", + // tigUSD and DAI are 1:1 exchangeable via stable vault + tigUSD: "0x76973Ba2AFF24F87fFE41FDBfD15308dEBB8f7E8", + DAI: ADDRESSES.polygon.DAI, + StableVault: "0x3677415Dc23e49B7780ef46976F418F4a9d5031B", + Treasury: "0x4f7046f36B5D5282A94cB448eAdB3cdf9Ff2b051", + Lock: "0x638e39D4a927EfE3040F0f6D4d27e4CccD8c996A", + Bond: "0xC5d9B681086b2617626B0Ed05A7D632660Fc99f4", + }, +}; + +async function arbitrumTvl(_, _b, _cb, { api }) { + const tokensAndOwners = [ + [TigrisAddresses.arbitrum.USDT, TigrisAddresses.arbitrum.StableVault], + ]; + return sumTokens2({ api, tokensAndOwners }); +} + +async function polygonTvl(_, _b, _cb, { api }) { + const tokensAndOwners = [ + [TigrisAddresses.polygon.DAI, TigrisAddresses.polygon.StableVault], + ]; + return sumTokens2({ api, tokensAndOwners }); +} + +module.exports = { + arbitrum: { + staking: staking( + TigrisAddresses.arbitrum.TigStaking, + TigrisAddresses.arbitrum.TIG + ), + tvl: arbitrumTvl, + }, + polygon: { + staking: staking( + TigrisAddresses.polygon.TigStaking, + TigrisAddresses.polygon.TIG + ), + tvl: polygonTvl, + }, +}; diff --git a/projects/timeless/index.js b/projects/timeless/index.js index 5959e77528..40e4ad9089 100644 --- a/projects/timeless/index.js +++ b/projects/timeless/index.js @@ -3,7 +3,6 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const abi = require('./abi.json') const { getLogs } = require('../helper/cache/getLogs') -const chain = 'ethereum' const factory = '0xbd16088611054fce04711aa9509d1d86e04dce2c' const wl_stETH_token = '0xf9a98a9452485ed55cd3ce5260c2b71c9807b11a' @@ -25,18 +24,11 @@ async function tvl(_, block, _1, { api }) { toa.push([vault, gate]) }) const balances = await sumTokens2({ api, tokensAndOwners: toa, }) - const wl_stETH = 'ethereum:'+wl_stETH_token + const wl_stETH = wl_stETH_token const wl_stETH_balance = balances[wl_stETH] delete balances[wl_stETH] - const unwrappedAsset = await api.call({ - target: wl_stETH_token, - abi: abi.asset, - }) - const balance = await api.call({ - target: wl_stETH_token, - abi: abi.convertToAssets, - params: wl_stETH_balance, - }) + const unwrappedAsset = await api.call({ target: wl_stETH_token, abi: abi.asset, }) + const balance = await api.call({ target: wl_stETH_token, abi: abi.convertToAssets, params: wl_stETH_balance, }) sdk.util.sumSingleBalance(balances, unwrappedAsset, balance) return balances diff --git a/projects/timeswap-v2/index.js b/projects/timeswap-v2/index.js index 744919cb76..d07b58ca7a 100644 --- a/projects/timeswap-v2/index.js +++ b/projects/timeswap-v2/index.js @@ -2,7 +2,7 @@ const { getLogs, getAddress } = require("../helper/cache/getLogs"); const { sumTokens2 } = require("../helper/unwrapLPs"); async function tvl(_, _b, _cb, { api }) { - const { factory, oldFactory, fromBlock } = config[api.chain]; + const { factory, oldFactory, fromBlock, newFactory } = config[api.chain]; const logs = await getLogs({ api, @@ -12,7 +12,6 @@ async function tvl(_, _b, _cb, { api }) { ], fromBlock, }); - const block = await api.getBlock(); let ownerTokens = logs.map((i) => { return [ @@ -20,6 +19,23 @@ async function tvl(_, _b, _cb, { api }) { getAddress(i.data), ]; }); + if (newFactory) { + const newLogs = await getLogs({ + api, + target: newFactory, + topics: [ + "0x68ff1cfcdcf76864161555fc0de1878d8f83ec6949bf351df74d8a4a1a2679ab", + ], + fromBlock, + }); + const newOwnerTokens = newLogs.map((i) => { + return [ + [getAddress(i.topics[2]), getAddress(i.topics[3])], + getAddress(i.data), + ]; + }); + ownerTokens = [...ownerTokens, ...newOwnerTokens]; + } if (oldFactory) { let oldOwnerTokens; const oldLogs = await getLogs({ @@ -49,6 +65,7 @@ const config = { polygon: { oldFactory: "0xcAB2E5Ba8b3A8d8Bf8B50F0eec12884D0255fB4A", factory: "0xcf0aca5c5b7e1bF63514D362243b6c50d5761FE8", + newFactory: "0x406d3Dfcbe20b642c2262b29b960822975371502", fromBlock: 39476334, }, ethereum: { @@ -57,8 +74,17 @@ const config = { }, arbitrum: { factory: "0xcf0aca5c5b7e1bF63514D362243b6c50d5761FE8", + newFactory: "0x406d3Dfcbe20b642c2262b29b960822975371502", fromBlock: 70785970, }, + mantle: { + factory: "0xf8F5e4B7825d484FBDFDC36fc915E79f30b02f9E", + fromBlock: 3563, + }, + polygon_zkevm: { + factory: "0x406d3Dfcbe20b642c2262b29b960822975371502", + fromBlock: 1787343, + } }; module.exports = {}; diff --git a/projects/tinlake/index.js b/projects/tinlake/index.js index 6451e8f215..98bcfc2275 100644 --- a/projects/tinlake/index.js +++ b/projects/tinlake/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const BigNumber = require("bignumber.js"); const { graphQuery } = require('../helper/http') const data = {} @@ -14,7 +15,7 @@ query GET_TOTAL_TOKEN_TVL { } } `; -const dai = "0x6b175474e89094c44da98b954eedeac495271d0f" +const dai = ADDRESSES.ethereum.DAI async function getData(api) { return graphQuery(subgraphUrl, graphTotalTokenTVLQuery, { api, }) diff --git a/projects/tipidao/api.js b/projects/tipidao/api.js new file mode 100644 index 0000000000..bea9ee8623 --- /dev/null +++ b/projects/tipidao/api.js @@ -0,0 +1,9 @@ +const index = require('./index') + +module.exports = { + bsc: { + tvl: () => 0, + staking: index.bsc.staking, + } +} + diff --git a/projects/tipidao/index.js b/projects/tipidao/index.js index 843fc1994f..086376295f 100644 --- a/projects/tipidao/index.js +++ b/projects/tipidao/index.js @@ -1,15 +1,18 @@ -const { ohmTvl } = require("../helper/ohm"); +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') const tpd = "0xd0253dbe5606c9fa01db67eb10be5c3675c2b117"; const tpdStaking = "0xAeab776bE63580cB86309CedB49769e6526abbf4"; const treasury = "0x3287f25f8F29e5d65cE566E5a2a1bd336431d8db"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD - ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], // WBNB - ["0x50bc855ad6a3983589927e5bf3ac0688364ffa64", true] // TPD-BUSD CAKE LP + ADDRESSES.bsc.BUSD, // BUSD + ADDRESSES.bsc.WBNB, // WBNB + "0x50bc855ad6a3983589927e5bf3ac0688364ffa64" // TPD-BUSD CAKE LP ]; module.exports = { - misrepresentedTokens: true, - ...ohmTvl(treasury, treasuryTokens, "bsc", tpdStaking, tpd, undefined, undefined, false) -} \ No newline at end of file + bsc: { + tvl: sumTokensExport({ owner: treasury, tokens: treasuryTokens}), + staking: sumTokensExport({ owner: tpdStaking, tokens: [tpd]}), + } +} diff --git a/projects/titi-finance/index.js b/projects/titi-finance/index.js new file mode 100644 index 0000000000..4642e140c6 --- /dev/null +++ b/projects/titi-finance/index.js @@ -0,0 +1,45 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require('../helper/unknownTokens') + +const ethTiTiToken = "0x3bdffA70f4b4E6985eED50453c7C0D4A15dcEc52"; // TiTi Token +const ethTiTiStaking = "0x5390Dbf4958F21BB317C72744c110977F4c03311"; // TiTi Staking + +const eraTiTiToken = "0x4EBfb78C4780C304dff7de518db630b67e3F044b"; // TiTi Token Era +const eraTiTiStaking = "0x1B05972C2e46288201E0432262bd8e925d4fCF94"; // TiTi Staking Era + +const ethereumLPs = ['0xca4AEf99b3567Dbb631DF0DCd51D446DB7eb63e5'] +const eraLPs = [ + "0x574E2E833A010997840f368edF6542d8950c2788", + "0x228D400F196760432BD8bcE74Fa1e6580aF4BF03", + "0xd4cb4f38de684122Af261ee822Dc1437601e5424", + "0x512f5a62eE69013643f37C12fd8Be391Db7b4550", +] +const lpReservesAbi = 'function getReserves() view returns (uint _reserve0, uint _reserve1)' + +module.exports = { + methodology: `Calculate the reserve-type assets locked in the contract, including the user's stake funds in MarketMakerFund and the reserve of TiUSD issued by the protocol, TiTi-AMMs used to provide liquidity TiUSD is not included`, + ethereum: { + tvl: sumTokensExport({ + owners: [ + "0x49a0c2076DE4801bcadFEf78d0FA63cEC0AD1cB4", // MAMMSwapPair + ], tokens: [ADDRESSES.ethereum.USDC] + }), + staking: sumTokensExport({ owner: ethTiTiStaking, tokens: [ethTiTiToken], lps: ethereumLPs, useDefaultCoreAssets: true, restrictTokenRatio: 5000 }), + pool2: sumTokensExport({ owner: '0x9A132b777FE7af6561BAAb60A03302C697fA8F3B', tokens: ['0x830Ce3859F98104DC600efBFAD90A65386B95404'], lps: ethereumLPs, useDefaultCoreAssets: true, restrictTokenRatio: 1000, resolveLp: true, }), + }, + era: { + tvl: sumTokensExport({ + owners: [ + "0xc856175575F6406b59AD6822c3114494990750DC", // MAMMSwapPair + ], tokens: [ADDRESSES.era.USDC] + }), + staking: sumTokensExport({ owner: eraTiTiStaking, tokens: [eraTiTiToken], lps: eraLPs, useDefaultCoreAssets: true, restrictTokenRatio: 5000, abis: { getReservesABI: lpReservesAbi } }), + pool2: sumTokensExport({ + owners: [ + "0xA690DC59d6afC12d6789f46fc211DdD27f1C7f7c", + "0x2cbCE1EFC624138326877C386692E889D8C7c834", + "0xDc8440CdC50bEe0936bB49De82e80c2439dCEc42" + ], tokens: eraLPs, lps: eraLPs, useDefaultCoreAssets: true, abis: { getReservesABI: lpReservesAbi }, resolveLp: true, restrictTokenRatio: 1000, + }), + }, +} \ No newline at end of file diff --git a/projects/tokemak/index.js b/projects/tokemak/index.js index 96f46636f6..c65db1ca39 100644 --- a/projects/tokemak/index.js +++ b/projects/tokemak/index.js @@ -1,7 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') -const { sumTokens, sumTokens2, } = require('../helper/unwrapLPs') +const { sumTokens2, } = require('../helper/unwrapLPs') const abi = require("../pendle/abi.json"); -const BigNumber = require('bignumber.js') const positions = require('./positions.json'); const cvx_abi = { @@ -15,12 +15,11 @@ const cvx_abi = { stkcvxFRAXBP_lockedStakesOf: "function lockedStakesOf(address account) view returns (tuple(bytes32 kek_id, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier)[])", } -const cvxBoosterAddress = "0xF403C135812408BFbE8713b5A23a04b3D48AAE31"; const degenesisContract = "0xc803737D3E12CC4034Dde0B2457684322100Ac38"; const wethPool = "0xD3D13a578a53685B4ac36A1Bab31912D2B2A2F36"; const usdcPool = "0x04bda0cf6ad025948af830e75228ed420b0e860d"; -const usdc = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const usdc = ADDRESSES.ethereum.USDC; +const weth = ADDRESSES.ethereum.WETH; const ohmPool = "0xe7a7D17e2177f66D035d9D50A7f48d8D8E31532D"; const ohm = "0x383518188C0C6d7730D91b2c03a03C837814a899"; const gohmPool = "0x41f6a95Bacf9bC43704c4A4902BA5473A8B00263"; @@ -31,20 +30,20 @@ const fxsPool = "0xADF15Ec41689fc5b6DcA0db7c53c9bFE7981E655"; const fxs = "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0"; const tcrPool = "0x15A629f0665A3Eb97D7aE9A7ce7ABF73AeB79415"; const tcr = "0x9C4A4204B79dd291D6b6571C5BE8BbcD0622F050"; -const toke = "0x2e9d63788249371f1dfc918a52f8d799f4a38c94"; +const toke = ADDRESSES.ethereum.TOKE; const rtoke1 = "0xa760e26aA76747020171fCF8BdA108dFdE8Eb930"; const rtoke2 = "0x96f98ed74639689c3a11daf38ef86e59f43417d3"; const rtoke3 = "0xA374A62DdBd21e3d5716cB04821CB710897c0972"; const sushiPool = "0xf49764c9C5d644ece6aE2d18Ffd9F1E902629777"; -const sushi = "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2"; +const sushi = ADDRESSES.ethereum.SUSHI; const fraxPool = "0x94671A3ceE8C7A12Ea72602978D1Bb84E920eFB2"; -const frax = "0x853d955acef822db058eb8505911ed77f175b99e"; +const frax = ADDRESSES.ethereum.FRAX; const daiPool = "0x0CE34F4c26bA69158BC2eB8Bf513221e44FDfB75"; -const dai = "0x6b175474e89094c44da98b954eedeac495271d0f"; +const dai = ADDRESSES.ethereum.DAI; const feiPool = "0x03DccCd17CC36eE61f9004BCfD7a85F58B2D360D"; const fei = "0x956F47F50A910163D8BF957Cf5846D573E7f87CA"; const lusdPool = "0x9eEe9eE0CBD35014e12E1283d9388a40f69797A3"; -const lusd = "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0"; +const lusd = ADDRESSES.ethereum.LUSD; const wormUstPool = "0x482258099De8De2d0bda84215864800EA7e6B03D"; const wormtust = "0xa693b19d2931d498c5b318df961919bb4aee87a5"; const foxPool = "0x808D3E6b23516967ceAE4f17a5F9038383ED5311"; @@ -52,7 +51,7 @@ const fox = "0xc770eefad204b5180df6a14ee197d99d808ee52d"; const apwPool = "0xDc0b02849Bb8E0F126a216A2840275Da829709B0"; const apw = "0x4104b135dbc9609fc1a9490e61369036497660c8"; const snxPool = "0xeff721Eae19885e17f5B80187d6527aad3fFc8DE"; -const snx = "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f"; +const snx = ADDRESSES.ethereum.SNX; const gamma = '0x6bea7cfef803d1e3d5f7c0103f7ded065644e197'; const gammaPool = '0x2Fc6e9c1b2C07E18632eFE51879415a580AD22E1'; const mim = '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3'; @@ -63,7 +62,7 @@ const uni = "0x5fa464cefe8901d66c09b85d5fcdc55b3738c688"; const uniStaking = "0x1b429e75369ea5cd84421c1cc182cee5f3192fd3"; const alusd = "0xBC6DA0FE9aD5f3b0d58160288917AA56653660E9"; const alusdPool = "0x7211508D283353e77b9A7ed2f22334C219AD4b4C"; -const steth = "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84"; +const steth = ADDRESSES.ethereum.STETH; const crvSteth = "0xDC24316b9AE028F1497c275EB9192a3Ea0f67022"; const myc = "0x4b13006980acb09645131b91d259eaa111eaf5ba"; const mycPool = "0x061aee9ab655e73719577EA1df116D7139b2A7E7"; @@ -134,9 +133,9 @@ async function tvl(timestamp, block, _, { api }) { target: cvxcvxFxsPool, params: [tokeTreasury], }); - sdk.util.sumSingleBalance(balances,cvxcrvFrax,cvxcrvFraxBal) - sdk.util.sumSingleBalance(balances,cvxcrvFrax,treasuryFraxBal[0]['liquidity']) - sdk.util.sumSingleBalance(balances,cvxcvxFxs,cvxcvxFxsBal) + sdk.util.sumSingleBalance(balances, cvxcrvFrax, cvxcrvFraxBal) + sdk.util.sumSingleBalance(balances, cvxcrvFrax, treasuryFraxBal[0]['liquidity']) + sdk.util.sumSingleBalance(balances, cvxcvxFxs, cvxcvxFxsBal) let curveHoldings = positions.exchanges.filter( pool => pool.type == 'Curve') @@ -147,8 +146,8 @@ async function tvl(timestamp, block, _, { api }) { const calls = [] lpBalances(curveHoldings, toa, tokens, calls,) lpBalances(uniHoldings, toa, tokens, calls) - const amountRes = await api.multiCall({ abi: abi.userInfo, calls}) - tokens.forEach((val, i) => sdk.util.sumSingleBalance(balances,val,amountRes[i].amount, api.chain)) + const amountRes = await api.multiCall({ abi: abi.userInfo, calls }) + tokens.forEach((val, i) => sdk.util.sumSingleBalance(balances, val, amountRes[i].amount, api.chain)) return sumTokens2({ balances, api, tokensAndOwners: toa, }) @@ -169,23 +168,20 @@ function lpBalances(holdings, toa, tokens, calls) { toa.push([token, manager]) if (!pool.hasOwnProperty('staking')) continue - + tokens.push(token) - calls.push({ target: masterChef, params: [pool.staking.pool_id, manager]}) + calls.push({ target: masterChef, params: [pool.staking.pool_id, manager] }) } } -async function staking(timestamp, block) { - let balances = {} - await sumTokens(balances, [ - [toke, rtoke1], [toke, rtoke2], [toke, rtoke3] - ], block) +async function staking(timestamp, block, _, { api }) { let vestedToke = '57238445' - let balance = balances['ethereum:'+toke]/1e18 - vestedToke - if (balance < 0) balance = 0 - return { - tokemak: BigNumber(balance).toFixed(0) - } + api.add(ADDRESSES.ethereum.TOKE, vestedToke * 1e18 * -1) + return sumTokens2({ + api, tokensAndOwners: [ + [toke, rtoke1], [toke, rtoke2], [toke, rtoke3] + ] + }) } async function pool2(timestamp, block) { diff --git a/projects/tokenlon/index.js b/projects/tokenlon/index.js index 1b5670e2cc..d898b00d1c 100644 --- a/projects/tokenlon/index.js +++ b/projects/tokenlon/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { covalentGetTokens } = require("../helper/http"); @@ -29,7 +30,7 @@ const STAGES_STAKING_CONTRACTS = [ // Receives rewards/fee from AMM wrapper via reward distributor on WETH shape, some are sold for LON... const MULTISIG_ONE = "0x3557BD3d422300198719710Cc3f00194E1c20A46"; -const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; +const WETH = ADDRESSES.ethereum.WETH; const ethTvl = async (timestamp, block) => { const amm_wrapper_addr = ( diff --git a/projects/tomb/index.js b/projects/tomb/index.js index 584b3f6205..14db39e8c5 100644 --- a/projects/tomb/index.js +++ b/projects/tomb/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumTokens2 } = require("../helper/unwrapLPs"); @@ -41,12 +42,12 @@ async function staking(timestamp, _b, { [chain]: block }) { async function lif3GenesisTVL(timestamp, _b, { [chain]: block }) { const tokens = [ - '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', // WFTM - '0x04068da6c83afcfa0e13ba15a6696662335d5b75', // USDC + ADDRESSES.fantom.WFTM, // WFTM + ADDRESSES.fantom.USDC, // USDC '0x321162Cd933E2Be498Cd2267a90534A804051b11', // BTC '0x74b23882a30290451A17c44f4F05243b6b58C76d', // ETH - '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e', // DAI - '0x82f0b8b456c1a451378467398982d4834b6829c1', // MIM + ADDRESSES.fantom.DAI, // DAI + ADDRESSES.fantom.MIM, // MIM '0x8d7d3409881b51466b483b11ea1b8a03cded89ae', // BASED '0x49c290ff692149a4e16611c694fded42c954ab7a', // BSHARE '0x09e145a1d53c0045f41aeef25d8ff982ae74dd56', // Zoo diff --git a/projects/tonic-cash/config.js b/projects/tonic-cash/config.js new file mode 100644 index 0000000000..7af12226db --- /dev/null +++ b/projects/tonic-cash/config.js @@ -0,0 +1,63 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress } = require('../helper/unwrapLPs'); + +module.exports = { + klaytn: [ + { + tokens: [nullAddress], // KLAY + holders: [ + '0x033237b3d6ABCb7d48C5A40Ec3038A53aEc1b77e', + '0x7b853e8387FC6bcFCAa9BDab8d0479E6c9E6782b', + '0x457Caf470fB1031530E8cdD06703da7B1BbCCe04', + '0x9694ea20de96D5E46C8FE1E7975D7a2C7C79Bf2c', + ], + }, + { + tokens: ['0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167'], // oUSDT + holders: [ + '0x528AE79DAe416bf9623B94fA6Baef0FC3dd12ef8', + '0xc69C9bBabEDE59562Cd8a6F92Fa50aFf10D8310e', + '0x503d6D4E14A2A4f78f4c3E51c94F1F53C6bd6D96', + '0x804aA592f7bF0B7EB98db08825D1106eC4822fb3', + ], + }, + { + tokens: ['0x34d21b1e550d73cee41151c77f3c73359527a396'], // oETH + holders: [ + '0x70D8D865d556f7D03c463e296ac706CE11B73d4B', + '0x402f2297f15b6fc9415D6F193ae882a3879b5F09', + '0xCFa2494dddB338c2fd15224B4Eb9668a5C4de695', + '0xD10aaD96548CAa7874e435Db0d9676b64554092b', + ], + }, + ], + wemix: [ + { + tokens: [nullAddress], // WEMIX + holders: [ + '0x033237b3d6ABCb7d48C5A40Ec3038A53aEc1b77e', + '0x7b853e8387FC6bcFCAa9BDab8d0479E6c9E6782b', + '0x457Caf470fB1031530E8cdD06703da7B1BbCCe04', + '0x9694ea20de96D5E46C8FE1E7975D7a2C7C79Bf2c', + ], + }, + { + tokens: [ADDRESSES.wemix.WEMIX_], // WEMIXDollar + holders: [ + '0x144120Ef18d4223Ab3f4695653a5755C23FBF469', + '0xc978f195C838d3344f74DDBA84235130B3091847', + '0xeD4a38cC990a6E5D817C9d89677c886994803d38', + '0xAc04FDbADd7CF8d4BaD0F957d37e3fd0c093A9B6', + ], + }, + { + tokens: [ADDRESSES.shiden.ETH], // ETH + holders: [ + '0x2D3bAeBa85D78D202887D34f5618380e90F3c272', + '0xD2510D275dbca0fe333dAff8Eb51b9105f6aC212', + '0xE1d1c5094d5eEF16E0207834b2E5FDf634278217', + '0xfF30E4d7ec19a45710049033d1E51C1a6848E1FA', + ], + }, + ], +}; diff --git a/projects/tonic-cash/index.js b/projects/tonic-cash/index.js new file mode 100644 index 0000000000..e4a5468b80 --- /dev/null +++ b/projects/tonic-cash/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require('../helper/unwrapLPs'); +const config = require('./config.js'); + +Object.keys(config).forEach((chain) => { + const tokensAndOwners = config[chain].flatMap(({ tokens, holders }) => + holders.flatMap(o => tokens.map(t => [t, o])) + ); + module.exports[chain] = { + tvl: sumTokensExport({ tokensAndOwners }), + }; +}); diff --git a/projects/topshelf/index.js b/projects/topshelf/index.js index 8e94205327..8613122276 100644 --- a/projects/topshelf/index.js +++ b/projects/topshelf/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {getLiquityTvl} = require('../helper/liquity') const sdk = require('@defillama/sdk'); const { sumTokens } = require('../helper/unwrapLPs'); @@ -9,8 +10,8 @@ async function fantomCurveLps(timestamp, ethBlock, chainBlocks){ ["0x8b63f036f5a34226065bc0a7b0ae5bb5eba1ff3d", "0x59f58431d4cba2b7e9e8d78f064a8fa24c5134bf"], //ftm ], chainBlocks.fantom, "fantom", addr=>{ return "fantom:"+{ - "0x6ef78ad4a40e9a6c81b9229de3ecc33ce591bc34":"0x82f0b8b456c1a451378467398982d4834b6829c1", - "0x8b63f036f5a34226065bc0a7b0ae5bb5eba1ff3d":"0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", + "0x6ef78ad4a40e9a6c81b9229de3ecc33ce591bc34":ADDRESSES.fantom.MIM, + "0x8b63f036f5a34226065bc0a7b0ae5bb5eba1ff3d":ADDRESSES.fantom.WFTM, }[addr.toLowerCase()] }) return balances @@ -20,15 +21,15 @@ module.exports = { timetravel: true, methodology: "Deposited AVAX, BNB and FTM on all three chains as well as deposits in staking pools. g3CRV is replaced by MIM", bsc:{ - tvl: getLiquityTvl("0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", "0x15102B7579aE3b913B0cbb2edE791fC58C528195", "bsc") + tvl: getLiquityTvl(ADDRESSES.bsc.WBNB, "0x15102B7579aE3b913B0cbb2edE791fC58C528195", "bsc") }, avax:{ - tvl: getLiquityTvl("0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", "0x41c36D163DB9e58608F4B354FfB3893EF472E9fd", "avax") + tvl: getLiquityTvl(ADDRESSES.avax.WAVAX, "0x41c36D163DB9e58608F4B354FfB3893EF472E9fd", "avax") }, fantom:{ tvl: sdk.util.sumChainTvls([ - getLiquityTvl("0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", "0x5420d619823b7d836341524C55f3c24B4D497c72", "fantom"), - getLiquityTvl("0x82f0b8b456c1a451378467398982d4834b6829c1", "0x16E900A379873351D6922881388548e4eee5c611", "fantom"), + getLiquityTvl(ADDRESSES.fantom.WFTM, "0x5420d619823b7d836341524C55f3c24B4D497c72", "fantom"), + getLiquityTvl(ADDRESSES.fantom.MIM, "0x16E900A379873351D6922881388548e4eee5c611", "fantom"), fantomCurveLps ]) } diff --git a/projects/tornadao/index.js b/projects/tornadao/index.js index 9b0a594279..01531ccddc 100644 --- a/projects/tornadao/index.js +++ b/projects/tornadao/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x68bb6883B44F4Ab37596b6189FAe354E937D4990" module.exports = ohmTvl(treasury, [ ["0x130966628846bfd36ff31a822705796e8cb8c18d", false],//mim - ["0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", false],//avax + [ADDRESSES.avax.WAVAX, false],//avax ["0xaef85b5b06b13b79b17fd684b1f04035570a9ae0", true],//joeLP ["0xe750f3b821d4bc696f977756cd3b1b5e0ae00647", true],//joeLP ], "avax", "0x39Af1EB019750aDc3Ea89D80080079F64D5432dB", "0xb80323c7aa915cb960b19b5cca1d88a2132f7bd1") \ No newline at end of file diff --git a/projects/tornado/config.js b/projects/tornado/config.js index daff20f108..65df9122a7 100644 --- a/projects/tornado/config.js +++ b/projects/tornado/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require('../helper/unwrapLPs') module.exports = { @@ -12,7 +13,7 @@ module.exports = { ], }, { - tokens: ['0x6b175474e89094c44da98b954eedeac495271d0f'], // DAI + tokens: [ADDRESSES.ethereum.DAI], // DAI holders: [ "0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3", "0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144", @@ -21,7 +22,7 @@ module.exports = { ], }, { - tokens: ['0xdac17f958d2ee523a2206206994597c13d831ec7'], // USDT + tokens: [ADDRESSES.ethereum.USDT], // USDT holders: [ "0x169AD27A470D064DEDE56a2D3ff727986b15D52B", "0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f", @@ -30,7 +31,7 @@ module.exports = { ], }, { - tokens: ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'], // USDC + tokens: [ADDRESSES.ethereum.USDC], // USDC holders: [ "0xd96f2B1c14Db8458374d9Aca76E26c3D18364307", "0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D", @@ -38,7 +39,7 @@ module.exports = { ], }, { - tokens: ['0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'], // WBTC + tokens: [ADDRESSES.ethereum.WBTC], // WBTC holders: [ "0x178169B423a011fff22B9e3F3abeA13414dDD0F1", "0x610B717796ad172B316836AC95a2ffad065CeaB4", diff --git a/projects/toros/abis.js b/projects/toros/abis.js index 349171656e..938c9930d5 100644 --- a/projects/toros/abis.js +++ b/projects/toros/abis.js @@ -1,6 +1,8 @@ -const DHEDGE_FACTORY_ABI = 'function getManagedPools(address manager) view returns (address[] managedPools)'; +const DHEDGE_FACTORY_ABI = + "function getManagedPools(address manager) view returns (address[] managedPools)"; -const TOROS_POOL_ABI = 'function getFundSummary() view returns (tuple(string name, uint256 totalSupply, uint256 totalFundValue, address manager, string managerName, uint256 creationTime, bool privatePool, uint256 performanceFeeNumerator, uint256 managerFeeNumerator, uint256 managerFeeDenominator, uint256 exitFeeNumerator, uint256 exitFeeDenominator))' +const TOROS_POOL_ABI = + "function getFundSummary() view returns (tuple(string name, uint256 totalSupply, uint256 totalFundValue))"; module.exports = { DHEDGE_FACTORY_ABI, diff --git a/projects/toros/config.js b/projects/toros/config.js index 75bc853c0c..b914d15c4c 100644 --- a/projects/toros/config.js +++ b/projects/toros/config.js @@ -1,20 +1,11 @@ -const { - transformPolygonAddress, - transformOptimismAddress, -} = require("../helper/portedTokens"); - const CONFIG_DATA = { polygon: { - transformAddress: transformPolygonAddress, dhedgeFactory: "0xfdc7b8bFe0DD3513Cc669bB8d601Cb83e2F69cB0", torosMultisigManager: "0x090e7fbd87a673ee3d0b6ccacf0e1d94fb90da59", - daiToken: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", }, optimism: { - transformAddress: transformOptimismAddress, dhedgeFactory: "0x5e61a079A178f0E5784107a4963baAe0c5a680c6", torosMultisigManager: "0x813123a13d01d3f07d434673fdc89cbba523f14d", - daiToken: "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", }, }; diff --git a/projects/toros/index.js b/projects/toros/index.js index 8b25bde76e..93b142fa67 100644 --- a/projects/toros/index.js +++ b/projects/toros/index.js @@ -1,27 +1,27 @@ - const { DHEDGE_FACTORY_ABI, TOROS_POOL_ABI } = require("./abis"); const { CONFIG_DATA } = require("./config"); async function tvl(_, _b, _cb, { api, chain }) { - const { dhedgeFactory, torosMultisigManager, } = CONFIG_DATA[chain]; + const { dhedgeFactory, torosMultisigManager } = CONFIG_DATA[chain]; - let pools = await api.call({ + const pools = await api.call({ abi: DHEDGE_FACTORY_ABI, target: dhedgeFactory, params: [torosMultisigManager], - }) - - pools = pools.filter(i => i.toLowerCase() !== '0x44Ca2d499E6254DfDc17fdef8C23e7283e7c24e4'.toLowerCase()) + }); const poolSummaries = await api.multiCall({ abi: TOROS_POOL_ABI, - calls: pools - }) + calls: pools, + }); - const totalValue = poolSummaries.reduce((acc, i) => acc + +i.totalFundValue, 0) + const totalValue = poolSummaries.reduce( + (acc, i) => acc + +i.totalFundValue, + 0 + ); return { - tether: totalValue/1e18 + tether: totalValue / 1e18, }; } @@ -30,11 +30,12 @@ module.exports = { misrepresentedTokens: true, start: 1627776000, // Sunday, August 1, 2021 12:00:00 AM methodology: - "Aggregates total value of each Toros product both on Polygon and Optimism", + "Aggregates total value of each Toros vault both on Polygon and Optimism", polygon: { - tvl + tvl, }, optimism: { - tvl + tvl, }, + hallmarks: [[1674003600, "Optimism Incentives Start"]], }; diff --git a/projects/tortuga/index.js b/projects/tortuga/index.js index 409dba541a..99a92d21aa 100644 --- a/projects/tortuga/index.js +++ b/projects/tortuga/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { aQuery } = require('../helper/chain/aptos') module.exports = { diff --git a/projects/toucan-protocol/config.js b/projects/toucan-protocol/config.js index 72a5c2a8e8..21fe7468ca 100644 --- a/projects/toucan-protocol/config.js +++ b/projects/toucan-protocol/config.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const CONFIG_DATA = { celo: { bct: "0x0CcB0071e8B8B716A2a5998aB4d97b83790873Fe", - nct: "0x02De4766C272abc10Bc88c220D214A26960a7e92", + nct: ADDRESSES.celo.NCT, }, polygon: { bct: "0x2F800Db0fdb5223b3C3f354886d907A671414A7F", diff --git a/projects/tracerdao/index.js b/projects/tracerdao/index.js index cec7c3911b..ad13ea73a6 100644 --- a/projects/tracerdao/index.js +++ b/projects/tracerdao/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens2 } = require('../helper/unwrapLPs') -const USDC = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"; +const USDC = ADDRESSES.arbitrum.USDC; const chain = 'arbitrum' // Both v1 and v2 factories diff --git a/projects/traddify/index.js b/projects/traddify/index.js index 20c806847a..3979591dbc 100644 --- a/projects/traddify/index.js +++ b/projects/traddify/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress } = require('../helper/unwrapLPs') const contract = "0xA7f3d2dEa7a53E7A9FEbBdE5Cf7C69d39D065030" @@ -5,6 +6,6 @@ const contract = "0xA7f3d2dEa7a53E7A9FEbBdE5Cf7C69d39D065030" module.exports = { methodology: `We count the WKAVA on ${contract}`, kava: { - tvl: sumTokensExport({ tokens: [nullAddress, '0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b', ], owner: contract}) + tvl: sumTokensExport({ tokens: [nullAddress, ADDRESSES.kava.WKAVA, ], owner: contract}) } } diff --git a/projects/traderjoe-lb-v2-1/index.js b/projects/traderjoe-lb-v2-1/index.js new file mode 100644 index 0000000000..7dda6cb9d5 --- /dev/null +++ b/projects/traderjoe-lb-v2-1/index.js @@ -0,0 +1,39 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') +const { staking } = require("../helper/staking.js"); + +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 } +}) + +module.exports.arbitrum.staking = staking("0x43646A8e839B2f2766392C1BF8f60F6e587B6960", "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "arbitrum") \ No newline at end of file diff --git a/projects/traderjoe-lend/index.js b/projects/traderjoe-lend/index.js index b0c77dda05..bd737341da 100644 --- a/projects/traderjoe-lend/index.js +++ b/projects/traderjoe-lend/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getCompoundV2Tvl } = require('../helper/compound'); @@ -13,7 +14,7 @@ module.exports = { "avax", addr => `avax:${addr}`, "0xC22F01ddc8010Ee05574028528614634684EC29e", - "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + ADDRESSES.avax.WAVAX, false ), borrowed: getCompoundV2Tvl( @@ -21,7 +22,7 @@ module.exports = { "avax", addr => `avax:${addr}`, "0xC22F01ddc8010Ee05574028528614634684EC29e", - "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", + ADDRESSES.avax.WAVAX, true ), } diff --git a/projects/traderjoe/index.js b/projects/traderjoe/index.js index 9ea3fea1bc..fccffafee0 100644 --- a/projects/traderjoe/index.js +++ b/projects/traderjoe/index.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/staking'); -const joeBar = "0x57319d41F71E81F3c65F2a47CA4e001EbAFd4F33"; -const joeToken = "0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd"; +const joeBar = ADDRESSES.avax.xJOE; +const joeToken = ADDRESSES.avax.JOE; const { getChainTvl } = require('../helper/getUniSubgraphTvl'); const { getUniTVL } = require('../helper/unknownTokens'); const graphUrls = { diff --git a/projects/trainswap/index.js b/projects/trainswap/index.js index 436d6b79b3..3fb73cbfa5 100644 --- a/projects/trainswap/index.js +++ b/projects/trainswap/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') const sdk = require('@defillama/sdk') const uniTvl = getUniTVL({ factory: '0x15fA42586c30E87CA49f0Fe262bbb73E89da1cad', useDefaultCoreAssets: true, }) const masterchef = '0x8b804321b8D094D8C9bB3bFF8CC580087E8d13E0' const train = '0x52DA160e9a8CeF972FF0A797D4902eD67589f64C' -const weth = '0x82af49447d8a07e3bd95bd0d56f35241523fbab1' +const weth = ADDRESSES.arbitrum.WETH module.exports = { misrepresentedTokens: true, diff --git a/projects/tranche/index.js b/projects/tranche/index.js index fe539ae64e..6796d3d525 100644 --- a/projects/tranche/index.js +++ b/projects/tranche/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { sumTokens } = require('../helper/unwrapLPs') @@ -81,7 +82,7 @@ function tvl(chain) { chain })).output; - balances['0x514910771af9ca656af840dff83e8264ecf986ca'] = + balances[ADDRESSES.ethereum.LINK] = balances[cLINK] * (exchangeRate / 10 ** 28); delete balances[cLINK]; } diff --git a/projects/tranchess-ETH/abi.json b/projects/tranchess-ETH/abi.json new file mode 100644 index 0000000000..8427465632 --- /dev/null +++ b/projects/tranchess-ETH/abi.json @@ -0,0 +1,4 @@ +{ + "tokenUnderlying": "address:tokenUnderlying", + "getTotalUnderlying": "uint256:getTotalUnderlying" +} \ No newline at end of file diff --git a/projects/tranchess-ETH/index.js b/projects/tranchess-ETH/index.js new file mode 100644 index 0000000000..5d19aa93fa --- /dev/null +++ b/projects/tranchess-ETH/index.js @@ -0,0 +1,19 @@ +const sdk = require('@defillama/sdk') +const abi = require('./abi.json') + +const ETHV2Funds = [ + '0x69c53679EC1C06f3275b64C428e8Cd069a2d3966', // ETH V2 Fund (ETH mainnet) +] + +async function ethereum(timestamp, blockETH, chainBlocks, { api }){ + const tokens = await api.multiCall({ abi: abi.tokenUnderlying, calls: ETHV2Funds}) + const bals = await api.multiCall({ abi: abi.getTotalUnderlying, calls: ETHV2Funds}) + api.addTokens(tokens, bals) +} + +module.exports = { + methodology: `Only counts the staked ETH in ETH fund deployed on Ethereum mainnet.`, + ethereum:{ + tvl: ethereum + } +} \ No newline at end of file diff --git a/projects/tranquil/index.js b/projects/tranquil/index.js index 78b4173472..e58a44ff23 100644 --- a/projects/tranquil/index.js +++ b/projects/tranquil/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { BigNumber } = require("bignumber.js"); const {compoundExports, getCompoundV2Tvl} = require('../helper/compound') @@ -5,7 +6,7 @@ const { uniTvlExport } = require('../helper/calculateUniTvl.js'); const { getFixBalancesSync } = require("../helper/portedTokens"); const tqOne = "0x34B9aa82D89AE04f0f546Ca5eC9C93eFE1288940"; // tqONE -const wOne = "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a"; +const wOne = ADDRESSES.harmony.WONE; const stONEAddr = "0x22D62b19b7039333ad773b7185BB61294F3AdC19"; // stONE ERC20 contract const tranqToken = "0xcf1709ad76a79d5a60210f23e81ce2460542a836"; diff --git a/projects/trapeza-protocol/index.js b/projects/trapeza-protocol/index.js index 808c5cd9eb..7e8925d946 100644 --- a/projects/trapeza-protocol/index.js +++ b/projects/trapeza-protocol/index.js @@ -1,14 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const fidl = "0x414a36a4b79Ee1D4b454AB798E4179ffC00b1641"; const fidlStaking = "0x2D1E126b0700D419f8B742118Fb4fa1dEc8c4a62"; const treasury = "0x282cBA0034b8Ce7394c0737F0571945e15Ed242E"; const treasuryTokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ["0x08DBeFd8f7ACa80729267a84df012eA0f203cFa8", true] // FIDL-BUSD CAKE LP ]; module.exports = { + hallmarks: [ + [1648684800, "Rug Pull"] + ], misrepresentedTokens: true, ...ohmTvl(treasury, treasuryTokens, "bsc", fidlStaking, fidl, undefined, undefined, false) } \ No newline at end of file diff --git a/projects/trava/index.js b/projects/trava/index.js index 78e70b57b1..11181a71e2 100644 --- a/projects/trava/index.js +++ b/projects/trava/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { default: BigNumber } = require('bignumber.js'); const abi = require('./abi.json'); @@ -88,11 +89,11 @@ async function getTVL(block, chain, tTokenList) { let addressToAdd; if (tTokenList[i].reserve == "0xfb6115445Bff7b52FeB98650C87f44907E58f802" && chain == "bsc") { // aave dont have bsc address on coingecko - addressToAdd = "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9" - } else if (tTokenList[i].reserve == "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E" && chain == "fantom"){ - addressToAdd = "0x6b175474e89094c44da98b954eedeac495271d0f" - } else if (tTokenList[i].reserve == "0x049d68029688eAbF473097a2fC38ef61633A3C7A" && chain == "fantom"){ - addressToAdd = "0xdac17f958d2ee523a2206206994597c13d831ec7" + addressToAdd = ADDRESSES.ethereum.AAVE + } else if (tTokenList[i].reserve == ADDRESSES.fantom.DAI && chain == "fantom"){ + addressToAdd = ADDRESSES.ethereum.DAI + } else if (tTokenList[i].reserve == ADDRESSES.fantom.fUSDT && chain == "fantom"){ + addressToAdd = ADDRESSES.ethereum.USDT } else { addressToAdd = chain + ":" + tTokenList[i].reserve diff --git a/projects/traverse/index.js b/projects/traverse/index.js index eed7bb48b2..443f843bc2 100644 --- a/projects/traverse/index.js +++ b/projects/traverse/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm'); const verse = "0xB72ab6f7177bBb41eFcC17D817778d77460259F1"; @@ -5,7 +6,7 @@ const staking = "0x3fb7931f7BFA9f318Fbf2346f568802a76531774"; const treasury = "0x623845e7961F7A2E535885F983a804608b69D026" const treasuryTokens = [ - ["0xd586e7f844cea2f87f50152665bcbc2c279d8d70", false], // DAI + [ADDRESSES.avax.DAI, false], // DAI ["0xbf56ea8a64faf58889584930716e655317d22ea6", true] // VERSE-DAI ]; diff --git a/projects/treasury/1inch.js b/projects/treasury/1inch.js index 5aa38605d4..64f8ca4cd5 100644 --- a/projects/treasury/1inch.js +++ b/projects/treasury/1inch.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const oneInchTreasury = "0x7951c7ef839e26F63DA87a42C9a87986507f1c07"; @@ -7,11 +8,11 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',//WBTC + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.WBTC,//WBTC ], owners: [oneInchTreasury], ownTokens: [ONE_INCH] diff --git a/projects/treasury/3xcalibur.js b/projects/treasury/3xcalibur.js new file mode 100644 index 0000000000..89d7333282 --- /dev/null +++ b/projects/treasury/3xcalibur.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x5f49174fdeb42959f3234053b18f5c4ad497cc55"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/aave.js b/projects/treasury/aave.js index fe4524512f..0aa792d7d3 100644 --- a/projects/treasury/aave.js +++ b/projects/treasury/aave.js @@ -1,10 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasuryContractsETH = [ "0x89c51828427f70d77875c6747759fb17ba10ceb0", //Aave Grants DAO "0xe3d9988f676457123c5fd01297605efdd0cba1ae", //Aave V1 Treasury "0x464C71f6c2F760DdA6093dCB91C24c39e5d6e18c", //Aave V2 Collector - "0x25f2226b597e8f9514b3f68f00f494cf4f286491" //Aave Ecosystem Reserve + "0x25f2226b597e8f9514b3f68f00f494cf4f286491", //Aave Ecosystem Reserve + "0xd784927Ff2f95ba542BfC824c8a8a98F3495f6b5", //V2 Incentives Controller ]; const treasuryContractsMATIC = [ @@ -17,68 +19,73 @@ const treasuryContractsAvax = [ "0x5ba7fd868c40c16f7aDfAe6CF87121E13FC2F7a0" //Aave V3 Treasury ]; +const treasuryContractsFantom = [ + "0xBe85413851D195fC6341619cD68BfDc26a25b928", //Treasury V3 +]; + const aaveTreasuryOptimism = ["0xB2289E329D2F85F1eD31Adbb30eA345278F21bcf"] const aaveTreasuryArbitrum = ["0x053D55f9B5AF8694c503EB288a1B7E552f590710"] -const AAVE = "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9"; +const AAVE = ADDRESSES.ethereum.AAVE; const AAVEPOLYGON = '0xD6DF932A45C0f255f85145f286eA0b292B21C90B'; const AAVEAVAX = '0x63a72806098bd3d9520cc43356dd78afe5d386d9'; const AAVEARBITRUM = '0xba5ddd1f9d7f570dc94a51479a000e3bce967196'; const AAVEOPTIMISM = '0x76fb31fb4af56892a25e32cfc43de717950c9278'; +const AAVEFANTOM = "0xf329e36C7bF6E5E86ce2150875a84Ce77f477375"; module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC + ADDRESSES.ethereum.USDC, '0xBcca60bB61934080951369a648Fb03DF4F96263C', // aUSDC '0xd24946147829DEaA935bE2aD85A3291dbf109c80', // ammUSDC '0x98C23E9d8f34FEFb1B7BD6a91B7FF122F4e16F5c', // aEthUSDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI + ADDRESSES.ethereum.DAI, '0x028171bca77440897b824ca71d1c56cac55b68a3', // aDAI '0x79bE75FFC64DD58e66787E4Eae470c8a1FD08ba4', // ammDAI '0x018008bfb33d285247A21d44E50697654f754e63', // aEthDAI - '0xdac17f958d2ee523a2206206994597c13d831ec7', // USDT + ADDRESSES.ethereum.USDT, '0x3ed3b47dd13ec9a98b44e6204a523e766b225811', // aUSDT '0x17a79792Fe6fE5C95dFE95Fe3fCEE3CAf4fE4Cb7', // ammUSDT '0xFFC97d72E13E01096502Cb8Eb52dEe56f74DAD7B', // aAAVE '0xA700b4eB416Be35b2911fd5Dee80678ff64fF6C9', // aEthAAVE - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC + ADDRESSES.ethereum.WBTC, '0x9ff58f4fFB29fA2266Ab25e75e2A8b3503311656', // aWBTC '0x13B2f6928D7204328b0E8E4BCd0379aA06EA21FA', // ammWBTC '0x5Ee5bf7ae06D1Be5997A1A72006FE6C607eC6DE8', // aEthWBTC - '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // wstETH + ADDRESSES.ethereum.WSTETH, '0x0B925eD163218f6662a35e0f0371Ac234f9E9371', // aEthwstETH '0xba100000625a3754423978a60c9317c58a424e3D', // BAL - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + ADDRESSES.ethereum.WETH, '0x030bA81f1c18d280636F32af80b9AAd02Cf0854e', // aWETH '0xf9Fb4AD91812b704Ba883B11d2B576E890a6730A', // ammWETH '0x4d5F47FA6A74757f35C14fD3a6Ef8E3C9BC514E8', // aEthWETH - '0xd533a949740bb3306d119cc777fa900ba034cd52', // CRV + ADDRESSES.ethereum.CRV, '0x8dAE6Cb04688C62d939ed9B68d32Bc62e49970b1', // aCRV - '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', // SNX + ADDRESSES.ethereum.SNX, '0x35f6B052C598d933D69A4EEC4D04c73A191fE6c2', // aSNX - '0x514910771af9ca656af840dff83e8264ecf986ca', // LINK + ADDRESSES.ethereum.LINK, '0xa06bC25B5805d5F8d82847D191Cb4Af5A3e873E0', // aLINK '0x5E8C8A7243651DB1384C0dDfDbE39761E8e7E51a', // aEthLINK '0xba100000625a3754423978a60c9317c58a424e3d', // BAL '0x272F97b7a56a387aE942350bBC7Df5700f8a4576', // aBAL - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', // UNI + ADDRESSES.ethereum.UNI, '0xB9D7CB55f463405CDfBe4E90a6D2Df01C2B92BF1', // aUNI - '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2', // MKR + ADDRESSES.ethereum.MKR, '0xc713e5E149D5D0715DcD1c156a020976e7E56B88', // aMKR - '0x4Fabb145d64652a948d72533023f6E7A623C7C53', // BUSD + ADDRESSES.ethereum.BUSD, '0xA361718326c15715591c299427c62086F69923D9', // aBUSD - '0x853d955acef822db058eb8505911ed77f175b99e', // FRAX + ADDRESSES.ethereum.FRAX, '0xd4937682df3C8aEF4FE912A96A74121C0829E664', // aFRAX - '0x57ab1ec28d129707052df4df418d58a2d46d5f51', // sUSD + ADDRESSES.ethereum.sUSD, '0x6C5024Cd4F8A59110119C56f8933403A539555EB', // aSUSD - '0x5f98805a4e8be255a32880fdec7f6728c6568ba0', // LUSD + ADDRESSES.ethereum.LUSD, // LUSD '0xce1871f791548600cb59efbefFC9c38719142079', // aLUSD '0x056fd409e1d7a124bd7017459dfea2f387b6d5cd', // GUSD '0xD37EE7e4f452C6638c96536e68090De8cBcdb583', // aGUSD - '0x0000000000085d4780b73119b644ae5ecd22b376', // TUSD + ADDRESSES.ethereum.TUSD, '0x101cc05f4A51C0319f570d5E146a8C625198e636', // aTUSD '0x8e870d67f660d95d5be530380d0ec0bd388289e1', // USDP '0x2e8F4bdbE3d47d7d7DE490437AeA9915D930F1A3', // aUSDP @@ -88,7 +95,7 @@ module.exports = treasuryExports({ '0x6F634c6135D2EBD550000ac92F494F9CB8183dAe', // aDPI '0xc18360217d8f7ab5e7c516566761ea12ce7f9d72', // ENS '0x9a14e23A58edf4EFDcB360f68cd1b95ce2081a2F', // aENS - '0xae7ab96520de3a18e5e111b5eaab095312d7fe84', // stETH + ADDRESSES.ethereum.STETH, '0x1982b2F5814301d4e9a8b0201555376e62F82428', // aSTETH '0xd46ba6d942050d489dbd938a2c909a5d5039a161', // AMPL '0x1E6bb68Acec8fefBD87D192bE09bb274170a0548', // aAMPL @@ -96,9 +103,9 @@ module.exports = treasuryExports({ '0x683923dB55Fead99A79Fa01A27EeC3cB19679cC3', // aFEI '0xa693b19d2931d498c5b318df961919bb4aee87a5', // UST '0xc2e2152647F4C26028482Efaf64b2Aa28779EFC4', // aUST - '0x0d8775f648430679a709e98d2b0cb6250d2887ef', // BAT + ADDRESSES.ethereum.BAT, '0x05Ec93c0365baAeAbF7AefFb0972ea7ECdD39CF1', // aBAT - '0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b', // CVX + ADDRESSES.ethereum.CVX, '0x952749E07d7157bb9644A894dFAF3Bad5eF6D918', // aCVX '0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c', // ENJ '0xaC6Df26a590F08dcC95D5a4705ae8abbc88509Ef', // aENJ @@ -114,7 +121,7 @@ module.exports = treasuryExports({ '0x514cd6756CCBe28772d4Cb81bC3156BA9d1744aa', // aRENFIL '0xe41d2489571d322189246dafa5ebde1f4699f498', // ZRX '0xDf7FF54aAcAcbFf42dfe29DD6144A69b629f8C9e', // aZRX - '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e', // YFI + ADDRESSES.ethereum.YFI, '0x5165d24277cD063F5ac44Efd447B27025e888f37', // aYFI '0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272', // xSUSHI '0xF256CC7847E919FAc9B808cC216cAc87CCF2f47a', // aXSUSHI @@ -125,24 +132,24 @@ module.exports = treasuryExports({ polygon: { tokens: [ nullAddress, - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', // DAI + ADDRESSES.polygon.DAI, '0x27F8D03b3a2196956ED754baDc28D73be8830A6e', // amDAI '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE', // aPOLDAI - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC + ADDRESSES.polygon.USDC, '0x1a13F4Ca1d028320A707D99520AbFefca3998b7F', // amUSDC '0x625E7708f30cA75bfd92586e17077590C60eb4cD', // aPolUSDC - '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', // USDT + ADDRESSES.polygon.USDT, '0x60D55F02A771d515e077c9C2403a1ef324885CeC', // amUSDT '0x6ab707Aca953eDAeFBc4fD23bA73294241490620', // aPolUSDT '0x1d2a0E5EC8E5bBDCA5CB219e649B565d8e5c3360', // amAAVE '0xf329e36C7bF6E5E86ce2150875a84Ce77f477375', // aPolAAVE - '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', // WBTC + ADDRESSES.polygon.WBTC, '0x5c2ed810328349100A66B82b78a1791B101C9D61', // amWBTC '0x078f358208685046a11C85e8ad32895DED33A249', // aPolWBTC - '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', // WETH + ADDRESSES.polygon.WETH_1, '0x28424507fefb6f7f8E9D3860F56504E4e5f5f390', // amWETH '0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8', // aPolWETH - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC + ADDRESSES.polygon.WMATIC_2, // WMATIC '0x8dF3aad3a84da6b69A4DA8aeC3eA40d9091B2Ac4', // amWMATIC '0x6d80113e533a2C0fe82EaBD35f1875DcEA89Ea97', // aPolWMATIC '0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3', // BAL @@ -167,7 +174,7 @@ module.exports = treasuryExports({ '0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5', // aPolEURS '0xa3fa99a148fa48d14ed51d610c367c61876997f1', // MAI '0xeBe517846d0F36eCEd99C735cbF6131e1fEB775D', // aPolMAI - '0xfa68fb4628dff1028cfec22b4162fccd0d45efb6', // MATICX + ADDRESSES.polygon.MATICX, // MATICX '0x80cA0d8C38d2e2BcbaB66aA1648Bd1C7160500FE', // aPolMATICX '0x3a58a54c066fdc0f2d55fc9c89f0415c92ebf3c4', // stMATIC '0xEA1132120ddcDDA2F119e99Fa7A27a0d036F7Ac9', // aPolSTMATIC @@ -181,24 +188,24 @@ module.exports = treasuryExports({ }, avax: { tokens: [ - '0xd586e7f844cea2f87f50152665bcbc2c279d8d70', // DAI + ADDRESSES.avax.DAI, '0x47AFa96Cdc9fAb46904A55a6ad4bf6660B53c38a', // avDAI '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE', // aAvaDAI - '0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664', // USDC + ADDRESSES.avax.USDC_e, '0x46A51127C3ce23fb7AB1DE06226147F446e4a857', // avUSDC '0x625E7708f30cA75bfd92586e17077590C60eb4cD', // aAvaUSDC - '0xc7198437980c041c805a1edcba50c1ce5db95118', // USDT + ADDRESSES.avax.USDT_e, '0x532E6537FEA298397212F09A61e03311686f548e', // avUSDT '0x6ab707Aca953eDAeFBc4fD23bA73294241490620', // aAvaUSDT '0xD45B7c061016102f9FA220502908f2c0f1add1D7', // avAAVE '0xf329e36C7bF6E5E86ce2150875a84Ce77f477375', // aAvaAAVE - '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7', // WAVAX + ADDRESSES.avax.WAVAX, '0xDFE521292EcE2A4f44242efBcD66Bc594CA9714B', // avWAVAX '0x6d80113e533a2C0fe82EaBD35f1875DcEA89Ea97', // aAvaWAVAX '0x50b7545627a5162f82a992c33b87adc75187b218', // WBTC '0x686bEF2417b6Dc32C50a3cBfbCC3bb60E1e9a15D', // aWBTC '0x078f358208685046a11C85e8ad32895DED33A249', // aAvaWBTC - '0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab', // WETH + ADDRESSES.avax.WETH_e, '0x53f7c5869a859F0AeC3D334ee8B4Cf01E3492f21', // aWETH '0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8', // aAvaWETH '0x5947bb275c521040051d82396192181b413227a3', // LINK @@ -209,7 +216,7 @@ module.exports = treasuryExports({ '0x8Eb270e296023E9D92081fdF967dDd7878724424', // aAvaMAI '0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be', // sAVAX '0x513c7E3a9c69cA3e22550eF58AC1C0088e918FFf', // aAvaSAVAX - '0x152b9d0fdc40c096757f570a51e494bd4b943e50', // BTC.b + ADDRESSES.avax.BTC_b, '0x8ffDf2DE812095b1D19CB146E4c004587C0A0692', // aAvaBTC.b ], owners: treasuryContractsAvax, @@ -217,20 +224,20 @@ module.exports = treasuryExports({ }, arbitrum: { tokens: [ - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI + ADDRESSES.optimism.DAI, // DAI '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE', // aArbDAI '0xd22a58f79e9481d1a88e00c343885a588b34b68b', // EURS '0x6d80113e533a2C0fe82EaBD35f1875DcEA89Ea97', // aArbEURS - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC + ADDRESSES.arbitrum.USDC, // USDC '0x625E7708f30cA75bfd92586e17077590C60eb4cD', // aArbUSDC - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT + ADDRESSES.arbitrum.USDT, // USDT '0x6ab707Aca953eDAeFBc4fD23bA73294241490620', // aArbUSDT '0xf329e36C7bF6E5E86ce2150875a84Ce77f477375', // aArbAAVE - '0xf97f4df75117a78c1a5a0dbb814af92458539fb4', // LINK + ADDRESSES.arbitrum.LINK, // LINK '0x191c10Aa4AF7C30e871E70C95dB0E4eb77237530', // aArbLINK - '0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f', // WBTC + ADDRESSES.arbitrum.WBTC, // WBTC '0x078f358208685046a11C85e8ad32895DED33A249', // aArbWBTC - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH + ADDRESSES.arbitrum.WETH, // WETH '0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8', // aArbWETH ], owners: aaveTreasuryArbitrum, @@ -238,19 +245,19 @@ module.exports = treasuryExports({ }, optimism: { tokens: [ - '0x4200000000000000000000000000000000000006', // WETH + ADDRESSES.tombchain.FTM, // WETH '0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8', // aOptWETH '0x68f180fcce6836688e9084f035309e29bf0a2095', // WBTC '0x078f358208685046a11C85e8ad32895DED33A249', // aOptWBTC - '0x4200000000000000000000000000000000000042', // OP + ADDRESSES.optimism.OP, // OP '0x513c7E3a9c69cA3e22550eF58AC1C0088e918FFf', // aOptOP - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI + ADDRESSES.optimism.DAI, // DAI '0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE', // aOptDAI - '0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9', // sUSD + ADDRESSES.optimism.sUSD, // sUSD '0x6d80113e533a2C0fe82EaBD35f1875DcEA89Ea97', // aOptSUSD - '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // USDC + ADDRESSES.optimism.USDC, // USDC '0x625E7708f30cA75bfd92586e17077590C60eb4cD', // aOptUSDC - '0x94b008aa00579c1307b0ef2c499ad98a8ce58e58', // USDT + ADDRESSES.optimism.USDT, // USDT '0x6ab707Aca953eDAeFBc4fD23bA73294241490620', // aOptUSDT '0xf329e36C7bF6E5E86ce2150875a84Ce77f477375', // aOptAAVE '0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6', // LINK @@ -259,4 +266,19 @@ module.exports = treasuryExports({ owners: aaveTreasuryOptimism, ownTokens: [AAVEOPTIMISM], }, + fantom: { + tokens: [ + "0x513c7E3a9c69cA3e22550eF58AC1C0088e918FFf", // aFanCRV + "0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE", // aFanDAI + "0x191c10Aa4AF7C30e871E70C95dB0E4eb77237530", // aFanLINK + "0xc45A479877e1e9Dfe9FcD4056c699575a1045dAA", // aFanSUSHI + "0x625E7708f30cA75bfd92586e17077590C60eb4cD", // aFanUSDC + "0x6ab707Aca953eDAeFBc4fD23bA73294241490620", // aFanUSDT + "0x078f358208685046a11C85e8ad32895DED33A249", // aFanWBTC + "0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8", // aFanWETH + "0x6d80113e533a2C0fe82EaBD35f1875DcEA89Ea97", // aFanWFTM + ], + owners: treasuryContractsFantom, + ownTokens: [AAVEFANTOM] + }, }) diff --git a/projects/treasury/aavegotchi.js b/projects/treasury/aavegotchi.js index c47eb5986c..295ca69cec 100644 --- a/projects/treasury/aavegotchi.js +++ b/projects/treasury/aavegotchi.js @@ -1,6 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const aavegotchiTreasury2 = "0xFFE6280ae4E864D9aF836B562359FD828EcE8020"; +const treasury2 = "0xfb76e9be55758d0042e003c1e46e186360f0627e" const GHST = "0x3F382DbD960E3a9bbCeaE22651E88158d2791550"; @@ -8,9 +10,22 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0x6B175474E89094C44Da98b954EedeAC495271d0F'//DAI + ADDRESSES.ethereum.DAI//DAI ], - owners: [aavegotchiTreasury2], + owners: [aavegotchiTreasury2, treasury2, '0x53c3CA81EA03001a350166D2Cc0fcd9d4c1b7B62'], ownTokens: [GHST], }, + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.USDC + ], + owners: ['0xb208f8BB431f580CC4b216826AFfB128cd1431aB', '0x27DF5C6dcd360f372e23d5e63645eC0072D0C098', '0x939b67F6F6BE63E09B0258621c5A24eecB92631c', + '0x62DE034b1A69eF853c9d0D8a33D26DF5cF26682E', '0x8c8E076Cd7D2A17Ba2a5e5AF7036c2b2B7F790f6', '0x48eA1d45142fC645fDcf78C133Ac082eF159Fe14', '0x6fb7e0AAFBa16396Ad6c1046027717bcA25F821f', +'0x921D8FDF089775D5AC61b2d6e8f34F1edd554D8f', +'0xa8D00712abE7af3446cdC651c159737cCFB43255', '0xed7cb3973C7bFE4bf78dA8E5f52EB04c0dF53d3B', '0x62DE034b1A69eF853c9d0D8a33D26DF5cF26682E', '0x8c8E076Cd7D2A17Ba2a5e5AF7036c2b2B7F790f6', +'0xAbA69f6E893B18bE066a237f723F43315BBF9D9A'], + ownTokens: ['0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7'], + }, }) \ No newline at end of file diff --git a/projects/treasury/abracadabra.js b/projects/treasury/abracadabra.js index 008c162de7..e465ad52b3 100644 --- a/projects/treasury/abracadabra.js +++ b/projects/treasury/abracadabra.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const mainnetTeamTokens = "0x5A7C5505f3CFB9a0D9A8493EC41bf27EE48c406D"; @@ -10,12 +11,12 @@ module.exports = treasuryExports({ tokens: [ nullAddress, SPELL, - "0xdac17f958d2ee523a2206206994597c13d831ec7", // USDT + ADDRESSES.ethereum.USDT, // USDT "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", // MIM - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC - "0x6b175474e89094c44da98b954eedeac495271d0f", // DAI - "0xd533a949740bb3306d119cc777fa900ba034cd52", // CRV - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // wETH + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.DAI, // DAI + ADDRESSES.ethereum.CRV, // CRV + ADDRESSES.ethereum.WETH, // wETH "0x4d224452801aced8b2f0aebe155379bb5d594381", // APE // Yearn vaults "0x27B5739e22ad9033bcBf192059122d163b60349D", // st-yCRV @@ -39,9 +40,9 @@ module.exports = treasuryExports({ tokens: [ nullAddress, "0x912CE59144191C1204E64559FE8253a0e49E6548", // ARB - "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a", // MIM - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", // USDT + ADDRESSES.arbitrum.MIM, // MIM + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.USDT, // USDT // Magic autocompounders "0x85667409a723684fe1e57dd1abde8d88c2f54214", // magicGLP ], diff --git a/projects/treasury/across.js b/projects/treasury/across.js new file mode 100644 index 0000000000..02c9135dcf --- /dev/null +++ b/projects/treasury/across.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xd16d904b68429b93f1dfcd837f61aedcd224e8f4"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/airswap.js b/projects/treasury/airswap.js new file mode 100644 index 0000000000..051822819b --- /dev/null +++ b/projects/treasury/airswap.js @@ -0,0 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x24b4ce3ad4366b73f839c1b1fd11d1f636514534"; +const treasury2 = "0x8e5a68a73470c07d043b57d0751fba8b0315c12c"; +const treasury3 = "0xf8bb149f9525875fa47b8cc632d368eb600faba3"; + +const AST = "0x27054b13b1b798b345b591a4d22e6562d47ea75a" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.BUSD + ], + owners: [treasury, treasury2, treasury3], + ownTokens: [AST], + }, +}) \ No newline at end of file diff --git a/projects/treasury/ajira-pay-finance.js b/projects/treasury/ajira-pay-finance.js new file mode 100644 index 0000000000..8aa94fa4c7 --- /dev/null +++ b/projects/treasury/ajira-pay-finance.js @@ -0,0 +1,63 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); +const AJP = "0x9DBC0Ad09184226313FbDe094E7c3DD75c94f997" + +const arb_tokens = [ + ADDRESSES.arbitrum.USDC, ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.WBTC, ADDRESSES.arbitrum.USDT, + ADDRESSES.optimism.DAI, '0x9DBC0Ad09184226313FbDe094E7c3DD75c94f997', + '0x912CE59144191C1204E64559FE8253a0e49E6548', + nullAddress +] + +const bsc_tokens = [ + ADDRESSES.bsc.USDT, ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.BUSD, ADDRESSES.bsc.USDC, + '0xF8A0BF9cF54Bb92F17374d9e9A321E6a111a51bD', '0x9DBC0Ad09184226313FbDe094E7c3DD75c94f997', + nullAddress +] + +const polygon_tokens = [ + ADDRESSES.polygon.USDT, ADDRESSES.polygon.USDC, + ADDRESSES.polygon.WETH_1, ADDRESSES.polygon.WBTC, + ADDRESSES.polygon.WMATIC_1, ADDRESSES.polygon.DAI, + ADDRESSES.polygon.BUSD, '0x9DBC0Ad09184226313FbDe094E7c3DD75c94f997', + nullAddress +] + +const kava_tokens = [ + ADDRESSES.kava.WKAVA, ADDRESSES.telos.ETH, + ADDRESSES.moonriver.USDT, ADDRESSES.kava.axlUSDC, + '0x9DBC0Ad09184226313FbDe094E7c3DD75c94f997', + nullAddress +] + +const owners = { + bsc: '0x12A65dFDD9E94Bd7f7547d1C4365c5c067f47ed0', + arbitrum: '0x396B58574c0760E84E16468457c460bdCC6f8b57', + polygon: '0xd7B2DEcAAcD75ADb92C1ee0C77e2303c815012d0', + kava: '0xdBD5c57F3a0A6eFC7c9E91639D72Cc139c581AB4' +} + +module.exports = treasuryExports({ + kava: { + tokens: kava_tokens, + owners: [owners.kava], + ownTokens: [AJP] + }, + bsc: { + tokens: bsc_tokens, + owners: [owners.bsc], + ownTokens: [AJP], + }, + polygon: { + tokens: polygon_tokens, + owners: [owners.polygon], + ownTokens: [AJP] + }, + arbitrum: { + tokens: arb_tokens, + owners: [owners.arbitrum], + ownTokens: [AJP] + } + }) \ No newline at end of file diff --git a/projects/treasury/alchemix.js b/projects/treasury/alchemix.js index c547e2d915..f8bfe2ca18 100644 --- a/projects/treasury/alchemix.js +++ b/projects/treasury/alchemix.js @@ -1,20 +1,57 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const alchemixTreasury = "0x8392F6669292fA56123F71949B52d883aE57e225"; const ALCX = "0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF"; +const operations_treasury = "0x9e2b6378ee8ad2A4A95Fe481d63CAba8FB0EBBF9" +const treasury2 = "0x9735F7d3Ea56b454b24fFD74C58E9bD85cfaD31B" +const treasury3 = "0xe761bf731A06fE8259FeE05897B2687D56933110" +const treasury4 = "0x06378717d86B8cd2DBa58c87383dA1EDA92d3495" +const treasury5 = "0x3216D2A52f0094AA860ca090BC5C335dE36e6273" + +const treasuryFTM = "0x6b291cf19370a14bbb4491b01091e1e29335e605" +const treasuryOP = "0xc224bf25dcc99236f00843c7d8c4194abe8aa94a" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI '0x028171bCA77440897B824Ca71D1c56caC55b68A3',//aDAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT + "0xf16aEe6a71aF1A9Bc8F56975A4c2705ca7A782Bc", //20WETH-80ALC + ADDRESSES.ethereum.LUSD, + ADDRESSES.ethereum.CRV, + ADDRESSES.ethereum.YFI, + "0xa258C4606Ca8206D8aA700cE2143D7db854D168c", + "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", + "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", + "0xF1bB87563A122211d40d393eBf1c633c330377F9", //xpremia + "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", + "0x7f50786A0b15723D741727882ee99a0BF34e3466" ], - owners: [alchemixTreasury], + owners: [alchemixTreasury, operations_treasury, treasury2, treasury3, treasury4, treasury5], ownTokens: [ALCX], }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC,//USDC + ADDRESSES.optimism.OP, + "0x3c8B650257cFb5f272f799F5e2b4e65093a11a05" + ], + owners: [treasuryOP], + }, + fantom: { + tokens: [ + nullAddress, + ADDRESSES.fantom.USDC,//USDC + ADDRESSES.fantom.DAI, + ADDRESSES.fantom.WFTM + ], + owners: [treasuryFTM], + }, }) diff --git a/projects/treasury/alyx.js b/projects/treasury/alyx.js index 5a34e1251e..6f4efa1681 100644 --- a/projects/treasury/alyx.js +++ b/projects/treasury/alyx.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x576182b7a1b0bC67701ead28a087228c50Aa0982"; @@ -8,8 +9,8 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", - "0x55d398326f99059fF775485246999027B3197955" + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.USDT ], owners: [treasury] }, diff --git a/projects/treasury/antfarm_finance.js b/projects/treasury/antfarm_finance.js new file mode 100644 index 0000000000..451b4119fe --- /dev/null +++ b/projects/treasury/antfarm_finance.js @@ -0,0 +1,13 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const daoTreasury = "0x529C78Ee582e4293a20Ab60c848506eADd8723D8"; +const ATF = "0x518b63Da813D46556FEa041A88b52e3CAa8C16a8"; +const AGT = "0x0BF43350076F95e0d16120b4D6bdfA1C9D50BDBD"; + +module.exports = treasuryExports({ + ethereum: { + tokens: [nullAddress, ATF, AGT], + owners: [daoTreasury], + ownTokens: [ATF, AGT], + }, +}); diff --git a/projects/treasury/ape-coin.js b/projects/treasury/ape-coin.js new file mode 100644 index 0000000000..3873b31d1d --- /dev/null +++ b/projects/treasury/ape-coin.js @@ -0,0 +1,22 @@ + +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x03ca52e482912308c287d09ec941b996c18668f5"; +const treasury2 = "0x1633b453c3ca5a244c66f4418ff5120282370053" +const APE = "0x4d224452801aced8b2f0aebe155379bb5d594381" + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.STETH, + + ], + owners: [treasury, treasury2], + ownTokens: [APE], + // resolveLP: true, + // resolveUniV3: true, + }, +}) \ No newline at end of file diff --git a/projects/treasury/apex-protocol.js b/projects/treasury/apex-protocol.js new file mode 100644 index 0000000000..9f1d5f8525 --- /dev/null +++ b/projects/treasury/apex-protocol.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xae792a7bf5f85a68ffe92bfbfa7a04c72d7cb095"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/api3.js b/projects/treasury/api3.js new file mode 100644 index 0000000000..1e9d7a7615 --- /dev/null +++ b/projects/treasury/api3.js @@ -0,0 +1,24 @@ + +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x556ecbb0311d350491ba0ec7e019c354d7723ce0"; +const treasury2 = "0xd9f80bdb37e6bad114d747e60ce6d2aaf26704ae" +const treasury3 = "0xe7af7c5982e073ac6525a34821fe1b3e8e432099" +const API = "0x0b38210ea11411557c13457d4da7dc6ea731b88a" + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.USDC, + "0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d" + ], + owners: [treasury, treasury2, treasury3], + ownTokens: [API], + // resolveLP: true, + // resolveUniV3: true, + }, +}) \ No newline at end of file diff --git a/projects/treasury/apollox.js b/projects/treasury/apollox.js index 2e09237750..24734afccf 100644 --- a/projects/treasury/apollox.js +++ b/projects/treasury/apollox.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); @@ -15,7 +16,7 @@ module.exports = treasuryExports({ owners: [treasury], ownTokens:['0x78f5d389f5cdccfc41594abab4b0ed02f31398b3'], tokens: [ - '0x55d398326f99059ff775485246999027b3197955', + ADDRESSES.bsc.USDT, ] } }); \ No newline at end of file diff --git a/projects/treasury/aragon.js b/projects/treasury/aragon.js index 09b79f7877..92b76bd8aa 100644 --- a/projects/treasury/aragon.js +++ b/projects/treasury/aragon.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const aragonTreasury = "0xfb633F47A84a1450EE0413f2C32dC1772CcAea3e"; @@ -9,12 +10,12 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984',//UNI + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.UNI,//UNI '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ENS - '0x4Fabb145d64652a948d72533023f6E7A623C7C53',//BUSD + ADDRESSES.ethereum.BUSD,//BUSD '0xc944E90C64B2c07662A292be6244BDf05Cda44a7',//GRT '0x5dbcF33D8c2E976c6b560249878e6F1491Bca25c',//yyDAI+yUSDC+yUSDT+yTUSD '0xDe30da39c46104798bB5aA3fe8B9e0e1F348163F',//GTC @@ -23,8 +24,10 @@ module.exports = treasuryExports({ '0x24cCeDEBF841544C9e6a62Af4E8c2fA6e5a46FdE',//BlueSparrow '0x232FB065D9d24c34708eeDbF03724f2e95ABE768',//SHEESHA '0xaC9Bb427953aC7FDDC562ADcA86CF42D988047Fd',//STT + "0x0f5d2fb29fb7d3cfee444a200298f468908cc942",//MANA + ADDRESSES.ethereum.USDT,//USDT ], - owners: [aragonTreasury], + owners: [aragonTreasury, "0x7ecd1eac2a07974bcbabafee44b5cc44ceee9540", "0xcafe1a77e84698c83ca8931f54a755176ef75f2c"], ownTokens: [ANT, ANT_ETH_LP], }, }) \ No newline at end of file diff --git a/projects/treasury/archimedes.js b/projects/treasury/archimedes.js index 69fa6deb14..058bbb8527 100644 --- a/projects/treasury/archimedes.js +++ b/projects/treasury/archimedes.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x29520fd76494Fd155c04Fa7c5532D2B2695D68C6"; @@ -9,8 +10,8 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//usdc - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//usdt + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.USDT,//usdt '0x2A8e1E676Ec238d8A992307B495b45B3fEAa5e86',//ousd ], owners: [treasury], diff --git a/projects/treasury/atlas-usv.js b/projects/treasury/atlas-usv.js index caf71d6c55..f5feb2c25f 100644 --- a/projects/treasury/atlas-usv.js +++ b/projects/treasury/atlas-usv.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasuryContractsETH = ["0x8739f0EeF3163C3db7b994d0e301BC375d757aF6"]; @@ -19,7 +20,7 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0x6B175474E89094C44Da98b954EedeAC495271d0F', + ADDRESSES.ethereum.DAI, ], owners: treasuryContractsETH, ownTokens: [USV], @@ -28,7 +29,7 @@ module.exports = treasuryExports({ tokens: [ nullAddress, '0xa3Fa99A148fA48D14Ed51d610c367C61876997F1', //mimatic - '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', //DAI + ADDRESSES.polygon.DAI, //DAI '0x104592a158490a9228070E0A8e5343B499e125D0', // frax ], owners: treasuryContractsMATIC, @@ -36,7 +37,7 @@ module.exports = treasuryExports({ }, avax: { tokens: [ - '0xd586e7f844cea2f87f50152665bcbc2c279d8d70', // DAI + ADDRESSES.avax.DAI, // DAI ], owners: treasuryContractsAvax, ownTokens: [USVAVAX], @@ -44,7 +45,7 @@ module.exports = treasuryExports({ bsc: { tokens: [ '0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', //DAI - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', //busd + ADDRESSES.bsc.BUSD, //busd ], owners: treasuryContractsBSC, ownTokens: [USVBSC], diff --git a/projects/treasury/augury.js b/projects/treasury/augury.js index c3d4b9079e..74fd0ff434 100644 --- a/projects/treasury/augury.js +++ b/projects/treasury/augury.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const DeveloperTeamWallet = "0xE2E26BAc2ff37A7aE219EcEF74C5A1Bf95d5f854"; const amWMATIC = "0x8df3aad3a84da6b69a4da8aec3ea40d9091b2ac4"; const OMEN = "0x76e63a3E7Ba1e2E61D3DA86a87479f983dE89a7E"; @@ -8,7 +9,7 @@ const { nullAddress, treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ polygon: { - tokens: [ nullAddress, amWMATIC, QUICK, '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', '0x8a953cfe442c5e8855cc6c61b1293fa648bae472', '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', ], + tokens: [ nullAddress, amWMATIC, QUICK, ADDRESSES.polygon.USDC, '0x8a953cfe442c5e8855cc6c61b1293fa648bae472', ADDRESSES.polygon.USDT, ], owners: [DeveloperTeamWallet], ownTokens: [ OMEN], }, diff --git a/projects/treasury/aura.js b/projects/treasury/aura.js index 63b5af1334..906185f16f 100644 --- a/projects/treasury/aura.js +++ b/projects/treasury/aura.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xfc78f8e1Af80A3bF5A1783BB59eD2d1b10f78cA9"; @@ -12,10 +13,10 @@ module.exports = treasuryExports({ ], tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, "0xba100000625a3754423978a60c9317c58a424e3D", // BAL - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.SAFE, "0x0d02755a5700414B26FF040e1dE35D337DF56218", // BEND "0x616e8BfA43F920657B3497DBf40D6b1A02D4608d", // auraBAL "0x3dd0843A028C86e0b760b1A76929d1C5Ef93a2dd", // B-auraBAL-STABLE diff --git a/projects/treasury/axelar.js b/projects/treasury/axelar.js new file mode 100644 index 0000000000..d9a19ed5d2 --- /dev/null +++ b/projects/treasury/axelar.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x8d9249e6049bb17c15007bc58a5bec12a5af4346"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/badger-dao.js b/projects/treasury/badger-dao.js index 995802fadc..c1a00ee5dd 100644 --- a/projects/treasury/badger-dao.js +++ b/projects/treasury/badger-dao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury_vault = "0xD0A7A8B98957b9CD3cFB9c0425AbE44551158e9e"; @@ -8,8 +9,10 @@ const treasury_tech = "0x86cbD0ce0c087b482782c181dA8d191De18C8275"; const treasury_pay = "0x30a9c1D258F6c2D23005e6450E72bDD42C541105"; const treasury_drip1 = "0xA3Dc099D14722D0e25B3A904427377B4B2ab9fA4"; const treasury_drip2 = "0xC0D8fD5c722AF68437E7dFc095a980500dC0961D"; +const treasury_bfraxbp = "0xe0705A91984b076C250d410A41f615380aF1C2ed"; const BADGER = "0x3472A5A71965499acd81997a54BBA8D852C6E53d"; const DIGG = "0x798D1bE841a82a273720CE31c822C61a67a601C3"; +const treasuryarb = "0xb364bab258ad35dd83c7dd4e8ac78676b7aa1e9f" const mapping = { '0x4efc8ded860bc472fa8d938dc3fd4946bc1a0a18': '0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36', @@ -29,22 +32,29 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",//WBTC - "0x6B175474E89094C44Da98b954EedeAC495271d0F",//DAI - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",//USDC - "0xdAC17F958D2ee523a2206206994597C13D831ec7",//USDT - "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0",//LUSD + ADDRESSES.ethereum.WBTC,//WBTC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.USDT,//USDT + ADDRESSES.ethereum.LUSD,//LUSD "0x9ff58f4fFB29fA2266Ab25e75e2A8b3503311656",//aWBTC - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",//WETH - "0xae78736Cd615f374D3085123A210448E74Fc6393",//rETH - "0x09b2e090531228d1b8e3d948c73b990cb6e60720", // BADGERFRAX-f + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.RETH,//rETH + "0x25f0b7c3A7A43b409634a5759526560cC3313d75", // cvxBADGERFRAX-f "0xaad4ee162dbc9c25cca26ba4340b36e3ef7c1a80", // aura50rETH-50BADGER-vault "0x4efc8ded860bc472fa8d938dc3fd4946bc1a0a18", // aura20WBTC-80BADGER-vault "0xd7c9c6922db15f47ef3131f2830d8e87f7637210", // aura40WBTC-40DIGG-20graviAURA-vault ], - owners: [treasury_vault, treasury_ops, treasury_voter, treasury_dev, treasury_tech, treasury_pay, treasury_drip1, treasury_drip2], + owners: [treasury_vault, treasury_ops, treasury_voter, treasury_dev, treasury_tech, treasury_pay, treasury_drip1, treasury_drip2, treasury_bfraxbp], ownTokens: [BADGER, DIGG], resolveUniV3: true, transformAddress, }, + arbitrum: { + tokens: [ + nullAddress, + "0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978" + ], + owners: [treasuryarb] + } }) diff --git a/projects/treasury/balancer.js b/projects/treasury/balancer.js index 96a4c60ab5..c574c04df0 100644 --- a/projects/treasury/balancer.js +++ b/projects/treasury/balancer.js @@ -1,9 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const eth = "0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f"; -const polygon = "0xd2bD536ADB0198f74D5f4f2Bd4Fe68Bae1e1Ba80"; -const arbitrum = "0x6207ed574152496c9B072C24FD87cE9cd9E17320"; -const optimism = "0x043f9687842771b3dF8852c1E9801DCAeED3f6bc"; +const eth2 = "0xb129f73f1afd3a49c701241f374db17ae63b20eb" const bal = "0xba100000625a3754423978a60c9317c58a424e3D"; const abal = "0x272F97b7a56a387aE942350bBC7Df5700f8a4576"; @@ -12,25 +11,25 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32", // LDO - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + ADDRESSES.ethereum.LIDO, + ADDRESSES.ethereum.USDC, "0xDe30da39c46104798bB5aA3fe8B9e0e1F348163F", // GTC "0xCFEAead4947f0705A14ec42aC3D44129E1Ef3eD5", // NOTE - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH + ADDRESSES.ethereum.WETH, "0x2d94AA3e47d9D5024503Ca8491fcE9A2fB4DA198", // BANK - "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI + ADDRESSES.ethereum.DAI, "0x226f7b842E0F0120b7E194D05432b3fd14773a9D", // UNN - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", // stETH - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.SAFE, ], - owners: [eth], + owners: [eth, eth2], ownTokens: [bal, abal], }, arbitrum: { owners: ['0xaf23dc5983230e9eeaf93280e312e57539d098d0'], tokens: [ - "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // WETH - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.USDC, ], ownTokens: ['0xbc2597d3f1f9565100582cde02e3712d03b8b0f6'], } diff --git a/projects/treasury/bancor.js b/projects/treasury/bancor.js new file mode 100644 index 0000000000..053db29b9a --- /dev/null +++ b/projects/treasury/bancor.js @@ -0,0 +1,51 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const treasury = "0x649765821D9f64198c905eC0B2B037a4a52Bc373"; + +const BNT = "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C" +const vBNT = "0x48Fb253446873234F2fEBbF9BdeAA72d9d387f94" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.LINK, + ADDRESSES.ethereum.DAI, + "0x967da4048cD07aB37855c090aAF366e4ce1b9F48", + ADDRESSES.ethereum.SNX, + "0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c", + "0x4691937a7508860F876c9c0a2a617E7d9E945D4B", + "0x8f8221aFbB33998d8584A2B05749bA73c37a938a", + ADDRESSES.ethereum.YFI, + "0x408e41876cCCDC0F92210600ef50372656052a38", + "0x1559FA1b8F28238FD5D76D9f434ad86FD20D1559", + "0xa1faa113cbE53436Df28FF0aEe54275c13B40975", + ADDRESSES.ethereum.BAT, + "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", + ADDRESSES.ethereum.MATIC, + "0x0f71B8De197A1C84d31de0F1fA7926c365F052B3", + "0xBC19712FEB3a26080eBf6f2F7849b417FdD792CA", + "0xc00e94Cb662C3520282E6f5717214004A7f26888", + "0x0d438F3b5175Bebc262bF23753C1E53d03432bDE", + "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", + "0x6710c63432A2De02954fc0f851db07146a6c0312", + ADDRESSES.ethereum.AAVE, + ADDRESSES.ethereum.WBTC, + '0x903bef1736cddf2a537176cf3c64579c3867a881', + '0x111111517e4929d3dcbdfa7cce55d30d4b6bc4d6', //ichi + '0x6c6EE5e31d828De241282B9606C8e98Ea48526E2', //hot + '0x275f5Ad03be0Fa221B4C6649B8AeE09a42D9412A', //mona + '0x4a220E6096B25EADb88358cb44068A3248254675', //qnt + '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72', //ENS + '0xb9EF770B6A5e12E45983C5D80545258aA38F3B78', //zcn + '0xd26114cd6EE289AccF82350c8d8487fedB8A0C07', //omg + '0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F', //trac + ADDRESSES.ethereum.WSTETH, + '0x4C2e59D098DF7b6cBaE0848d66DE2f8A4889b9C3', //fodl + ADDRESSES.ethereum.MKR, + ], + owners: [treasury], + ownTokens: [BNT, vBNT], + }, +}) diff --git a/projects/treasury/banklessdao.js b/projects/treasury/banklessdao.js index 83b15cdfce..fd512861b0 100644 --- a/projects/treasury/banklessdao.js +++ b/projects/treasury/banklessdao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const banklessDaoTreasury = "0xf26d1Bb347a59F6C283C53156519cC1B1ABacA51"; @@ -9,23 +10,23 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC '0x81f8f0bb1cB2A06649E51913A151F0E7Ef6FA321',//VITA - '0xae78736Cd615f374D3085123A210448E74Fc6393',//rETH - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.RETH,//rETH + ADDRESSES.ethereum.DAI,//DAI '0x3541A5C1b04AdABA0B83F161747815cd7B1516bC',//KNIGHT '0xfb5453340C03db5aDe474b27E68B6a9c6b2823Eb',//ROBOT - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH + ADDRESSES.ethereum.WETH,//WETH '0xFca59Cd816aB1eaD66534D82bc21E7515cE441CF',//RARI '0x956F47F50A910163D8BF957Cf5846D573E7f87CA',//FEI '0x0954906da0Bf32d5479e25f46056d22f08464cab',//INDEX '0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828',//UMA '0xbC396689893D065F41bc2C6EcbeE5e0085233447',//PERP '0xD56daC73A4d6766464b38ec6D91eB45Ce7457c44',//PAN - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.USDT,//USDT '0x69af81e73A73B40adF4f3d4223Cd9b1ECE623074',//MASK '0x3Ec8798B81485A254928B70CDA1cf0A2BB0B74D7',//GRO - '0x6B3595068778DD592e39A122f4f5a5cF09C90fE2',//SUSHI + ADDRESSES.ethereum.SUSHI,//SUSHI '0xc944E90C64B2c07662A292be6244BDf05Cda44a7',//GRT ], owners: [banklessDaoTreasury], diff --git a/projects/treasury/bankofcronos.js b/projects/treasury/bankofcronos.js index 6d948f205a..7a3808f5f3 100644 --- a/projects/treasury/bankofcronos.js +++ b/projects/treasury/bankofcronos.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); -const teamTreasury = "0x1087234fe877721F30016ebeD5BEd061397C8851"; +const teamTreasury = "0xBacF28BF21B374459C738289559EF89978D08102"; const BOC = "0xe5786DDFc4D6DcA0973D1c5b02987cBbac66ed87"; const pBOC = "0xF93fB4CDB0e40dbF33d2cDbf11D9516f6aDd7e8e"; @@ -9,13 +10,13 @@ module.exports = treasuryExports({ cronos: { tokens: [ nullAddress, - '0xc21223249CA28397B4B6541dfFaEcC539BfF0c59',//USDC + ADDRESSES.cronos.USDC,//USDC '0x26043Aaa4D982BeEd7750e2D424547F5D76951d4',//CUSD '0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23',//WCRO '0xe44Fd7fCb2b1581822D0c862B68222998a0c299a',//WETH - '0x062E66477Faf219F25D27dCED647BF57C3107d52',//WBTC + ADDRESSES.cronos.WBTC,//WBTC ], owners: [teamTreasury], - ownTokens: [BOC, pBOC], + // ownTokens: [BOC, pBOC], }, }) diff --git a/projects/treasury/battlefly.js b/projects/treasury/battlefly.js index 85476bc4df..5f4c8cc99d 100644 --- a/projects/treasury/battlefly.js +++ b/projects/treasury/battlefly.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.WETH, // WETH + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI ], owners: ['0xF5411006eEfD66c213d2fd2033a1d340458B7226'], ownTokens: ['0x872bAD41CFc8BA731f811fEa8B2d0b9fd6369585', '0x539bde0d7dbd336b79148aa742883198bbf60342'], diff --git a/projects/treasury/beanstalk.js b/projects/treasury/beanstalk.js index 5982c10b42..6aeae1108b 100644 --- a/projects/treasury/beanstalk.js +++ b/projects/treasury/beanstalk.js @@ -1,12 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); + const bean = "0xBEA0000029AD1c77D3d5D23Ba2D8893dB9d1Efab"; const sprout = "0xb7ab3f0667eFF5e2299d39C23Aa0C956e8982235"; const farms = "0x21DE18B6A8f78eDe6D16C50A167f6B222DC08DF7"; const tokens = [ nullAddress, - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + ADDRESSES.ethereum.SAFE, + ADDRESSES.ethereum.USDC, ]; + module.exports = treasuryExports({ ethereum: { tokens, diff --git a/projects/treasury/beethovenx.js b/projects/treasury/beethovenx.js index 1a34d371b9..9d5a528483 100644 --- a/projects/treasury/beethovenx.js +++ b/projects/treasury/beethovenx.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const ftm = "0xa1e849b1d6c2fd31c63eef7822e9e0632411ada7"; @@ -6,9 +7,9 @@ const eth = "0xea06e1b4259730724885a39ce3ca670efb020e26"; const ftmTokens = [ nullAddress, - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", // USDC + ADDRESSES.fantom.USDC, // USDC "0x841FAD6EAe12c286d1Fd18d1d525DFfA75C7EFFE", // BOO - "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", // WFTM + ADDRESSES.fantom.WFTM, // WFTM "0xc5713B6a0F26bf0fdC1c52B90cd184D950be515C", // LINSPIRIT "0xde5ed76e7c05ec5e4572cfc88d1acea165109e44", // DEUS "0xc3f069d7439baf6d4d6e9478d9cc77778e62d147", // FLIBERO @@ -26,7 +27,7 @@ const ftmOwnTokens = [ const opTokens = [ nullAddress, - "0x4200000000000000000000000000000000000042", // OP + ADDRESSES.optimism.OP, // OP "0xFdb794692724153d1488CcdBE0C56c252596735F", // LDO "0xFE8B128bA8C78aabC59d4c64cEE7fF28e9379921", // BAL "0x38f79beFfC211c6c439b0A3d10A0A673EE63AFb4", // BPT-rETH-ETH-gauge diff --git a/projects/treasury/benddao.js b/projects/treasury/benddao.js index 868c89bb06..9c9dfe75e0 100644 --- a/projects/treasury/benddao.js +++ b/projects/treasury/benddao.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC '0x4d224452801aced8b2f0aebe155379bb5d594381',//APE ], owners: ['0x472FcC65Fab565f75B1e0E861864A86FE5bcEd7B'], diff --git a/projects/treasury/bitdao.js b/projects/treasury/bitdao.js index 4ea3849849..6577112ff5 100644 --- a/projects/treasury/bitdao.js +++ b/projects/treasury/bitdao.js @@ -1,22 +1,28 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const bitdaoTreasury1 = "0x78605Df79524164911C144801f41e9811B7DB73D"; const BIT = "0x1A4b46696b2bB4794Eb3D4c26f1c55F9170fa4C5"; +const LP = "0xC36442b4a4522E871399CD717aBDD847Ab11FE88" + module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT '0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9',//FTT '0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272',//xSUSHI + "0x52A8845DF664D76C69d2EEa607CD793565aF42B8", ], owners: [bitdaoTreasury1], - ownTokens: [BIT], + ownTokens: [BIT, LP], + resolveLP: true, + resolveUniV3: true, }, }) \ No newline at end of file diff --git a/projects/treasury/cap.js b/projects/treasury/cap.js index 5fca04230a..b73b640e8a 100644 --- a/projects/treasury/cap.js +++ b/projects/treasury/cap.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unwrapLPs') const contracts = { @@ -5,7 +6,7 @@ const contracts = { "treasuryV2": "0x1058AFe66BB5b79C295CCCE51016586949Bc4e8d", }; const cap = "0x031d35296154279dc1984dcd93e392b1f946737b"; -const usdc = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"; +const usdc = ADDRESSES.arbitrum.USDC; module.exports = { arbitrum: { diff --git a/projects/treasury/cerberusdao.js b/projects/treasury/cerberusdao.js new file mode 100644 index 0000000000..a869183ff5 --- /dev/null +++ b/projects/treasury/cerberusdao.js @@ -0,0 +1,3 @@ +module.exports = require("../cerberusdao/index"); + +delete module.exports.ethereum.staking \ No newline at end of file diff --git a/projects/treasury/chaintools.js b/projects/treasury/chaintools.js new file mode 100644 index 0000000000..808a225cc0 --- /dev/null +++ b/projects/treasury/chaintools.js @@ -0,0 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const MULTISIG_ADDRESS = "0xb0Df68E0bf4F54D06A4a448735D2a3d7D97A2222"; +const CTLS_ADDRESS = "0xE155F64B9aD8c81318c313196a60c72e72fD2cD1"; +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + ethereum: { + tvl: sumTokensExport({ owners: [MULTISIG_ADDRESS,], tokens: [ADDRESSES.ethereum.WETH, ADDRESSES.null, ADDRESSES.ethereum.USDC,], }), + ownTokens: sumTokensExport({ owners: [MULTISIG_ADDRESS,], tokens: [CTLS_ADDRESS, ], }), + }, +}; diff --git a/projects/treasury/compound.js b/projects/treasury/compound.js index 8b092348fa..c82595909e 100644 --- a/projects/treasury/compound.js +++ b/projects/treasury/compound.js @@ -1,6 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B"; +const treasury2 = "0x6d903f6003cca6255d85cca4d3b5e5146dc33925" const vestingAddress = "0x2775b1c75658Be0F640272CCb8c72ac986009e38"; const COMP = "0xc00e94Cb662C3520282E6f5717214004A7f26888"; @@ -12,8 +14,13 @@ module.exports = treasuryExports({ '0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9',//cUSDT '0xE41d2489571d322189246DaFA5ebDe1F4699F498',//zrx '0x39AA39c021dfbaE8faC545936693aC917d5E7563',//cUSDC + '0xc00e94Cb662C3520282E6f5717214004A7f26888', + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.UNI, + ADDRESSES.ethereum.DAI ], - owners: [treasury, vestingAddress], + owners: [treasury, vestingAddress, treasury2], ownTokens: [COMP], }, }) \ No newline at end of file diff --git a/projects/treasury/convex.js b/projects/treasury/convex.js index 62316340b3..f7aafb92a0 100644 --- a/projects/treasury/convex.js +++ b/projects/treasury/convex.js @@ -1,25 +1,32 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); + const convexTreasuryVault = "0x1389388d01708118b497f59521f6943Be2541bb7"; -const cvx = "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B"; -const cvxCrv = "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7"; +const treasuryARB = "0x6111abf720051309012fcdbc2910054e41dcff8c" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xD533a949740bb3306d119CC777fa900bA034cd52", // CRV - "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", // SNX + ADDRESSES.ethereum.CRV, + ADDRESSES.ethereum.SNX, "0x31429d1856aD1377A8A0079410B297e1a9e214c2", // ANGLE - "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32", // LDO + ADDRESSES.ethereum.LIDO, "0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF", // ALCX "0x92E187a03B6CD19CB6AF293ba17F2745Fd2357D5", // DUCK - "0x4E15361FD6b4BB609Fa63C81A2be19d873717870", // FTM + ADDRESSES.ethereum.FTM, "0x3472A5A71965499acd81997a54BBA8D852C6E53d", // BADGER "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2", // MTA "0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26", // OGN "0xCdF7028ceAB81fA0C6971208e83fa7872994beE5", // T ], owners: [convexTreasuryVault], - ownTokens: [cvx, cvxCrv], + ownTokens: [ADDRESSES.ethereum.CVX, ADDRESSES.ethereum.cvxCRV], + }, + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasuryARB], }, }); diff --git a/projects/treasury/crabada.js b/projects/treasury/crabada.js index 114d54c223..bf57db68b1 100644 --- a/projects/treasury/crabada.js +++ b/projects/treasury/crabada.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const CRA = "0xa32608e873f9ddef944b24798db69d80bbb4d1ed"; @@ -19,7 +20,7 @@ const lpTokens = [ "0x565d20BD591b00EAD0C927e4b6D7DD8A33b0B319", // WAVAX-TUS JLP "0x21889033414f652f0fD0e0f60a3fc0221d870eE4", // CRA-TUS JLP "0x134905461773eF228b66CEBd5E1FF06D7CC79B12", // TUS-CRAM JLP - "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664" // USDC + ADDRESSES.avax.USDC_e // USDC ]; module.exports = { diff --git a/projects/treasury/cryptex.js b/projects/treasury/cryptex.js new file mode 100644 index 0000000000..5d7abdcf61 --- /dev/null +++ b/projects/treasury/cryptex.js @@ -0,0 +1,25 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasuryARB = "0x9474b771fb46e538cfed114ca816a3e25bb346cf"; +const treasuryETH = "0xa54074b2cc0e96a43048d4a68472F7F046aC0DA8" +const treasury2 = "0xa70b638B70154EdfCbb8DbbBd04900F328F32c35" +const ctx = "0x321C2fE4446C7c963dc41Dd58879AF648838f98D" +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasuryARB], + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.LINK + ], + owners: [treasuryETH, treasury2], + ownTokens: [ctx], + + }, +}) \ No newline at end of file diff --git a/projects/treasury/cryptodickbutts.js b/projects/treasury/cryptodickbutts.js new file mode 100644 index 0000000000..f45297dccc --- /dev/null +++ b/projects/treasury/cryptodickbutts.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const treasury = "0xf14d484b29a8ac040feb489afadb4b972422b4e9"; +const dick = "0x22BDc8Ad19aE84d9327E81FAD4F5973b91fbaA60" + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDT,//TETHER + ADDRESSES.ethereum.USDC,//USDC + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x6d3D490964205c8bC8DeD39e48e88E8Fde45b41f", + "0x0000000000A39bb272e79075ade125fd351887Ac", + "0x6B175474E89094C44Da98b954EedeAC495271d0F" + ], + owners: [treasury], + ownTokens: [dick], + + }, +}) \ No newline at end of file diff --git a/projects/treasury/cubo.js b/projects/treasury/cubo.js index 684b721e9b..86451c3f43 100644 --- a/projects/treasury/cubo.js +++ b/projects/treasury/cubo.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasuryContract = "0xb495ffc5acd7e2fd909c23c30d182e6719fbe9ec"; const CUBO_TOKEN = "0x381d168DE3991c7413d46e3459b48A5221E3dfE4"; -const DAI = '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063' +const DAI = ADDRESSES.polygon.DAI const DRAGON_QUICK = '0xf28164a485b0b2c90639e47b0f377b4a438a16b1' const MOO_CRV_TriCrypto = '0x5A0801BAd20B6c62d86C566ca90688A6b9ea1d3f' const MOO_AM3CRV = '0xAA7C2879DaF8034722A0977f13c343aF0883E92e' diff --git a/projects/treasury/cvi.js b/projects/treasury/cvi.js new file mode 100644 index 0000000000..b783f75290 --- /dev/null +++ b/projects/treasury/cvi.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x7f4b135782c4a3b1c78c93f23f2016cb5cd96cc8"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/defender.js b/projects/treasury/defender.js index dd5f66b4b8..ac67ec12a6 100644 --- a/projects/treasury/defender.js +++ b/projects/treasury/defender.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const treasuryContractsBSC = [ @@ -6,6 +7,6 @@ const treasuryContractsBSC = [ module.exports = { bsc: { - tvl: sumTokensExport({ owners: treasuryContractsBSC, tokens: ['0x2170ed0880ac9a755fd29b2688956bd959f933f8']}), + tvl: sumTokensExport({ owners: treasuryContractsBSC, tokens: [ADDRESSES.bsc.ETH]}), }, }; diff --git a/projects/treasury/deri-protocol.js b/projects/treasury/deri-protocol.js new file mode 100644 index 0000000000..56243093f9 --- /dev/null +++ b/projects/treasury/deri-protocol.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x20a5c32ee19bcdb2635455859e64ba5a1d1acab2"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/dex.js b/projects/treasury/dex.js index ab4cc5c3c4..67ba126788 100644 --- a/projects/treasury/dex.js +++ b/projects/treasury/dex.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); @@ -9,8 +10,8 @@ const TOKENS = { DEXSHARE: '0xf4914e6d97a75f014acfcf4072f11be5cffc4ca6', DEXIRA: '0x147e07976e1ae78287c33aafaab87760d32e50a5', WDHEX_DEXSARE: '0x6647047433df4cfc9912d092fd155b9d972a4a85', - BNB: '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', - USDC: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d' + BNB: ADDRESSES.bsc.WBNB, + USDC: ADDRESSES.bsc.USDC }; diff --git a/projects/treasury/dfyn.js b/projects/treasury/dfyn.js new file mode 100644 index 0000000000..10d6d79db7 --- /dev/null +++ b/projects/treasury/dfyn.js @@ -0,0 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const Treasury = "0x5C35D4BcF0827a22370915E75c387EC470338c10"; + + + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + "0x8971dFb268B961a9270632f28B24F2f637c94244" + ], + owners: [Treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/dodo.js b/projects/treasury/dodo.js index 4f6ec0583a..1b00da8390 100644 --- a/projects/treasury/dodo.js +++ b/projects/treasury/dodo.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const dodoTreasury = "0xAB21016BD4127638b8c555e36636449b33dF1C38"; @@ -9,8 +10,8 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//TETHER - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDT,//TETHER + ADDRESSES.ethereum.USDC,//USDC ], owners: [dodoTreasury], ownTokens: [DODO], @@ -18,10 +19,10 @@ module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f', // WBTC - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT + ADDRESSES.arbitrum.WBTC, // WBTC + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.WETH, // WETH + ADDRESSES.arbitrum.USDT, // USDT ], owners: ['0x01d3e7271c278aa3aa56eeba6a109b2c200679fa'], ownTokens: ['0x69eb4fa4a2fbd498c257c57ea8b7655a2559a581'], diff --git a/projects/treasury/dopex.js b/projects/treasury/dopex.js index ec6149244e..2c5eb5e8c8 100644 --- a/projects/treasury/dopex.js +++ b/projects/treasury/dopex.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const Treasury = "0x2fa6F21eCfE274f594F470c376f5BDd061E08a37"; @@ -10,7 +11,7 @@ module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', + ADDRESSES.arbitrum.USDT, '0x7418F5A2621E13c05d1EFBd71ec922070794b90a' ], owners: [Treasury], diff --git a/projects/treasury/dxdao.js b/projects/treasury/dxdao.js index fd6877a850..6466ec469c 100644 --- a/projects/treasury/dxdao.js +++ b/projects/treasury/dxdao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x519b70055af55a007110b4ff99b0ea33071c720a"; @@ -8,18 +9,18 @@ module.exports = treasuryExports({ tokens: [ nullAddress, '0x6cAcDB97e3fC8136805a9E7c342d866ab77D0957',//swapr - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//dai + ADDRESSES.ethereum.DAI,//dai '0xFe2e637202056d30016725477c5da089Ab0A043A',//seth2 - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//usdc - '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0',//lusd - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//steth + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.LUSD,//lusd + ADDRESSES.ethereum.STETH,//steth '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ens - '0xae78736Cd615f374D3085123A210448E74Fc6393',//reth + ADDRESSES.ethereum.RETH,//reth '0x20BC832ca081b91433ff6c17f85701B6e92486c5',//reth2 '0xEd91879919B71bB6905f23af0A68d231EcF87b14',//dmg '0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d',//pnk '0xF5581dFeFD8Fb0e4aeC526bE659CFaB1f8c781dA',//hopr - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//weth + ADDRESSES.ethereum.WETH,//weth ], owners: [treasury], ownTokens: [DXD], diff --git a/projects/treasury/dydx.js b/projects/treasury/dydx.js index e56c6d2f02..cdfb684d8e 100644 --- a/projects/treasury/dydx.js +++ b/projects/treasury/dydx.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const dydxTreasury = "0xE710CEd57456D3A16152c32835B5FB4E72D9eA5b"; @@ -9,7 +10,7 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//TETHER + ADDRESSES.ethereum.USDT,//TETHER ], owners: [dydxTreasury], ownTokens: [DYDX], diff --git a/projects/treasury/ease-org.js b/projects/treasury/ease-org.js new file mode 100644 index 0000000000..159aad99c0 --- /dev/null +++ b/projects/treasury/ease-org.js @@ -0,0 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x1f28ed9d4792a567dad779235c2b766ab84d8e33"; +const EASE = "0xEa5eDef1287AfDF9Eb8A46f9773AbFc10820c61c"; + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + '0x7CA51456b20697A0E5Be65e5AEb65dfE90f21150', + '0x43632E3448cd47440fEE797258081414D91A58cE', + ], + owners: [treasury], + ownTokens: [EASE], + }, + }) \ No newline at end of file diff --git a/projects/treasury/empyreal.js b/projects/treasury/empyreal.js index 66c5bb506d..8ab7f54d84 100644 --- a/projects/treasury/empyreal.js +++ b/projects/treasury/empyreal.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xF548a58DB6d86d466acd00Fc0F6De3b39Ea129D7"; @@ -11,7 +12,7 @@ module.exports = treasuryExports({ tokens: [ nullAddress, "0x912CE59144191C1204E64559FE8253a0e49E6548", //ARB - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", //USDC + ADDRESSES.arbitrum.USDC, //USDC ], owners: [treasury], ownTokens: [EMP], diff --git a/projects/treasury/ens.js b/projects/treasury/ens.js index ad4ac0dd0d..2103440110 100644 --- a/projects/treasury/ens.js +++ b/projects/treasury/ens.js @@ -1,7 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7"; const vestingAddress = "0xd7a029db2585553978190db5e85ec724aa4df23f" +const treasury2 = "0x690f0581ececcf8389c223170778cd9d029606f2" const ENS= "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72"; @@ -11,9 +13,12 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC + ADDRESSES.ethereum.USDC, //USDC + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.LINK + ], - owners: [treasury, vestingAddress], + owners: [treasury, vestingAddress, treasury2], ownTokens: [ENS], }, }) \ No newline at end of file diff --git a/projects/treasury/equilibre.js b/projects/treasury/equilibre.js new file mode 100644 index 0000000000..0cf0ff2f1a --- /dev/null +++ b/projects/treasury/equilibre.js @@ -0,0 +1,78 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports, nullAddress } = require("../helper/treasury"); + +const VARA = '0xE1da44C0dA55B075aE8E2e4b6986AdC76Ac77d73' + +const equilibre = [ + '0x3a724E0082b0E833670cF762Ea6bd711bcBdFf37', // TREASURY ETH + '0x79dE631fFb7291Acdb50d2717AE32D44D5D00732', // TREASURY KAVA + '0x283270C265eB3D6e910920AdFf85e746C8063fed', + '0x4722FE058da1D359c1428C8F9B8F5b4531b58D17', + '0xAb7778933fb44514c864b2610b5d7E2A0bD91DDF', + '0x498Dd5A79ab7e19Be1dA81738239214F807E3462', + '0x78B3Ec25D285F7a9EcA8Da8eb6b20Be4d5D70E84', + '0xfcb3E3797A77946891c88A841d35d47c8F22CF53', + '0xd5524479C013d19e440872175400F396f35645fF', + '0x3ca2c227D47DF650ffcD39b64527e7c6e2E91DD1', + '0xc9C384a9E7e28f7Ef55903eb90947fe3ce71D475', + '0xA43Dd020E147F3A9C5cCe6860Cc4f51Ff71B56dc', + '0xb5B0c913acF48Bfb7bcB95e2F4fA241693dea513', + '0x4396c6e2a70c6b3c7b8a1f9e4043632e1c93d430', + '0xF9Ec0C05288d6726e1B3a7ccfcaEAc7b134d5F50' +] + + +const tokens = [ + nullAddress, + //"0xE1da44C0dA55B075aE8E2e4b6986AdC76Ac77d73", // VARA + ADDRESSES.telos.ETH, // USDC + ADDRESSES.kava.WKAVA, // WKAVA + ADDRESSES.shiden.ETH, // DAI + ADDRESSES.moonriver.USDC, // ETH + ADDRESSES.telos.USDC, // WBTC + "0xC19281F22A075E0F10351cd5D6Ea9f0AC63d4327", // BIFI + "0x6c2c113c8cA73dB67224EF4D8C8dFCeC61e52a9C", // LQDR + "0xb84Df10966a5D7e1ab46D9276F55d57bD336AFC7", // MAI + ADDRESSES.kava.USX, // USX + "0x739ca6D71365a08f584c8FC4e1029045Fa8ABC4B", // ACS + "0xd86C8d4279CCaFbec840c782BcC50D201f277419", // MARE + "0x165DBb08de0476271714952C3C1F068693bd60D7", // TAROT + "0x74ccbe53f77b08632ce0cb91d3a545bf6b8e0979", // fBOMB + "0x9d9682577CA889c882412056669bd936894663fd", // swKAVA + "0xABd380327Fe66724FFDa91A87c772FB8D00bE488", // BNB + ADDRESSES.kava.axlUSDC, // axlUSDC + "0xE1E9dB9b4d51A8878f030094F7965edC5eEC7802", // xSHRAP + "0x7ae97042a4a0eb4d1eb370c34bfec71042a056b7", // SLM + "0x06beE9E7238a331B68D83Df3B5B9B16d5DBa83ff", // axlATOM + "0x5E237e61469d1A5b85fA8fba63EB4D4498Ea8dEF", // YFX + "0xEffaE8eB4cA7db99e954adc060B736Db78928467", // GMD + "0x489e54EEc6C228A1457975Eb150A7EFb8350b5bE", // spVARA + "0x443ab8d6ab303ce28f9031be91c19c6b92e59c8a", // TORE Old Toreus + "0x8549724fcC84ee9ee6c7A676F1Ba2Cc2f43AAF5B", // TORE + "0x53a5dD07127739e5038cE81eff24ec503A6CC479", // acsVARA + "0xC09c73F7B32573d178138E76C0e286BA21085c20", // QI + "0x0Fb3E4E84FB78C93E466a2117Be7bc8BC063E430", // CHAM + "0x990e157fC8a492c28F5B50022F000183131b9026", // LION + "0x471F79616569343e8e84a66F342B7B433b958154", // TIGER + "0x38481Fdc1aF61E6E72E0Ff46F069315A59779C65", // BEAR + "0x13db70Ad2f2b7064EbD5B0CAA13Af445a77360f7", // KONK + "0xFa4384b298084A0ef13F378853DEDbB33A857B31", // cpVARA + ADDRESSES.moonriver.USDT, // USDT + "0xde5ed76e7c05ec5e4572cfc88d1acea165109e44", // DEUS + "0xD22a58f79e9481D1a88e00c343885A588b34b68B", // DEXI + "0xde1e704dae0b4051e80dabb26ab6ad6c12262da0", // DEI +]; + + +module.exports = treasuryExports({ + ethereum: { + tokens: [nullAddress], + owners: ['0x8B21Bdb9B1aa2094460851dA19185A989529fBe3'] + }, + kava: { + tokens, + owners: equilibre, + ownTokenOwners: equilibre, + ownTokens: [VARA] + }, +}); diff --git a/projects/treasury/eth-foundation.js b/projects/treasury/eth-foundation.js index f5b6c6e3b0..dfc066dd96 100644 --- a/projects/treasury/eth-foundation.js +++ b/projects/treasury/eth-foundation.js @@ -1,20 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae"; -const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; -const ETH = "0x0000000000000000000000000000000000000000"; +const WETH = ADDRESSES.ethereum.WETH; +const ETH = ADDRESSES.null; module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC + ADDRESSES.ethereum.USDC, //USDC "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07", //OMG - "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", //BNB - + ADDRESSES.ethereum.BNB, //BNB + WETH ], owners: [treasury], - ownTokens: [ETH, WETH], }, }) \ No newline at end of file diff --git a/projects/treasury/ether.js b/projects/treasury/ether.js new file mode 100644 index 0000000000..b4acc5affc --- /dev/null +++ b/projects/treasury/ether.js @@ -0,0 +1,26 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasuryOP = "0x8ba1f109551bD432803012645Ac136ddd64DBA72"; +const treasuryETH = "0x8ba1f109551bD432803012645Ac136ddd64DBA72" + +module.exports = treasuryExports({ + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC, // USDC + ADDRESSES.optimism.OP + ], + owners: [treasuryOP], + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.TUSD, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDT + ], + owners: [treasuryETH], + }, +}); \ No newline at end of file diff --git a/projects/treasury/ethglobal.js b/projects/treasury/ethglobal.js new file mode 100644 index 0000000000..1fb3aaa9b1 --- /dev/null +++ b/projects/treasury/ethglobal.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x336DEe4022d6CC2F95cfe9e0949B9E0EDDAC457D"; + +module.exports = treasuryExports({ + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC, // USDC + ADDRESSES.optimism.OP + ], + owners: [treasury], + ownTokens: [], + }, +}); diff --git a/projects/treasury/euler.js b/projects/treasury/euler.js index 6d544cf049..1f52231c83 100644 --- a/projects/treasury/euler.js +++ b/projects/treasury/euler.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xcAD001c30E96765aC90307669d578219D4fb1DCe"; @@ -6,8 +7,8 @@ const eul = "0xd9Fcd98c322942075A5C3860693e9f4f03AAE07b"; module.exports = treasuryExports({ ethereum: { tokens: [ - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.USDT, // USDT "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", // GRT ], owners: [treasury], diff --git a/projects/treasury/evmos-dao.js b/projects/treasury/evmos-dao.js new file mode 100644 index 0000000000..ecc78b0113 --- /dev/null +++ b/projects/treasury/evmos-dao.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const community_pool = "0x93354845030274cd4bf1686abd60ab28ec52e1a7"; +const treasury = "0xc3c5156911bf53f12913b68e0532096536b30600"; +const forge_liquidity = "0x4c3c271ca2e841c0051c0402021ddaef3ce666d0"; +const forge_owner = "0x2A72df162bD5B9Ba4cBB4F28bCE590c20db7aEC1"; + +const tokens = [ + nullAddress, + ADDRESSES.evmos.WEVMOS, + ADDRESSES.evmos.STEVMOS, + ADDRESSES.evmos.STRIDE, + ADDRESSES.evmos.AXL_USDC +] + + +module.exports = treasuryExports({ + evmos: { + tokens: tokens, + owners: [community_pool, treasury, forge_liquidity, forge_owner], + }, +}) \ No newline at end of file diff --git a/projects/treasury/exactly.js b/projects/treasury/exactly.js new file mode 100644 index 0000000000..05e34a0f5c --- /dev/null +++ b/projects/treasury/exactly.js @@ -0,0 +1,26 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +/** @type {Record} */ +const config = { + ethereum: { + auditor: "0x310A2694521f75C7B2b64b5937C16CE65C3EFE01", + }, + optimism: { + auditor: "0xaEb62e6F27BC103702E7BC879AE98bceA56f027E", + }, +}; + +Object.entries(config).forEach(([chain, { auditor }]) => { + module.exports[chain] = { + tvl: async (_, __, ___, { api }) => { + const markets = await api.call({ abi: abis.allMarkets, target: auditor, }); + const treasuries = await api.multiCall({ abi: abis.treasury, calls: markets, }) + return sumTokens2({ api, tokens: markets, owners: treasuries, }) + }, + }; +}); + +const abis = { + allMarkets: "function allMarkets() view returns (address[])", + treasury: "function treasury() view returns (address)", +}; diff --git a/projects/treasury/fantohm-dao.js b/projects/treasury/fantohm-dao.js index 5d7bf63baf..9aa52d7fdf 100644 --- a/projects/treasury/fantohm-dao.js +++ b/projects/treasury/fantohm-dao.js @@ -1,16 +1,22 @@ -const { nullAddress, treasuryExports } = require("../helper/treasury"); +const index = require('../fantOHM/index') +const { ohmTreasury } = require('../helper/treasury') +const { sumTokensExport } = require('../helper/unwrapLPs') -const treasury = "0xA3b52d5A6d2f8932a5cD921e09DA840092349D71"; +const fantomTreasuryContract = "0xA3b52d5A6d2f8932a5cD921e09DA840092349D71"; +const fantomGnosisContract = "0x34F93b12cA2e13C6E64f45cFA36EABADD0bA30fC"; +const ethTreasuryContract = "0x9042E869BedCD2BB3EEa241aC0032cadAE8DF006"; -module.exports = treasuryExports({ - fantom: { - tokens: [ - nullAddress, - "0x6Fc9383486c163fA48becdEC79d6058f984f62cA",//USDB - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75",//USDC - "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E",//DAI - "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83",//WFTM - ], - owners: [treasury,], - }, +const ethTradfi3mContract = "0xCD8A46dC7EE4488b441Ae1CD3b5BCa48d5389C12"; +const ethTradfi6mContract = "0xD9fDd86ecc03e34DAf9c645C40DF670406836816" +const ftmTradfi3mContract = "0xEFbe7fe9E8b407a3F0C0451E7669E70cDD0C4C77"; +const ftmTradfi6mContract = "0xB1c77436BC180009709Be00C9e852246476321A3"; +module.exports = ohmTreasury(index) + +module.exports.fantom.ownTokens = sumTokensExport({ + owners: [fantomTreasuryContract, fantomGnosisContract, ftmTradfi3mContract, ftmTradfi6mContract, ], + tokens: ['0x6fc9383486c163fa48becdec79d6058f984f62ca', '0xfa1FBb8Ef55A4855E5688C0eE13aC3f202486286'] +}) +module.exports.ethereum.ownTokens = sumTokensExport({ + owners: [ethTreasuryContract, ethTradfi3mContract, ethTradfi6mContract, ], + tokens: ['0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B',] }) \ No newline at end of file diff --git a/projects/treasury/fei-protocol.js b/projects/treasury/fei-protocol.js new file mode 100644 index 0000000000..abc4bb0b95 --- /dev/null +++ b/projects/treasury/fei-protocol.js @@ -0,0 +1,14 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x8d5ed43dca8c2f7dfb20cf7b53cc7e593635d7b9"; +const TRIBE = "0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + ownTokens: [TRIBE], + }, +}) \ No newline at end of file diff --git a/projects/treasury/femboy-dao.js b/projects/treasury/femboy-dao.js new file mode 100644 index 0000000000..274f7e0266 --- /dev/null +++ b/projects/treasury/femboy-dao.js @@ -0,0 +1,10 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ], + owners: ['0xf78A448E464a1fEB693D76c9211D2d03ae488206',], + }, +}) \ No newline at end of file diff --git a/projects/treasury/flair-dex.js b/projects/treasury/flair-dex.js index 075869547d..e4a699a819 100644 --- a/projects/treasury/flair-dex.js +++ b/projects/treasury/flair-dex.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const FLDXTreasury = "0xAD276dA5aAad4181B991fd93Bc7dCCFb46811003"; @@ -7,12 +8,12 @@ module.exports = treasuryExports({ avax: { tokens: [ nullAddress, - "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",//USDT - "0xc7198437980c041c805A1EDcbA50c1Ce5db95118",//USDT.e - "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",//AVAX - "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",//USDC - "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664",//USDC.e - "0x9C9e5fD8bbc25984B178FdCE6117Defa39d2db39",//BUSD + ADDRESSES.avax.USDt,//USDT + ADDRESSES.avax.USDT_e,//USDT.e + ADDRESSES.avax.WAVAX,//AVAX + ADDRESSES.avax.USDC,//USDC + ADDRESSES.avax.USDC_e,//USDC.e + ADDRESSES.polygon.BUSD,//BUSD "0x1C1CDF8928824dac36d84B3486D598B9799bA6c0",//aBASED "0x107D2b7C619202D994a4d044c762Dd6F8e0c5326",//FLDX ], diff --git a/projects/treasury/flokifi-locker.js b/projects/treasury/flokifi-locker.js new file mode 100644 index 0000000000..775541a1d2 --- /dev/null +++ b/projects/treasury/flokifi-locker.js @@ -0,0 +1,30 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasuryETH = "0x2b9d5c7f2EAD1A221d771Fb6bb5E35Df04D60AB0"; +const treasuryETH2 = "0xea9a5a3Ac7545E1Ddce79fC5803Df0f317A3D0f6" +const flokiETH = "0xcf0C122c6b73ff809C693DB761e7BaeBe62b6a2E" + +const treasuryBSC = "0x17e98a24f992BB7bcd62d6722d714A3C74814B94" +const flokiBSC = "0xfb5B838b6cfEEdC2873aB27866079AC55363D37E" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + "0xca7c2771D248dCBe09EABE0CE57A62e18dA178c0", + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + "0x1BD708E01E96d426652b0D50b8c896eaeefee36d" + ], + owners: [treasuryETH, treasuryETH2], + ownTokens: [flokiETH], + }, + bsc: { + tokens: [ + nullAddress, + ], + owners: [treasuryBSC], + ownTokens: [flokiBSC], + }, +}) \ No newline at end of file diff --git a/projects/treasury/floor-dao.js b/projects/treasury/floor-dao.js index bc82b6f58c..36ca4677be 100644 --- a/projects/treasury/floor-dao.js +++ b/projects/treasury/floor-dao.js @@ -1,19 +1,10 @@ -const { nullAddress,treasuryExports } = require("../helper/treasury"); - const floorTreasury1 = "0x91E453f442d25523F42063E1695390e325076ca2"; const floorTreasury2 = "0xa9d93a5cca9c98512c8c56547866b1db09090326"; const FLOOR = "0xf59257e961883636290411c11ec5ae622d19455e"; +const index = require('../floor-dao/index') +const { ohmTreasury } = require('../helper/treasury') +const { staking } = require('../helper/staking') - -module.exports = treasuryExports({ - ethereum: { - tokens: [ - nullAddress, - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - ], - owners: [floorTreasury1, floorTreasury2], - ownTokens: [FLOOR], - }, -}) +module.exports = ohmTreasury(index) +module.exports.ethereum.ownTokens = staking([floorTreasury1, floorTreasury2], FLOOR) diff --git a/projects/treasury/forth-dao.js b/projects/treasury/forth-dao.js new file mode 100644 index 0000000000..c24cbc101c --- /dev/null +++ b/projects/treasury/forth-dao.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x223592a191ecfc7fdc38a9256c3bd96e771539a9"; +const treasury2 = "0x77fba179c79de5b7653f68b5039af940ada60ce0" +const FORTH = "0x77FbA179C79De5B7653F68b5039Af940AdA60ce0"; +const AMPL ="0xD46bA6D942050d489DBd938a2C909A5d5039A161" +const LP = "0xc5be99A02C6857f9Eac67BbCE58DF5572498F40c" + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.WETH,//weth + '0xBcca60bB61934080951369a648Fb03DF4F96263C',//ausdc + '0xc944E90C64B2c07662A292be6244BDf05Cda44a7' + ], + owners: [treasury, treasury2], + ownTokens: [FORTH, AMPL, LP], + }, +}) \ No newline at end of file diff --git a/projects/treasury/fortress.js b/projects/treasury/fortress.js new file mode 100644 index 0000000000..30bcdc67e5 --- /dev/null +++ b/projects/treasury/fortress.js @@ -0,0 +1,3 @@ +module.exports = require("../fortress/index"); + +delete module.exports.avax.staking \ No newline at end of file diff --git a/projects/treasury/fortunedao.js b/projects/treasury/fortunedao.js new file mode 100644 index 0000000000..c895f4893f --- /dev/null +++ b/projects/treasury/fortunedao.js @@ -0,0 +1,3 @@ +module.exports = require("../fortunedao"); + +delete module.exports.cronos.staking \ No newline at end of file diff --git a/projects/treasury/frax.js b/projects/treasury/frax.js index bb6cd9e07c..744f04050e 100644 --- a/projects/treasury/frax.js +++ b/projects/treasury/frax.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json'); const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x9AA7Db8E488eE3ffCC9CdFD4f2EaECC8ABeDCB48"; const fpis = "0xc2544A32872A91F4A553b404C6950e89De901fdb"; const fxs = "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0"; -const frax = "0x853d955aCEf822Db058eb8505911ED77F175b99e"; +const treasuryarb = "0xe61d9ed1e5dc261d1e90a99304fadcef2c76fd10" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.SAFE, ], owners: [ treasury, @@ -19,6 +20,14 @@ module.exports = treasuryExports({ '0x9AA7Db8E488eE3ffCC9CdFD4f2EaECC8ABeDCB48', '0x874a873e4891fB760EdFDae0D26cA2c00922C404', ], - ownTokens: [fpis, fxs, frax], + ownTokens: [fpis, fxs, ADDRESSES.ethereum.FRAX], + }, + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [ + treasuryarb, + ], }, }); diff --git a/projects/treasury/friendswithbenefits.js b/projects/treasury/friendswithbenefits.js index 5649b07999..a21757781d 100644 --- a/projects/treasury/friendswithbenefits.js +++ b/projects/treasury/friendswithbenefits.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x33e626727B9Ecf64E09f600A1E0f5adDe266a0DF"; @@ -9,8 +10,8 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',//usdc - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//weth + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.WETH,//weth '0xBcca60bB61934080951369a648Fb03DF4F96263C',//ausdc '0x9355372396e3F6daF13359B7b607a3374cc638e0',//whale ], diff --git a/projects/treasury/futureswap.js b/projects/treasury/futureswap.js new file mode 100644 index 0000000000..dbcde2ecee --- /dev/null +++ b/projects/treasury/futureswap.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xdb08917e0ae9075c6577b6a11d0bb78dfbc381e4"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/gains.js b/projects/treasury/gains.js index 2783aaf851..f77c9ccd0a 100644 --- a/projects/treasury/gains.js +++ b/projects/treasury/gains.js @@ -1,11 +1,32 @@ const { nullAddress,treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json'); + +const GNS = "0x18c11FD286C5EC11c3b683Caa813B77f5163A122" +const multisig = "0xf8e93a7d954f7d31d5fa54bc0eb0e384412a158d" +const treasury = "0x80fd0accC8Da81b0852d2Dca17b5DDab68f22253" +const gnspolygon = "0xE5417Af564e4bFDA1c483642db72007871397896" module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDC_CIRCLE, + ADDRESSES.arbitrum.DAI, + "0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418", + ], + owners: [multisig, treasury], + ownTokens: [GNS], + resolveUniV3: true, + }, + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.USDT, ], - owners: ['0xf8e93a7d954f7d31d5fa54bc0eb0e384412a158d'], - ownTokens: [], + owners: [treasury], + ownTokens: [gnspolygon], + resolveUniV3: true, }, }) \ No newline at end of file diff --git a/projects/treasury/galaxygoogle.js b/projects/treasury/galaxygoogle.js new file mode 100644 index 0000000000..fcc803f7d1 --- /dev/null +++ b/projects/treasury/galaxygoogle.js @@ -0,0 +1,56 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); + +const gg = "0xF2F7CE610a091B94d41D69f4fF1129434a82E2f0" + +// https://app.galaxygoggle.money/#/bonds +const treasury = "0xD5F922e23693e552793fE0431F9a95ba67A60A23" +const dao = "0xDEEdd1646984F9372Cc9D3d7E13AC1606cC2B548" +const mim = "0x130966628846BFd36ff31a822705796e8cb8C18D" +const wavax = ADDRESSES.avax.WAVAX +const joe = ADDRESSES.avax.JOE + +async function tvl(timestamp, block, chainBlocks) { + const balances = {}; + + await sumTokensAndLPsSharedOwners( + balances, + [ + [mim, false], + [wavax, false], + [joe, false], + ["0xe9E8d6b6ce6D94Fc9d724711e80784Ec096949Fc", true], // mim-gg + ], + [treasury, dao], + chainBlocks.avax, + 'avax', + addr=>`avax:${addr}` + ); + + return balances; +} + +const bscTreasury = "0xF76C9753507B3Df0867EB02D86d07C6fFcEecaf1"; +const treasuryTokensBSC = [ + [ADDRESSES.bsc.BUSD, false], // BUSD + ["0x13Cf29b3F58f777dDeD38278F7d938401f6b260c", true] // GG-BUSD +] + +async function bscTvl(timestamp, block, chainBlocks) { + let balances = {}; + await sumTokensAndLPsSharedOwners(balances, treasuryTokensBSC, [bscTreasury], chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`); + balances[`avax:${gg}`] = balances["bsc:0xcaf23964ca8db16d816eb314a56789f58fe0e10e"] || 0; + delete balances["bsc:0xcaf23964ca8db16d816eb314a56789f58fe0e10e"]; + return balances; +} + +module.exports = { + avax:{ + tvl, + }, + bsc: { + tvl: bscTvl, + }, + methodology: + "Counts tokens on the treasury for tvl and staked GG for staking", +}; diff --git a/projects/treasury/gale.js b/projects/treasury/gale.js index 6433cb116c..f392989820 100644 --- a/projects/treasury/gale.js +++ b/projects/treasury/gale.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const config = { @@ -6,7 +7,7 @@ const config = { tokenContract: "0x627E86E9eC832b59018Bf91456599e752288Aa97", liquidityContract: "0x1fC3152de89b0c6c36F0d330b7Be369d6dDB219F", vaultContract: "0x973Abe726E3e37bbD8501B2D8909Fa59535Babdd", - busd: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', + busd: ADDRESSES.bsc.BUSD, } } diff --git a/projects/treasury/gearbox.js b/projects/treasury/gearbox.js index 75c3ff7967..45b2ffaee4 100644 --- a/projects/treasury/gearbox.js +++ b/projects/treasury/gearbox.js @@ -1,5 +1,5 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); -const { tokensBare: tokens } = require("../helper/tokenMapping"); // Treasury const treasury = "0x7b065Fcb0760dF0CEA8CFd144e08554F3CeA73D1"; @@ -8,15 +8,15 @@ const GEAR = "0xBa3335588D9403515223F109EdC4eB7269a9Ab5D"; module.exports = treasuryExports({ ethereum: { - tokens: [ - // Ethereum Assets - nullAddress, - tokens.weth, - tokens.wbtc, - tokens.usdc, - tokens.dai, - "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",//wsteth - ], + tokens: [ + // Ethereum Assets + nullAddress, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WSTETH,//wsteth + ], owners: [treasury], ownTokens: [GEAR] }, diff --git a/projects/treasury/geth.js b/projects/treasury/geth.js new file mode 100644 index 0000000000..f8df403693 --- /dev/null +++ b/projects/treasury/geth.js @@ -0,0 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports } = require("../helper/treasury"); + +const treasury = "0x21539334f45Ac41Bd10789942b744a18a4775d6d" // + +module.exports = treasuryExports({ + optimism: { + tokens: [ + ADDRESSES.optimism.OP, + ADDRESSES.optimism.WETH + ], + owners: [treasury], + }, + +}) \ No newline at end of file diff --git a/projects/treasury/gitcoin.js b/projects/treasury/gitcoin.js index 397e90c2f7..9b28450fb6 100644 --- a/projects/treasury/gitcoin.js +++ b/projects/treasury/gitcoin.js @@ -1,7 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x57a8865cfB1eCEf7253c27da6B4BC3dAEE5Be518"; const vestingAddress = "0x44Aa9c5a034C1499Ec27906E2D427b704b567ffe"; +const treasury2 = "0xde21f729137c5af1b01d73af1dc21effa2b8a0d6" const GTC = "0xDe30da39c46104798bB5aA3fe8B9e0e1F348163F"; @@ -9,11 +11,16 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC + ADDRESSES.ethereum.USDC, //USDC '0x31c8EAcBFFdD875c74b94b077895Bd78CF1E64A3',//rad '0xE54f9E6Ab80ebc28515aF8b8233c1aeE6506a15E',//pasta + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.UNI, + "0x31c8eacbffdd875c74b94b077895bd78cf1e64a3", + "0xc18360217d8f7ab5e7c516566761ea12ce7f9d72" + ], - owners: [treasury, vestingAddress], + owners: [treasury, vestingAddress, treasury2], ownTokens: [GTC], }, }) \ No newline at end of file diff --git a/projects/treasury/gnosis-dao.js b/projects/treasury/gnosis-dao.js index 46bef8d67b..ff00668646 100644 --- a/projects/treasury/gnosis-dao.js +++ b/projects/treasury/gnosis-dao.js @@ -1,38 +1,82 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); +const { mergeExports } = require('../helper/utils'); +const { unwrap4626Tokens, unwrapMakerPositions, unwrapConvexRewardPools, } = require('../helper/unwrapLPs') const treasury = "0x4971DD016127F390a3EF6b956Ff944d0E2e1e462"; const treasury1 = "0x0DA0C3e52C977Ed3cBc641fF02DD271c3ED55aFe"; const treasury2 = "0x849D52316331967b6fF1198e5E32A0eB168D039d"; -const treasury3= "0xBc79855178842FDBA0c353494895DEEf509E26bB"; -const vestingAddress = "0x849d52316331967b6ff1198e5e32a0eb168d039d"; -const GNO= "0x6810e776880C02933D47DB1b9fc05908e5386b96"; +const treasury3 = "0xBc79855178842FDBA0c353494895DEEf509E26bB"; +const GNO = ADDRESSES.ethereum.GNO; +async function tvl(_, _b, _cb, { api, }) { + const treasury = '0x849d52316331967b6ff1198e5e32a0eb168d039d' + await addAuraTvl() + await unwrapMakerPositions({ api, owner: treasury, blacklistedTokens: [ADDRESSES.ethereum.GNO]}) + await unwrapConvexRewardPools({ api, tokensAndOwners: ['0x0A760466E1B4621579a82a39CB56Dda2F4E70f03', '0xf34DFF761145FF0B05e917811d488B441F33a968',].map(i => [i, treasury])}) + + return api.getBalances() + + async function addAuraTvl() { + const auraDepositVaults = [ + '0x712cc5bed99aa06fc4d5fb50aea3750fa5161d0f', + '0x5209db28b3cf22a944401c83370af7a703fffb08', + '0xd3780729035c5b302f76ced0e7f74cf0fb7c739a', + '0xacada51c320947e7ed1a0d0f6b939b0ff465e4c2', + '0x001b78cec62dcfdc660e06a91eb1bc966541d758', + '0xe4683fe8f53da14ca5dac4251eadfb3aa614d528', + '0x6256518ae9a97c408a03aaf1a244989ce6b937f6', + '0x228054e9c056f024fc724f515a2a8764ae175ed6', + ] + return unwrap4626Tokens({ api, tokensAndOwners: auraDepositVaults.map(i => [i, treasury])}) + } +} + +async function ownTokens(_, _b, _cb, { api, }) { + return unwrapMakerPositions({ api, owner: '0x849d52316331967b6ff1198e5e32a0eb168d039d', skipDebt: true, whitelistedTokens: [ADDRESSES.ethereum.GNO]}) +} module.exports = treasuryExports({ ethereum: { - tokens: [ - nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC - '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643',//cDAI - '0x39AA39c021dfbaE8faC545936693aC917d5E7563',//cUSDC - '0xc944E90C64B2c07662A292be6244BDf05Cda44a7',//GRT - '0xD533a949740bb3306d119CC777fa900bA034cd52',//CRV - '0xba100000625a3754423978a60c9317c58a424e3D',//BAL - '0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B',//CVX - '0xDEf1CA1fb7FBcDC777520aa7f396b4E015F497aB',//COW - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//stETH - '0xE95A203B1a91a908F9B9CE46459d101078c2c3cb',//ankETH - '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ENS - '0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d',//PNK - '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',//wstETH - '0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF',//AURA - '0x543Ff227F64Aa17eA132Bf9886cAb5DB55DCAddf',//GEN - '0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6',//RDN - '0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb',//INST - '0x6243d8CEA23066d098a15582d81a598b4e8391F4',//FLX - '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32',//LDO - ], - owners: [treasury, treasury1, treasury2, treasury3, vestingAddress], + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI,//DAI + '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643',//cDAI + '0x39AA39c021dfbaE8faC545936693aC917d5E7563',//cUSDC + '0xc944E90C64B2c07662A292be6244BDf05Cda44a7',//GRT + ADDRESSES.ethereum.CRV, + '0xba100000625a3754423978a60c9317c58a424e3D',//BAL + ADDRESSES.ethereum.CVX, + '0xDEf1CA1fb7FBcDC777520aa7f396b4E015F497aB',//COW + ADDRESSES.ethereum.STETH, + '0xE95A203B1a91a908F9B9CE46459d101078c2c3cb',//ankETH + '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ENS + '0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d',//PNK + ADDRESSES.ethereum.WSTETH, + '0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF',//AURA + '0x543Ff227F64Aa17eA132Bf9886cAb5DB55DCAddf',//GEN + '0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6',//RDN + '0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb',//INST + '0x6243d8CEA23066d098a15582d81a598b4e8391F4',//FLX + ADDRESSES.ethereum.LIDO, + '0x1982b2F5814301d4e9a8b0201555376e62F82428', + "0xd33526068d116ce69f19a9ee46f0bd304f21a51f", + "0x543ff227f64aa17ea132bf9886cab5db55dcaddf", + "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f", + "0x31c8eacbffdd875c74b94b077895bd78cf1e64a3", + "0x48c3399719b582dd63eb5aadf12a40b4c3f52fa2", + "0x20bc832ca081b91433ff6c17f85701b6e92486c5", + "0x616e8BfA43F920657B3497DBf40D6b1A02D4608d", + "0x9c39809dec7f95f5e0713634a4d0701329b3b4d2", // debt variableDebtWBTC + "0xa13a9247ea42d743238089903570127dda72fe44", + ], + owners: [treasury, treasury1, treasury2, treasury3,], ownTokens: [GNO], + resolveUniV3: true, }, -}) \ No newline at end of file +}) + +module.exports = mergeExports([module.exports, { + ethereum: { tvl, ownTokens } +}]) diff --git a/projects/treasury/goblinscash.js b/projects/treasury/goblinscash.js new file mode 100644 index 0000000000..427f269753 --- /dev/null +++ b/projects/treasury/goblinscash.js @@ -0,0 +1,3 @@ +module.exports = require("../goblinscash/index"); + +delete module.exports.smartbch.staking \ No newline at end of file diff --git a/projects/treasury/golem.js b/projects/treasury/golem.js new file mode 100644 index 0000000000..284adb7193 --- /dev/null +++ b/projects/treasury/golem.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +// Treasury +const treasury = "0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9"; +const GLM = "0x7dd9c5cba05e151c895fde1cf355c9a1d5da6429"; + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + // Ethereum Assets + nullAddress, + ], + owners: [treasury, '0x70a0a7be87deb51e1fab16d4f2bf00be1510e476'], + ownTokens: [GLM] + }, +}) \ No newline at end of file diff --git a/projects/treasury/gooddollar.js b/projects/treasury/gooddollar.js index 65884cec8b..1b2d0ac08e 100644 --- a/projects/treasury/gooddollar.js +++ b/projects/treasury/gooddollar.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require('../gooddollar/abi.json'); const BigNumber = require("bignumber.js"); const tokens = { aUSDC: "0xbcca60bb61934080951369a648fb03df4f96263c", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", + DAI: ADDRESSES.ethereum.DAI, cDAI: "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", Gfuse: "0x495d133B938596C9984d462F007B676bDc57eCEC", // GoodDollar on Fuse FUSE: "0x970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d", // Fuse on Mainnet diff --git a/projects/treasury/guru-network.js b/projects/treasury/guru-network.js new file mode 100644 index 0000000000..f03fa933d5 --- /dev/null +++ b/projects/treasury/guru-network.js @@ -0,0 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x167D87A906dA361A10061fe42bbe89451c2EE584"; + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + '0x777172D858dC1599914a1C4c6c9fC48c99a60990',//solid + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.FRAX, + ], + owners: [treasury], + ownTokens: [], + }, +}) \ No newline at end of file diff --git a/projects/treasury/gyro.js b/projects/treasury/gyro.js index 9db3c32feb..a9ee20e5ac 100644 --- a/projects/treasury/gyro.js +++ b/projects/treasury/gyro.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const Treasury = "0x8b1522402fece066d83e0f6c97024248be3c8c01"; @@ -9,10 +10,13 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',//BUSD - '0x55d398326f99059fF775485246999027B3197955',//BSC-USD + ADDRESSES.bsc.BUSD,//BUSD + ADDRESSES.bsc.USDT,//BSC-USD + '0x5ca063a7e2bebefeb2bdea42158f5b825f0f9ffb', + '0xa5399084a5f06d308c4527517bbb781c4dce887c', ], owners: [Treasury], ownTokens: [GYRO], + resolveLP: true, }, }) \ No newline at end of file diff --git a/projects/treasury/handlefi.js b/projects/treasury/handlefi.js new file mode 100644 index 0000000000..ef62616dfd --- /dev/null +++ b/projects/treasury/handlefi.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xac459b2b29401b5a4ea90de4320d0956cf86cdbd"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/hector.js b/projects/treasury/hector.js new file mode 100644 index 0000000000..4ae2a1187d --- /dev/null +++ b/projects/treasury/hector.js @@ -0,0 +1,4 @@ +const index = require('../hector/index') +const { ohmTreasury } = require('../helper/treasury') + +module.exports = ohmTreasury(index) \ No newline at end of file diff --git a/projects/treasury/hegic.js b/projects/treasury/hegic.js new file mode 100644 index 0000000000..6f8d6337f9 --- /dev/null +++ b/projects/treasury/hegic.js @@ -0,0 +1,25 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') + +const treasuryARB = "0xf15968a096fc8f47650001585d23bee819b5affb"; +const treasuryETH = "0xd884aca1897ac45515cee6d5fd48f341b4023ace" +const hegic = "0x584bC13c7D411c00c01A62e8019472dE68768430" + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasuryARB], + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDC + ], + owners: [treasuryETH], + ownTokens: [hegic], + }, +}) \ No newline at end of file diff --git a/projects/treasury/idle-dao.js b/projects/treasury/idle-dao.js index dd4e17c9fc..8c059d3c66 100644 --- a/projects/treasury/idle-dao.js +++ b/projects/treasury/idle-dao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); //eth @@ -21,19 +22,19 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC + ADDRESSES.ethereum.USDC, "0x4da27a545c0c5B758a6BA100e3a049001de870f5", //stkAAVE - "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", //BNB + ADDRESSES.ethereum.BNB, "0xc00e94Cb662C3520282E6f5717214004A7f26888",//comp - "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51",//sUSD + ADDRESSES.ethereum.sUSD, "0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919",//RAI - "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2",//sushi - "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0",//matic - "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32",//ldo + ADDRESSES.ethereum.SUSHI, + ADDRESSES.ethereum.MATIC, + ADDRESSES.ethereum.LIDO, "0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF",//alcx - "0x6B175474E89094C44Da98b954EedeAC495271d0F",//dai - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",//steth - "0x514910771AF9Ca656af840dff83E8264EcF986CA",//link + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.LINK, ], owners: [treasury, treasury1, treasury2, treasury3, treasury4, treasury5], ownTokens: [IDLE], @@ -42,10 +43,10 @@ module.exports = treasuryExports({ tokens: [ nullAddress, "0xf28164A485B0B2C90639E47b0f377b4a438a16B1",//dquick - "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063",//dai - "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",//wmatic - "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",//weth - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",//usdc + ADDRESSES.polygon.DAI, + ADDRESSES.polygon.WMATIC_2,//wmatic + ADDRESSES.polygon.WETH_1, + ADDRESSES.polygon.USDC, "0x580A84C73811E1839F75d86d75d88cCa0c241fF4",//QI ], owners: [treasuryPolygon, treasuryPolygon1], diff --git a/projects/treasury/illuvium.js b/projects/treasury/illuvium.js new file mode 100644 index 0000000000..78ca8eea09 --- /dev/null +++ b/projects/treasury/illuvium.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports, nullAddress } = require("../helper/treasury"); + +const Treasury = "0x58c37a622cdf8ace54d8b25c58223f61d0d738aa"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [], + owners: [Treasury], + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.SUSHI, + ADDRESSES.ethereum.SAFE, + ], + owners: [Treasury], + ownTokens: ['0x767fe9edc9e0df98e07454847909b5e959d7ca0e'], + } +}) \ No newline at end of file diff --git a/projects/treasury/immortal.js b/projects/treasury/immortal.js new file mode 100644 index 0000000000..54ec1ab413 --- /dev/null +++ b/projects/treasury/immortal.js @@ -0,0 +1,5 @@ +const olympus = require("../immortal/index"); + +module.exports = olympus; + +delete module.exports.celo.staking \ No newline at end of file diff --git a/projects/treasury/impermax.js b/projects/treasury/impermax.js new file mode 100644 index 0000000000..8ec65d3c2a --- /dev/null +++ b/projects/treasury/impermax.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x7f959c082bc30f3ea88187fac1a640438ad7bf20"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/index-coop.js b/projects/treasury/index-coop.js index 37feb88fa9..30c718a5fb 100644 --- a/projects/treasury/index-coop.js +++ b/projects/treasury/index-coop.js @@ -1,7 +1,9 @@ -const { Indexed } = require("ethers/lib/utils"); -const { nullAddress,treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); -const indexTreasury = "0x9467cfADC9DE245010dF95Ec6a585A506A8ad5FC"; +const treasury = "0x9467cfADC9DE245010dF95Ec6a585A506A8ad5FC"; +const treasury2 = "0x462a63d4405a6462b157341a78fd1babfd3f8065" +const treasury3 = "0xfafd604d1cc8b6b3b6cc859cf80fd902972371c1" const INDEX = "0x0954906da0Bf32d5479e25f46056d22f08464cab"; @@ -10,9 +12,18 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0x5aFE3855358E112B5647B952709E6165e1c1eEEe',//SAFE + ADDRESSES.ethereum.SAFE, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + '0x7C07F7aBe10CE8e33DC6C5aD68FE033085256A84', + '0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd', + '0xAa6E8127831c9DE45ae56bB1b0d4D4Da6e5665BD', + '0x39AA39c021dfbaE8faC545936693aC917d5E7563', + ADDRESSES.ethereum.LUSD, + ADDRESSES.ethereum.USDT, + '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643' ], - owners: [indexTreasury], + owners: [treasury, treasury2, treasury3], ownTokens: [INDEX], }, }) \ No newline at end of file diff --git a/projects/treasury/india-covid-relief-fund.js b/projects/treasury/india-covid-relief-fund.js index 7596c76a0d..f75c213016 100644 --- a/projects/treasury/india-covid-relief-fund.js +++ b/projects/treasury/india-covid-relief-fund.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const Treasury = "0x68A99f89E475a078645f4BAC491360aFe255Dff1"; @@ -10,28 +11,28 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//usdc - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//usdt - '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0',//matic - '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2',//mkr - '0x6810e776880C02933D47DB1b9fc05908e5386b96',//gno - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//dai + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.USDT,//usdt + ADDRESSES.ethereum.MATIC,//matic + ADDRESSES.ethereum.MKR,//mkr + ADDRESSES.ethereum.GNO,//gno + ADDRESSES.ethereum.DAI,//dai ], owners: [Treasury], }, bsc: { tokens: [ nullAddress, - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',//busd - '0x55d398326f99059fF775485246999027B3197955',//busd usdc - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',//wbnb + ADDRESSES.bsc.BUSD,//busd + ADDRESSES.bsc.USDT,//busd usdc + ADDRESSES.bsc.WBNB,//wbnb ], owners: [Treasury_bsc] }, tron: { tokens: [ nullAddress, - 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', + ADDRESSES.tron.USDT, ], owners: [Treasury_trx] }, diff --git a/projects/treasury/instadapp.js b/projects/treasury/instadapp.js new file mode 100644 index 0000000000..68db6fd8ee --- /dev/null +++ b/projects/treasury/instadapp.js @@ -0,0 +1,33 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const Treasury = "0xf81ab897e3940e95d749ff2e1f8d38f9b7cbe3cf"; +const treasuryETH = "0x28849d2b63fa8d361e5fc15cb8abb13019884d09" + +const INST = "0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb" + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + "0x8971dFb268B961a9270632f28B24F2f637c94244", + ADDRESSES.optimism.DAI + ], + owners: [Treasury], + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WSTETH, + ADDRESSES.ethereum.USDT + ], + owners: [treasuryETH], + ownTokens: [INST], + }, +}) \ No newline at end of file diff --git a/projects/treasury/insure-dao.js b/projects/treasury/insure-dao.js new file mode 100644 index 0000000000..659b49ea45 --- /dev/null +++ b/projects/treasury/insure-dao.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xd076397ec36f1c92939bd8cda9f9f7734f308c4b"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/inverse.js b/projects/treasury/inverse.js index c78cc3f25e..7c00b23019 100644 --- a/projects/treasury/inverse.js +++ b/projects/treasury/inverse.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const inv = "0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68"; @@ -5,45 +6,51 @@ const anchorTreasury = "0x926df14a23be491164dcf93f4c468a50ef659d5b"; const multisig = "0x9D5Df30F475CEA915b1ed4C0CCa59255C897b61B"; const opmultisig = "0xa283139017a2f5bade8d8e25412c600055d318f8"; const bnbmultisig = "0xf7da4bc9b7a6bb3653221ae333a9d2a2c2d5bda7"; +const treasury1 = "0x4b6c63e6a94ef26e2df60b89372db2d8e211f1b7" +const treasury2 = "0x943dbdc995add25a1728a482322f9b3c575b16fb" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, "0x865377367054516e17014CcdED1e7d814EDC9ce4", // DOLA - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", // WBTC - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH - "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", // YFI + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.YFI, "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF", // AURA "0xba100000625a3754423978a60c9317c58a424e3D", // BAL "0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F", // SDT - "0xFEEf77d3f69374f66429C91d732A244f074bdf74", // cvxFXS - "0xD533a949740bb3306d119CC777fa900bA034cd52", // CRV - "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", // CVX + ADDRESSES.ethereum.cvxFXS, + ADDRESSES.ethereum.CRV, + ADDRESSES.ethereum.CVX, "0x4C2e59D098DF7b6cBaE0848d66DE2f8A4889b9C3", // FODL - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.SAFE, "0x22915f309EC0182c85cD8331C23bD187fd761360", // DOLA USDC Stable Pool Aura Deposit Vault "0x7f50786A0b15723D741727882ee99a0BF34e3466", // Stake DAO sdCRV Gauge "0x445494F823f3483ee62d854eBc9f58d5B9972A25", // 50DOLA-50DBR "0xb204BF10bc3a5435017D3db247f56dA601dFe08A", // 50DOLA-50WETH - "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", // UNI V3 DOLA + DBR "0x7e05540A61b531793742fde0514e6c136b5fbAfE", // xFODL "0xAD038Eb671c44b853887A7E32528FaB35dC5D710", // DBR + "0x0a6B1d9F920019BAbc4De3F10c94ECB822106104", + "0x73E02EAAb68a41Ea63bdae9Dbd4b7678827B2352", + "0xC36442b4a4522E871399CD717aBDD847Ab11FE88" ], - owners: [anchorTreasury, multisig], + owners: [anchorTreasury, multisig, treasury1, treasury2], ownTokens: [ inv, "0x73E02EAAb68a41Ea63bdae9Dbd4b7678827B2352", // Uniswap INV/ETH LP "0xA5D7A7690B72a89B7b720E43fC9cBda5419d0C71", // 50INV-50DOLA Aura Deposit Vault // "0x9c7305eb78a432ced5C4D14Cac27E8Ed569A2e26", // veNFT ], + resolveUniV3: true, + resolveLP: true, }, optimism: { tokens: [ nullAddress, - "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", // USDC + ADDRESSES.optimism.USDC, "0x8aE125E8653821E851F12A49F7765db9a9ce7384", // DOLA ], owners: [opmultisig], @@ -52,11 +59,28 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", // WBNB + ADDRESSES.bsc.WBNB, "0x2F29Bc0FFAF9bff337b31CBe6CB5Fb3bf12e5840", // DOLA // "0xfBBF371C9B0B994EebFcC977CEf603F7f31c070D", // veTHE ], owners: [bnbmultisig], ownTokens: [], }, + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.DAI, + "0xAAA6C1E32C55A7Bfa8066A6FAE9b42650F262418" + ], + owners: ["0x23dedab98d7828afbd2b7ab8c71089f2c517774a"], + ownTokens: ["0x6A7661795C374c0bFC635934efAddFf3A7Ee23b6"], + }, + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.USDC, + + ], + owners: ["0x5d18b089e838dffbb417a87874435175f3a9b000"], + }, }); diff --git a/projects/treasury/ipor.js b/projects/treasury/ipor.js index 111bd173f6..f1768ee810 100644 --- a/projects/treasury/ipor.js +++ b/projects/treasury/ipor.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const { unwrapUniswapV3NFTs, @@ -11,7 +12,7 @@ const ipor = "0x1e4746dC744503b53b4A082cB3607B169a289090"; const univ3 = "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"; const tokens = [ nullAddress, - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH + ADDRESSES.ethereum.WETH, // WETH ]; async function ownTokens(timestamp, block) { @@ -31,7 +32,7 @@ async function ownTokens(timestamp, block) { return balances; } -module.exports = treasuryExports({ +module.exports = { ethereum: { tvl: sumTokensExport({ tokens, @@ -39,4 +40,4 @@ module.exports = treasuryExports({ }), ownTokens, }, -}); +}; diff --git a/projects/treasury/iq.js b/projects/treasury/iq.js new file mode 100644 index 0000000000..d7e909d3ee --- /dev/null +++ b/projects/treasury/iq.js @@ -0,0 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x56398b89d53e8731bca8c1b06886cfb14bd6b654"; +const IQ = "0x579CEa1889991f68aCc35Ff5c3dd0621fF29b0C9" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.sfrxETH, + ADDRESSES.ethereum.FRAX, + "0x9D45081706102E7aadDD0973268457527722E274", + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.WBTC, + "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", + "0xEF9F994A74CB6EF21C38B13553caa2E3E15F69d0" + ], + owners: [treasury], + ownTokens: [IQ], + }, +}) diff --git a/projects/treasury/jade-protocol.js b/projects/treasury/jade-protocol.js index 1f88d600d6..ca55cdf63c 100644 --- a/projects/treasury/jade-protocol.js +++ b/projects/treasury/jade-protocol.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x6f0bc6217faa5a2f503c057ee6964b756a09ae2c"; @@ -15,9 +16,9 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // wbtc - '0xac3E018457B222d93114458476f3E3416Abbe38F', // sfrxETH + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.sfrxETH, '0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0', // FXS ], owners: [treasury, treasury1], @@ -25,30 +26,30 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',//busd + ADDRESSES.bsc.BUSD, ], owners: [treasuryBSC], }, avax: { tokens: [ nullAddress, - '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',//usdc + ADDRESSES.avax.USDC, ], owners: [treasuryAVAX] }, optimism: { tokens: [ nullAddress, - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', //usdc + ADDRESSES.optimism.USDC, ], owners: [treasuryOP] }, arbitrum: { tokens: [ nullAddress, - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', //usdc + ADDRESSES.arbitrum.USDC, '0x0C4681e6C0235179ec3D4F4fc4DF3d14FDD96017', //rdnt - '0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a',//gmx + ADDRESSES.arbitrum.GMX, ], owners: [treasuryARB, treasuryARB2] } diff --git a/projects/treasury/jonesdao.js b/projects/treasury/jonesdao.js index f12a6d4756..087866e55b 100644 --- a/projects/treasury/jonesdao.js +++ b/projects/treasury/jonesdao.js @@ -1,22 +1,32 @@ -const { treasuryExports, nullAddress } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + const treasury = "0xFa82f1bA00b0697227E2Ad6c668abb4C50CA0b1F"; const jones = "0x10393c20975cF177a3513071bC110f7962CD67da"; -const tokens = [ - nullAddress, - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", // USDC - "0x3d9907F9a368ad0a51Be60f7Da3b97cf940982D8", // GRAIL - "0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A", // MIM - "0x3CAaE25Ee616f2C8E13C74dA0813402eae3F496b", // xGRAIL - "0x616279fF3dBf57A55e3d1F2E309e5D704E4e58Ae", // jGLP-USDC CMLT-LP - "0x2bcd0aac7D98697D8760fB291625829113E354e7", // jUSDC-WETH CMLT-LP - "0x7241bC8035b65865156DDb5EdEf3eB32874a3AF6", // jGLP - "0xe66998533a1992ecE9eA99cDf47686F4fc8458E0", // jUSDC - "0xd2D1162512F927a7e282Ef43a362659E4F2a728F", // sbfGMX -]; + module.exports = treasuryExports({ arbitrum: { - tokens, - owners: [treasury], + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, // USDC + "0x3d9907F9a368ad0a51Be60f7Da3b97cf940982D8", // GRAIL + ADDRESSES.arbitrum.MIM, // MIM + "0x3CAaE25Ee616f2C8E13C74dA0813402eae3F496b", // xGRAIL + "0x616279fF3dBf57A55e3d1F2E309e5D704E4e58Ae", // jGLP-USDC CMLT-LP + "0x2bcd0aac7D98697D8760fB291625829113E354e7", // jUSDC-WETH CMLT-LP + "0x7241bC8035b65865156DDb5EdEf3eB32874a3AF6", // jGLP + "0xe66998533a1992ecE9eA99cDf47686F4fc8458E0", // jUSDC + "0xd2D1162512F927a7e282Ef43a362659E4F2a728F", // sbfGMX + ], + owners: [treasury,], ownTokens: [jones], }, -}); + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, // USDC + ], + owners: [treasury,], + ownTokens: [], + }, +}) diff --git a/projects/treasury/jpegd.js b/projects/treasury/jpegd.js index 912287469e..79bbdfd5e4 100644 --- a/projects/treasury/jpegd.js +++ b/projects/treasury/jpegd.js @@ -1,28 +1,57 @@ +const sdk = require('@defillama/sdk') +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const jpegd = "0xE80C0cd204D654CEbe8dd64A4857cAb6Be8345a3"; + +// Owners const multisig = "0x51C2cEF9efa48e08557A361B52DB34061c025a1B"; const donationEvent = "0x3b7157E5E732863170597790b4c005436572570F"; const usdcVault = "0xFD110cf7985f6B7cAb4dc97dF1932495cADa9d08"; const usdtVault = "0x152DE634FF2f0A6eCBd05cB591cD1eEaCd2900Ed"; const pethVault = "0x548cAB89eBF34509Ae562BC8cE8D5Cdb4F08c3AD"; -module.exports = treasuryExports({ +const treasuryTvl = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH - "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI - "0x0000000000085d4780B73119b644AE5ecd22b376", // TUSD - "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", // CVX - "0x853d955aCEf822Db058eb8505911ED77F175b99e", // FRAX - "0x514910771AF9Ca656af840dff83E8264EcF986CA", // LINK - "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", // cvxCRV - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.CVX, + ADDRESSES.ethereum.FRAX, + ADDRESSES.ethereum.LINK, + ADDRESSES.ethereum.cvxCRV, + ADDRESSES.ethereum.SAFE, + ADDRESSES.ethereum.vlCVX, + ADDRESSES.ethereum.sfrxETH, + ADDRESSES.ethereum.STETH, + ADDRESSES.ethereum.WSTETH, + ADDRESSES.ethereum.RETH, + "0x836A808d4828586A69364065A1e064609F5078c7", // pETH + // Liquidity positions + "0xC47EBd6c0f68fD5963005D28D0ba533750E5C11B", // pUSDFRAXBP3CRV-f + "0x34eD182D0812D119c92907852D2B429f095A9b07", // JPEGETH-f + "0x9848482da3Ee3076165ce6497eDA906E66bB85C5", // pETH-ETH-f + "0xdB06a76733528761Eda47d356647297bC35a98BD", // JPEGWETH SLP ], owners: [multisig, donationEvent, usdcVault, usdtVault, pethVault], ownTokens: [jpegd], + resolveUniV3: true, }, }); + +const liquidityTvl = async (timestamp, ethBlock, chainBlocks, { api }) => { + const troveManager = '0xA39739EF8b0231DbFA0DcdA07d7e29faAbCf4bb2' + const stabilityPool = '0x66017d22b0f8556afdd19fc67041899eb65a21bb' + const troveData = await api.call({ abi: 'function Troves(address) view returns (uint256 debt, uint256 coll,uint256 stake ,uint8 status , uint128 arrayIndex )', target: troveManager, params: multisig }) + const stabilityData = await api.call({ abi: 'function deposits(address) view returns ( uint256 initialValue, address frontEndTag )', target: stabilityPool, params: multisig }) + api.add(ADDRESSES.ethereum.LUSD, troveData.debt * -1) + api.add(ADDRESSES.ethereum.LUSD, stabilityData.initialValue) + api.add(ADDRESSES.null, troveData.coll) + return api.getBalances() +} +treasuryTvl.ethereum.tvl = sdk.util.sumChainTvls([treasuryTvl.ethereum.tvl, liquidityTvl]) + +module.exports = treasuryTvl \ No newline at end of file diff --git a/projects/treasury/just-yield.js b/projects/treasury/just-yield.js index 6b11244e5d..48b09d9d24 100644 --- a/projects/treasury/just-yield.js +++ b/projects/treasury/just-yield.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const Treasury = "0xeCa31b3cbD0C65CC3Ea2DE2338693B74445B0c2C"; @@ -8,7 +9,7 @@ module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',//weth + ADDRESSES.arbitrum.WETH,//weth ], owners: [Treasury], }, diff --git a/projects/treasury/keeperdao.js b/projects/treasury/keeperdao.js index a18256ff76..c4d7f2b540 100644 --- a/projects/treasury/keeperdao.js +++ b/projects/treasury/keeperdao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const keeperDaoTreasury = "0x9a67F1940164d0318612b497E8e6038f902a00a4"; @@ -8,15 +9,16 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC '0xFe2e637202056d30016725477c5da089Ab0A043A',//sETH2 - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0xae78736Cd615f374D3085123A210448E74Fc6393',//rETH - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//stETH - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',//WBTC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.RETH,//rETH + ADDRESSES.ethereum.STETH,//stETH + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.WBTC,//WBTC '0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF',//ALCX - '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D'//renBTC + '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D',//renBTC + ADDRESSES.ethereum.USDT ], owners: [keeperDaoTreasury], ownTokens: [ROOK], diff --git a/projects/treasury/kei.js b/projects/treasury/kei.js new file mode 100644 index 0000000000..216ff4b95f --- /dev/null +++ b/projects/treasury/kei.js @@ -0,0 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports } = require("../helper/treasury"); + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + ADDRESSES.ethereum.WETH, + '0x7d87123d92e9df257e0789189e4c4ff67fa6c382', + ], + owners: ['0x3D027824a9Eb4cc5E8f24D97FD8495eA9DC7026F'], + ownTokens: ['0xF75C7a59bCD9bd207C4Ab1BEB0b32EEd3B6392f3'], + resolveLP: true, + }, +}) diff --git a/projects/treasury/king-finance.js b/projects/treasury/king-finance.js index 569132ed0d..6c339ddef4 100644 --- a/projects/treasury/king-finance.js +++ b/projects/treasury/king-finance.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const TREASURY1 = '0x2eecdb4631c3d2f49d56b4cbfede4c7b23151337' @@ -9,8 +10,8 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', - '0x55d398326f99059fF775485246999027B3197955', + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.USDT, ], owners: [TREASURY1, TREASURY2, TREASURY3, TREASURY4,], ownTokens: ['0x74f08aF7528Ffb751e3A435ddD779b5C4565e684'], diff --git a/projects/treasury/kinza.js b/projects/treasury/kinza.js new file mode 100644 index 0000000000..bf35c967c7 --- /dev/null +++ b/projects/treasury/kinza.js @@ -0,0 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x65FDCD48c4807F67429Bdc731d6964f5553CdB36"; + +module.exports = treasuryExports({ + bsc: { + tokens: [ + nullAddress, + ADDRESSES.bsc.WBNB, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/klima-dao.js b/projects/treasury/klima-dao.js index 671d8f3bf8..7644248adc 100644 --- a/projects/treasury/klima-dao.js +++ b/projects/treasury/klima-dao.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const klimaTreasury1 = "0x7dd4f0b986f032a44f913bf92c9e8b7c17d77ad7"; @@ -10,7 +11,7 @@ module.exports = treasuryExports({ tokens: [ nullAddress, '0x2F800Db0fdb5223b3C3f354886d907A671414A7F', // BCT - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC + ADDRESSES.polygon.USDC, // USDC '0xD838290e877E0188a4A44700463419ED96c16107', // NCT '0xAa7DbD1598251f856C12f63557A4C4397c253Cea', // MCO2 '0x2B3eCb0991AF0498ECE9135bcD04013d7993110c', // UBO diff --git a/projects/treasury/kromatika.js b/projects/treasury/kromatika.js new file mode 100644 index 0000000000..4138998da8 --- /dev/null +++ b/projects/treasury/kromatika.js @@ -0,0 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const Treasury = "0x8e35cc21fbcade0a5483ce430e0d5456086a36d3"; + +const KROM = "0x55fF62567f09906A85183b866dF84bf599a4bf70"; + + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + "0x8971dFb268B961a9270632f28B24F2f637c94244" + ], + owners: [Treasury], + ownTokens: [KROM], + }, +}) \ No newline at end of file diff --git a/projects/treasury/kyber.js b/projects/treasury/kyber.js index eca7c7b625..57722bfb52 100644 --- a/projects/treasury/kyber.js +++ b/projects/treasury/kyber.js @@ -1,9 +1,49 @@ -const { nullAddress,treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports } = require("../helper/treasury"); + +const treasury = "0xe6a7338cba0a1070adfb22c07115299605454713" +const treasury2 = "0x91c9d4373b077ef8082f468c7c97f2c499e36f5b" +const knc = "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202" +const kncarb = "0xe4DDDfe67E7164b0FE14E218d80dC4C08eDC01cB" +const kncop = "0xa00E3A3511aAC35cA78530c85007AFCd31753819" +const kncbsc= "0xfe56d5892BDffC7BF58f2E84BE1b2C32D21C308b" module.exports = treasuryExports({ + ethereum: { + tokens: [ + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT + + ], + owners: [treasury, treasury2], + ownTokens: [knc], + }, arbitrum: { - tokens: ['0x3F56e0c36d275367b8C502090EDF38289b3dEa0d'], - owners: ['0x91c9d4373b077ef8082f468c7c97f2c499e36f5b'], - ownTokens: ['0xe4dddfe67e7164b0fe14e218d80dc4c08edc01cb'], + tokens: [ + ADDRESSES.arbitrum.ARB, + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDC_CIRCLE, + "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d" //MAI + ], + owners: [treasury2], + ownTokens: [kncarb], + }, + optimism: { + tokens: [ + ADDRESSES.optimism.OP, + ADDRESSES.optimism.WETH, + "0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4" + ], + owners: [treasury2], + ownTokens: [kncop], + }, + bsc: { + tokens: [ + ADDRESSES.bsc.WBNB + ], + owners: [treasury2], + ownTokens: [kncbsc], }, }) \ No newline at end of file diff --git a/projects/treasury/l2beat.js b/projects/treasury/l2beat.js new file mode 100644 index 0000000000..4b9b5bac73 --- /dev/null +++ b/projects/treasury/l2beat.js @@ -0,0 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports } = require("../helper/treasury"); + +const treasury = "0xea78912803be5e356eac2b8e127d4ba87230a48e" // + +module.exports = treasuryExports({ + optimism: { + tokens: [ + ADDRESSES.optimism.OP, + ADDRESSES.optimism.WETH + ], + owners: [treasury], + }, + +}) \ No newline at end of file diff --git a/projects/treasury/leaguedao.js b/projects/treasury/leaguedao.js new file mode 100644 index 0000000000..750746c490 --- /dev/null +++ b/projects/treasury/leaguedao.js @@ -0,0 +1,5 @@ +const olympus = require("../leaguedao/index"); + +module.exports = olympus; + +delete module.exports.ethereum.staking \ No newline at end of file diff --git a/projects/treasury/level.js b/projects/treasury/level.js new file mode 100644 index 0000000000..8ddfe1fee2 --- /dev/null +++ b/projects/treasury/level.js @@ -0,0 +1,36 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports } = require("../helper/treasury"); + +const LVL = '0xb64e280e9d1b5dbec4accedb2257a87b400db149'; + +module.exports = treasuryExports({ + bsc: { + tokens: [ + "0xb5c42f84ab3f786bca9761240546aa9cec1f8821", + ], + owners: [ + '0x8BFf27E9Fa1C28934554e6B5239Fb52776573619', + '0xb07953f23545796710957faec97f05b21146ac2d', + '0x92a0a11a57c28d4c86a629530fd59b83b1276003', + '0x712a2e08c67cd7153f04fdb3037d4696300921d0', + ], + ownTokens: [LVL], + }, + arbitrum: { + tokens: [ + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.ARB, + "0x502697AF336F7413Bb4706262e7C506Edab4f3B9", + "0xb076f79f8D1477165E2ff8fa99930381FB7d94c1", + "0x5573405636F4b895E511C9C54aAfbefa0E7Ee458", + ], + owners: [ + '0x635aac65f37a6bbe06a2dde77b0fd2f1748674d4', + '0x4b47ef68180ec46a0b6be4d34fd9d8680bee2b2c', + ], + ownTokens: [LVL], + }, +}) diff --git a/projects/treasury/lido.js b/projects/treasury/lido.js index dbd00ebf86..6fa5c3d7d0 100644 --- a/projects/treasury/lido.js +++ b/projects/treasury/lido.js @@ -1,23 +1,34 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const LidoTreasury = "0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c"; -const LDO = "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32"; +const LDO = ADDRESSES.ethereum.LIDO; +const treasuryMatic = "0xd65Fa54F8DF43064dfd8dDF223A446fc638800A9" +const treasurySolana = "GQ3QPrB1RHPRr4Reen772WrMZkHcFM4DL5q44x1BBTFm" +const LDOsol = "HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//stETH - '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0',//MATIC - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.STETH,//stETH + ADDRESSES.ethereum.MATIC,//MATIC + ADDRESSES.ethereum.USDC,//USDC '0x2eE543b8866F46cC3dC93224C6742a8911a59750',//MVDG '0xbA6B0dbb2bA8dAA8F5D6817946393Aef8D3A4487',//HSF '0x232FB065D9d24c34708eeDbF03724f2e95ABE768',//SHEESHA '0x0d02755a5700414B26FF040e1dE35D337DF56218' //BEND ], - owners: [LidoTreasury], + owners: [LidoTreasury, treasuryMatic], ownTokens: [LDO], }, + solana: { + tokens: [ + "7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj" + ], + owners: [treasurySolana], + ownTokens: [LDOsol], + }, }) diff --git a/projects/treasury/liondex.js b/projects/treasury/liondex.js new file mode 100644 index 0000000000..9e25125f00 --- /dev/null +++ b/projects/treasury/liondex.js @@ -0,0 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const Treasury = "0x7fca3bf8adc4e143bd789aecda36c0ce34f1d75b"; + +const LION = "0x8eBb85D53e6955e557b7c53acDE1D42fD68561Ec"; + + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + "0x8971dFb268B961a9270632f28B24F2f637c94244", + ], + owners: [Treasury], + ownTokens: [LION], + resolveUniV3: true, + }, +}) \ No newline at end of file diff --git a/projects/treasury/liquity-treasury.js b/projects/treasury/liquity-treasury.js index 18c732cec4..65531105d9 100644 --- a/projects/treasury/liquity-treasury.js +++ b/projects/treasury/liquity-treasury.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xF06016D822943C42e3Cb7FC3a6A3B1889C1045f8"; @@ -6,17 +7,20 @@ const treasury2 = "0xcCb2656afB1Cc4cB130e8C8C903ad674069c6FCD"; const treasuryOP = "0xd2D4e9024D8C90aB52032a9F1e0d92D4cE20191B"; const treasuryOP2 = "0x2f593f151aF4bb9A71bcA6cAce1d3c56C2844117"; +const treasuryARB = "0xc5adb3d91329e1600cbf573485b1d3207bcf6de2" + const LQTY = "0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d"; + module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0',//LUSD - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//usdc + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.LUSD,//LUSD + ADDRESSES.ethereum.USDC,//usdc '0xc944E90C64B2c07662A292be6244BDf05Cda44a7',//grt '0x41545f8b9472D758bB669ed8EaEEEcD7a9C4Ec29',//fort ], @@ -26,10 +30,16 @@ module.exports = treasuryExports({ optimism: { tokens: [ nullAddress, - '0x4200000000000000000000000000000000000042', //OP + ADDRESSES.optimism.OP, //OP '0x73cb180bf0521828d8849bc8CF2B920918e23032', //USD+ '0x3c8B650257cFb5f272f799F5e2b4e65093a11a05',//velo ], owners: [treasuryOP, treasuryOP2], + }, + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasuryARB], } }) \ No newline at end of file diff --git a/projects/treasury/looksrare.js b/projects/treasury/looksrare.js index 9c421dc619..4b906d6894 100644 --- a/projects/treasury/looksrare.js +++ b/projects/treasury/looksrare.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require("../helper/treasury"); const { unwrapUniswapV3NFTs, @@ -10,8 +11,8 @@ const looks = "0xf4d2888d29D722226FafA5d9B24F9164c092421E"; const tokens = [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.SAFE, ]; async function ownTokens(timestamp, block) { diff --git a/projects/treasury/lsdx-finance.js b/projects/treasury/lsdx-finance.js index 3a90e81b87..78d3af5d10 100644 --- a/projects/treasury/lsdx-finance.js +++ b/projects/treasury/lsdx-finance.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const Treasury = "0xb966b7038A2b42A0419457dA4F4d2FBa23097aE1"; @@ -8,9 +9,9 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//stETH - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.STETH,//stETH + ADDRESSES.ethereum.USDC,//USDC ], owners: [Treasury], ownTokens: [LSD], diff --git a/projects/treasury/luxor.js b/projects/treasury/luxor.js new file mode 100644 index 0000000000..0c7e5cba3b --- /dev/null +++ b/projects/treasury/luxor.js @@ -0,0 +1,5 @@ +const olympus = require("../luxor/index"); + +module.exports = olympus; + +delete module.exports.fantom.staking \ No newline at end of file diff --git a/projects/treasury/lyra.js b/projects/treasury/lyra.js new file mode 100644 index 0000000000..8602d08414 --- /dev/null +++ b/projects/treasury/lyra.js @@ -0,0 +1,37 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') + +const treasury_arb = "0x2ccf21e5912e9ecccb0ecdee9744e5c507cf88ae"; +const treasury_eth = "0xEE86E99b42981623236824D33b4235833Afd8044"; +const treasury_op = "0xD4C00FE7657791C2A43025dE483F05E49A5f76A6"; + +const lyra_eth = "0x01BA67AAC7f75f647D94220Cc98FB30FCc5105Bf"; +const lyra_arb = "0x079504b86d38119F859c4194765029F692b7B7aa"; +const lyra_op = "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.WETH, + ], + owners: [treasury_arb], + ownTokens: [lyra_arb], + }, + ethereum: { + tokens: [ + ADDRESSES.ethereum.USDC, + ], + owners: [treasury_eth], + ownTokens: [lyra_eth], + }, + optimism: { + tokens: [ + ADDRESSES.optimism.OP, + ADDRESSES.optimism.sUSD, + ADDRESSES.optimism.WETH, + ], + owners: [treasury_op], + ownTokens: [lyra_op], + }, +}) \ No newline at end of file diff --git a/projects/treasury/mahadao.js b/projects/treasury/mahadao.js index 0d4789e0eb..ad79733cd5 100644 --- a/projects/treasury/mahadao.js +++ b/projects/treasury/mahadao.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require("../helper/unwrapLPs.js"); const eth = { - weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + weth: ADDRESSES.ethereum.WETH, arth: "0x8CC0F052fff7eaD7f2EdCCcaC895502E884a8a71", treasury: "0x43c958affe41d44f0a02ae177b591e93c86adbea", }; diff --git a/projects/treasury/maia-dao.js b/projects/treasury/maia-dao.js new file mode 100644 index 0000000000..2bfb210a81 --- /dev/null +++ b/projects/treasury/maia-dao.js @@ -0,0 +1,4 @@ +const index = require('../maia-dao/index') +const { ohmTreasury } = require('../helper/treasury') + +module.exports = ohmTreasury(index) \ No newline at end of file diff --git a/projects/treasury/maker.js b/projects/treasury/maker.js index 4f5d39edec..8cd820c29c 100644 --- a/projects/treasury/maker.js +++ b/projects/treasury/maker.js @@ -1,28 +1,46 @@ -const { nullAddress, treasuryExports } = require("../helper/treasury"); +const { nullAddress } = require("../helper/treasury"); +const { + sumTokensExport, + sumTokens, +} = require("../helper/unwrapLPs"); +const ADDRESSES = require('../helper/coreAssets.json') const treasury = "0xBE8E3e3618f7474F8cB1d074A26afFef007E98FB"; -const MKR = "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2"; -const DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F" +const MKR = ADDRESSES.ethereum.MKR; +const DAI = ADDRESSES.ethereum.DAI +async function tvl(timestamp, block, chainBlocks, {api}) { + const balances = {}; + const tokensAndOwners = [ + nullAddress, + '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ens + '0x4da27a545c0c5B758a6BA100e3a049001de870f5',//staave + '0xc00e94Cb662C3520282E6f5717214004A7f26888',//comp + ADDRESSES.ethereum.AAVE,//aave + '0x8f8221aFbB33998d8584A2B05749bA73c37a938a',//req + ].map(t=>[t, treasury]) + await sumTokens(balances, tokensAndOwners, block); -module.exports = treasuryExports({ + const all = await api.call({target: "0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b", abi: "function dai(address) view returns (uint256)", params: ["0xA950524441892A31ebddF91d3cEEFa04Bf454466"]}) + const vice = await api.call({target: "0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b", abi: "function vice() view returns (uint256)", }) + balances[DAI] = (all-vice)/1e27 + + return balances; +} + + +module.exports = { ethereum: { - tokens: [ - nullAddress, - '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ens - '0x4da27a545c0c5B758a6BA100e3a049001de870f5',//staave - '0xc00e94Cb662C3520282E6f5717214004A7f26888',//comp - '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9',//aave - '0x8f8221aFbB33998d8584A2B05749bA73c37a938a',//req - ], - owners: [treasury], - ownTokens: [MKR, DAI], + tvl, + ownTokens: sumTokensExport({ + tokens: [MKR], + owners: [treasury], + }), }, arbitrum: { - tokens: [ - nullAddress, - ], - owners: ['0x10e6593cdda8c58a1d0f14c5164b376352a55f2f'], - ownTokens: [], + tvl:sumTokensExport({ + tokens: [nullAddress], + owners: ["0x10e6593cdda8c58a1d0f14c5164b376352a55f2f"], + }), }, -}) \ No newline at end of file +} \ No newline at end of file diff --git a/projects/treasury/mantra-dao.js b/projects/treasury/mantra-dao.js new file mode 100644 index 0000000000..d93b5d4f44 --- /dev/null +++ b/projects/treasury/mantra-dao.js @@ -0,0 +1,26 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xc8899da25423ac52aa711b97ae04c8888fa1e1d7"; +const treasury2 = "0xd84701828745c98405a3e1153fccea627963859a" +const OM = "0x3593d125a4f7849a1b059e64f4517a86dd60c95d"; + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC,//USDC + '0xFe2e637202056d30016725477c5da089Ab0A043A',//sETH2 + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.RETH,//rETH + ADDRESSES.ethereum.STETH,//stETH + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.WBTC,//WBTC + '0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF',//ALCX + '0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D'//renBTC + ], + owners: [treasury, treasury2], + ownTokens: [OM], + }, +}) \ No newline at end of file diff --git a/projects/treasury/maple.js b/projects/treasury/maple.js index 7355bcc8b2..07519efdf3 100644 --- a/projects/treasury/maple.js +++ b/projects/treasury/maple.js @@ -1,10 +1,17 @@ -const { staking } = require("../helper/staking"); +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports } = require("../helper/treasury"); -const MapleTreasury = "0xa9466EaBd096449d650D5AEB0dD3dA6F52FD0B19"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; - -module.exports = { +module.exports = treasuryExports({ ethereum: { - tvl: staking(MapleTreasury, [USDC]), + tokens: [ + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT + ], + owners: [ + "0xa9466EaBd096449d650D5AEB0dD3dA6F52FD0B19", + "0xd6d4Bcde6c816F17889f1Dd3000aF0261B03a196" + ], + ownTokens: ["0x33349b282065b0284d756f0577fb39c158f935e6"], }, -} +}) \ No newline at end of file diff --git a/projects/treasury/metacartel.js b/projects/treasury/metacartel.js index c326d2999a..4a3ba04981 100644 --- a/projects/treasury/metacartel.js +++ b/projects/treasury/metacartel.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x4570b4fAF71E23942B8B9F934b47ccEdF7540162"; @@ -7,10 +8,10 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//weth - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//usdc + ADDRESSES.ethereum.WETH,//weth + ADDRESSES.ethereum.USDC,//usdc '0x6243d8CEA23066d098a15582d81a598b4e8391F4',//flx - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//dai + ADDRESSES.ethereum.DAI,//dai '0xfb5453340C03db5aDe474b27E68B6a9c6b2823Eb',//robot '0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919',//rai ], diff --git a/projects/treasury/metronome.js b/projects/treasury/metronome.js index c5e85fd7e5..3864a96938 100644 --- a/projects/treasury/metronome.js +++ b/projects/treasury/metronome.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xc897b98272aa23714464ea2a0bd5180f1b8c0025"; @@ -10,9 +11,9 @@ module.exports = treasuryExports({ tokens: [ nullAddress, '0x64351fC9810aDAd17A690E4e1717Df5e7e085160',//msETH - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//usdc - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//dai - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//weth + ADDRESSES.ethereum.USDC,//usdc + ADDRESSES.ethereum.DAI,//dai + ADDRESSES.ethereum.WETH,//weth '0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421',//vsp ], owners: [treasury, vestingAddress], diff --git a/projects/treasury/mimo-protocol.js b/projects/treasury/mimo-protocol.js index b9df0b7388..4d4d4fcdf1 100644 --- a/projects/treasury/mimo-protocol.js +++ b/projects/treasury/mimo-protocol.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x25Fc7ffa8f9da3582a36633d04804F0004706F9b"; @@ -18,11 +19,11 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0xD533a949740bb3306d119CC777fa900bA034cd52',//CRV - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.CRV, + ADDRESSES.ethereum.USDC, '0xba100000625a3754423978a60c9317c58a424e3D',//BAL - '0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7',//cvxCRV + ADDRESSES.ethereum.cvxCRV, '0x6DEA81C8171D0bA574754EF6F8b412F2Ed88c54D',//LQTY '0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68',//INV '0xcAfE001067cDEF266AfB7Eb5A286dCFD277f3dE5',//PSP @@ -33,18 +34,22 @@ module.exports = treasuryExports({ ], owners: [treasury, treasury1, treasurypolygon, treasurypolygon1, treasuryfantom, treasuryfantom1], - ownTokens: [MIMO, MIMOfantom, MIMOpolygon], + ownTokens: [MIMO,], }, polygon: { tokens: [ nullAddress, - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'//USDC - ] + ADDRESSES.polygon.USDC + ], + owners: [treasury, treasury1, treasurypolygon, treasurypolygon1, treasuryfantom, treasuryfantom1], + ownTokens: [MIMOpolygon,], }, fantom: { tokens: [ nullAddress, - '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75'//USDC - ] + ADDRESSES.fantom.USDC + ], + owners: [treasury, treasury1, treasurypolygon, treasurypolygon1, treasuryfantom, treasuryfantom1], + ownTokens: [MIMOfantom,], } }) \ No newline at end of file diff --git a/projects/treasury/moret.js b/projects/treasury/moret.js index 7bf7e24d88..b249a9720c 100644 --- a/projects/treasury/moret.js +++ b/projects/treasury/moret.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const treasury = "0x015B5FD572De0a7C1478075e1710a0505184520d"; @@ -8,8 +9,8 @@ module.exports = treasuryExports({ polygon: { tokens: [ nullAddress, - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',//USDC - '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619'//weth + ADDRESSES.polygon.USDC,//USDC + ADDRESSES.polygon.WETH_1//weth ], owners: [treasury], ownTokens: [MOR], diff --git a/projects/treasury/mstable.js b/projects/treasury/mstable.js index 0d5c777697..ec45cd8367 100644 --- a/projects/treasury/mstable.js +++ b/projects/treasury/mstable.js @@ -1,6 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); -const mStableTreasury1 = "0x3dd46846eed8D147841AE162C8425c08BD8E1b41"; +const treasury = "0x3dd46846eed8D147841AE162C8425c08BD8E1b41"; +const treasury2 = "0xfcf455d6eb48b3289a712c0b3bc3c7ee0b0ee4c6" +const treasury3 = "0xf6ff1f7fceb2ce6d26687eaab5988b445d0b94a2" +const treasury4 = "0x67905d3e4fec0c85dce68195f66dc8eb32f59179" const META = "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2"; const mUSD = "0xe2f2a5C287993345a840Db3B0845fbC70f5935a5"; @@ -10,19 +14,19 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT '0xc00e94Cb662C3520282E6f5717214004A7f26888',//COMP '0x4da27a545c0c5B758a6BA100e3a049001de870f5',//stkAAVE '0x7C07F7aBe10CE8e33DC6C5aD68FE033085256A84',//icETH '0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72',//ENS - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984',//UNI + ADDRESSES.ethereum.UNI,//UNI '0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF',//AURA - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//stETH + ADDRESSES.ethereum.STETH,//stETH ], - owners: [mStableTreasury1], + owners: [treasury, treasury2, treasury3, treasury4], ownTokens: [META, mUSD], }, }) \ No newline at end of file diff --git a/projects/treasury/mycelium.js b/projects/treasury/mycelium.js index f42a8513bb..2c78684c46 100644 --- a/projects/treasury/mycelium.js +++ b/projects/treasury/mycelium.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH + ADDRESSES.arbitrum.WETH, // WETH '0x432502a764abec914f940916652ce55885323cda', ], owners: ['0x9f59e27fd6c8d96dfb89da58c0c98bac07e7a21a'], diff --git a/projects/treasury/nemesis.js b/projects/treasury/nemesis.js index 256622cc15..ac3e4935c6 100644 --- a/projects/treasury/nemesis.js +++ b/projects/treasury/nemesis.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const nemeTreasury1 = "0xdFFb6FB92E3F54C0DAa59e5af3f47fD58824562a"; @@ -9,7 +10,7 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',//BUSD + ADDRESSES.bsc.BUSD,//BUSD ], owners: [nemeTreasury1], ownTokens: [NMS], diff --git a/projects/treasury/neutra-finance.js b/projects/treasury/neutra-finance.js new file mode 100644 index 0000000000..0d601ec74e --- /dev/null +++ b/projects/treasury/neutra-finance.js @@ -0,0 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xfba3b455211a3a09689788Ac3A14B4F8Baf012B4"; +const NEU = "0xdA51015b73cE11F77A115Bb1b8a7049e02dDEcf0"; +const esNEU = "0xdeBB612442159b34c24B7BAF20b1CC3218a06925" +const sbfNEU = "0x44F0685482A7180785e309947176C34D0A3d9187" + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + "0x422B5A91b5Cdef61D3400671CCdd5bE22C7CE655", + ADDRESSES.optimism.DAI, + ], + owners: [treasury], + ownTokens: [NEU, esNEU, sbfNEU], + }, +}) \ No newline at end of file diff --git a/projects/treasury/nexus-mutual.js b/projects/treasury/nexus-mutual.js index 0ed6d9bfd5..dde13a0d43 100644 --- a/projects/treasury/nexus-mutual.js +++ b/projects/treasury/nexus-mutual.js @@ -1,6 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const communityFund = "0x586b9b2F8010b284A0197f392156f1A7Eb5e86e9"; +const treasury = "0xfc64382c9ce89ba1c21692a68000366a35ff0336" const nxm = "0xd7c49CEE7E9188cCa6AD8FF264C1DA2e69D4Cf3B"; const wNxm = "0x0d438F3b5175Bebc262bF23753C1E53d03432bDE"; @@ -8,12 +10,12 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT + ADDRESSES.ethereum.USDT, "0x2ba592F78dB6436527729929AAf6c908497cB200", // CREAM - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.SAFE, ], ownTokens: [nxm, wNxm], - owners: [communityFund], + owners: [communityFund, treasury], }, }); diff --git a/projects/treasury/nftx.js b/projects/treasury/nftx.js index 56d7b0533c..0782074868 100644 --- a/projects/treasury/nftx.js +++ b/projects/treasury/nftx.js @@ -1,13 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const nftxDao = "0x40D73Df4F99bae688CE3C23a01022224FE16C7b2"; +const nftx = "0x87d73E916D7057945c9BcD8cdd94e42A6F47f776" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC ], - owners: [nftxDao] + owners: [nftxDao], + ownTokens: [nftx], }, }) \ No newline at end of file diff --git a/projects/treasury/notional.js b/projects/treasury/notional.js new file mode 100644 index 0000000000..472c01ae5a --- /dev/null +++ b/projects/treasury/notional.js @@ -0,0 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x086b4ecd75c494dd36641195e89c25373e06d7cb"; +const treasury2 = "0x22341fb5d92d3d801144aa5a925f401a91418a05" +const note = "0xCFEAead4947f0705A14ec42aC3D44129E1Ef3eD5" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC,//USDC + ], + owners: [treasury], + ownTokens: [note], + }, +}) \ No newline at end of file diff --git a/projects/treasury/nouns.js b/projects/treasury/nouns.js index ac4dbc0357..9897ca0b46 100644 --- a/projects/treasury/nouns.js +++ b/projects/treasury/nouns.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x0BC3807Ec262cB779b38D65b38158acC3bfedE10"; @@ -6,8 +7,8 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",//stETH + ADDRESSES.ethereum.USDC, //USDC + ADDRESSES.ethereum.STETH,//stETH ], owners: [treasury,], }, diff --git a/projects/treasury/o2-dao.js b/projects/treasury/o2-dao.js new file mode 100644 index 0000000000..3cf00e2722 --- /dev/null +++ b/projects/treasury/o2-dao.js @@ -0,0 +1,15 @@ +const { treasuryExports, } = require("../helper/treasury"); + + +module.exports = treasuryExports({ + avax: { + tokens: [ + '0x321E7092a180BB43555132ec53AaA65a5bF84251', + '0x7bc2561d69b56fae9760df394a9fa9202c5f1f11', + '0x0da67235dd5787d67955420c84ca1cecd4e5bb3b', + ], + owners: ['0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba'], + resolveLP: true, + ownTokens: ['0xaa2439dbad718c9329a5893a51a708c015f76346'] + }, +}) diff --git a/projects/treasury/o3-swap.js b/projects/treasury/o3-swap.js new file mode 100644 index 0000000000..a8cf7a14d7 --- /dev/null +++ b/projects/treasury/o3-swap.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xb23d6fc44e40e56cb3b0d2c28ba3d7a170a07a49"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/oasisswapdex.js b/projects/treasury/oasisswapdex.js index 660c2cf512..b2032aabe2 100644 --- a/projects/treasury/oasisswapdex.js +++ b/projects/treasury/oasisswapdex.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xe0a9B8DeF6d85eb7D828f706635402334D564b0f"; @@ -7,7 +8,7 @@ module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", //USDC + ADDRESSES.arbitrum.USDC, //USDC ], owners: [treasury, MultisigTreasury], }, diff --git a/projects/treasury/olympulsex.js b/projects/treasury/olympulsex.js new file mode 100644 index 0000000000..bacb8b14a2 --- /dev/null +++ b/projects/treasury/olympulsex.js @@ -0,0 +1,11 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { sumTokensExport } = require('../helper/unknownTokens') + +const treasury = "0x767d028d6d49ac86Aba52d23746c6dC5285C4852"; +const LP = '0x2d593b3472d6a5439bC1523a04C2aec314CBc44c' + +module.exports = { + pulse: { + tvl: sumTokensExport({ owner: treasury, tokens: [ADDRESSES.pulse.DAI, LP], useDefaultCoreAssets: true, }), + } +} \ No newline at end of file diff --git a/projects/treasury/olympus-dao.js b/projects/treasury/olympus-dao.js index 116f925402..85efc449f7 100644 --- a/projects/treasury/olympus-dao.js +++ b/projects/treasury/olympus-dao.js @@ -1,30 +1,3 @@ -const { nullAddress,treasuryExports } = require("../helper/treasury"); +module.exports = 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 +delete module.exports.ethereum.staking \ No newline at end of file diff --git a/projects/treasury/omicron.js b/projects/treasury/omicron.js new file mode 100644 index 0000000000..18da651243 --- /dev/null +++ b/projects/treasury/omicron.js @@ -0,0 +1,3 @@ +module.exports = require("../omicron/index"); + +delete module.exports.arbitrum.staking \ No newline at end of file diff --git a/projects/treasury/op-foundation.js b/projects/treasury/op-foundation.js new file mode 100644 index 0000000000..8b0283756d --- /dev/null +++ b/projects/treasury/op-foundation.js @@ -0,0 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x2501c477d0a35545a387aa4a3eee4292a9a8b3f0"; +const OP = ADDRESSES.optimism.OP + +module.exports = treasuryExports({ + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC + ], + owners: [treasury], + ownTokens: [OP], + }, + ethereum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + ownTokens: [], + }, +}) \ No newline at end of file diff --git a/projects/treasury/open-oceans.js b/projects/treasury/open-oceans.js new file mode 100644 index 0000000000..8b3ce5c8b9 --- /dev/null +++ b/projects/treasury/open-oceans.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x61e807038ae880d964a15a57c8cc74a634bccc26"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/ovr.js b/projects/treasury/ovr.js index b18abdea2c..33f71f57f6 100644 --- a/projects/treasury/ovr.js +++ b/projects/treasury/ovr.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, } = require("../helper/treasury"); const OVR = { @@ -5,7 +6,7 @@ const OVR = { polygon: "0x1631244689EC1fEcbDD22fb5916E920dFC9b8D30", }; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; +const DAI = ADDRESSES.ethereum.DAI; const IBCO = "0x8c19cF0135852BA688643F57d56Be72bB898c411"; module.exports = treasuryExports({ diff --git a/projects/treasury/p-network.js b/projects/treasury/p-network.js new file mode 100644 index 0000000000..ee1d1c2a4b --- /dev/null +++ b/projects/treasury/p-network.js @@ -0,0 +1,17 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x015ed76723aaf0ef9960dd66631d2ecac77e4156"; +const treasury2 = "0xabfd88db78d2503af372cb9c21cdc2f181232b4f" +const treasury3 = "0xdd92eb1478d3189707ab7f4a5ace3a615cdd0476" + +const PNT = "0x89ab32156e46f46d02ade3fecbe5fc4243b9aaed" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ], + owners: [treasury, treasury2, treasury3], + ownTokens: [PNT], + }, +}) \ No newline at end of file diff --git a/projects/treasury/paladin-finance.js b/projects/treasury/paladin-finance.js index 03f878c1e1..7663eb1611 100644 --- a/projects/treasury/paladin-finance.js +++ b/projects/treasury/paladin-finance.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xb95A4779CceDc53010EF0df8Bf8Ed6aEB0E8c2B2"; @@ -11,18 +12,18 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0xD533a949740bb3306d119CC777fa900bA034cd52',//CRV - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.CRV, + ADDRESSES.ethereum.USDC, '0xba100000625a3754423978a60c9317c58a424e3D',//BAL - '0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7',//cvxCRV + ADDRESSES.ethereum.cvxCRV, '0x6DEA81C8171D0bA574754EF6F8b412F2Ed88c54D',//LQTY '0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68',//INV '0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF',//ALCX '0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F',//SDT '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490',//3CRV '0x4104b135DBC9609Fc1A9490E61369036497660c8',//APY - '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32',//LDO + ADDRESSES.ethereum.LIDO, ], owners: [treasury, treasury1, ], diff --git a/projects/treasury/paraswap.js b/projects/treasury/paraswap.js index 245d2ad2d9..5b27543c2c 100644 --- a/projects/treasury/paraswap.js +++ b/projects/treasury/paraswap.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x5A61D9214adEFD7669428a03A4e8734A00E9F464"; @@ -15,6 +16,18 @@ module.exports = treasuryExports({ nullAddress ], owners: [treasury, treasury2, vesting1, vesting2, vesting3, vesting4], - ownTokens: [PARA], + ownTokens: [PARA, "0xcb0e14e96f2cefa8550ad8e4aea344f211e5061d"], + }, + optimism: { + tokens: [ + ADDRESSES.optimism.OP + ], + owners: ["0xb8313eaf73aed8fea1d9930df199b3c1bdb67b47"], + }, + arbitrum: { + tokens: [ + "0x912ce59144191c1204e64559fe8253a0e49e6548" + ], + owners: ["0xfe98240ddAEDF78E278C28F1EdD690ee1a774e66"], }, }) \ No newline at end of file diff --git a/projects/treasury/parrot-protocol.js b/projects/treasury/parrot-protocol.js index 6c69658db9..3e57af2334 100644 --- a/projects/treasury/parrot-protocol.js +++ b/projects/treasury/parrot-protocol.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x0B70A2653B6E7BF44A3c80683E9bD9B90489F92A"; @@ -6,9 +7,9 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',//stETH - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',//WBTC + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.STETH,//stETH + ADDRESSES.ethereum.WBTC,//WBTC ], owners: [treasury], }, diff --git a/projects/treasury/peardao.js b/projects/treasury/peardao.js index c86482f56d..19c17a34cc 100644 --- a/projects/treasury/peardao.js +++ b/projects/treasury/peardao.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require('../helper/unwrapLPs') -const BUSD_TOKEN_CONTRACT = '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56'; -const USDT_TOKEN_CONTRACT = '0x55d398326f99059ff775485246999027b3197955'; -const USDC_TOKEN_CONTRACT = '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d'; -const WBNB_TOKEN_CONTRACT = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'; -const BTCB_TOKEN_CONTRACT = '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c'; +const BUSD_TOKEN_CONTRACT = ADDRESSES.bsc.BUSD; +const USDT_TOKEN_CONTRACT = ADDRESSES.bsc.USDT; +const USDC_TOKEN_CONTRACT = ADDRESSES.bsc.USDC; +const WBNB_TOKEN_CONTRACT = ADDRESSES.bsc.WBNB; +const BTCB_TOKEN_CONTRACT = ADDRESSES.bsc.BTCB; const USTC_TOKEN_CONTRACT = '0x23396cF899Ca06c4472205fC903bDB4de249D6fC'; const TREASURY_ADDRESS = '0x263e0910C8c1B77B80CB9947B0FAC3735a6FEf4C'; diff --git a/projects/treasury/pegasusfinance.js b/projects/treasury/pegasusfinance.js index efd98e2769..a60beb31e1 100644 --- a/projects/treasury/pegasusfinance.js +++ b/projects/treasury/pegasusfinance.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasuryContract = "0x680b96DDC962349f59F54FfBDe2696652669ED60"; -const WETH_OPTIMISM = "0x4200000000000000000000000000000000000006"; +const WETH_OPTIMISM = ADDRESSES.tombchain.FTM; diff --git a/projects/treasury/perion.js b/projects/treasury/perion.js index a27c0022e7..0096978069 100644 --- a/projects/treasury/perion.js +++ b/projects/treasury/perion.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const PERC = '0x60bE1e1fE41c1370ADaF5d8e66f07Cf1C2Df2268'; const treasuryContractsETH = [ @@ -8,11 +9,13 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.DAI, '0x60bE1e1fE41c1370ADaF5d8e66f07Cf1C2Df2268', // PERC '0x549020a9Cb845220D66d3E9c6D9F9eF61C981102', // SIDIUS '0x34Be5b8C30eE4fDe069DC878989686aBE9884470', //SENATE - '0xdAC17F958D2ee523a2206206994597C13D831ec7', //USDT + ADDRESSES.ethereum.USDT, //USDT + ADDRESSES.ethereum.STETH, //stETH ], owners: treasuryContractsETH, ownTokens: [PERC], diff --git a/projects/treasury/perpetual-protocol.js b/projects/treasury/perpetual-protocol.js index 0a7e622879..720990d2d4 100644 --- a/projects/treasury/perpetual-protocol.js +++ b/projects/treasury/perpetual-protocol.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const perpProtocolTreasury = "0xD374225abB84DCA94e121F0B8A06B93E39aD7a99"; @@ -12,9 +13,9 @@ module.exports = treasuryExports({ '0xca1207647Ff814039530D7d35df0e1Dd2e91Fa84',//DHT '0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F',//SDT '0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b',//DPI - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC '0xE0e05c43c097B0982Db6c9d626c4eb9e95C3b9ce',//USF - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.DAI,//DAI '0x1337DEF16F9B486fAEd0293eb623Dc8395dFE46a' //ARMOR ], owners: [perpProtocolTreasury], diff --git a/projects/treasury/piedao.js b/projects/treasury/piedao.js index 4687d58591..89e21dd703 100644 --- a/projects/treasury/piedao.js +++ b/projects/treasury/piedao.js @@ -1,19 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const pieDaoTreasury = "0x3bCF3Db69897125Aa61496Fc8a8B55A5e3f245d5"; const DOUGH = "0xad32A8e6220741182940c5aBF610bDE99E737b2D"; const DOUGH_LP = "0xE8846B27988FF52c371D5BD27Bf8DBA4097C93D2" +const treasury = "0x267070804c46a47aa92a76d59d70c05d30de46e3" + module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, '0x31429d1856aD1377A8A0079410B297e1a9e214c2',//ANGLE '0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26',//OGN - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.DAI,//DAI '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B',//TRIBE '0x090185f2135308BaD17527004364eBcC2D37e5F6',//SPELL - '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',//SNX + ADDRESSES.ethereum.SNX,//SNX '0xdB25f211AB05b1c97D595516F45794528a807ad8',//EURS '0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6',//STG '0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68',//INV @@ -22,15 +25,15 @@ module.exports = treasuryExports({ '0xa693B19d2931d498c5B318dF961919BB4aee87a5',//UST '0xE80C0cd204D654CEbe8dd64A4857cAb6Be8345a3',//JPEG '0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2',//MTA - '0x6810e776880C02933D47DB1b9fc05908e5386b96',//GNO + ADDRESSES.ethereum.GNO,//GNO '0x01BA67AAC7f75f647D94220Cc98FB30FCc5105Bf',//LYRA '0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919',//RAI '0x3472A5A71965499acd81997a54BBA8D852C6E53d',//BADGER '0x3Ec8798B81485A254928B70CDA1cf0A2BB0B74D7',//GRO - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84' //stETH + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.STETH //stETH ], - owners: [pieDaoTreasury], + owners: [pieDaoTreasury, treasury], ownTokens: [DOUGH, DOUGH_LP], }, }) \ No newline at end of file diff --git a/projects/treasury/platypus.js b/projects/treasury/platypus.js index d0dfc148fa..96f5b70c33 100644 --- a/projects/treasury/platypus.js +++ b/projects/treasury/platypus.js @@ -1,20 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x068e297e8FF74115C9E1C4b5B83B700FdA5aFdEB"; const tokens = [ nullAddress, - "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70", // DAI + ADDRESSES.avax.DAI, // DAI "0x2b2C81e08f1Af8835a78Bb2A90AE924ACE0eA4bE", // sAVAX - "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", // USDC - "0xc7198437980c041c805A1EDcbA50c1Ce5db95118", // USDT.e - "0x9C9e5fD8bbc25984B178FdCE6117Defa39d2db39", // BUSD - "0x152b9d0FdC40C096757F570A51E494bd4b943E50", // BTC.b - "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", // USDt + ADDRESSES.avax.USDC, // USDC + ADDRESSES.avax.USDT_e, // USDT.e + ADDRESSES.polygon.BUSD, // BUSD + ADDRESSES.avax.BTC_b, // BTC.b + ADDRESSES.avax.USDt, // USDt "0xF7D9281e8e363584973F946201b82ba72C965D27", // yyAVAX - "0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd", // JOE + ADDRESSES.avax.JOE, // JOE "0x026187BdbC6b751003517bcb30Ac7817D5B766f8", // H2O - "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", // WAVAX + ADDRESSES.avax.WAVAX, // WAVAX "0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5", // QI "0xd9D90f882CDdD6063959A9d837B05Cb748718A05", // MORE "0x77777777777d4554c39223C354A05825b2E8Faa3", // YETI diff --git a/projects/treasury/pleasrdao.js b/projects/treasury/pleasrdao.js index 6a795d2af4..7278d0f805 100644 --- a/projects/treasury/pleasrdao.js +++ b/projects/treasury/pleasrdao.js @@ -1,16 +1,27 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const pleasrDaoTreasury = "0xF5c27c6fE782cbB5c85989ea3e75754748153459"; +const treasury = "0xf894fea045eccb2927e2e0cb15c12debee9f2be8" +const lp = "0xC36442b4a4522E871399CD717aBDD847Ab11FE88" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC '0x300a902513815028e97FC79E92082Ce6a98d3b74',//SOX '0xbA6B0dbb2bA8dAA8F5D6817946393Aef8D3A4487',//HSF '0xBf9e72eEb5adB8B558334c8672950B7a379D4266',//CUBT + "0xBAac2B4491727D78D2b78815144570b9f2Fe8899", + ADDRESSES.ethereum.USDT, + "0xc96F20099d96b37D7Ede66fF9E4DE59b9B1065b1", + "0x4CD0c43B0D53bc318cc5342b77EB6f124E47f526", + "0x1A4b46696b2bB4794Eb3D4c26f1c55F9170fa4C5", + ADDRESSES.ethereum.DAI ], - owners: [pleasrDaoTreasury], + owners: [pleasrDaoTreasury, treasury, lp], + resolveLP: true, + resolveUniV3: true, }, }) diff --git a/projects/treasury/plutusdao.js b/projects/treasury/plutusdao.js index ec89691efb..f7991f1eab 100644 --- a/projects/treasury/plutusdao.js +++ b/projects/treasury/plutusdao.js @@ -2,7 +2,10 @@ const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xBbE98D590d7eB99F4a236587f2441826396053d3"; -const tokens = [nullAddress]; +const tokens = [ + nullAddress, + "0x10393c20975cF177a3513071bC110f7962CD67da" +]; const ownTokens = [ "0x51318B7D00db7ACc4026C88c3952B66278B6A67F", // PLS diff --git a/projects/treasury/pooltogether.js b/projects/treasury/pooltogether.js index b4e2c57771..9e219bf46f 100644 --- a/projects/treasury/pooltogether.js +++ b/projects/treasury/pooltogether.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress } = require("../helper/treasury"); const { unwrapUniswapV3NFTs, @@ -13,15 +14,15 @@ const POOL = "0x0cEC1A9154Ff802e7934Fc916Ed7Ca50bDE6844e"; const tokens = [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", //USDC - "0x6B175474E89094C44Da98b954EedeAC495271d0F", //DAI + ADDRESSES.ethereum.USDC, //USDC + ADDRESSES.ethereum.DAI, //DAI "0x028171bCA77440897B824Ca71D1c56caC55b68A3", //aDAI - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", //WETH - "0xdAC17F958D2ee523a2206206994597C13D831ec7", //USDT + ADDRESSES.ethereum.WETH, //WETH + ADDRESSES.ethereum.USDT, //USDT "0xDe30da39c46104798bB5aA3fe8B9e0e1F348163F", //GTC "0x4da27a545c0c5B758a6BA100e3a049001de870f5", //stkAAVE "0xdd4d117723C257CEe402285D3aCF218E9A8236E1", // ptausdc - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", // stETH + ADDRESSES.ethereum.STETH, // stETH "0xD5f60154BEf3564EbFBe9bB236595f0da548a742", // spethwin ]; @@ -51,7 +52,7 @@ module.exports = { tvl: sumTokensExport({ tokens: [ nullAddress, - "0x4200000000000000000000000000000000000042", // OP + ADDRESSES.optimism.OP, // OP ], owners: [optreasury], }), diff --git a/projects/treasury/premia.js b/projects/treasury/premia.js index de7903b22c..c915b7a41c 100644 --- a/projects/treasury/premia.js +++ b/projects/treasury/premia.js @@ -1,16 +1,17 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f', // WBTC - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI + ADDRESSES.arbitrum.WBTC, // WBTC + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.WETH, // WETH + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI '0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60', // LDO - '0xf97f4df75117a78c1a5a0dbb814af92458539fb4', // LINK + ADDRESSES.arbitrum.LINK, // LINK '0x82e3a8f066a6989666b031d916c43672085b1582', // YEARN ], owners: ['0xa079c6b032133b95cf8b3d273d27eeb6b110a469'], diff --git a/projects/treasury/puli.js b/projects/treasury/puli.js index 47c1c5b36d..810239d770 100644 --- a/projects/treasury/puli.js +++ b/projects/treasury/puli.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unknownTokens') // const PULI_TOKEN_STAKING_CONTRACT = '0x864d434308997e9648838d23f3eedf5d0fd17bea'; const chain = 'bsc' @@ -11,14 +12,14 @@ module.exports = { tokensAndOwners: [ [nullAddress, TREASURY1], [nullAddress, TREASURY2], - ['0xe9e7cea3dedca5984780bafc599bd69add087d56', TREASURY1], + [ADDRESSES.bsc.BUSD, TREASURY1], ['0xC17c30e98541188614dF99239cABD40280810cA3', TREASURY1], - ['0x55d398326f99059fF775485246999027B3197955', TREASURY1], + [ADDRESSES.bsc.USDT, TREASURY1], ['0x3FF5cbE338153063D8251d2B6a22A437EC09Eef3', TREASURY1], ['0x3FF5cbE338153063D8251d2B6a22A437EC09Eef3', TREASURY2], - ['0xe9e7cea3dedca5984780bafc599bd69add087d56', TREASURY2], + [ADDRESSES.bsc.BUSD, TREASURY2], ['0xC17c30e98541188614dF99239cABD40280810cA3', TREASURY2], - ['0x55d398326f99059fF775485246999027B3197955', TREASURY2], + [ADDRESSES.bsc.USDT, TREASURY2], ], }) } diff --git a/projects/treasury/push.js b/projects/treasury/push.js new file mode 100644 index 0000000000..25aa7ebb90 --- /dev/null +++ b/projects/treasury/push.js @@ -0,0 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x19Ff5f2C05aC6a303aF6d5002C99686e823EBE72"; +const push = "0xf418588522d5dd018b425E472991E52EBBeEEEEE" + +module.exports = treasuryExports({ + ethereum: { + owners: [treasury], + ownTokens: [push], + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + "0xAf31Fd9C3B0350424BF96e551d2D1264d8466205", + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.SAFE, + ], + }, +}); \ No newline at end of file diff --git a/projects/treasury/qidao.js b/projects/treasury/qidao.js new file mode 100644 index 0000000000..09fbde3d48 --- /dev/null +++ b/projects/treasury/qidao.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xf32e759d5f1c63ed62042497d3a50f044ee0982b"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury], + }, +}) \ No newline at end of file diff --git a/projects/treasury/railgun.js b/projects/treasury/railgun.js index ec56a2a580..f303f476c7 100644 --- a/projects/treasury/railgun.js +++ b/projects/treasury/railgun.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { tokens } = require("../helper/chain/algorand"); const { nullAddress, treasuryExports } = require("../helper/treasury"); @@ -16,40 +17,40 @@ module.exports = treasuryExports({ tokens: [ // Ethereum Assets nullAddress, - "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",//weth + ADDRESSES.ethereum.WETH, "0x295B42684F90c77DA7ea46336001010F2791Ec8c",//xi - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",//usdc - "0xdAC17F958D2ee523a2206206994597C13D831ec7",//usdt - "0x6B175474E89094C44Da98b954EedeAC495271d0F",//dai + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0",//fxs - "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",//wsteth - "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B",//cvx + ADDRESSES.ethereum.WSTETH, + ADDRESSES.ethereum.CVX, "0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D",//renbtc - "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7",//cvxcrv + ADDRESSES.ethereum.cvxCRV, "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0",//wbtc "0x99D8a9C45b2ecA8864373A26D1459e3Dff1e17F3",//mim - "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0",//lusd + ADDRESSES.ethereum.LUSD, "0x090185f2135308BaD17527004364eBcC2D37e5F6",//spell - "0x4Fabb145d64652a948d72533023f6E7A623C7C53",//busd + ADDRESSES.ethereum.BUSD, "0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0",//albt - "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F",//snx + ADDRESSES.ethereum.SNX, "0x509A38b7a1cC0dcd83Aa9d06214663D9eC7c7F4a",//bst - "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE",//shib - "0x514910771AF9Ca656af840dff83E8264EcF986CA",//link + ADDRESSES.ethereum.INU, + ADDRESSES.ethereum.LINK, "0x21381e026Ad6d8266244f2A583b35F9E4413FA2a",//form - "0x2e9d63788249371f1DFC918a52f8d799F4a38C94",//toke + ADDRESSES.ethereum.TOKE, "0x767FE9EDC9E0dF98E07454847909b5E959D7ca0E",//ilv - "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",//mkr + ADDRESSES.ethereum.MKR, "0xc5fb36dd2fb59d3b98deff88425a3f425ee469ed",//tsuka - "0x853d955acef822db058eb8505911ed77f175b99e",//frax + ADDRESSES.ethereum.FRAX, "0x2223bF1D7c19EF7C06DAB88938EC7B85952cCd89",//kxa "0x0f2d719407fdbeff09d87557abb7232601fd9f29",//syn "0x7aE1D57b58fA6411F32948314BadD83583eE0e8C",//paper "0xf65B5C5104c4faFD4b709d9D60a185eAE063276c",//tru "0x3597bfd533a99c9aa083587b074434e61eb0a258",//dent "0xcc8fa225d80b9c7d42f96e9570156c65d6caaa25",//slp - "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",//uni - "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0",//matic + ADDRESSES.ethereum.UNI, + ADDRESSES.ethereum.MATIC, "0x9aE380F0272E2162340a5bB646c354271c0F5cFC",//cnc "0x07bac35846e5ed502aa91adf6a9e7aa210f2dcbe",//erowan "0xfb7b4564402e5500db5bb6d63ae671302777c75a",//dext @@ -65,13 +66,13 @@ module.exports = treasuryExports({ tokens: [ // bsc Assets nullAddress, - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",//wbnb - "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56",//busd + ADDRESSES.bsc.WBNB, + ADDRESSES.bsc.BUSD, "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3",//dai - "0x55d398326f99059fF775485246999027B3197955",//bsc-usd + ADDRESSES.bsc.USDT, "0x39cC67690D0F2d4aCD68d3d9B612a80D780b84c0",//agro "0xbF7c81FFF98BbE61B40Ed186e4AfD6DDd01337fe",//egld - "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",//usdc + ADDRESSES.bsc.USDC, "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82",//cake "0xAdBAF88B39D37Dc68775eD1541F1bf83A5A45feB",//coti "0xBfACD29427fF376FF3BC22dfFB29866277cA5Fb4",//pstn @@ -85,27 +86,26 @@ module.exports = treasuryExports({ tokens: [ // polygon Assets nullAddress, - "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",//weth - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",//usdc - "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",//usdt - "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063",//dai + ADDRESSES.polygon.WETH_1, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.DAI, "0x1a3acf6D19267E2d3e7f898f42803e90C9219062",//fxs - "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",//wsteth - "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6",//wbtc + ADDRESSES.polygon.WBTC, "0xE5417Af564e4bFDA1c483642db72007871397896",//gns "0x2C89bbc92BD86F8075d1DEcc58C7F4E0107f286b",//avax "0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39",//link "0xfe712251173A2cd5F5bE2B46Bb528328EA3565E1",//mvi - "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",//wmatic + ADDRESSES.polygon.WMATIC_2, "0x752d59604d72b6DC44196f4A39A3f07779417407",//methmoon "0x8f006D1e1D9dC6C98996F50a4c810F17a47fBF19",//nsfw - "0xDBf31dF14B66535aF65AaC99C32e9eA844e14501",//renbtc + ADDRESSES.fantom.renBTC, "0x9c891326Fd8b1a713974f73bb604677E1E63396D",//islami "0x45c32fA6DF82ead1e2EF74d17b76547EDdFaFF89",//frax "0xB0B195aEFA3650A6908f15CdaC7D92F8a5791B0B",//bob "0x580A84C73811E1839F75d86d75d88cCa0c241fF4",//qi "0x980111ae1B84E50222C8843e3A7a038F36Fecd2b",//stack - "0xB5C064F955D8e7F38fE0460C556a72987494eE17",//quick + ADDRESSES.polygon.QUICK, "0x6C0AB120dBd11BA701AFF6748568311668F63FE0",//apw "0xE0339c80fFDE91F3e20494Df88d4206D86024cdF",//elon ], @@ -116,10 +116,10 @@ module.exports = treasuryExports({ tokens: [ // arbitrum assets nullAddress, - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",//weth - "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", - "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8" + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC ], owners: [arbitrumTreasury], ownTokens: [] diff --git a/projects/treasury/rarible.js b/projects/treasury/rarible.js index 4c7dd7e114..c1cc92f36e 100644 --- a/projects/treasury/rarible.js +++ b/projects/treasury/rarible.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const rarTreasury = "0xFDfF6b56CcE39482032b27140252FF4F16432785"; @@ -10,11 +11,11 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI '0x028171bCA77440897B824Ca71D1c56caC55b68A3',//aDAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT ], owners: [rarTreasury, rarTreasury1], ownTokens: [RARI], diff --git a/projects/treasury/redacted.js b/projects/treasury/redacted.js new file mode 100644 index 0000000000..0dcf99dcbd --- /dev/null +++ b/projects/treasury/redacted.js @@ -0,0 +1,52 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x086c98855df3c78c6b481b6e1d47bef42e9ac36b" +const treasury2 = "0xa52fd396891e7a74b641a2cb1a6999fcf56b077e" +const treasury3 = "0x42e39157ec770197013e619c0eea8e1139f332db" +const treasury4 = "0xa722ebccd25adb06e5d0190b240d1f4039839822" +const treasury5OP = "0x2e33a660742e813ad948fb9f7d682fe461e5fbf3" +const treasury6ARB = "0x64769c53ff91b83fe9830776a4b85a1f4e1edaad" +const BTRF = "0xc55126051B22eBb829D00368f4B12Bde432de5Da" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDT, + "0x2ba592F78dB6436527729929AAf6c908497cB200", // CREAM + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.SAFE, + "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + ADDRESSES.ethereum.DAI, + "0xaCe78D9BaB82b6B4783120Dba82aa10B040A14D9", + "0xBCe0Cf87F513102F22232436CCa2ca49e815C3aC", + ADDRESSES.ethereum.CRV, + ], + ownTokens: [BTRF], + owners: [treasury, treasury2,treasury3,treasury4], + }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.OP, + "0xaf9fe3b5ccdae78188b1f8b9a49da7ae9510f151", // DHT + ADDRESSES.optimism.USDC, + "0x3f56e0c36d275367b8c502090edf38289b3dea0d", // QI + "0x97513e975a7fa9072c72c92d8000b0db90b163c5", //BEETS + "0x39fde572a18448f8139b7788099f0a0740f51205", //OATH + "0x00a35fd824c717879bf370e70ac6868b95870dfb", //IB + "0x3c8b650257cfb5f272f799f5e2b4e65093a11a05", //VELO + ], + owners: [treasury5OP], + }, + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.USDC, + "0x10393c20975cf177a3513071bc110f7962cd67da", // JONES + ], + owners: [treasury6ARB], + }, +}); \ No newline at end of file diff --git a/projects/treasury/relay.js b/projects/treasury/relay.js new file mode 100644 index 0000000000..41c93ce360 --- /dev/null +++ b/projects/treasury/relay.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xf803dce584b7ecb57f90af0b85e67dac7e0da6d9"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/revoluzion.js b/projects/treasury/revoluzion.js index ee305f354a..dc8b4b0ef4 100644 --- a/projects/treasury/revoluzion.js +++ b/projects/treasury/revoluzion.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require('../helper/unknownTokens') const REVOLUZION_TOKEN_CONTRACT = '0x7D89c67d3c4E72E8c5c64BE201dC225F99d16aCa'; const REVOLUZION_DIAMOND_HAND_CONTRACT = '0xA72a15369Fe9840a20c40F18b1695eF168fFFa77'; const REVOLUZION_DIVIDEND_CONTRACT = '0x23259212B5CD09A511440b9DD472d339C716dEb5'; -const BUSD = '0xe9e7cea3dedca5984780bafc599bd69add087d56' +const BUSD = ADDRESSES.bsc.BUSD module.exports = { bsc: { diff --git a/projects/treasury/ribbon.js b/projects/treasury/ribbon.js index 311e75a76b..899bc9c364 100644 --- a/projects/treasury/ribbon.js +++ b/projects/treasury/ribbon.js @@ -1,7 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); // Treasury const treasury = "0xDAEada3d210D2f45874724BeEa03C7d4BBD41674"; +const treasury2 = "0x42c1357aaa3243ea30c713cdfed115d09f10a71d" +const treasury3 = "0x6adeb4fddb63f08e03d6f5b9f653be8b65341b35" const RBN = "0x6123B0049F904d730dB3C36a31167D9d4121fA6B"; module.exports = treasuryExports({ @@ -9,22 +12,22 @@ module.exports = treasuryExports({ tokens: [ // Ethereum Assets nullAddress, - "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", // wstETH - "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32", // LDO - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", // WBTC - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0xae78736Cd615f374D3085123A210448E74Fc6393", // rETH - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", // stETH + ADDRESSES.ethereum.WSTETH, + ADDRESSES.ethereum.LIDO, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.WBTC, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.RETH, + ADDRESSES.ethereum.STETH, "0xba100000625a3754423978a60c9317c58a424e3D", // BAL "0x4d224452801ACEd8B2F0aebE155379bb5D594381", // APE "0x090185f2135308BaD17527004364eBcC2D37e5F6", // SPELL - "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", // UNI - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.UNI, + ADDRESSES.ethereum.SAFE, "0xa354F35829Ae975e850e23e9615b11Da1B3dC4DE", // yvUSDC "0x25751853Eab4D0eB3652B5eB6ecB102A2789644B", // rETH-THETA ], - owners: [treasury], + owners: [treasury, treasury2, treasury3], ownTokens: [ RBN, "0xd590931466cdD6d488A25da1E89dD0539723800c", // 50RBN-50USDC diff --git a/projects/treasury/rotki.js b/projects/treasury/rotki.js new file mode 100644 index 0000000000..3420dd3cda --- /dev/null +++ b/projects/treasury/rotki.js @@ -0,0 +1,42 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x9531C059098e3d194fF87FebB587aB07B30B1306"; + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, + "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72", + "0x8290333ceF9e6D528dD5618Fb97a76f268f3EDD4", + "0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC", + ADDRESSES.ethereum.sUSD, + ADDRESSES.ethereum.MKR + ], + owners: [treasury], + ownTokens: [], + }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.USDT, + ADDRESSES.optimism.OP + ], + owners: [treasury] + }, + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.ARB, + ADDRESSES.arbitrum.DAI, + ADDRESSES.arbitrum.WETH + ], + owners: [treasury] + }, +}); \ No newline at end of file diff --git a/projects/treasury/router.js b/projects/treasury/router.js new file mode 100644 index 0000000000..ad39b2f063 --- /dev/null +++ b/projects/treasury/router.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xdb8f4c4c68e5e5eb501fee1adaa87ee767bcade7"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/saddle.js b/projects/treasury/saddle.js index dd64d2b1ae..21e629170a 100644 --- a/projects/treasury/saddle.js +++ b/projects/treasury/saddle.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ @@ -6,7 +7,7 @@ module.exports = treasuryExports({ '0x5575552988a3a80504bbaeb1311674fcfd40ad4b', '0x2cab3abfc1670d1a452df502e216a66883cdf079', '0x17fc002b466eec40dae837fc4be5c67993ddbd6f', - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', + ADDRESSES.arbitrum.USDC, ], owners: ['0x8e6e84ddab9d13a17806d34b097102605454d147'], ownTokens: [], diff --git a/projects/treasury/sakai-vault.js b/projects/treasury/sakai-vault.js index 04e0e88f7b..a264569734 100644 --- a/projects/treasury/sakai-vault.js +++ b/projects/treasury/sakai-vault.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const Treasury = "0x6b269c07e8f94f0fa1769cbd362879afea0206db"; @@ -8,7 +9,7 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - "0x55d398326f99059fF775485246999027B3197955" + ADDRESSES.bsc.USDT ], owners: [Treasury], ownTokens: [SAKAI], diff --git a/projects/treasury/savvy.js b/projects/treasury/savvy.js new file mode 100644 index 0000000000..4aa3e9e0ad --- /dev/null +++ b/projects/treasury/savvy.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x4f54cab19b61138e3c622a0bd671c687481ec030"; +const SVY = "0x43aB8f7d2A8Dd4102cCEA6b438F6d747b1B9F034" +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.WBTC, + ADDRESSES.arbitrum.WETH, + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' + ], + owners: [treasury,], + ownTokens: [SVY], + }, +}) \ No newline at end of file diff --git a/projects/treasury/shapeshift.js b/projects/treasury/shapeshift.js index c5f4209440..2ae2fc6b4e 100644 --- a/projects/treasury/shapeshift.js +++ b/projects/treasury/shapeshift.js @@ -1,24 +1,26 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const shaTreasury = "0x90A48D5CF7343B08dA12E067680B4C6dbfE551Be"; - +const LP = "0x470e8de2eBaef52014A47Cb5E6aF86884947F08c" const FOX = "0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d"; +const tFOX = "0x808D3E6b23516967ceAE4f17a5F9038383ED5311" module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0',//LUSD - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.LUSD,//LUSD + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT '0x6f80310CA7F2C654691D1383149Fa1A57d8AB1f8',//SILO - '0x2e9d63788249371f1DFC918a52f8d799F4a38C94',//TOKE + ADDRESSES.ethereum.TOKE,//TOKE ], owners: [shaTreasury], - ownTokens: [FOX], + ownTokens: [FOX, LP, tFOX], }, }) \ No newline at end of file diff --git a/projects/treasury/shibui.js b/projects/treasury/shibui.js index b0285ed1b1..851bc8f5d4 100644 --- a/projects/treasury/shibui.js +++ b/projects/treasury/shibui.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const CHAINS = ["boba"]; const Boba_SHIBUI = "0xf08ad7c3f6b1c6843ba027ad54ed8ddb6d71169b"; -const Boba_BOBA = "0xa18bF3994C0Cc6E3b63ac420308E5383f53120D7"; -const Boba_USDT = "0x5de1677344d3cb0d7d465c10b72a8f60699c062d"; +const Boba_BOBA = ADDRESSES.boba.BOBA; +const Boba_USDT = ADDRESSES.boba.USDT; const Boba_SHIBUI_WETH = "0xcE9F38532B3d1e00a88e1f3347601dBC632E7a82"; const Boba_SHIBUI_USDT = "0x3f714fe1380ee2204ca499d1d8a171cbdfc39eaa"; const Boba_4Koyo = "0xDAb3Fc342A242AdD09504bea790f9b026Aa1e709"; diff --git a/projects/treasury/silo-finance.js b/projects/treasury/silo-finance.js new file mode 100644 index 0000000000..61f3cabaa3 --- /dev/null +++ b/projects/treasury/silo-finance.js @@ -0,0 +1,25 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { simulateTransaction } = require("@project-serum/anchor/dist/cjs/utils/rpc"); +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const treasury = "0xdff2aea378e41632e45306a6de26a7e0fd93ab07"; +const treasury2 = "0xe1f03b7b0ebf84e9b9f62a1db40f1efb8faa7d22" + +const SILO = "0x6f80310CA7F2C654691D1383149Fa1A57d8AB1f8" + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.LUSD,//LUSD + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT + ADDRESSES.ethereum.TOKE,//TOKE + ], + owners: [treasury, treasury2], + ownTokens: [SILO], + }, +}) \ No newline at end of file diff --git a/projects/treasury/spartacus.js b/projects/treasury/spartacus.js index 3a6aec1432..b81b51ec62 100644 --- a/projects/treasury/spartacus.js +++ b/projects/treasury/spartacus.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const sparTreasury1 = "0x8CFA87aD11e69E071c40D58d2d1a01F862aE01a8"; @@ -9,8 +10,8 @@ module.exports = treasuryExports({ fantom: { tokens: [ nullAddress, - '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E',//DAI - '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',//WFTM + ADDRESSES.fantom.DAI,//DAI + ADDRESSES.fantom.WFTM,//WFTM ], owners: [sparTreasury1], ownTokens: [SPA], diff --git a/projects/treasury/sphere-finance.js b/projects/treasury/sphere-finance.js new file mode 100644 index 0000000000..90f11a4e5f --- /dev/null +++ b/projects/treasury/sphere-finance.js @@ -0,0 +1,63 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const investment_treasury_polygon = "0x20d61737f972eecb0af5f0a85ab358cd083dd56a" +const liquid_pool_treasury_polygon = "0x1a2ce410a034424b784d4b228f167a061b94cff4" +const rfv_treasury = "0x826b8d2d523e7af40888754e3de64348c00b99f4" +const treasuryBSC = "0x124e8498a25eb6407c616188632d40d80f8e50b0" +const treasuryARB ="0xA6efac6a6715CcCE780f8D9E7ea174C4d85dbE02" +const treasuryOP = "0x93b0a33911de79b897eb0439f223935af5a60c24" +const treasuryCH = "0x74b514bc1b9480e1daca0f83a1e42b86291eadef" +const multisig = "0x79e51953f023df68fc46170d1ee47fd5a49d3b6e" + +module.exports = treasuryExports({ + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.WMATIC_1, + "0x236eeC6359fb44CCe8f97E99387aa7F8cd5cdE1f", + ADDRESSES.polygon.WETH_1, + ADDRESSES.polygon.WMATIC, + ADDRESSES.polygon.USDC + + ], + owners: [investment_treasury_polygon, liquid_pool_treasury_polygon, rfv_treasury, treasuryCH, multisig], + ownTokens: ["0x17e9C5b37283ac5fBE527011CeC257b832f03eb3", "0x8D546026012bF75073d8A586f24A5d5ff75b9716"], + }, + bsc: { + tokens: [ + nullAddress, + "0xe80772Eaf6e2E18B651F160Bc9158b2A5caFCA65", + "0x52F24a5e03aee338Da5fd9Df68D2b6FAe1178827", + ADDRESSES.bsc.BUSD, + "0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11" + ], + owners: [treasuryBSC], + ownTokens: [], + }, + arbitrum: { + tokens: [ + nullAddress, + "0xe80772Eaf6e2E18B651F160Bc9158b2A5caFCA65", + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.GMX, + ADDRESSES.arbitrum.WBTC, + "0x15b2fb8f08E4Ac1Ce019EADAe02eE92AeDF06851", + "0xC36442b4a4522E871399CD717aBDD847Ab11FE88" + ], + owners: [treasuryARB], + ownTokens: [], + resolveUniV3: true, + }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.OP, + ADDRESSES.optimism.USDC, + "0x73cb180bf0521828d8849bc8CF2B920918e23032" + ], + owners: [treasuryOP], + ownTokens: [], + }, +}) \ No newline at end of file diff --git a/projects/treasury/spherium.js b/projects/treasury/spherium.js new file mode 100644 index 0000000000..a347f04b2b --- /dev/null +++ b/projects/treasury/spherium.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x2c41fb81cfc64cd1373058f2a13289819641d223"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/spiral-dao.js b/projects/treasury/spiral-dao.js new file mode 100644 index 0000000000..06d3ccc42f --- /dev/null +++ b/projects/treasury/spiral-dao.js @@ -0,0 +1,44 @@ +const sdk = require('@defillama/sdk') +const utils = require('../helper/utils'); +const { ethers } = require("ethers"); +const ADDRESSES = require('../helper/coreAssets.json') +const { USDC } = ADDRESSES.ethereum + + +// treasury address: 0xc47ec74a753acb09e4679979afc428cde0209639 +async function tvl(_, _1, _2, { api }) { + let balances = {}; + + const toWei = async(address, balance) => { + if (!+balance > 0) return; + const decimals = await api.call({ + abi: 'erc20:decimals', + target: address, + }) + return ethers.utils.parseUnits((balance >> 0).toString(), decimals).toString() + } + + const response = await utils.fetchURL('https://api.spiral.farm/data/eth/treasury'); + if (response.data.success) { + for (let [address, info] of Object.entries(response.data.tokens)){ + if (address === 'eth'){ + await sdk.util.sumSingleBalance(balances, 'ethereum', info.totalAmount) + } else { + await sdk.util.sumSingleBalance(balances, address, await toWei(address, info.totalAmount)) + } + + } + await sdk.util.sumSingleBalance(balances, USDC, + await toWei(USDC, response.data.extraUsdValues.tokenRedeemContractUsdcBalance)) + await sdk.util.sumSingleBalance(balances, USDC, response.data.extraUsdValues.bribes) + } + + return balances; +} + +module.exports = { + timetravel: false, + ethereum: { + tvl + } +} \ No newline at end of file diff --git a/projects/treasury/spookyswap.js b/projects/treasury/spookyswap.js index 6b1351d9d1..3df62f4649 100644 --- a/projects/treasury/spookyswap.js +++ b/projects/treasury/spookyswap.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const multisig = "0x1A11f5DF739bEca4974aCE4d8E5CE5ef5D854889"; @@ -6,11 +7,11 @@ module.exports = treasuryExports({ fantom: { tokens: [ nullAddress, - "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", // DAI + ADDRESSES.fantom.DAI, // DAI "0x74b23882a30290451A17c44f4F05243b6b58C76d", // ETH "0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e", // BEETS - "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", // WFTM - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", // USDC + ADDRESSES.fantom.WFTM, // WFTM + ADDRESSES.fantom.USDC, // USDC ], owners: [multisig], ownTokens: ["0x841FAD6EAe12c286d1Fd18d1d525DFfA75C7EFFE"], diff --git a/projects/treasury/spool-protocol.js b/projects/treasury/spool-protocol.js new file mode 100644 index 0000000000..3fede6fcf4 --- /dev/null +++ b/projects/treasury/spool-protocol.js @@ -0,0 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { treasuryExports, nullAddress } = require("../helper/treasury"); + +const treasury = "0xf6bc2e3b1f939c435d9769d078a6e5048aabd463"; +const SPOOL = "0x40803cEA2b2A32BdA1bE61d3604af6a814E70976" +const LP = "0xF3b675df63FB4889180d290A338fc15C0766fd64" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC + + ], + owners: [treasury], + ownTokens: [SPOOL, LP], + }, +}); diff --git a/projects/treasury/stakedao.js b/projects/treasury/stakedao.js index 45298c3f5d..2245cf2157 100644 --- a/projects/treasury/stakedao.js +++ b/projects/treasury/stakedao.js @@ -1,30 +1,32 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const eth = "0xF930EBBd05eF8b25B1797b9b2109DDC9B0d43063"; const poly = "0xdA2D2f638D6fcbE306236583845e5822554c02EA"; const avax = "0x69D6C2ACb2485D629E184BC4E1DD972D8DDD8669"; +const arbitrumTreasury = "0xfdb1157ac847d334b8912df1cd24a93ee22ff3d0" const ethTokens = [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + ADDRESSES.ethereum.USDC, "0x31429d1856aD1377A8A0079410B297e1a9e214c2", // ANGLE - "0xD533a949740bb3306d119CC777fa900bA034cd52", // CRV + ADDRESSES.ethereum.CRV, "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3CRV "0xc2544A32872A91F4A553b404C6950e89De901fdb", // FPIS "0xba100000625a3754423978a60c9317c58a424e3D", // BAL "0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF", // ALCX - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH + ADDRESSES.ethereum.WETH, "0x65Ef703f5594D2573eb71Aaf55BC0CB548492df4", // MULTI "0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", // agEUR "0xcAfE001067cDEF266AfB7Eb5A286dCFD277f3dE5", // PSP "0x4104b135DBC9609Fc1A9490E61369036497660c8", // APW - "0x514910771AF9Ca656af840dff83E8264EcF986CA", // LINK + ADDRESSES.ethereum.LINK, "0x579CEa1889991f68aCc35Ff5c3dd0621fF29b0C9", // IQ - "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", // AAVE + ADDRESSES.ethereum.AAVE, "0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421", // VSP "0x6f80310CA7F2C654691D1383149Fa1A57d8AB1f8", // SILO "0xd632f22692FaC7611d2AA1C0D552930D43CAEd3B", // FRAX3CRV-f - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.SAFE, "0x318C3a9373419aA57c7C8aa53Eef92814e975F51", // 90D-StakeDAO-sdFRAX3CRV-f-0 "0x43E54C2E7b3e294De3A155785F52AB49d87B9922", // asdCRV "0xA13a9247ea42D743238089903570127DdA72fE44", // bb-a-USD @@ -77,6 +79,12 @@ const polyTokens = [ "0x5aa0197D0d3E05c4aA070dfA2f54Cd67A447173A", // fagEUR-1 ]; +const arbTokens = [ + nullAddress, + "0x912CE59144191C1204E64559FE8253a0e49E6548", //arb + "0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978", //crv +] + const avaxTokens = [nullAddress]; module.exports = treasuryExports({ @@ -98,4 +106,8 @@ module.exports = treasuryExports({ ownTokenOwners: [avax], owners: [avax], }, + arbitrum: { + tokens: arbTokens, + owners: [arbitrumTreasury,], + }, }); diff --git a/projects/treasury/stargate-finance.js b/projects/treasury/stargate-finance.js new file mode 100644 index 0000000000..5fc1120b25 --- /dev/null +++ b/projects/treasury/stargate-finance.js @@ -0,0 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const index = require('../stargate-finance/index') +const { treasuryExports } = require('../helper/treasury') + +module.exports = treasuryExports({ + bsc: { + owner: '0xA2B48Ad28c09cc64CcCf9eD73e1EfceD052877d5', + tokens: [ADDRESSES.bsc.USDT, ADDRESSES.bsc.BUSD, '0xd397a40884ce00e662b419673e0b15cae628877f', '0x41516dca7efe69518ec414de35e5aa067788de3d',], + resolveLP: true, + } +}) \ No newline at end of file diff --git a/projects/treasury/stargate.js b/projects/treasury/stargate.js index 6375e38706..b9ddbaa5bf 100644 --- a/projects/treasury/stargate.js +++ b/projects/treasury/stargate.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const eth = "0x65bb797c2B9830d891D87288F029ed8dACc19705"; @@ -13,15 +14,15 @@ module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC + ADDRESSES.ethereum.USDC, "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490", // 3CRV DAI/USDC/USDT "0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F", // SDT - "0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", // cvxCRV - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.cvxCRV, + ADDRESSES.ethereum.SAFE, "0xFCc5c47bE19d06BF83eB04298b026F81069ff65b", // yCRV "0x616e8BfA43F920657B3497DBf40D6b1A02D4608d", // auraBAl "0xA13a9247ea42D743238089903570127DdA72fE44", // bb-a-USD - "0xFEEf77d3f69374f66429C91d732A244f074bdf74", // cvxFXS + ADDRESSES.ethereum.cvxFXS, "0x3175Df0976dFA876431C2E9eE6Bc45b65d3473CC", // crvFRAX "0xfA0F307783AC21C39E939ACFF795e27b650F6e68", // S*FRAX "0x0Faf1d2d3CED330824de3B8200fc8dc6E397850d", // S*DAI @@ -49,7 +50,7 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - "0x55d398326f99059fF775485246999027B3197955", // BSC_USD + ADDRESSES.bsc.USDT, "0x98a5737749490856b401DB5Dc27F522fC314A4e1", // S*BUSD "0x4e145a589e4c03cBe3d28520e4BF3089834289Df", // S*USDD "0x7BfD7f2498C4796f10b6C611D9db393D3052510C", // S*MAI @@ -65,7 +66,7 @@ module.exports = treasuryExports({ tokens: [ nullAddress, "0x1c272232Df0bb6225dA87f4dEcD9d37c32f63Eea", // S*FRAX - "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", // USDC + ADDRESSES.avax.USDC, "0x8736f92646B2542B3e5F3c63590cA7Fe313e283B", // S*MAI "0x29e38769f23701A2e4A8Ef0492e19dA4604Be62c", // S*USDt "0xEAe5c2F6B25933deB62f754f239111413A0A25ef", // S*USDt @@ -80,7 +81,7 @@ module.exports = treasuryExports({ polygon: { tokens: [ nullAddress, - "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", // USDC + ADDRESSES.polygon.USDC, "0x1c272232Df0bb6225dA87f4dEcD9d37c32f63Eea", // S*DAI "0x29e38769f23701A2e4A8Ef0492e19dA4604Be62c", // S*USDT "0x8736f92646B2542B3e5F3c63590cA7Fe313e283B", // S*miMATIC @@ -97,7 +98,7 @@ module.exports = treasuryExports({ owners: [arbitrum], tokens: [ nullAddress, - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", // USDC + ADDRESSES.arbitrum.USDC, "0xaa4BF442F024820B2C28Cd0FD72b82c63e66F56C", // S*FRAX "0xF39B7Be294cB36dE8c510e267B82bb588705d977", // S*MAI "0x915A55e36A01285A14f05dE6e81ED9cE89772f8e", // S*SGETH @@ -113,8 +114,8 @@ module.exports = treasuryExports({ owners: [optimism], tokens: [ nullAddress, - "0x4200000000000000000000000000000000000042", // OP - "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", // USDC + ADDRESSES.optimism.OP, + ADDRESSES.optimism.USDC, "0x165137624F1f692e69659f944BF69DE02874ee27", // S*DAI "0x368605D9C6243A80903b9e326f1Cddde088B8924", // S*FRAX "0x3533F5e279bDBf550272a199a223dA798D9eff78", // S*LUSD @@ -127,14 +128,14 @@ module.exports = treasuryExports({ "0x296F55F8Fb28E498B858d0BcDA06D955B2Cb3f97", // STG "0xec376c3856a4232bB6Ed9752d29402DDCD09A9A3", // STG/USDC RAKIS-5 "0xE7D2E422098D8b3AF11695A734d347563ae160Cb", // bb-STG-USD-gauge - "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", // STG-USDC UNI-V3 ], + resolveUniV3: true, }, fantom: { owners: [fantom], tokens: [ nullAddress, - "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", // USDC + ADDRESSES.fantom.USDC, "0x12edeA9cd262006cC3C4E77c90d2CD2DD4b1eb97", // S*USDC ], ownTokens: [ @@ -145,7 +146,7 @@ module.exports = treasuryExports({ metis: { owners: [metis], tokens: [ - "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000", // METIS + ADDRESSES.metis.Metis, ], ownTokens: [], }, diff --git a/projects/treasury/sudoswap.js b/projects/treasury/sudoswap.js new file mode 100644 index 0000000000..902d6e480c --- /dev/null +++ b/projects/treasury/sudoswap.js @@ -0,0 +1,23 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') + +const treasury = "0xb16c1342E617A5B6E4b631EB114483FDB289c0A4" //pair factor1 +const treasury2 = "0xA020d57aB0448Ef74115c112D18a9C231CC86000" //pair factor2 +const treasury3 = "0x6853f8865BA8e9FBd9C8CCE3155ce5023fB7EEB0" //sudo governance +const SUDO = "0x3446Dd70B2D52A6Bf4a5a192D9b0A161295aB7F9" + +module.exports = treasuryExports({ + ethereum: { + owners: [treasury, treasury2, treasury3], + ownTokens: [SUDO], + tokens: [ + nullAddress, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.FRAX, + "0xb23d80f5FefcDDaa212212F028021B41DEd428CF", //PRIME + ], + }, +}); \ No newline at end of file diff --git a/projects/treasury/sushiswap.js b/projects/treasury/sushiswap.js index f75c0fb68e..ee1e6fcbe8 100644 --- a/projects/treasury/sushiswap.js +++ b/projects/treasury/sushiswap.js @@ -1,14 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const sushiSwapTreasury = "0xe94B5EEC1fA96CEecbD33EF5Baa8d00E4493F4f3"; -const SUSHI = "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2"; +const SUSHI = ADDRESSES.ethereum.SUSHI; module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC + ADDRESSES.ethereum.USDC,//USDC ], owners: [sushiSwapTreasury], ownTokens: [SUSHI], diff --git a/projects/treasury/synapse.js b/projects/treasury/synapse.js new file mode 100644 index 0000000000..1404982bf3 --- /dev/null +++ b/projects/treasury/synapse.js @@ -0,0 +1,144 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const arbtreasury = "0x1d9bfc24d9e7eeda4119ceca11eaf4c24e622e62"; +const arbtreasury2 = "0x940279D22EB27415F2b0A0Ee6287749b5B19F43D"; +const arbSYN = "0x080F6AEd32Fc474DD5717105Dba5ea57268F46eb" +//const AuroraTreasury = "0xbb227Fcf45F9Dc5deF87208C534EAB1006d8Cc8d"; +const avaxTreasury = "0xd7aDA77aa0f82E6B3CF5bF9208b0E5E1826CD79C"; +const avaxSYN = "0x1f1E7c893855525b303f99bDF5c3c05Be09ca251" +//const bobaTreasury = "0xbb227Fcf45F9Dc5deF87208C534EAB1006d8Cc8d"; +const bscTreasury = "0xA316d83e67EEfD136f4C077de1cD4163A681F8A8"; +//const CantoTreasury = "0x02BA7A3Cd181a103Ba5702e708cF22de4Fa70254" +//const CronosTreasury = "0x7f91f3111b2009eC7c079Be213570330a37e8aeC" +//const DFKTreasury = "0x2E62c47f502f512C75bd5Ecd70799EFB0Fe7BAA3" +//const DogechainTreasury = "0x8f17b483982d1cc09296aed8f1b09ad830358a8d" +const FantomTreasury = "0x224002428cF0BA45590e0022DF4b06653058F22F" +const fantomSYN = "0xE55e19Fb4F2D85af758950957714292DAC1e25B2" +const HarmonyTreasury = "0x0172e7190Bbc0C2Aa98E4d1281d41D0c07178605" +//const KlaytnTreasury = "0x8f17b483982d1cc09296aed8f1b09ad830358a8d" +const MainnetTreasury = "0x67F60b0891EBD842Ebe55E4CCcA1098d7Aac1A55" +const mainnetSYN = "0x0f2D719407FdBeFF09D87557AbB7232601FD9F29" +const mainnetsynethLP = "0x4A86C01d67965f8cB3d0AAA2c655705E64097C31" +const MetisTreasury = "0xEAEC50eBe1c2A981ED8be02C36b0863Fae322975" +const metisSYN = ADDRESSES.metis.SYN +//const MoonbeamTreasury = "0xbb227Fcf45F9Dc5deF87208C534EAB1006d8Cc8d" +//const MoonriverTreasury = "0x4bA30618fDcb184eC01a9B3CAe258CFc5786E70E" +const OptimismTreasury = "0x2431CBdc0792F5485c4cb0a9bEf06C4f21541D52" +const PolygonTreasury = "0xBdD38B2eaae34C9FCe187909e81e75CBec0dAA7A" +const polygonSYN = "0xf8F9efC0db77d8881500bb06FF5D6ABc3070E695" + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + //"0x080F6AEd32Fc474DD5717105Dba5ea57268F46eb",//syn + ADDRESSES.arbitrum.WETH, + ADDRESSES.optimism.DAI, + ADDRESSES.arbitrum.nUSD, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.USDC, + ], + owners: [arbtreasury, arbtreasury2], + ownTokens: [arbSYN] + }, + avax: { + tokens: [ + nullAddress, + //"0x1f1E7c893855525b303f99bDF5c3c05Be09ca251",//syn + ADDRESSES.avax.WAVAX, + ADDRESSES.avax.DAI, + ADDRESSES.avax.USDC_e, + ADDRESSES.avax.USDT_e, + + ], + owners: [avaxTreasury], + ownTokens: [avaxSYN] + }, + bsc: { + tokens: [ + nullAddress, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.BUSD, + ADDRESSES.fantom.fUSDT, + ADDRESSES.bsc.BTCB, + "0x54261774905f3e6E9718f2ABb10ed6555cae308a",//anybtc + "0x42F6f551ae042cBe50C739158b4f0CAC0Edb9096",//nrv + ADDRESSES.bsc.USDT, + "0x23396cF899Ca06c4472205fC903bDB4de249D6fC",//ustc + ], + owners: [bscTreasury] + }, + fantom: { + tokens: [ + nullAddress, + //"0xE55e19Fb4F2D85af758950957714292DAC1e25B2",//syn + "0x74b23882a30290451A17c44f4F05243b6b58C76d",//eth + ADDRESSES.fantom.USDC, + ADDRESSES.fantom.WFTM, + ], + owners: [FantomTreasury], + ownTokens: [fantomSYN] + }, + harmony: { + tokens: [ + nullAddress + ], + owners: [HarmonyTreasury] + }, + ethereum: { + tokens: [ + nullAddress, + //"0x0f2D719407FdBeFF09D87557AbB7232601FD9F29",//syn + ADDRESSES.ethereum.USDC, + "0x0ab87046fBb341D058F17CBC4c1133F25a20a52f",//gohm + ADDRESSES.ethereum.FRAX, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDT, + "0x98585dFc8d9e7D48F0b1aE47ce33332CF4237D96",//newo + "0x71Ab77b7dbB4fa7e017BC15090b2163221420282",//high + ADDRESSES.ethereum.WBTC, + "0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F",//sdt + "0xBAac2B4491727D78D2b78815144570b9f2Fe8899",//dog + "0x02B5453D92B730F29a86A0D5ef6e930c4Cf8860B",//usdb + "0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8",//ageur + "0x0642026E7f0B6cCaC5925b4E7Fa61384250e1701",//h2o + "0xb753428af26E81097e7fD17f40c88aaA3E04902c",//sfi + ADDRESSES.ethereum.LINK, + ], + owners: [MainnetTreasury], + ownTokens: [mainnetSYN, mainnetsynethLP] + }, + metis: { + tokens: [ + nullAddress, + //ADDRESSES.metis.SYN, + "0xFB21B70922B9f6e3C6274BcD6CB1aa8A0fe20B80",//gohm + ADDRESSES.metis.m_USDC, + ], + owners: [MetisTreasury], + ownTokens: [metisSYN] + }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.OP, + "0x809DC529f07651bD43A172e8dB6f4a7a0d771036",//neth + ], + owners: [OptimismTreasury] + }, + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.USDC, + ADDRESSES.polygon.USDT, + ADDRESSES.polygon.WMATIC_2, + ADDRESSES.polygon.DAI, + "0xd8cA34fd379d9ca3C6Ee3b3905678320F5b45195",//gohm + //"0xf8F9efC0db77d8881500bb06FF5D6ABc3070E695",//syn + ], + owners: [PolygonTreasury], + ownTokens: [polygonSYN] + } +}) \ No newline at end of file diff --git a/projects/treasury/synthetix.js b/projects/treasury/synthetix.js index 68352e66df..59ca84616c 100644 --- a/projects/treasury/synthetix.js +++ b/projects/treasury/synthetix.js @@ -1,24 +1,27 @@ +const ADDRESSES = require('../helper/coreAssets.json'); const { nullAddress,treasuryExports } = require("../helper/treasury"); const synthetixTreasury = "0x99f4176ee457afedffcb1839c7ab7a030a5e4a92"; +const treasury = "0xeb3107117fead7de89cd14d463d340a2e6917769" -const SNX = "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F"; +const SNX = ADDRESSES.ethereum.SNX; module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B',//CVX - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51',//sUSD - '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32',//LIDO + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.CVX, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.sUSD, + ADDRESSES.ethereum.LIDO, '0x31c8EAcBFFdD875c74b94b077895Bd78CF1E64A3',//RAD + '0x3C0FFFF15EA30C35d7A85B85c0782D6c94e1d238' ], - owners: [synthetixTreasury], + owners: [synthetixTreasury, treasury], ownTokens: [SNX], }, }) \ No newline at end of file diff --git a/projects/treasury/templar-dao.js b/projects/treasury/templar-dao.js new file mode 100644 index 0000000000..207bd8b25d --- /dev/null +++ b/projects/treasury/templar-dao.js @@ -0,0 +1,52 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { treasuryExports } = require("../helper/treasury"); +const { nullAddress } = require("../helper/unwrapLPs"); + +const bscOwner = "0xEA724deA000b5e5206d28f4BC2dAD5f2FA1fe788"; +const bscTreasuryContract = "0xd01e8D805BB310F06411e70Fd50eB58cAe2B4C27"; + +const bscTokens = { + BUSD: ADDRESSES.bsc.BUSD, + WBNB: ADDRESSES.bsc.WBNB, + MIM: "0xfe19f0b51438fd612f6fd59c1dbb3ea319f433ba", + TM: "0x194d1D62d8d798Fcc81A6435e6d13adF8bcC2966", + DAI: "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", + TEM: "0x19e6BfC1A6e4B042Fb20531244D47E252445df01", + VBUSD: "0x95c78222B3D6e262426483D42CfA53685A67Ab9D", + VBTC: "0x882C173bC7Ff3b7786CA16dfeD3DFFfb9Ee7847B", +}; + +const LP = "0xEA724deA000b5e5206d28f4BC2dAD5f2FA1fe788"; + +const ethTokens = { + USDC: ADDRESSES.ethereum.USDC, + USDT: ADDRESSES.ethereum.USDT, +}; +const ethOwner = "0x4Bd973e98585b003c31f4C8b9d6eAC5d3293B1e5"; + +module.exports = treasuryExports({ + bsc: { + tokens: [ + nullAddress, + bscTokens.TM, + bscTokens.DAI, + bscTokens.BUSD, + bscTokens.WBNB, + bscTokens.VBUSD, + bscTokens.VBTC, + ], + owners: [bscOwner, bscTreasuryContract], + ownTokens: ['0x19e6BfC1A6e4B042Fb20531244D47E252445df01'], + resolveUniV3: true, + }, + ethereum: { + owner: ethOwner, + tokens: [ + nullAddress, + ethTokens.USDC, + ethTokens.USDT, + ADDRESSES.ethereum.WBTC, + ], + resolveUniV3: true, + }, +}); \ No newline at end of file diff --git a/projects/treasury/tempus-finance.js b/projects/treasury/tempus-finance.js new file mode 100644 index 0000000000..d1fdf75340 --- /dev/null +++ b/projects/treasury/tempus-finance.js @@ -0,0 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xab40a7e3cef4afb323ce23b6565012ac7c76bfef"; +const TEMP = "0xA36FDBBAE3c9d55a1d67EE5821d53B50B63A1aB9" +const LP = "0x514f35a92A13bc7093f299AF5D8ebb1387E42D6B" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.STETH, + + ], + owners: [treasury, LP], + ownTokens: [TEMP], + resolveLP: true, + resolveUniV3: true, + }, +}) \ No newline at end of file diff --git a/projects/treasury/thales.js b/projects/treasury/thales.js new file mode 100644 index 0000000000..bf0446e5e2 --- /dev/null +++ b/projects/treasury/thales.js @@ -0,0 +1,50 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const Treasury_ARB = "0x2902E381c9Caacd17d25a2e008db0a9a4687FDBF"; +const Treasury_ETH = "0xdac09f37e132d91b962f30e6ec40d2d08b82b0fa"; +const Treasury_OP = "0x489863b61c625a15c74fb4c21486bacb4a3937ab"; +const Treasury_POLYGON = "0x4aad282dac74d79e41fd12833b1fad7a18c778ed"; +const Treasury_MULTICHAIN = "0x1777c6d588fd931751762836811529c0073d6376"; +const THALE_ARB = "0xE85B662Fe97e8562f4099d8A1d5A92D4B453bF30"; +const THALES_ETH = "0x8947da500eb47f82df21143d0c01a29862a8c3c5"; +const THALES_OP = "0x217d47011b23bb961eb6d93ca9945b7501a5bb11"; + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + "0x8e870d67f660d95d5be530380d0ec0bd388289e1", + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.USDC + ], + owners: [Treasury_ETH, Treasury_MULTICHAIN], + ownTokens: [THALES_ETH], + }, + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC, + ADDRESSES.optimism.OP, + "0x350a791bfc2c21f9ed5d10980dad2e2638ffa7f6" + ], + owners: [Treasury_OP, Treasury_MULTICHAIN], + ownTokens: [THALES_OP], + }, + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, + "0x8971dFb268B961a9270632f28B24F2f637c94244" + ], + owners: [Treasury_ARB, Treasury_MULTICHAIN], + ownTokens: [THALE_ARB], + }, + polygon: { + tokens: [ + nullAddress, + ADDRESSES.polygon.USDC + ], + owners: [Treasury_POLYGON], + }, +}) \ No newline at end of file diff --git a/projects/treasury/thellamas.js b/projects/treasury/thellamas.js new file mode 100644 index 0000000000..02ef046b4e --- /dev/null +++ b/projects/treasury/thellamas.js @@ -0,0 +1,33 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); +const { mergeExports } = require('../helper/utils'); +const { genericUnwrapCvxRewardPool } = require('../helper/unwrapLPs') + +const Treasury = "0x73eb240a06f0e0747c698a219462059be6aaccc8"; + +module.exports = mergeExports([treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.CVX, + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.CRV, + "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", + "0x7f50786A0b15723D741727882ee99a0BF34e3466", + "0x0148CF564318272c2Bad048488F90dF4e3769f32", + "0x9aE380F0272E2162340a5bB646c354271c0F5cFC" + ], + owners: [Treasury], + ownTokens: ['0xe127ce638293fa123be79c25782a5652581db234'], + }, +}), { + ethereum: { + tvl: async (_, _1, _2, { api }) => { + const lockedCVXBal = await api.call({ abi: 'erc20:balanceOf', target: ADDRESSES.ethereum.vlCVX, params: Treasury }) + api.add(ADDRESSES.ethereum.CVX, lockedCVXBal) + await genericUnwrapCvxRewardPool({ api, owner: Treasury, pool: '0x39D78f11b246ea4A1f68573c3A5B64E83Cff2cAe'}) + return api.getBalances() + } + } +}]) \ No newline at end of file diff --git a/projects/treasury/themis-capital-ohm.js b/projects/treasury/themis-capital-ohm.js new file mode 100644 index 0000000000..5efc3bdfaa --- /dev/null +++ b/projects/treasury/themis-capital-ohm.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require('../helper/unknownTokens') + +module.exports = { + misrepresentedTokens: true, + filecoin: { + tvl: sumTokensExport({ + owner: '0x0e511806C7AC38cF6d1EeAa9Ee51027e44Dcbf94', + tokens: ['0x422849B355039bC58F2780cc4854919fC9cfaF94', '0x45680718F6BdB7Ec3A7dF7D61587aC7C3fB49d50'], + useDefaultCoreAssets: true, + }) + }, +}; \ No newline at end of file diff --git a/projects/treasury/tipidao.js b/projects/treasury/tipidao.js new file mode 100644 index 0000000000..9190d18a5d --- /dev/null +++ b/projects/treasury/tipidao.js @@ -0,0 +1,3 @@ +module.exports = require("../tipidao/index"); + +delete module.exports.bsc.staking \ No newline at end of file diff --git a/projects/treasury/tokemak.js b/projects/treasury/tokemak.js index ee67dbcb2e..d5a0b47f5d 100644 --- a/projects/treasury/tokemak.js +++ b/projects/treasury/tokemak.js @@ -1,23 +1,24 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x8b4334d4812C530574Bd4F2763FcD22dE94A969B"; const tokens = [ nullAddress, - "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC - "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84", // stETH + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.STETH, "0x9C4A4204B79dd291D6b6571C5BE8BbcD0622F050", // TCR "0x4104b135DBC9609Fc1A9490E61369036497660c8", // APW "0x73968b9a57c6E53d41345FD57a6E6ae27d6CDB2F", // SDT "0xE1573B9D29e2183B1AF0e743Dc2754979A40D237", // Uniswap FXS/FRAX LP - "0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32", // LDO - "0x5aFE3855358E112B5647B952709E6165e1c1eEEe", // SAFE + ADDRESSES.ethereum.LIDO, + ADDRESSES.ethereum.SAFE, "0xaa0C3f5F7DFD688C6E646F66CD2a6B66ACdbE434", // stkCvxCrv "0x04906695D6D12CF5459975d7C3C03356E4Ccd460", // sOHM ]; const ownTokens = [ - "0x2e9d63788249371f1DFC918a52f8d799F4a38C94", // TOKE + ADDRESSES.ethereum.TOKE, ]; module.exports = treasuryExports({ diff --git a/projects/treasury/tokenIon.js b/projects/treasury/tokenIon.js index 6372f32379..17d29fb2aa 100644 --- a/projects/treasury/tokenIon.js +++ b/projects/treasury/tokenIon.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require("../helper/unwrapLPs"); // Receives rewards/fee from AMM wrapper via reward distributor on WETH shape, some are sold for LON... @@ -6,28 +7,28 @@ const MULTISIG_ONE = "0x3557BD3d422300198719710Cc3f00194E1c20A46"; module.exports = { ethereum: { tvl: (_, block) => sumTokens2({ owner: MULTISIG_ONE, tokens: [ - '0xdac17f958d2ee523a2206206994597c13d831ec7', + ADDRESSES.ethereum.USDT, '0x55d31f68975e446a40a2d02ffa4b0e1bfb233c2f', '0x8E870D67F660D95d5be530380D0eC0bd388289E1', //USDP - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', //USDC - '0x0000000000085d4780B73119b644AE5ecd22b376', //TUSD - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', //UNI - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', // WBTC - '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', // MATIC - '0x4Fabb145d64652a948d72533023f6E7A623C7C53', // BUSD + ADDRESSES.ethereum.USDC, //USDC + ADDRESSES.ethereum.TUSD, //TUSD + ADDRESSES.ethereum.UNI, //UNI + ADDRESSES.ethereum.WBTC, // WBTC + ADDRESSES.ethereum.MATIC, // MATIC + ADDRESSES.ethereum.BUSD, // BUSD '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', // FEI - '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI + ADDRESSES.ethereum.DAI, // DAI '0xba100000625a3754423978a60c9317c58a424e3D', // BAL - '0x4E15361FD6b4BB609Fa63C81A2be19d873717870', // FTM + ADDRESSES.ethereum.FTM, // FTM '0xdd974D5C2e2928deA5F71b9825b8b646686BD200', // KNC - '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', // AAVE - '0xD533a949740bb3306d119CC777fa900bA034cd52', // CRV + ADDRESSES.ethereum.AAVE, // AAVE + ADDRESSES.ethereum.CRV, // CRV '0x0F5D2fB29fb7d3CFeE444a200298f468908cC942', // MANA - '0x514910771AF9Ca656af840dff83E8264EcF986CA', // LINK + ADDRESSES.ethereum.LINK, // LINK '0xc944E90C64B2c07662A292be6244BDf05Cda44a7', // GRT '0xc944E90C64B2c07662A292be6244BDf05Cda44a7', // UMA - '0x6B3595068778DD592e39A122f4f5a5cF09C90fE2', // SUSHI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + ADDRESSES.ethereum.SUSHI, // SUSHI + ADDRESSES.ethereum.WETH, // WETH '0xE41d2489571d322189246DaFA5ebDe1F4699F498', // zRX '0x408e41876cCCDC0F92210600ef50372656052a38', // ren '0xc00e94Cb662C3520282E6f5717214004A7f26888', // COMP diff --git a/projects/treasury/traderjoe.js b/projects/treasury/traderjoe.js index f84573ab6b..588f8fa391 100644 --- a/projects/treasury/traderjoe.js +++ b/projects/treasury/traderjoe.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const multisig = "0xD858eBAa943b4C2fb06BA0Ba8920A132fd2410eE"; @@ -6,8 +7,8 @@ const multisig3 = "0x8F38558188FAe593E8E6347F124351CF4fDd032D" module.exports = treasuryExports({ avax: { - tokens: [nullAddress, "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"], + tokens: [nullAddress, ADDRESSES.avax.USDC], owners: [multisig, multisig2, multisig3], - ownTokens: ["0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd"], + ownTokens: [ADDRESSES.avax.JOE], }, }); diff --git a/projects/treasury/tranchess.js b/projects/treasury/tranchess.js new file mode 100644 index 0000000000..cd1614fa5c --- /dev/null +++ b/projects/treasury/tranchess.js @@ -0,0 +1,37 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); +const ADDRESSES = require('../helper/coreAssets.json') + +const treasuryETH = "0x1bf019a44a708fbeba7adc79bdad3d0769ff3a7b"; +const CHESS = "0xD6123271F980D966B00cA4FCa6C2c021f05e2E73" +const qETH = "0x93ef1Ea305D11A9b2a3EbB9bB4FCc34695292E7d"; + +//BSC CHAIN + +const treasuryBSC = "0x1bf019a44a708fbeba7adc79bdad3d0769ff3a7b"; +const CHESSB = "0x20de22029ab63cf9A7Cf5fEB2b737Ca1eE4c82A6" + + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.WETH, + "0x04248AAbca09E9a1a3D5129a7ba05b7F17DE7684", + "0xC764B55852F8849Ae69923e45ce077A576bF9a8d" + ], + owners: [treasuryETH], + ownTokens: [CHESS, qETH], + }, + bsc: { + tokens: [ + nullAddress, + ADDRESSES.bsc.ETH, + ADDRESSES.bsc.USDC, + ADDRESSES.bsc.BUSD, + ADDRESSES.bsc.BTCB + ], + owners: [treasuryBSC], + ownTokens: [CHESSB], + }, +}) \ No newline at end of file diff --git a/projects/treasury/treasure-dao.js b/projects/treasury/treasure-dao.js index 38320b933b..cd6f1ff3ee 100644 --- a/projects/treasury/treasure-dao.js +++ b/projects/treasury/treasure-dao.js @@ -1,20 +1,35 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0x0eb5b03c0303f2f47cd81d7be4275af8ed347576"; +const treasury2 = "0x1054e9d9091dc55a1738f9c8fc0c79e59e222804" +const treasury3 = "0x482729215aaf99b3199e41125865821ed5a4978a" +const treasury4 = "0x64bfb08217b30b70f287a1b7f0670bdd49f8a13f" +const treasury5 = "0x81fa605235e4c32d8b440eebe43d82e9e083166b" +const treasury6 = "0xdb6ab450178babcf0e467c1f3b436050d907e233" +const treasury7 = "0xe8409cd2abae06871d166e808d75addb0537033a" + +const treasuryETH = "0xec834bd1f492a8bd5aa71023550c44d4fb14632a" +const MAGICETH = "0xb0c7a3ba49c7a6eaba6cd4a96c55a1391070ac9a" module.exports = treasuryExports({ arbitrum: { - owners: [treasury, ], + owners: [treasury, treasury2, treasury3, treasury4, treasury5, treasury6, treasury7 ], ownTokens: [ "0x539bde0d7dbd336b79148aa742883198bbf60342", // MAGIC "0x872bAD41CFc8BA731f811fEa8B2d0b9fd6369585", // GFLY ], tokens: [ nullAddress, - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC - "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", // WETH + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.WETH, // WETH "0xb7e50106a5bd3cf21af210a755f9c8740890a8c9", // SLP ], }, + ethereum: { + tokens: [nullAddress, ADDRESSES.ethereum.USDC], + owners: [treasuryETH], + ownTokens: [MAGICETH], + }, }); \ No newline at end of file diff --git a/projects/treasury/umamifinance.js b/projects/treasury/umamifinance.js index 97198cb0b6..1e1d8e1068 100644 --- a/projects/treasury/umamifinance.js +++ b/projects/treasury/umamifinance.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const owners = [ @@ -5,6 +6,8 @@ const owners = [ "0x8e52ca5a7a9249431f03d60d79dda5eab4930178", // ARB DAO delegate "0xb0b4bd94d656353a30773ac883591ddbabc0c0ba", // Previous ARBI multisig ]; +const ethowners = "0x9478d820e8d38ca96610b7fcbe377822c2f60f2c" + const ownTokens = [ "0x1622bF67e6e5747b81866fE0b85178a93C7F86e3", // UMAMI "0x2AdAbD6E8Ce3e82f52d9998a7f64a90d294A92A4", // mUMAMI @@ -15,17 +18,32 @@ module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - "0x1aDDD80E6039594eE970E5872D247bf0414C8903", // fsGLP - "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", // USDC - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", // USDT - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // wETH - "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a", // GMX + ADDRESSES.arbitrum.fsGLP, // fsGLP + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.arbitrum.WETH, // wETH + ADDRESSES.arbitrum.GMX, // GMX "0x55ff62567f09906a85183b866df84bf599a4bf70", // KROM "0x3d9907f9a368ad0a51be60f7da3b97cf940982d8", // GRAIL "0x3CAaE25Ee616f2C8E13C74dA0813402eae3F496b", // xGRAIL "0x912CE59144191C1204E64559FE8253a0e49E6548", // ARB + "0x3e6648c5a70a150a88bce65f4ad4d506fe15d2af", //spell + "0x10010078a54396f62c96df8532dc2b4847d47ed3", //hnd + "0x32eb7902d4134bf98a28b963d26de779af92a212", //rpdx + "0xd4d42f0b6def4ce0383636770ef773390d85c61a",//sushi + "0x2cab3abfc1670d1a452df502e216a66883cdf079",//l2dao + "0x539bde0d7dbd336b79148aa742883198bbf60342",//magic + "0x6694340fc020c5e6b96567843da2df01b2ce1eb6",//stg ], owners, ownTokens, }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC,//usdc + ], + owners: [ethowners] + + }, }); diff --git a/projects/treasury/uniswap.js b/projects/treasury/uniswap.js index 0ec0d4f49e..d202db5cef 100644 --- a/projects/treasury/uniswap.js +++ b/projects/treasury/uniswap.js @@ -1,21 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const uniTreasury1 = "0x1a9c8182c09f50c8318d769245bea52c32be35bc"; const uniTreasury2 = "0x4b4e140D1f131fdaD6fb59C13AF796fD194e4135"; const uniTreasury3 = "0x3D30B1aB88D487B0F3061F40De76845Bec3F1e94"; -const UNI = "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984"; +const UNI = ADDRESSES.ethereum.UNI; module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.DAI,//DAI '0x028171bCA77440897B824Ca71D1c56caC55b68A3',//aDAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT ], owners: [uniTreasury1, uniTreasury2, uniTreasury3], ownTokens: [UNI], diff --git a/projects/treasury/uwulend.js b/projects/treasury/uwulend.js index 12a2932182..a4c392cab2 100644 --- a/projects/treasury/uwulend.js +++ b/projects/treasury/uwulend.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xc671a6b1415de6549b05775ee4156074731190c6"; @@ -7,10 +8,10 @@ module.exports = treasuryExports({ tokens: [ nullAddress, "0x29127fE04ffa4c32AcAC0fFe17280ABD74eAC313", // SIFU - "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT - "0x6B175474E89094C44Da98b954EedeAC495271d0F", // DAI + ADDRESSES.ethereum.USDT, // USDT + ADDRESSES.ethereum.DAI, // DAI "0x99D8a9C45b2ecA8864373A26D1459e3Dff1e17F3", // MIM - "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", // WBTC + ADDRESSES.ethereum.WBTC, // WBTC "0xb95BD0793bCC5524AF358ffaae3e38c3903C7626", // uDAI "0x24959F75d7BDA1884f1Ec9861f644821Ce233c7D", // uUSDT "0x8C240C385305aeb2d5CeB60425AABcb3488fa93d", // uFRAX diff --git a/projects/treasury/velodrome.js b/projects/treasury/velodrome.js index 0dae35b1a1..36a7ae4f26 100644 --- a/projects/treasury/velodrome.js +++ b/projects/treasury/velodrome.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { treasuryExports, nullAddress } = require("../helper/treasury"); const team = "0xb074ec6c37659525EEf2Fb44478077901F878012"; @@ -5,21 +6,21 @@ const treasury = "0xe7D7ce84D45e43F06cD5CaA1d9c42374b8776fb0"; const tokens = [ nullAddress, - "0x4200000000000000000000000000000000000042", // OP - "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", // USDC - "0x4200000000000000000000000000000000000006", // WETH + ADDRESSES.optimism.OP, // OP + ADDRESSES.optimism.USDC, // USDC + ADDRESSES.tombchain.FTM, // WETH "0x73cb180bf0521828d8849bc8CF2B920918e23032", // USD+ - "0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9", // sUSD - "0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49", // sETH + ADDRESSES.optimism.sUSD, // sUSD + ADDRESSES.optimism.sETH, // sETH "0xB153FB3d196A8eB25522705560ac152eeEc57901", // MIM - "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", // USDT + ADDRESSES.optimism.USDT, // USDT "0xd52f94DF742a6F4B4C8b033369fE13A41782Bf44", // L2DAO "0x9485aca5bbBE1667AD97c7fE7C4531a624C8b1ED", // agEUR "0xc3864f98f2a61A7cAeb95b039D031b4E2f55e0e9", // OpenX "0x61BAADcF22d2565B0F471b291C475db5555e0b76", // AELIN "0x79AF5dd14e855823FA3E9ECAcdF001D99647d043", // jEUR "0xc40F949F8a4e094D1b49a23ea9241D289B7b2819", // LUSD - "0xdFA46478F9e5EA86d57387849598dbFB2e964b02", // MAI + ADDRESSES.moonbeam.MAI, // MAI "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d", // QI "0x9Bcef72be871e61ED4fBbc7630889beE758eb81D", // rETH "0xE3AB61371ECc88534C522922a026f2296116C109", // SPELL diff --git a/projects/treasury/venus.js b/projects/treasury/venus.js index 7f1b6cf420..e4ff6d42de 100644 --- a/projects/treasury/venus.js +++ b/projects/treasury/venus.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const venusTreasury = "0xF322942f644A996A617BD29c16bd7d231d9F35E9"; @@ -11,11 +12,11 @@ module.exports = treasuryExports({ bsc: { tokens: [ nullAddress, - '0x55d398326f99059fF775485246999027B3197955',//bsc-usdc - '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',//usdc - '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c',//BTCB + ADDRESSES.bsc.USDT,//bsc-usdc + ADDRESSES.bsc.USDC,//usdc + ADDRESSES.bsc.BTCB,//BTCB '0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3',//DAI - '0x250632378E573c6Be1AC2f97Fcdf00515d0Aa91B',//BETH + ADDRESSES.bsc.BETH,//BETH ], owners: [venusTreasury], diff --git a/projects/treasury/void.js b/projects/treasury/void.js index 57617017c3..b03ab9f1d1 100644 --- a/projects/treasury/void.js +++ b/projects/treasury/void.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xf0a793024Ac47e421EB8c4673212dfCcE42f4a97"; @@ -11,7 +12,7 @@ module.exports = treasuryExports({ ], tokens: [ nullAddress, - "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", // DAI + ADDRESSES.fantom.DAI, // DAI "0xfC66Ac63D414d3CF3dcdDa9e60742F6E789205e3", // SpookySwap VOID-DAI LP ], }, diff --git a/projects/treasury/volta-dao.js b/projects/treasury/volta-dao.js new file mode 100644 index 0000000000..e292329620 --- /dev/null +++ b/projects/treasury/volta-dao.js @@ -0,0 +1,4 @@ +module.exports = require("../volta-dao/index"); + +delete module.exports.avax.staking +delete module.exports.fantom.staking \ No newline at end of file diff --git a/projects/treasury/volta.js b/projects/treasury/volta.js index 7c2350d65c..7d82d482de 100644 --- a/projects/treasury/volta.js +++ b/projects/treasury/volta.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); @@ -12,12 +13,12 @@ module.exports = treasuryExports({ ], tokens: [ nullAddress, - "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9", // USDT - "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1", // DAI - "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", // USDC + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI + ADDRESSES.arbitrum.USDC, // USDC "0xd85E038593d7A098614721EaE955EC2022B9B91B", // gDAI "0xd92Be5A1c565Db5256cDD537B875ED46111Bd8b0", // VOLT2USD3CRV-f - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH + ADDRESSES.arbitrum.WETH, // WETH "0x39ff5098081FBE1ab241c31Fe0a9974FE9891d04", // voltGNS ], }, diff --git a/projects/treasury/wagmi.js b/projects/treasury/wagmi.js new file mode 100644 index 0000000000..4d21dca03b --- /dev/null +++ b/projects/treasury/wagmi.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0xd2135CfB216b74109775236E36d4b433F1DF507B"; + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.DAI, + "0x8290333ceF9e6D528dD5618Fb97a76f268f3EDD4" + ], + owners: [treasury], + ownTokens: [], + }, +}); \ No newline at end of file diff --git a/projects/treasury/wagmidao.js b/projects/treasury/wagmidao.js new file mode 100644 index 0000000000..f254a65283 --- /dev/null +++ b/projects/treasury/wagmidao.js @@ -0,0 +1,78 @@ +const sdk = require("@defillama/sdk"); +const abi = require("../wagmidao/abi.json"); +const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); +const { + getFixBalancesSync, +} = require("../helper/portedTokens"); + +const bondContracts = [ + //Bond 1USDC + "0xe443F63564216f60625520465F1324043fcC47b9", + //Bond GMI-1USDC + "0x8c4300a7A71efF73b24DCd8f849f82A8B36b5D8a", + //Bond WONE + "0xa31a22d9dec269f512cf62b83039190fbe67f7d2", + //Bond 1ETH + "0x08d44C114e3C0102ace43e9656f478DD4a71cD1D", + //Bond FAM + "0xEfb7DDE5261100a32657C9606507a130257D93c6", +]; + +const GMI = "0x8750f5651af49950b5419928fecefca7c82141e3"; + +const Treasury = async (timesamp, ethBlock, chainBlocks) => { + const balances = {}; + + const tokenAddresses = ( + await sdk.api.abi.multiCall({ + abi: abi.principal, + calls: bondContracts.map((bond) => ({ + target: bond, + })), + chain: "harmony", + block: chainBlocks["harmony"], + }) + ).output.map((t) => t.output); + + const tokenBalances = ( + await sdk.api.abi.multiCall({ + abi: abi.totalPrincipalReceived, + calls: bondContracts.map((bond) => ({ + target: bond, + })), + chain: "harmony", + block: chainBlocks["harmony"], + }) + ).output.map((b) => b.output); + + const lpPositions = []; + tokenAddresses.forEach((token, idx) => { + if (token == "0x73919726cC9d988cEa1a378772e5f775dF33C049") { + lpPositions.push({ token, balance: tokenBalances[idx] }); + } else { + sdk.util.sumSingleBalance( + balances, + `harmony:${token}`, + tokenBalances[idx] + ); + } + }); + + await unwrapUniswapLPs( + balances, + lpPositions, + chainBlocks["harmony"], + "harmony", + ); + + getFixBalancesSync('harmony')(balances); + + return balances; +}; + +module.exports = { + harmony: { + tvl: Treasury, + }, + methodology: "Counts liquidity on the Farms through Factory Contract, and counts Treasury as it is determined by bonding of assets. Staking refers to the staked GMI tokens", +}; diff --git a/projects/treasury/we-piggy.js b/projects/treasury/we-piggy.js new file mode 100644 index 0000000000..9be17cb8c9 --- /dev/null +++ b/projects/treasury/we-piggy.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x0d189fd8d46e43b2f13390de95d4f8e185eb3914"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/wonderland.js b/projects/treasury/wonderland.js index 1a33ceb87b..3ddeda97ea 100644 --- a/projects/treasury/wonderland.js +++ b/projects/treasury/wonderland.js @@ -1,72 +1,119 @@ -const { nullAddress,treasuryExports, getComplexTreasury } = require("../helper/treasury"); - -//eth -const Treasury1 = "0x1c46450211cb2646cc1da3c5242422967ed9e04c"; -const Treasury2 = "0x355d72fb52ad4591b2066e43e89a7a38cf5cb341"; - -//avax -const TreasuryAVAX = "0x88bbe6de858b179841c8f49a56b99fb0522a263a" +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports, } = require("../helper/treasury"); +const sdk = require('@defillama/sdk') const TIME = "0xb54f16fb19478766a268f172c9480f8da1a7c9c3" +// Sources: https://wl-l.ink/Zapper/Treasury and https://docs.wonderland.money/ecosystem/contracts +const treasuries = [ + "0x1c46450211cb2646cc1da3c5242422967ed9e04c", "0x355d72fb52ad4591b2066e43e89a7a38cf5cb341", "0xb6b80f4ea8fb4117928d3c819e8ac6f1a3837baf", + "0x88bbe6de858b179841c8f49a56b99fb0522a263a", "0x32b5d1f1331f857d583b05ef50ab9636cdc090d9", "0x1de8a4c781ac134c1a7640aabe5929f4e1fe2f5b", + "0x694497072b2c43b737ae70bbd52694d61377344c", "0x004016b53f127c8f6f64cbf66330765dcf5dbe2a", "0xb96e3bf7d8939e9e17adcc26fdf47b6c7391eb6a", + "0xba90fabdde85191ae04bfdd8022f6d7b1f86c2f4", "0x5a4a936e90caf09590ac402b6e8d5435a5092a7a", "0x1724b987feb9651c466d9e66be4b74a7cedbf372" +] -// arbitrum - -const TreasuryArbitrum = "0x32b5d1f1331f857d583b05ef50ab9636cdc090d9" - -//polygon - -const TreasuryPolygon = "0x1de8a4c781ac134c1a7640aabe5929f4e1fe2f5b" +const ethWallet = '0x355d72fb52ad4591b2066e43e89a7a38cf5cb341' module.exports = treasuryExports({ ethereum: { - tokens: [ - nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI - '0x028171bCA77440897B824Ca71D1c56caC55b68A3',//aDAI - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0xFcF8eda095e37A41e002E266DaAD7efC1579bc0A',//flex - '0xdB25f211AB05b1c97D595516F45794528a807ad8',//eurs - '0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6',//stg - '0x29127fe04ffa4c32acac0ffe17280abd74eac313',//sifu - ], - owners: [Treasury1, Treasury2], + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC,//USDC + '0x55c08ca52497e2f1534b59e2917bf524d4765257', // uwu + ADDRESSES.ethereum.cvxFXS, // cvxFXS + '0x3E04863DBa602713Bb5d0edbf7DB7C3A9A2B6027', // SLP + ADDRESSES.ethereum.DAI,//DAI + '0x028171bCA77440897B824Ca71D1c56caC55b68A3',//aDAI + ADDRESSES.ethereum.WETH,//WETH + ADDRESSES.ethereum.USDT,//USDT + '0xFcF8eda095e37A41e002E266DaAD7efC1579bc0A',//flex + '0xdB25f211AB05b1c97D595516F45794528a807ad8',//eurs + '0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6',//stg + '0x29127fe04ffa4c32acac0ffe17280abd74eac313',//sifu + '0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d',//LQTY + '0x51144708b82eA3b5b1002C9DC38b71ec63b7e670',// uwu lend token + '0xdb1a8f07f6964efcfff1aa8025b8ce192ba59eba',// uwu lend token + '0x8c240c385305aeb2d5ceb60425aabcb3488fa93d',// uwu lend token + '0xc480a11a524e4db27c6d4e814b4d9b3646bc12fc',// uwu lend token + '0x8028ea7da2ea9bcb9288c1f6f603169b8aea90a6',// uwu lend token + '0x243387a7036bfcb09f9bf4eced1e60765d31aa70',// uwu lend token + '0xadfa5fa0c51d11b54c8a0b6a15f47987bd500086',// uwu lend token + '0x02738ef3f8d8d3161dbbedbda25574154c560dae',// uwu lend token + '0x6ace5c946a3abd8241f31f182c479e67a4d8fc8d',// uwu lend token + '0x67fadbd9bf8899d7c578db22d7af5e2e500e13e5',// uwu lend token + ], + owners: [ethWallet], + ownTokens: ['0x3b79a28264fc52c7b4cea90558aa0b162f7faf57'], }, avax: { tokens: [ - nullAddress, - "0xc7198437980c041c805A1EDcbA50c1Ce5db95118",//usdte - "0x39fC9e94Caeacb435842FADeDeCB783589F50f5f",//knc - "0x63682bdc5f875e9bf69e201550658492c9763f89",//bsgg + nullAddress, + ADDRESSES.avax.USDT_e,//usdte + "0x39fC9e94Caeacb435842FADeDeCB783589F50f5f",//knc + "0x63682bdc5f875e9bf69e201550658492c9763f89",//bsgg + ADDRESSES.avax.USDC,//USDC + ADDRESSES.avax.USDC_e,//USDC.e + "0x9e295b5b976a184b14ad8cd72413ad846c299660",//fsGLP + ], + owners: treasuries, + ownTokens: [TIME, '0x0da67235dd5787d67955420c84ca1cecd4e5bb3b'], + }, + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.WETH,//weth + ADDRESSES.arbitrum.GMX,//gmx + "0xd2D1162512F927a7e282Ef43a362659E4F2a728F",//sbfGMX + ], + owners: treasuries + }, + polygon: { + tokens: [ + nullAddress, + // "0xb08b3603C5F2629eF83510E6049eDEeFdc3A2D91",//cpool + ], + owners: treasuries + }, + bsc: { + tokens: [ + nullAddress, + ADDRESSES.bsc.USDC,//USDC + ], + owners: treasuries + }, + fantom: { + tokens: [ + nullAddress, ], - owners: [TreasuryAVAX], - ownTokens: [TIME], + owners: treasuries }, - arbitrum: { - tokens: [ - nullAddress, - "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",//weth - "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a",//gmx - "0xd2D1162512F927a7e282Ef43a362659E4F2a728F",//sbfGMX - ], - owners: [TreasuryArbitrum] - }, - polygon: { - tokens: [ - nullAddress, - "0xb08b3603C5F2629eF83510E6049eDEeFdc3A2D91",//cpool - ], - owners: [TreasuryPolygon] - } + optimism: { + tokens: [ + nullAddress, + ADDRESSES.moonbeam.MAI,//MAI + ADDRESSES.tombchain.FTM,//WETH + ADDRESSES.optimism.USDT,//USDT + ], + owners: treasuries + } }) -// Sources: https://wl-l.ink/Zapper/Treasury and https://docs.wonderland.money/ecosystem/contracts -const treasuries = [ - "0x1c46450211cb2646cc1da3c5242422967ed9e04c","0x355d72fb52ad4591b2066e43e89a7a38cf5cb341","0xb6b80f4ea8fb4117928d3c819e8ac6f1a3837baf", - "0x88bbe6de858b179841c8f49a56b99fb0522a263a","0x32b5d1f1331f857d583b05ef50ab9636cdc090d9","0x1de8a4c781ac134c1a7640aabe5929f4e1fe2f5b", - "0x694497072b2c43b737ae70bbd52694d61377344c","0x004016b53f127c8f6f64cbf66330765dcf5dbe2a","0xb96e3bf7d8939e9e17adcc26fdf47b6c7391eb6a", - "0xba90fabdde85191ae04bfdd8022f6d7b1f86c2f4","0x5a4a936e90caf09590ac402b6e8d5435a5092a7a","0x1724b987feb9651c466d9e66be4b74a7cedbf372" -] - -//getComplexTreasury(treasuries) \ No newline at end of file +module.exports.ethereum.tvl = sdk.util.sumChainTvls([module.exports.ethereum.tvl, uwuPositions]) +async function uwuPositions(_, _b, _cb, { api, }) { + // + // LUSD in stability pool + const {initialValue : LUSDBal} = await api.call({ abi: "function deposits(address) view returns (uint256 initialValue, address frontEndTag)", target: '0x66017D22b0f8556afDd19FC67041899Eb65a21bb', params: ethWallet }) + const uwuLPLocked= await api.call({ abi:"function lockedBalances(address user) view returns (uint256 total, uint256 unlockable, uint256 locked, tuple(uint256 amount, uint256 unlockTime)[] lockData)", target: '0x0a7b2a21027f92243c5e5e777aa30bb7969b0188', params: ethWallet }) + const [uDAI, vdDAI, uUSDT, vdUSDT] = await api.multiCall({ + abi: 'erc20:balanceOf', calls: [ + { target: '0xb95bd0793bcc5524af358ffaae3e38c3903c7626', params: ethWallet }, + { target: '0x1254b1fd988a1168e44a4588bb503a867f8e410f', params: ethWallet }, + { target: '0x24959f75d7bda1884f1ec9861f644821ce233c7d', params: ethWallet }, + { target: '0xaac1d67f1c17ec01593d76e831c51a4f458dc160', params: ethWallet }, + ] + }) + api.add(ADDRESSES.ethereum.LUSD, LUSDBal) + api.add('0x3E04863DBa602713Bb5d0edbf7DB7C3A9A2B6027', uwuLPLocked.total) + api.add('0xb95bd0793bcc5524af358ffaae3e38c3903c7626', +uDAI - vdDAI) + api.add('0x24959f75d7bda1884f1ec9861f644821ce233c7d', +uUSDT - vdUSDT) + return api.getBalances() +} \ No newline at end of file diff --git a/projects/treasury/woofi.js b/projects/treasury/woofi.js new file mode 100644 index 0000000000..b80784a143 --- /dev/null +++ b/projects/treasury/woofi.js @@ -0,0 +1,39 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasuryAVAX = "0xb54382c680b0ad037c9f441a8727ca6006fe2dd0"; +const treasuryETH = "0xfa2d1f15557170f6c4a4c5249e77f534184cdb79" +const WOO = "0x4691937a7508860F876c9c0a2a617E7d9E945D4B" +const WOOBSC= "0x4691937a7508860F876c9c0a2a617E7d9E945D4B" +const LP = "0x2FC8bC3eE171eD5610ba3093909421E90b47Fc07" +const treasuryBSC = "0xfd899c7c5ed84537e2acfc998ce26c3797654ae8" + +module.exports = treasuryExports({ + avax: { + tokens: [ + nullAddress, + ADDRESSES.avax.USDC_e + ], + owners: [treasuryAVAX], + }, + ethereum: { + tokens: [ + nullAddress, + "0x43Dfc4159D86F3A37A5A4B3D4580b888ad7d4DDd", + ADDRESSES.ethereum.USDC + + ], + owners: [treasuryETH], + ownTokens: [WOO, LP], + resolveLP: true, + resolveUniV3: true, + }, + bsc: { + tokens: [ + nullAddress, + ADDRESSES.bsc.USDC + ], + owners: [treasuryBSC], + ownTokens: [WOOBSC], + }, +}) \ No newline at end of file diff --git a/projects/treasury/xeus.js b/projects/treasury/xeus.js new file mode 100644 index 0000000000..c627ecbf56 --- /dev/null +++ b/projects/treasury/xeus.js @@ -0,0 +1,4 @@ +const index = require('../xeus/index') +const { ohmTreasury } = require('../helper/treasury') + +module.exports = ohmTreasury(index) \ No newline at end of file diff --git a/projects/treasury/y2k.js b/projects/treasury/y2k.js index ae7a891ef8..f757f76f14 100644 --- a/projects/treasury/y2k.js +++ b/projects/treasury/y2k.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); module.exports = treasuryExports({ arbitrum: { tokens: [ nullAddress, - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', // USDT - '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.WETH, // WETH + ADDRESSES.arbitrum.USDT, // USDT + ADDRESSES.optimism.DAI, // DAI '0x569061e2d807881f4a33e1cbe1063bc614cb75a4', '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c', '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c', diff --git a/projects/treasury/yam-finance.js b/projects/treasury/yam-finance.js new file mode 100644 index 0000000000..21299347f5 --- /dev/null +++ b/projects/treasury/yam-finance.js @@ -0,0 +1,18 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress,treasuryExports } = require("../helper/treasury"); + +const treasury ="0x744d16d200175d20e6d8e5f405aefb4eb7a962d1" +const treasury2 = "0x97990b693835da58a281636296d2bf02787dea17" +const YAM = "0x0AaCfbeC6a24756c20D41914F2caba817C0d8521" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, + + ], + owners: [treasury, treasury2], + ownTokens: [YAM], + }, +}) \ No newline at end of file diff --git a/projects/treasury/yearn.js b/projects/treasury/yearn.js index 5289b3b4de..7889fee6fb 100644 --- a/projects/treasury/yearn.js +++ b/projects/treasury/yearn.js @@ -1,28 +1,33 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress,treasuryExports } = require("../helper/treasury"); const yearnTreasury = "0x93a62da5a14c80f265dabc077fcee437b1a0efde"; const yearnTreasury1 = "0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52"; - -const YEARN = "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e"; - +const yearnTreasuryarb = "0xb6bc033d34733329971b938fef32fad7e98e56ad"; module.exports = treasuryExports({ ethereum: { tokens: [ nullAddress, - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',//USDC - '0x6B175474E89094C44Da98b954EedeAC495271d0F',//DAI + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.DAI, '0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490',//3crv - '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',//WETH - '0xdAC17F958D2ee523a2206206994597C13D831ec7',//USDT - '0xD533a949740bb3306d119CC777fa900bA034cd52',//CRV + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.CRV, '0xba100000625a3754423978a60c9317c58a424e3D',//BAL '0x31429d1856aD1377A8A0079410B297e1a9e214c2',//ANGLE - '0x57Ab1ec28D129707052df4dF418D58a2D46d5f51',//sUSD - '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',//WBTC + ADDRESSES.ethereum.sUSD, + ADDRESSES.ethereum.WBTC, ], owners: [yearnTreasury,yearnTreasury1], - ownTokens: [YEARN], + ownTokens: [ADDRESSES.ethereum.YFI], fetchTokens: true, }, + arbitrum: { + tokens: [ + nullAddress + ], + owners: [yearnTreasuryarb] + } }) \ No newline at end of file diff --git a/projects/treasury/yield-guild-game.js b/projects/treasury/yield-guild-game.js new file mode 100644 index 0000000000..209fd1e80b --- /dev/null +++ b/projects/treasury/yield-guild-game.js @@ -0,0 +1,57 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const Treasury = "0xe30ed74c6633a1b0d34a71c50889f9f0fdb7d68a"; +const YGG = "0x25f8087EAD173b73D6e8B84329989A8eEA16CF73"; +const Treasury1 = "0xf0103243f4d22b5696588646b21313d85916a16a" +const Treasury2 = "0x16b281438c5984a46d94acc6c4b31e252a03dfcf" +const Treasury3 = "0xcafeacdadd29f55ce935492e20f1f982df3fb51d" +const Treasury4 = "0x23eb4e02c29e69452718cd5caf2255488bc7ce3a" +const Treasury5 = "0xb981290d9d804075986482f0302c03a3cd2aff32" +const Treasury6 = "0x21653e2f0472afaf64ec85f585f0db4ab83a83f0" +const Treasury7 = "0x8e8d8015a7ffa49c83ee7a8773b0f69380cc6552" + + +const treasurySolana = "GvAm8xG5BSWXy286jWXWzYpN2xzPADQEoK9U8dQCDtzt" +const treasurySolana1 = "3fGSv3VdKvf7KSMt1o9Lb3dZ4YK9ScUTWktcrC4JJBTq" + +module.exports = treasuryExports({ + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.DAI,//DAI + ADDRESSES.ethereum.STETH,//stETH + ADDRESSES.ethereum.MATIC,//MATIC + ADDRESSES.ethereum.USDC,//USDC + ADDRESSES.ethereum.USDT, + '0x61E90A50137E1F645c9eF4a0d3A4f01477738406',//loka + '0xbA6B0dbb2bA8dAA8F5D6817946393Aef8D3A4487',//HSF + '0x232FB065D9d24c34708eeDbF03724f2e95ABE768',//SHEESHA + '0x0d02755a5700414B26FF040e1dE35D337DF56218' //BEND + ], + owners: [Treasury, Treasury1, Treasury2, Treasury3, Treasury5, Treasury6, Treasury7], + ownTokens: [YGG], + }, + solana: { + tokens: [ + "7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj" + ], + owners: [treasurySolana, treasurySolana1], + }, + optimism: { + tokens: [ + ADDRESSES.optimism.OP, + ADDRESSES.optimism.WETH + ], + owners: [Treasury1], + }, + polygon: { + tokens: [ + "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "0x8dF3aad3a84da6b69A4DA8aeC3eA40d9091B2Ac4", + "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + "0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a" + ], + owners: [Treasury2, Treasury4], + }, +}) \ No newline at end of file diff --git a/projects/treasury/zachxtb-theman.js b/projects/treasury/zachxtb-theman.js new file mode 100644 index 0000000000..bb7338de54 --- /dev/null +++ b/projects/treasury/zachxtb-theman.js @@ -0,0 +1,41 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasuryOP = "0x9D727911B54C455B0071A7B682FcF4Bc444B5596"; +const treasuryETH = "0x9D727911B54C455B0071A7B682FcF4Bc444B5596" +const treasuryARB = "0x9D727911B54C455B0071A7B682FcF4Bc444B5596" + +module.exports = treasuryExports({ + optimism: { + tokens: [ + nullAddress, + ADDRESSES.optimism.USDC, // USDC + ADDRESSES.optimism.OP + ], + owners: [treasuryOP], + }, + ethereum: { + tokens: [ + nullAddress, + ADDRESSES.ethereum.USDC, // USDC + ADDRESSES.ethereum.WETH, + ADDRESSES.ethereum.TUSD, + ADDRESSES.ethereum.DAI, + ADDRESSES.ethereum.USDT, + "0xE80C0cd204D654CEbe8dd64A4857cAb6Be8345a3", + ADDRESSES.ethereum.WBTC, + "0xC0c293ce456fF0ED870ADd98a0828Dd4d2903DBF", //AURA + "0xB6eD7644C69416d67B522e20bC294A9a9B405B31", //0XBTC + ], + owners: [treasuryETH], + }, + arbitrum: { + tokens: [ + nullAddress, + ADDRESSES.arbitrum.USDC, // USDC + ADDRESSES.arbitrum.USDC_CIRCLE, + ADDRESSES.arbitrum.WETH + ], + owners: [treasuryARB], + }, +}); \ No newline at end of file diff --git a/projects/treasury/zero-swap.js b/projects/treasury/zero-swap.js new file mode 100644 index 0000000000..634bfcdb6c --- /dev/null +++ b/projects/treasury/zero-swap.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x70f4f7a85100348fc33f1d8005703c8953bc67fd"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treasury/zyber-swap.js b/projects/treasury/zyber-swap.js new file mode 100644 index 0000000000..a313ffcc4b --- /dev/null +++ b/projects/treasury/zyber-swap.js @@ -0,0 +1,12 @@ +const { nullAddress, treasuryExports } = require("../helper/treasury"); + +const treasury = "0x5be4fb908a43d61b1c8086fe62e39ae8ec483926"; + +module.exports = treasuryExports({ + arbitrum: { + tokens: [ + nullAddress, + ], + owners: [treasury,], + }, +}) \ No newline at end of file diff --git a/projects/treehousefinance/index.js b/projects/treehousefinance/index.js index 538fb4b77c..86ec1db83e 100644 --- a/projects/treehousefinance/index.js +++ b/projects/treehousefinance/index.js @@ -6,4 +6,7 @@ const leaf = "0x1777850a0c498D38424CeA45fd324C68f06D0830" module.exports = { ...masterChefExports(chef, "avax", leaf, false), methodology: "TVL includes all farms in MasterChef contract", + hallmarks: [ + [1647043200, "Rug Pull"] + ] } \ No newline at end of file diff --git a/projects/tribe3/index.js b/projects/tribe3/index.js new file mode 100644 index 0000000000..ef871bd6de --- /dev/null +++ b/projects/tribe3/index.js @@ -0,0 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json'); +const { sumTokensExport } = require('../helper/sumTokens'); + +module.exports = { + arbitrum: { + tvl: sumTokensExport({ + tokensAndOwners: [ + // DEX + [ADDRESSES.arbitrum.WETH, '0x01b6407adf740d135ddf1ebdd1529407845773f3'], + // Insurance fund + [ADDRESSES.arbitrum.WETH, '0x3af692a5ab2da34f742686bd4a77b5e609ee9ec6'], + ] + }) + }, +}; diff --git a/projects/trickortreat/index.js b/projects/trickortreat/index.js index e4f3f4abf2..a54b8a2d27 100644 --- a/projects/trickortreat/index.js +++ b/projects/trickortreat/index.js @@ -1,4 +1,3 @@ -const sdk = require("@defillama/sdk"); const {addFundsInMasterChef} = require("../helper/masterchef"); const {pool2BalanceFromMasterChefExports} = require("../helper/pool2"); const {staking} = require("../helper/staking"); @@ -6,42 +5,9 @@ const {staking} = require("../helper/staking"); const masterchef = "0x2755AC6BD7BDbaCbdE08504f45f73D150Ee660F5"; const trick = "0xA5aFce54270D9afA6a80464bBD383BE506888e6A"; -const translate = { - "fantom:0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E": "0x6b175474e89094c44da98b954eedeac495271d0f", - "fantom:0xb3654dc3D10Ea7645f8319668E8F54d2574FBdC8": "0x514910771af9ca656af840dff83e8264ecf986ca" -} - -const wMEMO = "0x0da67235dd5787d67955420c84ca1cecd4e5bb3b" -const time = "avax:0xb54f16fb19478766a268f172c9480f8da1a7c9c3"; - -const wsSPA= "0x89346b51a54263cf2e92da79b1863759efa68692"; -const spa = "fantom:0x5602df4a94eb6c680190accfa2a475621e0ddbdc"; - async function tvl (timestamp, block, chainBlocks) { let balances = {}; await addFundsInMasterChef(balances, masterchef, chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`, undefined, [trick], true, true, trick); - for (let key in translate) { - balances[translate[key]] = balances[key]; - delete balances[key] - } - const memo = (await sdk.api.abi.call({ - target: wMEMO, - params: [balances["fantom:0xDDc0385169797937066bBd8EF409b5B3c0dFEB52"]], - abi:"function wMEMOToMEMO(uint256 _amount) view returns (uint256)", - block: chainBlocks.avax, - chain: "avax", - })).output; - balances[time] = memo - delete balances["fantom:0xDDc0385169797937066bBd8EF409b5B3c0dFEB52"]; - const sSPA = (await sdk.api.abi.call({ - target: wsSPA, - params:[balances["fantom:0x89346B51A54263cF2e92dA79B1863759eFa68692"]], - abi: 'function wOHMTosOHM(uint256 _amount) view returns (uint256)', - block: chainBlocks.fantom, - chain: "fantom" - })).output; - balances[spa] = sSPA; - delete balances["fantom:0x89346B51A54263cF2e92dA79B1863759eFa68692"]; return balances; } diff --git a/projects/trisolaris.js b/projects/trisolaris.js index d8be0aecb0..773321a384 100644 --- a/projects/trisolaris.js +++ b/projects/trisolaris.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { getUniTVL } = require('./helper/unknownTokens') const sdk = require('@defillama/sdk') const { sumTokens2 } = require('./helper/unwrapLPs') @@ -16,23 +17,23 @@ async function stableswapTVL(_, _b, { [chain]: block }) { contract: '0x458459E48dbAC0C8Ca83F8D0b7b29FEfE60c3970', tokens: [ '0x5183e1b1091804bc2602586919e6880ac1cf2896', - '0x4988a896b1227218e4a686fde5eabdcabd91571f', - '0xb12bfca5a55806aaf64e99521918a4bf0fc40802', + ADDRESSES.aurora.USDT_e, + ADDRESSES.aurora.USDC_e, ], }, { name: 'USDC/USDT', contract: '0x13e7a001EC72AB30D66E2f386f677e25dCFF5F59', tokens: [ - '0x4988a896b1227218e4a686fde5eabdcabd91571f', - '0xb12bfca5a55806aaf64e99521918a4bf0fc40802', + ADDRESSES.aurora.USDT_e, + ADDRESSES.aurora.USDC_e, ], }, { name: 'nUSD-USDC/USDT', contract: '0x3CE7AAD78B9eb47Fd2b487c463A17AAeD038B7EC', tokens: [ - '0x07379565cd8b0cae7c60dc78e7f601b34af2a21c', + ADDRESSES.aurora.nUSD, ], }, ] diff --git a/projects/tropicalfinance/index.js b/projects/tropicalfinance/index.js index 94b14256e4..b86658f4e0 100644 --- a/projects/tropicalfinance/index.js +++ b/projects/tropicalfinance/index.js @@ -1,18 +1,19 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getUniTVL } = require('../helper/unknownTokens') const { default: BigNumber } = require('bignumber.js'); const { staking } = require('../helper/staking') -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; -const DAIQUIRI = "0x24d8d5Cbc14FA6A740c3375733f0287188F8dF3b"; +const WBCH = ADDRESSES.smartbch.WBCH; +const DAIQUIRI = ADDRESSES.smartbch.DAIQUIRI; const MARGARITA = "0xe935C33b314330C773f9A135C0c8D8E857588609"; const FACTORY = "0x138504000feaEd02AD75B1e8BDb904f51C445F4C"; const MASTERCHEF_DAIQUIRI = "0xE4D74Af73114F72bD0172fc7904852Ee2E2b47B0"; const MASTERCHEF_MARGARITA = "0x428a6C7dEEdB7c26948c1e72Bba8d5FB5e7b6B0A" const COREASSETNAME = "bitcoin-cash"; const CHAIN = "smartbch"; -const FLEXUSD = "0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72"; -const LAW = "0x0b00366fBF7037E9d75E4A569ab27dAB84759302"; +const FLEXUSD = ADDRESSES.smartbch.flexUSD; +const LAW = ADDRESSES.smartbch.LAW; const CLY = "0x7642Df81b5BEAeEb331cc5A104bd13Ba68c34B91"; const bchMasterChef = async (timestamp, ethBlock, {[CHAIN]: block}) => { diff --git a/projects/tropykus-zkevm/index.js b/projects/tropykus-zkevm/index.js new file mode 100644 index 0000000000..70dce7d075 --- /dev/null +++ b/projects/tropykus-zkevm/index.js @@ -0,0 +1,6 @@ +const { aaveExports } = require('../helper/aave'); + +module.exports = { + methodology: `Counts the tokens locked in the contracts to be used as collateral to borrow or to earn yield. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted. There's multiple reasons behind this but one of the main ones is to avoid inflating the TVL through cycled lending`, + polygon_zkevm: aaveExports("polygon_zkevm", "0x4Dac514F520D051551372d277d1b2Fa3cF2AfdFF"), +} \ No newline at end of file diff --git a/projects/tropykus/index.js b/projects/tropykus/index.js index 28c69da162..f0bb4e9dbd 100644 --- a/projects/tropykus/index.js +++ b/projects/tropykus/index.js @@ -1,7 +1,5 @@ const { usdCompoundExports } = require('../helper/compound') module.exports = { - rsk: { - ...usdCompoundExports("0x962308fEf8edFaDD705384840e7701F8f39eD0c0", "rsk"), - } -} + rsk: usdCompoundExports("0x962308fEf8edFaDD705384840e7701F8f39eD0c0", "rsk"), +} \ No newline at end of file diff --git a/projects/trufin-trustake/index.js b/projects/trufin-trustake/index.js new file mode 100644 index 0000000000..e218d2f7b6 --- /dev/null +++ b/projects/trufin-trustake/index.js @@ -0,0 +1,24 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const abi = { + "totalShares": "uint256:totalShares", + "sharePrice": "function sharePrice() external view returns (uint256, uint256)", + "getDust": "uint256:getDust" +} + +const TRUSTAKE_CONTRACT_ADDR = "0xa43a7c62d56df036c187e1966c03e2799d8987ed" +const MATIC_TOKEN_ADDR = ADDRESSES.ethereum.MATIC + +async function tvl(timestamp, block, chainBlocks, { api }) { + const totalSupply = (await api.call({ abi: 'erc20:totalSupply', target: TRUSTAKE_CONTRACT_ADDR, })) + const sharePriceArray = (await api.call({ abi: abi.sharePrice, target: TRUSTAKE_CONTRACT_ADDR, })) + const dust = (await api.call({ abi: abi.getDust, target: TRUSTAKE_CONTRACT_ADDR, })) + const sharePrice = sharePriceArray[0] / sharePriceArray[1] / 1e18 + api.add(MATIC_TOKEN_ADDR, (totalSupply * sharePrice) + +dust) +} + +module.exports = { + methodology: `Counts the TVL of MATIC tokens in TruFin's TruStake vault.`, + ethereum: { + tvl + } +} diff --git a/projects/trufin/index.js b/projects/trufin/index.js index 8e25ed882f..89ea9c5f50 100644 --- a/projects/trufin/index.js +++ b/projects/trufin/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const abi = require('./abi.json') const TRUSTAKE_CONTRACT_ADDR = "0xcfab8530ccf1f9936daede537d6ebbc75289006d" -const MATIC_TOKEN_ADDR = "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0" +const MATIC_TOKEN_ADDR = ADDRESSES.ethereum.MATIC async function tvl(timestamp, block, chainBlocks, { api }) { const totalShares = (await api.call({ abi: abi.totalShares, target: TRUSTAKE_CONTRACT_ADDR, })) diff --git a/projects/trustswap/index.js b/projects/trustswap/index.js index 958bbb7945..56d6468f50 100644 --- a/projects/trustswap/index.js +++ b/projects/trustswap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -5,9 +6,9 @@ const staking_contract = "0x5A753021CE28CBC5A7c51f732ba83873D673d8cC"; const assets = [ // other tokens which probably for some reason was sent to the contract accidentally - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "0xdac17f958d2ee523a2206206994597c13d831ec7", - "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", + ADDRESSES.ethereum.USDC, + ADDRESSES.ethereum.USDT, + ADDRESSES.ethereum.UNI, ]; const stakingTvl = async (timestamp, ethBlock, chainBlocks) => { diff --git a/projects/tsunami-fi/index.js b/projects/tsunami-fi/index.js new file mode 100644 index 0000000000..b02dee7d69 --- /dev/null +++ b/projects/tsunami-fi/index.js @@ -0,0 +1,15 @@ +const { function_view, hexToString } = require('../helper/chain/aptos') + +async function tvl(_, _b, _cb, { api, }) { + const [data] = await function_view({ functionStr: '0x1786191d0ce793debfdef9890868abdcdc7053f982ccdd102a72732b3082f31d::basket::get_all_basket_coins_by_basket', type_arguments: ['0x1786191d0ce793debfdef9890868abdcdc7053f982ccdd102a72732b3082f31d::baskets::Basket1'] }) + data.forEach(({ coin_type_info: { account_address, module_name, struct_name }, reserve_amount, margin_occupied_amount, }) => { + const token = `${account_address}::${hexToString(module_name)}::${hexToString(struct_name)}` + api.add(token, reserve_amount) + // api.add(token, margin_occupied_amount * -1) + }) +} + + +module.exports = { + aptos: { tvl } +} \ No newline at end of file diff --git a/projects/ttswap/index.js b/projects/ttswap/index.js index 662b5eb69d..3d55c03325 100644 --- a/projects/ttswap/index.js +++ b/projects/ttswap/index.js @@ -14,7 +14,7 @@ async function tvl(_, _b, _cb, { api, }) { onlyArgs: true, fromBlock: 13154136, }) - const calls = logs.map(i => ({ target: i.token, params: i.exchange })) + const calls = logs.map(i => ({ target: i.token, params: i.exchange })).filter(i => i.target.toLowerCase() !== '0xcE393b11872EE5020828e443f6Ec9DE58CD8b6c5'.toLowerCase()) const allToken1Res = await api.multiCall({ abi: 'erc20:balanceOf', calls }) const tokenFilter = (_, i) => allToken1Res[i] && +allToken1Res[i] > 0 const token1s = calls.map(i => i.target).filter(tokenFilter) diff --git a/projects/turbos/index.js b/projects/turbos/index.js new file mode 100644 index 0000000000..a3bd84d715 --- /dev/null +++ b/projects/turbos/index.js @@ -0,0 +1,32 @@ +const sui = require("../helper/chain/sui"); +const axios = require("axios"); + +async function getPoolFactoryConfig() { + const result = await axios.get( + "https://s3.amazonaws.com/app.turbos.finance/sdk/contract.json" + ); + return result.data.mainnet.contract.PoolConfig; +} + +async function tvl(_timestamp, _block, _chainBlocks, { api }) { + // const poolFactoryConfig = await getPoolFactoryConfig(); + const poolFactoryConfig = '0xc294552b2765353bcafa7c359cd28fd6bc237662e5db8f09877558d81669170c'; + const parent = await sui.getObject(poolFactoryConfig); + const poolFields = await sui.getDynamicFieldObjects({ + parent: parent.fields.pools.fields.id.id, + }); + const poolIds = poolFields.map((item) => item.fields.value.fields.pool_id); + const poolList = await sui.getObjects(poolIds); + poolList.forEach(({ type, fields }) => { + const [coinA, coinB] = type.replace(">", "").split("<")[1].split(", "); + api.add(coinA, fields.coin_a); + api.add(coinB, fields.coin_b); + }); +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, +}; diff --git a/projects/twtstake/index.js b/projects/twtstake/index.js index 6852e6b63b..f0bfae4ff6 100644 --- a/projects/twtstake/index.js +++ b/projects/twtstake/index.js @@ -3,6 +3,9 @@ const TWT_STAKE_CONTRACT = '0x5e7c3c55eb5c0ee10817d70e414f4b1ee22d5ce3'; const TWT_TOKEN_CONTRACT = '0x4b0f1812e5df2a09796481ff14017e6005508003'; module.exports = { + hallmarks: [ + [1681948800, "TWTStake Flagged on Twitter"] + ], timetravel: true, misrepresentedTokens: false, methodology: 'Counts the number of TWT tokens in the TWT Stake contract.', diff --git a/projects/typhoon.js b/projects/typhoon.js index 1f199ec80e..e919f9fe1e 100644 --- a/projects/typhoon.js +++ b/projects/typhoon.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require('@defillama/sdk'); const tornado = '0x9cDb933eDab885bB767658B9ED5C3800bc1d761B'; const reserve = '0xC9B4Dff1ce5384C7014579099e63EA0092e14eD5'; -const weth = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; +const weth = ADDRESSES.ethereum.WETH; async function tvl(timestamp, block) { return { [weth] : Number((await sdk.api.eth.getBalance({ diff --git a/projects/typus-finance/index.js b/projects/typus-finance/index.js new file mode 100644 index 0000000000..35b1a2c78a --- /dev/null +++ b/projects/typus-finance/index.js @@ -0,0 +1,48 @@ +const sui = require("../helper/chain/sui"); + +// const TYPUS_DOV_SINGLE_REGISTRY = +// "0xb44c0fa1ab40f7699be3dce02475965a636ed850348435abb3b797b273f6c551"; +const SINGLE_DEPOSIT_VAULT_REGISTRY = + "0x4ae62c4d67f9f5d7077626fcc6d450535c4df710da455a0a2bd2226558832629"; +const SINGLE_BID_VAULT_REGISTRY = + "0x2c8cdd00ced47e717420cd2fc54990b3b38e115e34a9209271063a59ddeeb059"; + +async function tvl(_, _1, _2, { api }) { + const depositVaultFields = await sui.getDynamicFieldObjects({ + parent: SINGLE_DEPOSIT_VAULT_REGISTRY, + }); + + const depositVaultIds = depositVaultFields.map((item) => item.fields.id.id); + + const depositVaults = await sui.getObjects(depositVaultIds); + + depositVaults.forEach(({ type, fields: { value: { fields }} }) => { + const coin = type.replace(">>", "").split(", ")[2]; + api.add(coin, fields.active_sub_vault.fields.balance) + api.add(coin, fields.deactivating_sub_vault.fields.balance) + api.add(coin, fields.inactive_sub_vault.fields.balance) + api.add(coin, fields.warmup_sub_vault.fields.balance) + }); + + const bidVaultFields = await sui.getDynamicFieldObjects({ + parent: SINGLE_BID_VAULT_REGISTRY, + }); + + const bidVaultIds = bidVaultFields.map((item) => item.fields.id.id); + + const bidVaults = await sui.getObjects(bidVaultIds); + + bidVaults.forEach(({ type, fields: { value: { fields }} }) => { + const coin = type.replace(">>", "").split(", ")[2]; + api.add(coin, fields.bidder_sub_vault.fields.balance) + api.add(coin, fields.premium_sub_vault.fields.balance) + api.add(coin, fields.performance_fee_sub_vault.fields.balance) + }); +} + +module.exports = { + timetravel: false, + sui: { + tvl, + }, +}; diff --git a/projects/tzwrap/tokens.js b/projects/tzwrap/tokens.js index 13277cf574..4a9de54197 100644 --- a/projects/tzwrap/tokens.js +++ b/projects/tzwrap/tokens.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // info taken from https://indexer.app.tzwrap.com/v1/configuration module.exports = [ @@ -5,126 +6,126 @@ module.exports = [ "ethereumSymbol": "LEO", "ethereumName": "Bitfinex LEO Token", "ethereumContractAddress": "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "BUSD", "ethereumName": "Binance USD", - "ethereumContractAddress": "0x4fabb145d64652a948d72533023f6e7a623c7c53", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.BUSD, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "LINK", "ethereumName": "ChainLink Token", - "ethereumContractAddress": "0x514910771af9ca656af840dff83e8264ecf986ca", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.LINK, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "DAI", "ethereumName": "Dai Stablecoin", - "ethereumContractAddress": "0x6b175474e89094c44da98b954eedeac495271d0f", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.DAI, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "SUSHI", "ethereumName": "SushiToken", - "ethereumContractAddress": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "ethereumContractAddress": ADDRESSES.ethereum.SUSHI, + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "HT", "ethereumName": "Huobi Token", "ethereumContractAddress": "0x6f259637dcd74c767781e37bc6133cd6a68aa161", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "OKB", "ethereumName": "OKB", "ethereumContractAddress": "0x75231f58b43240c9718dd58b4967c5114342a86c", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "AAVE", "ethereumName": "Aave Token", - "ethereumContractAddress": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "ethereumContractAddress": ADDRESSES.ethereum.AAVE, + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "PAX", "ethereumName": "Paxos Standard", "ethereumContractAddress": "0x8e870d67f660d95d5be530380d0ec0bd388289e1", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "MKR", "ethereumName": "Maker", - "ethereumContractAddress": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "ethereumContractAddress": ADDRESSES.ethereum.MKR, + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "HUSD", "ethereumName": "HUSD", "ethereumContractAddress": "0xdf574c24545e5ffecb9a659c229253d4111d87e1", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "UNI", "ethereumName": "Uniswap", - "ethereumContractAddress": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "ethereumContractAddress": ADDRESSES.ethereum.UNI, + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "WBTC", "ethereumName": "Wrapped BTC", - "ethereumContractAddress": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.WBTC, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "FTT", "ethereumName": "FTX Token", "ethereumContractAddress": "0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "MATIC", "ethereumName": "Matic Token", - "ethereumContractAddress": "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.MATIC, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "CRO", "ethereumName": "Crypto.com Coin", "ethereumContractAddress": "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "USDC", "ethereumName": "USD Coin", - "ethereumContractAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.USDC, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "CEL", "ethereumName": "Celsius Network", "ethereumContractAddress": "0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "COMP", "ethereumName": "Compound", "ethereumContractAddress": "0xc00e94cb662c3520282e6f5717214004a7f26888", - "tezosWrappingContract": "KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ" + "tezosWrappingContract": ADDRESSES.tezos.AAVE }, { "ethereumSymbol": "WETH", "ethereumName": "Wrapped Ether", - "ethereumContractAddress": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.WETH, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e }, { "ethereumSymbol": "USDT", "ethereumName": "Tether USD", - "ethereumContractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "tezosWrappingContract": "KT1UsSfaXyqcjSVPeiD7U1bWgKy3taYN7NWY" + "ethereumContractAddress": ADDRESSES.ethereum.USDT, + "tezosWrappingContract": ADDRESSES.tezos.WETH_e } ] \ No newline at end of file diff --git a/projects/ubiquitydao/index.js b/projects/ubiquitydao/index.js index c66363cdce..7b31e8314d 100644 --- a/projects/ubiquitydao/index.js +++ b/projects/ubiquitydao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const crvPool = "0x20955CB69Ae1515962177D164dfC9522feef567E"; @@ -25,7 +26,7 @@ async function tvl(timestamp, block) { poolBalances.forEach((p) => { let token = p.input.target; if (token === "0x0F644658510c95CB46955e55D7BA9DDa9E9fBEc6") { - token = "0x6b175474e89094c44da98b954eedeac495271d0f"; + token = ADDRESSES.ethereum.DAI; } sdk.util.sumSingleBalance(balances, token, p.output); }); diff --git a/projects/ultronStakingHub/index.js b/projects/ultronStakingHub/index.js index 8a513d3f66..28d215e849 100644 --- a/projects/ultronStakingHub/index.js +++ b/projects/ultronStakingHub/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require('../helper/unknownTokens') @@ -7,7 +8,7 @@ module.exports = { tvl: () => ({}), staking: staking({ owner: '0xd130811147bb87f313c555e5281b94b9e71b480a', - tokens: ['0x3a4F06431457de873B588846d139EC0d86275d54'], + tokens: [ADDRESSES.ultron.wULX], chain: 'ultron' }) } diff --git a/projects/ultronSwap/index.js b/projects/ultronSwap/index.js index 18e1c342a9..4c19a4bba6 100644 --- a/projects/ultronSwap/index.js +++ b/projects/ultronSwap/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL, staking } = require('../helper/unknownTokens') module.exports = { @@ -10,7 +11,7 @@ module.exports = { }), staking: staking({ owner: '0xf26E50c26Ed51AbeC4078380Ed1F13440011F2A1', - tokens: ['0x3a4F06431457de873B588846d139EC0d86275d54'], + tokens: [ADDRESSES.ultron.wULX], chain: 'ultron' }) } diff --git a/projects/umamifinance/index.js b/projects/umamifinance/index.js index 25d26ca0e0..c5c87f57c8 100644 --- a/projects/umamifinance/index.js +++ b/projects/umamifinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); @@ -11,7 +12,15 @@ const OHM_STAKING_sUMAMI = "0xc9ecFeF2fac1E38b951B8C5f59294a8366Dfbd81"; // glpUSDC vault is now deprecated const glpUSDC = "0x2e2153fd13459eba1f277ab9acd624f045d676ce"; const glpInitBlock = 18703806; -const USDC = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8"; +const USDC = ADDRESSES.arbitrum.USDC; + +const v2Vaults = [ + "0x727eD4eF04bB2a96Ec77e44C1a91dbB01B605e42", + "0xbb84D79159D6bBE1DE148Dc82640CaA677e06126", + "0x6a89FaF99587a12E6bB0351F2fA9006c6Cd12257", + "0xe0A21a475f8DA0ee7FA5af8C1809D8AC5257607d", + "0x37c0705A65948EA5e0Ae1aDd13552BCaD7711A23", +]; module.exports = { doublecounted: true, @@ -19,7 +28,7 @@ module.exports = { start: 1657027865, // UMAMI deployment block ts arbitrum: { staking: stakings([mUMAMI, OHM_STAKING_sUMAMI], UMAMI, "arbitrum"), - tvl: async (_, _b, { arbitrum: block }) => { + tvl: async (_, _b, { arbitrum: block }, { api }) => { const balances = {}; if (!block || block > glpInitBlock + 10) { @@ -36,6 +45,16 @@ module.exports = { ); } + const assets = await api.multiCall({ abi: 'address:asset', calls: v2Vaults }); + const bals = await api.multiCall({ abi: 'uint256:totalAssets', calls: v2Vaults }); + for (let i = 0; i < assets.length; i++) { + sdk.util.sumSingleBalance( + balances, + `arbitrum:${assets[i]}`, + bals[i] + ); + } + return balances; }, }, diff --git a/projects/umee/index.js b/projects/umee/index.js index 496c68b98c..1fc6c6de6f 100644 --- a/projects/umee/index.js +++ b/projects/umee/index.js @@ -1,9 +1,8 @@ const sdk = require("@defillama/sdk"); const { transformBalances } = require("../helper/portedTokens"); -const { getLogs, } = require("../helper/cache/getLogs"); - -const { sumTokens2 } = require("../helper/unwrapLPs"); +const { aaveV2Export } = require("../helper/aave"); const { queryV1Beta1 } = require("../helper/chain/cosmos"); + let data; async function getData() { @@ -41,62 +40,6 @@ async function borrowed() { return transformBalances("umee", balances); } -async function ethTvl(_, _b, _cb, { api }) { - const logs = await getLogs({ - api, - target: "0xe296db0a0e9a225202717e9812bf29ca4f333ba6", - topics: [ - "0x3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f", - ], - fromBlock: 14216544, - eventAbi: - "event ReserveInitialized (address indexed asset, address indexed aToken, address stableDebtToken, address variableDebtToken, address interestRateStrategyAddress)", - onlyArgs: true, - }); - const tokensAndOwners = logs.map((i) => [i.asset, i.aToken]); - return sumTokens2({ api, tokensAndOwners }); -} - -async function ethBorrowed(_, _b, _cb, { api }) { - const balances = {}; - const logs = await getLogs({ - api, - target: "0xe296db0a0e9a225202717e9812bf29ca4f333ba6", - topics: [ - "0x3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f", - ], - fromBlock: 14216544, - eventAbi: - "event ReserveInitialized (address indexed asset, address indexed aToken, address stableDebtToken, address variableDebtToken, address interestRateStrategyAddress)", - onlyArgs: true, - }); - const [stableDebtSupplies, variableDebtSupplies] = await Promise.all([ - api.multiCall({ - abi: "uint256:totalSupply", - calls: logs.map((i) => i.stableDebtToken), - }), - api.multiCall({ - abi: "uint256:totalSupply", - calls: logs.map((i) => i.variableDebtToken), - }), - ]); - logs.forEach((v, i) => { - sdk.util.sumSingleBalance( - balances, - v.asset, - stableDebtSupplies[i], - api.chain - ); - sdk.util.sumSingleBalance( - balances, - v.asset, - variableDebtSupplies[i], - api.chain - ); - }); - return balances; -} - module.exports = { timetravel: false, methodology: "Total supplied assets - total borrowed assets", @@ -104,8 +47,5 @@ module.exports = { tvl, borrowed, }, - ethereum: { - tvl: ethTvl, - borrowed: ethBorrowed, - }, + ethereum: aaveV2Export('0xe296db0a0e9a225202717e9812bf29ca4f333ba6', { fromBlock: 14216544, }), }; diff --git a/projects/unamano/index.js b/projects/unamano/index.js index c6aa1b2c7e..8b64744266 100644 --- a/projects/unamano/index.js +++ b/projects/unamano/index.js @@ -1,5 +1,5 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') -const { tokensBare } = require('../helper/tokenMapping') const abis = { poolInfo: "function poolInfo(uint256) view returns (address candyToken, uint256 startBlock, uint256 endBlock, uint256 lastRewardBlock, uint256 accPerShare, uint256 candyPerBlock, uint256 lpSupply, uint256 candyBalance, uint256 le12, tuple(address creator, uint256 unlockTime, uint256 maximumStaking, uint8 status, address multisignatureWallet, address assetManagementAddr) una)", @@ -10,7 +10,7 @@ module.exports = { ethereum:{ tvl: async (_, b, cb, { api }) => { const info = await api.fetchList({ lengthAbi: abis.poolLength, itemAbi: abis.poolInfo, target: '0x078aadff42c94b01f135b0ab1d4b794902c67c3f'}) - return sumTokens2({ api, tokens: [tokensBare.steth], owners: info.map(i => i.una.assetManagementAddr)}) + return sumTokens2({ api, tokens: [ADDRESSES.ethereum.STETH], owners: info.map(i => i.una.assetManagementAddr)}) }, }, } diff --git a/projects/unbk/fantom-yields.js b/projects/unbk/fantom-yields.js index 8fff40fe1e..9112413a9b 100644 --- a/projects/unbk/fantom-yields.js +++ b/projects/unbk/fantom-yields.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { fyields: [ { - yieldBearingAsset: "0x82f0B8B456c1A451378467398982d4834b6829c1", //MIM + yieldBearingAsset: ADDRESSES.fantom.MIM, //MIM yieldProxy: "0xf730167FC2aF7a02db63d3e8CE54179A70Ea72b7", chain: "fantom", router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", }, { - yieldBearingAsset: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", //WFTM + yieldBearingAsset: ADDRESSES.fantom.WFTM, //WFTM yieldProxy: "0xa6Dd261D8801457d4B66a6b5C262E04931C36E99", chain: "fantom", router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", @@ -25,7 +26,7 @@ module.exports = { router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", }, { - yieldBearingAsset: "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", //USDC + yieldBearingAsset: ADDRESSES.fantom.USDC, //USDC yieldProxy: "0xc0Cf1846134D90CDA5eC8244fe8c992F7A96500F", chain: "fantom", router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", @@ -37,13 +38,13 @@ module.exports = { router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", }, { - yieldBearingAsset: "0x049d68029688eAbF473097a2fC38ef61633A3C7A", //fUSDT + yieldBearingAsset: ADDRESSES.fantom.fUSDT, //fUSDT yieldProxy: "0xD30303241c53097FEa1f6D75f4f0a77FEF22d435", chain: "fantom", router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", }, { - yieldBearingAsset: "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E", //DAI + yieldBearingAsset: ADDRESSES.fantom.DAI, //DAI yieldProxy: "0xf58e5571FaEB95C703e0eBb4fDFC2eb7dB18FC53", chain: "fantom", router: "0xa2E7017FA7f38BE3eE2F6BBcA09BDBF286Bb46DD", diff --git a/projects/unfederalreserve/index.js b/projects/unfederalreserve/index.js index 0796d56e0b..baf5f92b33 100644 --- a/projects/unfederalreserve/index.js +++ b/projects/unfederalreserve/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {fullCoumpoundExports} = require('../helper/compound') -module.exports=fullCoumpoundExports("0x3105D328c66d8d55092358cF595d54608178E9B5", "ethereum", "0xFaCecE87e14B50eafc85C44C01702F5f485CA460", "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2") \ No newline at end of file +module.exports=fullCoumpoundExports("0x3105D328c66d8d55092358cF595d54608178E9B5", "ethereum", "0xFaCecE87e14B50eafc85C44C01702F5f485CA460", ADDRESSES.ethereum.WETH) \ No newline at end of file diff --git a/projects/unicrypt-v3/index.js b/projects/unicrypt-v3/index.js new file mode 100644 index 0000000000..ef338a99b7 --- /dev/null +++ b/projects/unicrypt-v3/index.js @@ -0,0 +1,27 @@ +const sdk = require('@defillama/sdk') +const { sumTokens2 } = require('../helper/unwrapLPs') +const { getCoreAssets } = require('../helper/tokenMapping') + +const config = { + ethereum: { reserves: ['0x231278edd38b00b07fbd52120cef685b9baebcc1'] }, + arbitrum: { reserves: ['0xfa104eb3925a27e6263e05acc88f2e983a890637'] }, + bsc: { reserves: ['0x0D29598EC01fa03665feEAD91d4Fb423F393886c'] }, + polygon: { reserves: ['0xc22218406983bf88bb634bb4bf15fa4e0a1a8c84'] }, +} + +module.exports = { + misrepresentedTokens: true, +} + +Object.keys(config).forEach(chain => { + const { reserves } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const uniV3WhitelistedTokens = await getCoreAssets(api.chain) + const tempBalances = await sumTokens2({ api, owners: reserves, resolveUniV3: true, uniV3WhitelistedTokens, }) + const balances = {} // we multiple core assets value by 2 as positions are spread between 0 - ∞ + Object.entries(tempBalances).forEach(([token, balance]) => sdk.util.sumSingleBalance(balances, token, balance * 2)) + return balances + } + } +}) \ No newline at end of file diff --git a/projects/unicrypt/config.js b/projects/unicrypt/config.js index 27173207d1..bf1944cc9a 100644 --- a/projects/unicrypt/config.js +++ b/projects/unicrypt/config.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') // const { ethereum } = require(".") const { getNumLockedTokens, getLockedTokenAtIndex, @@ -24,7 +25,7 @@ const { getNumLockedTokens, getLockedTokenAtIndex, const tokens = { uncx_eth: '0xaDB2437e6F65682B85F814fBc12FeC0508A7B1D0', - weth: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' + weth: ADDRESSES.ethereum.WETH } const governanceTokens = { // UNCX diff --git a/projects/unidex/index.js b/projects/unidex/index.js index dae1dc8ddf..55bc1ec7ab 100644 --- a/projects/unidex/index.js +++ b/projects/unidex/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require('../helper/unwrapLPs') async function FantomTvl(_time, _ethBlock, { fantom: block }) { @@ -6,14 +7,53 @@ async function FantomTvl(_time, _ethBlock, { fantom: block }) { "usdcPool": "0x7A494C755911Ce06444C47248108439a06Ac028C", "daiPool": "0xc451df1b05828519c014cb967ef1a614bd41834d", }; - const usdc = "0x04068da6c83afcfa0e13ba15a6696662335d5b75"; - const dai = "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"; + const usdc = ADDRESSES.fantom.USDC; + const dai = ADDRESSES.fantom.DAI; const chain = 'fantom' const tokens = [usdc, dai, nullAddress] const owners = Object.values(contracts) return sumTokens2({ chain, block, tokens, owners, }) } +async function ArbitrumTvl(_time, _ethBlock, { arbitrum: block }) { + const contracts = { + "ethPool": "0xdAF7D157F5c6E0F1d7917Ca02a7C185cEF81e6d0", + "usdcPool": "0x09E122453A079bc2Be621769ae7799e53dA0054E", + "daiPool": "0xb764729C6bEbd6E60E151F2c46aFce7D6Ff513fD", + "usdtPool": "0x9f6B9e253De52C5fD6c65283ff472b15520a7070", + "wbtcPool": "0xe736742Eb62F271c48F4a26168FD8F356AeE68db", + "arbPool": "0xF1Cb521C753e41906073eBEd30FE34BCB00845f8", + "mimPool": "0x266B30394da3D99a846dD30A2F7C50bb523c5dE1", + "gdaiPool": "0x7638Db20715c5AC09f52bE1E3a4DBb220680BdFd", + "ramPool": "0x914172b52262E867D8f2959D884e0ea73795B2c6", + "maiPool": "0xEfD0B28810dC3cdD88763f40DCc44462bb85Cf32", + "gmxPool": "0xDaa78E776D3788F9FBABDAc02aa6De45f7BC50C6", + "wstethPool": "0x53C6c525a635eF56Bce43d4523D90aACE551D81b", + "gnsPool": "0x13ff1aB07540b1681173003E361D046530506c11", + "capPool": "0x99DDb3E66A592579B9D46a47824042F62D690a9e", + "unshethPool": "0x5372Af9b4E9d4b9C016574Dad0f2406Dfe023D5F", + }; + const usdc = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"; + const dai = "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"; + const usdt = "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9"; + const wbtc = "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f"; + const arb = "0x912ce59144191c1204e64559fe8253a0e49e6548"; + const mim = "0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a"; + const gdai = "0xd85e038593d7a098614721eae955ec2022b9b91b"; + const ram = "0xaaa6c1e32c55a7bfa8066a6fae9b42650f262418"; + const mai = "0x5979D7b546E38E414F7E9822514be443A4800529"; + const gmx = "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a"; + const wsteth = "0x5979D7b546E38E414F7E9822514be443A4800529"; + const gns = "0x18c11FD286C5EC11c3b683Caa813B77f5163A122"; + const cap = "0x031d35296154279dc1984dcd93e392b1f946737b"; + const unsheth = "0x0Ae38f7E10A43B5b2fB064B42a2f4514cbA909ef"; + + const chain = 'arbitrum' + const tokens = [usdc, dai, nullAddress, usdt, wbtc, arb, mim, gdai, ram, mai, gmx, wsteth, gns, cap, unsheth] + const owners = Object.values(contracts) + return sumTokens2({ chain, block, tokens, owners, }) +} + async function BobaTvl(_time, _ethBlock, { boba: block }) { const contracts = { "ethpool": "0x9673B0E0F07e4a6da712F6847aE93C3F157DD509", @@ -29,7 +69,7 @@ async function MetisTvl(_time, _ethBlock, { metis: block }) { "metisPool": "0x9Ba3db52BC401F4EF8ba23e56268C3AdE0290837", "wethPool": "0xb3D7D548dA38Dac2876Da57842a3cbaaf9a3bD96", }; - const weth = "0x420000000000000000000000000000000000000a"; + const weth = ADDRESSES.metis.WETH; const chain = 'metis' const tokens = [weth, nullAddress] const owners = Object.values(contracts) @@ -40,7 +80,7 @@ async function OpTvl(_time, _ethBlock, { optimism: block }) { const contracts = { "daiPool": "0xCdDF71750E596b4C38785afFEc3bd4C9bff43f6F", }; - const dai = "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"; + const dai = ADDRESSES.optimism.DAI; const chain = 'optimism' const tokens = [dai] const owners = Object.values(contracts) @@ -51,7 +91,7 @@ async function zkSyncTvl(_time, _ethBlock, { era: block }) { const contracts = { "usdcPool": "0xa41A6a4A04E711B53a82E594CeB525e89206627A", }; - const usdc = "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4"; + const usdc = ADDRESSES.era.USDC; const chain = 'era' const tokens = [usdc] const owners = Object.values(contracts) @@ -62,7 +102,7 @@ async function BscTvl(_time, _ethBlock, { bsc: block }) { const contracts = { "busdPool": "0xa8D4bd632f394CED42BD439Bc34F09198072e519", }; - const busd = "0xe9e7cea3dedca5984780bafc599bd69add087d56"; + const busd = ADDRESSES.bsc.BUSD; const chain = 'bsc' const tokens = [busd] const owners = Object.values(contracts) @@ -74,6 +114,9 @@ module.exports = { fantom: { tvl: FantomTvl }, + arbitrum: { + tvl: ArbitrumTvl + }, boba: { tvl: BobaTvl }, diff --git a/projects/unifi-protocol-staking/index.js b/projects/unifi-protocol-staking/index.js new file mode 100644 index 0000000000..b52edc3892 --- /dev/null +++ b/projects/unifi-protocol-staking/index.js @@ -0,0 +1,32 @@ + + +const { get } = require('../helper/http') +const { toUSDTBalances } = require('../helper/balances') +let _stakedResponse + +const mapping = { + harmony: 'Harmony', + icon: 'Icon', + ontology: 'Ontology', + tron: 'Tron', + iotex: 'IoTeX', +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, +} + +function stakingChain(chain) { + module.exports[chain] = { + tvl: async () => { + if (!_stakedResponse) _stakedResponse = get('https://data.unifi.report/api/stake-data/grouped') + const { results } = await _stakedResponse + const blockchainName = mapping[chain] + const { delegated_stake_usd } = results.find(i => i.blockchain === blockchainName) + return toUSDTBalances(delegated_stake_usd) + } + } +} + +Object.keys(mapping).forEach(stakingChain) \ No newline at end of file diff --git a/projects/unifi-protocol/index.js b/projects/unifi-protocol/index.js index 1c08c6e170..a40d5fe2aa 100644 --- a/projects/unifi-protocol/index.js +++ b/projects/unifi-protocol/index.js @@ -1,43 +1,36 @@ const { getUniTVL } = require('../helper/unknownTokens') const { staking } = require('../helper/staking') -const { getTokenBalance } = require('../helper/chain/tron'); -const { toUSDTBalances } = require('../helper/balances') -const { get } = require('../helper/http') -const { mergeExports } = require('../helper/utils') const dexExports = { + timetravel: false, + misrepresentedTokens: true, avax: { tvl: getUniTVL({ factory: '0x839547067bc885db205F5fA42dcFeEcDFf5A8530', - chain: 'avax', useDefaultCoreAssets: true, }), }, bsc: { tvl: getUniTVL({ factory: '0xA5Ba037Ec16c45f8ae09e013C1849554C01385f5', - chain: 'bsc', useDefaultCoreAssets: true, }), }, iotex: { tvl: getUniTVL({ factory: '0x839547067bc885db205F5fA42dcFeEcDFf5A8530', - chain: 'iotex', useDefaultCoreAssets: true, }), }, ontology_evm: { tvl: getUniTVL({ factory: '0x839547067bc885db205F5fA42dcFeEcDFf5A8530', - chain: 'ontology_evm', useDefaultCoreAssets: true, }), }, ethereum: { tvl: getUniTVL({ factory: '0x08e7974CacF66C5a92a37c221A15D3c30C7d97e0', - chain: 'ethereum', useDefaultCoreAssets: true, }), staking: staking('0x2e2fb3db9ecdb9b7d9eb05e00964c8941f7171a7', '0x441761326490cACF7aF299725B6292597EE822c2') @@ -45,71 +38,33 @@ const dexExports = { fantom: { tvl: getUniTVL({ factory: '0x839547067bc885db205F5fA42dcFeEcDFf5A8530', - chain: 'fantom', useDefaultCoreAssets: true, }), }, harmony: { tvl: getUniTVL({ factory: '0x7aB6ef0cE51a2aDc5B673Bad7218C01AE9B04695', - chain: 'harmony', useDefaultCoreAssets: true, }), }, polygon: { tvl: getUniTVL({ factory: '0x4FEE52912f81B78C3CdcB723728926ED6a893D27', - chain: 'polygon', useDefaultCoreAssets: true, }), }, bittorrent: { tvl: getUniTVL({ factory: '0xCAaB36C77841647dC9955B3b1D03710E9B9F127f', - chain: 'bittorrent', useDefaultCoreAssets: true, }), }, tron: { - tvl: async () => { - return { - "tether": await getTokenBalance('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', 'TDrFhbM8kDiPtSx3Cgd71K3qwwu77bRdYQ'), - "tron": await getTokenBalance('TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR', 'TDrFhbM8kDiPtSx3Cgd71K3qwwu77bRdYQ'), - } - } + tvl: getUniTVL({ + factory: 'TUtmsH4DZewoihrybFU2RG1pdW9sBhuSRZ', + useDefaultCoreAssets: true, + }), }, } - -let _stakedResponse - -const mapping = { - harmony: 'Harmony', - icon: 'Icon', - ontology: 'Ontology', - tron: 'Tron', - iotex: 'IoTeX', -} - -const stakingExports = {} - -function stakingChain(chain) { - stakingExports[chain] = { - tvl: async () => { - if (!_stakedResponse) _stakedResponse = get('https://data.unifi.report/api/stake-data/grouped') - const { results } = await _stakedResponse - const blockchainName = mapping[chain] - const { delegated_stake_usd } = results.find(i => i.blockchain === blockchainName) - return toUSDTBalances(delegated_stake_usd) - } - } -} - -Object.keys(mapping).forEach(stakingChain) - -module.exports = mergeExports([{ - timetravel: false, -}, - dexExports, - stakingExports, -]) +module.exports = dexExports \ No newline at end of file diff --git a/projects/union-finance/index.js b/projects/union-finance/index.js index 2c1d587f8b..4b6a8e473c 100644 --- a/projects/union-finance/index.js +++ b/projects/union-finance/index.js @@ -1,16 +1,22 @@ -const sdk = require("@defillama/sdk"); + +const ADDRESSES = require('../helper/coreAssets.json') const config = { ethereum: { userManager: "0x49c910Ba694789B58F53BFF80633f90B8631c195", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", + DAI: ADDRESSES.ethereum.DAI, uDAI: "0x954F20DF58347b71bbC10c94827bE9EbC8706887", }, arbitrum: { userManager: "0xb71F3D4342AaE0b8D531E14D2CF2F45d6e458A5F", - DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", + DAI: ADDRESSES.optimism.DAI, uDAI: "0x954F20DF58347b71bbC10c94827bE9EbC8706887", }, + optimism: { + userManager: "0x8E195D65b9932185Fcc76dB5144534e0f3597628", + DAI: ADDRESSES.optimism.DAI, + uDAI: "0xE478b5e7A423d7CDb224692d0a816CA146A744b2", + }, }; const abi = { @@ -20,85 +26,31 @@ const abi = { totalBorrows: "uint256:totalBorrows", }; -function tvl(chain) { - return async function (_, __, chainBlocks) { - const chainBlock = chainBlocks[chain]; - - const { userManager, uDAI } = config[chain]; - - const totalStaked = ( - await sdk.api.abi.call({ - abi: abi.totalStaked, - target: userManager, - params: [], - chain, - block: chainBlock, - }) - ).output; - - const totalRedeemable = ( - await sdk.api.abi.call({ - abi: abi.totalRedeemable, - target: uDAI, - params: [], - chain, - block: chainBlock, - }) - ).output; - - const totalReserves = ( - await sdk.api.abi.call({ - abi: abi.totalReserves, - target: uDAI, - params: [], - chain, - block: chainBlock, - }) - ).output; - - const total = [totalStaked, totalRedeemable, totalReserves].reduce( - (acc, n) => Number(n) + Number(acc), - 0 - ); - - return { - [config[chain].DAI]: total, - }; - }; +async function tvl() { + const { api } = arguments[3] + const { userManager, DAI, uDAI } = config[api.chain] + const bals = await api.batchCall([ + { target: userManager, abi: abi.totalStaked }, + { target: uDAI, abi: abi.totalRedeemable }, + { target: uDAI, abi: abi.totalReserves }, + ]) + bals.forEach(i => api.add(DAI, i)) } -function borrowing(chain) { - return async function (_, __, chainBlocks) { - const chainBlock = chainBlocks[chain]; - - const { uDAI } = config[chain]; - - const totalBorrows = ( - await sdk.api.abi.call({ - abi: abi.totalBorrows, - target: uDAI, - params: [], - chain, - block: chainBlock, - }) - ).output; - - return { - [config[chain].DAI]: totalBorrows, - }; - }; +async function borrowed() { + const { api } = arguments[3] + const { DAI, uDAI } = config[api.chain] + const borrows = await api.call({ target: uDAI, abi: abi.totalBorrows, }) + api.add(DAI, borrows) } module.exports = { - timetravel: true, - misrepresentedTokens: false, - methodology: "Counts the tokens locked in the contracts to be used to underwrite or to borrow. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted.", - ethereum: { - tvl: tvl("ethereum"), - borrowed: borrowing("ethereum"), - }, - arbitrum: { - tvl: tvl("arbitrum"), - borrowed: borrowing("arbitrum"), - }, + methodology: + "Counts the tokens locked in the contracts to be used to underwrite or to borrow. Borrowed coins are not counted towards the TVL, so only the coins actually locked in the contracts are counted.", }; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl, borrowed, + } +}) diff --git a/projects/unipilot/index.js b/projects/unipilot/index.js index ae599d8200..6a2f2b6338 100644 --- a/projects/unipilot/index.js +++ b/projects/unipilot/index.js @@ -1,6 +1,6 @@ -const sdk = require("@defillama/sdk"); +const { cachedGraphQuery } = require('../helper/cache') const { getLogs } = require("../helper/cache/getLogs"); -const { sumTokens2 } = require('../helper/unwrapLPs') +const { sumTokens2 } = require("../helper/unwrapLPs"); const { staking } = require("../helper/staking"); const getPositionDetails = "function getPositionDetails() returns (uint256 amount0, uint256 amount1, uint256 fees0, uint256 fees1, uint128 baseLiquidity, uint128 rangeLiquidity)"; @@ -13,17 +13,30 @@ const FACTORY_ADDRESSES = { polygon: { activeFactory: "0x95b77505b38f8a261ada04f54b8d0cda08904708", passiveFactory: "0x2536527121fc1048ae5d45327a34241a355a6a95", + activeFactoryQ: "0xC99fA77AB721817Da9dD3C3b4F8ecB13772FCECE", + passiveFactoryQ: "0xbd712D4dbd4b8d0cD2A98aDb0f9fC2928031b16F", }, arbitrum: { activeFactory: "0xca69c359e3297aa855e77f83e071feab17f0ede6", passiveFactory: "0x6900c436cf15d6d0016dc71a5ce5ade843031efd", }, + bsc: { + activeFactory: "0x9c7cB0BB03044D6c1c472b26058bFA61B9956D22", + passiveFactory: "0x6900c436CF15D6D0016dC71A5CE5ADe843031eFd", + }, + polygon_zkevm: { + activeFactoryQ: "0xC99fA77AB721817Da9dD3C3b4F8ecB13772FCECE", + passiveFactoryQ: "0xbd712D4dbd4b8d0cD2A98aDb0f9fC2928031b16F", + }, + dogechain: { + activeFactoryQ: "0x16C6D274e076c7b36a4D3fEE2f9AB2E12d220bd5", + passiveFactoryQ: "0x30BeB7A1d66CBE9594E159979F0c7e31A9F68e74", + }, }; +const DEFAULT_VAULT_CREATION_TOPIC = "VaultCreated(address,address,uint16,uint24,address)"; const VAULT_CREATION_TOPIC = { ethereum: "VaultCreated(address,address,uint24,address)", - polygon: "VaultCreated(address,address,uint16,uint24,address)", - arbitrum: "VaultCreated(address,address,uint16,uint24,address)", }; const PILOT_STAKING_CONTRACT = "0xc9256e6e85ad7ac18cd9bd665327fc2062703628"; @@ -37,25 +50,45 @@ const START_BLOCKS = { polygon: { activeFactory: 34288237, passiveFactory: 34371363, + activeFactoryQ: 42886155, + passiveFactoryQ: 42212527, }, arbitrum: { activeFactory: 59667444, passiveFactory: 58774134, }, + bsc: { + activeFactory: 27139991, + passiveFactory: 27140068, + }, + polygon_zkevm: { + activeFactoryQ: 300919, + passiveFactoryQ: 209294, + }, + dogechain: { + activeFactoryQ: 12700049, + passiveFactoryQ: 12829893, + }, }; -async function getVaultLogs(chain, block, factoryType, api) { - const vaults = {}; +async function getVaultLogs(vaults, factoryType, api) { + const chain = api.chain + let topic = DEFAULT_VAULT_CREATION_TOPIC + if (VAULT_CREATION_TOPIC[chain]) + topic = VAULT_CREATION_TOPIC[chain] + + if (factoryType === "activeFactoryQ" || factoryType === "passiveFactoryQ") + topic = 'VaultCreated(address,address,uint16,address)' const vaultLogs = await getLogs({ target: FACTORY_ADDRESSES[chain][factoryType], - topic: VAULT_CREATION_TOPIC[chain], + topic, fromBlock: START_BLOCKS[chain][factoryType], api, }); for (let log of vaultLogs) { - vaults[`0x${log.topics[3].substr(-40)}`] = { + vaults[`0x${log.topics[3].substr(-40)}`.toLowerCase()] = { token0Address: `0x${log.topics[1].substr(-40)}`, token1Address: `0x${log.topics[2].substr(-40)}`, }; @@ -64,42 +97,54 @@ async function getVaultLogs(chain, block, factoryType, api) { return vaults; } -function protocolTvl(chain) { - return async (timestamp, block, chainBlocks, { api }) => { - const balances = {}; - let vaults = {}; - const activeVaultLogs = await getVaultLogs(chain, chainBlocks[chain], "activeFactory", api); - const passiveVaultLogs = await getVaultLogs(chain, chainBlocks[chain], "passiveFactory", api); - vaults = { ...activeVaultLogs, ...passiveVaultLogs }; - const ownerTokens = Object.entries(vaults).map(([v, i]) => [[i.token0Address, i.token1Address], v]) - const vaultKeys = Object.keys(vaults) - - //get vault reserves(amount, fees) from contract - const vaultReserves = await api.multiCall({ - abi: getPositionDetails, - calls: vaultKeys, +async function tvl(timestamp, block, chainBlocks, { api }) { + let vaults = {}; + if (api.chain === "dogechain") { + const res = await cachedGraphQuery('unipilot/'+api.chain, 'https://apis.unipilot.io:5000/subgraphs/name/hamzabhatti125/stats-dogechain', `{ + vaults { + token0 { + id + } + token1 { + id + } + id + } + }`) + res.vaults.forEach(({ token0, token1, id }) => { + vaults[id] = { + token0Address: token0.id, + token1Address: token1.id, + } }) + } else { + for (const label of Object.keys(START_BLOCKS[api.chain])) + await getVaultLogs(vaults, label, api) + } - vaultKeys.forEach((v, i) => { - i = vaultReserves[i] - sdk.util.sumSingleBalance(balances,vaults[v].token0Address,i.amount0, api.chain) - sdk.util.sumSingleBalance(balances,vaults[v].token1Address,i.amount1, api.chain) - }) - return sumTokens2({ balances, api, ownerTokens}) - }; + const ownerTokens = Object.entries(vaults).map(([v, i]) => [[i.token0Address, i.token1Address], v]) + const vaultKeys = Object.keys(vaults) + + //get vault reserves(amount, fees) from contract + const vaultReserves = await api.multiCall({ abi: getPositionDetails, calls: vaultKeys, }) + + vaultKeys.forEach((v, i) => { + i = vaultReserves[i] + api.add(vaults[v].token0Address, i.amount0) + api.add(vaults[v].token0Address, i.fees0) + api.add(vaults[v].token1Address, i.amount1) + api.add(vaults[v].token1Address, i.fees1) + }) + return sumTokens2({ api, ownerTokens }) } module.exports = { doublecounted: true, - ethereum: { - tvl: protocolTvl("ethereum"), - staking: staking(PILOT_STAKING_CONTRACT, PILOT, "ethereum"), - }, - polygon: { - tvl: protocolTvl("polygon"), - }, - arbitrum: { - tvl: protocolTvl("arbitrum"), - }, }; + +Object.keys(FACTORY_ADDRESSES).forEach(chain => { + module.exports[chain] = { tvl } +}) + +module.exports.ethereum.staking = staking(PILOT_STAKING_CONTRACT, PILOT) \ No newline at end of file diff --git a/projects/unipower/index.js b/projects/unipower/index.js index e0767b8c94..7d582b450f 100644 --- a/projects/unipower/index.js +++ b/projects/unipower/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); @@ -8,7 +9,7 @@ const POWER_eth = "0xF2f9A7e93f845b3ce154EfbeB64fB9346FCCE509"; // ETH Prime Part const ethPrimeContract = "0xe40e1531a4B56fB65571AD2ca43Dc0048a316a2D"; -const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const WETH = ADDRESSES.ethereum.WETH; // PowerDAO Part const liquidityVaultContracts = [ diff --git a/projects/uniswap-v2/index.js b/projects/uniswap-v2/index.js index 45ebbd5f84..567703e8d2 100644 --- a/projects/uniswap-v2/index.js +++ b/projects/uniswap-v2/index.js @@ -1,7 +1,7 @@ const { getChainTvl } = require('../helper/getUniSubgraphTvl'); const v2graph = getChainTvl({ - ethereum: 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswapv2' + ethereum: 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v2-dev' }) module.exports = { diff --git a/projects/uniswap/index.js b/projects/uniswap/index.js index c7076c493e..2d44b64835 100644 --- a/projects/uniswap/index.js +++ b/projects/uniswap/index.js @@ -9,6 +9,7 @@ const graphs = { polygon: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon", celo: "https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo", bsc: "https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-bsc", + avax: "https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax", } const blacklists = { @@ -74,7 +75,7 @@ module.exports = { ] } -const chains = ['ethereum', 'arbitrum', 'optimism', 'polygon', 'celo', 'bsc'] +const chains = ['ethereum', 'arbitrum', 'optimism', 'polygon', 'celo', 'bsc', 'avax'] chains.forEach(chain => { module.exports[chain] = { diff --git a/projects/uniswap/v1.js b/projects/uniswap/v1.js index 5bac2d56d2..2ddde5bdf0 100644 --- a/projects/uniswap/v1.js +++ b/projects/uniswap/v1.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const BigNumber = require('bignumber.js'); const { getLogs } = require('../helper/cache/getLogs') const START_BLOCK = 6627917; const FACTORY = '0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95'; -const ETH = '0x0000000000000000000000000000000000000000'.toLowerCase(); +const ETH = ADDRESSES.null.toLowerCase(); async function tvl(timestamp, block, _1, { api }) { const logs = (await getLogs({ diff --git a/projects/unit.js b/projects/unit.js index 461ed89395..0c2f41b667 100644 --- a/projects/unit.js +++ b/projects/unit.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('./helper/coreAssets.json') const { sumTokens } = require('./helper/unwrapLPs'); @@ -9,15 +10,15 @@ async function tvl(ts, block) { '0x92e187a03b6cd19cb6af293ba17f2745fd2357d5', '0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44', '0x2ba592F78dB6436527729929AAf6c908497cB200', - '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + ADDRESSES.ethereum.WETH, '0x0Ae055097C6d159879521C384F1D2123D1f195e6', - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + ADDRESSES.ethereum.USDC, '0xbC396689893D065F41bc2C6EcbeE5e0085233447', - '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', - '0x4e15361fd6b4bb609fa63c81a2be19d873717870', - '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e', - '0xD533a949740bb3306d119CC777fa900bA034cd52', - '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2', + ADDRESSES.ethereum.AAVE, + ADDRESSES.ethereum.FTM, + ADDRESSES.ethereum.YFI, + ADDRESSES.ethereum.CRV, + ADDRESSES.ethereum.SUSHI, '0x4688a8b1f292fdab17e9a90c8bc379dc1dbd8713', '0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272', '0xb753428af26e81097e7fd17f40c88aaa3e04902c', @@ -25,10 +26,10 @@ async function tvl(ts, block) { '0x3472A5A71965499acd81997a54BBA8D852C6E53d', '0xc5bddf9843308380375a611c18b50fb9341f502a', //apecrv '0x1337def16f9b486faed0293eb623dc8395dfe46a', //armor - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', //wbtc + ADDRESSES.ethereum.WBTC, //wbtc '0xeb4c2781e4eba804ce9a9803c67d0893436bb27d', //renbtc '0xd291e7a03283640fdc51b121ac401383a46cc623', - '0x6b175474e89094c44da98b954eedeac495271d0f', //dai + ADDRESSES.ethereum.DAI, //dai ]; const toa = tokens.map(t => [t, pool]) return sumTokens({}, toa, block) diff --git a/projects/united-farmers/index.js b/projects/united-farmers/index.js deleted file mode 100644 index e48643f5f2..0000000000 --- a/projects/united-farmers/index.js +++ /dev/null @@ -1,13 +0,0 @@ -const {uniTvlExport} = require("../helper/calculateUniTvl"); -const {stakingUnknownPricedLP} = require("../helper/staking"); - -const ufx = "0x44b3efa6c6ca47badb3197b0ab675e4396e40023"; -const factory = "0x2fcd5b3b7a5088509babc9910ed2f1b6fe5775b6"; -const masterchef = "0x9327B522F6710b858Eb55352f4E52B62B8C2fB26"; - -module.exports = { - bsc: { - tvl:uniTvlExport(factory, 'bsc'), - staking: stakingUnknownPricedLP(masterchef, ufx, "bsc", "0xD8d18A4045AdaDEc926E0A3c289E22850993cA7B", addr=>`bsc:${addr}`) - } -} \ No newline at end of file diff --git a/projects/unitrade/index.js b/projects/unitrade/index.js index 69c786f2ef..9c1c0a8962 100644 --- a/projects/unitrade/index.js +++ b/projects/unitrade/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const gatewayAbi = require("./gateway.abi.json"); @@ -64,6 +65,7 @@ async function tvl(_, block) { target: UNITRADE_BRIDGE, params: index, })), + permitFailure: true, }) ).output .filter((item) => item.output !== null) @@ -90,7 +92,7 @@ async function tvl(_, block) { const combinedETHBalances = parseInt(ethBalanceGateway) + parseInt(ethBalanceOrderbook); - balances["0x0000000000000000000000000000000000000000"] = combinedETHBalances.toFixed(0); + balances[ADDRESSES.null] = combinedETHBalances.toFixed(0); return balances; } diff --git a/projects/universe/index.js b/projects/universe/index.js index 2a6378f971..6995120515 100644 --- a/projects/universe/index.js +++ b/projects/universe/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const {unwrapUniswapLPs} = require('../helper/unwrapLPs') @@ -5,13 +6,13 @@ const STAKING_ADDRESS = '0x2d615795a8bdb804541C69798F13331126BA0c09'; const USDC_TOKEN = { symbol: 'USDC', - address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + address: ADDRESSES.ethereum.USDC, decimals: 6, }; const AAVE_TOKEN = { symbol: 'AAVE', - address: '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', + address: ADDRESSES.ethereum.AAVE, decimals: 18, }; @@ -29,19 +30,19 @@ const COMP_TOKEN = { const SNX_TOKEN = { symbol: 'SNX', - address: '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f', + address: ADDRESSES.ethereum.SNX, decimals: 18, }; const SUSHI_TOKEN = { symbol: 'SUSHI', - address: '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2', + address: ADDRESSES.ethereum.SUSHI, decimals: 18, }; const LINK_TOKEN = { symbol: 'LINK', - address: '0x514910771af9ca656af840dff83e8264ecf986ca', + address: ADDRESSES.ethereum.LINK, decimals: 18, }; diff --git a/projects/uniwhale/index.js b/projects/uniwhale/index.js index 5c7e70b1ac..d384ff2f86 100644 --- a/projects/uniwhale/index.js +++ b/projects/uniwhale/index.js @@ -1,4 +1,5 @@ -const USDT = "0x55d398326f99059fF775485246999027B3197955"; +const ADDRESSES = require('../helper/coreAssets.json') +const USDT = ADDRESSES.bsc.USDT; const UNIWHALE_LIQUIDITY_POOL = "0xBdeCAFd9096D43616a8E0eB8F3fa0865fD4769E7"; const UNIWHALE_MARGIN_POOL = "0xBB1B941aB76fAE4e9F552B860eFaC1F367AC9bCc"; const { sumTokensExport } = require('../helper/unwrapLPs') diff --git a/projects/unlimited-trade/index.js b/projects/unlimited-trade/index.js new file mode 100644 index 0000000000..d8dbac40ac --- /dev/null +++ b/projects/unlimited-trade/index.js @@ -0,0 +1,21 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') + +const config = { + arbitrum: { + pools: [ + '0x1eBB487B42530D511091DC6bC4359ee767ad0d16', // bluechip + '0x0155d3f48e51e108f0dfF56F6EFBeA1A870B3cE7', // altcoin + '0x20A1012B79e8F3cA3f802533c07934eF97398dA7', // degen + ], + } +} + +Object.keys(config).forEach(chain => { + const { pools } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const tokens = await api.multiCall({ abi: 'address:asset', calls: pools}) + return sumTokens2({ api, tokensAndOwners2: [tokens, pools] }) + } + } +}) \ No newline at end of file diff --git a/projects/uno-farm/uno-helplers/index.js b/projects/uno-farm/uno-helplers/index.js index c8637bc891..083c370e87 100644 --- a/projects/uno-farm/uno-helplers/index.js +++ b/projects/uno-farm/uno-helplers/index.js @@ -142,6 +142,7 @@ async function getFullInfoQuickswapUnoFarm({ calls: stakeTokenCalls, abi: UnoFarmQuickswapABI.lpPair, chain, + permitFailure: true, }) ).output.map((a) => a.output); @@ -149,7 +150,7 @@ async function getFullInfoQuickswapUnoFarm({ return dataFarms.map((v, i) => ({ ...v, stakeToken: stakeTokens[i], - })); + })).filter(v=>v.stakeToken !== null); } module.exports = { diff --git a/projects/unore/index.js b/projects/unore/index.js index 59d0d61429..5c753ee175 100644 --- a/projects/unore/index.js +++ b/projects/unore/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2, nullAddress, } = require('../helper/unwrapLPs') const ethSSIPEth = '0x29B4b8674D93b36Bf651d0b86A8e5bE3c378aCF4' @@ -8,8 +9,8 @@ const config = { uToken: '0x474021845c4643113458ea4414bdb7fb74a01a77', tokensAndOwners: [ [nullAddress, ethSSIPEth], - ['0xdac17f958d2ee523a2206206994597c13d831ec7', '0x920d510d5c70c01989b66f4e24687dddb988ddae'], - ['0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', '0xfdfaa453ef3709d2c26ecf43786a14ab8bf27e36'], + [ADDRESSES.ethereum.USDT, '0x920d510d5c70c01989b66f4e24687dddb988ddae'], + [ADDRESSES.ethereum.USDC, '0xfdfaa453ef3709d2c26ecf43786a14ab8bf27e36'], ], pools: [ '0x1eECc8C8298ed9Bd46c147D44E2D7A7BfACE2034', // UNO SSRP @@ -21,11 +22,11 @@ const config = { bsc: { uToken: '0x474021845C4643113458ea4414bdb7fB74A01A77', tokensAndOwners: [ - ['0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', '0xEcE9f1A3e8bb72b94c4eE072D227b9c9ba4cd750'], - ['0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', '0x0b5C802ecA88161B5daed08e488C83d819a0cD02'], - ['0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', '0x2cd32dF1C436f8dE6e09d1A9851945c56bcEd32a'], - ['0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', '0xFC9a02a13B19F65219034AB03ADcD8CAdf275f35'], - ['0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', '0x456d60a7E2a2DA97BDb43759Cf63f7acbC3a700a'], + [ADDRESSES.bsc.USDC, '0xEcE9f1A3e8bb72b94c4eE072D227b9c9ba4cd750'], + [ADDRESSES.bsc.USDC, '0x0b5C802ecA88161B5daed08e488C83d819a0cD02'], + [ADDRESSES.bsc.USDC, '0x2cd32dF1C436f8dE6e09d1A9851945c56bcEd32a'], + [ADDRESSES.bsc.USDC, '0xFC9a02a13B19F65219034AB03ADcD8CAdf275f35'], + [ADDRESSES.bsc.USDC, '0x456d60a7E2a2DA97BDb43759Cf63f7acbC3a700a'], ], pools: [ '0xFC9a02a13B19F65219034AB03ADcD8CAdf275f35', // Zeus V2 @@ -35,7 +36,7 @@ const config = { kava: { tokensAndOwners: [ [nullAddress, kavaSSIPKava], - ['0xfA9343C3897324496A05fC75abeD6bAC29f8A40f', '0x6cEC77829F474b56c327655f3281739De112B019'], + [ADDRESSES.telos.ETH, '0x6cEC77829F474b56c327655f3281739De112B019'], ] } } diff --git a/projects/unusdao/index.js b/projects/unusdao/index.js index a364d66d35..0b0855278c 100644 --- a/projects/unusdao/index.js +++ b/projects/unusdao/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const udo = "0xB91Ec4F9D7D12A1aC145A7Ae3b78AFb45856C9c8"; const treasuryContract = "0x01CDdb5C0986B8521F93A9A5C6d84D6994a82742"; const stakingContract = "0xC34AF465Aac5928afec7e3642BD8Ca7873a7F2b2"; -const busd = "0xe9e7cea3dedca5984780bafc599bd69add087d56"; -const usdt = "0x55d398326f99059ff775485246999027b3197955"; +const busd = ADDRESSES.bsc.BUSD; +const usdt = ADDRESSES.bsc.USDT; const udoBusd = "0x364952dC20b5720b7fd3e73141cF6A85d9af8643"; module.exports = { diff --git a/projects/urdex/index.js b/projects/urdex/index.js new file mode 100644 index 0000000000..4e2c3b2978 --- /dev/null +++ b/projects/urdex/index.js @@ -0,0 +1,21 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/unwrapLPs"); +const { staking } = require("../helper/staking"); + +const Contracts = { + Pool: "0xF67D3a53a110a764DCa7123b9f3FC5B404566577", + Chef: "0x235dB7AFE577A239150160ab7429bC3D6e25fdAa", + Tokens: { + BTC: ADDRESSES.arbitrum.WBTC, + USDT: ADDRESSES.arbitrum.USDT, + WETH: ADDRESSES.arbitrum.WETH + }, + URD_USDT_LP: "0xA8eC0aa8fe4287E768Fd382845442Fa29F2886ef" +} + +module.exports = { + arbitrum: { + tvl: sumTokensExport({ owner: Contracts.Pool, tokens: Object.values(Contracts.Tokens) }), + pool2: staking(Contracts.Chef, Contracts.URD_USDT_LP) + } +}; diff --git a/projects/uswap-me/index.js b/projects/uswap-me/index.js new file mode 100644 index 0000000000..dfec3ae19a --- /dev/null +++ b/projects/uswap-me/index.js @@ -0,0 +1,11 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +// https://uswap.me/analytics/ +module.exports = { + tron: { + tvl: getUniTVL({ + factory: 'TQ4F8Gr1qRKcMva64qYweAJNAVtgfj6ZJd', + useDefaultCoreAssets: true, + }), + }, +} diff --git a/projects/v3s-finance/index.js b/projects/v3s-finance/index.js index e6a8449fb3..b2a10dca2b 100644 --- a/projects/v3s-finance/index.js +++ b/projects/v3s-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { addFundsInMasterChef } = require("../helper/masterchef"); const { stakingUnknownPricedLP, stakingPricedLP } = require("../helper/staking"); const farmUtils = require("./farm-utils"); @@ -14,7 +15,7 @@ const v3sVvspAddress = "0x57b975364140e4a8d1C96FAa00225b855BaB0E8E"; const vShareCroAddress = "0xcb0704BC4E885384ac96F0ED22B9204C3adD91AD" const vShareRewardsAddr = "0x569608516A81C0B1247310A3E0CD001046dA0663"; -const usdc = "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59".toLowerCase(); +const usdc = ADDRESSES.cronos.USDC.toLowerCase(); async function tvl(timestamp, block, chainBlocks) { let balances = {}; diff --git a/projects/vacusfinance/index.js b/projects/vacusfinance/index.js index fda3f91a78..eec2b7b6b1 100644 --- a/projects/vacusfinance/index.js +++ b/projects/vacusfinance/index.js @@ -85,6 +85,9 @@ async function staking(_, _b, { [chain]: block }) { module.exports = { + hallmarks: [ + [1665187200, "Rug Pull"] + ], misrepresentedTokens: true, avax: { tvl, diff --git a/projects/valkyrie/index.js b/projects/valkyrie/index.js index 5b0ebb0ebc..b9afd1299c 100644 --- a/projects/valkyrie/index.js +++ b/projects/valkyrie/index.js @@ -1,37 +1,7 @@ -const { getBalance, unwrapLp } = require("../helper/chain/terra"); - -const holderToken = "terra1w6xf64nlmy3fevmmypx6w2fa34ue74hlye3chk"; -const token = "terra1dy9kmlm4anr92e42mrkjwzyvfqwz66un00rwr5"; - -const holderlp = "terra1ude6ggsvwrhefw2dqjh4j6r7fdmu9nk6nf2z32"; -const pair = "terra17fysmcl52xjrs8ldswhz7n6mt37r9cmpcguack"; // VKR-UST lp - -async function staking(timestamp, _, { terra: block }) { - const tokenBalance = await getBalance(token, holderToken, block); - - return { - "valkyrie-protocol": (tokenBalance) / 1e6, - }; -} - -async function pool2(timestamp,_, { terra: block }) { - const ustBalances = {}; - const balance = await getBalance(pair, holderlp, block); - await unwrapLp(ustBalances, pair, balance, block); - - return { - terrausd: (ustBalances.uusd * 2) / 1e6, - }; -} - module.exports = { terra: { tvl: () => ({}), - staking: staking, - pool2: pool2, }, - misrepresentedTokens: true, - timetravel: true, }; module.exports.hallmarks = [ [1651881600, "UST depeg"], diff --git a/projects/valleyswap/index.js b/projects/valleyswap/index.js index c9c7bc0458..93f82ef8a9 100644 --- a/projects/valleyswap/index.js +++ b/projects/valleyswap/index.js @@ -3,9 +3,6 @@ const { getUniTVL } = require('../helper/unknownTokens') module.exports = { start: 411656, oasis: { - hallmarks: [ - [1681743600,"Remove Fake USDT"] - ], tvl: getUniTVL({ factory: '0xa25464822b505968eEc9A45C43765228c701d35f', useDefaultCoreAssets: true, @@ -13,4 +10,8 @@ module.exports = { }), }, misrepresentedTokens: true, + hallmarks: [ + [1681743600,"Remove Fake USDT"], + [1654214400, "EvoDefi bridge depeg"] + ], }; diff --git a/projects/vaultka/index.js b/projects/vaultka/index.js index 3da29101a3..19f211c55d 100644 --- a/projects/vaultka/index.js +++ b/projects/vaultka/index.js @@ -11,8 +11,67 @@ module.exports = { calls: vaults, }); + const addresses = { + whiskey: "0x6532eFCC1d617e094957247d188Ae6d54093718A", + whiskeyWater: "0xa100E02e861132C4703ae96D6868664f27Eaa431", + sake: "0x45BeC5Bb0EE87181A7Aa20402C66A6dC4A923758", + sakeWater: "0x6b367F9EB22B2E6074E9548689cddaF9224FC0Ab", + }; + + const contractAbis = { + gainsBalance: "function getGainsBalance() view returns (uint256)", + gTokenPrice: "function gTokenPrice() view returns (uint256)", + wWaterBalance: "function balanceOfDAI() public view returns (uint256)", + vlpBalance: "function getVlpBalance() public view returns (uint256)", + stakedVlpBalance: + "function getStakedVlpBalance() public view returns (uint256)", + vlpPrice: "function getVLPPrice() public view returns (uint256)", + waterUSDCBal: "function balanceOfUSDC() public view returns (uint256)", + }; + + const whiskeyGainsBalance = await api.call({ + abi: contractAbis.gainsBalance, + target: addresses.whiskey, + }); + + const whiskeyGTokenPrice = await api.call({ + abi: contractAbis.gTokenPrice, + target: addresses.whiskey, + }); + + const whiskeyWaterDaiBal = await api.call({ + abi: contractAbis.wWaterBalance, + target: addresses.whiskeyWater, + }); + + const sakeWaterUSDCBal = await api.call({ + abi: contractAbis.waterUSDCBal, + target: addresses.sakeWater, + }); + + const vlpBal = await api.call({ + abi: contractAbis.vlpBalance, + target: addresses.sake, + }); + + const StakedVLPBal = await api.call({ + abi: contractAbis.stakedVlpBalance, + target: addresses.sake, + }); + + const sakeVLPPrice = await api.call({ + abi: contractAbis.vlpPrice, + target: addresses.sake, + }); + return { tether: bals.reduce((a, i) => a + i / 1e6, 0), + dai: + (whiskeyGainsBalance * whiskeyGTokenPrice) / 1e36 + + whiskeyWaterDaiBal / 1e18, + "usd-coin": + ((vlpBal + StakedVLPBal) * sakeVLPPrice) / 1e18 / 1e5 + + sakeWaterUSDCBal / 1e6, }; }, }, diff --git a/projects/veax/index.js b/projects/veax/index.js new file mode 100644 index 0000000000..f3b6a24ca3 --- /dev/null +++ b/projects/veax/index.js @@ -0,0 +1,14 @@ +const { sumTokens, call, } = require('../helper/chain/near') + +const tvl = async (_, _1, _2, { api }) => { + const contract = 'veax.near' + const tokens = await call(contract, 'get_verified_tokens') + return sumTokens({ owners: [contract], tokens}) +} + +module.exports = { + timetravel: false, + near: { + tvl, + } +} \ No newline at end of file diff --git a/projects/vee-finance/index.js b/projects/vee-finance/index.js index 9f16299229..e8b32ad3ef 100644 --- a/projects/vee-finance/index.js +++ b/projects/vee-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {getCompoundV2Tvl} = require('../helper/compound') const sdk = require('@defillama/sdk') @@ -7,16 +8,16 @@ module.exports={ tvl: sdk.util.sumChainTvls([ //V1&V2 on Avalanche getCompoundV2Tvl("0xA67DFeD73025b0d61F2515c531dd8D25D4Cfd0Db", "avax", addr=>`avax:${addr}`), - getCompoundV2Tvl("0x43AAd7d8Bc661dfA70120865239529ED92Faa054", "avax", addr=>`avax:${addr}`, "0x6481490DBb6Bd0e8b7CB7E1317470f6d08aDa5A2", "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"), + getCompoundV2Tvl("0x43AAd7d8Bc661dfA70120865239529ED92Faa054", "avax", addr=>`avax:${addr}`, "0x6481490DBb6Bd0e8b7CB7E1317470f6d08aDa5A2", ADDRESSES.avax.WAVAX), getCompoundV2Tvl("0xAF7f6F7a1295dEDF52a01F5c3f04Ad1b502CdA6a", "avax", addr=>`avax:${addr}`), - getCompoundV2Tvl("0xeEf69Cab52480D2BD2D4A3f3E8F5CcfF2923f6eF", "avax", addr=>`avax:${addr}`, "0x125605c515e3f75CAd62d3613c97A76F13d73A64", "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"), + getCompoundV2Tvl("0xeEf69Cab52480D2BD2D4A3f3E8F5CcfF2923f6eF", "avax", addr=>`avax:${addr}`, "0x125605c515e3f75CAd62d3613c97A76F13d73A64", ADDRESSES.avax.WAVAX), ]) }, heco: { tvl: sdk.util.sumChainTvls([ //V1 on Heco getCompoundV2Tvl("0x484C6e804cD4Cc27fCFbCf06748d6b4BCA47db84", "heco", addr=>`heco:${addr}`), - getCompoundV2Tvl("0x2a144ACaef8fb9258e4f2c2018945a76fE7342E2", "heco", addr=>`heco:${addr}`, "0x0F75aBfef98dAaa7A8170ddA97c8100a65ABA3cC", "0x5545153CCFcA01fbd7Dd11C0b23ba694D9509A6F"), + getCompoundV2Tvl("0x2a144ACaef8fb9258e4f2c2018945a76fE7342E2", "heco", addr=>`heco:${addr}`, "0x0F75aBfef98dAaa7A8170ddA97c8100a65ABA3cC", ADDRESSES.heco.WHT), ]) } } diff --git a/projects/vega-protocol/index.js b/projects/vega-protocol/index.js new file mode 100644 index 0000000000..d3cf44ee98 --- /dev/null +++ b/projects/vega-protocol/index.js @@ -0,0 +1,64 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const assetListedEvent = "event Asset_Listed(address indexed asset_source, bytes32 indexed vega_asset_id, uint256 nonce)" +const BigNumber = require("bignumber.js"); + +const config = { + ethereum: { + fromBlock: 17343884, + vega: '0xcb84d72e61e383767c4dfeb2d8ff7f4fb89abc6e', + stakingContract: '0x195064D33f09e0c42cF98E665D9506e0dC17de68', + assetPool: '0xA226E2A13e07e750EfBD2E5839C5c3Be80fE7D4d', + bridge: '0x23872549cE10B40e31D6577e0A920088B0E0666a', + vestingContract: '0x23d1bFE8fA50a167816fBD79D7932577c06011f4' + } +} + +const contractAbis = { + "totalStaked": "function total_staked() view returns (uint256)", + "balanceOf": "function balanceOf(address account) view returns (uint256)" +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + const { bridge, fromBlock, vega, stakingContract, assetPool, vestingContract } = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: bridge, + topics: ['0x4180d77d05ff0d31650c548c23f2de07a3da3ad42e3dd6edd817b438a150452e'], + eventAbi: assetListedEvent, + onlyArgs: true, + fromBlock, + }) + const blacklistedTokens = [] + if (vega) blacklistedTokens.push(vega) + return sumTokens2({ api, blacklistedTokens, owner: assetPool, tokens: logs.map(i => i.asset_source) }) + }, + //staking: staking(stakingContract, vega) + staking: async (_, _b, cb, { chain, block, api } = {}) => { + + const vegaStakedInVesting = await api.call({ + abi: contractAbis.totalStaked, + target: vestingContract + }) + + const vegaStakedInStaking = await api.call({ + abi: contractAbis.balanceOf, + target: vega, + params: stakingContract + }) + + return { + '0xcb84d72e61e383767c4dfeb2d8ff7f4fb89abc6e': BigNumber(vegaStakedInVesting).plus(BigNumber(vegaStakedInStaking)).toFixed(0) + } + + } + } + +}) + diff --git a/projects/vela-exchange/index.js b/projects/vela-exchange/index.js index 33411b30c0..47facb0950 100644 --- a/projects/vela-exchange/index.js +++ b/projects/vela-exchange/index.js @@ -1,12 +1,36 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking") +const { graphQuery } = require('../helper/http') + +const VELA = '0x088cd8f5eF3652623c22D48b1605DCfE860Cd704' + +const endpoint = "https://api.thegraph.com/subgraphs/name/velaexchange/vela-exchange-official" +async function staking_() { + const { api } = arguments[3] + + const query = ` + query { + poolInfos(where: { + id: "all" + }) { + pid1 + pid2 + pid3 + } + } + `; + const graphRes = (await graphQuery(endpoint, query)).poolInfos.find(x => true); + api.add(VELA, graphRes?.pid2) + api.add(VELA, graphRes?.pid3) +} module.exports = { - methodology: "Counts USDC deposited to trade and to mint VLP. Staking counts VELA deposited to earn eVELA", + methodology: "Counts USDC deposited to trade and to mint VLP. Staking counts VELA and esVELA deposited to earn esVELA", arbitrum: { - tvl: staking('0x5957582f020301a2f732ad17a69ab2d8b2741241', '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8'), - staking: staking('0xfC527781Ae973f8131dC26dDDb2Adb080c1C1F59', '0x088cd8f5eF3652623c22D48b1605DCfE860Cd704'), + tvl: staking('0xC4ABADE3a15064F9E3596943c699032748b13352', ADDRESSES.arbitrum.USDC), + staking: staking_ }, hallmarks: [ - [Math.floor(new Date('2023-04-13')/1e3), 'Refunded tokens to VLP holders & traders'], + [Math.floor(new Date('2023-04-13') / 1e3), 'Refunded tokens to VLP holders & traders'], ], -} \ No newline at end of file +} diff --git a/projects/velaro/index.js b/projects/velaro/index.js index 4224944c97..9c9bc2b6a7 100644 --- a/projects/velaro/index.js +++ b/projects/velaro/index.js @@ -1,23 +1,23 @@ -const { sumTokens2 } = require('../helper/unwrapLPs') -const chain = 'velas' +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require('../helper/unwrapLPs') module.exports = { + hallmarks: [ + [1668556800, "USDV hack"] + ], velas: { - tvl: async (_, _b, { [chain]: block }) => { - return sumTokens2({ - tokensAndOwners: [ - ['0xe41c4324dCbD2926481101f8580D13930AFf8A75', '0xbd183a60274289A7c20250a890500D2a37dEf319'], // VLX - ['0xaBf26902Fd7B624e0db40D31171eA9ddDf078351', '0x2Fee5293050FFfC3bd583d59f077e2b4900F57c8'], // WAG - ['0x639A647fbe20b6c8ac19E48E2de44ea792c62c5C', '0x899F26dc6Bc085fb9cB82AAdF25Db8820F272ED4'], // WBTC - ['0x7b714BC5dD176EaA198fe6C07E415a87A40dc858', '0x7171d1E1097d726E5f4BBc8236A8E108E21024e3'], // WAG_VLXVDGT - ['0x72eB7CA07399Ec402c5b7aa6A65752B6A1Dc0C27', '0x1e217990818518Dc37B0fFA2ffE3AA110b02F18c'], // ASTRO - ['0x2B8e9cD44C9e09D936149549a8d207c918ecB5C4', '0xc0D16c7Cd5Fc18526Dc78Ea530e56129EB979C96'], // BNB - ['0xc9b3aA6E91d70f4ca0988D643Ca2bB93851F3de4', '0x92C2cA50f74A8Fe36b4DCffB2cc6A274fA61CB34'], // FTM - ['0x6ab0B8C1a35F9F4Ce107cCBd05049CB1Dbd99Ec5', '0xd10f8CD5d56aaa58f59B25C928f372F66899e9B3'], // MATIC - ['0xc111c29A988AE0C0087D97b33C6E6766808A3BD3', '0x4368d9F91C40EA8Ac9F11A4f9289889f56D32Df8'], // BUSD - ], - resolveLP: true, - chain, block - }) - } - }, + tvl: sumTokensExport({ + tokensAndOwners: [ + [ADDRESSES.velas.WVLX, '0xbd183a60274289A7c20250a890500D2a37dEf319'], // VLX + ['0xaBf26902Fd7B624e0db40D31171eA9ddDf078351', '0x2Fee5293050FFfC3bd583d59f077e2b4900F57c8'], // WAG + [ADDRESSES.moonriver.ETH, '0x899F26dc6Bc085fb9cB82AAdF25Db8820F272ED4'], // WBTC + ['0x7b714BC5dD176EaA198fe6C07E415a87A40dc858', '0x7171d1E1097d726E5f4BBc8236A8E108E21024e3'], // WAG_VLXVDGT + ['0x72eB7CA07399Ec402c5b7aa6A65752B6A1Dc0C27', '0x1e217990818518Dc37B0fFA2ffE3AA110b02F18c'], // ASTRO + [ADDRESSES.velas._BNB, '0xc0D16c7Cd5Fc18526Dc78Ea530e56129EB979C96'], // BNB + [ADDRESSES.velas.FTM, '0x92C2cA50f74A8Fe36b4DCffB2cc6A274fA61CB34'], // FTM + [ADDRESSES.velas._MATIC, '0xd10f8CD5d56aaa58f59B25C928f372F66899e9B3'], // MATIC + [ADDRESSES.velas.BUSD, '0x4368d9F91C40EA8Ac9F11A4f9289889f56D32Df8'], // BUSD + ], + resolveLP: true, + }) + } } diff --git a/projects/velhalla.js b/projects/velhalla.js index 6dd903b937..7c4ceb9579 100644 --- a/projects/velhalla.js +++ b/projects/velhalla.js @@ -1,6 +1,7 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require("@defillama/sdk"); const owner = "0x7DeD7f9D3dF541190F666FB6897483e46D54e948"; -const target = "0x8d9fb713587174ee97e91866050c383b5cee6209"; +const target = ADDRESSES.velas.SCAR; async function staking(timestamp, block, chainBlocks) { return { diff --git a/projects/velocimeter-v2/index.js b/projects/velocimeter-v2/index.js index 7fbcb7975f..180101696e 100644 --- a/projects/velocimeter-v2/index.js +++ b/projects/velocimeter-v2/index.js @@ -8,5 +8,19 @@ module.exports = { useDefaultCoreAssets: true, hasStablePools: true, }) - } + }, + pulse: { + tvl: getUniTVL({ + factory: '0x6B4449C74a9aF269A5f72B88B2B7B8604685D9B9', + useDefaultCoreAssets: true, + hasStablePools: true, + }) + }, + base: { + tvl: getUniTVL({ + factory: '0xe21Aac7F113Bd5DC2389e4d8a8db854a87fD6951', + useDefaultCoreAssets: true, + hasStablePools: true, + }) + }, } diff --git a/projects/velodrome-v2/index.js b/projects/velodrome-v2/index.js new file mode 100644 index 0000000000..e7bde1cf71 --- /dev/null +++ b/projects/velodrome-v2/index.js @@ -0,0 +1,13 @@ +const { uniTvlExport } = require('../helper/calculateUniTvl.js') + +module.exports = { + optimism: { + tvl: uniTvlExport("0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a", undefined, undefined, { + allPairsLength: 'uint256:allPoolsLength', + allPairs: 'function allPools(uint256) view returns (address)', + }, { fetchBalances: true, }), + }, + hallmarks: [ + [1687465883, "v2 Migration on OP Mainnet"], // https://twitter.com/VelodromeFi/status/1671979216039202816 + ] +} diff --git a/projects/velodrome/index.js b/projects/velodrome/index.js index 93fe01c2e2..ebd864d507 100644 --- a/projects/velodrome/index.js +++ b/projects/velodrome/index.js @@ -2,11 +2,8 @@ const {uniTvlExport} = require('../helper/calculateUniTvl.js') module.exports = { misrepresentedTokens: true, - doublecounted: false, - timetravel: true, - incentivized: true, optimism: { - tvl: uniTvlExport("0x25CbdDb98b35ab1FF77413456B31EC81A6B6B746", "optimism"), + tvl: uniTvlExport("0x25CbdDb98b35ab1FF77413456B31EC81A6B6B746"), }, hallmarks:[ [1657760400, "First OP grant awarded"], diff --git a/projects/vendor-finance-v2/index.js b/projects/vendor-finance-v2/index.js new file mode 100644 index 0000000000..798c0dc417 --- /dev/null +++ b/projects/vendor-finance-v2/index.js @@ -0,0 +1,54 @@ +const { getLogs } = require("../helper/cache/getLogs"); + +const abi = { + lendBalance: "function lendBalance() view returns (uint256)", + colBalance: "function colBalance() view returns (uint256)" +} + +async function tvl(timestamp, block, chainBlocks, { api }) { + const { factory, fromBlock } = config[api.chain] + const logs = await getLogs({ + api, + target: factory, + topics: ['0xee5c84cc965f1ed0b60a1a4a5a02cf02830b6262b89a9063fda05b63ce8b2f8b'], + fromBlock, + onlyArgs: true, + eventAbi: 'event DeployPool(address poolAddress,address deployer,address implementation,(address feesManager,bytes32 strategy,address oracle,address treasury,address posTracker),(uint8 poolType,address owner,uint48 expiry,address colToken,uint48 protocolFee,address lendToken,uint48 ltv,uint48 pauseTime,uint256 lendRatio,address[] allowlist,bytes32 feeRatesAndType))' + }) + + // lend assets may be stored in AAVE if the lender chooses so we can't + // rely on balanceOf calls to get lend balances. Each pool has a + // lendBalance and colBalance method that returns the token balances + // that are in the pool and are currently in AAVE that belong to the pool + + // get lend balances returned from the lendBalance method + const lendOutput = await api.multiCall({ abi: abi.lendBalance, calls: logs.map(i => i.poolAddress), }); + + // get col balances returned from the colBalance method + const colOutput = await api.multiCall({ abi: abi.colBalance, calls: logs.map(i => i.poolAddress), }); + + console.log(lendOutput, colOutput) + lendOutput.forEach((res, i) => { + // extract collateral and lend tokens + const lendToken = logs[i][4].lendToken; + const colToken = logs[i][4].colToken; + // add collateral and lend token balances returned from contract calls + api.add(lendToken, res) + api.add(colToken, colOutput[i]) + }); +} + +const config = { + arbitrum: { factory: '0x0b2B8Fbf3dfd6237921A89355cfc08f107bFbf98', fromBlock: 88774917 } + // ethereum: { factory: '0x928cf648069082D9AEf25ddB2bF10D25bf1C1D73', fromBlock: 16545630, }, +} + +module.exports = { + doublecounted: true, + methodology: 'The sum of the balance of all listed collateral and lend tokens in all deployed pools.', + start: 88774917, +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}); \ No newline at end of file diff --git a/projects/venofinance/index.js b/projects/venofinance/index.js index 0f2fbd3d43..af33e240d2 100644 --- a/projects/venofinance/index.js +++ b/projects/venofinance/index.js @@ -1,9 +1,15 @@ const sdk = require('@defillama/sdk') +const { staking } = require("../helper/staking.js"); -async function tvl(timestamp, ethBlock, chainBlocks) { +const fountain_contract_address = "0xb4be51216f4926ab09ddf4e64bc20f499fd6ca95" +const reservoir_contract_address = "0x21179329c1dcfd36ffe0862cca2c7e85538cca07" +const vno_contract_address = "0xdb7d0a1ec37de1de924f8e8adac6ed338d4404e9" + +async function tvl(timestamp, ethBlock, chainBlocks, {api}) { const lcro_contract_address = '0x9Fae23A2700FEeCd5b93e43fDBc03c76AA7C08A6'; + const latom_contract_address = '0xac974ee7fc5d083112c809ccb3fce4a4f385750d'; const block = chainBlocks.cronos @@ -14,8 +20,16 @@ async function tvl(timestamp, ethBlock, chainBlocks) { chain: 'cronos' }) + const atom_pooled = await sdk.api.abi.call({ + abi: "uint256:getTotalPooledToken", + target: latom_contract_address, + block: block, + chain: 'cronos' + }) + return { - 'crypto-com-chain': Number(cro_pooled.output) / 1e18 + 'crypto-com-chain': Number(cro_pooled.output) / 1e18, + "cosmos": Number(atom_pooled.output) / 1e6 }; } @@ -24,6 +38,7 @@ module.exports = { misrepresentedTokens: false, methodology: 'TVL counts CRO staked by the protocol.', cronos: { - tvl + tvl , + staking: staking([fountain_contract_address, reservoir_contract_address], vno_contract_address) } } \ No newline at end of file diff --git a/projects/venus-isolated-pools/index.js b/projects/venus-isolated-pools/index.js new file mode 100644 index 0000000000..7b51fbceb9 --- /dev/null +++ b/projects/venus-isolated-pools/index.js @@ -0,0 +1,32 @@ +const { cachedGraphQuery } = require('../helper/cache') +const sdk = require('@defillama/sdk') +const { compoundExports2 } = require('../helper/compound') +const config = { + bsc: { + endpoint: 'https://api.thegraph.com/subgraphs/name/venusprotocol/venus-isolated-pools', + } +} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl, borrowed, } +}) + +async function getPools(api) { + const { endpoint } = config[api.chain] + const { pools } = await cachedGraphQuery('venus-v4', endpoint, `{ pools { id }}`) + return pools.map(i => i.id) +} + +async function tvl(...args) { + const [_, _b, _cb, { api, }] = args + const pools = await getPools(api) + const tvls = pools.map(i => compoundExports2({ comptroller: i, fetchBalances: true, })) + return sdk.util.sumChainTvls(tvls.map(i => i.tvl))(...args) +} + +async function borrowed(...args) { + const [_, _b, _cb, { api, }] = args + const pools = await getPools(api) + const tvls = pools.map(i => compoundExports2({ comptroller: i, fetchBalances: true, })) + return sdk.util.sumChainTvls(tvls.map(i => i.borrowed))(...args) +} \ No newline at end of file diff --git a/projects/venus.js b/projects/venus.js index 3b89325ac2..29dfd3d48d 100644 --- a/projects/venus.js +++ b/projects/venus.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('./helper/coreAssets.json') const {fullCoumpoundExports} = require('./helper/compound'); const replace = { - "0x250632378e573c6be1ac2f97fcdf00515d0aa91b": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // beth->weth - "0xfb6115445bff7b52feb98650c87f44907e58f802": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", // aave + [ADDRESSES.bsc.BETH]: ADDRESSES.ethereum.WETH, // beth->weth + "0xfb6115445bff7b52feb98650c87f44907e58f802": ADDRESSES.ethereum.AAVE, // aave } -module.exports = fullCoumpoundExports("0xfd36e2c2a6789db23113685031d7f16329158384", "bsc", "0xA07c5b74C9B40447a954e1466938b865b6BBea36", "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", addr=>{ +module.exports = fullCoumpoundExports("0xfd36e2c2a6789db23113685031d7f16329158384", "bsc", "0xA07c5b74C9B40447a954e1466938b865b6BBea36", ADDRESSES.bsc.WBNB, addr=>{ return replace[addr.toLowerCase()] || `bsc:${addr}` }) diff --git a/projects/veplus/index.js b/projects/veplus/index.js new file mode 100644 index 0000000000..92d2c84362 --- /dev/null +++ b/projects/veplus/index.js @@ -0,0 +1,13 @@ +const { getUniTVL } = require('../helper/unknownTokens.js') + +module.exports = { + misrepresentedTokens: true, + bsc:{ + tvl: getUniTVL({ + useDefaultCoreAssets: true, + hasStablePools: true, + fetchBalances: true, + factory: '0x5Bcd9eE6C31dEf33334b255EE7A767B6EEDcBa4b', + }), + }, +} \ No newline at end of file diff --git a/projects/verified-credits/index.js b/projects/verified-credits/index.js new file mode 100644 index 0000000000..fcbdb2067e --- /dev/null +++ b/projects/verified-credits/index.js @@ -0,0 +1,6 @@ +const { masterchefExports } = require('../helper/unknownTokens') + +module.exports = masterchefExports({ + chain: 'kava', + masterchef: '0x0a3b0C346cEE826aa0eBEf78c1eBcB9BE07aD2eb', +}) \ No newline at end of file diff --git a/projects/versedex/index.js b/projects/versedex/index.js index 7c63e3d356..12b7031ab7 100644 --- a/projects/versedex/index.js +++ b/projects/versedex/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getUniTVL } = require('../helper/unknownTokens') -const FLEXUSD = "0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72"; -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; +const FLEXUSD = ADDRESSES.smartbch.flexUSD; +const WBCH = ADDRESSES.smartbch.WBCH; const SBCH_FACTORY = "0x16bc2B187D7C7255b647830C05a6283f2B9A3AF8"; -const DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; -const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; +const DAI = ADDRESSES.ethereum.DAI; +const WETH = ADDRESSES.ethereum.WETH; const ETH_FACTORY = "0xee3E9E46E34a27dC755a63e2849C9913Ee1A06E2"; module.exports = { diff --git a/projects/vertex/index.js b/projects/vertex/index.js new file mode 100644 index 0000000000..5c2f9885e4 --- /dev/null +++ b/projects/vertex/index.js @@ -0,0 +1,22 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') + +const config = { + "querier": "0x1693273B443699bee277eCbc60e2C8027E91995d", + "feeCalculator": "0x2259440579447D0625a5E28dfF3E743d207e8890", + "clearinghouse": "0xAE1ec28d6225dCE2ff787dcb8CE11cF6D3AE064f", + "clearinghouseLiq": "0xca007C51Fc14eEA88252Cc4FD71e91E44026F020", + "endpoint": "0xbbEE07B3e8121227AfCFe1E2B82772246226128e", + "spotEngine": "0x32d91Af2B17054D575A7bF1ACfa7615f41CCEfaB", + "perpEngine": "0xb74C78cca0FADAFBeE52B2f48A67eE8c834b5fd1" +} + + +module.exports = { + arbitrum: { + tvl: sumTokensExport({ + owners: [config.clearinghouse, config.endpoint], + tokens: [ADDRESSES.arbitrum.WBTC, ADDRESSES.arbitrum.WETH, ADDRESSES.arbitrum.USDC, "0x912ce59144191c1204e64559fe8253a0e49e6548"], + }) + } +} \ No newline at end of file diff --git a/projects/vesper/index.js b/projects/vesper/index.js index 54df5fbbfd..dae3a61ab0 100644 --- a/projects/vesper/index.js +++ b/projects/vesper/index.js @@ -15,6 +15,9 @@ const chainConfig = { polygon: { api: ['https://api-polygon.vesper.finance/pools?stages=prod'], }, + optimism: { + api: ['https://api-optimism.vesper.finance/pools'] + }, } function getChainExports(chain) { @@ -70,5 +73,5 @@ function getChainExports(chain) { module.exports = { start: 1608667205, // December 22 2020 at 8:00 PM UTC - ...['ethereum', 'avax', 'polygon'].reduce((acc, chain) => ({ ...acc, ...getChainExports(chain) }), {}) + ...['ethereum', 'avax', 'polygon','optimism'].reduce((acc, chain) => ({ ...acc, ...getChainExports(chain) }), {}) }; diff --git a/projects/vesq/index.js b/projects/vesq/index.js index e646343253..01cf8e6b39 100644 --- a/projects/vesq/index.js +++ b/projects/vesq/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0x8c7290399cecbbbf31e471951cc4c2ce91f5073c" const vsq_token = "0x29f1e986fca02b7e54138c04c4f503dddd250558" const stakingAddress = "0x2f3e9e54bd4513d1b49a6d915f9a83310638cfc2" const treasuryTokens = [ - ["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", false], //DAI + [ADDRESSES.polygon.DAI, false], //DAI ["0x2e1ad108ff1d8c782fcbbb89aad783ac49586756", false], //TUSD ["0xa3fa99a148fa48d14ed51d610c367c61876997f1", false], //MAI ["0x45c32fa6df82ead1e2ef74d17b76547eddfaff89", false], //FRAX diff --git a/projects/vesta/index.js b/projects/vesta/index.js index b2c43ad6ec..a970a8fdfe 100644 --- a/projects/vesta/index.js +++ b/projects/vesta/index.js @@ -1,13 +1,14 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { sumBalancerLps, } = require("../helper/unwrapLPs.js"); const { transformArbitrumAddress } = require("../helper/portedTokens"); const VaultTokens = { gOHM: "0x8d9ba570d6cb60c7e3e0f31343efe75ab8e65fb1", - ETH: "0x0000000000000000000000000000000000000000", - renBTC: "0xdbf31df14b66535af65aac99c32e9ea844e14501", + ETH: ADDRESSES.null, + renBTC: ADDRESSES.fantom.renBTC, DPX: "0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55", - GMX: "0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a", + GMX: ADDRESSES.arbitrum.GMX, GLP: "0x2f546ad4edd93b956c8999be404cdcafde3e89ae" } diff --git a/projects/vestige/index.js b/projects/vestige/index.js new file mode 100644 index 0000000000..83431a1989 --- /dev/null +++ b/projects/vestige/index.js @@ -0,0 +1,34 @@ +const axios = require("axios"); + +async function fetch() { + //Get all the vaults in the protocol + const assetsUrl = "https://free-api.vestige.fi/assets/locked"; + const assetsResponse = await axios.get(assetsUrl); + const assets = assetsResponse.data; + + let tvl = 0; + + await Promise.all( + assets.map(async (asset) => { + const assetId = asset.asset_id; + const supplyInTvlLocked = asset.supply_in_tvl_locked; + const priceUrl = `https://free-api.vestige.fi/asset/${assetId}/price`; + const priceResponse = await axios.get(priceUrl); + const price = priceResponse.data.USD; + tvl += supplyInTvlLocked * price * 2; + }) + ); + tvl = tvl.toFixed(6) + return tvl; + +} + +module.exports = { + timetravel:false, + misrepresentedTokens:true, + methodology:`Counts tokens in LPs only, transforms the price to USD and * them by 2 to account for the other side.`, + algorand: { + fetch + }, + fetch +}; diff --git a/projects/vesync/index.js b/projects/vesync/index.js new file mode 100644 index 0000000000..27e269878a --- /dev/null +++ b/projects/vesync/index.js @@ -0,0 +1,32 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { getUniTVL } = require('../helper/unknownTokens'); + +const GET_AMOUNT_OUT = "function getAmountOut(uint amountIn, address tokenIn, address tokenOut) external view returns (uint amount, bool stable)"; + +const VOTING_ESCROW = "0x1925AB9F9bcdB9E2D2861cc7C4c157645126D9d9"; +const VS = "0x5756A28E2aAe01F600FC2C01358395F5C1f8ad3A"; +const ROUTER = "0x6C31035D62541ceba2Ac587ea09891d1645D6D07"; +const USDC = ADDRESSES.era.USDC; + +module.exports = { + misrepresentedTokens: true, + era: { + tvl: getUniTVL({ + factory: '0x529Bd7Fc43285B96f1e8d5158626d1F15bb8A834', + useDefaultCoreAssets: true, + hasStablePools: true, + fetchBalances: true, + }), + staking: async (_, _b, cb, { api } = {}) => { + const vsBalance = await api.call({ target: VS, abi: 'erc20:balanceOf', params: VOTING_ESCROW, }) + + // Use 1 VS as input to get the conversion rate from VS to USDC + const [conversionRate] = await api.call({ target: ROUTER, abi: GET_AMOUNT_OUT, params: [''+1e18, VS, USDC] }) + + return { + "usd-coin": vsBalance *conversionRate / 1e24 + } + } + }, + methodology: "TVL is total liquidity of all liquidity pools. Staking TVL is the value of VS tokens locked in the voting escrow (veVS) contract.", +}; \ No newline at end of file diff --git a/projects/vett/index.js b/projects/vett/index.js index 2c0aaf8829..5abf1b50a2 100644 --- a/projects/vett/index.js +++ b/projects/vett/index.js @@ -1,8 +1,27 @@ -const { nullAddress, sumTokensExport } = require('../helper/unwrapLPs'); +const sdk = require("@defillama/sdk"); + + +const chain = "thundercore"; +const posStaking = "0xC3C857a9E5Be042C8acF4F2827Aa053e93b5d039" +const posABI = { + getTTPoolAbi: "uint256:getTTPool" +} + +async function tvl(_timestamp, _b, { thundercore: block }) { + const params = { chain, block, target: posStaking, } + // staking pool = balanceOf(posStaking) + sum(voterStakings) - sum(userUnstakings) + const ttTvl = await sdk.api2.abi.call({ + ...params, + abi: posABI.getTTPoolAbi, + }); + return { + "thunder-token": ttTvl / 1e18, + }; +} module.exports = { methodology: 'calculate the total amount of TT locked in the veTT contract', thundercore: { - tvl: sumTokensExport({ owners: ['0xC3C857a9E5Be042C8acF4F2827Aa053e93b5d039'], tokens: [nullAddress], }) + tvl, }, } \ No newline at end of file diff --git a/projects/viperswap/index.js b/projects/viperswap/index.js index 6d0b04b688..695e155e56 100644 --- a/projects/viperswap/index.js +++ b/projects/viperswap/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { uniTvlExport } = require("../helper/calculateUniTvl"); const { staking } = require("../helper/staking"); const factory = "0x7d02c116b98d0965ba7b642ace0183ad8b8d2196"; -const viper = "0xea589e93ff18b1a1f1e9bac7ef3e86ab62addc79"; +const viper = ADDRESSES.harmony.VIPER; const xviper = "0xe064a68994e9380250cfee3e8c0e2ac5c0924548"; diff --git a/projects/visor/index.js b/projects/visor/index.js index 24c22a6df2..51197f2e0a 100644 --- a/projects/visor/index.js +++ b/projects/visor/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const hypervisorAbi = require("./abis/hypervisor.json"); const { staking } = require("../helper/staking"); @@ -17,26 +18,54 @@ const LIQUIDITY_MINING_POOLS = [ /* List of hypervisor registries by chain One chain can have multiple registries for different underlying DEXes */ const HYPE_REGISTRY = { - ethereum: ["0x31ccdb5bd6322483bebd0787e1dabd1bf1f14946"], + ethereum: [ + "0x31ccdb5bd6322483bebd0787e1dabd1bf1f14946", // Uniswap + ], polygon: [ "0x0Ac4C7b794f3D7e7bF1093A4f179bA792CF15055", // Uniswap "0xAeC731F69Fa39aD84c7749E913e3bC227427Adfd", // Quickswap + "0xcAC19d43C9558753d7535978A370055614Ce832E", // Retro + "0x97686103B3E7238Ca6c2C439146B30adBd84a593", // Sushiswap + "0x7b9c2f68f16c3618bb45616fb98d83f94fd7062e", // Ascent + ], + polygon_zkevm: [ + "0xD08B593eb3460B7aa5Ce76fFB0A3c5c938fd89b8", // Quickswap + ], + optimism: [ + "0xF5BFA20F4A77933fEE0C7bB7F39E7642A070d599", // Uniswap ], - optimism: ["0xF5BFA20F4A77933fEE0C7bB7F39E7642A070d599"], arbitrum: [ "0x66CD859053c458688044d816117D5Bdf42A56813", // Uniswap "0x37595FCaF29E4fBAc0f7C1863E3dF2Fe6e2247e9", // Zyberswap + "0x0f867F14b39a5892A39841a03bA573426DE4b1d0", // Sushiswap + "0x34Ffbd9Db6B9bD8b095A0d156de69a2AD2944666", // Ramses + "0xa216C2b6554A0293f69A1555dd22f4b7e60Fe907", // Camelot ], bsc: [ "0x0b4645179C1b668464Df01362fC6219a7ab3234c", // Uniswap "0xd4bcFC023736Db5617E5638748E127581d5929bd", // Thena ], - celo: ["0x0F548d7AD1A0CB30D1872b8C18894484d76e1569"], + moonbeam: [ + "0xB7dfC304D9cd88D98A262cE5B6a39Bb9d6611063", // Beamswap + "0x6002D7714e8038f2058e8162b0b86c0b19c31908", // Stellaswap + ], + celo: [ + "0x0F548d7AD1A0CB30D1872b8C18894484d76e1569", // Uniswap + ], + avax: [ + "0x3FE6F25DA67DC6AD2a5117a691f9951eA14d6f15", // Glacier + ], + fantom: [ + "0xf874d4957861e193aec9937223062679c14f9aca", // Spiritswap + ], + mantle: [ + "0x683292172E2175bd08e3927a5e72FC301b161300", // FusionX + ], }; /* List of bad addresses added to registries that need to be excluded manually */ const blacklist = { - ethereum: ["0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"], + ethereum: [ADDRESSES.ethereum.WBTC], polygon: ["0xa9782a2c9c3fb83937f14cdfac9a6d23946c9255"], }; @@ -93,6 +122,7 @@ async function getHypervisorBalances({ hypervisors, api, balances = {} }) { const supplies = await api.multiCall({ abi: "erc20:totalSupply", calls: hypervisors, + permitFailure: true, }); hypervisors = hypervisors.filter((_, i) => +supplies[i] > 0); @@ -122,6 +152,9 @@ module.exports = { polygon: { tvl: tvlWrapper, }, + polygon_zkevm: { + tvl: tvlWrapper, + }, optimism: { tvl: tvlWrapper, }, @@ -131,7 +164,19 @@ module.exports = { bsc: { tvl: tvlWrapper, }, + moonbeam: { + tvl: tvlWrapper, + }, celo: { tvl: tvlWrapper, }, + avax: { + tvl: tvlWrapper, + }, + fantom: { + tvl: tvlWrapper, + }, + mantle: { + tvl: tvlWrapper, + }, }; diff --git a/projects/vivaleva/index.js b/projects/vivaleva/index.js new file mode 100644 index 0000000000..716d28472c --- /dev/null +++ b/projects/vivaleva/index.js @@ -0,0 +1,61 @@ +const { formatUnits } = require("ethers/lib/utils"); +const axios = require('axios'); + + +async function fetch() { + const url = "https://sbb.sooho.io/api/v1/external/vivaleva/defiLlama"; + var response = (await axios.get(url)).data; + return response; +} + +module.exports = { + timetravel: false, + era: { + async tvl(_, _1, _2, { api }) { + const data = await fetch(); + const vaults = data.vaults; + const syncswapWorkers = data.syncswapWorkers; + const vaultBalances = await api.multiCall({ + abi: "uint256:vaultBalance", + calls: vaults.map((v) => v.address), + }); + + vaults.forEach((v, i) => { + api.add(v.baseTokenAddress, vaultBalances[i]); + }); + + const [ + syncswapWorkerBalances, + syncswapReserves, + syncswapLpTotalSupplies, + ] = await Promise.all([ + api.multiCall({ + abi: "uint256:totalStakedLpBalance", + calls: syncswapWorkers.map((v) => v.address), + }), + api.multiCall({ + abi: "function getReserves() view returns (uint256, uint256)", + calls: syncswapWorkers.map((v) => v.lpToken), + }), + api.multiCall({ + abi: "uint256:totalSupply", + calls: syncswapWorkers.map((v) => v.lpToken), + }), + ]); + + syncswapWorkers.forEach((w, i) => { + const [token0, token1] = + w.baseTokenAddress.toLowerCase() < w.farmingTokenAddress.toLowerCase() + ? [w.baseTokenAddress, w.farmingTokenAddress] + : [w.farmingTokenAddress, w.baseTokenAddress]; + const lpBalance = BigInt(syncswapWorkerBalances[i]) + const totalSupply = BigInt(syncswapLpTotalSupplies[i]) + const [r0, r1] = syncswapReserves[i].map(BigInt); + const underlying0 = String(lpBalance * r0 / totalSupply); + const underlying1 = String(lpBalance * r1 / totalSupply); + api.add(token0, underlying0); + api.add(token1, underlying1); + }); + }, + }, +}; diff --git a/projects/volmex/index.js b/projects/volmex/index.js index f664bd9e6b..257e0d3063 100644 --- a/projects/volmex/index.js +++ b/projects/volmex/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const {sumTokens} = require('../helper/unwrapLPs') -const dai = "0x6b175474e89094c44da98b954eedeac495271d0f" -const usdc = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" +const dai = ADDRESSES.ethereum.DAI +const usdc = ADDRESSES.ethereum.USDC async function eth(timestamp, block) { const balances = {} await sumTokens(balances, [ @@ -14,8 +15,8 @@ async function eth(timestamp, block) { return balances } -const polygonDai = "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063" -const polygonUsdc = "0x2791bca1f2de4661ed88a30c99a7a9449aa84174" +const polygonDai = ADDRESSES.polygon.DAI +const polygonUsdc = ADDRESSES.polygon.USDC async function polygon(timestamp, block, chainBlocks) { const balances = {} await sumTokens(balances, [ @@ -27,8 +28,8 @@ async function polygon(timestamp, block, chainBlocks) { return balances } -const arbitrumDai = "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1" -const arbitrumUsdc = "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" +const arbitrumDai = ADDRESSES.optimism.DAI +const arbitrumUsdc = ADDRESSES.arbitrum.USDC async function arbitrum(timestamp, block, chainBlocks) { const balances = {} await sumTokens(balances, [ diff --git a/projects/volta-dao/api.js b/projects/volta-dao/api.js new file mode 100644 index 0000000000..f7b075a2e5 --- /dev/null +++ b/projects/volta-dao/api.js @@ -0,0 +1,12 @@ +const index = require('./index') + +module.exports = { + fantom: { + tvl: () => 0, + staking: index.fantom.staking, + }, + avax: { + tvl: () => 0, + staking: index.avax.staking, + }, +} \ No newline at end of file diff --git a/projects/volta-dao/index.js b/projects/volta-dao/index.js index 43c7b4bca9..07edfae28e 100644 --- a/projects/volta-dao/index.js +++ b/projects/volta-dao/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakingUnknownPricedLP } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const sdk = require("@defillama/sdk"); @@ -7,7 +8,7 @@ const ftmToken = "0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"; const ftmStaking = "0xc6a54adddf7463f73a4c5a8e3e480bc798cf8a09"; const ftmTreasury = "0x05ab17e4dfa87ef4ac487ed20cfcc2ae75c2a792"; const ftmTokens = [ - ["0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", false], + [ADDRESSES.fantom.DAI, false], ["0x78b51a1fd7524186982c2cb8982df312b1e896a8", true] ]; @@ -15,7 +16,7 @@ const avaxToken = "0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"; const avaxStaking = "0xfae672012b90cfb6bf245ac072a3aca374604b17"; const avaxTreasury = "0x05ab17e4dfa87ef4ac487ed20cfcc2ae75c2a792"; const avaxTokens = [ - ["0xd586e7f844cea2f87f50152665bcbc2c279d8d70", false], + [ADDRESSES.avax.DAI, false], ["0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8", true] ] @@ -41,8 +42,8 @@ async function tokenPrice(block, chain, lp, unlisted, listed) { async function ftmTvl (timestamp, block, chainBlocks) { let balances = {}; await sumTokensAndLPsSharedOwners(balances, ftmTokens, [ftmTreasury], chainBlocks.fantom, "fantom", addr=>`fantom:${addr}`); - const ratio = await tokenPrice(chainBlocks.fantom, "fantom", "0x78b51a1fd7524186982c2cb8982df312b1e896a8", ftmToken, "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e"); - sdk.util.sumSingleBalance(balances, "fantom:0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e", BigNumber(balances["fantom:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]).times(ratio).toFixed(0)); + const ratio = await tokenPrice(chainBlocks.fantom, "fantom", "0x78b51a1fd7524186982c2cb8982df312b1e896a8", ftmToken, ADDRESSES.fantom.DAI); + sdk.util.sumSingleBalance(balances, "fantom:" + ADDRESSES.fantom.DAI, BigNumber(balances["fantom:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]).times(ratio).toFixed(0)); delete balances["fantom:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]; return balances; } @@ -50,8 +51,8 @@ async function ftmTvl (timestamp, block, chainBlocks) { async function avaxTvl (timestamp, block, chainBlocks) { let balances = {}; await sumTokensAndLPsSharedOwners(balances, avaxTokens, [avaxTreasury], chainBlocks.avax, "avax", addr=>`avax:${addr}`); - const ratio = await tokenPrice(chainBlocks.avax,"avax", "0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8", avaxToken, "0xd586e7f844cea2f87f50152665bcbc2c279d8d70"); - sdk.util.sumSingleBalance(balances, "avax:0xd586e7f844cea2f87f50152665bcbc2c279d8d70", BigNumber(balances["avax:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]).times(ratio).toFixed(0)); + const ratio = await tokenPrice(chainBlocks.avax,"avax", "0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8", avaxToken, ADDRESSES.avax.DAI); + sdk.util.sumSingleBalance(balances, "avax:" + ADDRESSES.avax.DAI, BigNumber(balances["avax:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]).times(ratio).toFixed(0)); delete balances["avax:0x4c9993c7107495020c2ce9a13d11839f48ecd2e6"]; return balances; } diff --git a/projects/voltz/index.js b/projects/voltz/index.js index c48c93b33b..afbc7607e4 100644 --- a/projects/voltz/index.js +++ b/projects/voltz/index.js @@ -3,28 +3,36 @@ const { sumTokens2 } = require('../helper/unwrapLPs') const { getLogs } = require('../helper/cache/getLogs') async function getTokensAndOwners(api) { - const Factory = '0x6a7a5c3824508D03F0d2d24E0482Bea39E08CcAF' + const { factory, fromBlock } = config[api.chain] const logs = await getLogs({ api, - target: Factory, - fromBlock: 14878442, + target: factory, + fromBlock, + onlyArgs: true, topic: 'IrsInstance(address,address,uint256,uint256,int24,address,address,address,uint8,uint8)', eventAbi: 'event IrsInstance (address indexed underlyingToken, address indexed rateOracle, uint256 termStartTimestampWad, uint256 termEndTimestampWad, int24 tickSpacing, address marginEngine, address vamm, address fcm, uint8 yieldBearingProtocolID, uint8 underlyingTokenDecimals)', }) - return logs.map((log) => log.args).map(i => ([i[0], i[5]])) + return logs.map(i => ([i.underlyingToken, i.marginEngine])) } async function tvl(_, block, _1, { api }) { - return sumTokens2({ - tokensAndOwners: await getTokensAndOwners(api), - block, - }); + return sumTokens2({ api, tokensAndOwners: await getTokensAndOwners(api), }) } module.exports = { - ethereum: { - tvl, - }, methodology: `It takes the list of all the Margin Engines deployed by the Voltz Factory and aggregates their token holdings. These token holdings represent the margin that supports liquidity provider and trader positions in Voltz interest rate swap pools.`, -}; \ No newline at end of file +}; + +const config = { + ethereum: { factory: '0x6a7a5c3824508D03F0d2d24E0482Bea39E08CcAF', fromBlock: 14878442 }, + arbitrum: { factory: '0xda66a7584da7210fd26726EFb12585734F7688c1', fromBlock: 60246384 }, + avax: { factory: '0xda66a7584da7210fd26726EFb12585734F7688c1', fromBlock: 30096058 }, +} + +module.exports = { +}; + +Object.keys(config).forEach(chain => { + module.exports[chain] = { tvl } +}) \ No newline at end of file diff --git a/projects/voodoo-trade/index.js b/projects/voodoo-trade/index.js new file mode 100644 index 0000000000..241542fd87 --- /dev/null +++ b/projects/voodoo-trade/index.js @@ -0,0 +1,13 @@ +const { gmxExports } = require("../helper/gmx"); +const { pool2 } = require("../helper/pool2"); + +const vault = "0x40cbDDAED8b0d7Ee3cF347aAb09Bf4a8cFa15F01"; +const lpToken = "0xC42437A6da389D88799A9e706da3EA6628342295"; +const stakedLpTokenTracker = "0xBf47b011C36F29e7C65b6cf34c1d838EA1b67069"; + +module.exports = { + fantom: { + tvl: gmxExports({ vault }), + pool2: pool2(stakedLpTokenTracker, lpToken,), + }, +}; \ No newline at end of file diff --git a/projects/votium/index.js b/projects/votium/index.js deleted file mode 100644 index 3b0d766a2f..0000000000 --- a/projects/votium/index.js +++ /dev/null @@ -1,34 +0,0 @@ -const { getConfig } = require('../helper/cache') - -const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); - -const multiMerkleStashContracts = "0x378Ba9B73309bE80BF4C2c027aAD799766a7ED5A"; -const votiumBribeContract = "0x19BBC3463Dd8d07f55438014b021Fb457EBD4595"; - -const API_URL = - "https://raw.githubusercontent.com/oo-00/Votium/main/utils/voteCalculator/tokens.json"; - -async function ethTvl() { - const balances = {}; - - const tokenAddresses = (await getConfig('Votium', API_URL)).map( - (addr) => addr.value - ); - - for (const token of tokenAddresses) { - await sumTokensAndLPsSharedOwners( - balances, - [[token, false]], - [multiMerkleStashContracts, votiumBribeContract], - ); - } - - return balances; -} - -module.exports = { - ethereum: { - tvl: ethTvl, - }, - methodology: "Counts tvl of Tokens used for Delegating on Convex Snapshot through MultiMerkleStash Contract", -}; diff --git a/projects/vyfi-dex/index.js b/projects/vyfi-dex/index.js new file mode 100644 index 0000000000..b2b638d69e --- /dev/null +++ b/projects/vyfi-dex/index.js @@ -0,0 +1,24 @@ +const { toUSDTBalances } = require("../helper/balances"); +const { fetchURL } = require("../helper/utils"); + + +async function getLPData() { + const tvl = await fetchURL("https://api.vyfi.io/analytics"); + + return {cardano:tvl.data.lp.totalLpTvl}; +} + +async function vyfiStaking() { + const tvl = await fetchURL("https://api.vyfi.io/analytics?filter=bar"); + + return {cardano:tvl.data.bar.tvl}; +} + +module.exports = { + misrepresentedTokens: true, + timetravel: false, + cardano: { + tvl:getLPData, + staking: vyfiStaking + }, +}; \ No newline at end of file diff --git a/projects/vyfi/index.js b/projects/vyfi/index.js index 535b92cb48..b09183c250 100644 --- a/projects/vyfi/index.js +++ b/projects/vyfi/index.js @@ -2,18 +2,46 @@ const { toUSDTBalances } = require("../helper/balances"); const { fetchURL } = require("../helper/utils"); async function getStakingData() { - const tvl = await fetchURL("https://api.vyfi.io/analytics"); - if (tvl.data.totalValueLocked <= 0) { - throw new Error("vyfi tvl is below 0"); + const data = await fetchURL("https://api.vyfi.io/analytics"); + + let tvl = 0; + + // Include the total value locked in nftVaults and nftVaultsV2 and lpVaults + tvl += data.data.nftVaults.totalValueLocked; + tvl += data.data.nftVaultsV2.totalValueLocked; + tvl += data.data.lpVaultsV2.totalValueLocked; + + for (const vault of data.data.tokenVaults.vaults.concat(data.data.tokenVaultsV2.vaults)) { + if (vault.project !== 'vyfi') { + tvl += vault.totalVaultValue; + } + } + + return toUSDTBalances(tvl); +} + + +async function getVYFIVaultsData() { + const data = await fetchURL("https://api.vyfi.io/analytics"); + + let tvl = 0; + for (const vault of data.data.tokenVaults.vaults.concat(data.data.tokenVaultsV2.vaults)) { + if (vault.project === 'vyfi') { + tvl += vault.totalVaultValue; + } } - return toUSDTBalances(tvl.data.totalValueLocked); + + return toUSDTBalances(tvl); } + + + module.exports = { misrepresentedTokens: true, timetravel: false, cardano: { - tvl: () => ({}), - staking: getStakingData, + tvl: getStakingData, + staking: getVYFIVaultsData }, }; diff --git a/projects/wagmidao/index.js b/projects/wagmidao/index.js index 7690efec4d..a7eca0699c 100644 --- a/projects/wagmidao/index.js +++ b/projects/wagmidao/index.js @@ -107,7 +107,7 @@ module.exports = { timetravel: true, harmony: { staking: Staking, - tvl: sdk.util.sumChainTvls([uniTvlExport(factory, 'harmony'), Treasury]), + tvl: sdk.util.sumChainTvls([uniTvlExport(factory, 'harmony'),]), }, methodology: "Counts liquidity on the Farms through Factory Contract, and counts Treasury as it is determined by bonding of assets. Staking refers to the staked GMI tokens", }; diff --git a/projects/warp/index.js b/projects/warp/index.js index e2193dc8ce..3be4c1a74d 100644 --- a/projects/warp/index.js +++ b/projects/warp/index.js @@ -9,11 +9,19 @@ async function tvl(_timestamp, block, _1, { api }) { ...group.logConfig, api, }).then(logs => logs.map((poolLog) => `0x${poolLog.data.substr(26, 40)}`)) - if (group.abi === 'address:LPtoken') - holders = holders.filter(i => i .toLowerCase() !== '0xac6f575fda9b5009993f783845dac63c079f3de7') - const _tokens = await api.multiCall({ abi: group.abi, calls: holders, }) - owners.push(...holders) - tokens.push(..._tokens) + const _tokens = await api.multiCall({ abi: 'address:LPtoken', calls: holders, permitFailure: true, }) + const failedHolders = holders.filter((holder, i) => { + if (_tokens[i]) { + owners.push(holder) + tokens.push(_tokens[i]) + return false + } + return true + }) + + const _tokens2 = await api.multiCall({ abi: 'address:stablecoin', calls: failedHolders }) + owners.push(...failedHolders) + tokens.push(..._tokens2) } return sumTokens2({ api, tokensAndOwners2: [tokens, owners], }) } @@ -30,7 +38,6 @@ const tokenHolderMap = [ topic: "NewLPVault(address)", fromBlock: 11803584, }, - abi: "address:LPtoken", }, { logConfig: { @@ -38,7 +45,6 @@ const tokenHolderMap = [ topic: "NewSCVault(address,address)", fromBlock: 11803584, }, - abi: "address:stablecoin", }, { logConfig: { @@ -46,7 +52,6 @@ const tokenHolderMap = [ topic: "NewLPVault(address)", fromBlock: 11654924, }, - abi: "address:LPtoken", }, { logConfig: { @@ -54,6 +59,5 @@ const tokenHolderMap = [ topic: "NewSCVault(address,address)", fromBlock: 11654924, }, - abi: "address:LPtoken", }, ] diff --git a/projects/warpbond/index.js b/projects/warpbond/index.js index efa604cbba..8622bba30e 100644 --- a/projects/warpbond/index.js +++ b/projects/warpbond/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const token = "0x3F46a70adB395cddb81FF9bFE3B62aDae1B44816"; const stakingContract = "0xA828eB4565819d3A134930CffbFD17f3bEE61F6a"; const treasury = "0x64a999BF3405f53074Fe5F89aCB09B5E9b35F5d7"; const treasuryTokens = [ - ["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", false], // DAI + [ADDRESSES.polygon.DAI, false], // DAI ["0xa3fa99a148fa48d14ed51d610c367c61876997f1", false], // miMATIC ["0x2c9aed5b029dfd6b83c1214e528a276f41b8b527", true] // WARP-DAI SLP ] diff --git a/projects/wasabi/index.js b/projects/wasabi/index.js new file mode 100644 index 0000000000..44cc6d902e --- /dev/null +++ b/projects/wasabi/index.js @@ -0,0 +1,21 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') + +async function tvl(_, _b, _cb, { api, }) { + const logs = await getLogs({ + api, + target: '0x8e2b50413a53f50e2a059142a9be060294961e40', + topics: ['0xd02da1bec30f7f750aa0a131745dfb9ce96767c45a192dc26409f5d690e0b967'], + eventAbi: 'event NewPool(address poolAddress, address indexed nftAddress, address indexed owner)', + onlyArgs: true, + fromBlock: 17082136, + }) + const ownerTokens = logs.map(i => [[i.nftAddress, nullAddress], i.poolAddress]) + return sumTokens2({ api, ownerTokens, }) +} + +module.exports = { + ethereum: { + tvl + } +} \ No newline at end of file diff --git a/projects/wasabix/index.js b/projects/wasabix/index.js index 9f39ad4a0d..0d8ec1e772 100644 --- a/projects/wasabix/index.js +++ b/projects/wasabix/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const { sumTokens } = require("../helper/unwrapLPs") @@ -7,7 +8,7 @@ const { pool2s } = require('../helper/pool2') const tokens = { dai: { token:'DAI', - address:'0x6b175474e89094c44da98b954eedeac495271d0f', + address:ADDRESSES.ethereum.DAI, decimals:18, correspondingMintableToken: 'waUSD' }, @@ -19,13 +20,13 @@ const tokens = { }, wbtc: { token:'wBTC', - address:'0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', + address:ADDRESSES.ethereum.WBTC, decimals:8, correspondingMintableToken: 'waBTC' }, lusd: { token:'LUSD', - address:'0x5f98805a4e8be255a32880fdec7f6728c6568ba0', + address:ADDRESSES.ethereum.LUSD, decimals:18, correspondingMintableToken: 'waLUSD' }, @@ -48,7 +49,7 @@ const tokens = { }, weth: { token:'WETH', - address:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', + address:ADDRESSES.ethereum.WETH, decimals:18, correspondingMintableToken: 'waETH' }, @@ -65,7 +66,7 @@ const tokens = { }, usdc: { token: 'usdc', - address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + address: ADDRESSES.ethereum.USDC, decimals: 6 } } @@ -221,7 +222,7 @@ const tokensPolygon = { }, usdc: { token: 'USDC', - address: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', + address: ADDRESSES.polygon.USDC, decimals: 6, }, pusd: { @@ -335,7 +336,7 @@ const tokensBSC = { }, wbnb: { token:'WBNB', - address:'0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', + address:ADDRESSES.bsc.WBNB, decimals:18, correspondingMintableToken: 'waBNB' }, @@ -347,7 +348,7 @@ const tokensBSC = { }, busd: { token: 'BUSD', - address: '0xe9e7cea3dedca5984780bafc599bd69add087d56', + address: ADDRESSES.bsc.BUSD, decimals: 18, correspondingMintableToken: 'waBUSD' } @@ -371,7 +372,7 @@ const collectorsBSC = [ }, ] -const busd = 'bsc:0xe9e7cea3dedca5984780bafc599bd69add087d56' +const busd = 'bsc:' + ADDRESSES.bsc.BUSD async function bsc(timestamp, block, chainBlocks) { let balances = {}; diff --git a/projects/waterfall-arbitrum/index.js b/projects/waterfall-arbitrum/index.js deleted file mode 100644 index 704d07835b..0000000000 --- a/projects/waterfall-arbitrum/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const { masterchefExports } = require('../helper/unknownTokens') - - -const chef = "0xe9960f14B5f0713D1d530C1fF079A7adAb7c076D" -const waterfall = "0xedBF59b40336244c6ea94A11a6B0cF6864c87E83" -const waterfallWethLP = "0x29519bcfd1d702363e9Ad63dBd2331C3C7f4A9f7" -const waterfallUsdcLP = "0x18B60b6b6a14D7C33D5086fA84871d519136C064"; - -module.exports = masterchefExports({ chain: 'arbitrum', nativeToken: waterfall, masterchef: chef, useDefaultCoreAssets: true, lps: [waterfallWethLP, waterfallUsdcLP, ]}) \ No newline at end of file diff --git a/projects/waterfallbsc/index.js b/projects/waterfallbsc/index.js index a7e13374dd..b1b1d213fa 100644 --- a/projects/waterfallbsc/index.js +++ b/projects/waterfallbsc/index.js @@ -1,10 +1,14 @@ const {masterChefExports} = require("../helper/masterchef"); -const arbitrumExports = require("../waterfall-arbitrum"); +//const arbitrumExports = require("../waterfall-arbitrum"); const token = "0xFdf36F38F5aD1346B7f5E4098797cf8CAE8176D0"; const masterchef = "0x49a21E7Ae826CD5F0c0Cb1dC942d1deD66d21191"; +const chef = "0xe9960f14B5f0713D1d530C1fF079A7adAb7c076D" +const waterfall = "0xedBF59b40336244c6ea94A11a6B0cF6864c87E83" +const waterfallWethLP = "0x29519bcfd1d702363e9Ad63dBd2331C3C7f4A9f7" +const waterfallUsdcLP = "0x18B60b6b6a14D7C33D5086fA84871d519136C064"; module.exports = { ...masterChefExports(masterchef, "bsc", token, false), - ...arbitrumExports, + ...masterChefExports( chef, "arbitrum", waterfall, false), } // node test.js projects/waterfallbsc/index.js \ No newline at end of file diff --git a/projects/waterloan/index.js b/projects/waterloan/index.js index 678564d2b0..5208580da9 100644 --- a/projects/waterloan/index.js +++ b/projects/waterloan/index.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getV2Reserves, getTvl, getBorrowed } = require("../helper/aave"); const addressesProviderRegistry = { "csc": "0x9D15cf1a8ebF191A0df57fA0362ba535F371883b", "smartbch": "0xF7d79dC3A3e78745abEbE5A0e8d4735F02A854B9" } -const USDT = "0x398dcA951cD4fc18264d995DCD171aa5dEbDa129"; +const USDT = ADDRESSES.csc.USDT; const USDC = "0xF335B2440e62A953a42865aDf7bD73F4C6671A7b"; -const FLEXUSD = "0x7b2B3C5308ab5b2a1d9a94d20D35CCDf61e05b72"; +const FLEXUSD = ADDRESSES.smartbch.flexUSD; const EBEN = "0x77CB87b57F54667978Eb1B199b28a0db8C8E1c0B"; -const WBCH = "0x3743eC0673453E5009310C727Ba4eaF7b3a1cc04"; +const WBCH = ADDRESSES.smartbch.WBCH; const MIST = "0x5fA664f69c2A4A3ec94FaC3cBf7049BD9CA73129"; function waterloan(chain, borrowed) { @@ -42,14 +43,14 @@ function waterloan(chain, borrowed) { } const erc20Map = { - "0xE6f8988d30614afE4F7124b76477Add79c665822": + [ADDRESSES.csc.WCET]: "0x081f67afa0ccf8c7b17540767bbe95df2ba8d97f", // CET "0x1D7C98750A47762FA8B45c6E3744aC6704F44698": "0x2731d151CBDf84A8A4C6d9D0BaE74012Db51E428", // IFT - "0x398dcA951cD4fc18264d995DCD171aa5dEbDa129": - "0xdac17f958d2ee523a2206206994597c13d831ec7", // USDT + [ADDRESSES.csc.USDT]: + ADDRESSES.ethereum.USDT, // USDT "0xF335B2440e62A953a42865aDf7bD73F4C6671A7b": - "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC + ADDRESSES.ethereum.USDC, // USDC "0x9F4165009e93b7f5BA61A477ad08Cd3D1aD8aa36": "0x0b342c51d1592c41068d5d4b4da4a68c0a04d5a4", // ONES diff --git a/projects/wbtc.js b/projects/wbtc.js index 1dfc6cacc9..39e9bc8f89 100644 --- a/projects/wbtc.js +++ b/projects/wbtc.js @@ -1,12 +1,20 @@ +const ADDRESSES = require('./helper/coreAssets.json') const sdk = require('@defillama/sdk') async function tvl(ts, block) { return { - '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599': (await sdk.api.erc20.totalSupply({ target: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', block })).output + [ADDRESSES.ethereum.WBTC]: (await sdk.api.erc20.totalSupply({ target: ADDRESSES.ethereum.WBTC, block })).output + } +} +async function tvlTron(ts, block, _, { api }) { + return { + [ADDRESSES.ethereum.WBTC]: (await api.call({ target: 'TXpw8XeWYeTUd4quDskoUqeQPowRh4jY65', abi: 'erc20:totalSupply' })), + ['ethereum:'+ADDRESSES.null]: (await api.call({ target: 'TXWkP3jLBqRGojUih1ShzNyDaN5Csnebok', abi: 'erc20:totalSupply' })), } } module.exports = { ethereum: { tvl }, + tron: { tvl: tvlTron }, methodology: `TVL for WBTC consists of the BTC deposits in custody that were used to mint WBTC` } diff --git a/projects/weave/index.js b/projects/weave/index.js new file mode 100644 index 0000000000..1e9a03a6eb --- /dev/null +++ b/projects/weave/index.js @@ -0,0 +1,23 @@ + +const WKAVA = '0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b'; +const STRATEGY_CONTRACT = '0x9633a42E4f73F465DD421b22C09E2787493DaAdA' + +async function tvl(_, _1, _2, { api }) { + const strategyBalance = await api.call({ + abi: 'erc20:balanceOf', + target: WKAVA, + params: [STRATEGY_CONTRACT], + }); + + api.add(WKAVA, strategyBalance) +} + +module.exports = { + timetravel: true, + misrepresentedTokens: false, + methodology: 'gets the balance of the strategy contract', + start: 5793963, + kava: { + tvl, + } +}; \ No newline at end of file diff --git a/projects/weldfinance/index.js b/projects/weldfinance/index.js index c6030e73b9..9206328818 100644 --- a/projects/weldfinance/index.js +++ b/projects/weldfinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { masterchefExports, } = require("../helper/unknownTokens") const sdk = require('@defillama/sdk') @@ -7,7 +8,7 @@ async function verifyTvl() { briseSupply, ] = await sdk.api2.abi.multiCall({ abi: 'erc20:totalSupply', chain: 'kava', - calls: ['0x472402d47Da0587C1cf515DAfbAFc7bcE6223106', '0xea616011e5ac9a5b91e22cac59b4ec6f562b83f9',] + calls: [ADDRESSES.kava.USDk, ADDRESSES.kava.kBRISE,] }) usdkSupply /= 1e18 briseSupply /= 1e18 @@ -18,8 +19,8 @@ async function verifyTvl() { const bals = await sdk.api2.abi.multiCall({ abi: 'erc20:balanceOf', calls: [ - { target: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', params: fireBlockAccount }, - { target: '0xdac17f958d2ee523a2206206994597c13d831ec7', params: fireBlockAccount }, + { target: ADDRESSES.ethereum.USDC, params: fireBlockAccount }, + { target: ADDRESSES.ethereum.USDT, params: fireBlockAccount }, ], }) @@ -27,8 +28,8 @@ async function verifyTvl() { abi: 'erc20:balanceOf', chain: 'polygon', calls: [ - { target: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', params: fireBlockAccount }, - { target: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', params: fireBlockAccount }, + { target: ADDRESSES.polygon.USDC, params: fireBlockAccount }, + { target: ADDRESSES.polygon.USDT, params: fireBlockAccount }, ], }) @@ -50,7 +51,7 @@ module.exports = masterchefExports({ chain: 'kava', useDefaultCoreAssets: true, masterchef: '0xAbF3edbDf79dAfBBd9AaDBe2efEC078E557762D7', - nativeToken: '0xa0EEDa2e3075092d66384fe8c91A1Da4bcA21788' + nativeToken: ADDRESSES.kava.KFT }) module.exports.kava.tvl = sdk.util.sumChainTvls([module.exports.kava.tvl, verifyTvl]) \ No newline at end of file diff --git a/projects/welnance/index.js b/projects/welnance/index.js index 30180898be..6766cf201b 100644 --- a/projects/welnance/index.js +++ b/projects/welnance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { compoundExports } = require("../helper/compound"); const comptroller = "0xdc21c1dAF3277f07fFA6EB09fCD3E07EDc36DC0A"; @@ -9,7 +10,7 @@ module.exports = { ...compoundExports( comptroller, "bsc", "0x38e22c429e62530cbB59B90bF14a71346C727752", - "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" + ADDRESSES.bsc.WBNB ), }, methodology: diff --git a/projects/wemix-staking/index.js b/projects/wemix-staking/index.js new file mode 100644 index 0000000000..e8ed83adc8 --- /dev/null +++ b/projects/wemix-staking/index.js @@ -0,0 +1,11 @@ +const ADDRESSES = require("../helper/coreAssets.json"); +const { staking } = require("../helper/staking"); + +const wwemix = ADDRESSES.wemix.WWEMIX; +const stakingContract = "0x6F3f44B0Cf7C751f2a44Faf6bFdd08e499Eb0973"; + +module.exports = { + wemix: { + tvl: staking(stakingContract, wwemix), + }, +}; diff --git a/projects/wepiggy.js b/projects/wepiggy.js index 0c6a6ac77b..736c416c9b 100644 --- a/projects/wepiggy.js +++ b/projects/wepiggy.js @@ -99,3 +99,6 @@ module.exports={ ...chainExports, methodology: `TVL is comprised of tokens deposited to the protocol as collateral, similar to Compound Finance and other lending protocols the borrowed tokens are not counted as TVL.` } + +module.exports.oasis = { tvl: () => 0, borrowed: () => 0 } +module.exports.heco = { tvl: () => 0, borrowed: () => 0 } \ No newline at end of file diff --git a/projects/westater/index.js b/projects/westater/index.js index b81e9297d0..7af5102ff5 100644 --- a/projects/westater/index.js +++ b/projects/westater/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { unwrapUniswapLPs } = require('../helper/unwrapLPs'); const BigNumber = require("bignumber.js"); @@ -35,7 +36,7 @@ const farms = [ ] function transform(tokenAddress){ - if(tokenAddress === "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f"){ + if(tokenAddress === ADDRESSES.heco.WHT){ return "0x6f259637dcd74c767781e37bc6133cd6a68aa161" } else { return `heco:${tokenAddress}` diff --git a/projects/whalegame/index.js b/projects/whalegame/index.js new file mode 100644 index 0000000000..e3922dded6 --- /dev/null +++ b/projects/whalegame/index.js @@ -0,0 +1,26 @@ + +const ADDRESSES = require("../helper/coreAssets.json"); + +const GAME_CONTRACT_ADDRESS = "0xF1baf16Db25405856f5379246Beba2B694e1449D"; + +async function tvl(_, _1, _2, { api }) { + const whaleTokenAddress = await api.call({ abi: abi.whaleToken, target: GAME_CONTRACT_ADDRESS, }); + const owners = [GAME_CONTRACT_ADDRESS, whaleTokenAddress] + + owners.push(...await api.fetchList({ itemAbi: abi.vestingContractforRound, lengthAbi: abi.round, target: GAME_CONTRACT_ADDRESS, })) + return api.sumTokens({ tokens: [ADDRESSES.null], owners, blacklistedOwners: [ADDRESSES.null] }) +} + +module.exports = { + methodology: + "Counts the amount of ETH in the Game Pot, WHALE Rewards Contract and unclaimed ETH in vesting contracts", + ethereum: { + tvl, + }, +}; + +const abi = { + "vestingContractforRound": "function vestingContractForRound(uint256) view returns (address)", + "round": "uint256:round", + "whaleToken": "address:whaleToken" +} \ No newline at end of file diff --git a/projects/whaleloans/index.js b/projects/whaleloans/index.js index 55733256f1..4812fe0571 100644 --- a/projects/whaleloans/index.js +++ b/projects/whaleloans/index.js @@ -1,18 +1,3 @@ -// const { ohmTvl } = require('../helper/ohm') - -// const treasury = "0x39914b5b0687882659d74b7a82e07Ca3acBf9a8c" -// module.exports = ohmTvl(treasury, [ -// //WBNB -// ["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", false], -// //BUSD -// ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], -// //USDC -// ["0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", false], -// //PancakeLP -// ["0x63D9DEf04dcBf82870f46f50db5C1eFeCcb1Cd63", true], -// ], "bsc", "0x5132e14a2673DA61581364d792E90B926F10bC8e", "0xfAAec9f866Fa7f34a2c31c2B11D1723Ad4a46446", undefined, undefined, true) - - // NOTE: treasury is emptied, token is worthless, adapter is left alone for historical data module.exports = { bsc: { diff --git a/projects/wheat.js b/projects/wheat.js deleted file mode 100644 index da3caf11b5..0000000000 --- a/projects/wheat.js +++ /dev/null @@ -1,15 +0,0 @@ -const utils = require('./helper/utils'); - -/* * * * * * * * -* ==> Correct adapter needs to be created. -* -*****************/ -async function fetch() { - var tvl = await utils.fetchURL('https://api.growthdefi.com/tvl/wheat-tvl') - return tvl.data.TVL; -} - -module.exports = { - fetch, - methodology: `TVL for Wheat Protocol is achieved by making calls to their API: https://api.growthdefi.com/tvl/wheat-tvl` -} diff --git a/projects/whiteheart/index.js b/projects/whiteheart/index.js index 54c398a7b4..e9b818adb8 100644 --- a/projects/whiteheart/index.js +++ b/projects/whiteheart/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const whbtc = "0xf19c3FAFB0171484d2301Af1838cB5C6Ea739dC4" const wheth = "0x33827D2d2a0f4533AC26083E6eaAe71D417cbBA0" const writeUSDC = "0xda0606037834f4279Dc590434231F1E01C468629" -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" -const wbtc = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" -const usdc = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" +const weth = ADDRESSES.ethereum.WETH +const wbtc = ADDRESSES.ethereum.WBTC +const usdc = ADDRESSES.ethereum.USDC async function tvl(_timestamp, ethBlock) { const balances = {}; diff --git a/projects/whitewhale-dex/index.js b/projects/whitewhale-dex/index.js new file mode 100644 index 0000000000..60ad7f5795 --- /dev/null +++ b/projects/whitewhale-dex/index.js @@ -0,0 +1,24 @@ +const { getFactoryTvl } = require('../terraswap/factoryTvl') + +const factory = { + terra2: "terra1f4cr4sr5eulp3f2us8unu6qv8a5rhjltqsg7ujjx6f2mrlqh923sljwhn3", + juno: "juno14m9rd2trjytvxvu4ldmqvru50ffxsafs8kequmfky7jh97uyqrxqs5xrnx", + injective: "inj1x22q8lfhz7qcvtzs0dakhgx2th64l79kfye5lk", + comdex: "comdex1gurgpv8savnfw66lckwzn4zk7fp394lpe667dhu7aw48u40lj6jswv4mft", + chihuahua: "chihuahua1s8ehad3r9wxyk08ls2nmz8mqh4vlfmaxd2nw0crxwh04t4l5je4s8ljv0j", +} + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + methodology: "Liquidity on the DEX", + hallmarks: [ + [1651881600, "UST depeg"], + ] +} + + +Object.keys(factory).forEach(chain => { + const contract = factory[chain] + module.exports[chain] = { tvl: getFactoryTvl(contract) } +}) \ No newline at end of file diff --git a/projects/whitewhale/index.js b/projects/whitewhale/index.js index 54e13d7ce9..8fce410596 100644 --- a/projects/whitewhale/index.js +++ b/projects/whitewhale/index.js @@ -1,35 +1,11 @@ -const { fetchURL } = require('../helper/utils') - -const vaults = [ - "https://lcd.terra.dev/wasm/contracts/terra1ec3r2esp9cqekqqvn0wd6nwrjslnwxm7fh8egy/store?query_msg=%7B%22pool_state%22:%7B%7D%7D" -] +const { sumTokens } = require('../helper/chain/cosmos') async function tvl() { - let pool_state = {} - let tvl = {} - await Promise.all(vaults.map(async vault => { - pool_state = await fetchURL(vault) - tvl = Number(pool_state.data.result.total_value_in_ust) / 1e6 - })) - return { - terrausd: tvl - } -} - -async function staking() { - const staked = await fetchURL( - `https://lcd.terra.dev/wasm/contracts/terra12897djskt9rge8dtmm86w654g7kzckkd698608/store?query_msg=%7B%22balance%22:%7B%22address%22:%22terra1xrk6v2tfjrhjz2dsfecj40ps7ayanjx970gy0j%22%7D%7D` - ) - return { - "white-whale": Number(staked.data.result.balance) / 1e6 - } + return sumTokens({chain: 'terra', owner: 'terra1ec3r2esp9cqekqqvn0wd6nwrjslnwxm7fh8egy'}) } module.exports = { - timetravel: false, - misrepresentedTokens: true, terra: { - staking, tvl }, hallmarks:[ diff --git a/projects/wingriders/index.js b/projects/wingriders/index.js index dcb1267fe2..6474f94049 100644 --- a/projects/wingriders/index.js +++ b/projects/wingriders/index.js @@ -4,22 +4,33 @@ const headers = { "Accept-Encoding": "gzip, deflate, br", }; -async function tvl() { +/** @returns {Promise<{tvl: string, staking: string}>} */ +async function getTvlBreakdown() { const res = await axios.post( 'https://api.mainnet.wingriders.com/graphql', { - query: '{tvl}' + query: '{tvlBreakdown {tvl, staking}}' }, { headers } ) - const tvl = Number(res.data.data.tvl) - return {cardano: tvl} + return res.data.data.tvlBreakdown +} + +async function tvl() { + const tvlBreakdown = await getTvlBreakdown() + return {cardano: Number(tvlBreakdown.tvl)} +} + +async function staking() { + const tvlBreakdown = await getTvlBreakdown() + return {cardano: Number(tvlBreakdown.staking)} } module.exports = { timetravel: false, cardano: { tvl, + staking, }, hallmarks: [ [1659312000,"Nomad Bridge Hack"] diff --git a/projects/winr-protocol/index.js b/projects/winr-protocol/index.js new file mode 100644 index 0000000000..f743a7e34c --- /dev/null +++ b/projects/winr-protocol/index.js @@ -0,0 +1,9 @@ +const { gmxExports } = require('../helper/gmx') +const WINR_VAULT_CONTRACT = "0x8c50528F4624551Aad1e7A265d6242C3b06c9Fca"; + +module.exports = { + start: 67057671, + arbitrum: { + tvl: gmxExports({ vault: WINR_VAULT_CONTRACT }), + }, +}; diff --git a/projects/wombat-exchange/config.js b/projects/wombat-exchange/config.js index 45e02482ea..e11f0b7b3f 100644 --- a/projects/wombat-exchange/config.js +++ b/projects/wombat-exchange/config.js @@ -13,14 +13,19 @@ module.exports = { BNBx: "0x8df1126de13bcfef999556899F469d64021adBae", stkBNB: "0xB0219A90EF6A24a237bC038f7B7a6eAc5e01edB0", iUSD: "0x277E777F7687239B092c8845D4d2cd083a33C903", - CUSD: "0x4dFa92842d05a790252A7f374323b9C86D7b7E12", axlUSDC: "0x8ad47d7ab304272322513eE63665906b64a49dA2", USDD: "0x05f727876d7C123B9Bb41507251E2Afd81EAD09A", BOB: "0xeA6cDd9e8819BbF7f8791E7D084d9F0a6Afa7892", frxETH: "0x2Ea772346486972E7690219c190dAdDa40Ac5dA4", - overnight: "0x9498563e47D7CFdFa22B818bb8112781036c201C", // USD+ pool + stableGuildPool: "0x9498563e47D7CFdFa22B818bb8112781036c201C", // USD+ pool mim: "0xb8b1b72a9b9ba90e2539348fec1ad6b265f9f684", ankrBNB: "0x6f1c689235580341562cdc3304e923cc8fad5bfa", + bnby: "0xbed9B758A681d73a95Ab4c01309C63aa16297b80", + smartHAY: "0xa61dccC6c6E34C8Fbf14527386cA35589e9b8C27", + wBETH: "0x8b892b6Ea1d0e5B29b719d6Bd6eb9354f1cDE060", + ankrETH: "0x1b507b97c89eDE3E40d1b2Ed92972197c6276D35", + rbnb: "0x0592083B285aa75B9c8BaD2485C6cCCF93cCC348", + SnBNB: "0xF1e604e9A31c3b575f91CF008445B7ce06BF3fef", }, }, arbitrum: { @@ -36,6 +41,11 @@ module.exports = { frax: "0x4a8686df475D4c44324210FFA3Fc1DEA705296e0", // FRAX-MAI-USD+ bob: "0x917caF2b4D6040a9D67A5F8CEfC4F89d1b214c1A", mim: "0x29eeB257a2A6eCDE2984aCeDF80A1B687f18eC91", + jUSDC: "0xc7a6bA5F28993BaDb566007bD2E0CB253c431974", + ankrETH: "0xB9bdfE449Da096256Fe7954Ef61A18eE195Db77B", + wstETH: "0xe14302040c0A1eb6fB5A4A79EfA46D60029358d9", + pendle: "0xe7159f15e7b1d6045506B228A1ed2136dcc56F48", + fUSD: "0x956454C7BE9318863297309183C79b793D370401", }, }, hallmarks: [ diff --git a/projects/wombat-exchange/index.js b/projects/wombat-exchange/index.js index e959a2d88c..ab4f03a3f8 100644 --- a/projects/wombat-exchange/index.js +++ b/projects/wombat-exchange/index.js @@ -8,10 +8,7 @@ Object.keys(config).forEach((chain) => { tvl: async (_, _b, { [chain]: block }, { api }) => { const pools = Object.values(arg["pools"]); - let allUnderlying = await api.multiCall({ - abi: "address[]:getTokens", - calls: pools, - }); + let allUnderlying = await api.multiCall({ abi: "address[]:getTokens", calls: pools, }); const tokens = []; const calls = []; @@ -21,16 +18,10 @@ Object.keys(config).forEach((chain) => { calls.push({ target: v, params: t }); }); }); - const wTokens = await api.multiCall({ - abi: "function addressOfAsset(address) view returns (address)", - calls, - }); - return sumTokens2({ - api, - tokensAndOwners: tokens.map((v, i) => [v, wTokens[i]]), - }); + const wTokens = await api.multiCall({ abi: "function addressOfAsset(address) view returns (address)", calls, }); + return sumTokens2({ api, tokensAndOwners2: [tokens, wTokens], }); }, - staking: staking(arg["veWom"], arg["wom"], chain), + staking: staking(arg["veWom"], arg["wom"],), }; }); diff --git a/projects/wonderland/api.js b/projects/wonderland/api.js new file mode 100644 index 0000000000..606277d156 --- /dev/null +++ b/projects/wonderland/api.js @@ -0,0 +1,4 @@ +const index = require('./index') +const { ohmStaking } = require('../helper/treasury') + +module.exports = ohmStaking(index) \ No newline at end of file diff --git a/projects/wonderland/index.js b/projects/wonderland/index.js index b703b2bbec..f988c0317c 100644 --- a/projects/wonderland/index.js +++ b/projects/wonderland/index.js @@ -1,6 +1,6 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { stakings } = require("../helper/staking"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); -const sdk = require("@defillama/sdk"); const TimeStaking = "0x4456B87Af11e87E329AB7d7C7A246ed1aC2168B9"; const RevenueSharingFarm = "0xC172c84587bEa6d593269bFE08632bf2Da2Bc0f6"; @@ -13,15 +13,14 @@ const Treasury_Avax = "0x88bbE6dE858B179841c8f49a56b99fb0522a263a"; async function avaxTvl(timestamp, ethBlock, chainBlocks) { const balances = {}; const transform = (addr) => - addr.toLowerCase() === "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7" - ? "0xdac17f958d2ee523a2206206994597c13d831ec7" - : `avax:${addr}`; + addr.toLowerCase() === ADDRESSES.avax.USDt + ? [ADDRESSES.ethereum.USDT]: `avax:${addr}`; await sumTokensAndLPsSharedOwners( balances, [ - ["0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", false], // USDT - ["0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664", false], // USDC.e + [ADDRESSES.avax.USDt, false], + [ADDRESSES.avax.USDC_e, false], ["0x39fC9e94Caeacb435842FADeDeCB783589F50f5f", false], // KNC ["0x63682bDC5f875e9bF69E201550658492C9763F89", false], // BSGG ["0x0da67235dd5787d67955420c84ca1cecd4e5bb3b", false], //wMEMO @@ -44,27 +43,27 @@ async function ethTvl(timestamp, ethBlock, chainBlocks) { await sumTokensAndLPsSharedOwners( balances, [ - ["0x5f98805A4E8be255a32880FDeC7F6728C6568bA0", false], // LUSD + [ADDRESSES.ethereum.LUSD, false], ["0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0", false], // FRAX - ["0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", false], // CVX - ["0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7", false], // cvxCRV + [ADDRESSES.ethereum.CVX, false], + [ADDRESSES.ethereum.cvxCRV, false], ["0x55C08ca52497e2f1534B59E2917BF524D4765257", false], // UwU ["0x69570f3E84f51Ea70b7B68055c8d667e77735a25", false], // BSGG ["0x04906695D6D12CF5459975d7C3C03356E4Ccd460", false], // sOHM ["0x29127fE04ffa4c32AcAC0fFe17280ABD74eAC313", false], // sifu - ["0x0000000000085d4780B73119b644AE5ecd22b376", false], // TUSD + [ADDRESSES.ethereum.TUSD, false], ["0x66761Fa41377003622aEE3c7675Fc7b5c1C2FaC5", false], // CPOOL ["0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF", false], // ALCX ["0xdB25f211AB05b1c97D595516F45794528a807ad8", false], // EURS - ["0x6810e776880C02933D47DB1b9fc05908e5386b96", false], // GNO + [ADDRESSES.ethereum.GNO, false], // GNO ["0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68", false], // INV ["0xE80C0cd204D654CEbe8dd64A4857cAb6Be8345a3", false], // JPEG ["0x0C10bF8FcB7Bf5412187A595ab97a3609160b5c6", false], // USDD ["0xAf5191B0De278C7286d6C7CC6ab6BB8A73bA2Cd6", false], // STG ["0x6243d8CEA23066d098a15582d81a598b4e8391F4", false], // FLX - ["0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", false], // SNX - ["0xdAC17F958D2ee523a2206206994597C13D831ec7", false], // USDT - ["0x6B175474E89094C44Da98b954EedeAC495271d0F", false], // DAI + [ADDRESSES.ethereum.SNX, false], + [ADDRESSES.ethereum.USDT, false], + [ADDRESSES.ethereum.DAI, false], ], [Treasury_Eth], ethBlock, diff --git a/projects/wonderly/index.js b/projects/wonderly/index.js index 8764e4ed8a..7e4c030d20 100644 --- a/projects/wonderly/index.js +++ b/projects/wonderly/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const Abis = require("./abi.json"); const sdk = require("@defillama/sdk"); const { unwrapUniswapLPs } = require("../helper/unwrapLPs"); @@ -5,7 +6,7 @@ const { staking } = require("../helper/staking"); const Contracts = { fantom: { - wftm: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + wftm: ADDRESSES.fantom.WFTM, gfx: "0xB6d8Ff34968e0712c56DE561b2f9Debd526a348c", bank: "0xeE5b6F97faaEB7f56Df1B433CC46d69e5659dF0B", multiFeeDistribution: "0x29f3e86280014d703BCaE532b6751fFa9Fca0df9", @@ -16,7 +17,7 @@ const Contracts = { ], }, arbitrum: { - weth: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", + weth: ADDRESSES.arbitrum.WETH, afx: "0x42972EdecD94BDD19A622A6a419bDDed2de56E08", bank: "0xd73509D1B57bD99121AB30040227d51d295C159e", multiFeeDistribution: "0x564DdF4206994FA0Ad0d11947095cA3dfcb905e2", @@ -157,3 +158,15 @@ module.exports = { staking: calcArbitrumStakingTvl } }; + +module.exports = { + fantom: { + tvl: () => ({}), + }, + arbitrum: { + tvl: () => ({}), + }, + hallmarks: [ + [Math.floor(new Date('2023-02-15')/1e3), 'Project rugged'], + ], +} \ No newline at end of file diff --git a/projects/woofi.js b/projects/woofi.js index 427fc21f96..eaecca27c0 100644 --- a/projects/woofi.js +++ b/projects/woofi.js @@ -1,47 +1,64 @@ -const { staking } = require('./helper/staking') +const ADDRESSES = require('./helper/coreAssets.json') +const { staking, stakings } = require('./helper/staking') const wooPPConfig = { fantom: [ - '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', // WFTM + ADDRESSES.fantom.WFTM, // WFTM '0x74b23882a30290451A17c44f4F05243b6b58C76d', // ETH '0x321162Cd933E2Be498Cd2267a90534A804051b11', // BTC '0x6626c47c00F1D87902fc13EECfaC3ed06D5E8D8a', // WOO - '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', // USDC + ADDRESSES.fantom.USDC, // USDC + ADDRESSES.fantom.fUSDT, ], bsc: [ - '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', // WBNB - '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', // ETH - '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', // BTC + ADDRESSES.bsc.WBNB, // WBNB + ADDRESSES.bsc.ETH, // ETH + ADDRESSES.bsc.BTCB, // BTC '0x4691937a7508860F876c9c0a2a617E7d9E945D4B', // WOO - '0x55d398326f99059fF775485246999027B3197955', // USDT - '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', // BUSD + ADDRESSES.bsc.USDT, // USDT + ADDRESSES.bsc.BUSD, // BUSD ], avax: [ - '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', // WAVAX - '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', // WETH.e - '0x152b9d0FdC40C096757F570A51E494bd4b943E50', // BTC.b + ADDRESSES.avax.WAVAX, // WAVAX + ADDRESSES.avax.WETH_e, // WETH.e + ADDRESSES.avax.BTC_b, // BTC.b '0xaBC9547B534519fF73921b1FBA6E672b5f58D083', // WOO.e - '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC + ADDRESSES.avax.USDC, // USDC + ADDRESSES.avax.USDt, ], polygon: [ - '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC - '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', // WETH - '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', // WBTC + ADDRESSES.polygon.WMATIC_2, // WMATIC + ADDRESSES.polygon.WETH_1, // WETH + ADDRESSES.polygon.WBTC, // WBTC '0x1B815d120B3eF02039Ee11dC2d33DE7aA4a8C603', // WOO - '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC + ADDRESSES.polygon.USDC, // USDC + ADDRESSES.polygon.USDT, ], arbitrum: [ - '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', // WETH - '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', // WBTC + ADDRESSES.arbitrum.WETH, // WETH + ADDRESSES.arbitrum.WBTC, // WBTC '0xcAFcD85D8ca7Ad1e1C6F82F651fA15E33AEfD07b', // WOO '0x912CE59144191C1204E64559FE8253a0e49E6548', // ARB - '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', // USDC + ADDRESSES.arbitrum.USDC, // USDC + '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // native USDC + ADDRESSES.arbitrum.USDT, ], optimism: [ - '0x4200000000000000000000000000000000000006', // WETH + ADDRESSES.tombchain.FTM, // WETH '0x68f180fcCe6836688e9084f035309E29Bf0A2095', // WBTC - '0x4200000000000000000000000000000000000042', // OP - '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', // USDC + ADDRESSES.optimism.OP, // OP + ADDRESSES.optimism.USDC, // USDC + ADDRESSES.optimism.USDT, + '0x871f2F2ff935FD1eD867842FF2a7bfD051A5E527', // WOO + ], + ethereum: [], + era: [ + ADDRESSES.era.WETH, // WETH + ADDRESSES.era.USDC, // USDC + ], + polygon_zkevm: [ + ADDRESSES.polygon_zkevm.WETH, + ADDRESSES.polygon_zkevm.USDC, ], } @@ -50,43 +67,82 @@ const chainConfig = { wooPPContract: '0x286ab107c5E9083dBed35A2B5fb0242538F4f9bf', woo: '0x6626c47c00f1d87902fc13eecfac3ed06d5e8d8a', stakingContract: '0x2Fe5E5D341cFFa606a5d9DA1B6B646a381B0f7ec', + stakingContractV2: '0x1416E1378682b5Ca53F76656549f7570ad0703d9', }, bsc: { wooPPContract: '0x59dE3B49314Bf5067719364A2Cb43e8525ab93FA', woo: '0x4691937a7508860f876c9c0a2a617e7d9e945d4b', stakingContract: '0x2AEab1a338bCB1758f71BD5aF40637cEE2085076', + stakingContractV2: '0xba91ffD8a2B9F68231eCA6aF51623B3433A89b13', }, avax: { wooPPContract: '0x3b3E4b4741e91aF52d0e9ad8660573E951c88524', woo: '0xabc9547b534519ff73921b1fba6e672b5f58d083', stakingContract: '0xcd1B9810872aeC66d450c761E93638FB9FE09DB0', + stakingContractV2: '0x3Bd96847C40De8b0F20dA32568BD15462C1386E3', }, polygon: { wooPPContract: '0x7081A38158BD050Ae4a86e38E0225Bc281887d7E', woo: '0x1b815d120b3ef02039ee11dc2d33de7aa4a8c603', stakingContract: '0x9BCf8b0B62F220f3900e2dc42dEB85C3f79b405B', + stakingContractV2: '0xba91ffD8a2B9F68231eCA6aF51623B3433A89b13', }, arbitrum: { wooPPContract: '0xeFF23B4bE1091b53205E35f3AfCD9C7182bf3062', woo: '0xcafcd85d8ca7ad1e1c6f82f651fa15e33aefd07b', stakingContract: '0x9321785D257b3f0eF7Ff75436a87141C683DC99d', + stakingContractV2: '0x2CFa72E7f58dc82B990529450Ffa83791db7d8e2', }, optimism: { wooPPContract: '0xd1778F9DF3eee5473A9640f13682e3846f61fEbC', woo: '0x871f2f2ff935fd1ed867842ff2a7bfd051a5e527', - stakingContract: '', + stakingContract: null, + stakingContractV2: '0xba91ffD8a2B9F68231eCA6aF51623B3433A89b13', + }, + ethereum: { + wooPPContract: null, + woo: '0x4691937a7508860F876c9c0a2a617E7d9E945D4B', + stakingContract: null, + stakingContractV2: '0xba91ffD8a2B9F68231eCA6aF51623B3433A89b13', + }, + era: { + wooPPContract: '0x42ED123EB5266A5B8E2B54B2C76180CCF5e72FEe', + woo: null, + stakingContract: null, + stakingContractV2: null, + }, + polygon_zkevm: { + wooPPContract: '0xF5d215d9C84778F85746D15762DaF39B9E83a2d6', + woo: null, + stakingContract: null, + stakingContractV2: null, }, } Object.keys(chainConfig).forEach(chain => { const wooPPTokens = wooPPConfig[chain] - const { wooPPContract, woo, stakingContract } = chainConfig[chain] + const { wooPPContract, woo, stakingContract, stakingContractV2 } = chainConfig[chain] + + var tvl = 0 + if (wooPPContract != null) { + tvl = staking(wooPPContract, wooPPTokens, chain) + } + + var contracts = [] + if (stakingContract != null) { + contracts.push(stakingContract) + } + if (stakingContractV2 != null) { + contracts.push(stakingContractV2) + } + var stakingAmount = 0 - if (chain != 'optimism') { - stakingAmount = staking(stakingContract, woo, chain) + if (woo != null) { + stakingAmount = stakings(contracts, woo, chain) } + module.exports[chain] = { staking: stakingAmount, - tvl: staking(wooPPContract, wooPPTokens, chain), + tvl: tvl, } }) diff --git a/projects/wormhole.js b/projects/wormhole.js index dec8e7aee4..803081be60 100644 --- a/projects/wormhole.js +++ b/projects/wormhole.js @@ -1,6 +1,6 @@ const { get } = require('./helper/http') const BigNumber = require("bignumber.js"); -const url = 'https://europe-west3-wormhole-315720.cloudfunctions.net/mainnet-notionaltvl' +const url = 'https://europe-west3-wormhole-message-db-mainnet.cloudfunctions.net/tvl' let _response function fetch(chainId) { @@ -25,9 +25,6 @@ module.exports = { ethereum: { fetch: fetch("2") }, - aptos: { - fetch: fetch("22") - }, terra: { fetch: fetch("3") }, @@ -56,7 +53,7 @@ module.exports = { fetch: fetch("11") }, acala: { - fetch: fetch("12") + fetch: fetch("12") }, klaytn: { fetch: fetch("13") @@ -73,9 +70,30 @@ module.exports = { terra2: { fetch: fetch("18") }, + injective: { + fetch: fetch("19") + }, + sui: { + fetch: fetch("21") + }, + aptos: { + fetch: fetch("22") + }, + arbitrum: { + fetch: fetch("23") + }, + optimism: { + fetch: fetch("24") + }, + xpla: { + fetch: fetch("28") + }, + base: { + fetch: fetch("30") + }, fetch: fetch("*"), - hallmarks:[ + hallmarks: [ [1652008803, "UST depeg"], - [Math.floor(new Date('2022-02-02')/1e3), 'Hacked: Signature Exploit'], + [Math.floor(new Date('2022-02-02') / 1e3), 'Hacked: Signature Exploit'], ], } diff --git a/projects/wowswap/constants.js b/projects/wowswap/constants.js index 84db9ded23..8e29e0ff8a 100644 --- a/projects/wowswap/constants.js +++ b/projects/wowswap/constants.js @@ -1,4 +1,5 @@ -const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" +const ADDRESSES = require('../helper/coreAssets.json') +const ADDRESS_ZERO = ADDRESSES.null const chains = { "ethereum": { @@ -25,7 +26,7 @@ const chains = { "heco": { reserveFactory: "0x518C21A2Edc710b0c627DBbCb0Af34531Dd1724a", pairFactory: "0x86fEA7A7c7f2503cdDb4Ad0E4e7977E8bDcb1872", - WOW: "0xeFAeeE334F0Fd1712f9a8cc375f427D9Cdd40d73", + WOW: ADDRESSES.telos.USDT, xWOW: "0x72c0A253C84ADa1b1379b2A66ce51862d9bf159B", WOWLP: "0x5E5f16A910B7b44f4F8090798BaADEfBC1388253" }, @@ -55,7 +56,7 @@ const chains = { pairFactory: "0xA53230B6B6e7f4FDD0f65Af954F891A77351baBF", WOW: "0x527805F51C448155DfBDee04bD950036A52a21f0", xWOW: "0x3B642654c6a2C1ECe1d33cBF0EDBfDD970AEC35f", - WOWLP: "0x0000000000000000000000000000000000000000" + WOWLP: ADDRESSES.null } }; diff --git a/projects/wowswap/protocol.js b/projects/wowswap/protocol.js index 7c4eb50ee4..ad1004d21d 100644 --- a/projects/wowswap/protocol.js +++ b/projects/wowswap/protocol.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const BigNumber = require("bignumber.js"); @@ -46,7 +47,7 @@ async function getLiquidity(data, chain, block) { } async function getStakedLiquidity(chain, block) { - if (chains[chain].WOWLP === "0x0000000000000000000000000000000000000000") { + if (chains[chain].WOWLP === ADDRESSES.null) { const stakedLiquidity = await getLiquidity( { [chains[chain].WOW]: chains[chain].xWOW }, chain, diff --git a/projects/wrappedBNB.js b/projects/wrappedBNB.js index df834cabe7..f7b9e4c283 100644 --- a/projects/wrappedBNB.js +++ b/projects/wrappedBNB.js @@ -1,8 +1,11 @@ -const { get } = require('./helper/http') +const { queryV1Beta1 } = require('./helper/chain/cosmos'); +const { transformBalances } = require('./helper/portedTokens') + +const chain = 'kava' async function tvl() { - const data = await get('https://api2.kava.io/kava/bep3/v1beta1/assetsupply/bnb') // https://swagger.kava.io/#/BEP3/BEP3AssetSupply - return { 'binancecoin': data.asset_supply.current_supply.amount / 1e8 }; + const data = await queryV1Beta1({ chain, url: '/bep3/v1beta1/assetsupply/bnb'}) // https://swagger.kava.io/#/BEP3/BEP3AssetSupply + return transformBalances(chain, { bnb: data.asset_supply.current_supply.amount}) } module.exports = { diff --git a/projects/xWeowns/index.js b/projects/xWeowns/index.js index 12e9e08039..a1a4736db2 100644 --- a/projects/xWeowns/index.js +++ b/projects/xWeowns/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const contracts = { "xWeowns": "0xaBA0Bb586335B938a7a817A900017D891268d32c", "USDT": "0x32D2b9bBCf25525b8D7E92CBAB14Ca1a5f347B14", - "USDTethereum": "0xdac17f958d2ee523a2206206994597c13d831ec7" + "USDTethereum": ADDRESSES.ethereum.USDT }; async function tvl(timestamp, block, chainBlocks) { @@ -20,8 +21,7 @@ async function tvl(timestamp, block, chainBlocks) { } module.exports = { - doublecounted: false, lachain: { - tvl + tvl: () => 0, } }; \ No newline at end of file diff --git a/projects/xWinFinance/Helper.js b/projects/xWinFinance/Helper.js new file mode 100644 index 0000000000..4636c16121 --- /dev/null +++ b/projects/xWinFinance/Helper.js @@ -0,0 +1,72 @@ +const token = { + XWIN: '0xd88ca08d8eec1e9e09562213ae83a7853ebb5d28' +}; + +const Strategies = { + xSCA: "0x0a652784DF3f8Abde85dAEeee77D1EA97f5c5B24", + xDCA: "0x482ae949E4a70953fCa090717b68359b73b8602a", + xWinBBMA: "0x5EFaaBc34a3ba66f1fD02F056AC457AeBaF57D55", + xWinIRT: "0x5A8a66DF53DF88844c60829967b88d00eD208E08", + xCAKE_V: "0x1d2430bBfe86432E36A7C7286E99f78546F23De9", + xETH_V: "0x0C34Aa4e36983aB6ec11bC557A3B8cF79A7a9Ae7", + xUSDC_V: "0xcBca44d60c5A2b3c56ACfB51aFC66Ea04b8a2742", + xBUSD_V: "0xf4979C043df6f7d5dA929DeAB11b220A82886395", + xBTC_V: "0x7A0dEc70473602Cd0EF3Dc3d909b6Dc3FA42116C", + xUSDT_V: "0x8B7fcACB99124F009c8470FDa6f5fcF60277BDB2", + xADA_V: "0x605926F795FD9B4c3A8B1A2db33cBE01c66bA83f", + xBTC_O: "0x69764856e82180150f5366be610E40c2f812d7D6", + xUSDT_O: "0xCEbd365e4BFd8589Fd6BDe21898DB35a8095f956", +}; + +const PublicVault = { + fDEFI: "0x61d5722290F8755b2f31D260064658D6Ad837F37", + fMIV: "0x0A0817454710102F2bcB2215D616cBe3aFf495e5", + fxDollar: "0xFa4d4B4243dDA1F5f4d09269f61D57d02470635C", + fBTCETH: "0x284b4aDD0C9669f635EA64418C216821c45D0B48", + fvUSDT: "0xE949d266E8740470a15DFB1F40A795b5a2b63f02", + fCombo: "0x4d4F948C8E9Ec3d1cE1B80d598f57F8c75c64e4a", + fTACombo: "0xaaFF5eFe1376474a520FFe9129d8Aa8d7422AAbe", +}; + +const PrivateVault = { + Vault1: "0xa74c70d0bf531171360e603e6441faeb71b117d1", + Vault2: "0x834672c33291fd6932c1786e0c5fd4a3b921dc00", + Vault3: "0xc1908cf72426c0d6c48a4930bef681bb6621c106", + Vault4: "0x774c1ba3c31af51e4596fcaf9f90eaf167aee34c", + Vault5: "0x69f69df395c05202ec935999d072fa390defc31f", + Vault6: "0xb3c713a845378484f66e3f2ad608e3438675ff7c", + Vault7: "0xc5782a89ad76fe0b68cd67dcc4b294fcb5307415", + Vault8: "0xbddd3ff6f5902171faebb34e9ee084341c94a1e6", + Vault9: "0xe6eff8492c6832c1da6f76d3cc3288951021a7b5", + Vault10: "0x42289b0356470bdc0a93d6710f0bcf8bc0868f96", + Vault11: "0x90aadea5b2f10c4c53139fe4cf8005ffe5ed8d47", + Vault12: "0xbff5506a0c604cbf231646838f2f29118210e236", + Vault13: "0xeb23a52115e5ac9ed9085a1c0b25ec29529eef3b", +}; + +const farms = { + MasterChefAddress: "0xD09774e3d5Dc02fa969896c53D3Cbb5bC8900A60", + BuddyChefAddress: "0x4B87a60fC5a94e5ac886867977e29c9711C2E903", + LockStakingAddress: "0xa4AE0DCC89Af9855946C0b2ad4A10FF27125a9Fc", + PriceMasterAddr: "0xB1233713FeA0984fff84c7456d2cCed43e5e48E2", +}; + +const abi = { + getVaultValues: + "function getVaultValuesInUSD() public view returns (uint vaultValue)", + poolLength: "function poolLength() view returns (uint)", + poolInfoMaster: + "function poolInfo(uint256) view returns (address, uint256, uint256, uint256, uint256, uint256)", + balance: "function balanceOf(address) view returns (uint256)", + decimals: "function decimals() view returns (uint8)", + getPrice: "function getPrice(address, address) view returns (uint rate)", +}; + +module.exports = { + Strategies, + PublicVault, + PrivateVault, + farms, + abi, + token, +}; diff --git a/projects/xWinFinance/index.js b/projects/xWinFinance/index.js new file mode 100644 index 0000000000..6ac76cf048 --- /dev/null +++ b/projects/xWinFinance/index.js @@ -0,0 +1,27 @@ +const { sumTokens2, sumTokensExport, } = require('../helper/unwrapLPs') +const Helper = require("./Helper.js"); +const { farms: { MasterChefAddress, LockStakingAddress }, abi, token: { XWIN } } = require('./Helper.js'); + +async function tvl(_, _1, _2, { api }) { + const vaults = [ + ...Object.values(Helper.Strategies), + ...Object.values(Helper.PublicVault), + ...Object.values(Helper.PrivateVault), + ] + const bals = await api.multiCall({ abi: 'uint256:getVaultValues', calls: vaults}) + const tokens = await api.multiCall({ abi: 'address:baseToken', calls: vaults}) + api.addTokens(tokens, bals) +} + +async function pool2(_, _1, _2, { api }) { + const data = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfoMaster, target: MasterChefAddress, }) + return sumTokens2({ api, owner: MasterChefAddress, tokens: data.map(i => i[0]), resolveLP: true, blacklistedTokens: [XWIN, LockStakingAddress] }) +} + +module.exports = { + bsc: { + tvl, + pool2, + staking: sumTokensExport({ owners: [MasterChefAddress, LockStakingAddress], tokens: [XWIN]}) + }, +}; diff --git a/projects/xbank/index.js b/projects/xbank/index.js new file mode 100644 index 0000000000..c9e3f5ef78 --- /dev/null +++ b/projects/xbank/index.js @@ -0,0 +1,8 @@ +const { compoundExports2 } = require('../helper/compound'); + +module.exports = { + era: compoundExports2({ + comptroller: '0xC6d329a2C3f8cFDECAe7FeEc387fa633C6520991', + cether: '0xE4622A57Ab8F4168b80015BBA28fA70fb64fa246', + }) +}; \ No newline at end of file diff --git a/projects/xcadnetwork/index.js b/projects/xcadnetwork/index.js deleted file mode 100644 index c10c924fff..0000000000 --- a/projects/xcadnetwork/index.js +++ /dev/null @@ -1,51 +0,0 @@ -const { - getZilliqaBalance, - getBalances, -} = require('../helper/chain/zilliqa') - -// taken from https://swap.xcadnetwork.com/_next/data/E6YkkwWJMYjzQhGDTm38j/pool-overview.json -const TOKENS = [ - "0x153feaddc48871108e286de3304b9597c817b456", // XCAD - "0x818ca2e217e060ad17b7bd0124a483a1f66930a9", // zUSDT - "0x201C44B426D85fB2c382563483140825Fd81b9b5", // zOPUL - "0x31bFa2054B7199F936733f9054DBCE259a3c335a", // Lunr - "0x9945a0da3dc74e364da4ea96946c99336013eeb5", // Heroes Of Lowhelm - "0xbf79e16872fad92c16810ddd2a7b9b6858c7b756", // CARBON Token - "0x3a683fdc022b26d755c70e9ed7cfcc446658018b", // PackagePortal Token - "0x91228A48AEA4E4071B9C6444Eb08B021399CfF7c", // Unifees Token - "0xa3eAFd5021F6B9c36fD02Ed58aa1d015F2238791", // ZILStream - "0xa845C1034CD077bD8D32be0447239c7E4be6cb21", // Governance ZIL - "0xb393C898b3d261C362a4987CaE5a833232AA666E", // Score - "0x173Ca6770Aa56EB00511Dac8e6E13B3D7f16a5a5", // XSGD - "0xaCb721d989c095c64A24d16DfD23b08D738e2552", // REDChillies - "0x75fA7D8BA6BEd4a68774c758A5e43Cfb6633D9d6", // zWBTC - "0x2cA315F4329654614d1E8321f9C252921192c5f2", // zETH - "0x4268C34dA6Ad41a4cDeAa25cdEF6531Ed0c9a1A2", // BLOX - "0x2fc7167c3Baff89E2805Aef72636ccD98eE6Bbb2", // DeMons - "0x32339fa037f7ae1DfFF25e13c6451a80289D61F4", // Brokoli - "0xC6Bb661eDA683BdC792b3e456A206a92cc3cB92e", // DUCKDUCK - "0x9bd504b1445fdb8f4a643453ec1459bb9a2f988a", // XIDR - "0x54aE64e2092749fb8d25470ffc1d4D6A19c6f2Ab", // Okipad - "0x083196549637fAf95C91EcCD157E60430e69E1A7" // Sparda Wallet -] - -const DEX_CONTRACT_ADDRESS = '0x1fb1a4fd7ba94b1617641d6022ba48cafa77eef0' - -async function tvl() { - const balances = {} - const allContracts = [DEX_CONTRACT_ADDRESS, - // ...SUB_CONTRACT - ] - balances['zilliqa'] = await getZilliqaBalance(DEX_CONTRACT_ADDRESS) - await getBalances(TOKENS, allContracts, balances) - return balances -} - -module.exports = { - zilliqa: { - tvl, - }, - timetravel: false, - misrepresentedTokens: true, - methodology: 'Summed up all the tokens deposited in their dex contract and those controlled by their dex' -} \ No newline at end of file diff --git a/projects/xdai/index.js b/projects/xdai/index.js index 73eaefbc20..a3cb007350 100644 --- a/projects/xdai/index.js +++ b/projects/xdai/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const { covalentGetTokens } = require('../helper/http'); const tokenAddresses = [ - '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359', // SAI - '0x6b175474e89094c44da98b954eedeac495271d0f', // DAI + ADDRESSES.ethereum.SAI, + ADDRESSES.ethereum.DAI, //'0x06af07097c9eeb7fd685c692751d5C66db49c215' // CHAI "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", // cDAI ]; diff --git a/projects/xdao.js b/projects/xdao.js deleted file mode 100644 index 8f62674752..0000000000 --- a/projects/xdao.js +++ /dev/null @@ -1,69 +0,0 @@ -const sdk = require("@defillama/sdk"); -const { get } = require('./helper/http') -const { PromisePool } = require('@supercharge/promise-pool') -const { sumTokens2, } = require('./helper/unwrapLPs') -const { getParamCalls, log } = require('./helper/utils') -const { covalentGetTokens } = require('./helper/http') - - -const factoryAddress = "0x72cc6E4DE47f673062c41C67505188144a0a3D84"; - -const config = { - ethereum: { - chainId: 1, blacklistedTokens: [ - '0x71eeba415a523f5c952cc2f06361d5443545ad28', // XDAO - ] - }, - bsc: { chainId: 56, }, - polygon: { chainId: 137, blacklistedTokens: [ - '0x0b91b07beb67333225a5ba0259d55aee10e3a578', // MNEP - '0x29e3e6ad4eeadf767919099ee23c907946435a70', // TNDR - ] }, - avax: { chainId: 43114, }, - fantom: { chainId: 250, }, - heco: { chainId: 128, }, - astar: { chainId: 592, }, -} - -module.exports = {}; - -Object.keys(config).forEach(chain => { - const { blacklistedTokens } = config[chain] - module.exports[chain] = { - tvl: async (_, _b, { [chain]: block }) => { - const { output: numberOfDaos } = await sdk.api.abi.call({ - target: factoryAddress, - abi: abis.numberOfDaos, - chain, block, - }) - - const calls = getParamCalls(numberOfDaos) - - let { output: daos } = await sdk.api.abi.multiCall({ - target: factoryAddress, - abi: abis.daoAt, calls, chain, block, - }) - if (daos.some(i => !i.success)) throw new Error('Error fetching dao address: ') - - daos = daos.map(i => i.output) - log(chain, numberOfDaos) - const tokensAndOwners = [] - await PromisePool - .withConcurrency(31) - .for(daos) - .process(addDao) - - log(chain, 'fetching balances count', tokensAndOwners.length) - return sumTokens2({ tokensAndOwners, chain, block, blacklistedTokens, }); - - async function addDao(dao) { - (await covalentGetTokens(dao, chain)).forEach(i => tokensAndOwners.push([i, dao])) - } - } - } -}) - -const abis = { - daoAt: "function daoAt(uint256 _i) view returns (address)", - numberOfDaos: "uint256:numberOfDaos", -} diff --git a/projects/xdefi/index.js b/projects/xdefi/index.js index 23b24ed32d..37708c2ce2 100644 --- a/projects/xdefi/index.js +++ b/projects/xdefi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const BigNumber = require('bignumber.js') const { GraphQLClient, gql, request } = require('graphql-request') @@ -61,10 +62,10 @@ async function fetch() { } ` const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; - const wethAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; - const usdt = "0xdac17f958d2ee523a2206206994597c13d831ec7" - const dai = "0x6b175474e89094c44da98b954eedeac495271d0f" - const usdc = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" + const wethAddress = ADDRESSES.ethereum.WETH; + const usdt = ADDRESSES.ethereum.USDT + const dai = ADDRESSES.ethereum.DAI + const usdc = ADDRESSES.ethereum.USDC const { tokenPrices } = await request(xdexApi, tokenPriceQuery, { ids: Object.keys(tokenDataWithLocked).concat(wethAddress) }) diff --git a/projects/xdollar-finance/index.js b/projects/xdollar-finance/index.js index b760b2ec90..ed756af0d4 100644 --- a/projects/xdollar-finance/index.js +++ b/projects/xdollar-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require('bignumber.js') const { transformBalances } = require('../helper/portedTokens.js') @@ -5,23 +6,23 @@ const { staking } = require('../helper/staking') const {getLiquityTvl} = require('../helper/liquity') -const ETH_ADDR = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; -const BTC_ADDR = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; -const USDC_ADDR = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; +const ETH_ADDR = ADDRESSES.ethereum.WETH; +const BTC_ADDR = ADDRESSES.ethereum.WBTC; +const USDC_ADDR = ADDRESSES.ethereum.USDC; const iotexTMs = { - "0x366D48c04B0d315acF27Bd358558e92D4e2E9f3D": "0xa00744882684c3e4747faefd68d283ea44099d03", // WIOTX - "0x7204e2f210865aA1854F33B3532ab2DEb386CB59": "0xa00744882684c3e4747faefd68d283ea44099d03", // WIOTX v2 + "0x366D48c04B0d315acF27Bd358558e92D4e2E9f3D": ADDRESSES.iotex.WIOTX, // WIOTX + "0x7204e2f210865aA1854F33B3532ab2DEb386CB59": ADDRESSES.iotex.WIOTX, // WIOTX v2 } const iotexStableAPs = { - "0x8Af0EE5A98609fEdaf301Af74d3ca4Da614eaD43": "0x84abcb2832be606341a50128aeb1db43aa017449", // BUSD_b - "0xF524F844216069b167d65DCe68B24F3358260BD5": "0x6fbcdc1169b5130c59e72e51ed68a84841c98cd1", // USDT - // "0x206aAF608d1DD7eA9Db4b8460B2Bf8647522f90a": "0xd6070ae98b8069de6b494332d1a1a81b6179d960", // any - "0x84724DAEC2943B1FDd5250ffcF64dfa290606250": "0x84abcb2832be606341a50128aeb1db43aa017449", // BUSD_b v2 - "0xc67cF429b055D664c7Ba06c9F5D17d0692C554fC": "0x6fbcdc1169b5130c59e72e51ed68a84841c98cd1", // USDT v2 + "0x8Af0EE5A98609fEdaf301Af74d3ca4Da614eaD43": ADDRESSES.iotex.BUSD_bsc, // BUSD_b + "0xF524F844216069b167d65DCe68B24F3358260BD5": ADDRESSES.iotex.ioUSDT, // USDT + // "0x206aAF608d1DD7eA9Db4b8460B2Bf8647522f90a": ADDRESSES.iotex.anyXIM, // any + "0x84724DAEC2943B1FDd5250ffcF64dfa290606250": ADDRESSES.iotex.BUSD_bsc, // BUSD_b v2 + "0xc67cF429b055D664c7Ba06c9F5D17d0692C554fC": ADDRESSES.iotex.ioUSDT, // USDT v2 } const ethStables = { - "0xC0eb7718fF1B5fBF11cd314CbC212c167bF341DB": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC + "0xC0eb7718fF1B5fBF11cd314CbC212c167bF341DB": ADDRESSES.ethereum.USDC, // USDC } // node test.js projects/xdollar-finance/index.js @@ -124,15 +125,15 @@ module.exports = { ]) }, arbitrum: { - tvl: getLiquityTvl('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',"0x561d2d58bdad7a723a2cf71e8909a409dc2112ec", "arbitrum"), + tvl: getLiquityTvl(ADDRESSES.arbitrum.WETH,"0x561d2d58bdad7a723a2cf71e8909a409dc2112ec", "arbitrum"), staking: staking('0xc3fbc4056689cfab3f23809aa25004899ff4d75a','0x9eF758aC000a354479e538B8b2f01b917b8e89e7', 'arbitrum'), }, polygon: { - tvl: getLiquityTvl('0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270',"0x68738A47d40C34d890168aB7B612A6f649f395e4", "polygon"), + tvl: getLiquityTvl(ADDRESSES.polygon.WMATIC_2,"0x68738A47d40C34d890168aB7B612A6f649f395e4", "polygon"), staking: staking('0x3509f19581afedeff07c53592bc0ca84e4855475','0x3dc7b06dd0b1f08ef9acbbd2564f8605b4868eea', 'polygon'), }, avax: { - tvl: getLiquityTvl('0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7',"0x561d2d58bdad7a723a2cf71e8909a409dc2112ec", "avax"), + tvl: getLiquityTvl(ADDRESSES.avax.WAVAX,"0x561d2d58bdad7a723a2cf71e8909a409dc2112ec", "avax"), staking: staking('0x68738a47d40c34d890168ab7b612a6f649f395e4','0x9ef758ac000a354479e538b8b2f01b917b8e89e7', 'avax', 'polygon:0x3dc7b06dd0b1f08ef9acbbd2564f8605b4868eea'), }, hallmarks: [ diff --git a/projects/xenophon/index.js b/projects/xenophon/index.js index 006529b128..e7f1c07465 100644 --- a/projects/xenophon/index.js +++ b/projects/xenophon/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const xph = "0x3e29633846E8b857B7f6d7f293F895186804264b"; const treasury = "0x4b69C32450cE85d76aC94215fb81C21B434696eA"; const staking = "0xE90afe3349E42f416406c592f4B7192265085695"; const treasurytokens = [ - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], // BUSD + [ADDRESSES.bsc.BUSD, false], // BUSD ["0x5866d1032b5b6001429Bf2A47B830bDC0DD138EA", true] // XPH-BUSD CAKE LP ] diff --git a/projects/xensa/abi.json b/projects/xensa/abi.json deleted file mode 100644 index 1721b37d74..0000000000 --- a/projects/xensa/abi.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "getReservesList": "address[]:getReservesList", - "getAMMReserveData": "function getReserveData(address asset) view returns (tuple(tuple(uint256 data) configuration, uint128 liquidityIndex, uint128 variableBorrowIndex, uint128 currentLiquidityRate, uint128 currentVariableBorrowRate, uint128 currentStableBorrowRate, uint40 lastUpdateTimestamp, address aTokenAddress, address stableDebtTokenAddress, address variableDebtTokenAddress, address interestRateStrategyAddress, uint8 id))", - "getCurrentTokens": "address[]:getCurrentTokens", - "getReserveData": "function getReserveData(address _reserve) view returns (uint256 totalLiquidity, uint256 availableLiquidity, uint256 totalBorrowsStable, uint256 totalBorrowsVariable, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 utilizationRate, uint256 liquidityIndex, uint256 variableBorrowIndex, address aTokenAddress, uint40 lastUpdateTimestamp)", - "getReserveConfigurationData": "function getReserveConfigurationData(address _reserve) view returns (uint256 ltv, uint256 liquidationThreshold, uint256 liquidationBonus, address interestRateStrategyAddress, bool usageAsCollateralEnabled, bool borrowingEnabled, bool stableBorrowRateEnabled, bool isActive)", - "getReserves": "address[]:getReserves", - "getAddressesProvidersList": "address[]:getAddressesProvidersList", - "getAddress": "function getAddress(bytes32 id) view returns (address)", - "getAllATokens": "function getAllATokens() view returns (tuple(string symbol, address tokenAddress)[])", - "getUnderlying": "address:UNDERLYING_ASSET_ADDRESS", - "getReserveDataV2": "function getReserveData(address asset) view returns (uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 liquidityRate, uint256 variableBorrowRate, uint256 stableBorrowRate, uint256 averageStableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex, uint40 lastUpdateTimestamp)", - "getBPool": "address:bPool" -} \ No newline at end of file diff --git a/projects/xensa/index.js b/projects/xensa/index.js index 0e0c3af865..177f675e99 100644 --- a/projects/xensa/index.js +++ b/projects/xensa/index.js @@ -1,50 +1,21 @@ -const sdk = require("@defillama/sdk"); -const abi = require('./abi.json'); + +const { sumTokens2, nullAddress } = require('../helper/unwrapLPs') const _xensaCoreAddress = '0xd1242313461dd533279f0cac0dbc06ecdb878a79'; -async function tvl(timestamp, _ethBlock, chainBlocks) { - const block = chainBlocks.okexchain +async function tvl(timestamp, _ethBlock, chainBlocks, { api }) { const reserves_xensa = ( - await sdk.api.abi.call({ + await api.call({ target: _xensaCoreAddress, - abi: abi["getReserves"], - block, - chain: 'okexchain' + abi: "address[]:getReserves", }) - ).output.filter(addr=>addr!=="0x1111111111111111111111111111111111111111"); - - const balance_okt = ( - await sdk.api.eth.getBalance({ - target: _xensaCoreAddress, - block, - chain: 'okexchain' - }) - ).output; - - - const balanceOfResults = await sdk.api.abi.multiCall({ - block, - chain: 'okexchain', - calls: reserves_xensa.map((reserve) => ({ - target: reserve, - params: _xensaCoreAddress, - })), - abi: "erc20:balanceOf", - }) - - const balances = {}; - balances['okexchain:0x8f8526dbfd6e38e3d8307702ca8469bae6c56c15'] = balance_okt - const transform = addr=>`okexchain:${addr}`// await transformAddress() - sdk.util.sumMultiBalanceOf(balances, balanceOfResults, true, transform) - - return balances; - + ).filter(addr=>addr!=="0x1111111111111111111111111111111111111111") + return sumTokens2({ api, owner: _xensaCoreAddress, tokens: [...reserves_xensa, nullAddress], resolveLP: true, }) } module.exports = { methodology: 'Using the same methodology applied to other lending platforms, TVL for Xensa consists deposits made to the protocol and borrowed tokens are not counted.', okexchain:{ - tvl, + tvl: () => 0 }, }; diff --git a/projects/xeus/api.js b/projects/xeus/api.js new file mode 100644 index 0000000000..606277d156 --- /dev/null +++ b/projects/xeus/api.js @@ -0,0 +1,4 @@ +const index = require('./index') +const { ohmStaking } = require('../helper/treasury') + +module.exports = ohmStaking(index) \ No newline at end of file diff --git a/projects/xeus/index.js b/projects/xeus/index.js index 2449252fbc..835a285d08 100644 --- a/projects/xeus/index.js +++ b/projects/xeus/index.js @@ -1,9 +1,10 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require('../helper/ohm') const treasury = "0xF1081555011689cCCfa29CCA6a9E6AFcB907B0bC" module.exports = ohmTvl(treasury, [ //BUSD - ["0xe9e7cea3dedca5984780bafc599bd69add087d56", false], + [ADDRESSES.bsc.BUSD, false], //DAI ["0xE50c40B0B84946D7491337613059F181700ddBEa", false], //pancakeswap LP diff --git a/projects/xlsd/index.js b/projects/xlsd/index.js new file mode 100644 index 0000000000..6b2d0f04b4 --- /dev/null +++ b/projects/xlsd/index.js @@ -0,0 +1,12 @@ +const { sumTokensExport } = require("../helper/unwrapLPs"); + +const LSD_TOKENS = ['0xf40F19CAFaAA25bF9B52134646c6E325E76E0e93']; +const STAKING_POOL_ADDRESS = ['0x61CeC27ba136347ddA0AEDBe29a9b8219C32fF04']; + +module.exports = { + methodology: "TVL of Staked ETH & LSD tokens in the StakingPool contracts", + arbitrum: { + tvl: () => ({}), + staking: sumTokensExport({ tokensAndOwners2: [LSD_TOKENS, STAKING_POOL_ADDRESS], }), + }, +}; diff --git a/projects/xpla/index.js b/projects/xpla/index.js new file mode 100644 index 0000000000..19430cd40f --- /dev/null +++ b/projects/xpla/index.js @@ -0,0 +1,10 @@ +const { getFactoryTvl } = require('../terraswap/factoryTvl') + +module.exports = { + timetravel: false, + misrepresentedTokens: true, + methodology: "Liquidity on the DEX", + xpla: { + tvl: getFactoryTvl('xpla1j33xdql0h4kpgj2mhggy4vutw655u90z7nyj4afhxgj4v5urtadq44e3vd') + }, +} \ No newline at end of file diff --git a/projects/xsigma/index.js b/projects/xsigma/index.js index fd9b1ed939..03f7066428 100644 --- a/projects/xsigma/index.js +++ b/projects/xsigma/index.js @@ -1,12 +1,13 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const { staking } = require("../helper/staking"); const { pool2 } = require("../helper/pool2"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); const SigThreePoolContract = "0x3333333ACdEdBbC9Ad7bda0876e60714195681c5"; -const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const DAI = "0x6b175474e89094c44da98b954eedeac495271d0f"; -const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7"; +const USDC = ADDRESSES.ethereum.USDC; +const DAI = ADDRESSES.ethereum.DAI; +const USDT = ADDRESSES.ethereum.USDT; const sigMasterchefContract = "0x98C32b59a0AC00Cd33750427b1A317eBcf84D0F7"; const SIG = "0x7777777777697cfeecf846a76326da79cc606517"; diff --git a/projects/xtoken/constants.js b/projects/xtoken/constants.js index 361fec40dd..fbfb91c145 100644 --- a/projects/xtoken/constants.js +++ b/projects/xtoken/constants.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const DEC_18 = 10 ** 18; const xaaveaAddr = "0x80DC468671316E50D4E9023D3db38D3105c1C146"; const xaavebAddr = "0x704De5696dF237c5B9ba0De9ba7e0C63dA8eA0Df"; @@ -18,35 +19,35 @@ const xu3lpfAddr = "0x4296d40183356A770Fd8cA3Ba0592f0163BE9CA3"; const xu3lpgAddr = "0x28ce95124FB0d5Febe6Ab258072848f5fe1010eC"; const xu3lphAddr = "0x9ed880b7F75a220C0450E4884521ba8d500eb4bb"; const ethrsi6040Addr = "0x93E01899c10532d76C0E864537a1D26433dBbDdB"; -const sUsdAddr = "0x57ab1e02fee23774580c119740129eac7081e9d3"; +const sUsdAddr = ADDRESSES.ethereum.sUSD_OLD; const xbntaAddr = "0x6949f1118FB09aD2567fF675f96DbB3B6985ACd0"; const alphaAddr = "0xa1faa113cbe53436df28ff0aee54275c13b40975"; const bntAddr = "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C"; const kncAddr = "0xdd974d5c2e2928dea5f71b9825b8b646686bd200"; const snxAddr = "0xDC01020857afbaE65224CfCeDb265d1216064c59"; -const wbtcAddr = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; -const wethAddr = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; -const snxTokenAddr = "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f"; +const wbtcAddr = ADDRESSES.ethereum.WBTC; +const wethAddr = ADDRESSES.ethereum.WETH; +const snxTokenAddr = ADDRESSES.ethereum.SNX; const inchAddr = "0x111111111117dc0aa78b770fa6a738034120c302"; -const usdcAddr = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; -const aaveAddr = "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9"; +const usdcAddr = ADDRESSES.ethereum.USDC; +const aaveAddr = ADDRESSES.ethereum.AAVE; const xtkAddress = "0x7F3EDcdD180Dbe4819Bd98FeE8929b5cEdB3AdEB"; const xu3lpaAddrArbitrum = "0x9F8cFc08f781e1576A05d4d3669b3E6FF22913FF"; const xu3lpbAddrArbitrum = "0x216D135926f5EC9E5924564A342580B0b5A3bdc6"; const xbtc3xAddrArbitrum = "0x93B135416A1796707b273ad709099d47ADDA18D6"; const xeth3xAddrArbitrum = "0xc4C251c7d7c2F1165176e3BF503276fB0df05daa"; -const wbtcAddrArbitrum = "0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f"; -const wethAddrArbitrum = "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"; +const wbtcAddrArbitrum = ADDRESSES.arbitrum.WBTC; +const wethAddrArbitrum = ADDRESSES.arbitrum.WETH; const X_ETH_3X = "xETH3x" const X_BTC_3X = "xBTC3x" const WBTC = "wbtc"; const WETH = "weth"; const QUOTER_ADDRESS = '0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6' -const usdcAddress = '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8' -const wethAddress = '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1' -const usdtAddress = '0xdac17f958d2ee523a2206206994597c13d831ec7'; +const usdcAddress = ADDRESSES.arbitrum.USDC +const wethAddress = ADDRESSES.arbitrum.WETH +const usdtAddress = ADDRESSES.ethereum.USDT; const COINGECKO_API_URL = 'https://api.coingecko.com/api/v3/coins'; const urls = { "mainnet": "https://api.thegraph.com/subgraphs/name/xtokenmarket/terminal-mainnet", diff --git a/projects/xtoken/index.js b/projects/xtoken/index.js index a0cb8604ab..c73eaf05fa 100644 --- a/projects/xtoken/index.js +++ b/projects/xtoken/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json'); const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const terminal = require("./terminal"); @@ -13,7 +14,6 @@ const { xinchbAddr, xkncaAddr, xkncbAddr, - xsnxaAddr, xsnxaAdminAddr, xsnxaTradeAccountingAddr, xu3lpaAddr, @@ -32,8 +32,6 @@ const { inchAddr, usdcAddr, aaveAddr, - usdtAddress, - xtkAddress } = require("./constants"); const BigNumber = require('bignumber.js'); const xu3lps = [ @@ -177,7 +175,7 @@ async function tvl(timestamp, block) { })).output; sdk.util.sumSingleBalance( balances, - "0x57ab1ec28d129707052df4df418d58a2d46d5f51", + ADDRESSES.ethereum.sUSD, xsnxaSusdRaw ); diff --git a/projects/xusdmoney/index.js b/projects/xusdmoney/index.js index 1c024953cf..9a08db546e 100644 --- a/projects/xusdmoney/index.js +++ b/projects/xusdmoney/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { staking } = require("../helper/staking"); const { pool2s } = require("../helper/pool2"); const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs"); @@ -13,9 +14,9 @@ const collateralPoolContracts = [ "0x75aAf03CBF330e2b3F0623c55B7a528CFCAE8d75", ]; -const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; -const DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; -const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; +const WETH = ADDRESSES.ethereum.WETH; +const DAI = ADDRESSES.ethereum.DAI; +const USDC = ADDRESSES.ethereum.USDC; //const XUS = "0x875650dd46b60c592d5a69a6719e4e4187a3ca81"; const stakingContract = "0x6049B0831F8da67f3FE80f5FA07BD300E8f2F22C"; diff --git a/projects/xy-finance/index.js b/projects/xy-finance/index.js index 85f1323107..82d35b1847 100644 --- a/projects/xy-finance/index.js +++ b/projects/xy-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') const config = { @@ -40,6 +41,15 @@ const config = { klaytn: { chainId: '8217', }, + wemix: { + chainId: '1111', + }, + era: { + chainId: '324', + }, + polygon_zkevm: { + chainId: '1101', + }, } const ethAddress = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' @@ -51,11 +61,11 @@ const yPoolDepositContract = { }, "USDT": { "contractAddress": "0x8e921191a9dc6832C1c360C7c7B019eFB7c29B2d", - "tokenAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7" + "tokenAddress": ADDRESSES.ethereum.USDT }, "USDC": { "contractAddress": "0xdD8B0995Cc92c7377c7bce2A097EC70f45A192D5", - "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + "tokenAddress": ADDRESSES.ethereum.USDC }, "XY": { "contractAddress": "0x7fE09D2310A647c7C5043daE2053ff86956cE952", @@ -73,49 +83,49 @@ const yPoolDepositContract = { }, "USDT": { "contractAddress": "0x74A0EEA77e342323aA463098e959612d3Fe6E686", - "tokenAddress": "0x66e428c3f67a68878562e79A0234c1F83c208770" + "tokenAddress": ADDRESSES.cronos.USDT }, "USDC": { "contractAddress": "0x44a54941E572C526a599B0ebe27A14A5BF159333", - "tokenAddress": "0xc21223249CA28397B4B6541dfFaEcC539BfF0c59" + "tokenAddress": ADDRESSES.cronos.USDC } }, "56": { "ETH": { "contractAddress": "0xa0ffc7eDB9DAa9C0831Cdf35b658e767ace33939", - "tokenAddress": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8" + "tokenAddress": ADDRESSES.bsc.ETH }, "USDT": { "contractAddress": "0xD195070107d853e55Dad9A2e6e7E970c400E67b8", - "tokenAddress": "0x55d398326f99059fF775485246999027B3197955" + "tokenAddress": ADDRESSES.bsc.USDT }, "USDC": { "contractAddress": "0x27C12BCb4538b12fdf29AcB968B71dF7867b3F64", - "tokenAddress": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d" + "tokenAddress": ADDRESSES.bsc.USDC } }, "108": { "USDT": { "contractAddress": "0x74A0EEA77e342323aA463098e959612d3Fe6E686", - "tokenAddress": "0x4f3C8E20942461e2c3Bdd8311AC57B0c222f2b82" + "tokenAddress": ADDRESSES.thundercore.TT_USDT }, "USDC": { "contractAddress": "0x2641911948e0780e615A9465188D975Fa4A72f2c", - "tokenAddress": "0x22e89898A04eaf43379BeB70bf4E38b1faf8A31e" + "tokenAddress": ADDRESSES.thundercore.TT_USDC } }, "137": { "ETH": { "contractAddress": "0x29d91854B1eE21604119ddc02e4e3690b9100017", - "tokenAddress": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619" + "tokenAddress": ADDRESSES.polygon.WETH_1 }, "USDT": { "contractAddress": "0x3243278E0F93cD6F88FC918E0714baF7169AFaB8", - "tokenAddress": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F" + "tokenAddress": ADDRESSES.polygon.USDT }, "USDC": { "contractAddress": "0xf4137e5D07b476e5A30f907C3e31F9FAAB00716b", - "tokenAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" + "tokenAddress": ADDRESSES.polygon.USDC } }, "250": { @@ -125,21 +135,21 @@ const yPoolDepositContract = { }, "USDT": { "contractAddress": "0xC255563d3Bc3Ed7dBbb8EaE076690497bfBf7Ef8", - "tokenAddress": "0x049d68029688eAbF473097a2fC38ef61633A3C7A" + "tokenAddress": ADDRESSES.fantom.fUSDT }, "USDC": { "contractAddress": "0x3A459695D49cD6B9637bC85B7ebbb04c5c3038c0", - "tokenAddress": "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75" + "tokenAddress": ADDRESSES.fantom.USDC } }, "321": { "USDT": { "contractAddress": "0xF526EFc174b512e66243Cb52524C1BE720144e8d", - "tokenAddress": "0x0039f574eE5cC39bdD162E9A88e3EB1f111bAF48" + "tokenAddress": ADDRESSES.kcc.USDT }, "USDC": { "contractAddress": "0xa274931559Fb054bF60e0C44355D3558bB8bC2E6", - "tokenAddress": "0x980a5AfEf3D17aD98635F6C5aebCBAedEd3c3430" + "tokenAddress": ADDRESSES.kcc.USDC } }, "42161": { @@ -149,25 +159,25 @@ const yPoolDepositContract = { }, "USDT": { "contractAddress": "0x7a483730AD5a845ED2962c49DE38Be1661D47341", - "tokenAddress": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9" + "tokenAddress": ADDRESSES.arbitrum.USDT }, "USDC": { "contractAddress": "0x680ab543ACd0e52035E9d409014dd57861FA1eDf", - "tokenAddress": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8" + "tokenAddress": ADDRESSES.arbitrum.USDC } }, "43114": { "ETH": { "contractAddress": "0xEFaaf68a9a8b7D93bb15D29c8B77FCe87Fcc91b8", - "tokenAddress": "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB" + "tokenAddress": ADDRESSES.avax.WETH_e }, "USDT": { "contractAddress": "0x3D2d1ce29B8bC997733D318170B68E63150C6586", - "tokenAddress": "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7" + "tokenAddress": ADDRESSES.avax.USDt }, "USDC": { "contractAddress": "0x21ae3E63E06D80c69b09d967d88eD9a98c07b4e4", - "tokenAddress": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E" + "tokenAddress": ADDRESSES.avax.USDC } }, "10": { @@ -177,41 +187,71 @@ const yPoolDepositContract = { }, "USDT": { "contractAddress": "0xF526EFc174b512e66243Cb52524C1BE720144e8d", - "tokenAddress": "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58" + "tokenAddress": ADDRESSES.optimism.USDT }, "USDC": { "contractAddress": "0x1e4992E1Be86c9d8ed7dcBFcF3665FE568dE98Ab", - "tokenAddress": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607" + "tokenAddress": ADDRESSES.optimism.USDC } }, "592": { "USDT": { "contractAddress": "0xF526EFc174b512e66243Cb52524C1BE720144e8d", - "tokenAddress": "0x3795C36e7D12A8c252A20C5a7B455f7c57b60283" + "tokenAddress": ADDRESSES.astar.USDT }, "USDC": { "contractAddress": "0xD236639F5B00BC6711aC799bac5AceaF788b2Aa3", - "tokenAddress": "0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98" + "tokenAddress": ADDRESSES.moonbeam.USDC } }, "1285": { "USDT": { "contractAddress": "0xF526EFc174b512e66243Cb52524C1BE720144e8d", - "tokenAddress": "0xB44a9B6905aF7c801311e8F4E76932ee959c663C" + "tokenAddress": ADDRESSES.moonriver.USDT }, "USDC": { "contractAddress": "0x680ab543ACd0e52035E9d409014dd57861FA1eDf", - "tokenAddress": "0xE3F5a90F9cb311505cd691a46596599aA1A0AD7D" + "tokenAddress": ADDRESSES.moonriver.USDC } }, "8217": { "USDT": { "contractAddress": "0xF526EFc174b512e66243Cb52524C1BE720144e8d", - "tokenAddress": "0xceE8FAF64bB97a73bb51E115Aa89C17FfA8dD167" + "tokenAddress": ADDRESSES.klaytn.oUSDT }, "USDC": { "contractAddress": "0xB238d4339a44f93aBCF4071A9bB0f55D2403Fd84", - "tokenAddress": "0x754288077D0fF82AF7a5317C7CB8c444D421d103" + "tokenAddress": ADDRESSES.klaytn.oUSDC + } + }, + "1111": { + "USDT": { + "contractAddress": "0xA5Cb30E5d30A9843B6481fFd8D8D35DDED3a3251", + "tokenAddress": "0xA649325Aa7C5093d12D6F98EB4378deAe68CE23F" + }, + "USDC": { + "contractAddress": "0x3243278E0F93cD6F88FC918E0714baF7169AFaB8", + "tokenAddress": ADDRESSES.moonriver.USDC + } + }, + "324": { + "ETH": { + "contractAddress": "0x935283A00FBF8E40fd2f8C432A488F6ADDC8dB67", + "tokenAddress": ethAddress + }, + "USDC": { + "contractAddress": "0x75167284361c8D61Be7E4402f4953e2b112233cb", + "tokenAddress": ADDRESSES.era.USDC + } + }, + "1101": { + "ETH": { + "contractAddress": "0x9fE77412aA5c6Ba67fF3095bBc534884F9a61a38", + "tokenAddress": ethAddress + }, + "USDC": { + "contractAddress": "0x1acCfC3a45313f8F862BE7fbe9aB25f20A93d598", + "tokenAddress": ADDRESSES.polygon_zkevm.USDC } }, } diff --git a/projects/y2b-finance/index.js b/projects/y2b-finance/index.js index 3bc97660a3..e90457e14a 100644 --- a/projects/y2b-finance/index.js +++ b/projects/y2b-finance/index.js @@ -22,6 +22,9 @@ async function tvl(timestamp, _b, chainBlocks, { api }) { module.exports = { + hallmarks: [ + [1673913600, "Rug Pull"] + ], ethereum: { tvl, // staking: sumTokensExport({ owners: [], tokens: ['0xF9C12B27cE5058ab98ce11BD53900f84E18C0650']}) diff --git a/projects/y2k-finance/index.js b/projects/y2k-finance/index.js index 9bb770ebca..148b5c573b 100644 --- a/projects/y2k-finance/index.js +++ b/projects/y2k-finance/index.js @@ -26,6 +26,7 @@ async function tvl(timestamp, _b, chainBlocks, { api }) { module.exports = { arbitrum: { tvl, - staking: sumTokensExport({ chain, owners: [], tokens: ['0x65c936f008BC34fE819bce9Fa5afD9dc2d49977f']}) + // staking: sumTokensExport({ chain, owners: [], tokens: ['0x65c936f008BC34fE819bce9Fa5afD9dc2d49977f']}), + pool2: sumTokensExport({ chain, owners: ['0xaefd22d0153e69f3316dca9095e7279b3a2f8af2', '0xbDAA858Fd7b0DC05F8256330fAcB35de86283cA0',], tokens: ['0x569061e2d807881f4a33e1cbe1063bc614cb75a4']}) } } diff --git a/projects/y2k-v2/index.js b/projects/y2k-v2/index.js new file mode 100644 index 0000000000..da3dc9bf37 --- /dev/null +++ b/projects/y2k-v2/index.js @@ -0,0 +1,50 @@ +const { sumTokens2, sumTokensExport } = require('../helper/unwrapLPs') +const { getLogs } = require('../helper/cache/getLogs') + +const chain = 'arbitrum' + +async function tvl(timestamp, _b, chainBlocks, { api }) { + const logs = await getLogs({ + api, + fromBlock: 33934273, + eventAbi: 'event MarketCreated(uint256 indexed mIndex, address hedge, address risk, address token, string name, int256 strikePrice)', + topics: ['0xf38f00404415af51ddd0dd57ce975d015de2f40ba8a087ac48cd7552b7580f32'], + target: '0x984e0eb8fb687afa53fc8b33e12e04967560e092', + }) + + const vaults = logs.map(({ args }) => ([args.hedge, args.risk])).flat() + const tokens = await api.multiCall({ + abi: 'address:asset', + calls: vaults, + }) + const tokensAndOwners = tokens.map((token, i) => ([token, vaults[i]])) + + return sumTokens2({ api, tokensAndOwners }) +} + +const config = { + arbitrum: { factory: '0xC3179AC01b7D68aeD4f27a19510ffe2bfb78Ab3e', fromBlock: 96059531 , }, +} + + +Object.keys(config).forEach(chain => { + const { factory, fromBlock} = config[chain] + module.exports[chain] = { + tvl: async (_, _b, _cb, { api, }) => { + const logs = await getLogs({ + api, + target: factory, + topics: ['0xe8066e93c2c1e100c0c76002a546075b7c6b53025db53708875180c81afda250'], + eventAbi: 'event MarketCreated (uint256 indexed marketId, address premium, address collateral, address underlyingAsset, address token, string name, uint256 strike, address controller)', + onlyArgs: true, + fromBlock, + }) + const premiums = logs.map(i => i.premium) + const collaterals = logs.map(i => i.collateral) + const pTokens = await api.multiCall({ abi: 'address:asset', calls: premiums }) + const cTokens = await api.multiCall({ abi: 'address:asset', calls: collaterals }) + return sumTokens2({ api, tokensAndOwners2: [[...pTokens, ...cTokens], [...premiums, ...collaterals]] }) + } + } +}) + diff --git a/projects/yama-finance/index.js b/projects/yama-finance/index.js index cea5ed1d56..ff97168556 100644 --- a/projects/yama-finance/index.js +++ b/projects/yama-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { getLogs } = require('../helper/cache/getLogs') const { sumTokens2 } = require('../helper/unwrapLPs') @@ -13,7 +14,7 @@ async function tvl(_, _b, _cb, { api, }) { }) const ownerTokens = [ - [['0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9'], '0x0e1Ddf8D61f0570Bf786594077CD431c727335A9'], // psm module + [[ADDRESSES.arbitrum.USDT], '0x0e1Ddf8D61f0570Bf786594077CD431c727335A9'], // psm module ] ownerTokens.push([logs.map(i => i.token), CDP]) diff --git a/projects/yaxis/index.js b/projects/yaxis/index.js index 6cc1acf0ac..29d3b30870 100644 --- a/projects/yaxis/index.js +++ b/projects/yaxis/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const { unwrapUniswapLPs, } = require("../helper/unwrapLPs"); @@ -61,7 +62,7 @@ async function tvl(timestamp, block) { }) ).output; - balances["0x0000000000000000000000000000000000000000"] = BigNumber(alethVault) + balances[ADDRESSES.null] = BigNumber(alethVault) .multipliedBy(eth) .dividedBy(crvTotalSupply) .toFixed(0); diff --git a/projects/yearn/index.js b/projects/yearn/index.js index 99985ebffd..c7830be7d3 100644 --- a/projects/yearn/index.js +++ b/projects/yearn/index.js @@ -1,104 +1,72 @@ +const { sumTokens2 } = require('../helper/unwrapLPs') const axios = require('axios') -const { getApiTvl } = require('../helper/historicalApi') +const { getConfig } = require('../helper/cache') +const { sumERC4626Vaults } = require('../helper/erc4626') -async function ethereum(timestamp) { - return getApiTvl(timestamp, async () => { - const tvl = await axios.get('https://api.yearn.finance/v1/chains/1/vaults/all') - return tvl.data.reduce((all, vault) => all + vault.tvl.tvl, 0) - }, async () => { - /* - Outdated as of Dec 2022 - const historicalTvls = Object.entries((await axios.get('https://yearn.science/v1/tvl')).data) - .map(([date, tvl]) => [Date.parse(date)/1000, tvl]).sort(([date1], [date2]) => date1 - date2); - */ - const ibTvl = await axios.post("https://yearn.vision/api/ds/query", { "queries": [{ "datasource": { "uid": "PBFE396EC0B189D67", "type": "prometheus" }, "expr": "(sum(ironbank{network=\"ETH\", param=\"tvl\"}) or vector(0))", "utcOffsetSec": 0, "datasourceId": 1 }], "from": "1639958400000", "to": Date.now().toString() }) - const totalTvl = await axios.post("https://yearn.vision/api/ds/query", { "queries": [{ "datasource": { "uid": "PBFE396EC0B189D67", "type": "prometheus" }, "expr": "(sum(ironbank{network=\"ETH\", param=\"tvl\"}) or vector(0)) + (sum(yearn_vault{network=\"ETH\", param=\"tvl\"}) or vector(0))", "utcOffsetSec": 0, "datasourceId": 1 }], "from": "1639958400000", "to": Date.now().toString() }) - const result = [] - const [tvlTimestamps, tvls] = totalTvl.data.results.A.frames[0].data.values - const [ibTimestamps, ib] = ibTvl.data.results.A.frames[0].data.values - tvlTimestamps.forEach((time, index) => { - const ibIndex = ibTimestamps.indexOf(time) - const tvl = tvls[index] - ib[ibIndex] - result.push({ - date: Math.round(time / 1000), - totalLiquidityUSD: tvl - }) - }) - return result - }) -} - -async function fantom(timestamp) { - return getApiTvl(timestamp, async () => { - const tvl = await axios.get('https://api.yearn.finance/v1/chains/250/vaults/all') - const total = tvl.data.reduce((all, vault) => all + vault.tvl.tvl, 0) - if(total === 0){ throw new Error("TVL can't be 0")} - return total - }, async () => { - const totalTvl = await axios.post("https://yearn.vision/api/ds/query", {"queries":[{"datasource":{"uid":"PBFE396EC0B189D67","type":"prometheus"},"expr":"(sum(ironbank{network=\"FTM\", param=\"tvl\"}) or vector(0)) + (sum(yearn_vault{network=\"FTM\", param=\"tvl\"}) or vector(0))", "utcOffsetSec":0,"datasourceId":1}],"from":"1642091361529","to": Date.now().toString() }) - const result = [] - const [tvlTimestamps, tvls] = totalTvl.data.results.A.frames[0].data.values - tvlTimestamps.forEach((time, index) => { - const tvl = tvls[index] - result.push({ - date: Math.round(time / 1000), - totalLiquidityUSD: tvl - }) - }) - return result - }) -} - -async function arbitrum(timestamp) { - return getApiTvl(timestamp, async () => { - const tvl = await axios.get('https://api.yearn.finance/v1/chains/42161/vaults/all') - const total = tvl.data.reduce((all, vault) => all + vault.tvl.tvl, 0) - if(total === 0){ throw new Error("TVL can't be 0")} - return total - }, async () => { - const totalTvl = await axios.post("https://yearn.vision/api/ds/query", {"queries":[{"datasource":{"uid":"PBFE396EC0B189D67","type":"prometheus"},"expr":"(sum(ironbank{network=\"AETH\", param=\"tvl\"}) or vector(0)) + (sum(yearn_vault{network=\"AETH\", param=\"tvl\"}) or vector(0))", "utcOffsetSec":0,"datasourceId":1}],"from":"1645565848000","to": Date.now().toString() }) - const result = [] - const [tvlTimestamps, tvls] = totalTvl.data.results.A.frames[0].data.values - tvlTimestamps.forEach((time, index) => { - const tvl = tvls[index] - result.push({ - date: Math.round(time / 1000), - totalLiquidityUSD: tvl - }) - }) - return result - }) -} +const v1Vaults = [ + '0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e', + '0x5dbcF33D8c2E976c6b560249878e6F1491Bca25c', + '0x37d19d1c4E1fa9DC47bD1eA12f742a0887eDa74a', + '0xACd43E627e64355f1861cEC6d3a6688B31a6F952', + '0x2f08119C6f07c006695E079AAFc638b8789FAf18', + '0xBA2E7Fed597fd0E3e70f5130BcDbbFE06bB94fe1', + '0x2994529C0652D127b7842094103715ec5299bBed', + '0x7Ff566E1d69DEfF32a7b244aE7276b9f90e9D0f6', + '0xe1237aA7f535b0CC33Fd973D66cBf830354D16c7', + '0x9cA85572E6A3EbF24dEDd195623F188735A5179f', + '0xec0d8D3ED5477106c6D4ea27D90a60e594693C90', + '0x629c759D1E83eFbF63d84eb3868B564d9521C129', + '0x0FCDAeDFb8A7DfDa2e9838564c5A1665d856AFDF', + '0xcC7E70A958917cCe67B4B87a8C30E6297451aE98', + '0x98B058b2CBacF5E99bC7012DF757ea7CFEbd35BC', + '0xE0db48B4F71752C4bEf16De1DBD042B82976b8C7', + '0x5334e150B938dd2b6bd040D9c4a03Cff0cED3765', + '0xFe39Ce91437C76178665D64d7a2694B0f6f17fE3', + '0xF6C9E9AF314982A4b38366f4AbfAa00595C5A6fC', + '0xA8B1Cb4ed612ee179BDeA16CCa6Ba596321AE52D', + '0x46AFc2dfBd1ea0c0760CAD8262A5838e803A37e5', + '0x5533ed0a3b83F70c3c4a1f69Ef5546D3D4713E44', + '0x8e6741b456a074F0Bc45B8b82A755d4aF7E965dF', + '0x03403154afc09Ce8e44C3B185C82C6aD5f86b9ab', + '0xE625F5923303f1CE7A43ACFEFd11fd12f30DbcA4', + '0xBacB69571323575C6a5A3b4F9EEde1DC7D31FBc1', + '0x1B5eb1173D2Bf770e50F10410C9a96F7a8eB6e75', + '0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6', +] +const blacklist = [ + '0xbD17B1ce622d73bD438b9E658acA5996dc394b0d', + '0xc5bDdf9843308380375a611c18B50Fb9341f502A', + '0x07FB4756f67bD46B748b16119E802F1f880fb2CC', + '0x7F83935EcFe4729c4Ea592Ab2bC1A32588409797', + '0x123964EbE096A920dae00Fb795FFBfA0c9Ff4675', + '0x39546945695DCb1c037C836925B355262f551f55', + ...v1Vaults, +] -async function optimism(timestamp) { - return getApiTvl(timestamp, async () => { - const tvl = await axios.get('https://api.yearn.finance/v1/chains/10/vaults/all') - const total = tvl.data.reduce((all, vault) => all + vault.tvl.tvl, 0) - if(total === 0){ throw new Error("TVL can't be 0")} - return total - }, async () => { - throw new Error("No historical data for optimism") - }) +async function tvl(timestamp, _, _1, { api }) { + const data = await getConfig('yearn/' + api.chain, `https://api.yearn.finance/v1/chains/${api.chainId}/vaults/all`) + const vaults = data.map(i => i.address).filter(i => !blacklist.includes(i)) + await sumERC4626Vaults({ api, vaults, abi: { asset: 'address:token', } }) + if (api.chain === 'ethereum') { + const tokens = await api.multiCall({ abi: 'address:token', calls: v1Vaults }) + let bals = await api.multiCall({ abi: 'erc20:totalSupply', calls: v1Vaults }) + const ratio = await api.multiCall({ abi: 'uint256:getPricePerFullShare', calls: v1Vaults }) + bals = bals.map((bal, i) => bal * ratio[i] / 1e18) + api.addTokens(tokens, bals) + } + return sumTokens2({ api, resolveLP: true,}) } module.exports = { - doublecounted: true, - misrepresentedTokens: true, - timetravel: false, - fantom: { - tvl: fantom - }, - ethereum: { - tvl: ethereum - }, - arbitrum: { - tvl: arbitrum - }, - optimism: { - tvl: optimism - }, - hallmarks:[ - [1594944000, "YFI token Launch"], - ] + doublecounted: true, + misrepresentedTokens: true, + timetravel: false, + fantom: { tvl }, + ethereum: { tvl }, + arbitrum: { tvl }, + optimism: { tvl }, + hallmarks: [ + [1594944000, "YFI token Launch"], + ] }; diff --git a/projects/yetiFinance/index.js b/projects/yetiFinance/index.js index 84ae78c4f5..19dd253676 100644 --- a/projects/yetiFinance/index.js +++ b/projects/yetiFinance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const getAllCollateralAbi = 'function getAllCollateral() view returns (address[], uint256[])' @@ -114,7 +115,7 @@ async function tvl(_, _block, chainBlocks) { return { // In USDC, USDC has decimal of 6 - ["avax:0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"]: total / (10 ** 12) + ["avax:" + ADDRESSES.avax.USDC]: total / (10 ** 12) } } @@ -152,7 +153,7 @@ async function pool2(_, _block, chainBlocks) { const pool2ValueUSD = (YETIReserve * YETIPrice + AVAXReserve * AVAXPrice) / 10 ** 18 return { // In USDC, USDC has decimal of 6 - ["avax:0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"]: pool2ValueUSD / (10 ** 12) + ["avax:" + ADDRESSES.avax.USDC]: pool2ValueUSD / (10 ** 12) } } @@ -179,7 +180,7 @@ async function staking(_, _block, chainBlocks) { const stakingUSD = veYETIBalance * YETIPrice / (10 ** 18) return { // In USDC, USDC has decimal of 6 - ["avax:0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"]: stakingUSD / (10 ** 12) + ["avax:" + ADDRESSES.avax.USDC]: stakingUSD / (10 ** 12) } } diff --git a/projects/yfdai/index.js b/projects/yfdai/index.js index cd4c07a6f5..839ffc7445 100644 --- a/projects/yfdai/index.js +++ b/projects/yfdai/index.js @@ -1,11 +1,12 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk') const {sumTokens} = require('../helper/unwrapLPs') const yfdaiTokenAddress = "0xf4CD3d3Fda8d7Fd6C5a500203e38640A70Bf9577"; const YfDaiStakingAdddress = "0x44d771D0C998f524ff39aB6Df64B72bce1d09566"; const YfDaiSafetradeStakingAddress = "0x4599cDa238Fb71573fd5A0076C199320e09BCfF0"; -const weth = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" -const dai = "0x6b175474e89094c44da98b954eedeac495271d0f" +const weth = ADDRESSES.ethereum.WETH +const dai = ADDRESSES.ethereum.DAI const wethVault = "0x290e5484601986667dC6cA72119f2B85260Ca92E" const daiVault = "0x7e537E8B5028a32166F06C8664cdE9D608487428" const YfDaiETHLP72HRSVault = "0x75E9F410e8d1D7240b67ec6FE35FA37580b814d9"; diff --git a/projects/yieldyak-staked-avax/index.js b/projects/yieldyak-staked-avax/index.js index b89388c6a4..a7d151829a 100644 --- a/projects/yieldyak-staked-avax/index.js +++ b/projects/yieldyak-staked-avax/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const yieldYak_id = "45756385483164763772015628191198800763712771278583181747295544980036831301432"; @@ -16,7 +17,7 @@ async function avax(timestamp, ethBlock, chainBlocks, { api }) { }) return { - "avax:0x0000000000000000000000000000000000000000": supply * price / 1e18 + ["avax:" + ADDRESSES.null]: supply * price / 1e18 }; } diff --git a/projects/yoshi-exchange/index.js b/projects/yoshi-exchange/index.js index e83b079618..eddf65b737 100644 --- a/projects/yoshi-exchange/index.js +++ b/projects/yoshi-exchange/index.js @@ -10,8 +10,11 @@ const factoryData = { }; let tvls = {}; -Object.entries(factoryData).forEach(([chain, data]) => tvls[chain] = {tvl: uniTvlExport(data.factory, chain)}); +Object.entries(factoryData).forEach(([chain, data]) => tvls[chain] = {tvl: uniTvlExport(data.factory, chain, undefined, undefined, { + useDefaultCoreAssets: true, +})}); module.exports = { - ...tvls + ...tvls, + misrepresentedTokens: true, } diff --git a/projects/youves/data.js b/projects/youves/data.js index da96bf4da3..6ffea66b2b 100644 --- a/projects/youves/data.js +++ b/projects/youves/data.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const Ss = { id: 'tez', name: 'Tezos', @@ -275,47 +276,47 @@ const Ss = { }), youToken: Object.assign(Object.assign({ }, ws), { - contractAddress: 'KT1Xobej4mc6XgEjDoJoHtTKgbD1ELMvcQuL' + contractAddress: ADDRESSES.tezos.YOU }), uusdToken: Object.assign(Object.assign({ }, Ds), { - contractAddress: 'KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW' + contractAddress: ADDRESSES.tezos.uUSD }), udefiToken: Object.assign(Object.assign({ }, ks), { - contractAddress: 'KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW' + contractAddress: ADDRESSES.tezos.uUSD }), ubtcToken: Object.assign(Object.assign({ }, Ns), { - contractAddress: 'KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW' + contractAddress: ADDRESSES.tezos.uUSD }), tzbtcToken: Object.assign(Object.assign({ }, Bs), { - contractAddress: 'KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn' + contractAddress: ADDRESSES.tezos.tzBTC }), kusdToken: Object.assign(Object.assign({ }, Rs), { - contractAddress: 'KT1K9gCRgaLRFKTErYt1wVxA3Frb9FjasjTV' + contractAddress: ADDRESSES.tezos.kUSD }), usdtzToken: Object.assign(Object.assign({ }, Ps), { - contractAddress: 'KT1LN4LPSqTMS7Sd2CJw4bbDGRkMv2t68Fy9' + contractAddress: ADDRESSES.tezos.USDtz }), usdtToken: Object.assign(Object.assign({ }, Fd), { - contractAddress: 'KT1XnTn74bUtxHfDtBmm2bGZAQfhPbvKWR8o' + contractAddress: ADDRESSES.tezos.USDt }), wusdcToken: Object.assign(Object.assign({ }, xs), { - contractAddress: 'KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ' + contractAddress: ADDRESSES.tezos.AAVE }), wwbtcToken: Object.assign(Object.assign({ }, Ms), { - contractAddress: 'KT18fp5rcTW7mbWDmzFwjLDUhs5MeJmagDSZ' + contractAddress: ADDRESSES.tezos.AAVE }), plentyToken: Object.assign(Object.assign({ }, Os), { - contractAddress: 'KT1GRSvLoikDsXujKgZPsGLX8k8VvR2Tq95b' + contractAddress: ADDRESSES.tezos.PLENTY }), tzbtcLP: Object.assign(Object.assign({ }, Ts), { diff --git a/projects/youves/index.js b/projects/youves/index.js index 9e1a388a28..f111fd00fb 100644 --- a/projects/youves/index.js +++ b/projects/youves/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { GraphQLClient, gql } = require("graphql-request"); const sdk = require("@defillama/sdk") const { addDexPosition, resolveLPPosition, getStorage, usdtAddressTezos, } = require('../helper/chain/tezos') @@ -25,7 +26,7 @@ const engines = { const uDEFI_LP = 'KT1H8sJY2VzrbiX4pYeUVsoMUd4iGw2DV7XH' const uDEFI_TOKEN = 'KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW-1' -const tzBTC_TOKEN = 'KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn' +const tzBTC_TOKEN = ADDRESSES.tezos.tzBTC async function fetchBalance(balances, token, engineAddress, decimals = 0, sharePrice) { @@ -65,7 +66,7 @@ async function tvl() { const balances = {} const sharePrice = await getTzBTCLPSharePrice() await Promise.all([ - // fetchBalance(balances, 'KT1XRPEPXbZK25r3Htzp2o1x7xdMMmfocKNW', engines.uDefiuUSDV2, 0), // disabling this because backing of uUSD is already counted in tvl + // fetchBalance(balances, ADDRESSES.tezos.uUSD, engines.uDefiuUSDV2, 0), // disabling this because backing of uUSD is already counted in tvl fetchBalance(balances, usdtAddressTezos, engines.uUSDUSDtV3, 0), fetchBalance(balances, tzBTC_TOKEN, engines.uUSDtzBTCV2, 0), fetchBalance(balances, tzBTC_TOKEN, engines.uUSDtzBTCV3, 0), diff --git a/projects/ysmart/index.js b/projects/ysmart/index.js index fa6e23aa18..e7b5ff08e8 100644 --- a/projects/ysmart/index.js +++ b/projects/ysmart/index.js @@ -1,8 +1,9 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport } = require("../helper/unwrapLPs"); const masterchef = "0x705A71efadD12faDac67600b666D8c0347848BD3"; -const token_USDC = "0xfA9343C3897324496A05fC75abeD6bAC29f8A40f"; -const token_USDT = "0xB44a9B6905aF7c801311e8F4E76932ee959c663C"; +const token_USDC = ADDRESSES.telos.ETH; +const token_USDT = ADDRESSES.moonriver.USDT; module.exports = { kava: { diff --git a/projects/zencha/index.js b/projects/zencha/index.js index ce347ae248..ba46550394 100644 --- a/projects/zencha/index.js +++ b/projects/zencha/index.js @@ -1,19 +1,20 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens } = require("../helper/unwrapLPs"); const swapFlashLoan = '0x2D027B49B8960810F84D5fE172d07FFf62311852'; const tokens = { DAI: { - boba: '0xf74195bb8a5cf652411867c5c2c5b8c2a402be35', - eth: '0x6b175474e89094c44da98b954eedeac495271d0f' + boba: ADDRESSES.boba.DAI, + eth: ADDRESSES.ethereum.DAI }, USDT: { - boba: '0x5de1677344d3cb0d7d465c10b72a8f60699c062d', - eth: '0xdac17f958d2ee523a2206206994597c13d831ec7' + boba: ADDRESSES.boba.USDT, + eth: ADDRESSES.ethereum.USDT }, USDC: { - boba: '0x66a2a913e447d6b4bf33efbec43aaef87890fbbc', - eth: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' + boba: ADDRESSES.boba.USDC, + eth: ADDRESSES.ethereum.USDC } }; diff --git a/projects/zenith/contracts.json b/projects/zenith/contracts.json new file mode 100644 index 0000000000..4bdfd42b7f --- /dev/null +++ b/projects/zenith/contracts.json @@ -0,0 +1,32 @@ +{ + "admin": "0x3a11537C0e1f1cc80820a1EEd973bB367Bf3276A", + "ZTH": "0x00000000A82B4758df44fcB124e26a9B441E59a0", + "masterChef": "0xb9e7008FA856D66680BeE9E0a24da407D9d7fAD5", + "esZTH": "0x4DC377c2B63d06fF47BBd2B3B1177cfAC1906b1e", + "treasury": "0x648F3eC98da4De19b92598CF384662d494D881AB", + "ZTHETHPairV2":"0xAC0155CBd306e41C1287E2c53e1306178397b823", + "config": { + "startTime": 1683469800 + }, + "stakePools": [ + { + "pid": 0, + "name":"ETH", + "asset": "0x0000000000000000000000000000000000000000" + }, + { + "pid": 1, + "name":"ZTH-ETH", + "asset": "0xAC0155CBd306e41C1287E2c53e1306178397b823" + }, + { + "pid": 4, + "name":"stETH", + "asset": "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84" + }, { + "pid": 5, + "name":"rETH", + "asset": "0xae78736Cd615f374D3085123A210448E74Fc6393" + } + ] +} diff --git a/projects/zenith/index.js b/projects/zenith/index.js new file mode 100644 index 0000000000..ebfeb702f7 --- /dev/null +++ b/projects/zenith/index.js @@ -0,0 +1,18 @@ +const { stakings } = require("../helper/staking"); +const { pool2s } = require("../helper/pool2"); + +const contracts = require("./contracts.json"); + +var pool2= [contracts.ZTHETHPairV2]; +var stakeTokens=[]; +contracts.stakePools.forEach(r=> {if(r.asset!=contracts.ZTHETHPairV2) stakeTokens.push(r.asset) }); + + +module.exports = { + methodology: + "TVL is comprised of tokens deposited to Zenith protocol as collateral, similar to Compound Finance and other lending protocols the borrowed tokens are not counted as TVL.", + ethereum: { + pool2: pool2s([contracts.masterChef], pool2), + tvl: stakings([contracts.masterChef], stakeTokens), + }, +}; diff --git a/projects/zerolend/index.js b/projects/zerolend/index.js new file mode 100644 index 0000000000..76516fa347 --- /dev/null +++ b/projects/zerolend/index.js @@ -0,0 +1,7 @@ +const { aaveExports } = require("../helper/aave"); + +module.exports = { + era: aaveExports("era", undefined, undefined, [ + "0xB73550bC1393207960A385fC8b34790e5133175E", + ]), +}; diff --git a/projects/zeroshift/index.js b/projects/zeroshift/index.js index bf34a37167..425f78fda6 100644 --- a/projects/zeroshift/index.js +++ b/projects/zeroshift/index.js @@ -1,10 +1,11 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const zrst = "0xf436Ea4C4f2e49F0679895aEAE39dab698350eAa"; const stakingContract = "0xe41450704aB574968714b7548E9BcfF31A2183e0"; const treasury = "0x197123D62A2252c0Ac668a72BAAe39AF333843E0"; const treasuryTokens = [ - ["0xd586e7f844cea2f87f50152665bcbc2c279d8d70", false], // DAI + [ADDRESSES.avax.DAI, false], // DAI ["0xeebb1784296ad9f965e90e2cc3c4cf588daebc2d", true] // ZRST-DAI JLP ] diff --git a/projects/zerotwohm/index.js b/projects/zerotwohm/index.js deleted file mode 100644 index 791c032396..0000000000 --- a/projects/zerotwohm/index.js +++ /dev/null @@ -1,21 +0,0 @@ -const { ohmTvl } = require("../helper/ohm"); - -const stakingContract = "0x06B4dFAbAf0fb0Cf813526572cc86B2695c9D050"; -const Z2O = "0xdb96f8efd6865644993505318cc08FF9C42fb9aC"; - -const treasury = "0x00eFcbd55b59b5D08F3a7501C0Ddad34a57A3611"; -const treasuryTokens = [ - ["0x82af49447d8a07e3bd95bd0d56f35241523fbab1", false], // WETH - ["0x17fc002b466eec40dae837fc4be5c67993ddbd6f", false], // FRAX - ["0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f", false], // WBTC - ["0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a", false], // MIM - ["0x79f12596b78f9e982bdab6e2d83d4bc155672372", false], // chMIM - ["0x739ca6d71365a08f584c8fc4e1029045fa8abc4b", false], // wsOHM - ["0x40c938444c725EA6eb6992ca71F94b6945b43335", true], // Z2O-MIM SLP -]; - -module.exports = { - misrepresentedTokens: true, - ...ohmTvl(treasury, treasuryTokens, "arbitrum", stakingContract, Z2O), - methodology: "Counts as TVL all the assets deposited on the reasury", -}; diff --git a/projects/zest-protocol/index.js b/projects/zest-protocol/index.js index 3ecc9598c1..dee057d6a7 100644 --- a/projects/zest-protocol/index.js +++ b/projects/zest-protocol/index.js @@ -1,15 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') const Abis = require("./abi.json"); const sdk = require("@defillama/sdk"); const BigNumber = require("bignumber.js"); const Contracts = { fantom: { - wftm: "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", + wftm: ADDRESSES.fantom.WFTM, wethBank: "0xB717b014BC34fc904396585CbF4FC1B0BBe603B4", weth: "0x74b23882a30290451A17c44f4F05243b6b58C76d", zsp: "0x2C26617034C840C9412CD67aE0Fc68A6755D00BF", ftmz: "0x9e219b51891e2c62ea8a2ea438d331eae7c68484", - usdc: "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75", + usdc: ADDRESSES.fantom.USDC, bank: "0x9fc3E5259Ba18BD13366D0728a256E703869F21D", multiFeeDistribution: "0x1b6deD5c603d66800B0DDf566Ec316a344C7BcaD", chef: "0xFdAa392FCF8946e8e658B9f36ffbE6659cB40edf", diff --git a/projects/zeus-finance/index.js b/projects/zeus-finance/index.js index 1563cc128d..a0be4f5b22 100644 --- a/projects/zeus-finance/index.js +++ b/projects/zeus-finance/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const {addFundsInMasterChef} = require("../helper/masterchef"); const {stakingUnknownPricedLP} = require("../helper/staking"); const {pool2BalanceFromMasterChefExports} = require("../helper/pool2") @@ -9,7 +10,7 @@ async function tvl(timestamp, block, chainBlocks) { let balances = {}; await addFundsInMasterChef(balances, masterchef, chainBlocks.cronos, "cronos", addr=>{ if (addr.toLowerCase() === "0xf2001b145b43032aaf5ee2884e456ccd805f677d") { - return "0x6b175474e89094c44da98b954eedeac495271d0f" + return ADDRESSES.ethereum.DAI } return `cronos:${addr}` }, undefined, [token], true, true, token); diff --git a/projects/zeus/index.js b/projects/zeus/index.js deleted file mode 100644 index d708dae54c..0000000000 --- a/projects/zeus/index.js +++ /dev/null @@ -1,27 +0,0 @@ -const abi = require("../helper/abis/masterchef.json") -const { transformFantomAddress } = require("../helper/portedTokens"); -const { addFundsInMasterChef } = require("../helper/masterchef"); -const { staking } = require("../helper/staking"); -const { pool2Exports } = require('../helper/pool2') - - -const chef = "0x70C460D876895e72D28ee3125Cac556dC98aD2E1" -const zeus = "0xa5b92ef6d735a2B8A90ADB13EA96d8C9b18613D0" -const zeusFtmLP = "0x921230059Fc5181F95619f1EACaf13Bd30cd0ddD"; - -async function tvl(timestamp, block, chainBlocks) { - const balances = {} - const transformAddress = await transformFantomAddress(); - await addFundsInMasterChef(balances, chef, chainBlocks.fantom, "fantom", transformAddress, abi.poolInfo, [zeus, zeusFtmLP]); - return balances; -} - -module.exports = { - methodology: "TVL includes all farms in MasterChef contract", - fantom: { - tvl, - staking: staking(chef, zeus, "fantom"), - pool2: pool2Exports(chef, [zeusFtmLP], "fantom"), - }, - -} \ No newline at end of file diff --git a/projects/zharta/index.js b/projects/zharta/index.js index 8f37d19609..995b2d646c 100644 --- a/projects/zharta/index.js +++ b/projects/zharta/index.js @@ -1,4 +1,4 @@ -const { tokensBare } = require('../helper/tokenMapping'); +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, } = require('../helper/unwrapLPs') // Vaults @@ -12,7 +12,7 @@ module.exports = { ethereum: { tvl: sumTokensExport({ owners: [collateralVault, punkVault, appraisalVault, LP_CORE], - tokens: [tokensBare.weth], + tokens: [ADDRESSES.ethereum.WETH], resolveNFTs: true, }), } diff --git a/projects/zigzag/index.js b/projects/zigzag/index.js index ca06dd27b3..a5e9308fcd 100644 --- a/projects/zigzag/index.js +++ b/projects/zigzag/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { get } = require('../helper/http') const { toUSDTBalances } = require('../helper/balances') const { sumTokensExport } = require('../helper/unwrapLPs') @@ -23,12 +24,12 @@ module.exports = { }, arbitrum: { tvl: sumTokensExport({ owner: '0xf4037f59c92c9893c43c2372286699430310cfe7', tokens: [ - '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', - '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', - '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', - '0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f', + ADDRESSES.arbitrum.USDC, + ADDRESSES.arbitrum.WETH, + ADDRESSES.arbitrum.USDT, + ADDRESSES.arbitrum.WBTC, '0x912CE59144191C1204E64559FE8253a0e49E6548', - '0xf97f4df75117a78c1a5a0dbb814af92458539fb4', + ADDRESSES.arbitrum.LINK, ]}) } } diff --git a/projects/zilch/abi.js b/projects/zilch/abi.js new file mode 100644 index 0000000000..2f98db614d --- /dev/null +++ b/projects/zilch/abi.js @@ -0,0 +1,90 @@ +module.exports = { + poolLength: { + "inputs": [], + "name": "poolLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + poolInfo: { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "contract IAsset", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseAllocPoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accZilchPerShare", + "type": "uint256" + }, + { + "internalType": "contract IRewarder", + "name": "rewarder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sumOfFactors", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accZilchPerFactorShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adjustedAllocPoint", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, + underlyingToken: { + "inputs": [], + "name": "underlyingToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "constant": true + }, +} \ No newline at end of file diff --git a/projects/zilch/index.js b/projects/zilch/index.js new file mode 100644 index 0000000000..8a8e5e957c --- /dev/null +++ b/projects/zilch/index.js @@ -0,0 +1,22 @@ +const abi = require('./abi') +const { sumTokens2 } = require('../helper/unwrapLPs') +const farm = "0xa65D04f79633BeBdC4Dd785498269e8ABD6A1476" + +async function tvl(_, _b, _cb, { api }) { + const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength, itemAbi: abi.poolInfo, target: farm }) + let pools = poolInfos.map(i => i.lpToken) + const stakingPools = pools.slice(0, 3) + pools = pools.slice(3) + const stakingTokens = await api.multiCall({ abi: abi.underlyingToken, calls: stakingPools }) + const tokens = await api.multiCall({ abi: 'address:want', calls: pools }) + const bals = await api.multiCall({ abi: 'uint256:balanceOf', calls: pools }) + api.addTokens(tokens, bals) + return sumTokens2({ api, tokensAndOwners2: [stakingTokens, stakingPools] }) +} + +module.exports = { + era: { + tvl, + } +} + diff --git a/projects/zk-swap-dex/index.js b/projects/zk-swap-dex/index.js new file mode 100644 index 0000000000..ea67a2ab96 --- /dev/null +++ b/projects/zk-swap-dex/index.js @@ -0,0 +1,30 @@ +const { getLogs } = require('../helper/cache/getLogs') +const { sumTokens2 } = require('../helper/unwrapLPs') + +const FACTORY = '0x91C94381a0F0B7F03d911676bD59d32Bb3410060' +const CHAIN = 'era' + +async function getFactoryLogs(api) { + return getLogs({ + api, + target: FACTORY, + fromBlock: 7891758, + topic: 'PoolCreated(address,address,uint24,int24,address)', + eventAbi: 'event PoolCreated(address indexed token0,address indexed token1,uint24 indexed swapFeeUnits,int24 tickDistance,address pool)', + onlyArgs: true, + }) +} + +async function tvl(timestamp, ethBlock, chainBlocks, { api }) { + const factoryLogs = await getFactoryLogs(api) + let balanceRequests = [] + factoryLogs.forEach(({ token0, token1, pool}) => { + balanceRequests.push([token0, pool]) + balanceRequests.push([token1, pool]) + }) + return sumTokens2({ chain: CHAIN, ethBlock, tokensAndOwners: balanceRequests }) +} + +module.exports = { + era: { tvl, } +} diff --git a/projects/zk-swap/index.js b/projects/zk-swap/index.js new file mode 100644 index 0000000000..0dde03d9ab --- /dev/null +++ b/projects/zk-swap/index.js @@ -0,0 +1,21 @@ +const { getUniTVL } = require('../helper/unknownTokens') +const { stakingUnknownPricedLP } = require("../helper/staking"); + +const factory = "0x5da48a338647e2DD79329b557b5729D8496aD83D"; +const masterchef = "0x7bA76d4e4cBD4A9B7E3fd9a3B7Db067a51ca9682"; +const zks = "0xAbdb137D013b8B328FA43Fc04a6fA340D1CeA733"; + +module.exports = { + misrepresentedTokens: true, + era: { + tvl: getUniTVL({ factory, useDefaultCoreAssets: true, fetchBalances: true, }), + staking: stakingUnknownPricedLP( + masterchef, + zks, + "era", + "0x8489727b22Dd7eF8BbC91E0E88ee781cb2B27274", + (addr) => `era:${addr}` + ), + }, +}; + diff --git a/projects/zkBoost/abi.js b/projects/zkBoost/abi.js new file mode 100644 index 0000000000..5a0e0d5959 --- /dev/null +++ b/projects/zkBoost/abi.js @@ -0,0 +1,5 @@ +module.exports = { + getTotalLockCount: "uint256:getTotalLockCount", + getLock: "function getLock(uint256 index) view returns (tuple(uint256 id, address token, address owner, uint256 amount, uint256 lockDate, uint256 unlockDate))", + getLockAt: "function getLockAt(uint256 index) view returns (tuple(uint256 id, address token, address owner, uint256 amount, uint256 lockDate, uint256 tgeDate, uint256 tgeBps, uint256 cycle, uint256 cycleBps, uint256 unlockedAmount, string description))", +} \ No newline at end of file diff --git a/projects/zkBoost/config.js b/projects/zkBoost/config.js new file mode 100644 index 0000000000..c9bb7bc2dc --- /dev/null +++ b/projects/zkBoost/config.js @@ -0,0 +1,7 @@ +module.exports = { + era: { + vaults: [ + '0x4d2528305C135A056D7e2A0e8BD1946273Fb89D7' + ] + } +} \ No newline at end of file diff --git a/projects/zkBoost/index.js b/projects/zkBoost/index.js new file mode 100644 index 0000000000..5076afaa9d --- /dev/null +++ b/projects/zkBoost/index.js @@ -0,0 +1,18 @@ +const abi = require('./abi') +const config = require('./config') +const { sumTokens2 } = require("../helper/unwrapLPs") + +module.exports = {} + +Object.keys(config).forEach(chain => { + module.exports[chain] = { + tvl: async (timestamp, _block, { [chain]: block }, { api }) => { + const { vaults, } = config[chain] + for (const vault of vaults) { + const data = await api.fetchList({ lengthAbi: abi.getTotalLockCount, itemAbi: abi.getLockAt, target: vault }) + await sumTokens2({ api, owner: vault, tokens: data.map(i => i.token), resolveLP: true, }) + } + return api.getBalances() + } + } +}) \ No newline at end of file diff --git a/projects/zkSwap-finance/index.js b/projects/zkSwap-finance/index.js new file mode 100644 index 0000000000..b115f0565d --- /dev/null +++ b/projects/zkSwap-finance/index.js @@ -0,0 +1,11 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +module.exports = { + era: { + tvl: getUniTVL({ + factory: '0x3a76e377ED58c8731F9DF3A36155942438744Ce3', + fetchBalances: true, + }) + }, + methodology: "TVL is total liquidity of all liquidity pools." +}; diff --git a/projects/zkasino/index.js b/projects/zkasino/index.js index ef9c9f4e01..2066ae9a53 100644 --- a/projects/zkasino/index.js +++ b/projects/zkasino/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokensExport, nullAddress, } = require('../helper/unwrapLPs') // https://docs.zkasino.io/developer/contracts @@ -14,16 +15,16 @@ const owners = [ const config = { bsc: { - tokens: ['0xe9e7cea3dedca5984780bafc599bd69add087d56', nullAddress,] + tokens: [ADDRESSES.bsc.BUSD, nullAddress,] }, polygon: { - tokens: ['0x2791bca1f2de4661ed88a30c99a7a9449aa84174', nullAddress,] + tokens: [ADDRESSES.polygon.USDC, nullAddress,] }, fantom: { - tokens: ['0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', nullAddress,] + tokens: [ADDRESSES.fantom.USDC, nullAddress,] }, arbitrum: { - tokens: ['0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', '0xADA42bb73b42e0472A994218fb3799dFCDA21237', '0x912CE59144191C1204E64559FE8253a0e49E6548', nullAddress,] + tokens: [ADDRESSES.arbitrum.USDT, ADDRESSES.arbitrum.USDC, '0xADA42bb73b42e0472A994218fb3799dFCDA21237', '0x912CE59144191C1204E64559FE8253a0e49E6548', nullAddress,] } } diff --git a/projects/zkbob-cdp/index.js b/projects/zkbob-cdp/index.js new file mode 100644 index 0000000000..c8fb337571 --- /dev/null +++ b/projects/zkbob-cdp/index.js @@ -0,0 +1,11 @@ +const { sumTokensExport } = require('../helper/unwrapLPs') + +module.exports = { + polygon: { + tvl: sumTokensExport({ + blacklistedTokens: ['0xB0B195aEFA3650A6908f15CdaC7D92F8a5791B0B'], + owner: '0xFDBC53080AFb08d7a3A2420e902c8AeC05E4aE73', + resolveUniV3: true + }) + } +} \ No newline at end of file diff --git a/projects/zkbob/index.js b/projects/zkbob/index.js index bd15428193..e3983c16ca 100644 --- a/projects/zkbob/index.js +++ b/projects/zkbob/index.js @@ -1,13 +1,23 @@ const { sumTokensExport } = require('../helper/unwrapLPs') +const ADDRESSES = require('../helper/coreAssets.json') module.exports = { polygon: { tvl: sumTokensExport({ - chain: 'polygon', tokens: [ '0xB0B195aEFA3650A6908f15CdaC7D92F8a5791B0B', // BOB + ADDRESSES.polygon.USDC, ], owner: '0x72e6b59d4a90ab232e55d4bb7ed2dd17494d62fb' - }) - } + }), + }, + optimism: { + tvl: sumTokensExport({ + tokens: [ + '0xb0b195aefa3650a6908f15cdac7d92f8a5791b0b', // BOB + ADDRESSES.optimism.WETH_1, + ], + owners: ['0x1ca8c2b9b20e18e86d5b9a72370fc6c91814c97c', '0x58320A55bbc5F89E5D0c92108F762Ac0172C5992'] + }), + }, } \ No newline at end of file diff --git a/projects/zkdefi/index.js b/projects/zkdefi/index.js new file mode 100644 index 0000000000..e560c45f13 --- /dev/null +++ b/projects/zkdefi/index.js @@ -0,0 +1,12 @@ +const { getUniTVL } = require("../helper/unknownTokens"); + +module.exports = { + misrepresentedTokens: true, + polygon_zkevm: { + tvl: getUniTVL({ + fetchBalances: true, + useDefaultCoreAssets: true, + factory: "0xfDC8ec444F482Fe8aFe0a00114548DC9ff729568", + }), + }, +}; diff --git a/projects/zkdx/index.js b/projects/zkdx/index.js new file mode 100644 index 0000000000..1bb227c9cc --- /dev/null +++ b/projects/zkdx/index.js @@ -0,0 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const {staking} = require("../helper/staking"); + +module.exports = { + methodology: 'zkDX counts the staking values as tvl', + start: 3744214, + era: { + tvl: staking( + ["0x79033C597B7d8e752a7511cF24512f4A7217C0B8", "0xd6cce119B45Efcb378a4735a96aE08826A37ca1c", + "0xDC9e925D2BB683d47203eCEddBD1d733EC035CaE","0xA9C595C8F718898f7eb96964Bc92517365c901C9"], + [ADDRESSES.era.WETH, ADDRESSES.era.USDC] + ) + + } +}; diff --git a/projects/zklend/abi.js b/projects/zklend/abi.js new file mode 100644 index 0000000000..9a3879ef62 --- /dev/null +++ b/projects/zklend/abi.js @@ -0,0 +1,25 @@ +const market = [ + { + "name": "get_total_debt_for_token", + "type": "function", + "inputs": [ + { + "name": "token", + "type": "felt" + } + ], + "outputs": [ + { + "name": "debt", + "type": "felt" + } + ], + "stateMutability": "view" + }, +] +const marketAbi = {} +market.forEach(i => marketAbi[i.name] = i) + +module.exports = { + marketAbi +} \ No newline at end of file diff --git a/projects/zklend/index.js b/projects/zklend/index.js new file mode 100644 index 0000000000..2f62c986dc --- /dev/null +++ b/projects/zklend/index.js @@ -0,0 +1,38 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { BigNumber } = require("bignumber.js"); +const { multiCall, sumTokens } = require('../helper/chain/starknet') +const { marketAbi } = require('./abi'); + +const valueToBigNumber = (amount) => { + if (amount instanceof BigNumber) { + return amount; + } + return new BigNumber(amount); +} +const market = '0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05' + +const assets = [ + ADDRESSES.starknet.WBTC, + ADDRESSES.starknet.ETH, + ADDRESSES.starknet.USDC, + ADDRESSES.starknet.DAI, + ADDRESSES.starknet.USDT +] + +async function tvl(_, _1, _2, { api }) { + return sumTokens({ api, owner: market, tokens: assets }) +} + +async function borrowed(_, _1, _2, { api }) { + let data = await multiCall({ calls: assets, target: market, abi: marketAbi.get_total_debt_for_token }); + data = data.map(i => valueToBigNumber(i).toNumber()) + api.addTokens(assets, data) +} + +module.exports = { + methodology: 'Value of user supplied asset on zkLend is considered as TVL', + starknet: { + tvl, + borrowed + }, +} diff --git a/projects/zks-miner/index.js b/projects/zks-miner/index.js index c69d66fc5c..9591eaf13e 100644 --- a/projects/zks-miner/index.js +++ b/projects/zks-miner/index.js @@ -6,6 +6,9 @@ const DIAMOND_MINER = "0x755747467d97619a670e228eBEc8eFE285c37F01"; const GOLD_MINER = "0x340e443C85ecd7eB1E918744D4A35A1e6101bbd4"; module.exports = { + hallmarks: [ + [1682726400, "Rug Pull"] + ], methodology: 'TLV silver, diamond and gold is total amount miner deposit to contract silver, diamond and gold', era: { tvl: sumTokensExport({ owners: [SILVER_MINER, DIAMOND_MINER, GOLD_MINER,], tokens: [nullAddress] }) diff --git a/projects/zkswap-2/index.js b/projects/zkswap-2/index.js new file mode 100644 index 0000000000..98b210d6cb --- /dev/null +++ b/projects/zkswap-2/index.js @@ -0,0 +1,9 @@ +const { getUniTVL } = require('../helper/unknownTokens') + +const factory = "0xeeE1Af1CE68D280e9cAfD861B7d4af776798F18d"; +const zks = ""; + +module.exports = { + misrepresentedTokens: true, + era: { tvl: getUniTVL({ factory, useDefaultCoreAssets: true, fetchBalances: true }) }, +}; \ No newline at end of file diff --git a/projects/zkswap/v1.js b/projects/zkswap/v1.js index d0004cf63f..1157345192 100644 --- a/projects/zkswap/v1.js +++ b/projects/zkswap/v1.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getLogs } = require('../helper/cache/getLogs') @@ -9,7 +10,7 @@ module.exports = async function tvl(timestamp, block, _1, { api }) { // ETH const ETHBalance = (await sdk.api.eth.getBalance({target: MAIN, block})).output; const balances = { - '0x0000000000000000000000000000000000000000': ETHBalance + [ADDRESSES.null]: ETHBalance } // ERC20 diff --git a/projects/zkswap/v2.js b/projects/zkswap/v2.js index f7fa430fe2..6f26e8d5b9 100644 --- a/projects/zkswap/v2.js +++ b/projects/zkswap/v2.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require('@defillama/sdk'); const { getLogs } = require('../helper/cache/getLogs') @@ -9,7 +10,7 @@ module.exports = async function tvl(timestamp, block, _1, { api }) { // ETH const ETHBalance = (await sdk.api.eth.getBalance({target: MAIN, block})).output; const balances = { - '0x0000000000000000000000000000000000000000': ETHBalance + [ADDRESSES.null]: ETHBalance } // ERC20 diff --git a/projects/zodiac/index.js b/projects/zodiac/index.js index 7d21294666..65949d4dc7 100644 --- a/projects/zodiac/index.js +++ b/projects/zodiac/index.js @@ -1,11 +1,15 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { ohmTvl } = require("../helper/ohm"); const treasuryAddress = "0xf73055C88f8cF87E0cfaE6773665943083609640"; -const USDT = "0x55d398326f99059ff775485246999027b3197955"; +const USDT = ADDRESSES.bsc.USDT; const Staking = "0x1450d20E99F7e8c27864a8D9e6E3d0694ed567DA"; const ZD = "0x98051143830fa99848E7059E97AcB03B3cc62403"; const ZD_USDT_POOL = "0x4cb107576c7f3d59e3355ce760af5cbc36cf5e0d"; +module.exports.hallmarks=[ + [1641254400,"Rug Pull"] +], module.exports = ohmTvl(treasuryAddress, [ [USDT, false], [ZD_USDT_POOL, true], diff --git a/projects/zomb2/index.js b/projects/zomb2/index.js index 594f0a938b..54cd40a12a 100644 --- a/projects/zomb2/index.js +++ b/projects/zomb2/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { zombiTvl } = require("../zombi/zombi"); const token = "0xA87bcE04d4a396DF40cC1be3a21CF04592C08290"; @@ -14,7 +15,7 @@ const pool2LPs = [ ]; const listedTokenGeneris = [ - '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83',//wftm + ADDRESSES.fantom.WFTM,//wftm '0x74b23882a30290451A17c44f4F05243b6b58C76d',//weth '0x841FAD6EAe12c286d1Fd18d1d525DFfA75C7EFFE',//boo '0xaD996A45fd2373ed0B10Efa4A8eCB9de445A4302',//alpaca diff --git a/projects/zombi/index.js b/projects/zombi/index.js index e0acab24b2..c8f7f81b8f 100644 --- a/projects/zombi/index.js +++ b/projects/zombi/index.js @@ -1,3 +1,4 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { zombiTvl } = require("./zombi"); const token = "0xda5db6c2a2fd53a2d3fc4246bbd8acce5f93bae1"; @@ -11,12 +12,15 @@ const pool2LPs = [ "0x5db45a30732cf98fda72b9b91a0c554dc1f2e83b" ]; const listedTokenGeneris = [ - '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83',//wftm + ADDRESSES.fantom.WFTM,//wftm '0x74b23882a30290451A17c44f4F05243b6b58C76d',//weth '0x841FAD6EAe12c286d1Fd18d1d525DFfA75C7EFFE',//boo '0xaD996A45fd2373ed0B10Efa4A8eCB9de445A4302'//alpaca ] module.exports = { + hallmarks: [ + [1646870400, "Rug Pull"] + ], ...zombiTvl(token, share, rewardPool, rewardPoolGeneris, masonry, pool2LPs, listedTokenGeneris, "fantom", undefined, false, "0xe577DF94b4Ea94399B7438e27EA1Ba81717464A0") } diff --git a/projects/zomma/index.js b/projects/zomma/index.js new file mode 100644 index 0000000000..ee54fb7411 --- /dev/null +++ b/projects/zomma/index.js @@ -0,0 +1,16 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { sumTokensExport } = require("../helper/sumTokens"); + +const ZOMMA_CONTRACT_old = "0x709051774c60c0527dbaf880f41425eae036efaf"; +const ZOMMA_CONTRACT = "0x7bf1f1c2d8caa200b068747487cb9bf109e529f1"; +const USDC_CONTRACT = ADDRESSES.era.USDC; + +module.exports = { + methodology: "TVL is calculated as the sum of USDC deposited by traders and the liquidity in the Pools.", + era: { + tvl: sumTokensExport({ + owners: [ZOMMA_CONTRACT,ZOMMA_CONTRACT_old], + tokens: [USDC_CONTRACT], + }), + }, +}; \ No newline at end of file diff --git a/projects/zoodao/abis/battle-arena-abi.json b/projects/zoodao/abis/battle-arena-abi.json new file mode 100644 index 0000000000..fd649c183b --- /dev/null +++ b/projects/zoodao/abis/battle-arena-abi.json @@ -0,0 +1,3 @@ +{ + "sharesToTokens": "function sharesToTokens(uint256 sharesAmount) public returns (uint256 tokens)" +} diff --git a/projects/zoodao/index.js b/projects/zoodao/index.js new file mode 100644 index 0000000000..5da95abe17 --- /dev/null +++ b/projects/zoodao/index.js @@ -0,0 +1,32 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const battleArenaAbi = require('./abis/battle-arena-abi.json'); +const { stakings } = require('../helper/staking'); + +const VAULT_CONTRACT = '0x1C55649f73CDA2f72CEf3DD6C5CA3d49EFcF484C'; +const BATTLE_ARENA_CONTRACT = '0x0ADeb5A930875606F325e114FD5147148e042828'; +const FRAX_TOKEN = ADDRESSES.moonbeam.FRAX +const ZOODAO_TOKEN = "0x7cd3e6e1A69409deF0D78D17a492e8e143F40eC5" +const VE_ZOO_CONTRACT = "0x1bd77c71568f723d6906ea80fee45f1f52834c15" +const X_ZOO_CONTRACT = "0x1c535c24f911a8741018cf09f3030ab6e1b910cf" + +const stakingContracts = [ + BATTLE_ARENA_CONTRACT, + VE_ZOO_CONTRACT, + X_ZOO_CONTRACT +]; + +async function tvl(_, _1, _2, { api }) { + const vaultStablecoinStaked = await api.call({ abi: 'erc20:balanceOf', target: VAULT_CONTRACT, params: [BATTLE_ARENA_CONTRACT] }); + + // convert m.FRAX to FRAX + const totalFRAX = await api.call({ abi: battleArenaAbi.sharesToTokens, target: BATTLE_ARENA_CONTRACT, params: [vaultStablecoinStaked] }); + api.add(FRAX_TOKEN, totalFRAX) +} + +module.exports = { + methodology: "Counts the supplied value of FRAX and ZOO through ZooDAO's contracts", + moonbeam: { + tvl, + staking: stakings(stakingContracts, ZOODAO_TOKEN) + }, +}; diff --git a/projects/zoomswap/index.js b/projects/zoomswap/index.js index 051fbfcbe8..28f2a440b5 100644 --- a/projects/zoomswap/index.js +++ b/projects/zoomswap/index.js @@ -1,7 +1,8 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { masterChefExports, } = require("../helper/masterchef") const { mergeExports, } = require("../helper/utils") -const token1 = "0x86702a7f8898B172de396eB304d7D81207127915"; +const token1 = ADDRESSES.iotex.ZOOM; const token2 = "0xf87aed04889a1dd0159d9C22B0D57b345Ab16dDD"; const masterchef1 = "0x92F1a54835436Ad1858018f11d017fCE31756C17"; const masterchef2 = "0x1ba725d2ba56482f11fee3642f1c739d25018e4d"; diff --git a/projects/zootopia-finance/index.js b/projects/zootopia-finance/index.js index c07d0c3ad2..19ae5d2884 100644 --- a/projects/zootopia-finance/index.js +++ b/projects/zootopia-finance/index.js @@ -1,19 +1,23 @@ +const ADDRESSES = require('../helper/coreAssets.json') const { sumTokens2 } = require('../helper/unwrapLPs') // ztp swap address const SWAP_ADDR = "0xCdD4396527b6681775173839002E6af201885CB8"; // stable coin address -const BUSD = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; +const BUSD = ADDRESSES.bsc.BUSD; const DAI = "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3"; -const USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"; -const USDT = "0x55d398326f99059fF775485246999027B3197955"; +const USDC = ADDRESSES.bsc.USDC; +const USDT = ADDRESSES.bsc.USDT; async function tvl(timestamp, ethereumBlock, { bsc: block }) { return sumTokens2({ chain: 'bsc', block, owner: SWAP_ADDR, tokens: [BUSD, DAI, USDC, USDT,]}) } module.exports = { + hallmarks: [ + [1667174400, "Rug Pull"] + ], bsc: { tvl, }, diff --git a/projects/zunami/index.js b/projects/zunami/index.js index 9888333c4d..01315f8b56 100644 --- a/projects/zunami/index.js +++ b/projects/zunami/index.js @@ -1,18 +1,27 @@ +const ADDRESSES = require('../helper/coreAssets.json') const sdk = require("@defillama/sdk"); const abi = require("./abi.json"); const zunamiContract = "0x2ffCC661011beC72e1A9524E12060983E74D14ce"; +const zunamiApsContract = "0xCaB49182aAdCd843b037bBF885AD56A3162698Bd"; const zunamiHoldingsDecimals = 18; -const usdt = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; +const usdt = ADDRESSES.ethereum.USDT; const usdtDecimals = 6; async function ethTvl(timestamp, block) { - const totalHoldings = (await sdk.api.abi.call({ + const totalHoldingsOmnipool = (await sdk.api.abi.call({ block, abi: abi.totalHoldings, target: zunamiContract, })).output / 10 ** (zunamiHoldingsDecimals - usdtDecimals); + const totalHoldingsAps = (await sdk.api.abi.call({ + block, + abi: abi.totalHoldings, + target: zunamiApsContract, + })).output / 10 ** (zunamiHoldingsDecimals - usdtDecimals); + + const totalHoldings = totalHoldingsOmnipool + totalHoldingsAps; return { [usdt]: totalHoldings, diff --git a/projects/zyberswap-v3/index.js b/projects/zyberswap-v3/index.js index 1cd8e80e44..1cace364a1 100644 --- a/projects/zyberswap-v3/index.js +++ b/projects/zyberswap-v3/index.js @@ -5,5 +5,10 @@ module.exports = uniV3Export({ factory: '0x9c2abd632771b433e5e7507bcaa41ca3b25d8544', fromBlock: 62714800, isAlgebra: true, + }, + optimism: { + factory: '0x0c8f7b0cb986b31c67d994fb5c224592a03a4afd', + fromBlock: 105900073, + isAlgebra: true, } }) diff --git a/pull_request_template.md b/pull_request_template.md index 2348308298..4f4ead273d 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -4,8 +4,8 @@ > - If you would like to add a `liquidations` adapter, please refer to [this readme document](https://github.com/DefiLlama/DefiLlama-Adapters/tree/main/liquidations) for details. 1. Once your adapter has been merged, it takes time to show on the UI. If more than 24 hours have passed, please let us know in Discord. -2. Sorry, We no longer accept fetch adapter for new projects, we prefer the tvl to computed from blockchain data, if you have trouble with creating a the adapter, please hop onto our discord, we are happy to assist you. -3. The protocol is usually listed within 24 hours of merging the PR +2. Please enable "Allow edits by maintainers" while putting up the PR. +3. Sorry, We no longer accept fetch adapter for new projects, we prefer the tvl to computed from blockchain data, if you have trouble with creating a the adapter, please hop onto our discord, we are happy to assist you. 4. Please fill the form below **only if the PR is for listing a new protocol** else it can be ignored/replaced with reason/details about the PR 5. **For updating listing info** It is a different repo, you can find your listing in this file: https://github.com/DefiLlama/defillama-server/blob/master/defi/src/protocols/data2.ts, you can edit it there and put up a PR 6. Do not edit/push `package-lock.json` file as part of your changes, we use lockfileVersion 2, and most use v1 and using that messes up our CI @@ -59,3 +59,5 @@ ##### methodology (what is being counted as tvl, how is tvl being calculated): + +##### Github org/user (Optional, if your code is open source, we can track activity): \ No newline at end of file diff --git a/test.js b/test.js index b0ee4e643d..c2c793a6d8 100644 --- a/test.js +++ b/test.js @@ -236,7 +236,7 @@ function checkExportKeys(module, filePath, chains) { || (filePath.length === 1 && !['.js', ''].includes(path.extname(filePath[0]))) // matches .../projects/projectXYZ.js or .../projects/projectXYZ || (filePath.length === 2 && !(['api.js', 'index.js', 'apiCache.js',].includes(filePath[1]) // matches .../projects/projectXYZ/index.js - || ['treasury',].includes(filePath[0]) // matches .../projects/treasury/project.js + || ['treasury', 'entities'].includes(filePath[0]) // matches .../projects/treasury/project.js ))) process.exit(0) @@ -359,11 +359,9 @@ async function computeTVL(balances, timestamp) { readKeys.forEach(i => unknownTokens[i] = true) const { errors } = await PromisePool.withConcurrency(5) - .for(sliceIntoChunks(readKeys, 200)) + .for(sliceIntoChunks(readKeys, 100)) .process(async (keys) => { - tokenData.push((await axios.post(`https://coins.llama.fi/prices`, { - coins: keys - })).data.coins) + tokenData.push((await axios.get(`https://coins.llama.fi/prices/current/${keys.join(',')}`)).data.coins) }) if (errors && errors.length) @@ -381,7 +379,7 @@ async function computeTVL(balances, timestamp) { if (data == undefined) tokenBalances[`UNKNOWN (${address})`] = balance if ('confidence' in data && data.confidence < confidenceThreshold) return - if (Math.abs(data.timestamp - Date.now()/1e3) > (24*3600)) { + if (Math.abs(data.timestamp - Date.now() / 1e3) > (24 * 3600)) { console.log(`Price for ${address} is stale, ignoring...`) return } diff --git a/utils/contracts/TestUniQuery.sol b/utils/contracts/TestUniQuery.sol new file mode 100644 index 0000000000..44587597d5 --- /dev/null +++ b/utils/contracts/TestUniQuery.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IUniswapV2Factory { + function allPairsLength() external view returns (uint); + + function allPairs(uint) external view returns (address); +} + +contract TestUniQuery { + constructor(address factory) { + IUniswapV2Factory uniswapFactory = IUniswapV2Factory(factory); + uint pairCount = uniswapFactory.allPairsLength(); + + // encode the return data + bytes memory _data = abi.encode(pairCount); + // force constructor to return data via assembly + assembly { + // abi.encode adds an additional offset (32 bytes) that we need to skip + let _dataStart := add(_data, 32) + // msize() gets the size of active memory in bytes. + // if we subtract msize() from _dataStart, the output will be + // the amount of bytes from _dataStart to the end of memory + // which due to how the data has been laid out in memory, will coincide with + // where our desired data ends. + let _dataEnd := sub(msize(), _dataStart) + // starting from _dataStart, get all the data in memory. + return(_dataStart, _dataEnd) + } + } +} diff --git a/utils/contracts/UniV2TVL.sol b/utils/contracts/UniV2TVL.sol new file mode 100644 index 0000000000..dc46c81a85 --- /dev/null +++ b/utils/contracts/UniV2TVL.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IUniswapV2Pair { + function token0() external view returns (address); + + function token1() external view returns (address); + + function getReserves() + external + view + returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); +} + +interface IUniswapV2Factory { + function allPairsLength() external view returns (uint); + + function allPairs(uint) external view returns (address); +} + +contract UniV2TVL { + struct KeyValuePair { + address key; + uint value; + } + + mapping(address => uint) public tvlMap; + mapping(address => bool) public isBaseToken; + address[] public tokens; + + constructor( + address factory, + address[] memory baseTokens, + bool includeQuoteTokens, + uint startIndex, + uint endIndex + ) { + IUniswapV2Factory uniswapFactory = IUniswapV2Factory(factory); + uint pairCount = uniswapFactory.allPairsLength(); + if (endIndex == 0 || endIndex > pairCount) endIndex = pairCount; + + // Create a set of base tokens for efficient membership check + for (uint i = 0; i < baseTokens.length; i++) { + isBaseToken[baseTokens[i]] = true; + } + + for (uint i = startIndex; i < endIndex; i++) { + address pairAddress = uniswapFactory.allPairs(i); + IUniswapV2Pair pair = IUniswapV2Pair(pairAddress); + address token0 = pair.token0(); + address token1 = pair.token1(); + uint reserve0; + uint reserve1; + (reserve0, reserve1, ) = pair.getReserves(); + bool isToken0BaseToken = isBaseToken[token0]; + bool isToken1BaseToken = isBaseToken[token1]; + + if ( reserve0 == 0 || reserve1 == 0) continue; + + if (isToken0BaseToken && isToken1BaseToken) { + if (tvlMap[token0] == 0) tokens.push(token0); + if (tvlMap[token1] == 0) tokens.push(token1); + tvlMap[token0] += reserve0; + tvlMap[token1] += reserve1; + } else if (isToken0BaseToken) { + if (tvlMap[token0] == 0) tokens.push(token0); + tvlMap[token0] += reserve0 * 2; + } else if (isToken1BaseToken) { + if (tvlMap[token1] == 0) tokens.push(token1); + tvlMap[token1] += reserve1 * 2; + } else if (includeQuoteTokens) { + if (tvlMap[token0] == 0) tokens.push(token0); + if (tvlMap[token1] == 0) tokens.push(token1); + tvlMap[token0] += reserve0; + tvlMap[token1] += reserve1; + } + } + + KeyValuePair[] memory returnData = new KeyValuePair[](tokens.length); + for (uint i = 0; i < tokens.length; i++) { + returnData[i] = KeyValuePair(tokens[i], tvlMap[tokens[i]]); + } + + // encode the return data + bytes memory _data = abi.encode(returnData); + // force constructor to return data via assembly + assembly { + // abi.encode adds an additional offset (32 bytes) that we need to skip + let _dataStart := add(_data, 32) + // msize() gets the size of active memory in bytes. + // if we subtract msize() from _dataStart, the output will be + // the amount of bytes from _dataStart to the end of memory + // which due to how the data has been laid out in memory, will coincide with + // where our desired data ends. + let _dataEnd := sub(msize(), _dataStart) + // starting from _dataStart, get all the data in memory. + return(_dataStart, _dataEnd) + } + } +} diff --git a/utils/formatAbis.js b/utils/formatAbis.js index 5359828c82..afc7e52fc4 100644 --- a/utils/formatAbis.js +++ b/utils/formatAbis.js @@ -3,7 +3,7 @@ const glob = require('glob') const jsonfile = require('jsonfile') const fs = require('fs') -let data = require('../projects/test/abi.js') +let data = require('../projects/test/abi.json') const rootFolder = '../projects' const rootFolderTest = '../projects/yfii' @@ -59,6 +59,10 @@ function isTransformable(obj, file) { function transform(obj, file) { const res = {} for (const [key, value] of Object.entries(obj)) { + if (['constructor', 'error'].includes(value.type)) { + console.log('skipping element of type: ', value.type) + continue; + } if (!value.inputs) console.log('inputs missing', file) const iLen = value.inputs.length === 0 const oLen = value.outputs?.length === 1 @@ -87,7 +91,7 @@ function print() { } console.log(res) res = transform(res) - fs.writeFileSync(__dirname+'/../projects/test/abi.js', 'module.exports = '+JSON.stringify(res, null, 2)) + fs.writeFileSync(__dirname+'/../projects/test/abi.json', JSON.stringify(res, null, 2)) // console.log(res) console.log(JSON.stringify(res, null, 2)) } diff --git a/utils/package-lock.json b/utils/package-lock.json index 7747b92ee8..6c66469586 100644 --- a/utils/package-lock.json +++ b/utils/package-lock.json @@ -9,7 +9,8 @@ "version": "0.0.1", "license": "ISC", "dependencies": { - "glob": "^8.0.3" + "glob": "^8.0.3", + "solc": "^0.8.20" }, "devDependencies": { "inquirer": "^8.2.4", @@ -205,6 +206,19 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -258,6 +272,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -701,6 +734,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -723,6 +761,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -799,7 +845,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -875,12 +920,40 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/solc": { + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", + "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -938,7 +1011,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -1125,6 +1197,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -1166,6 +1248,11 @@ "escape-string-regexp": "^1.0.5" } }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1505,6 +1592,11 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1521,6 +1613,11 @@ "is-unicode-supported": "^0.1.0" } }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -1578,8 +1675,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "readable-stream": { "version": "3.6.0", @@ -1629,12 +1725,31 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "solc": { + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", + "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", + "requires": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1683,7 +1798,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } diff --git a/utils/package.json b/utils/package.json index cb2ce215f1..49d6ccc564 100644 --- a/utils/package.json +++ b/utils/package.json @@ -13,6 +13,7 @@ "inquirer-fuzzy-path": "^2.3.0" }, "dependencies": { - "glob": "^8.0.3" + "glob": "^8.0.3", + "solc": "^0.8.20" } } diff --git a/utils/scripts/changeCoreAssetsFormat.js b/utils/scripts/changeCoreAssetsFormat.js new file mode 100644 index 0000000000..0ce1483633 --- /dev/null +++ b/utils/scripts/changeCoreAssetsFormat.js @@ -0,0 +1,44 @@ +const assets = require("../../projects/helper/coreAssets.json"); +const fs = require('fs') + +const sdk = require('@defillama/sdk') +const newJson = {} + +async function run() { + const entries = Object.entries(assets) + for (const entry of entries) { + console.log('for ', entry[0]) + await updateNames(entry) + fs.writeFileSync('./coreAssets.json', JSON.stringify(newJson, null, 2)) + } +} + +async function updateNames([chain, addresses]) { + const api = new sdk.ChainApi({ chain }) + if (!addresses.length) return; + const chainObj = {} + newJson[chain] = chainObj + if (!addresses[addresses.length -1].startsWith('0x') || ['starknet', 'aptos'].includes(chain)) { + addresses.forEach((v, i) => { + const key = 'temp_' + i + chainObj[key] = v + }) + console.log('------- non-evm chain: ', chain) + return; + } + const symbols = await api.multiCall({ abi: 'string:symbol', calls: addresses, permitFailure: true}) + addresses.forEach((v, i) => { + let key = symbols[i] + if (!key) { + key = v === '0x0000000000000000000000000000000000000000' ? 'null' : 'temp_' + i + } + key = key.replace(/\W+/g, '_') + chainObj[key] = v + }) +} + + +run().then(() => { + console.log('done') + process.exit(0) +}) \ No newline at end of file diff --git a/utils/scripts/changeCoreAssetsFormat2.js b/utils/scripts/changeCoreAssetsFormat2.js new file mode 100644 index 0000000000..a9d5c7dbe4 --- /dev/null +++ b/utils/scripts/changeCoreAssetsFormat2.js @@ -0,0 +1,71 @@ +const assets = require("../../projects/helper/coreAssets.json"); +const fs = require('fs') +const axios = require('axios') + +const newJson = {} + +async function run() { + const entries = Object.entries(assets) + await Promise.all(entries.map(checkSymbols)) + // for (const entry of entries) { + // await getSymbols(entry) + // fs.writeFileSync('./projects/helper/coreAssets.json', JSON.stringify(newJson, null, 2)) + // } + // for (const entry of entries) { + // await checkSymbols(entry) + // } +} + +async function getSymbols([chain, mapping]) { + newJson[chain] = mapping + let reverseMapping = {} + const tokens = Object.entries(mapping).map(([key, value]) => { + if (!key.startsWith('temp_')) return; + const key2 = chain + ':' + value + reverseMapping[key2] = key + return key2 + }).filter(i => i) + if (!tokens.length) return; + const { data: { coins } } = await axios.get('https://coins.llama.fi/prices/current/' + tokens.join(',')) + const symbolSet = new Set() + Object.entries(coins).forEach(([key, { symbol }]) => { + const key2 = reverseMapping[key] + if (!key2) { + console.log('Bug: ', key, chain) + throw new Error('Fix this') + } + const value = mapping[key2] + delete mapping[key2] + let iterator = 0 + let label = symbol + while (symbolSet.has(label)) { + label = symbol + '_' + ++iterator + } + symbolSet.add(label) + mapping[label] = value + }) + +} + +async function checkSymbols([chain, mapping]) { + try { + if (chain === 'null') return; + newJson[chain] = mapping + let tokens = Object.entries(mapping).map(([key, value]) => { + return chain + ':' + value + }) + if (!tokens.length) return; + const { data: { coins } } = await axios.get('https://coins.llama.fi/prices/current/' + tokens.join(',')) + Object.entries(coins).forEach(([key, { symbol }]) => { + tokens = tokens.filter(i => i !== key) + }) + if (tokens.length) console.log('failed to find price:', chain, tokens) + } catch (e) { + console.log('error in ', chain) + } +} + +run().then(() => { + console.log('done') + process.exit(0) +}) \ No newline at end of file diff --git a/utils/scripts/formatAllAbis.js b/utils/scripts/formatAllAbis.js new file mode 100644 index 0000000000..de1b736f85 --- /dev/null +++ b/utils/scripts/formatAllAbis.js @@ -0,0 +1,76 @@ +const ethers = require('ethers') +const glob = require('glob') +const jsonfile = require('jsonfile') +const fs = require('fs') + +const rootFolder = '../../projects' + +// https://docs.soliditylang.org/en/latest/abi-spec.html +let knownTypes = [ + 'string', 'address', 'bool', + 'int', 'int8', 'int16', 'int32', 'int64', 'int128', 'int256', + 'uint', 'uint8', 'uint16', 'uint32', 'uint64', 'uint128', 'uint256', +]; + +([...knownTypes]).forEach(i => knownTypes.push(i + '[]')) // support array type for all known types +knownTypes = new Set(knownTypes) + +function run() { + glob(rootFolder + '/**/*.json', {}, async (e, files) => { + if (e) throw e + console.log('JSON file count', files.length) + const objs = files.map(file => ({ + file, + data: jsonfile.readFileSync(file) + })) + const isTransformables = objs.filter(i => isTransformable(i.data, i.file)) + const isNotTransformables = objs.filter(i => !isTransformable(i.data, i.file)).filter(i => Object.values(i.data).some(i => typeof i !== 'string')) + console.log(isNotTransformables.length) + const files2 = isNotTransformables.map(i => i.file) + console.log(JSON.stringify(files2, null, 2)) + // console.log(isTransformables.length) + const fileWriteOptions = { spaces: 2, finalEOL: false } + isTransformables.forEach(i => i.newData = transform(i.data, i.file)) + isTransformables.forEach(i => jsonfile.writeFile(i.file, i.newData, fileWriteOptions)) + }) +} + +const validStates = new Set(['view', 'pure', 'nonpayable']) +const isValidState = i => validStates.has(i.stateMutability) || i.constant === true + +function isTransformable(obj, file) { + if (typeof obj !== 'object' || Array.isArray(obj)) return false; + const values = Object.values(obj) + const isAbi0 = i => isValidState(i) + const isAbi = i => (i.stateMutability === 'view' || i.stateMutability === 'pure' || i.stateMutability === 'nonpayable') && i.type === 'function' + const i = values[0] + if (!isAbi0(i)) return false + const edgeCase = values.find(i => !isAbi(i)) + if (edgeCase) { + const first = Object.values(edgeCase).pop() + if (!Array.isArray(edgeCase) && !isAbi(first)) + console.log('edge case: ', file, edgeCase) + } + return !edgeCase +} + +function transform(obj, file) { + const res = {} + for (const [key, value] of Object.entries(obj)) { + if (!value.inputs) console.log('inputs missing', file) + const iLen = value.inputs.length === 0 + const oLen = value.outputs?.length === 1 + const oType = oLen && value.outputs[0].type + if (iLen && oLen && knownTypes.has(oType)) { + res[key] = `${oType}:${value.name}` + } else { + const iface = new ethers.utils.Interface([value]) + res[key] = iface.format(ethers.utils.FormatTypes.full)[0] + } + } + + return res +} + +run() + diff --git a/utils/scripts/testBatchCall.js b/utils/scripts/testBatchCall.js new file mode 100644 index 0000000000..b84f071319 --- /dev/null +++ b/utils/scripts/testBatchCall.js @@ -0,0 +1,24 @@ +const fs = require('fs') +const coreAssets = require('../../projects/helper/coreAssets.json') +const sdk = require('@defillama/sdk') + +const bytecode = fs.readFileSync(__dirname + `/../artifacts/UniV2TVL.bytecode`, 'utf8') + +async function main() { + await getUniTvl('0x460b2005b3318982feADA99f7ebF13e1D6f6eFfE', 'ethereum') + await getUniTvl('0x21cadeb92c8bbfbef98c3098846f0999209c3a97', 'avax') + await getUniTvl('0xAaA04462e35f3e40D798331657cA015169e005d7', 'dogechain') +} + +async function getUniTvl(factory, chain = 'ethereum') { + const api = new sdk.ChainApi({ chain}) + const res = await api.bytecodeCall({ + bytecode, + inputs: [factory, Object.values(coreAssets[chain]), false, 0, 50], + inputTypes: ['address', 'address[]', 'bool', 'uint256', 'uint256'], + outputTypes: ['tuple(address,uint256)[]'] + }) + console.log(chain, factory, res) +} + +main() \ No newline at end of file diff --git a/utils/scripts/testCompiler.js b/utils/scripts/testCompiler.js new file mode 100644 index 0000000000..eb3dc8df0e --- /dev/null +++ b/utils/scripts/testCompiler.js @@ -0,0 +1,28 @@ +const solc = require('solc'); +const fs = require('fs'); + +const contractName = 'UniV2TVL'; +const contractFile = `${contractName}.sol`; +// Solidity contract code +const solidityCode = fs.readFileSync(__dirname+`/../contracts/${contractFile}`, 'utf8'); + +function compileContract(contractCode) { + const input = { + language: 'Solidity', + sources: { + [contractFile]: { + content: contractCode, + }, + }, + settings: { + outputSelection: { '*': { '*': ['*'], }, }, + }, + }; + + const output = JSON.parse(solc.compile(JSON.stringify(input))); + const bytecode = output.contracts[contractFile][contractName].evm.bytecode.object; + fs.writeFileSync(__dirname+`/../artifacts/${contractName}.bytecode`, bytecode) +} + +// Compile the contract and get the bytecode +compileContract(solidityCode) \ No newline at end of file diff --git a/utils/scripts/tokenMapping.js b/utils/scripts/tokenMapping.js index 40fc7f253d..0469ddd44c 100644 --- a/utils/scripts/tokenMapping.js +++ b/utils/scripts/tokenMapping.js @@ -1,6 +1,5 @@ const fs = require('fs') const { getUniqueAddresses, } = require('../../projects/helper/utils') -const { tokens, tokensBare, } = require('../../projects/helper/tokenMapping') const cacheFile = '../../../server/coins/src/adapters/tokenMapping.json' const coreAssetsFile = '../../projects/helper/coreAssets.json' const sdk = require('@defillama/sdk') @@ -23,12 +22,12 @@ const ibcMappings = {} const fixBalancesTokens = {} -run() +// run() -function writeToCache() { - fs.writeFileSync(cacheFile, JSON.stringify(cache, null, 2)) - fs.writeFileSync(coreAssetsFile, JSON.stringify(coreAssets, null, 2)) -} +// function writeToCache() { +// fs.writeFileSync(cacheFile, JSON.stringify(cache, null, 2)) +// fs.writeFileSync(coreAssetsFile, JSON.stringify(coreAssets, null, 2)) +// } function transformTo(address) { if (address.startsWith('0x')) return 'ethereum:' + address @@ -129,5 +128,5 @@ async function run() { }) await Promise.all(promises) - writeToCache() + // writeToCache() } diff --git a/utils/scripts/useTokenLabels.js b/utils/scripts/useTokenLabels.js new file mode 100644 index 0000000000..e065d2b3f1 --- /dev/null +++ b/utils/scripts/useTokenLabels.js @@ -0,0 +1,69 @@ +const glob = require('glob') +const projectsDir = __dirname + '/../../projects' +const allLabelsFile = projectsDir + '/helper/coreAssets.json' +const allLabels = require(allLabelsFile) +const fs = require('fs') +const path = require('path') +const { ibcChains } = require('../../projects/helper/tokenMapping') + +// const rootFolder = '../../projects' +// const projectsDir = '../../projects/zharta' +// const rootFolder = projectsDir + '/zharta' +const rootFolder = projectsDir + +const ignoredChains = ['tezos', 'waves', 'algorand', 'klaytn', 'astar', 'iotex', 'elrond', 'defichain', 'cardano', ...ibcChains] + +function run() { + ignoredChains.forEach(i => delete allLabels[i]) + // console.table(Object.entries(allLabels).map(([c, mapping]) => { return [c, Object.values(mapping).length] }).sort((a, b) => b[1] - a[1])) + + // return; + + glob(rootFolder + '/**/*.js', {}, async (e, files) => { + console.log('JSON file count', files.length) + // console.log(files) + files.forEach(updateFile) + }) +} + +run() + +function updateFile(file) { + let relativePath = path.relative(file + '/..', allLabelsFile) + if (relativePath.startsWith('coreAssets')) relativePath = './' + relativePath + const requireStr = `const ADDRESSES = require('${relativePath}')\n` + let fileStr = fs.readFileSync(file, 'utf-8') + const importedAddresses = fileStr.includes('coreAssets.json') + let updateFile = false + + Object.entries(allLabels).forEach(([chain, mapping]) => { + const label = ['ADDRESSES', chain] + if (chain === 'null') { + updateFileStr([...label].join('.'), mapping, file) + } else { + Object.entries(mapping).forEach(([symbol, addr]) => { + updateFileStr([...label, symbol].join('.'), addr, file) + }) + } + }) + if (!importedAddresses && updateFile) + fileStr = requireStr + fileStr + fs.writeFileSync(file, fileStr, { encoding: 'utf-8' }) + + function updateFileStr(label, address, file) { + if (!updateFile) { + updateFile = (new RegExp(address, 'i')).test(fileStr) + // if (updateFile) + // console.log(updateFile, address, new RegExp(address, 'i'), file) + } + if (!updateFile) return; + const tokensBareRegex = new RegExp('["\']' + address + '["\']\\s*:', 'gi') + const tokensBareRegex2 = new RegExp('["\']' + address + '["\']', 'gi') + const tokensRegex = new RegExp('(["\'])(\\w+:)' + address + '["\']\\s*:', 'gi') + const tokensRegex2 = new RegExp('(["\'])(\\w+:)' + address + '["\']', 'gi') + fileStr = fileStr.replace(tokensBareRegex, `[${label}]:`) + fileStr = fileStr.replace(tokensBareRegex2, label) + fileStr = fileStr.replace(tokensRegex, `[$1$2$1 + ${label}]:`) + fileStr = fileStr.replace(tokensRegex2, `$1$2$1 + ${label}`) + } +} diff --git a/utils/testInteractive.js b/utils/testInteractive.js index 595a9131b5..ba20144d5c 100644 --- a/utils/testInteractive.js +++ b/utils/testInteractive.js @@ -1,6 +1,15 @@ const inquirer = require('inquirer') const childProcess = require('child_process') inquirer.registerPrompt('fuzzypath', require('inquirer-fuzzy-path')) +console.log('Starting directory: ' + process.cwd()); +try { + process.chdir('./projects/'); + console.log('New directory: ' + process.cwd()); +} +catch (err) { + console.log('chdir: ' + err); +} + const adapterPrompt = { type: 'fuzzypath', @@ -8,7 +17,7 @@ const adapterPrompt = { excludePath: nodePath => nodePath.startsWith('helper'), excludeFilter: nodePath => nodePath == '.', itemType: 'any', - rootPath: 'projects', + rootPath: '.', message: 'Select an adapter to run:', suggestOnly: false, depthLimit: 0, @@ -48,7 +57,7 @@ async function runAdapter(adapterPath, debugMode) { const startTime = Date.now() - const child = childProcess.fork('test.js', [adapterPath], { + const child = childProcess.fork(__dirname +'/../test.js', [adapterPath], { env, })