From 1b0f4e8aa63b95eed2296257918ec2d7d68e0a4a Mon Sep 17 00:00:00 2001 From: TonyG Date: Fri, 12 Aug 2022 19:46:18 +0200 Subject: [PATCH] fix: polynomial - get correct range for deposit/withdrawal queue --- .../optimism/polynomial.balance-fetcher.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/apps/polynomial/optimism/polynomial.balance-fetcher.ts b/src/apps/polynomial/optimism/polynomial.balance-fetcher.ts index 1579ed124..d4547b99a 100644 --- a/src/apps/polynomial/optimism/polynomial.balance-fetcher.ts +++ b/src/apps/polynomial/optimism/polynomial.balance-fetcher.ts @@ -40,10 +40,13 @@ export class OptimismPolynomialBalanceFetcher implements BalanceFetcher { resolveBalances: async ({ address, multicall, contractPosition: position }) => { const contract = this.contractFactory.polynomialCoveredCall(position); - const depositHead = Number(await multicall.wrap(contract).queuedDepositHead()); + const [depositHead, depositTail] = await Promise.all([ + multicall.wrap(contract).queuedDepositHead(), + multicall.wrap(contract).nextQueuedDepositId(), + ]); // Note: ignores pending deposits when deposit queue is large. Consider checking if the last user is ZERO_ADDRESS and recursing const pendingDeposits = await Promise.all( - map(range(250), async i => multicall.wrap(contract).depositQueue(depositHead + Number(i))), + map(range(Number(depositHead), Number(depositTail)), async i => multicall.wrap(contract).depositQueue(i)), ); const pendingDepositBalance = sumBy(pendingDeposits, deposit => { // Note: ignores partial deposits @@ -67,10 +70,15 @@ export class OptimismPolynomialBalanceFetcher implements BalanceFetcher { resolveBalances: async ({ address, multicall, contractPosition: position }) => { const contract = this.contractFactory.polynomialCoveredCall(position); - const withdrawalHead = Number(await multicall.wrap(contract).queuedWithdrawalHead()); + const [withdrawalHead, withdrawalTail] = await Promise.all([ + multicall.wrap(contract).queuedWithdrawalHead(), + multicall.wrap(contract).nextQueuedWithdrawalId(), + ]); // Note: ignores pending withdrawals when withdrawal queue is large const pendingWithdrawals = await Promise.all( - map(range(250), async i => multicall.wrap(contract).withdrawalQueue(withdrawalHead + Number(i))), + map(range(Number(withdrawalHead), Number(withdrawalTail)), async i => + multicall.wrap(contract).withdrawalQueue(i), + ), ); const pendingWithdrawalBalance = sumBy(pendingWithdrawals, withdrawal => { // Note: ignores partial withdrawals