mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-01-12 22:43:12 +08:00
Rumpel (#11727)
Co-authored-by: Josh Levine <joshuapark95@gmail.com> Co-authored-by: Josh Levine <24902242+jparklev@users.noreply.github.com>
This commit is contained in:
@@ -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
117
projects/rumpel/index.js
Normal 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,
|
||||
},
|
||||
};
|
||||
@@ -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"]
|
||||
},
|
||||
|
||||
34
utils/scripts/checkFixTokensPriced.js
Normal file
34
utils/scripts/checkFixTokensPriced.js
Normal 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))
|
||||
Reference in New Issue
Block a user