Co-authored-by: Josh Levine <joshuapark95@gmail.com>
Co-authored-by: Josh Levine <24902242+jparklev@users.noreply.github.com>
This commit is contained in:
g1nt0ki
2024-09-24 10:45:25 +02:00
committed by GitHub
parent c38e59f714
commit 75c2625e8b
4 changed files with 153 additions and 88 deletions

View File

@@ -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] || {}) })

117
projects/rumpel/index.js Normal file
View File

@@ -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,
},
};

View File

@@ -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"]
},

View File

@@ -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))