@@ -616,7 +616,7 @@ async function sumTokens2({
616
616
// nftAddress
617
617
// nftIdFetcher
618
618
} ,
619
- resolveICHIVault = false ,
619
+ resolveIchiVault = false ,
620
620
solidlyVeNfts = [ ] ,
621
621
convexRewardPools = [ ] ,
622
622
auraPools = [ ] ,
@@ -715,22 +715,12 @@ async function sumTokens2({
715
715
log ( chain , 'summing tokens' , tokensAndOwners . length )
716
716
717
717
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
-
730
718
await sumTokens ( balances , tokensAndOwners , block , chain , transformAddress , { resolveLP, unwrapAll, blacklistedLPs, skipFixBalances : true , abis, permitFailure, sumChunkSize, } )
731
719
732
- if ( ichiVaultToAs . length )
733
- await unwrapICHIVaults ( )
720
+
721
+ if ( resolveIchiVault )
722
+ await unwrapICHIVaults ( { api } )
723
+
734
724
735
725
if ( ! skipFixBalances ) {
736
726
const fixBalances = await getFixBalances ( chain )
@@ -743,30 +733,39 @@ async function sumTokens2({
743
733
toa = toa . map ( i => i . join ( '-' ) )
744
734
return getUniqueAddresses ( toa , chain ) . map ( i => i . split ( '-' ) )
745
735
}
736
+ }
746
737
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 ) )
747
744
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 ( )
770
769
}
771
770
772
771
function sumTokensExport ( { balances, tokensAndOwners, tokensAndOwners2, tokens, owner, owners, transformAddress, unwrapAll, resolveLP, blacklistedLPs, blacklistedTokens, skipFixBalances, ownerTokens, resolveUniV3, resolveSlipstream, resolveArtBlocks, resolveNFTs, fetchCoValentTokens, logCalls, ...args } ) {
0 commit comments