diff --git a/projects/helper/tokenMapping.js b/projects/helper/tokenMapping.js index ede91a25a..07d985fc4 100644 --- a/projects/helper/tokenMapping.js +++ b/projects/helper/tokenMapping.js @@ -40,105 +40,19 @@ const fixBalancesTokens = { ozone: { // '0x83048f0bf34feed8ced419455a4320a735a92e9d': { coingeckoId: "ozonechain", decimals: 18 }, // was mapped to wrong chain }, - chainflip: { - Dot: { coingeckoId: 'polkadot', decimals: 10 }, - Usdc: { coingeckoId: 'usd-coin', decimals: 6 }, - Flip: { coingeckoId: 'chainflip', decimals: 18 }, - Btc: { coingeckoId: 'bitcoin', decimals: 8 }, - Eth: { coingeckoId: 'ethereum', decimals: 18 }, - Usdt: { coingeckoId: 'tether', decimals: 6 }, - ArbEth: { coingeckoId: 'ethereum', decimals: 18 }, - ArbUsdc: { coingeckoId: 'usd-coin', decimals: 6 }, - }, - thundercore: { - [ADDRESSES.thundercore.veTT]: { coingeckoId: 'thunder-token', decimals: 18 }, - }, - oasis: { - [ADDRESSES.null]: { coingeckoId: 'oasis-network', decimals: 18 }, - }, heco: { [ADDRESSES.heco.WHT]: { coingeckoId: 'huobi-token', decimals: 18 }, }, base: { [ADDRESSES.base.rETH]: { coingeckoId: 'rocket-pool-eth', decimals: 18 }, }, - ftn: { - [ADDRESSES.ftn.stFTN]: { coingeckoId: 'lolik-staked-ftn', decimals: 18 }, - [ADDRESSES.ftn.mUSDC]: { coingeckoId: 'usd-coin', decimals: 6 }, - [ADDRESSES.ftn.mUSDT]: { coingeckoId: 'tether', decimals: 6 }, - }, op_bnb: { [ADDRESSES.defiverse.USDC]: { coingeckoId: 'binance-bitcoin', decimals: 18 }, - [ADDRESSES.op_bnb.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, - [ADDRESSES.base.DAI]: { coingeckoId: 'first-digital-usd', decimals: 18 }, - }, - optimism: { - [ADDRESSES.optimism.weETH]: { coingeckoId: 'wrapped-eeth', decimals: 18 }, - [ADDRESSES.optimism.ezETH]: { coingeckoId: "renzo-restaked-eth", decimals: 18 }, - }, - moonriver: { - [ADDRESSES.moonriver.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, - }, - zircuit: { - [ADDRESSES.null]: { coingeckoId: 'ethereum', decimals: 18 }, - }, - islm: { - [ADDRESSES.islm.USDC]: { coingeckoId: 'usd-coin', decimals: 6 }, - }, - cronos_zkevm: { - [ADDRESSES.cronos_zkevm.wzkCRO]: { coingeckoId: 'crypto-com-chain', decimals: 18 }, - [ADDRESSES.cronos_zkevm.ETH]: { coingeckoId: 'ethereum', decimals: 18 }, }, lac: { [ADDRESSES.null]: { coingeckoId: "la-coin", decimals: 18 }, [ADDRESSES.lac.LAC]: { coingeckoId: "la-coin", decimals: 18 }, - [ADDRESSES.lac.WETH]: { coingeckoId: "ethereum", decimals: 18 }, - [ADDRESSES.lac.WBTC]: { coingeckoId: "wrapped-bitcoin", decimals: 8 }, }, - blast: { - '0xf8a5d147a3a3416ab151758d969eff15c27ab743': { coingeckoId: "blast:0x59c159e5a4f4d1c86f7abdc94b7907b7473477f6", decimals: 0 }, - }, - noble: { - [ADDRESSES.noble.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, - [ADDRESSES.noble.USDY]: { coingeckoId: "ondo-us-dollar-yield", decimals: 18 }, - }, - q: { - [ADDRESSES.q.WQ]: { coingeckoId: "q-protocol", decimals: 18 }, - }, - taiko: { - [ADDRESSES.taiko.DAI]: { coingeckoId: "dai", decimals: 18 }, - }, - neox: { - [ADDRESSES.null]: { coingeckoId: "gas", decimals: 18 }, - [ADDRESSES.neox.WGAS]: { coingeckoId: "gas", decimals: 18 }, - [ADDRESSES.neox.WGAS_1]: { coingeckoId: "gas", decimals: 18 }, - }, - aura: { - [ADDRESSES.null]: { coingeckoId: "aura-network", decimals: 18 }, - '0xDE47A655a5d9904BD3F7e1A536D8323fBD99993A': { coingeckoId: "aura-network", decimals: 18 }, - [ADDRESSES.functionx.WFX]: { coingeckoId: "tether", decimals: 6 }, - }, - gravity: { - [ADDRESSES.null]: { coingeckoId: "g-token", decimals: 18 }, - [ADDRESSES.gravity.wG]: { coingeckoId: "g-token", decimals: 18 }, - [ADDRESSES.gravity.WETH]: { coingeckoId: "ethereum", decimals: 18 }, - [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, - }, - idex: { - [ADDRESSES.rari.USDC_e]: { coingeckoId: "usd-coin", decimals: 6 }, - }, - xdai: { - '0x6c76971f98945ae98dd7d4dfca8711ebea946ea6': { coingeckoId: "wrapped-steth", decimals: 18 }, - [ADDRESSES.xdai.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, - }, - etn: { - [ADDRESSES.etn.WETN]: { coingeckoId: "electroneum", decimals: 18 } - }, - polynomial: { - [ADDRESSES.polynomial.USDC]: { coingeckoId: "usd-coin", decimals: 6 }, - [ADDRESSES.polynomial.SDAI]: { coingeckoId: "savings-dai", decimals: 18 }, - [ADDRESSES.polynomial.sUSDe]: { coingeckoId: "ethena-staked-usde", decimals: 18 }, - } } ibcChains.forEach(chain => fixBalancesTokens[chain] = { ...ibcMappings, ...(fixBalancesTokens[chain] || {}) }) diff --git a/projects/rumpel/index.js b/projects/rumpel/index.js new file mode 100644 index 000000000..27c6607c6 --- /dev/null +++ b/projects/rumpel/index.js @@ -0,0 +1,117 @@ +const ADDRESSES = require('../helper/coreAssets.json') +const { getLogs2 } = require("../helper/cache/getLogs") + +const CONTRACTS = { + RUMEPL_POINT_TOKENIZATION_VAULT: "0xe47F9Dbbfe98d6930562017ee212C1A1Ae45ba61", + RUMPEL_WALLET_FACTORY: "0x5774abcf415f34592514698eb075051e97db2937", + ETHENA_LP_STAKING: "0x8707f238936c12c309bfc2B9959C35828AcFc512", + MORPHO_BLUE: "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb", + ZIRCUIT_RESTAKING_POOL: "0xF047ab4c75cebf0eB9ed34Ae2c186f3611aEAfa6", +}; + +const DEPLOYMENT = { + RUMPEL_WALLET_FACTORY: { + block: 20696108, + timestamp: 1725680627000, + }, +}; + +const TOKENS = { + AGETH: "0xe1B4d34E8754600962Cd944B535180Bd758E6c2e", + SUSDE: ADDRESSES.ethereum.sUSDe, + USDE: ADDRESSES.ethereum.USDe, + WSTETH: ADDRESSES.ethereum.WSTETH, + WEETH: "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", + WEETHS: "0x917ceE801a67f933F2e6b33fC0cD1ED2d5909D88", + MSTETH: "0x49446A0874197839D15395B908328a74ccc96Bc0", + STETH: ADDRESSES.ethereum.STETH, + RSUSDE: "0x82f5104b23FF2FA54C2345F821dAc9369e9E0B26", + RSTETH: "0x7a4effd87c2f3c55ca251080b1343b605f327e3a", + KUSDE: "0xBE3cA34D0E877A1Fc889BD5231D65477779AFf4e", + KWEETH: "0x2DABcea55a12d73191AeCe59F508b191Fb68AdaC", + DC_WSTETH_COLLATERAL: "0xC329400492c6ff2438472D4651Ad17389fCb843a", + DC_SUSDE_COLLATERAL: "0x19d0D8e6294B7a04a2733FE433444704B791939A", +}; + +const MORPHO_SUSDE_MARKET_ID = + "0x39d11026eae1c6ec02aa4c0910778664089cdd97c3fd23f68f7cd05e2e95af48"; + +async function tvl(api) { + const owners = await getOwners(api); + + await Promise.all([sumBaseTokens, handleLockedUSDE, handleMorphoSuppliedSUSDE, handleZircuitAssets, handleStrategyTokenBalances].map(async (fn) => fn())); + + async function sumBaseTokens() { + return api.sumTokens({ + owners, tokens: [TOKENS.AGETH, TOKENS.WEETH, TOKENS.USDE, TOKENS.SUSDE, TOKENS.MSTETH, TOKENS.WSTETH, TOKENS.STETH,] + }) + } + + + async function handleLockedUSDE() { + const stakes = await api.multiCall({ + target: CONTRACTS.ETHENA_LP_STAKING, + abi: "function stakes(address,address) view returns (uint256 amount,uint152,uint104)", + calls: owners.map((owner) => ({ params: [owner, TOKENS.USDE] })), + }); + api.add(TOKENS.USDE, stakes.map(i => i.amount)) + } + + async function handleMorphoSuppliedSUSDE() { + const positions = await api.multiCall({ + target: CONTRACTS.MORPHO_BLUE, + abi: "function position(bytes32,address) view returns (uint256,uint128,uint128 amount)", + calls: owners.map((owner) => ({ params: [MORPHO_SUSDE_MARKET_ID, owner] })), + }); + api.add(TOKENS.USDE, positions.map(i => i.amount)) + } + + async function handleZircuitAssets() { + const assets = [TOKENS.WEETH, TOKENS.WEETHS, TOKENS.USDE, TOKENS.MSTETH] + const calls = [] + for (const asset of assets) + for (const owner of owners) + calls.push({ params: [asset, owner] }) + const tokens = calls.map(i => i.params[0]) + const bals = await api.multiCall({ target: CONTRACTS.ZIRCUIT_RESTAKING_POOL, abi: "function balance(address,address) view returns (uint256)", calls, }); + api.add(tokens, bals) + } + + async function handleStrategyTokenBalances() { + const tokens = [ + TOKENS.KWEETH, + TOKENS.KUSDE, + TOKENS.DC_WSTETH_COLLATERAL, + TOKENS.DC_SUSDE_COLLATERAL, + TOKENS.MSTETH, + TOKENS.RSUSDE, + TOKENS.RSTETH, + ] + return api.sumTokens({ owners, tokens }) + } +} + +async function getOwners(api) { + const logs = await getLogs2({ + api, + target: CONTRACTS.RUMPEL_WALLET_FACTORY, + topic: "SafeCreated(address,address[],uint256)", + eventAbi: + "event SafeCreated(address indexed safe, address[] indexed owners, uint256 threshold)", + fromBlock: DEPLOYMENT.RUMPEL_WALLET_FACTORY.block, + }); + return logs + .map((log) => log.safe) + .concat(CONTRACTS.RUMEPL_POINT_TOKENIZATION_VAULT); +} + + + +module.exports = { + methodology: + "Sums up the supported tokens in Rumpel Wallets + Deposits in the Rumpel Point Tokenization Vault", + start: DEPLOYMENT.RUMPEL_WALLET_FACTORY.timestamp, + ethereum: { + tvl, + }, +}; diff --git a/projects/treasury/k9finance.js b/projects/treasury/k9finance.js index 40adc1715..2622ebfd2 100644 --- a/projects/treasury/k9finance.js +++ b/projects/treasury/k9finance.js @@ -1,4 +1,4 @@ -const { token } = require("@project-serum/anchor/dist/cjs/utils"); +const ADDRESSES = require('../helper/coreAssets.json') const { nullAddress, treasuryExports } = require("../helper/treasury"); const treasury = "0xDA4Df6E2121eDaB7c33Ed7FE0f109350939eDA84"; @@ -11,7 +11,7 @@ module.exports = treasuryExports({ ownTokens: ["0x91fbb2503ac69702061f1ac6885759fc853e6eae"] }, shibarium: { - tokens: [nullAddress,"0x839fdb6cc98342b428e074c1573adf6d48ca3bfd"], + tokens: [nullAddress,ADDRESSES.shibarium.BONE_5], owners: [shibtreasury], ownTokens: ["0x91fbB2503AC69702061f1AC6885759Fc853e6EaE"] }, diff --git a/utils/scripts/checkFixTokensPriced.js b/utils/scripts/checkFixTokensPriced.js new file mode 100644 index 000000000..da8b955b9 --- /dev/null +++ b/utils/scripts/checkFixTokensPriced.js @@ -0,0 +1,34 @@ +const { fixBalancesTokens } = require("../../projects/helper/tokenMapping") +const axios = require('axios') + + +async function run() { + let allTokens = [] + const tokensMissingPrice = [] + const tokensWithPrice = [] + const tokenSet = new Set() + Object.entries(fixBalancesTokens).forEach(([chain, tokens]) => { + Object.keys(tokens).forEach(token => { + const key = chain+':'+token + if (!tokenSet.has(key.toLowerCase())) { // ignore duplicates + tokenSet.add(key.toLowerCase()) + allTokens.push(key) + } + }) + }) + const burl = 'https://coins.llama.fi/prices/current/'+allTokens.join(',') + const prices = (await axios.get(burl)).data.coins + + allTokens.forEach(token => { + if (!prices[token]) { + tokensMissingPrice.push(token) + } else { + tokensWithPrice.push(token) + } + }) + + console.log('Tokens with price:', tokensWithPrice, tokensWithPrice.length) + console.log('Tokens missing price:', tokensMissingPrice, tokensMissingPrice.length) +} + +run().catch(console.error).then(() => process.exit(0)) \ No newline at end of file