Skip to content

Commit 7ea5ea9

Browse files
committed
permit on classic swaps and some fixes
1 parent b86113f commit 7ea5ea9

File tree

11 files changed

+682
-594
lines changed

11 files changed

+682
-594
lines changed

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
import { normalize } from '@aave/math-utils';
2-
import {
3-
enableLogging,
4-
getOrderToSign,
5-
LimitTradeParameters,
6-
OrderKind,
7-
} from '@cowprotocol/cow-sdk';
2+
import { getOrderToSign, LimitTradeParameters, OrderKind } from '@cowprotocol/cow-sdk';
83
import { AaveFlashLoanType, HASH_ZERO } from '@cowprotocol/sdk-flash-loans';
94
import { Trans } from '@lingui/macro';
105
import { Dispatch, useEffect, useMemo, useState } from 'react';
@@ -192,7 +187,6 @@ export const CollateralSwapActionsViaCowAdapters = ({
192187

193188
console.log('POST LIMIT ORDER', limitOrder, orderPostParams);
194189

195-
enableLogging(true);
196190
const result = await tradingSdk.postLimitOrder(limitOrder, orderPostParams.swapSettings);
197191

198192
trackingHandlers.trackSwap();

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
import { normalize } from '@aave/math-utils';
2-
import {
3-
enableLogging,
4-
getOrderToSign,
5-
LimitTradeParameters,
6-
OrderKind,
7-
} from '@cowprotocol/cow-sdk';
2+
import { getOrderToSign, LimitTradeParameters, OrderKind } from '@cowprotocol/cow-sdk';
83
import { AaveFlashLoanType, HASH_ZERO } from '@cowprotocol/sdk-flash-loans';
94
import { Trans } from '@lingui/macro';
105
import { Dispatch, useEffect, useMemo, useState } from 'react';
@@ -180,7 +175,6 @@ export const DebtSwapActionsViaCoW = ({
180175
HASH_ZERO
181176
);
182177

183-
enableLogging(true); // todo remove
184178
const orderPostParams = await flashLoanSdk.getOrderPostingSettings(
185179
AaveFlashLoanType.DebtSwap,
186180
{

src/components/transactions/Swap/actions/SwapActions/SwapActionsViaCoW.tsx

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import { Trans } from '@lingui/macro';
88
import { BigNumber } from 'ethers';
99
import stringify from 'json-stringify-deterministic';
10-
import { Dispatch, useEffect } from 'react';
10+
import { Dispatch } from 'react';
1111
import { TxActionsWrapper } from 'src/components/transactions/TxActionsWrapper';
1212
import { isSmartContractWallet } from 'src/helpers/provider';
1313
import { useModalContext } from 'src/hooks/useModal';
@@ -51,18 +51,19 @@ export const SwapActionsViaCoW = ({
5151
const { mainTxState, loadingTxns, setMainTxState, setTxError, approvalTxState } =
5252
useModalContext();
5353

54-
const { requiresApproval, requiresApprovalReset, approval, tryPermit } = useSwapTokenApproval({
55-
chainId: state.chainId,
56-
token: state.sourceToken.addressToSwap,
57-
symbol: state.sourceToken.symbol,
58-
amount: state.sellAmountFormatted ?? '0',
59-
decimals: state.sourceToken.decimals,
60-
spender: isCowProtocolRates(state.swapRate)
61-
? COW_PROTOCOL_VAULT_RELAYER_ADDRESS[state.chainId as SupportedChainId]
62-
: undefined,
63-
setState,
64-
allowPermit: false, // CoW does not support permit
65-
});
54+
const { requiresApproval, requiresApprovalReset, approval, tryPermit, signatureParams } =
55+
useSwapTokenApproval({
56+
chainId: state.chainId,
57+
token: state.sourceToken.addressToSwap,
58+
symbol: state.sourceToken.symbol,
59+
amount: state.sellAmountFormatted ?? '0',
60+
decimals: state.sourceToken.decimals,
61+
spender: isCowProtocolRates(state.swapRate)
62+
? COW_PROTOCOL_VAULT_RELAYER_ADDRESS[state.chainId as SupportedChainId]
63+
: undefined,
64+
setState,
65+
allowPermit: true,
66+
});
6667

6768
// Use centralized gas estimation
6869
useSwapGasEstimation({
@@ -232,6 +233,8 @@ export const SwapActionsViaCoW = ({
232233
: state.side === 'buy'
233234
? OrderKind.BUY
234235
: OrderKind.SELL,
236+
signatureParams, // TODO: Test permit for smart contract wallets?
237+
estimateGasLimit,
235238
});
236239

237240
const response = await sendTx({
@@ -281,6 +284,8 @@ export const SwapActionsViaCoW = ({
281284
outputSymbol: state.destinationToken.symbol,
282285
appCode,
283286
orderBookQuote: state.swapRate.orderBookQuote,
287+
signatureParams,
288+
estimateGasLimit,
284289
});
285290
setMainTxState({
286291
loading: false,
@@ -327,12 +332,6 @@ export const SwapActionsViaCoW = ({
327332
params.invalidateAppState();
328333
};
329334

330-
// Track execution state to pause rate updates during actions
331-
useEffect(() => {
332-
const isExecuting = mainTxState.loading || approvalTxState.loading;
333-
setState({ actionsLoading: isExecuting });
334-
}, [mainTxState.loading, approvalTxState.loading, setState, state.actionsLoading]);
335-
336335
return (
337336
<TxActionsWrapper
338337
sx={{

src/components/transactions/Swap/constants/cow.constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ export const COW_APP_DATA = (
8484
slippageBips: number,
8585
smartSlippage: boolean,
8686
orderType: OrderType,
87-
appCode: string
87+
appCode: string,
88+
hooks?: Record<string, unknown>
8889
) => ({
8990
appCode: appCode,
9091
version: '1.4.0',
@@ -97,6 +98,7 @@ export const COW_APP_DATA = (
9798
smartSlippage,
9899
},
99100
partnerFee: COW_PARTNER_FEE(tokenFromSymbol, tokenToSymbol),
101+
hooks,
100102
},
101103
});
102104

src/components/transactions/Swap/details/CowCostsDetails.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ export const CowCostsDetails = ({ state }: { state: SwapState }) => {
4343
const flashloanFeeUsd = Number(flashloanFeeFormatted) * state.swapRate.srcTokenPriceUsd;
4444
const flashloanFeeToken = state.sourceToken;
4545

46+
if (!state.buyAmountToken || !state.sellAmountToken) return null;
47+
4648
// Partner fee is applied to the surplus token:
4749
// - For sell orders: fee in buy token (destinationToken), deducted from buy amount
4850
// - For buy orders: fee in sell token (sourceToken), added to sell amount
@@ -59,18 +61,19 @@ export const CowCostsDetails = ({ state }: { state: SwapState }) => {
5961
// Fee in destination token (buy token)
6062
partnerFeeFormatted = normalize(
6163
state.swapRate.amountAndCosts.costs.partnerFee.amount.toString(),
62-
state.destinationToken.decimals
64+
state.buyAmountToken?.decimals ?? 18
6365
);
6466
partnerFeeUsd = Number(partnerFeeFormatted) * state.swapRate.destTokenPriceUsd;
6567
partnerFeeToken = state.destinationToken;
6668
} else {
6769
// Fee in source token (sell token)
6870
partnerFeeFormatted = normalize(
6971
state.swapRate.amountAndCosts.costs.partnerFee.amount.toString(),
70-
state.sourceToken.decimals
72+
state.buyAmountToken?.decimals ?? 18
7173
);
74+
7275
partnerFeeUsd = Number(partnerFeeFormatted) * state.swapRate.srcTokenPriceUsd;
73-
partnerFeeToken = state.sourceToken;
76+
partnerFeeToken = state.buyAmountToken;
7477
}
7578

7679
const totalCostsInUsd = networkFeeUsd + partnerFeeUsd + (flashloanFeeUsd ?? 0); // + costs.slippageInUsd;

0 commit comments

Comments
 (0)