Skip to content

Commit 80436b3

Browse files
committed
fix(predict): repair allowances during deposit and withdraw
1 parent cff965c commit 80436b3

4 files changed

Lines changed: 64 additions & 14 deletions

File tree

app/components/UI/Predict/providers/polymarket/preflight/deposit.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
} from './core';
1313
import { inspectMissingRequirements } from './inspectMissingRequirements';
1414
import {
15-
getLegacySweepAllowanceRequirements,
15+
getActiveV2AllowanceRequirements,
16+
getCanonicalV2AllowanceRequirements,
1617
type V2AllowanceRequirement,
1718
} from './v2AllowanceRequirements';
1819

@@ -37,13 +38,14 @@ export async function planDepositMaintenance({
3738
address: safeAddress,
3839
tokenAddress: protocol.collateral.legacyUsdceToken,
3940
}));
40-
const missingRequirements =
41+
const requirements =
4142
preExistingSafeUsdceBalance > 0n
42-
? await inspectMissingRequirements({
43-
address: safeAddress,
44-
requirements: getLegacySweepAllowanceRequirements(protocol),
45-
})
46-
: [];
43+
? getCanonicalV2AllowanceRequirements(protocol)
44+
: getActiveV2AllowanceRequirements(protocol);
45+
const missingRequirements = await inspectMissingRequirements({
46+
address: safeAddress,
47+
requirements,
48+
});
4749

4850
return {
4951
missingRequirements,

app/components/UI/Predict/providers/polymarket/preflight/withdraw.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,16 @@ jest.mock('../utils', () => ({
2222

2323
import { POLYMARKET_V2_PROTOCOL } from '../protocol/definitions';
2424
import { getRawTokenBalance } from './core';
25+
import { inspectMissingRequirements } from './inspectMissingRequirements';
2526
import { planWithdraw } from './withdraw';
2627

2728
const mockGetRawTokenBalance = getRawTokenBalance as jest.MockedFunction<
2829
typeof getRawTokenBalance
2930
>;
31+
const mockInspectMissingRequirements =
32+
inspectMissingRequirements as jest.MockedFunction<
33+
typeof inspectMissingRequirements
34+
>;
3035

3136
const signer = {
3237
address: '0x1111111111111111111111111111111111111111',
@@ -55,6 +60,18 @@ describe('planWithdraw', () => {
5560
address: '0x9999999999999999999999999999999999999999',
5661
tokenAddress: POLYMARKET_V2_PROTOCOL.collateral.legacyUsdceToken,
5762
});
63+
expect(mockInspectMissingRequirements).toHaveBeenCalledWith({
64+
address: '0x9999999999999999999999999999999999999999',
65+
requirements: expect.arrayContaining([
66+
expect.objectContaining({
67+
tokenAddress: POLYMARKET_V2_PROTOCOL.collateral.legacyUsdceToken,
68+
spender: POLYMARKET_V2_PROTOCOL.collateral.onrampAddress,
69+
}),
70+
expect.objectContaining({
71+
tokenAddress: POLYMARKET_V2_PROTOCOL.collateral.tradingToken,
72+
}),
73+
]),
74+
});
5875
expect(plan.transactions.map((transaction) => transaction.to)).toEqual([
5976
POLYMARKET_V2_PROTOCOL.collateral.onrampAddress,
6077
POLYMARKET_V2_PROTOCOL.collateral.tradingToken,

app/components/UI/Predict/providers/polymarket/preflight/withdraw.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import {
1313
} from './core';
1414
import { inspectMissingRequirements } from './inspectMissingRequirements';
1515
import {
16-
getLegacySweepAllowanceRequirements,
16+
getActiveV2AllowanceRequirements,
17+
getCanonicalV2AllowanceRequirements,
1718
type V2AllowanceRequirement,
1819
} from './v2AllowanceRequirements';
1920

@@ -43,13 +44,14 @@ export async function planWithdraw({
4344
address: safeAddress,
4445
tokenAddress: protocol.collateral.legacyUsdceToken,
4546
}));
46-
const missingRequirements =
47+
const requirements =
4748
safeLegacyUsdceBalance > 0n
48-
? await inspectMissingRequirements({
49-
address: safeAddress,
50-
requirements: getLegacySweepAllowanceRequirements(protocol),
51-
})
52-
: [];
49+
? getCanonicalV2AllowanceRequirements(protocol)
50+
: getActiveV2AllowanceRequirements(protocol);
51+
const missingRequirements = await inspectMissingRequirements({
52+
address: safeAddress,
53+
requirements,
54+
});
5355

5456
return {
5557
requestedAmountRaw,

app/components/UI/Predict/providers/polymarket/preflight/workflows.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,19 @@ describe('preflight workflow planners', () => {
109109
);
110110
});
111111

112+
it('builds deposit maintenance allowance repairs even without legacy balance', async () => {
113+
mockGetRawTokenBalance.mockResolvedValueOnce(0n);
114+
115+
const plan = await planDepositMaintenance({
116+
protocol: POLYMARKET_V2_PROTOCOL,
117+
safeAddress: '0x1111111111111111111111111111111111111111',
118+
});
119+
120+
expect(plan.transactions.map((transaction) => transaction.to)).toEqual([
121+
'0x1000000000000000000000000000000000000000',
122+
]);
123+
});
124+
112125
it('builds claim transactions as repairs, wrap, adapter claim, then exact pUSD gas transfer', async () => {
113126
mockGetRawTokenBalance.mockResolvedValueOnce(10n).mockResolvedValueOnce(0n);
114127

@@ -197,4 +210,20 @@ describe('preflight workflow planners', () => {
197210
POLYMARKET_V2_PROTOCOL.collateral.tradingToken,
198211
]);
199212
});
213+
214+
it('builds withdraw allowance repairs even without legacy balance', async () => {
215+
mockGetRawTokenBalance.mockResolvedValueOnce(0n);
216+
217+
const plan = await planWithdraw({
218+
protocol: POLYMARKET_V2_PROTOCOL,
219+
signer,
220+
safeAddress: '0x9999999999999999999999999999999999999999',
221+
requestedAmountRaw: BigInt(parseUnits('2', 6).toString()),
222+
});
223+
224+
expect(plan.transactions.map((transaction) => transaction.to)).toEqual([
225+
'0x1000000000000000000000000000000000000000',
226+
POLYMARKET_V2_PROTOCOL.collateral.tradingToken,
227+
]);
228+
});
200229
});

0 commit comments

Comments
 (0)