Skip to content

Commit 4d5ec2e

Browse files
committed
fix: position loading
1 parent fea5f98 commit 4d5ec2e

2 files changed

Lines changed: 122 additions & 112 deletions

File tree

src/loader/userPositionsLoader.ts

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/utils/aggregationUtils.ts

Lines changed: 58 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ export function parseRangeTokensResult(result) {
7777
}
7878

7979
export function aggregatePositions(positions: LiquidityPosition[]) {
80+
if (positions.length === 0) {
81+
return [];
82+
}
83+
8084
const firstDepositTxHash =
8185
positions.reduce((acc, curr) => {
8286
if (!acc || new Date(curr.time) < new Date(acc.time)) {
@@ -85,58 +89,60 @@ export function aggregatePositions(positions: LiquidityPosition[]) {
8589
return acc;
8690
}, positions[0])?.transactionHash || '';
8791

88-
return positions.reduce(
89-
(acc, curr) => ({
90-
base: curr.base,
91-
quote: curr.quote,
92-
poolIdx: curr.poolIdx,
93-
ambientLiq: bignumber(acc.ambientLiq).plus(curr.ambientLiq).toString(),
94-
time: curr.time,
95-
transactionHash: firstDepositTxHash,
96-
concLiq: bignumber(acc.concLiq).plus(curr.concLiq).toString(),
97-
rewardLiq: bignumber(acc.rewardLiq).plus(curr.rewardLiq).toString(),
98-
baseQty: bignumber(acc.baseQty).plus(curr.baseQty).toString(),
99-
quoteQty: bignumber(acc.quoteQty).plus(curr.quoteQty).toString(),
100-
aggregatedLiquidity: bignumber(acc.aggregatedLiquidity).plus(curr.aggregatedLiquidity).toString(),
101-
aggregatedBaseFlow: bignumber(acc.aggregatedBaseFlow).plus(curr.aggregatedBaseFlow).toString(),
102-
aggregatedQuoteFlow: bignumber(acc.aggregatedQuoteFlow).plus(curr.aggregatedQuoteFlow).toString(),
103-
positionType: PositionType.ambient,
104-
bidTick: curr.bidTick,
105-
askTick: curr.askTick,
106-
aprDuration: curr.aprDuration,
107-
aprPostLiq: curr.aprPostLiq,
108-
aprContributedLiq: curr.aprContributedLiq,
109-
aprEst: curr.aprEst,
110-
111-
lpTokenAddress: curr.lpTokenAddress,
112-
lpTokenBalance: curr.lpTokenBalance,
113-
}),
114-
{
115-
base: '',
116-
quote: '',
117-
poolIdx: '',
118-
ambientLiq: '0',
119-
time: '0',
120-
transactionHash: '',
121-
concLiq: '0',
122-
rewardLiq: '0',
123-
baseQty: '0',
124-
quoteQty: '0',
125-
aggregatedLiquidity: '0',
126-
aggregatedBaseFlow: '0',
127-
aggregatedQuoteFlow: '0',
128-
positionType: PositionType.ambient,
129-
bidTick: 0,
130-
askTick: 0,
131-
aprDuration: '0',
132-
aprPostLiq: '0',
133-
aprContributedLiq: '0',
134-
aprEst: '0',
135-
136-
lpTokenAddress: '',
137-
lpTokenBalance: '',
138-
},
139-
);
92+
return [
93+
positions.reduce(
94+
(acc, curr) => ({
95+
base: curr.base,
96+
quote: curr.quote,
97+
poolIdx: curr.poolIdx,
98+
ambientLiq: bignumber(acc.ambientLiq).plus(curr.ambientLiq).toString(),
99+
time: curr.time,
100+
transactionHash: firstDepositTxHash,
101+
concLiq: bignumber(acc.concLiq).plus(curr.concLiq).toString(),
102+
rewardLiq: bignumber(acc.rewardLiq).plus(curr.rewardLiq).toString(),
103+
baseQty: bignumber(acc.baseQty).plus(curr.baseQty).toString(),
104+
quoteQty: bignumber(acc.quoteQty).plus(curr.quoteQty).toString(),
105+
aggregatedLiquidity: bignumber(acc.aggregatedLiquidity).plus(curr.aggregatedLiquidity).toString(),
106+
aggregatedBaseFlow: bignumber(acc.aggregatedBaseFlow).plus(curr.aggregatedBaseFlow).toString(),
107+
aggregatedQuoteFlow: bignumber(acc.aggregatedQuoteFlow).plus(curr.aggregatedQuoteFlow).toString(),
108+
positionType: PositionType.ambient,
109+
bidTick: curr.bidTick,
110+
askTick: curr.askTick,
111+
aprDuration: curr.aprDuration,
112+
aprPostLiq: curr.aprPostLiq,
113+
aprContributedLiq: curr.aprContributedLiq,
114+
aprEst: curr.aprEst,
115+
116+
lpTokenAddress: curr.lpTokenAddress,
117+
lpTokenBalance: curr.lpTokenBalance,
118+
}),
119+
{
120+
base: '',
121+
quote: '',
122+
poolIdx: '',
123+
ambientLiq: '0',
124+
time: '0',
125+
transactionHash: '',
126+
concLiq: '0',
127+
rewardLiq: '0',
128+
baseQty: '0',
129+
quoteQty: '0',
130+
aggregatedLiquidity: '0',
131+
aggregatedBaseFlow: '0',
132+
aggregatedQuoteFlow: '0',
133+
positionType: PositionType.ambient,
134+
bidTick: 0,
135+
askTick: 0,
136+
aprDuration: '0',
137+
aprPostLiq: '0',
138+
aprContributedLiq: '0',
139+
aprEst: '0',
140+
141+
lpTokenAddress: '',
142+
lpTokenBalance: '',
143+
},
144+
),
145+
];
140146
}
141147

142148
export function filterPositions(

0 commit comments

Comments
 (0)