Skip to content

Commit c7f2327

Browse files
shoom3301mgrabina
andauthored
feat(flash-loans): support Mainnet, Gnosis, and Base for AAVE (#657)
* feat(flash-loans): support Mainnet and Base for AAVE * new abis (#655) * chore: fix abis * chore: fix gnosis contracts * fix: domain for adapters (#658) * chore: update test --------- Co-authored-by: Martin Grabina <[email protected]>
1 parent 4fac016 commit c7f2327

File tree

4 files changed

+65
-33
lines changed

4 files changed

+65
-33
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
// Automatically generated by the script in scripts/version.js
22
// Do not edit this file manually
3-
export const CONTRACTS_PKG_VERSION = '0.4.1';
3+
export const CONTRACTS_PKG_VERSION = '0.4.4';

packages/flash-loans/src/aave/AaveCollateralSwapSdk.test.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { TradingSdk, TradeParameters } from '@cowprotocol/sdk-trading'
66
import { createAdapters, TEST_ADDRESS } from '../../tests/setup'
77

88
import { AaveCollateralSwapSdk } from './AaveCollateralSwapSdk'
9-
import { AAVE_ADAPTER_FACTORY, HASH_ZERO } from './const'
9+
import { AAVE_ADAPTER_FACTORY, ADAPTER_DOMAIN_NAME, HASH_ZERO } from './const'
1010

1111
const adapters = createAdapters()
1212
const adapterNames = Object.keys(adapters) as Array<keyof typeof adapters>
@@ -92,7 +92,7 @@ adapterNames.forEach((adapterName) => {
9292
test(`should successfully execute collateral swap with default fee`, async () => {
9393
const result = await flashLoanSdk.collateralSwap(
9494
{
95-
chainId: SupportedChainId.SEPOLIA,
95+
chainId: SupportedChainId.GNOSIS_CHAIN,
9696
tradeParameters: mockTradeParameters,
9797
collateralToken,
9898
},
@@ -103,7 +103,7 @@ adapterNames.forEach((adapterName) => {
103103

104104
expect(mockTradingSdk.getQuote).toHaveBeenCalledWith(
105105
expect.objectContaining({
106-
chainId: SupportedChainId.SEPOLIA,
106+
chainId: SupportedChainId.GNOSIS_CHAIN,
107107
sellToken: mockTradeParameters.sellToken,
108108
buyToken: mockTradeParameters.buyToken,
109109
kind: OrderKind.SELL,
@@ -117,7 +117,7 @@ adapterNames.forEach((adapterName) => {
117117
const flashLoanFeePercent = 0.05 // 0.05%
118118
await flashLoanSdk.collateralSwap(
119119
{
120-
chainId: SupportedChainId.SEPOLIA,
120+
chainId: SupportedChainId.GNOSIS_CHAIN,
121121
tradeParameters: mockTradeParameters,
122122
flashLoanFeePercent,
123123
collateralToken,
@@ -142,7 +142,7 @@ adapterNames.forEach((adapterName) => {
142142
const customOwner = '0x1234567890123456789012345678901234567890'
143143
await flashLoanSdk.collateralSwap(
144144
{
145-
chainId: SupportedChainId.SEPOLIA,
145+
chainId: SupportedChainId.GNOSIS_CHAIN,
146146
tradeParameters: {
147147
...mockTradeParameters,
148148
owner: customOwner,
@@ -179,7 +179,7 @@ adapterNames.forEach((adapterName) => {
179179
test(`should post order with EIP1271 signing scheme`, async () => {
180180
await flashLoanSdk.collateralSwap(
181181
{
182-
chainId: SupportedChainId.SEPOLIA,
182+
chainId: SupportedChainId.GNOSIS_CHAIN,
183183
tradeParameters: mockTradeParameters,
184184
collateralToken,
185185
},
@@ -199,7 +199,7 @@ adapterNames.forEach((adapterName) => {
199199
test(`should include flash loan hint in app data`, async () => {
200200
await flashLoanSdk.collateralSwap(
201201
{
202-
chainId: SupportedChainId.SEPOLIA,
202+
chainId: SupportedChainId.GNOSIS_CHAIN,
203203
tradeParameters: mockTradeParameters,
204204
collateralToken,
205205
},
@@ -212,7 +212,7 @@ adapterNames.forEach((adapterName) => {
212212
metadata: expect.objectContaining({
213213
flashloan: expect.objectContaining({
214214
amount: expect.any(String),
215-
receiver: AAVE_ADAPTER_FACTORY[SupportedChainId.SEPOLIA],
215+
receiver: AAVE_ADAPTER_FACTORY[SupportedChainId.GNOSIS_CHAIN],
216216
token: mockTradeParameters.sellToken,
217217
}),
218218
}),
@@ -224,7 +224,7 @@ adapterNames.forEach((adapterName) => {
224224
test(`should include collateralPermit in app data`, async () => {
225225
await flashLoanSdk.collateralSwap(
226226
{
227-
chainId: SupportedChainId.SEPOLIA,
227+
chainId: SupportedChainId.GNOSIS_CHAIN,
228228
tradeParameters: mockTradeParameters,
229229
collateralToken,
230230
settings: {
@@ -247,7 +247,7 @@ adapterNames.forEach((adapterName) => {
247247
hooks: expect.objectContaining({
248248
pre: expect.arrayContaining([
249249
expect.objectContaining({
250-
target: AAVE_ADAPTER_FACTORY[SupportedChainId.SEPOLIA],
250+
target: AAVE_ADAPTER_FACTORY[SupportedChainId.GNOSIS_CHAIN],
251251
callData: expect.any(String),
252252
gasLimit: expect.any(String),
253253
}),
@@ -269,7 +269,7 @@ adapterNames.forEach((adapterName) => {
269269
test(`should handle zero flash loan fee`, async () => {
270270
await flashLoanSdk.collateralSwap(
271271
{
272-
chainId: SupportedChainId.SEPOLIA,
272+
chainId: SupportedChainId.GNOSIS_CHAIN,
273273
tradeParameters: mockTradeParameters,
274274
flashLoanFeePercent: 0,
275275
collateralToken,
@@ -284,7 +284,7 @@ adapterNames.forEach((adapterName) => {
284284
test(`should use default gas limit for pre-hook`, async () => {
285285
await flashLoanSdk.collateralSwap(
286286
{
287-
chainId: SupportedChainId.SEPOLIA,
287+
chainId: SupportedChainId.GNOSIS_CHAIN,
288288
tradeParameters: mockTradeParameters,
289289
collateralToken,
290290
},
@@ -298,7 +298,7 @@ adapterNames.forEach((adapterName) => {
298298
hooks: expect.objectContaining({
299299
pre: expect.arrayContaining([
300300
expect.objectContaining({
301-
target: AAVE_ADAPTER_FACTORY[SupportedChainId.SEPOLIA],
301+
target: AAVE_ADAPTER_FACTORY[SupportedChainId.GNOSIS_CHAIN],
302302
callData: expect.any(String),
303303
gasLimit: '300000',
304304
}),
@@ -313,7 +313,7 @@ adapterNames.forEach((adapterName) => {
313313
test(`should use default gas limit for post-hook`, async () => {
314314
await flashLoanSdk.collateralSwap(
315315
{
316-
chainId: SupportedChainId.SEPOLIA,
316+
chainId: SupportedChainId.GNOSIS_CHAIN,
317317
tradeParameters: mockTradeParameters,
318318
collateralToken,
319319
},
@@ -330,7 +330,7 @@ adapterNames.forEach((adapterName) => {
330330
test(`should always include post-hook with empty permit by default`, async () => {
331331
await flashLoanSdk.collateralSwap(
332332
{
333-
chainId: SupportedChainId.SEPOLIA,
333+
chainId: SupportedChainId.GNOSIS_CHAIN,
334334
tradeParameters: mockTradeParameters,
335335
collateralToken,
336336
},
@@ -624,7 +624,7 @@ adapterNames.forEach((adapterName) => {
624624

625625
await flashLoanSdk.collateralSwap(
626626
{
627-
chainId: SupportedChainId.SEPOLIA,
627+
chainId: SupportedChainId.GNOSIS_CHAIN,
628628
tradeParameters: mockTradeParameters,
629629
collateralToken,
630630
},
@@ -644,10 +644,10 @@ adapterNames.forEach((adapterName) => {
644644
// Verify signTypedData was called with correct domain
645645
expect(signTypedDataSpy).toHaveBeenCalledWith(
646646
expect.objectContaining({
647-
name: 'AaveAdapterFactory',
647+
name: ADAPTER_DOMAIN_NAME,
648648
version: '1',
649-
chainId: SupportedChainId.SEPOLIA,
650-
verifyingContract: AAVE_ADAPTER_FACTORY[SupportedChainId.SEPOLIA],
649+
chainId: SupportedChainId.GNOSIS_CHAIN,
650+
verifyingContract: AAVE_ADAPTER_FACTORY[SupportedChainId.GNOSIS_CHAIN],
651651
}),
652652
expect.any(Object),
653653
expect.any(Object),
@@ -662,7 +662,7 @@ adapterNames.forEach((adapterName) => {
662662

663663
await flashLoanSdk.collateralSwap(
664664
{
665-
chainId: SupportedChainId.SEPOLIA,
665+
chainId: SupportedChainId.GNOSIS_CHAIN,
666666
tradeParameters: mockTradeParameters,
667667
collateralToken,
668668
},
@@ -701,7 +701,7 @@ adapterNames.forEach((adapterName) => {
701701

702702
await flashLoanSdk.collateralSwap(
703703
{
704-
chainId: SupportedChainId.SEPOLIA,
704+
chainId: SupportedChainId.GNOSIS_CHAIN,
705705
tradeParameters: mockTradeParameters,
706706
collateralToken,
707707
},
@@ -737,7 +737,7 @@ adapterNames.forEach((adapterName) => {
737737

738738
await flashLoanSdk.collateralSwap(
739739
{
740-
chainId: SupportedChainId.SEPOLIA,
740+
chainId: SupportedChainId.GNOSIS_CHAIN,
741741
tradeParameters: mockTradeParameters,
742742
collateralToken,
743743
},

packages/flash-loans/src/aave/abi/AaveAdapterFactory.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,16 @@ export const aaveAdapterFactoryAbi = [
166166
stateMutability: 'nonpayable',
167167
},
168168
{
169-
inputs: [],
169+
type: 'function',
170170
name: 'DOMAIN_SEPARATOR',
171+
inputs: [],
171172
outputs: [
172173
{
173-
internalType: 'bytes32',
174174
name: '',
175175
type: 'bytes32',
176+
internalType: 'bytes32',
176177
},
177178
],
178179
stateMutability: 'view',
179-
type: 'function',
180180
},
181181
] as const

packages/flash-loans/src/aave/const.ts

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,45 @@ export enum AaveFlashLoanType {
99
RepayCollateral = 'RepayCollateral',
1010
}
1111

12-
// See https://search.onaave.com/?q=sepolia
13-
export const AAVE_POOL_ADDRESS = mapAddressToSupportedNetworks('0xb50201558B00496A145fE76f7424749556E326D8')
14-
export const AAVE_ADAPTER_FACTORY = mapAddressToSupportedNetworks('0x889ee28C0a8a41a312546A8eeD77b4b097C84016')
12+
// See https://aave.com/docs/resources/addresses
13+
export const AAVE_POOL_ADDRESS: Record<SupportedChainId, string> = {
14+
[SupportedChainId.SEPOLIA]: '',
15+
[SupportedChainId.LENS]: '',
16+
[SupportedChainId.GNOSIS_CHAIN]: '0xb50201558B00496A145fE76f7424749556E326D8',
17+
[SupportedChainId.MAINNET]: '0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2',
18+
[SupportedChainId.BASE]: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
19+
[SupportedChainId.ARBITRUM_ONE]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
20+
[SupportedChainId.AVALANCHE]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
21+
[SupportedChainId.BNB]: '0x6807dc923806fE8Fd134338EABCA509979a7e0cB',
22+
[SupportedChainId.POLYGON]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
23+
[SupportedChainId.LINEA]: '0xc47b8C00b0f69a36fa203Ffeac0334874574a8Ac',
24+
[SupportedChainId.PLASMA]: '0x925a2A7214Ed92428B5b1B090F80b25700095e12',
25+
}
26+
export const AAVE_ADAPTER_FACTORY: Record<SupportedChainId, string> = {
27+
...mapAddressToSupportedNetworks(''),
28+
[SupportedChainId.GNOSIS_CHAIN]: '0x7f230F7Cee38ca371b871B74B3C6ded4932A2f93',
29+
[SupportedChainId.MAINNET]: '0x22E08c56a6799e28e7b05A117D853B9b46abc017',
30+
[SupportedChainId.BASE]: '0xc5D68e305e0b5998f895e34d4440954072F285B6',
31+
}
1532

16-
const AAVE_COLLATERAL_SWAP_ADAPTER_HOOK = mapAddressToSupportedNetworks('0x0aeC794e544B81D96149a4C8C1cC57c6F31A978A')
17-
const AAVE_DEBT_SWAP_ADAPTER_HOOK = mapAddressToSupportedNetworks('0x2d13ADCFa398073d7406e5e1aF3dD14663cdBF30')
18-
const AAVE_REPAY_COLLATERAL_ADAPTER_HOOK = mapAddressToSupportedNetworks('0x193fd444802D6BC18a9AE0613D33C024F16A9dDC')
33+
const AAVE_COLLATERAL_SWAP_ADAPTER_HOOK: Record<SupportedChainId, string> = {
34+
...mapAddressToSupportedNetworks(''),
35+
[SupportedChainId.GNOSIS_CHAIN]: '0x837aA74e8daf7Fd7160f078ca455a67B7F441E4b',
36+
[SupportedChainId.MAINNET]: '0xFEb471EC22E5572dbb44229301c266f4C305A78a',
37+
[SupportedChainId.BASE]: '0xBb45A7898A6f06a9c148BfeD0C103140F0079cd9',
38+
}
39+
const AAVE_DEBT_SWAP_ADAPTER_HOOK: Record<SupportedChainId, string> = {
40+
...mapAddressToSupportedNetworks(''),
41+
[SupportedChainId.GNOSIS_CHAIN]: '0xC9A495A17B1eeC18AE0f0865840B8fd3f8a9DE3F',
42+
[SupportedChainId.MAINNET]: '0x238f57A2c3F0696fB20295075a0F9A18EfC67D3a',
43+
[SupportedChainId.BASE]: '0xaCbd34fAB78BD6C8738eb32dDAFd688df98CD2E3',
44+
}
45+
const AAVE_REPAY_COLLATERAL_ADAPTER_HOOK: Record<SupportedChainId, string> = {
46+
...mapAddressToSupportedNetworks(''),
47+
[SupportedChainId.GNOSIS_CHAIN]: '0x2890CE372f3a397B6f3BB3a71B1836A6F3F33657',
48+
[SupportedChainId.MAINNET]: '0x9eB0ffd318e862D344792a8e589e8393E8bEd96F',
49+
[SupportedChainId.BASE]: '0x1549445700D0Cb2D7Ce85ECd5a7FD7Ba4a3D40A7',
50+
}
1951

2052
export const AAVE_HOOK_ADAPTER_PER_TYPE: Record<AaveFlashLoanType, Record<SupportedChainId, string>> = {
2153
[AaveFlashLoanType.CollateralSwap]: AAVE_COLLATERAL_SWAP_ADAPTER_HOOK,
@@ -39,7 +71,7 @@ export const DEFAULT_VALIDITY = 10 * 60 // 10 min
3971

4072
export const GAS_ESTIMATION_ADDITION_PERCENT = 10 // 10%
4173

42-
export const ADAPTER_DOMAIN_NAME = 'AaveAdapterFactory'
74+
export const ADAPTER_DOMAIN_NAME = 'AaveV3AdapterFactory'
4375
export const ADAPTER_DOMAIN_VERSION = '1'
4476

4577
export const ADAPTER_SIGNATURE_TYPES = {

0 commit comments

Comments
 (0)