mirror of
https://github.com/alexgo-io/DefiLlama-Adapters.git
synced 2026-01-12 16:53:02 +08:00
97 lines
3.7 KiB
JavaScript
97 lines
3.7 KiB
JavaScript
const { sumTokens2 } = require("../helper/unwrapLPs")
|
|
const { getUserMasterChefBalances } = require("../helper/masterchef")
|
|
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')
|
|
|
|
const BASE_API_URL = 'https://api.singlefinance.io'
|
|
|
|
const constants = {
|
|
'cronos': {
|
|
chainId: 25,
|
|
single: '0x0804702a4e749d39a35fde73d1df0b1f1d6b8347'
|
|
},
|
|
'fantom': {
|
|
chainId: 250,
|
|
single: '0x8cc97b50fe87f31770bcdcd6bc8603bc1558380b'
|
|
},
|
|
'arbitrum': {
|
|
chainId: 42161,
|
|
single: '0x55853edc67aa68ec2e3903ac00f2bc5bf2ca8db0'
|
|
}
|
|
}
|
|
|
|
const getWMasterChefBalances = ({ masterChef: masterChefAddress, wMasterChef, name, ...rest }, args) => {
|
|
const commonParams = { masterChefAddress, userAddres: wMasterChef }
|
|
if (name === "vvsMultiYield") {
|
|
return getUserCraftsmanV2Balances({ ...commonParams, poolInfoABI: vvsPoolInfoABI, craftsmanV1: rest.craftsmanV1, ...args })
|
|
}
|
|
if (name === "spookyMultiYield" || name === "sushi") {
|
|
return getUserMasterChefBalances({ ...commonParams, poolInfoABI: spookyMasterChefV2PoolInfoABI, getLPAddress: a => a, ...args, chain: args.api.chain, block: args.api.block, balances: args.api.getBalances() })
|
|
}
|
|
if (name === "camelot") {
|
|
return getUserCamelotMasterBalances({ ...commonParams, ...args })
|
|
}
|
|
return getUserMasterChefBalances({ ...commonParams, poolInfoABI: vvsPoolInfoABI, ...args, chain: args.api.chain, block: args.api.block, balances: args.api.getBalances() })
|
|
}
|
|
|
|
const getHelpers = (chain) => {
|
|
|
|
const SINGLE_TOKEN = constants[chain].single;
|
|
|
|
const _getConfig = () => getConfig('single/contracts/'+chain, `${BASE_API_URL}/api/protocol/contracts?chainid=${constants[chain].chainId}`)
|
|
|
|
async function staking(api) {
|
|
|
|
const { pools, } = await _getConfig()
|
|
const tokensAndOwners = pools.filter(pool => !pool.isLP).map(pool => [pool.tokenContract, pool.address])
|
|
|
|
return sumTokens2({ tokensAndOwners, api })
|
|
}
|
|
|
|
async function tvl(api) {
|
|
const { wmasterchefs, vaults, } = await _getConfig()
|
|
for (const wMasterChef of wmasterchefs) {
|
|
await getWMasterChefBalances(wMasterChef, { api, excludePool2: true, pool2Tokens: [SINGLE_TOKEN] })
|
|
}
|
|
|
|
const tokensAndOwners = vaults.map(({ token, address }) => [token, address])
|
|
await sumTokens2({ api, tokensAndOwners, }) // Add lending pool tokens to balances
|
|
}
|
|
|
|
async function pool2(api) {
|
|
const { wmasterchefs, pools } = await _getConfig()
|
|
const tokensAndOwners = pools.filter(pool => pool.isLP).map(pool => [pool.tokenContract, pool.address])
|
|
await sumTokens2({ api, tokensAndOwners, resolveLP: true }) // Add staked lp tokens to balances
|
|
|
|
for (const wMasterChef of wmasterchefs) {
|
|
await getWMasterChefBalances(wMasterChef, { api, onlyPool2: true, pool2Tokens: [SINGLE_TOKEN] })
|
|
}
|
|
}
|
|
|
|
return {
|
|
tvl,
|
|
pool2,
|
|
staking
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
start: '2022-01-26',
|
|
misrepresentedTokens: true,
|
|
cronos: getHelpers('cronos'),
|
|
fantom: getHelpers('fantom'),
|
|
arbitrum: getHelpers('arbitrum'),
|
|
}
|
|
|
|
|
|
/* async function cronosTvl(api) {
|
|
const { data } = await getConfig('single/vault/cronos', 'https://api.singlefinance.io/api/vaults?chainid=25')
|
|
const tokensAndOwners = data.map(({ token, address }) => [token.id, address])
|
|
await api.sumTokens({ tokensAndOwners})
|
|
const { data: strategies } = await getConfig('single/strategy/cronos','https://api.singlefinance.io/api/strategies?chainid=25')
|
|
const tether = strategies.reduce((a, i)=> a+i.tvl/1e18, 0)
|
|
api.addUSDValue(tether)
|
|
}
|
|
*/ |