Skip to content

Commit 766e93e

Browse files
committed
fix vicuna
1 parent 124d88a commit 766e93e

File tree

3 files changed

+49
-50
lines changed

3 files changed

+49
-50
lines changed

projects/helper/unwrapLPs.js

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ async function sumTokens2({
616616
// nftAddress
617617
// nftIdFetcher
618618
},
619-
resolveICHIVault = false,
619+
resolveIchiVault = false,
620620
solidlyVeNfts = [],
621621
convexRewardPools = [],
622622
auraPools = [],
@@ -715,22 +715,12 @@ async function sumTokens2({
715715
log(chain, 'summing tokens', tokensAndOwners.length)
716716

717717

718-
let ichiVaultToAs = []
719-
if (resolveICHIVault) {
720-
const symbols = (await api.multiCall({ abi: 'erc20:symbol', calls: tokensAndOwners.map(t => t[0]) }))
721-
tokensAndOwners.filter(([token, owner], i) => {
722-
if (isICHIVaultToken(symbols[i], token, api.chain)) {
723-
ichiVaultToAs.push([token, owner])
724-
return false
725-
}
726-
return true
727-
})
728-
}
729-
730718
await sumTokens(balances, tokensAndOwners, block, chain, transformAddress, { resolveLP, unwrapAll, blacklistedLPs, skipFixBalances: true, abis, permitFailure, sumChunkSize, })
731719

732-
if (ichiVaultToAs.length)
733-
await unwrapICHIVaults()
720+
721+
if (resolveIchiVault)
722+
await unwrapICHIVaults({ api })
723+
734724

735725
if (!skipFixBalances) {
736726
const fixBalances = await getFixBalances(chain)
@@ -743,30 +733,39 @@ async function sumTokens2({
743733
toa = toa.map(i => i.join('-'))
744734
return getUniqueAddresses(toa, chain).map(i => i.split('-'))
745735
}
736+
}
746737

738+
async function unwrapICHIVaults({ api }) {
739+
let chain = api.chain
740+
const balances = api.getBalances()
741+
let tokens = Object.keys(balances).filter(t => t.startsWith(chain + ':')).map(t => t.split(':')[1])
742+
const symbols = (await api.multiCall({ abi: 'erc20:symbol', calls: tokens, permitFailure: true })).map(i => i || '')
743+
const lps = tokens.filter((t, i) => isICHIVaultToken(symbols[i], t, chain))
747744

748-
async function unwrapICHIVaults() {
749-
const lps = ichiVaultToAs.map(i => i[0])
750-
const balanceOfCalls = ichiVaultToAs.map(t => ({ params: t[1], target: t[0] }))
751-
const [
752-
token0s, token1s, supplies, uBalances, tokenBalances
753-
] = await Promise.all([
754-
api.multiCall({ abi: 'address:token0', calls: lps }),
755-
api.multiCall({ abi: 'address:token1', calls: lps }),
756-
api.multiCall({ abi: 'uint256:totalSupply', calls: lps }),
757-
api.multiCall({ abi: 'function getTotalAmounts() view returns (uint256 token0Bal, uint256 token1Bal)', calls: lps }),
758-
api.multiCall({ abi: 'erc20:balanceOf', calls: balanceOfCalls }),
759-
])
760-
761-
tokenBalances.forEach((bal, i) => {
762-
const ratio = bal / supplies[i]
763-
const token0Bal = uBalances[i][0] * ratio
764-
const token1Bal = uBalances[i][1] * ratio
765-
sdk.util.sumSingleBalance(balances, token0s[i], token0Bal)
766-
sdk.util.sumSingleBalance(balances, token1s[i], token1Bal)
767-
})
768-
return balances
769-
}
745+
if (!lps.length) return api.getBalances()
746+
747+
const [
748+
token0s, token1s, supplies, uBalances,
749+
] = await Promise.all([
750+
api.multiCall({ abi: 'address:token0', calls: lps }),
751+
api.multiCall({ abi: 'address:token1', calls: lps }),
752+
api.multiCall({ abi: 'uint256:totalSupply', calls: lps }),
753+
api.multiCall({ abi: 'function getTotalAmounts() view returns (uint256 token0Bal, uint256 token1Bal)', calls: lps }),
754+
])
755+
756+
lps.forEach((_, i) => {
757+
const lpToken = `${chain}:${lps[i]}`
758+
const bal = balances[lpToken]
759+
if (!bal) return;
760+
const ratio = bal / supplies[i]
761+
const token0Bal = uBalances[i][0] * ratio
762+
const token1Bal = uBalances[i][1] * ratio
763+
api.add(token0s[i], token0Bal)
764+
api.add(token1s[i], token1Bal)
765+
api.removeTokenBalance(lpToken)
766+
})
767+
768+
return api.getBalances()
770769
}
771770

772771
function sumTokensExport({ balances, tokensAndOwners, tokensAndOwners2, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveSlipstream, resolveArtBlocks, resolveNFTs, fetchCoValentTokens, logCalls, ...args }) {

projects/helper/utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const blacklisted_LPS = new Set([
5252

5353
function isICHIVaultToken(symbol, token, chain) {
5454
if (symbol === 'ICHI_Vault_LP') return true
55-
if (chain === 'bsc' && symbol.startsWith('IV-') && symbol.endsWith('-THE')) return true
55+
if (symbol.startsWith('IV-')) return true
5656
return false
5757
}
5858

@@ -94,7 +94,7 @@ function isLP(symbol, token, chain) {
9494
if (chain === 'optimism' && /(-ZS)/.test(symbol)) return true
9595
if (chain === 'arbitrum' && /^(crAMM|vrAMM)-/.test(symbol)) return true // ramses LP
9696
if (chain === 'arbitrum' && /^(DLP|LP-)/.test(symbol)) return false // DODO or Wombat
97-
if (chain === 'base' && /^(v|s)-/.test(symbol)) return true // Equalizer LP
97+
if (['base', 'sonic',].includes(chain) && /^(v|s)-/.test(symbol)) return true // Equalizer LP
9898
if (chain === 'bsc' && /(-APE-LP-S)/.test(symbol)) return false
9999
if (chain === 'scroll' && /(cSLP|sSLP)$/.test(symbol)) return true //syncswap LP
100100
if (chain === 'btn' && /(XLT)$/.test(symbol)) return true //xenwave LP

projects/vicuna/index.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ const { sumTokens2 } = require("../helper/unwrapLPs");
33

44
module.exports = {
55
sonic: {
6-
tvl: async (api) => {
7-
const pools = await getConfig('vicuna','https://raw.githubusercontent.com/VicunaFinance-com/vicuna-frontend/refs/heads/main/config/sonic.json');
8-
9-
// Extract earnedTokenAddress from each pool
10-
const vaults = pools.map(pool => pool.vaultAddress)
11-
const tokens = await api.multiCall({ abi: 'address:want', calls: vaults})
12-
const balances = await api.multiCall({ abi: 'uint256:balance', calls: vaults})
13-
api.add(tokens, balances)
14-
return sumTokens2({ resolveLP: true, api})
15-
}
6+
tvl: async (api) => {
7+
const pools = await getConfig('vicuna', 'https://raw.githubusercontent.com/VicunaFinance-com/vicuna-frontend/refs/heads/main/config/sonic.json');
8+
9+
// Extract earnedTokenAddress from each pool
10+
const vaults = pools.map(pool => pool.vaultAddress)
11+
const tokens = await api.multiCall({ abi: 'address:want', calls: vaults })
12+
const balances = await api.multiCall({ abi: 'uint256:balance', calls: vaults })
13+
api.add(tokens, balances)
14+
return sumTokens2({ resolveLP: true, api, resolveIchiVault: true, })
1615
}
17-
}
16+
}
17+
}

0 commit comments

Comments
 (0)