mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-04-29 13:25:30 +08:00
code refactor
This commit is contained in:
@@ -1,24 +1,15 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { stakingUnknownPricedLP } = require("../helper/staking");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
const { sumTokensExport } = require("../helper/unwrapLPs");
|
||||
|
||||
const photon = "0x2F1305F0619ADa14688A4291953bd7d284f9C2a5";
|
||||
const stakingContract = "0x81177472Ce36A9b1AB573804CD215C72cEb76F36";
|
||||
const photonbusd = "0xEBAa17dA7D5C616441290669E9D2c982c8B1Da25"; //PHOTON-BUSD
|
||||
const treasury = "0x0f90591b01DE6F832e8B8E4ec3525efD423BCaD1";
|
||||
const treasuryTokens = [
|
||||
[ADDRESSES.bsc.BUSD, false], // BUSD
|
||||
];
|
||||
|
||||
async function tvl (timestamp, block, chainBlocks) {
|
||||
let balances = {};
|
||||
await sumTokensAndLPsSharedOwners(balances, treasuryTokens, [treasury], chainBlocks.bsc, "bsc", addr=>`bsc:${addr}`);
|
||||
return balances;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
bsc: {
|
||||
tvl,
|
||||
staking: stakingUnknownPricedLP(stakingContract, photon, "bsc", photonbusd, addr=>`bsc:${addr}`)
|
||||
}
|
||||
bsc: {
|
||||
tvl: sumTokensExport({ tokens: [ADDRESSES.bsc.BUSD], owner: treasury }),
|
||||
staking: stakingUnknownPricedLP(stakingContract, photon, "bsc", photonbusd, addr => `bsc:${addr}`)
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,17 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const {sumTokensAndLPsSharedOwners, sumLPWithOnlyOneToken} = require('../helper/unwrapLPs')
|
||||
const { stakingPricedLP } = require('../helper/staking')
|
||||
|
||||
|
||||
const treasury = "0x6687379035822ee15e2164f9C1280fBEAd0D7627";
|
||||
const PB_TOKEN = "0x0E75CDb914DdCcA683357dD94d26Caa39BC14B16"
|
||||
const LP_TOKEN = "0xd3a6eebbe6f6d9197a7fc2aaaf94d8b0ec51f8a8";
|
||||
const STAKING_ADDRESS = "0xE4738791690AF507C8C7Bf5981ef541568C7C312"
|
||||
const COREASSETNAME = "magic-internet-money";
|
||||
const CHAIN = "avax";
|
||||
const MIM = "0x130966628846bfd36ff31a822705796e8cb8c18d"
|
||||
|
||||
|
||||
async function avaxTvl(time, ethBlock, chainBlocks){
|
||||
const balances = {}
|
||||
const transform = addr => 'avax:'+addr
|
||||
await sumLPWithOnlyOneToken(balances, "0xd3a6eebbe6f6d9197a7fc2aaaf94d8b0ec51f8a8", treasury, MIM, chainBlocks.avax, "avax", transform)
|
||||
await sumTokensAndLPsSharedOwners(balances, [
|
||||
[MIM, false],
|
||||
[ADDRESSES.avax.WBTC_e, false]
|
||||
], [treasury], chainBlocks.avax, "avax", transform)
|
||||
return balances
|
||||
}
|
||||
|
||||
module.exports={
|
||||
deadFrom: 1648765747,
|
||||
misrepresentedTokens: true,
|
||||
avax:{
|
||||
tvl: avaxTvl,
|
||||
tvl: () => ({}),
|
||||
staking: stakingPricedLP(STAKING_ADDRESS, PB_TOKEN, CHAIN, LP_TOKEN, COREASSETNAME, true),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
const { staking, stakings } = require("../helper/staking");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
|
||||
/*** Ethereum Addresses ***/
|
||||
const UFI = "0xcDa4e840411C00a614aD9205CAEC807c7458a0E3";
|
||||
@@ -51,23 +50,8 @@ const farmingStakingContracts_polygon = [
|
||||
"0xF1a44C75E4D92f4DA737485f96b0c2a1327d91b2",
|
||||
];
|
||||
|
||||
const polygonTvl = async (chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
let transformAddress = i => `polygon:${i}`;
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
[
|
||||
[SAFLE_polygon, false],
|
||||
[SCA_polygon, false],
|
||||
],
|
||||
farmingStakingContracts_polygon,
|
||||
chainBlocks["polygon"],
|
||||
"polygon",
|
||||
transformAddress
|
||||
);
|
||||
|
||||
return balances;
|
||||
const polygonTvl = async (api) => {
|
||||
return api.sumTokens({ owners: farmingStakingContracts_polygon, tokens: [SAFLE_polygon, SCA_polygon,] });
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
@@ -82,6 +66,5 @@ module.exports = {
|
||||
staking: stakings(farmingStakingContracts_polygon, UFI_polygon),
|
||||
tvl: polygonTvl,
|
||||
},
|
||||
//tvl: (tvl) => ({}),
|
||||
methodology: "Counts tvl of the assets staked on the Farming seccion thgough Farming Contracts",
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { sumTokensAndLPsSharedOwners, sumTokens2, genericUnwrapCvx } = require('../helper/unwrapLPs')
|
||||
const sdk = require('@defillama/sdk')
|
||||
const { sumTokens2, genericUnwrapCvx } = require('../helper/unwrapLPs')
|
||||
|
||||
const treasuries = ["0xa52fd396891e7a74b641a2cb1a6999fcf56b077e", "0x086c98855df3c78c6b481b6e1d47bef42e9ac36b"]
|
||||
|
||||
@@ -20,110 +19,72 @@ const BTRFLYV2 = '0xc55126051B22eBb829D00368f4B12Bde432de5Da'
|
||||
const cvxCRVPool = '0x0392321e86F42C2F94FBb0c6853052487db521F0'
|
||||
|
||||
const rlBTRFLYAbi = {
|
||||
lockedSupply: "uint256:lockedSupply",
|
||||
}
|
||||
|
||||
async function tvl(timestamp, block, chainBlocks){
|
||||
const balances = {}
|
||||
|
||||
//Add tokens/curve LPs in wallet
|
||||
await sumTokensAndLPsSharedOwners(balances, [
|
||||
[CVX, false],
|
||||
[cvxCRV, false],
|
||||
[FXS, false],
|
||||
[CRV, false],
|
||||
[AURA, false],
|
||||
// BTRFLY/ETH Curve LP
|
||||
['0x7483Dd57f6488b0e194A151C57Df6Ec85C00aCE9', false],
|
||||
[ADDRESSES.ethereum.USDC, false],
|
||||
[ADDRESSES.ethereum.FRAX, false],
|
||||
], treasuries, block)
|
||||
|
||||
//Add UniswapV3 LPs
|
||||
await sumTokens2({ balances, owners: treasuries, block, resolveUniV3: true, })
|
||||
|
||||
//Add convex deposited curve LPs
|
||||
await genericUnwrapCvx(balances, treasuries[0], cvxCRVPool, block, 'ethereum')
|
||||
|
||||
//This causes an error and not sure why
|
||||
//await genericUnwrapCvx(balances, treasuries[0], cvxFXSPool, block, 'ethereum')
|
||||
|
||||
//Add vlCVX as CVX
|
||||
const vlCVXBalance = await sdk.api.erc20.balanceOf({
|
||||
target: ADDRESSES.ethereum.vlCVX,
|
||||
owner: treasuries[0],
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum']
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, CVX, vlCVXBalance)
|
||||
|
||||
//Add vlAURA as AURA
|
||||
const vlAURABalance = await sdk.api.erc20.balanceOf({
|
||||
target: AURALocker,
|
||||
owner: treasuries[0],
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum']
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, AURA, vlAURABalance)
|
||||
|
||||
//Add staked cvxCRV as cvxCRV
|
||||
const cvxCRVStakedBalance = await sdk.api.erc20.balanceOf({
|
||||
target: cvxCRVStaking,
|
||||
owner: treasuries[0],
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum']
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, cvxCRV, cvxCRVStakedBalance)
|
||||
|
||||
//Add veFXS as 1/4 FXS since locked for 4 years
|
||||
const veFXSBalance = await sdk.api.erc20.balanceOf({
|
||||
target: veFXS,
|
||||
owner: treasuries[0],
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum']
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, FXS, veFXSBalance/4)
|
||||
|
||||
//Add veCRV as 1 CRV since locked for 4 years
|
||||
const veCRVBalance = await sdk.api.erc20.balanceOf({
|
||||
target: veCRV,
|
||||
owner: treasuries[0],
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum']
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, CRV, veCRVBalance)
|
||||
|
||||
//Add sOHM as OHM since 1:1
|
||||
const sOHMBalance = await sdk.api.erc20.balanceOf({
|
||||
target: sOHM,
|
||||
owner: treasuries[1],
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum']
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, OHM, sOHMBalance)
|
||||
|
||||
return balances
|
||||
lockedSupply: "uint256:lockedSupply",
|
||||
}
|
||||
|
||||
async function staking(timestamp, block, chainBlocks) {
|
||||
const balances = {}
|
||||
|
||||
//Adding locked BTRFLY
|
||||
const lockedBTRFLY = await sdk.api.abi.call({
|
||||
abi: rlBTRFLYAbi.lockedSupply,
|
||||
target: rlBTRFLY,
|
||||
chain: 'ethereum',
|
||||
block: chainBlocks['ethereum'],
|
||||
}).then(result => result.output)
|
||||
sdk.util.sumSingleBalance(balances, BTRFLYV2, lockedBTRFLY)
|
||||
|
||||
return balances
|
||||
async function tvl(api) {
|
||||
const block = api.block
|
||||
const balances = api.getBalances()
|
||||
const tokens = [
|
||||
CVX,
|
||||
cvxCRV,
|
||||
FXS,
|
||||
CRV,
|
||||
AURA,
|
||||
// BTRFLY/ETH Curve LP
|
||||
'0x7483Dd57f6488b0e194A151C57Df6Ec85C00aCE9',
|
||||
ADDRESSES.ethereum.USDC,
|
||||
ADDRESSES.ethereum.FRAX,
|
||||
]
|
||||
|
||||
//Add tokens/curve LPs in wallet
|
||||
await api.sumTokens({ owners: treasuries, tokens })
|
||||
|
||||
//Add UniswapV3 LPs
|
||||
await sumTokens2({ api, owners: treasuries, resolveUniV3: true, })
|
||||
|
||||
//Add convex deposited curve LPs
|
||||
await genericUnwrapCvx(balances, treasuries[0], cvxCRVPool, block)
|
||||
|
||||
//This causes an error and not sure why
|
||||
//await genericUnwrapCvx(balances, treasuries[0], cvxFXSPool, block, 'ethereum')
|
||||
|
||||
//Add vlCVX as CVX
|
||||
const [vlCVXBalance, vlAURABalance, cvxCRVStakedBalance, veFXSBalance, veCRVBalance, sOHMBalance] = await api.multiCall({
|
||||
abi: 'erc20:balanceOf',
|
||||
calls: [
|
||||
{ target: ADDRESSES.ethereum.vlCVX, params: treasuries[0] },
|
||||
{ target: AURALocker, params: treasuries[0] },
|
||||
{ target: cvxCRVStaking, params: treasuries[0] },
|
||||
{ target: veFXS, params: treasuries[0] },
|
||||
{ target: veCRV, params: treasuries[0] },
|
||||
{ target: sOHM, params: treasuries[1] },
|
||||
]
|
||||
})
|
||||
api.add(CVX, vlCVXBalance)
|
||||
api.add(AURA, vlAURABalance)
|
||||
api.add(cvxCRV, cvxCRVStakedBalance)
|
||||
api.add(CRV, veCRVBalance)
|
||||
api.add(OHM, sOHMBalance)
|
||||
api.add(FXS, veFXSBalance / 4)
|
||||
//Add vlAURA as AURA
|
||||
//Add staked cvxCRV as cvxCRV
|
||||
//Add veFXS as 1/4 FXS since locked for 4 years
|
||||
//Add veCRV as 1 CRV since locked for 4 years
|
||||
//Add sOHM as OHM since 1:1
|
||||
}
|
||||
|
||||
async function staking(api) {
|
||||
|
||||
//Adding locked BTRFLY
|
||||
const lockedBTRFLY = await api.call({ abi: rlBTRFLYAbi.lockedSupply, target: rlBTRFLY, })
|
||||
api.add(BTRFLYV2, lockedBTRFLY)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
methodology: "tvl = Treasury assets (bonding). staking = rlBTRFLY (locked tokens)",
|
||||
ethereum:{
|
||||
tvl,
|
||||
staking
|
||||
},
|
||||
methodology: "tvl = Treasury assets (bonding). staking = rlBTRFLY (locked tokens)",
|
||||
ethereum: {
|
||||
tvl,
|
||||
staking
|
||||
},
|
||||
}
|
||||
@@ -1,9 +1,7 @@
|
||||
const sdk = require("@defillama/sdk");
|
||||
const abi = require("./abi.json");
|
||||
const { staking } = require("../helper/staking");
|
||||
const { pool2s } = require("../helper/pool2");
|
||||
const { unwrapUniswapLPs } = require("../helper/unwrapLPs");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
const { sumTokens2 } = require("../helper/unwrapLPs");
|
||||
|
||||
// --- BSC Addresses ---
|
||||
const masterChefContractBsc = "0x738600B15B2b6845d7Fe5B6C7Cb911332Fb89949";
|
||||
@@ -57,153 +55,24 @@ const pool2StratsPolygon = ["0xB045Ea272229f9c0c94ca36C1e805226c9C8c034"];
|
||||
|
||||
const excludePool2Polygon = ["0x312D2eAb1c01C0c3d74f41a3B7Dd5772aD9F3Ca2"];
|
||||
|
||||
const calcTvl = async (
|
||||
balances,
|
||||
chain,
|
||||
block,
|
||||
masterchef,
|
||||
transformAddress,
|
||||
excludePool2
|
||||
) => {
|
||||
const poolLength = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.poolLength,
|
||||
target: masterchef,
|
||||
chain,
|
||||
block,
|
||||
})
|
||||
).output;
|
||||
|
||||
const lpPositions = [];
|
||||
|
||||
for (let index = 0; index < poolLength; index++) {
|
||||
const strat = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.poolInfo,
|
||||
target: masterchef,
|
||||
params: index,
|
||||
chain,
|
||||
block,
|
||||
})
|
||||
).output.strat;
|
||||
|
||||
const want = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.poolInfo,
|
||||
target: masterchef,
|
||||
params: index,
|
||||
chain,
|
||||
block,
|
||||
})
|
||||
).output.want;
|
||||
|
||||
const strat_bal = (
|
||||
await sdk.api.abi.call({
|
||||
abi: 'erc20:balanceOf',
|
||||
target: want,
|
||||
params: strat,
|
||||
chain,
|
||||
block,
|
||||
})
|
||||
).output;
|
||||
|
||||
const symbol = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.symbol,
|
||||
target: want,
|
||||
chain,
|
||||
block,
|
||||
})
|
||||
).output;
|
||||
|
||||
if (
|
||||
excludePool2.some((addr) => addr.toLowerCase() === want.toLowerCase()) ||
|
||||
symbol.includes("RCUBE") ||
|
||||
symbol.includes("QBERT") ||
|
||||
symbol.includes("pQBERT")
|
||||
) {
|
||||
continue
|
||||
} else if (symbol.includes("LP")) {
|
||||
lpPositions.push({
|
||||
token: want,
|
||||
balance: strat_bal,
|
||||
});
|
||||
} else {
|
||||
sdk.util.sumSingleBalance(balances, `${chain}:${want}`, strat_bal);
|
||||
}
|
||||
}
|
||||
|
||||
await unwrapUniswapLPs(balances, lpPositions, block, chain, transformAddress);
|
||||
};
|
||||
|
||||
const bscStaking = async (chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
const transformAddress = i => `bsc:${i}`;
|
||||
for (const token of stakingTokensBsc) {
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
[[token, false]],
|
||||
retroStakingsBsc,
|
||||
chainBlocks["bsc"],
|
||||
"bsc",
|
||||
transformAddress
|
||||
);
|
||||
}
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
const polygonStaking = async (...params) => {
|
||||
for (const stakingContract of retroStakingsPolygon) {
|
||||
return staking(stakingContract, pQBERT)(...params);
|
||||
}
|
||||
};
|
||||
|
||||
const bscTvl = async (chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
const transformAddress = i => `bsc:${i}`;
|
||||
|
||||
await calcTvl(
|
||||
balances,
|
||||
"bsc",
|
||||
chainBlocks["bsc"],
|
||||
masterChefContractBsc,
|
||||
transformAddress,
|
||||
excludePool2Bsc
|
||||
);
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
const polygonTvl = async (chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
const transformAddress = i => `polygon:${i}`;
|
||||
|
||||
await calcTvl(
|
||||
balances,
|
||||
"polygon",
|
||||
chainBlocks["polygon"],
|
||||
masterChefContractPolygon,
|
||||
transformAddress,
|
||||
excludePool2Polygon
|
||||
);
|
||||
|
||||
return balances;
|
||||
};
|
||||
async function tvl(api) {
|
||||
const masterchef = api.chain === "bsc" ? masterChefContractBsc : masterChefContractPolygon;
|
||||
const blacklistedTokens = excludePool2Bsc.concat(excludePool2Polygon).concat([pQBERT])
|
||||
const poolInfos = await api.fetchList({ lengthAbi: abi.poolLength , itemAbi: abi.poolInfo, target: masterchef})
|
||||
const tokensAndOwners = poolInfos.map(poolInfo => [poolInfo.want, poolInfo.strat])
|
||||
return sumTokens2({ api, tokensAndOwners, blacklistedTokens, })
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
misrepresentedTokens: true,
|
||||
bsc: {
|
||||
tvl: bscTvl,
|
||||
staking: bscStaking,
|
||||
tvl,
|
||||
staking: staking(retroStakingsBsc, stakingTokensBsc),
|
||||
pool2: pool2s(pool2StratsBsc, excludePool2Bsc),
|
||||
},
|
||||
polygon: {
|
||||
tvl: polygonTvl,
|
||||
staking: polygonStaking,
|
||||
tvl,
|
||||
staking: staking(retroStakingsPolygon, pQBERT),
|
||||
pool2: pool2s(pool2StratsPolygon, excludePool2Polygon),
|
||||
},
|
||||
methodology:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
|
||||
const { stakings } = require("../helper/staking");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
|
||||
const sashimidaoStakings = [
|
||||
"0x7dCb04c9e60B52E23f0F46FE2E5D00B234402dAA",
|
||||
@@ -8,41 +7,15 @@ const sashimidaoStakings = [
|
||||
];
|
||||
const SASHI = "0xb88e3edb378ed7ddef10b86962d97fa0b8defb6d"; // SASHI is not on coingecko yet!!!
|
||||
|
||||
const treasuryAddress = "0xD4a23b563019cd148Dc148e69a84535cf8368282";
|
||||
const MIM = "0x130966628846bfd36ff31a822705796e8cb8c18d";
|
||||
const SASHI_MIM_JLP = "0x71f8DF8A958D5a09694312a79355655F44310084";
|
||||
|
||||
/*** Bonds TVL Portion (Treasury) ***
|
||||
* Treasury TVL consists of MIM and Trisolaris JLP balances
|
||||
***/
|
||||
async function avaxTvl(timestamp, chainBlocks) {
|
||||
const balances = {};
|
||||
|
||||
let transformAddress = addr => 'avax:'+addr
|
||||
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
[
|
||||
[MIM, false],
|
||||
[SASHI_MIM_JLP, true],
|
||||
],
|
||||
[treasuryAddress],
|
||||
chainBlocks["avax"],
|
||||
"avax",
|
||||
transformAddress
|
||||
);
|
||||
|
||||
return balances;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
hallmarks: [
|
||||
[1642464000, "Rug Pull"]
|
||||
],
|
||||
deadFrom: 1642464000,
|
||||
misrepresentedTokens: true,
|
||||
avax: {
|
||||
staking: stakings(sashimidaoStakings, SASHI),
|
||||
tvl: avaxTvl,
|
||||
tvl: () => ({}),
|
||||
},
|
||||
methodology: "Counts MIM and TLP (SASHI-MIM) on the treasury",
|
||||
};
|
||||
|
||||
@@ -1,58 +1,21 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
const { staking } = require("../helper/staking");
|
||||
const { pool2s } = require("../helper/pool2");
|
||||
|
||||
const CHAINS = ["boba"];
|
||||
|
||||
const Boba_SHIBUI = "0xf08ad7c3f6b1c6843ba027ad54ed8ddb6d71169b";
|
||||
|
||||
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";
|
||||
|
||||
const CHAIN_ORGANISED_DATA = {
|
||||
boba: () => {
|
||||
|
||||
return [
|
||||
{
|
||||
treasuryTokens: [
|
||||
[Boba_BOBA, false],
|
||||
[Boba_USDT, false],
|
||||
[Boba_SHIBUI_WETH, true],
|
||||
[Boba_SHIBUI_USDT, true],
|
||||
],
|
||||
treasuryKoyoTokens: [Boba_4Koyo],
|
||||
treasuryAddresses: [
|
||||
"0x9596E01Ad72d2B0fF13fe473cfcc48D3e4BB0f70", // Hot treasury
|
||||
],
|
||||
gaugeTokens: [Boba_SHIBUI_USDT],
|
||||
gaugeAddresses: [
|
||||
"0x6b8f4Fa6E44e923f5A995A87e4d79B3Bb9f8aaa3", // SHIBUI-USDT<>WAGMIv3
|
||||
],
|
||||
},
|
||||
true,
|
||||
];
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
start: 394825,
|
||||
|
||||
boba: {
|
||||
tvl: () => ({}),
|
||||
pool2: (() => {
|
||||
const chain = CHAINS[0];
|
||||
const [data] = CHAIN_ORGANISED_DATA[chain]();
|
||||
|
||||
return pool2s(data.gaugeAddresses, data.gaugeTokens, chain);
|
||||
})(),
|
||||
staking: staking(
|
||||
"0xabAF0A59Bd6E937F852aC38264fda35EC239De82",
|
||||
Boba_SHIBUI,
|
||||
CHAINS[0]
|
||||
),
|
||||
pool2: pool2s([
|
||||
"0x6b8f4Fa6E44e923f5A995A87e4d79B3Bb9f8aaa3", // SHIBUI-USDT<>WAGMIv3
|
||||
], [Boba_SHIBUI_USDT]),
|
||||
staking: staking("0xabAF0A59Bd6E937F852aC38264fda35EC239De82", Boba_SHIBUI),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { stakings } = require("../helper/staking");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
const { sumTokens2 } = require("../helper/unwrapLPs");
|
||||
|
||||
const boardroomContracts = "0x7F28D5a90b3A0BE2e34accDEF255eC13cf695b1e";
|
||||
const SAS = "0x4c38d0e726b6c86f64c1b281348e725973542043";
|
||||
@@ -52,29 +52,8 @@ const tokenAddresses = [
|
||||
"0xE95A203B1a91a908F9B9CE46459d101078c2c3cb",
|
||||
];
|
||||
|
||||
async function pool2() {
|
||||
const balances = {};
|
||||
|
||||
for (let i = 0; i < lpStakingContracts.length; i++) {
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
[[lpAddresses[i], true]],
|
||||
[lpStakingContracts[i]]
|
||||
);
|
||||
}
|
||||
|
||||
for (let i = 0; i < poolContracts.length; i++) {
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
[
|
||||
[tokenAddresses[i], false],
|
||||
[SAC, false],
|
||||
],
|
||||
[poolContracts[i]]
|
||||
);
|
||||
}
|
||||
|
||||
return balances;
|
||||
async function pool2(api) {
|
||||
return sumTokens2({ api, owners: poolContracts.concat(lpStakingContracts), tokens: [...tokenAddresses, SAC, ...lpAddresses], resolveLP: true })
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
@@ -82,7 +61,7 @@ module.exports = {
|
||||
ethereum: {
|
||||
staking: stakings(stakingContracts, SAS),
|
||||
pool2: pool2,
|
||||
tvl: (tvl) => ({}),
|
||||
tvl: () => ({}),
|
||||
},
|
||||
methodology: "Counts liquidty on the Staking and Pool2 Only",
|
||||
};
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"getAssetLength": "uint256:getAssetLength",
|
||||
"assetBalance": "function assetBalance(uint16) view returns (uint256)"
|
||||
}
|
||||
@@ -1,69 +1,19 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const sdk = require("@defillama/sdk");
|
||||
const abi = require("./abi.json");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
const { staking } = require('../helper/staking');
|
||||
|
||||
// Contracts
|
||||
const assetManager = "0xA2b6eC586F989cf1C055B7C9D16fDdA80FDD679b";
|
||||
const sellerContract = "0xc73C6C3e80C28dBc55F65bBdC895E828bb98C72d";
|
||||
const stakingContract = "0x21edB57A75ee69BCe0Fe3D0EfC5674bcF1D5BF93";
|
||||
|
||||
// Tokens
|
||||
const USDC = ADDRESSES.polygon.USDC;
|
||||
const TIDAL = "0xB41EC2c036f8a42DA384DDE6ADA79884F8b84b26";
|
||||
|
||||
/*** Staking of native token (TIDAL) TVL portion ***/
|
||||
const staking = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
const transformAddress = i => `polygon:${i}`;
|
||||
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
[[TIDAL, false]],
|
||||
[stakingContract],
|
||||
chainBlocks["polygon"],
|
||||
"polygon",
|
||||
transformAddress
|
||||
);
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
/*** Polygon TVL Portions ***/
|
||||
const polygonTvl = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
const lengthOfAssets = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.getAssetLength,
|
||||
target: assetManager,
|
||||
chain: "polygon",
|
||||
block: chainBlocks["polygon"],
|
||||
})
|
||||
).output;
|
||||
|
||||
for (let i = 0; i < lengthOfAssets; i++) {
|
||||
const BalanceOfAsset = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.assetBalance,
|
||||
target: sellerContract,
|
||||
params: i,
|
||||
chain: "polygon",
|
||||
block: chainBlocks["polygon"],
|
||||
})
|
||||
).output;
|
||||
|
||||
sdk.util.sumSingleBalance(balances, `polygon:${USDC}`, BalanceOfAsset);
|
||||
}
|
||||
|
||||
return balances;
|
||||
const polygonTvl = async (api) => {
|
||||
return api.sumTokens({ owner: sellerContract, tokens: [ADDRESSES.polygon.USDC] })
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
misrepresentedTokens: true,
|
||||
polygon: {
|
||||
staking,
|
||||
staking: staking(stakingContract, TIDAL,),
|
||||
tvl: polygonTvl,
|
||||
},
|
||||
methodology:
|
||||
|
||||
@@ -1,102 +1,22 @@
|
||||
const sdk = require("@defillama/sdk");
|
||||
const abi = require("./abi.json");
|
||||
const { staking } = require('../helper/staking')
|
||||
const { pool2 } = require('../helper/pool2')
|
||||
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
|
||||
const TimeWarpPool_LP_UNISWAP_ETH =
|
||||
"0x55c825983783c984890bA89F7d7C9575814D83F2";
|
||||
const TimeWarpPool_LP_PANCAKE_BSC =
|
||||
"0xC48467BA55cF0B777978F19701329c87949EFD3C";
|
||||
const TimeWarpPool_LP_UNISWAP_ETH = "0x55c825983783c984890bA89F7d7C9575814D83F2";
|
||||
const TimeWarpPool_LP_PANCAKE_BSC = "0xC48467BA55cF0B777978F19701329c87949EFD3C";
|
||||
|
||||
const TimeWarpPool_TIME_ETH = "0xa106dd3Bc6C42B3f28616FfAB615c7d494Eb629D";
|
||||
const TimeWarpPool_TIME_BSC = "0x59f2757Ae3a1BAa21e4f397a28985Ceb431c676b";
|
||||
|
||||
const calcTvl = async (balances, chain, block, TimeWarpPool) => {
|
||||
const erc20TokenOrLp = (
|
||||
await sdk.api.abi.call({
|
||||
abi: abi.erc20Deposit,
|
||||
target: TimeWarpPool,
|
||||
chain,
|
||||
block,
|
||||
})
|
||||
).output;
|
||||
|
||||
const transformAddress = i => `bsc:${i}`;
|
||||
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
TimeWarpPool == TimeWarpPool_TIME_ETH ||
|
||||
TimeWarpPool == TimeWarpPool_TIME_BSC
|
||||
? [[erc20TokenOrLp, false]]
|
||||
: [[erc20TokenOrLp, true]],
|
||||
[TimeWarpPool],
|
||||
block,
|
||||
chain,
|
||||
chain == "bsc" ? transformAddress : (addr) => addr
|
||||
);
|
||||
};
|
||||
|
||||
/*** Staking of native token (TIME) on Ethereum and Binance TVL portion ***/
|
||||
const stakingETH = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
// --- Staking of native token TIME on Ethereum ---
|
||||
await calcTvl(
|
||||
balances,
|
||||
"ethereum",
|
||||
chainBlocks["ethereum"],
|
||||
TimeWarpPool_TIME_ETH
|
||||
);
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
const stakingBSC = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
// --- Staking of native token TIME on Binance ---
|
||||
await calcTvl(balances, "bsc", chainBlocks["bsc"], TimeWarpPool_TIME_BSC);
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
/*** Ethereum TVL Portion ***/
|
||||
const ethTvl = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
await calcTvl(
|
||||
balances,
|
||||
"ethereum",
|
||||
chainBlocks["ethereum"],
|
||||
TimeWarpPool_LP_UNISWAP_ETH
|
||||
);
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
/*** Binance TVL Portion ***/
|
||||
const bscTvl = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
|
||||
await calcTvl(
|
||||
balances,
|
||||
"bsc",
|
||||
chainBlocks["bsc"],
|
||||
TimeWarpPool_LP_PANCAKE_BSC
|
||||
);
|
||||
|
||||
return balances;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
misrepresentedTokens: true,
|
||||
ethereum: {
|
||||
tvl: ethTvl,
|
||||
staking: stakingETH
|
||||
tvl: () => ({}),
|
||||
pool2: pool2(TimeWarpPool_LP_UNISWAP_ETH, '0x1d474d4B4A62b0Ad0C819841eB2C74d1c5050524'),
|
||||
staking: staking(TimeWarpPool_TIME_ETH, '0x485d17A6f1B8780392d53D64751824253011A260'),
|
||||
},
|
||||
bsc: {
|
||||
tvl: bscTvl,
|
||||
staking: stakingBSC
|
||||
tvl: () => ({}),
|
||||
pool2: pool2(TimeWarpPool_LP_PANCAKE_BSC, '0xa5ebD19961CF4B8aF06a9d9D2B91d73B48744867'),
|
||||
staking: staking(TimeWarpPool_TIME_BSC, '0x3b198e26E473b8faB2085b37978e36c9DE5D7f68'),
|
||||
},
|
||||
methodology: `We count as TVL the staking Lps on Ethereum (TIME-ETH Sushiswap LP)
|
||||
and Binance (TIME-BNB Pancake LP) networks threw their TimeWarpPool contracts; and
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
|
||||
const gg = "0xF2F7CE610a091B94d41D69f4fF1129434a82E2f0"
|
||||
|
||||
// https://app.galaxygoggle.money/#/bonds
|
||||
const treasury = "0xD5F922e23693e552793fE0431F9a95ba67A60A23"
|
||||
@@ -10,42 +7,22 @@ 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;
|
||||
async function tvl(api) {
|
||||
return api.sumTokens({ owners: [treasury, dao], tokens: [mim, wavax, joe, "0xe9E8d6b6ce6D94Fc9d724711e80784Ec096949Fc",] });
|
||||
}
|
||||
|
||||
const bscTreasury = "0xF76C9753507B3Df0867EB02D86d07C6fFcEecaf1";
|
||||
const treasuryTokensBSC = [
|
||||
[ADDRESSES.bsc.BUSD, false], // BUSD
|
||||
["0x13Cf29b3F58f777dDeD38278F7d938401f6b260c", true] // GG-BUSD
|
||||
ADDRESSES.bsc.BUSD, // BUSD
|
||||
"0x13Cf29b3F58f777dDeD38278F7d938401f6b260c", // 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;
|
||||
async function bscTvl(api) {
|
||||
return api.sumTokens({ owners: [bscTreasury], tokens: treasuryTokensBSC });
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
avax:{
|
||||
avax: {
|
||||
tvl,
|
||||
},
|
||||
bsc: {
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
const { getChainTransform } = require("../helper/portedTokens");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
|
||||
const treasuryAddress = "0xB3FC6B9be3AD6b2917d304d4F5645a311bCFd0A8";
|
||||
const erc20Tokens = [
|
||||
//MDX
|
||||
@@ -10,11 +7,8 @@ const erc20Tokens = [
|
||||
];
|
||||
|
||||
/*** Treasury ***/
|
||||
const Treasury = async (timestamp, ethBlock, chainBlocks) => {
|
||||
const balances = {};
|
||||
let transformAddress = await getChainTransform('heco')
|
||||
await sumTokensAndLPsSharedOwners(balances, erc20Tokens.map(t => [t, false]), [treasuryAddress], chainBlocks["heco"], "heco", transformAddress);
|
||||
return balances;
|
||||
const Treasury = async (api) => {
|
||||
return api.sumTokens({ owner: treasuryAddress, tokens: erc20Tokens });
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -1,61 +1,23 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
|
||||
const CHAINS = ["boba"];
|
||||
|
||||
const Boba_SHIBUI = "0xf08ad7c3f6b1c6843ba027ad54ed8ddb6d71169b";
|
||||
|
||||
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";
|
||||
|
||||
const CHAIN_ORGANISED_DATA = {
|
||||
boba: () => {
|
||||
|
||||
return [
|
||||
{
|
||||
treasuryTokens: [
|
||||
[Boba_BOBA, false],
|
||||
[Boba_USDT, false],
|
||||
[Boba_SHIBUI_WETH, true],
|
||||
[Boba_SHIBUI_USDT, true],
|
||||
],
|
||||
treasuryKoyoTokens: [Boba_4Koyo],
|
||||
treasuryAddresses: [
|
||||
"0x9596E01Ad72d2B0fF13fe473cfcc48D3e4BB0f70", // Hot treasury
|
||||
],
|
||||
gaugeTokens: [Boba_SHIBUI_USDT],
|
||||
gaugeAddresses: [
|
||||
"0x6b8f4Fa6E44e923f5A995A87e4d79B3Bb9f8aaa3", // SHIBUI-USDT<>WAGMIv3
|
||||
],
|
||||
},
|
||||
true,
|
||||
];
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
start: 394825,
|
||||
|
||||
boba: {
|
||||
tvl: async (timestamp, _ethBlock, chainBlocks) => {
|
||||
const chain = CHAINS[0];
|
||||
const [data, koyoAssets] = CHAIN_ORGANISED_DATA[chain]();
|
||||
|
||||
const balances = {};
|
||||
const block = chainBlocks[chain];
|
||||
|
||||
await sumTokensAndLPsSharedOwners(
|
||||
balances,
|
||||
data.treasuryTokens,
|
||||
data.treasuryAddresses,
|
||||
block,
|
||||
chain
|
||||
);
|
||||
|
||||
return balances;
|
||||
tvl: async (api) => {
|
||||
return api.sumTokens({ owners: [
|
||||
"0x9596E01Ad72d2B0fF13fe473cfcc48D3e4BB0f70", // Hot treasury
|
||||
], tokens: [
|
||||
Boba_BOBA,
|
||||
Boba_USDT,
|
||||
Boba_SHIBUI_WETH,
|
||||
Boba_SHIBUI_USDT,
|
||||
] });
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,60 +1,29 @@
|
||||
const ADDRESSES = require('../helper/coreAssets.json')
|
||||
const { stakingUnknownPricedLP } = require("../helper/staking");
|
||||
const { sumTokensAndLPsSharedOwners } = require("../helper/unwrapLPs");
|
||||
const sdk = require("@defillama/sdk");
|
||||
const { BigNumber } = require("bignumber.js");
|
||||
const { sumTokens2 } = require('../helper/unwrapLPs');
|
||||
|
||||
const ftmToken = "0x4c9993c7107495020c2ce9a13d11839f48ecd2e6";
|
||||
const ftmStaking = "0xc6a54adddf7463f73a4c5a8e3e480bc798cf8a09";
|
||||
const ftmTreasury = "0x05ab17e4dfa87ef4ac487ed20cfcc2ae75c2a792";
|
||||
const ftmTokens = [
|
||||
[ADDRESSES.fantom.DAI, false],
|
||||
["0x78b51a1fd7524186982c2cb8982df312b1e896a8", true]
|
||||
ADDRESSES.fantom.DAI,
|
||||
"0x78b51a1fd7524186982c2cb8982df312b1e896a8"
|
||||
];
|
||||
|
||||
const avaxToken = "0x4c9993c7107495020c2ce9a13d11839f48ecd2e6";
|
||||
const avaxStaking = "0xfae672012b90cfb6bf245ac072a3aca374604b17";
|
||||
const avaxTreasury = "0x05ab17e4dfa87ef4ac487ed20cfcc2ae75c2a792";
|
||||
const avaxTokens = [
|
||||
[ADDRESSES.avax.DAI, false],
|
||||
["0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8", true]
|
||||
ADDRESSES.avax.DAI,
|
||||
"0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8"
|
||||
]
|
||||
|
||||
async function tokenPrice(block, chain, lp, unlisted, listed) {
|
||||
const tokensInLP = (await sdk.api.abi.multiCall({
|
||||
calls: [
|
||||
{
|
||||
target: unlisted,
|
||||
params: lp
|
||||
},
|
||||
{
|
||||
target: listed,
|
||||
params: lp
|
||||
}
|
||||
],
|
||||
abi: "erc20:balanceOf",
|
||||
block,
|
||||
chain
|
||||
})).output;
|
||||
return Number(tokensInLP[1].output) / Number(tokensInLP[0].output);
|
||||
async function ftmTvl(api) {
|
||||
return sumTokens2({ api, owner: ftmTreasury, tokens: ftmTokens, resolveLP: true })
|
||||
}
|
||||
|
||||
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, 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;
|
||||
}
|
||||
|
||||
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, 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;
|
||||
async function avaxTvl(api) {
|
||||
return sumTokens2({ api, owner: avaxTreasury, tokens: avaxTokens, resolveLP: true })
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
@@ -63,7 +32,7 @@ module.exports = {
|
||||
tvl: ftmTvl,
|
||||
staking: stakingUnknownPricedLP(ftmStaking, ftmToken, "fantom", "0x78b51a1fd7524186982c2cb8982df312b1e896a8")
|
||||
},
|
||||
avax:{
|
||||
avax: {
|
||||
tvl: avaxTvl,
|
||||
staking: stakingUnknownPricedLP(avaxStaking, avaxToken, "avax", "0x26e7c9b2890440866d7d3f8f84b1ccaff443b9d8")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user