@@ -75,36 +75,43 @@ export async function getConditional(contracts, address) {
75 return { total: 0, available: 0, withdrawn: 0, batchLimits: [] };
75 return { total: 0, available: 0, withdrawn: 0, batchLimits: [] };
78− const forfeited = await conditionalSR.getForfeited(contracts, address);
79 const total = remaining.length;
78 const total = remaining.length;
80 let balance = total;
79 let balance = total;
82− const withdrawLimits = await batches.reduce(async (p, _, idx) => {
81+ // does not account for forfeiting or withdrawl
83− const acc = await p;
82+ const limits = await Promise.all(
84− if (forfeited[idx] || balance === 0) {
83+ batches.map((_, idx) =>
87− const limit = await conditionalSR.getWithdrawLimit(contracts, address, idx);
84+ conditionalSR.getWithdrawLimit(contracts, address, idx)
88− if (limit <= balance) {
85+ )
89− balance -= limit;
86+ );
90− return [...acc, limit];
92− const remaining = balance;
95− return [...acc, remaining];
88+ const withdrawn = await conditionalSR.getWithdrawn(contracts, address);
96− }, Promise.resolve([]));
98− const available = withdrawLimits.reduce((acc, val) => acc + val, 0);
90+ const forfeited = await conditionalSR.getForfeited(contracts, address);
100− const withdrawnAmounts = await conditionalSR.getWithdrawn(contracts, address);
92+ const batchLimits = [];
102− const withdrawn = withdrawnAmounts.reduce((acc, val) => acc + val, 0);
94+ for (let i = 0; i < limits.length; i++) {
103− const batchLimits = withdrawLimits.map(
95+ // skip batch if forfeited or no stars left
104− (limit, idx) => limit - withdrawnAmounts[idx]
96+ if (forfeited[i] || balance === 0) {
105− );
97+ batchLimits.push(0);
100+ const availableInBatch = limits[i] - withdrawn[i];
101+ if (balance < availableInBatch) {
102+ batchLimits.push(balance);
106+ batchLimits.push(availableInBatch);
107+ balance = balance - availableInBatch;
110+ const withdrawnTotal = withdrawn.reduce((acc, val) => acc + val, 0);
112+ batchLimits.reduce((acc, val) => acc + val, 0) + withdrawnTotal;
107− return { total, available, withdrawn, batchLimits };
114+ return { total, available, withdrawn: withdrawnTotal, batchLimits };
110export async function getLinear(contracts, address) {
117export async function getLinear(contracts, address) {