Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
fix(polynomial): Get correct range for deposit/withdrawal queue (#1157)
Browse files Browse the repository at this point in the history
  • Loading branch information
tonzgao authored Aug 12, 2022
1 parent b8bc8b7 commit 594230f
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/apps/polynomial/optimism/polynomial.balance-fetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 594230f

Please sign in to comment.