@@ -79,68 +79,72 @@ export async function getUserPositions(
7979 return [ ] ;
8080 }
8181
82- const ambientMints = ambientPositions . shift ( ) ;
82+ let ambientPositionResults = [ ] ;
83+ if ( ambientPositions . length > 0 ) {
84+ const ambientMints = ambientPositions . shift ( ) ;
8385
84- const ambientMulticallData = [
85- {
86- target : queryContract . getAddress ( ) ,
87- callData : queryContract . interface . encodeFunctionData ( 'queryAmbientTokens' , [ user , base , quote , poolIdx ] ) ,
88- } ,
89- {
90- target : queryContract . getAddress ( ) ,
91- callData : queryContract . interface . encodeFunctionData ( 'queryPoolLpTokenAddress' , [ base , quote , poolIdx ] ) ,
92- } ,
93- ] ;
94-
95- const ambientMulticallResults = await chain . multicall . tryAggregate . staticCall ( true , ambientMulticallData ) ;
96-
97- async function parseAmbientCallResults ( ) {
98- const ambientTokensResult = ambientMulticallResults [ 0 ] ;
99- const lpTokenAddressResult = ambientMulticallResults [ 1 ] ;
100-
101- if ( ambientTokensResult . success && lpTokenAddressResult . success ) {
102- const ambientTokens = parseAmbientTokensResult (
103- queryContract . interface . decodeFunctionResult ( 'queryAmbientTokens' , ambientTokensResult . returnData ) ,
104- ) ;
105- const lpTokenAddress = queryContract . interface . decodeFunctionResult (
106- 'queryPoolLpTokenAddress' ,
107- lpTokenAddressResult . returnData ,
108- ) [ 0 ] ;
109-
110- const lpTokenBalance = await getErc20Balance ( rpc , lpTokenAddress , user ) . then ( ( balance ) => balance . toString ( ) ) ;
111-
112- const ambientLiq = bignumber ( ambientTokens . liq ) . plus ( bignumber ( lpTokenBalance ) ) . toFixed ( 0 ) ;
113- return [
114- {
115- base : base ,
116- quote : quote ,
117- poolIdx : ambientMints . pool . poolIdx ,
118- ambientLiq,
119- time : ambientMints . time ,
120- transactionHash : ambientMints . transactionHash ,
121- concLiq : '0' ,
122- rewardLiq : '0' ,
123- baseQty : ambientTokens . baseQty ,
124- quoteQty : ambientTokens . quoteQty ,
125- aggregatedLiquidity : ambientMints . liq ,
126- aggregatedBaseFlow : ambientMints . baseFlow ,
127- aggregatedQuoteFlow : ambientMints . quoteFlow ,
128- positionType : ambientMints . positionType ,
129- bidTick : ambientMints . bidTick ,
130- askTick : ambientMints . askTick ,
131- aprDuration : '0' ,
132- aprPostLiq : '0' ,
133- aprContributedLiq : '0' ,
134- aprEst : '0' ,
135- lpTokenAddress,
136- lpTokenBalance,
137- } ,
138- ] ;
86+ const ambientMulticallData = [
87+ {
88+ target : queryContract . getAddress ( ) ,
89+ callData : queryContract . interface . encodeFunctionData ( 'queryAmbientTokens' , [ user , base , quote , poolIdx ] ) ,
90+ } ,
91+ {
92+ target : queryContract . getAddress ( ) ,
93+ callData : queryContract . interface . encodeFunctionData ( 'queryPoolLpTokenAddress' , [ base , quote , poolIdx ] ) ,
94+ } ,
95+ ] ;
96+
97+ const ambientMulticallResults = await chain . multicall . tryAggregate . staticCall ( true , ambientMulticallData ) ;
98+
99+ async function parseAmbientCallResults ( ) {
100+ const ambientTokensResult = ambientMulticallResults [ 0 ] ;
101+ const lpTokenAddressResult = ambientMulticallResults [ 1 ] ;
102+
103+ if ( ambientTokensResult . success && lpTokenAddressResult . success ) {
104+ const ambientTokens = parseAmbientTokensResult (
105+ queryContract . interface . decodeFunctionResult ( 'queryAmbientTokens' , ambientTokensResult . returnData ) ,
106+ ) ;
107+ const lpTokenAddress = queryContract . interface . decodeFunctionResult (
108+ 'queryPoolLpTokenAddress' ,
109+ lpTokenAddressResult . returnData ,
110+ ) [ 0 ] ;
111+
112+ const lpTokenBalance = await getErc20Balance ( rpc , lpTokenAddress , user ) . then ( ( balance ) => balance . toString ( ) ) ;
113+
114+ const ambientLiq = bignumber ( ambientTokens . liq ) . plus ( bignumber ( lpTokenBalance ) ) . toFixed ( 0 ) ;
115+
116+ return [
117+ {
118+ base : base ,
119+ quote : quote ,
120+ poolIdx : ambientMints . pool . poolIdx ,
121+ ambientLiq,
122+ time : ambientMints . time ,
123+ transactionHash : ambientMints . transactionHash ,
124+ concLiq : '0' ,
125+ rewardLiq : '0' ,
126+ baseQty : ambientTokens . baseQty ,
127+ quoteQty : ambientTokens . quoteQty ,
128+ aggregatedLiquidity : ambientMints . liq ,
129+ aggregatedBaseFlow : ambientMints . baseFlow ,
130+ aggregatedQuoteFlow : ambientMints . quoteFlow ,
131+ positionType : ambientMints . positionType ,
132+ bidTick : ambientMints . bidTick ,
133+ askTick : ambientMints . askTick ,
134+ aprDuration : '0' ,
135+ aprPostLiq : '0' ,
136+ aprContributedLiq : '0' ,
137+ aprEst : '0' ,
138+ lpTokenAddress,
139+ lpTokenBalance,
140+ } ,
141+ ] ;
142+ }
143+ return [ ] ;
139144 }
140- return [ ] ;
141- }
142145
143- const ambientPositionResults = await parseAmbientCallResults ( ) ;
146+ ambientPositionResults = await parseAmbientCallResults ( ) ;
147+ }
144148
145149 const aggregatedAmbientPosition = aggregatePositions ( ambientPositionResults ) ;
146150
@@ -241,7 +245,7 @@ export async function getUserPositions(
241245 } ) ,
242246 ) ;
243247
244- const result = [ aggregatedAmbientPosition , ...concentratedPositionsResults . filter ( Boolean ) ] ;
248+ const result = [ ... aggregatedAmbientPosition , ...concentratedPositionsResults . filter ( Boolean ) ] ;
245249
246250 return result ;
247251}
0 commit comments