Skip to content

Commit cab44ae

Browse files
Paraswap v6.2 migration (#596) (#597)
* feat: add v6 selectors * test: new paraswap v6.2 selector offsets Co-authored-by: Danylo Kanievskyi <[email protected]>
1 parent 521b4d9 commit cab44ae

File tree

4 files changed

+106
-6
lines changed

4 files changed

+106
-6
lines changed

packages/contract-helpers/src/commons/utils.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,32 @@ describe('Utils', () => {
7777
const offset = augustusToAmountOffsetFromCalldata('0x87a63926');
7878
expect(offset).toEqual(68);
7979
});
80+
81+
it('Expects 132 when Augustus V6 swapExactAmountOut', () => {
82+
const offset = augustusToAmountOffsetFromCalldata('0x7f457675');
83+
expect(offset).toEqual(132);
84+
});
85+
86+
it('Expects 36 when Augustus V6 swapExactAmountOutOnBalancerV2', () => {
87+
const offset = augustusToAmountOffsetFromCalldata('0xd6ed22e6');
88+
expect(offset).toEqual(36);
89+
});
90+
91+
it('Expects 196 when Augustus V6 swapExactAmountOutOnUniswapV2', () => {
92+
const offset = augustusToAmountOffsetFromCalldata('0xa76f4eb6');
93+
expect(offset).toEqual(196);
94+
});
95+
96+
it('Expects 196 when Augustus V6 swapExactAmountOutOnUniswapV3', () => {
97+
const offset = augustusToAmountOffsetFromCalldata('0x5e94e28d');
98+
expect(offset).toEqual(196);
99+
});
100+
101+
it('Expects 100 when Augustus V6 swapExactAmountInOutOnMakerPSM', () => {
102+
const offset = augustusToAmountOffsetFromCalldata('0x987e7d8e');
103+
expect(offset).toEqual(100);
104+
});
105+
80106
it('Expects Error', () => {
81107
expect(() => augustusToAmountOffsetFromCalldata('asdf')).toThrowError(
82108
`Unrecognized function selector for Augustus`,

packages/contract-helpers/src/commons/utils.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,18 @@ export const augustusToAmountOffsetFromCalldata = (
207207
case '0xb66bcbac': // Augustus V5 buy (old)
208208
case '0x35326910': // Augustus V5 buy
209209
return 164; // 4 + 5 * 32
210-
case '0x87a63926': // directUniV3Buy
210+
case '0x87a63926': // Augustus V5 directUniV3Buy
211211
return 68; // 4 + 2 * 32
212+
case '0x7f457675': // Augustus V6 swapExactAmountOut
213+
return 132; // 4 + 4 * 32
214+
case '0xd6ed22e6': // Augustus V6 swapExactAmountOutOnBalancerV2
215+
return 36; // 4 + 1 * 32
216+
case '0xa76f4eb6': // Augustus V6 swapExactAmountOutOnUniswapV2
217+
return 196; // 4 + 6 * 32
218+
case '0x5e94e28d': // Augustus V6 swapExactAmountOutOnUniswapV3
219+
return 196; // 4 + 6 * 32
220+
case '0x987e7d8e': // Augustus V6 swapExactAmountInOutOnMakerPSM
221+
return 100; // 4 + 3 * 32
212222
default:
213223
throw new Error('Unrecognized function selector for Augustus');
214224
}

packages/contract-helpers/src/paraswap-liquiditySwapAdapter-contract/index.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,29 @@ export function augustusFromAmountOffsetFromCalldata(calldata: string): number {
4040
return 68; // 4 + 2 * 32
4141
case '0x46c67b6d': // Augustus V5 megaSwap
4242
return 68; // 4 + 2 * 32
43-
case '0xb22f4db8': // directBalancerV2GivenInSwap
43+
case '0xb22f4db8': // Augustus V5 directBalancerV2GivenInSwap
4444
return 68; // 4 + 2 * 32
45-
case '0x19fc5be0': // directBalancerV2GivenOutSwap
45+
case '0x19fc5be0': // Augustus V5 directBalancerV2GivenOutSwap
4646
return 68; // 4 + 2 * 32
47-
case '0x3865bde6': // directCurveV1Swap
47+
case '0x3865bde6': // Augustus V5 directCurveV1Swap
4848
return 68; // 4 + 2 * 32
49-
case '0x58f15100': // directCurveV2Swap
49+
case '0x58f15100': // Augustus V5 directCurveV2Swap
5050
return 68; // 4 + 2 * 32
51-
case '0xa6866da9': // directUniV3Swap
51+
case '0xa6866da9': // Augustus V5 directUniV3Swap
52+
return 68; // 4 + 2 * 32
53+
case '0xe3ead59e': // Augustus V6 swapExactAmountIn
54+
return 100; // 4 + 3 * 32
55+
case '0xd85ca173': // Augustus V6 swapExactAmountInOnBalancerV2
56+
return 4; // 4 + 0 * 32
57+
case '0x1a01c532': // Augustus V6 swapExactAmountInOnCurveV1
58+
return 132; // 4 + 4 * 32
59+
case '0xe37ed256': // Augustus V6 swapExactAmountInOnCurveV2
60+
return 196; // 4 + 6 * 32
61+
case '0xe8bb3b6c': // Augustus V6 swapExactAmountInOnUniswapV2
62+
return 164; // 4 + 4 * 32
63+
case '0x876a02f6': // Augustus V6 swapExactAmountInOnUniswapV3
64+
return 164; // 4 + 4 * 32
65+
case '0x987e7d8e': // Augustus V6 swapExactAmountInOutOnMakerPSM
5266
return 68; // 4 + 2 * 32
5367
default:
5468
throw new Error('Unrecognized function selector for Augustus');

packages/contract-helpers/src/paraswap-liquiditySwapAdapter-contract/paraswapLiquiditySwapAdapter.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,56 @@ describe('LiquiditySwapAdapterService', () => {
136136

137137
expect(offset).toEqual(68);
138138
});
139+
140+
it('Expects 100 when Augustus V6 swapExactAmountIn', () => {
141+
const callData = '0xe3ead59e0000000000otherCallData000000000';
142+
const offset = augustusFromAmountOffsetFromCalldata(callData);
143+
144+
expect(offset).toEqual(100);
145+
});
146+
147+
it('Expects 4 when Augustus V6 swapExactAmountInOnBalancerV2', () => {
148+
const callData = '0xd85ca1730000000000otherCallData000000000';
149+
const offset = augustusFromAmountOffsetFromCalldata(callData);
150+
151+
expect(offset).toEqual(4);
152+
});
153+
154+
it('Expects 132 when Augustus V6 swapExactAmountInOnCurveV1', () => {
155+
const callData = '0x1a01c5320000000000otherCallData000000000';
156+
const offset = augustusFromAmountOffsetFromCalldata(callData);
157+
158+
expect(offset).toEqual(132);
159+
});
160+
161+
it('Expects 196 when Augustus V6 swapExactAmountInOnCurveV2', () => {
162+
const callData = '0xe37ed2560000000000otherCallData000000000';
163+
const offset = augustusFromAmountOffsetFromCalldata(callData);
164+
165+
expect(offset).toEqual(196);
166+
});
167+
168+
it('Expects 164 when Augustus V6 swapExactAmountInOnUniswapV2', () => {
169+
const callData = '0xe8bb3b6c0000000000otherCallData000000000';
170+
const offset = augustusFromAmountOffsetFromCalldata(callData);
171+
172+
expect(offset).toEqual(164);
173+
});
174+
175+
it('Expects 164 when Augustus V6 swapExactAmountInOnUniswapV3', () => {
176+
const callData = '0x876a02f60000000000otherCallData000000000';
177+
const offset = augustusFromAmountOffsetFromCalldata(callData);
178+
179+
expect(offset).toEqual(164);
180+
});
181+
182+
it('Expects 68 when Augustus V6 swapExactAmountInOutOnMakerPSM', () => {
183+
const callData = '0x987e7d8e0000000000otherCallData000000000';
184+
const offset = augustusFromAmountOffsetFromCalldata(callData);
185+
186+
expect(offset).toEqual(68);
187+
});
188+
139189
it('Expects to fail if non recognizable Augustus function selector', () => {
140190
const callData = 'bad calldata';
141191
expect(() => augustusFromAmountOffsetFromCalldata(callData)).toThrowError(

0 commit comments

Comments
 (0)