Skip to content

Commit 4d9d15b

Browse files
committed
fixes
1 parent 4a320f9 commit 4d9d15b

38 files changed

+1314
-724
lines changed

.npmrc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@cowprotocol:registry=https://npm.pkg.github.com
2-
always-auth=true
3-
# registry=https://registry.npmjs.org/
4-
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
1+
# @cowprotocol:registry=https://npm.pkg.github.com
2+
# always-auth=true
3+
# # registry=https://registry.npmjs.org/
4+
# //npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@
3636
"@aave/react": "0.6.1",
3737
"@amplitude/analytics-browser": "^2.13.0",
3838
"@bgd-labs/aave-address-book": "^4.31.0",
39-
"@cowprotocol/sdk-app-data": "4.1.3-pr-614-5b1d24e9.0",
40-
"@cowprotocol/cow-sdk": "7.0.10-pr-614-5b1d24e9.0",
41-
"@cowprotocol/sdk-flash-loans": "0.0.1-pr-614-5b1d24e9.0",
42-
"@cowprotocol/sdk-viem-adapter": "0.1.2-pr-614-5b1d24e9.0",
39+
"@cowprotocol/sdk-app-data": "4.1.4",
40+
"@cowprotocol/cow-sdk": "7.0.11",
41+
"@cowprotocol/sdk-flash-loans": "1.1.0",
42+
"@cowprotocol/sdk-viem-adapter": "0.1.3",
4343
"@emotion/cache": "11.10.3",
4444
"@emotion/react": "11.10.4",
4545
"@emotion/server": "latest",

src/components/transactions/Repay/CollateralRepayActions.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,26 @@ export const CollateralRepayActions = ({
6464
protocolAction: ProtocolAction.repayCollateral,
6565
handleGetTxns: async (signature, deadline) => {
6666
const route = await buildTxFn();
67+
68+
console.log('paraswapRepayWithCollateral', {
69+
repayAllDebt,
70+
repayAmount,
71+
rateMode,
72+
repayWithAmount,
73+
74+
fromAssetData,
75+
poolReserve,
76+
symbol,
77+
isWrongNetwork,
78+
useFlashLoan,
79+
blocked,
80+
swapCallData: route.swapCallData,
81+
augustus: route.augustus,
82+
signature,
83+
deadline,
84+
signedAmount: calculateSignedAmount(repayWithAmount, fromAssetData.decimals),
85+
});
86+
6787
return paraswapRepayWithCollateral({
6888
repayAllDebt,
6989
repayAmount,
@@ -83,6 +103,25 @@ export const CollateralRepayActions = ({
83103
});
84104
},
85105
handleGetApprovalTxns: async () => {
106+
console.log('paraswapRepayWithCollateral', {
107+
repayAllDebt,
108+
repayAmount,
109+
rateMode,
110+
repayWithAmount,
111+
112+
fromAssetData,
113+
poolReserve,
114+
symbol,
115+
isWrongNetwork,
116+
useFlashLoan,
117+
blocked,
118+
swapCallData: '0x',
119+
augustus: API_ETH_MOCK_ADDRESS,
120+
signature: '0x',
121+
deadline: '0',
122+
signedAmount: calculateSignedAmount(repayWithAmount, fromAssetData.decimals),
123+
});
124+
86125
return paraswapRepayWithCollateral({
87126
repayAllDebt,
88127
repayAmount,

src/components/transactions/Repay/CollateralRepayModalContent.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,13 @@ export function CollateralRepayModalContent({
257257
/>
258258
);
259259

260+
console.log('poolReserve', poolReserve.symbol, poolReserve.underlyingAsset);
261+
console.log(
262+
'collateralReserveData',
263+
collateralReserveData.symbol,
264+
collateralReserveData.underlyingAsset
265+
);
266+
260267
return (
261268
<>
262269
<AssetInput

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

Lines changed: 111 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,70 @@
1-
import { normalize } from '@aave/math-utils';
2-
import { getOrderToSign, LimitTradeParameters, OrderKind, TradingSdk } from '@cowprotocol/cow-sdk';
3-
import { AaveCollateralSwapSdk, HASH_ZERO } from '@cowprotocol/sdk-flash-loans';
1+
import { normalize, normalizeBN } from '@aave/math-utils';
2+
import { getOrderToSign, LimitTradeParameters, OrderKind } from '@cowprotocol/cow-sdk';
3+
import { AaveFlashLoanType, HASH_ZERO } from '@cowprotocol/sdk-flash-loans';
44
import { Trans } from '@lingui/macro';
5-
import { Dispatch, useEffect, useState } from 'react';
5+
import { Dispatch, useEffect, useMemo, useState } from 'react';
66
import { TxActionsWrapper } from 'src/components/transactions/TxActionsWrapper';
7+
import { calculateSignedAmount } from 'src/hooks/paraswap/common';
78
import { useModalContext } from 'src/hooks/useModal';
89
import { useRootStore } from 'src/store/root';
910
import { getErrorTextFromError, TxAction } from 'src/ui-config/errorMapping';
1011
import { useShallow } from 'zustand/react/shallow';
1112

1213
import { TrackAnalyticsHandlers } from '../../analytics/useTrackAnalytics';
13-
import { COW_PARTNER_FEE, FLASH_LOAN_FEE_BPS } from '../../constants/cow.constants';
14+
import { FLASH_LOAN_FEE_BPS } from '../../constants/cow.constants';
1415
import { APP_CODE_PER_SWAP_TYPE } from '../../constants/shared.constants';
15-
import { getCowAdapter } from '../../helpers/cow';
16-
import { calculateInstanceAddress } from '../../helpers/cow/adapters.helpers';
16+
import { getCowFlashLoanSdk, getCowTradingSdkByChainIdAndAppCode } from '../../helpers/cow';
17+
import { calculateInstanceAddress, OrderCore } from '../../helpers/cow/adapters.helpers';
1718
import { useSwapGasEstimation } from '../../hooks/useSwapGasEstimation';
18-
import { OrderType, SwapParams, SwapState } from '../../types';
19+
import { ExpiryToSecondsMap, OrderType, SwapParams, SwapState } from '../../types';
1920
import { useSwapTokenApproval } from '../approval/useSwapTokenApproval';
2021

22+
export const getCollateralSwapOrderCore = (state: SwapState): OrderCore => {
23+
// In limit orders, slippage is zero.
24+
const slippageInPercentage =
25+
state.orderType === OrderType.LIMIT ? 0 : Number(state.slippage) / 100;
26+
27+
const sellToken = state.sourceToken;
28+
const buyToken = state.destinationToken;
29+
const side = state.side;
30+
31+
// If side is sell, we allow less buy amount to ensure sell amount
32+
// If side is buy, we allow more sell amount to ensure buy amount
33+
const sellAmount =
34+
side === 'sell'
35+
? normalizeBN(state.inputAmount, -sellToken.decimals)
36+
: normalizeBN(state.inputAmount, -sellToken.decimals)
37+
.multipliedBy(1 + slippageInPercentage)
38+
.decimalPlaces(0);
39+
const buyAmount =
40+
side === 'sell'
41+
? normalizeBN(state.outputAmount, -buyToken.decimals)
42+
.dividedBy(1 + slippageInPercentage)
43+
.decimalPlaces(0)
44+
: normalizeBN(state.outputAmount, -buyToken.decimals).decimalPlaces(0);
45+
46+
// TODO: REQUIRES FIX IN COW SDK
47+
// slippageBps = slippageInPercentage * 10000
48+
// const partnerFee = COW_PARTNER_FEE(state.sourceToken.symbol, state.destinationToken.symbol);
49+
50+
const partnerFee = {
51+
volumeBps: 0,
52+
recipient: '0x0000000000000000000000000000000000000000',
53+
};
54+
const slippageBps = 0;
55+
56+
return {
57+
chainId: state.chainId,
58+
sellAmount,
59+
buyAmount,
60+
sellToken,
61+
buyToken,
62+
side,
63+
slippageBps,
64+
partnerFee,
65+
};
66+
};
67+
2168
export const CollateralSwapActionsViaCowAdapters = ({
2269
params,
2370
state,
@@ -37,15 +84,36 @@ export const CollateralSwapActionsViaCowAdapters = ({
3784
const [precalculatedInstanceAddress, setPrecalculatedInstanceAddress] = useState<
3885
string | undefined
3986
>();
40-
const validTo = state.expiry || Math.floor(Date.now() / 1000) + 10 * 60; // 10 minutes
4187

42-
const slippageBps =
43-
state.orderType === OrderType.LIMIT ? 0 : Math.round(Number(state.slippage) * 100); // percent to bps
88+
const validTo = useMemo(
89+
() => Math.floor(Date.now() / 1000) + ExpiryToSecondsMap[state.expiry],
90+
[state.expiry]
91+
);
92+
93+
const orderCore = useMemo(
94+
() => getCollateralSwapOrderCore(state),
95+
[
96+
state.inputAmount,
97+
state.outputAmount,
98+
state.sourceToken,
99+
state.destinationToken,
100+
state.side,
101+
state.slippage,
102+
state.orderType,
103+
state.chainId,
104+
]
105+
);
106+
console.log('validTo', validTo, state.expiry);
44107

45108
// Pre-compute instance address
46109
useEffect(() => {
47110
if (state.chainId !== 100) return; // TODO: remove this once we have a supported chainId
48-
calculateInstanceAddress(state, user, validTo)
111+
calculateInstanceAddress({
112+
user,
113+
validTo,
114+
type: AaveFlashLoanType.CollateralSwap,
115+
orderCore,
116+
})
49117
.catch((error) => {
50118
console.error('calculateInstanceAddress error', error);
51119
setTxError(getErrorTextFromError(error, TxAction.MAIN_ACTION, true));
@@ -58,24 +126,23 @@ export const CollateralSwapActionsViaCowAdapters = ({
58126
.then((address) => {
59127
if (address) setPrecalculatedInstanceAddress(address);
60128
});
61-
}, [
62-
user,
63-
state.inputAmount,
64-
state.minimumReceived,
65-
state.destinationToken.underlyingAddress,
66-
state.sourceToken.symbol,
67-
state.destinationToken.symbol,
68-
state.slippage,
69-
state.autoSlippage,
70-
APP_CODE_PER_SWAP_TYPE[state.swapType],
71-
]);
129+
}, [user, validTo, orderCore, state.chainId]);
72130

73131
// Approval is aToken ERC20 Approval
132+
const amountToApprove = useMemo(
133+
() =>
134+
calculateSignedAmount(
135+
normalizeBN(orderCore.sellAmount.toString(), orderCore.sellToken.decimals).toString(),
136+
orderCore.sellToken.decimals
137+
),
138+
[orderCore.sellAmount, orderCore.sellToken.decimals]
139+
);
140+
74141
const { requiresApproval, approval, tryPermit, signatureParams } = useSwapTokenApproval({
75142
chainId: state.chainId,
76143
token: state.sourceToken.addressToSwap,
77144
symbol: state.sourceToken.symbol,
78-
amount: state.inputAmount,
145+
amount: normalize(amountToApprove.toString(), orderCore.sellToken.decimals),
79146
decimals: state.sourceToken.decimals,
80147
spender: precalculatedInstanceAddress,
81148
setState,
@@ -101,23 +168,13 @@ export const CollateralSwapActionsViaCowAdapters = ({
101168
});
102169

103170
try {
104-
if (!state.minimumReceived) return;
105-
106-
const sellAmount = normalize(state.inputAmount, -state.sourceToken.decimals);
107-
const buyAmount = normalize(state.minimumReceived, -state.destinationToken.decimals);
108-
109-
const adapter = await getCowAdapter(state.chainId);
110-
const tradingSdk = new TradingSdk(
111-
{
112-
chainId: state.chainId,
113-
appCode: APP_CODE_PER_SWAP_TYPE[state.swapType],
114-
env: 'staging',
115-
signer: adapter.signer,
116-
},
117-
{},
118-
adapter
171+
const tradingSdk = await getCowTradingSdkByChainIdAndAppCode(
172+
orderCore.chainId,
173+
APP_CODE_PER_SWAP_TYPE[state.swapType],
174+
'staging'
119175
);
120-
const flashLoanSdk = new AaveCollateralSwapSdk();
176+
const flashLoanSdk = await getCowFlashLoanSdk(orderCore.chainId);
177+
121178
const collateralPermit = signatureParams
122179
? {
123180
amount: signatureParams?.amount,
@@ -128,42 +185,41 @@ export const CollateralSwapActionsViaCowAdapters = ({
128185
}
129186
: undefined;
130187

131-
const partnerFee = COW_PARTNER_FEE(state.sourceToken.symbol, state.destinationToken.symbol);
132-
133188
const { flashLoanFeeAmount, sellAmountToSign } = flashLoanSdk.calculateFlashLoanAmounts({
134189
flashLoanFeePercent: FLASH_LOAN_FEE_BPS / 100,
135-
sellAmount: BigInt(sellAmount),
190+
sellAmount: BigInt(orderCore.sellAmount.toString()),
136191
});
137192

138193
const limitOrder: LimitTradeParameters = {
139-
sellToken: state.sourceToken.underlyingAddress,
140-
sellTokenDecimals: state.sourceToken.decimals,
141-
buyToken: state.destinationToken.underlyingAddress,
142-
buyTokenDecimals: state.destinationToken.decimals,
194+
sellToken: orderCore.sellToken.underlyingAddress,
195+
sellTokenDecimals: orderCore.sellToken.decimals,
196+
buyToken: orderCore.buyToken.underlyingAddress,
197+
buyTokenDecimals: orderCore.buyToken.decimals,
143198
sellAmount: sellAmountToSign.toString(),
144-
buyAmount: buyAmount.toString(),
145-
kind: state.side === 'buy' ? OrderKind.BUY : OrderKind.SELL,
199+
buyAmount: orderCore.buyAmount.toString(),
200+
kind: orderCore.side === 'buy' ? OrderKind.BUY : OrderKind.SELL,
146201
validTo,
147-
slippageBps,
148-
partnerFee,
202+
slippageBps: orderCore.slippageBps,
203+
partnerFee: orderCore.partnerFee,
149204
};
150205

151206
const orderToSign = getOrderToSign(
152-
{ chainId: state.chainId, from: user, networkCostsAmount: '0', isEthFlow: false },
207+
{ chainId: orderCore.chainId, from: user, networkCostsAmount: '0', isEthFlow: false },
153208
limitOrder,
154209
HASH_ZERO
155210
);
156211

157212
const orderPostParams = await flashLoanSdk.getOrderPostingSettings(
213+
AaveFlashLoanType.CollateralSwap,
158214
{
159-
chainId: state.chainId,
215+
chainId: orderCore.chainId,
160216
validTo,
161217
owner: user as `0x${string}`,
162218
flashLoanFeeAmount,
163219
},
164220
{
165-
sellAmount: BigInt(sellAmount),
166-
buyAmount: BigInt(buyAmount),
221+
sellAmount: BigInt(orderCore.sellAmount.toString()),
222+
buyAmount: BigInt(orderCore.buyAmount.toString()),
167223
orderToSign,
168224
collateralPermit,
169225
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ export const CollateralSwapActionsViaParaswapAdapters = ({
5959
if (!state.swapRate || !isParaswapRates(state.swapRate))
6060
throw new Error('Route required to build transaction');
6161

62+
setMainTxState({
63+
txHash: undefined,
64+
loading: true,
65+
});
6266
const isMaxSelected = state.isMaxSelected;
6367
const optimalRateData = state.swapRate.optimalRateData;
6468

@@ -186,7 +190,8 @@ export const CollateralSwapActionsViaParaswapAdapters = ({
186190
chainId: state.chainId,
187191
}
188192
);
189-
// TODO: fix success
193+
trackingHandlers.trackSwap(); // TODO: check this happening in all actions
194+
params.invalidateAppState(); // TODO: check this happening in all actions
190195
setMainTxState({
191196
txHash: response.hash,
192197
loading: false,

0 commit comments

Comments
 (0)