Skip to content

Commit f291647

Browse files
committed
fix: post hook gas limit hack for cow adapters swaps
1 parent aec8621 commit f291647

File tree

7 files changed

+122
-85
lines changed

7 files changed

+122
-85
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
"@aave/react": "^0.7.1",
3838
"@amplitude/analytics-browser": "^2.13.0",
3939
"@bgd-labs/aave-address-book": "^4.36.3",
40-
"@cowprotocol/cow-sdk": "7.1.1",
41-
"@cowprotocol/sdk-ethers-v5-adapter": "0.2.0",
42-
"@cowprotocol/sdk-flash-loans": "1.5.3",
40+
"@cowprotocol/cow-sdk": "7.2.4",
41+
"@cowprotocol/sdk-ethers-v5-adapter": "0.3.0",
42+
"@cowprotocol/sdk-flash-loans": "1.6.0",
4343
"@emotion/cache": "11.10.3",
4444
"@emotion/react": "11.10.4",
4545
"@emotion/server": "latest",
@@ -159,4 +159,4 @@
159159
"budgetPercentIncreaseRed": 20,
160160
"showDetails": true
161161
}
162-
}
162+
}

src/components/transactions/Swap/actions/CollateralSwap/CollateralSwapActionsViaCoWAdapters.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import {
2020
getCowFlashLoanSdk,
2121
getCowTradingSdkByChainIdAndAppCode,
2222
} from '../../helpers/cow';
23-
import { calculateInstanceAddress } from '../../helpers/cow/adapters.helpers';
23+
import { calculateInstanceAddress, getHooksGasLimit } from '../../helpers/cow/adapters.helpers';
24+
import { useCollateralsAmount } from '../../hooks/useCollateralsAmount';
2425
import { useSwapGasEstimation } from '../../hooks/useSwapGasEstimation';
2526
import {
2627
areActionsBlocked,
@@ -53,6 +54,8 @@ export const CollateralSwapActionsViaCowAdapters = ({
5354
}) => {
5455
const [user] = useRootStore(useShallow((state) => [state.account]));
5556

57+
const collateralsAmount = useCollateralsAmount();
58+
5659
const {
5760
mainTxState,
5861
loadingTxns,
@@ -216,6 +219,7 @@ export const CollateralSwapActionsViaCowAdapters = ({
216219
validTo,
217220
owner: user as `0x${string}`,
218221
flashLoanFeeAmount,
222+
hooksGasLimit: getHooksGasLimit(collateralsAmount),
219223
},
220224
{
221225
sellAmount: state.sellAmountBigInt,

src/components/transactions/Swap/actions/DebtSwap/DebtSwapActionsViaCoW.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import {
2525
getCowFlashLoanSdk,
2626
getCowTradingSdkByChainIdAndAppCode,
2727
} from '../../helpers/cow';
28-
import { calculateInstanceAddress } from '../../helpers/cow/adapters.helpers';
28+
import { calculateInstanceAddress, getHooksGasLimit } from '../../helpers/cow/adapters.helpers';
29+
import { useCollateralsAmount } from '../../hooks/useCollateralsAmount';
2930
import { useSwapGasEstimation } from '../../hooks/useSwapGasEstimation';
3031
import {
3132
areActionsBlocked,
@@ -59,6 +60,8 @@ export const DebtSwapActionsViaCoW = ({
5960
}) => {
6061
const [user] = useRootStore(useShallow((state) => [state.account]));
6162

63+
const debtAmount = useCollateralsAmount();
64+
6265
const {
6366
mainTxState,
6467
loadingTxns,
@@ -233,6 +236,7 @@ export const DebtSwapActionsViaCoW = ({
233236
validTo,
234237
owner: user as `0x${string}`,
235238
flashLoanFeeAmount,
239+
hooksGasLimit: getHooksGasLimit(debtAmount),
236240
},
237241
{
238242
sellAmount: state.sellAmountBigInt,

src/components/transactions/Swap/actions/RepayWithCollateral/RepayWithCollateralActionsViaCoW.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ import {
2424
getCowFlashLoanSdk,
2525
getCowTradingSdkByChainIdAndAppCode,
2626
} from '../../helpers/cow';
27-
import { calculateInstanceAddress } from '../../helpers/cow/adapters.helpers';
27+
import { calculateInstanceAddress, getHooksGasLimit } from '../../helpers/cow/adapters.helpers';
28+
import { useCollateralsAmount } from '../../hooks/useCollateralsAmount';
2829
import { useSwapGasEstimation } from '../../hooks/useSwapGasEstimation';
2930
import {
3031
areActionsBlocked,
@@ -59,6 +60,8 @@ export const RepayWithCollateralActionsViaCoW = ({
5960
}) => {
6061
const [user] = useRootStore(useShallow((state) => [state.account]));
6162

63+
const collateralsAmount = useCollateralsAmount();
64+
6265
const {
6366
mainTxState,
6467
loadingTxns,
@@ -231,6 +234,7 @@ export const RepayWithCollateralActionsViaCoW = ({
231234
validTo,
232235
owner: user as `0x${string}`,
233236
flashLoanFeeAmount,
237+
hooksGasLimit: getHooksGasLimit(collateralsAmount),
234238
},
235239
{
236240
sellAmount: state.sellAmountBigInt,

src/components/transactions/Swap/helpers/cow/adapters.helpers.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,18 @@ export const calculateInstanceAddress = async ({
125125
);
126126
};
127127

128+
export const getHooksGasLimit = (
129+
collateralsAmount: number
130+
): {
131+
preHookGasLimit: bigint;
132+
postHookGasLimit: bigint;
133+
} => {
134+
return {
135+
preHookGasLimit: BigInt(300000),
136+
postHookGasLimit: BigInt(Math.min(600000 + collateralsAmount * 100000, 1500000)),
137+
};
138+
};
139+
128140
export const calculateFlashLoanAmounts = (
129141
state: SwapState
130142
): {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { useAppDataContext } from 'src/hooks/app-data-provider/useAppDataProvider';
2+
3+
export const useCollateralsAmount = () => {
4+
const userReserves = useAppDataContext().user?.userReservesData;
5+
return (
6+
userReserves?.reduce((acc, reserve) => {
7+
if (reserve.usageAsCollateralEnabledOnUser) {
8+
return acc + 1;
9+
}
10+
return acc;
11+
}, 0) ?? 0
12+
);
13+
};

yarn.lock

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,103 +1390,103 @@
13901390
dependencies:
13911391
chalk "^4.1.0"
13921392

1393-
"@cowprotocol/cow-sdk@7.1.1":
1394-
version "7.1.1"
1395-
resolved "https://registry.yarnpkg.com/@cowprotocol/cow-sdk/-/cow-sdk-7.1.1.tgz#8268e7f931bbcf7c0d231088590cac7abf9b6a0a"
1396-
integrity sha512-geUTHOxfMxAEK6Yd4NtglGI4uo1ecEk6VtX5a2wzw3YSz5iWKw/GamyIMp75y48+Qud1xgvQ0v+u9xLtpBMlyg==
1397-
dependencies:
1398-
"@cowprotocol/sdk-app-data" "4.1.6"
1399-
"@cowprotocol/sdk-common" "0.3.0"
1400-
"@cowprotocol/sdk-config" "0.3.0"
1401-
"@cowprotocol/sdk-contracts-ts" "0.5.0"
1402-
"@cowprotocol/sdk-order-book" "0.2.0"
1403-
"@cowprotocol/sdk-order-signing" "0.1.11"
1404-
"@cowprotocol/sdk-trading" "0.4.6"
1405-
1406-
"@cowprotocol/sdk-app-data@4.1.6":
1407-
version "4.1.6"
1408-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-app-data/-/sdk-app-data-4.1.6.tgz#e4d5b7843fe875e8a91da48a8fa3a0045b3b778e"
1409-
integrity sha512-wPy0p1HibKKBjGrH9iRYDGGYIzIJQORRAdy/IB+PRojBLTeBEkTp9HKvNHwDaPhdAlV19e/U5p65WM4b5sKW5A==
1410-
dependencies:
1411-
"@cowprotocol/sdk-common" "0.3.0"
1393+
"@cowprotocol/cow-sdk@7.2.4":
1394+
version "7.2.4"
1395+
resolved "https://registry.yarnpkg.com/@cowprotocol/cow-sdk/-/cow-sdk-7.2.4.tgz#611dd8f9f2c58822ea3f11055d7c684758aa92c7"
1396+
integrity sha512-IA61zXYL6z4jMQUbb8PFTENah5+FRg6OjnQ4jg9dTxDiNR51WSotZCg4RUlnZ7XttKE/ncY1uGA0Nxk1tOb+8g==
1397+
dependencies:
1398+
"@cowprotocol/sdk-app-data" "4.3.5"
1399+
"@cowprotocol/sdk-common" "0.4.0"
1400+
"@cowprotocol/sdk-config" "0.6.1"
1401+
"@cowprotocol/sdk-contracts-ts" "0.8.0"
1402+
"@cowprotocol/sdk-order-book" "0.4.3"
1403+
"@cowprotocol/sdk-order-signing" "0.1.20"
1404+
"@cowprotocol/sdk-trading" "0.7.0"
1405+
1406+
"@cowprotocol/sdk-app-data@4.3.5":
1407+
version "4.3.5"
1408+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-app-data/-/sdk-app-data-4.3.5.tgz#5d1a70acc3fb3f2ff266e865fff2c05a5bb4ac03"
1409+
integrity sha512-rvtTpHdJM2jJX2ndr8ZHb4XZH7/EhwJLqClRUfiH/pyKvy5xjnApMsPxNS2cJcheXSl1icea5HJXYJA2lG8f0g==
1410+
dependencies:
1411+
"@cowprotocol/sdk-common" "0.4.0"
14121412
ajv "^8.11.0"
14131413
cross-fetch "^3.1.5"
14141414
ipfs-only-hash "^4.0.0"
14151415
json-stringify-deterministic "^1.0.8"
14161416
multiformats "^9.6.4"
14171417

1418-
"@cowprotocol/sdk-common@0.3.0":
1419-
version "0.3.0"
1420-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-common/-/sdk-common-0.3.0.tgz#f03a5e36d67d0c5cdb6be5bd7ceda879b751542d"
1421-
integrity sha512-xk2VUjO4+XI5968r1pYFbqUxM2nmBcVPvGIw0pcqDpx4OLef0Flr3tuHtZY42RYYa6nNsNKOBV9Jd4RauYUOgQ==
1418+
"@cowprotocol/sdk-common@0.4.0":
1419+
version "0.4.0"
1420+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-common/-/sdk-common-0.4.0.tgz#f56509a5fda4cacac4d9995a487fcac7348e83fd"
1421+
integrity sha512-ciXiHzTzj7LKZqMKssgyNooZp1nS/mvRE9oO/6DlMQcxVA7/4ajPmk/XzseX/rjdRbSbYyXIEF1oY5w0tcbVjQ==
14221422

1423-
"@cowprotocol/sdk-config@0.3.0":
1424-
version "0.3.0"
1425-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-config/-/sdk-config-0.3.0.tgz#8a0e8e81daf3e82c60f71ff73893a794dd08c589"
1426-
integrity sha512-EUDqXMSYsgLdXDnvC9sc9ozpsjQdP6R738R0kKNWp/mTI9j7wsI9sVrDcKIoX7qH+pu0aRmRxEFbEbW7uXUcIg==
1423+
"@cowprotocol/sdk-config@0.6.1":
1424+
version "0.6.1"
1425+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-config/-/sdk-config-0.6.1.tgz#a7f8e3cfb8de3e3d78d4da82c6a58d8b5d7e6585"
1426+
integrity sha512-E9uuxBhG6dhb7pub+dvw7w5DhlK7EFNFaikQdkZWIjZYt3Y9dQXC3uYwdQXdTxTf81km1EJQbXgXqXBjGeICYQ==
14271427
dependencies:
14281428
exponential-backoff "^3.1.1"
14291429
limiter "^2.1.0"
14301430

1431-
"@cowprotocol/[email protected]":
1432-
version "0.5.0"
1433-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-contracts-ts/-/sdk-contracts-ts-0.5.0.tgz#db9ff973448e9f730a3a493330c26d848da10ee3"
1434-
integrity sha512-QAx07lJG1HoldgzMSqXTf5iXB7eihTBS20h3WYD7h6yaoDcKjb06/vVp1g4aCgze0n/3ceYpthVDAVTnn3/fOw==
1435-
dependencies:
1436-
"@cowprotocol/sdk-common" "0.3.0"
1437-
"@cowprotocol/sdk-config" "0.3.0"
1438-
1439-
"@cowprotocol/[email protected]":
1440-
version "0.2.0"
1441-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-ethers-v5-adapter/-/sdk-ethers-v5-adapter-0.2.0.tgz#c04ea01fe38635a4afc77ad84078db3987999628"
1442-
integrity sha512-90YxjDHe6WHwa6NDxXn04KFj71TAQyfuO8T1SI8eWgNTaF9EDEgMrTXmfdBDp7S9WZSBVfyu3XQGOoXe3v4PGQ==
1431+
"@cowprotocol/[email protected]":
1432+
version "0.8.0"
1433+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-contracts-ts/-/sdk-contracts-ts-0.8.0.tgz#992210fb3b6cdfb44fcc2b7f025b8aa371ba1000"
1434+
integrity sha512-N5KAVZfjGmwKpmPRR8ipDrFRX6aq3kBNH3M3Lfp55e7rKz4V4+DUUltmeAtpX8IRqTJtwEGe3NEXJ5ZcgKQ6Qw==
14431435
dependencies:
1444-
"@cowprotocol/sdk-common" "0.3.0"
1436+
"@cowprotocol/sdk-common" "0.4.0"
1437+
"@cowprotocol/sdk-config" "0.6.1"
14451438

1446-
"@cowprotocol/sdk-[email protected]":
1447-
version "1.5.3"
1448-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-flash-loans/-/sdk-flash-loans-1.5.3.tgz#da3b9c320bae16571f7bedb6f07f099c3db5c9b6"
1449-
integrity sha512-Bl9h9rGc7el/89VwNKYQi/oWD849xifH21ZmdvEqNp9iEw7X+vtszQU5kCzwwmwCU09i0E7ZY8pgfNb8rRkOBA==
1439+
"@cowprotocol/sdk-[email protected]":
1440+
version "0.3.0"
1441+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-ethers-v5-adapter/-/sdk-ethers-v5-adapter-0.3.0.tgz#5e6812de1f2637189816278fc84a3de748cb5227"
1442+
integrity sha512-o2GSb0geEZDsW/JW9eDvqqqEXBvyRD37PX2DrXAsk3AVNX/JrHB+mpyTs+6CWCq9LE3UmDPw+AM5zAK5E8GVVA==
14501443
dependencies:
1451-
"@cowprotocol/sdk-app-data" "4.1.6"
1452-
"@cowprotocol/sdk-common" "0.3.0"
1453-
"@cowprotocol/sdk-config" "0.3.0"
1454-
"@cowprotocol/sdk-order-book" "0.2.0"
1455-
"@cowprotocol/sdk-order-signing" "0.1.11"
1456-
"@cowprotocol/sdk-trading" "0.4.6"
1444+
"@cowprotocol/sdk-common" "0.4.0"
14571445

1458-
"@cowprotocol/[email protected]":
1459-
version "0.2.0"
1460-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-book/-/sdk-order-book-0.2.0.tgz#b4c24baa50c9c9670e951d0b9059dfd66ff7ed52"
1461-
integrity sha512-OeSHMGVEx7LCX+7ZnoRwLdIkJX25/tiquCVaocagrqzyPPPxD/TOg6BGLjgvl0kzoXLtfoSQ3CSz3IfvN/Etlg==
1462-
dependencies:
1463-
"@cowprotocol/sdk-common" "0.3.0"
1464-
"@cowprotocol/sdk-config" "0.3.0"
1446+
"@cowprotocol/[email protected]":
1447+
version "1.6.0"
1448+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-flash-loans/-/sdk-flash-loans-1.6.0.tgz#c865074faaf5522371234098fec8f082b63f4e19"
1449+
integrity sha512-2Hs1MEBr7j1Gc1NVWG2lHJ+8vXYpm5wDdZXfKiAv/P5vJ1MHbfm/pzlh8MXLCroiZuQAOSuIF8RtUXVdYbM9wA==
1450+
dependencies:
1451+
"@cowprotocol/sdk-app-data" "4.3.5"
1452+
"@cowprotocol/sdk-common" "0.4.0"
1453+
"@cowprotocol/sdk-config" "0.6.1"
1454+
"@cowprotocol/sdk-order-book" "0.4.3"
1455+
"@cowprotocol/sdk-order-signing" "0.1.20"
1456+
"@cowprotocol/sdk-trading" "0.7.0"
1457+
1458+
"@cowprotocol/[email protected]":
1459+
version "0.4.3"
1460+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-book/-/sdk-order-book-0.4.3.tgz#fd1ed92da9311d55b7d84dcf6c82e37c8d399826"
1461+
integrity sha512-Nj4nW5cdYWdWeVJv+05j+gLXfgTEnZG4eI4DcpwZQiNSdiQGaXqcPtW3rLME9shECDA1uJQKMEUMA1aZMzx6iQ==
1462+
dependencies:
1463+
"@cowprotocol/sdk-common" "0.4.0"
1464+
"@cowprotocol/sdk-config" "0.6.1"
14651465
cross-fetch "^3.2.0"
14661466
exponential-backoff "^3.1.2"
14671467
limiter "^3.0.0"
14681468

1469-
"@cowprotocol/[email protected].11":
1470-
version "0.1.11"
1471-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-signing/-/sdk-order-signing-0.1.11.tgz#7268d74eb7d9794658ac1bda9d49ec047595e0bc"
1472-
integrity sha512-6tbAC0yv0T4fm8y8xUFQqLGooyIJt5e0XKc40KZdLOMqHBzsocgOqPDLcalWMaTREVYTgO1bUUFqfPTNjLZJBA==
1473-
dependencies:
1474-
"@cowprotocol/sdk-common" "0.3.0"
1475-
"@cowprotocol/sdk-config" "0.3.0"
1476-
"@cowprotocol/sdk-contracts-ts" "0.5.0"
1477-
"@cowprotocol/sdk-order-book" "0.2.0"
1478-
1479-
"@cowprotocol/sdk-trading@0.4.6":
1480-
version "0.4.6"
1481-
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-trading/-/sdk-trading-0.4.6.tgz#f9bd7add17e1478a1aca176d36f1696b5474f564"
1482-
integrity sha512-vGuTZl+js0TAOa+3eeglEQvy7HA4+9uaVFwWViZm+GsqEEUuL273Xfsig3ETqIpQTk8iD7BI1D+WBn5NvEOtjA==
1483-
dependencies:
1484-
"@cowprotocol/sdk-app-data" "4.1.6"
1485-
"@cowprotocol/sdk-common" "0.3.0"
1486-
"@cowprotocol/sdk-config" "0.3.0"
1487-
"@cowprotocol/sdk-contracts-ts" "0.5.0"
1488-
"@cowprotocol/sdk-order-book" "0.2.0"
1489-
"@cowprotocol/sdk-order-signing" "0.1.11"
1469+
"@cowprotocol/[email protected].20":
1470+
version "0.1.20"
1471+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-signing/-/sdk-order-signing-0.1.20.tgz#85c2f8654b18bfe05f325e7e5e0d0ac481bf88b1"
1472+
integrity sha512-p50hvGwwXCFvfXYTQ8U1m7ZgWiMkwYfWoh/Cn9SJsvR6tK5mcGuJHLkGrYMNiVUCpFm4Rf3bIvAghS/CeJSoeA==
1473+
dependencies:
1474+
"@cowprotocol/sdk-common" "0.4.0"
1475+
"@cowprotocol/sdk-config" "0.6.1"
1476+
"@cowprotocol/sdk-contracts-ts" "0.8.0"
1477+
"@cowprotocol/sdk-order-book" "0.4.3"
1478+
1479+
"@cowprotocol/sdk-trading@0.7.0":
1480+
version "0.7.0"
1481+
resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-trading/-/sdk-trading-0.7.0.tgz#fac692df32ed60bcc22e5aa5ac38b992109e80ce"
1482+
integrity sha512-FCIoxX3AHAnQzzE4vwG67PEcNbOYq1HjcjPczKkgGt/e+N6maU+NjGc+KZZZA6EVK2XkuwhmvNfFng08BcXepA==
1483+
dependencies:
1484+
"@cowprotocol/sdk-app-data" "4.3.5"
1485+
"@cowprotocol/sdk-common" "0.4.0"
1486+
"@cowprotocol/sdk-config" "0.6.1"
1487+
"@cowprotocol/sdk-contracts-ts" "0.8.0"
1488+
"@cowprotocol/sdk-order-book" "0.4.3"
1489+
"@cowprotocol/sdk-order-signing" "0.1.20"
14901490
deepmerge "^4.3.1"
14911491

14921492
"@cspotcode/source-map-support@^0.8.0":

0 commit comments

Comments
 (0)