diff --git a/package.json b/package.json index d0d9bdfc65..b66d414e69 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "3.0.1", "private": true, "license": "BSD-3-Clause", - "packageManager": "pnpm@10.18.0", + "packageManager": "pnpm@10.19.0", "engines": { "node": "24.x" }, @@ -63,9 +63,9 @@ "@aave/math-utils": "1.38.0", "@aave/react": "0.10.0", "@amplitude/analytics-browser": "^2.13.0", - "@cowprotocol/cow-sdk": "9.2.7", - "@cowprotocol/sdk-ethers-v5-adapter": "0.4.11", - "@cowprotocol/sdk-flash-loans": "3.3.4", + "@cowprotocol/cow-sdk": "9.2.21", + "@cowprotocol/sdk-ethers-v5-adapter": "0.4.21", + "@cowprotocol/sdk-flash-loans": "4.0.0", "@emotion/cache": "11.10.3", "@emotion/react": "11.10.4", "@emotion/server": "latest", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16c4a38bac..9734306d05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,14 +52,14 @@ importers: specifier: ^2.13.0 version: 2.44.5 '@cowprotocol/cow-sdk': - specifier: 9.2.7 - version: 9.2.7(ajv@8.20.0)(cross-fetch@4.1.0)(multiformats@9.9.0) + specifier: 9.2.21 + version: 9.2.21(ajv@8.20.0)(cross-fetch@4.1.0)(multiformats@9.9.0) '@cowprotocol/sdk-ethers-v5-adapter': - specifier: 0.4.11 - version: 0.4.11(@ethersproject/abstract-signer@5.8.0)(@typechain/ethers-v5@11.1.2(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + specifier: 0.4.21 + version: 0.4.21(@ethersproject/abstract-signer@5.8.0)(@typechain/ethers-v5@11.1.2(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@cowprotocol/sdk-flash-loans': - specifier: 3.3.4 - version: 3.3.4(ajv@8.20.0)(multiformats@9.9.0) + specifier: 4.0.0 + version: 4.0.0(ajv@8.20.0)(multiformats@9.9.0) '@emotion/cache': specifier: 11.10.3 version: 11.10.3 @@ -1263,8 +1263,8 @@ packages: resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} engines: {node: '>=v14'} - '@cowprotocol/cow-sdk@9.2.7': - resolution: {integrity: sha512-rNT6msuhl+2ZLICGZNgq9ov0EOarpiZxYC3BDaJum+Z5hnnl46zeXZUbBQ4AA+zkNgAudUvChCpGgcXzw1o45Q==} + '@cowprotocol/cow-sdk@9.2.21': + resolution: {integrity: sha512-RuaoODRTwGbJbz8cHhd3epUTWCSTj+BR7Ydszc8IB0sE9EL8FdzkppvHHiQqJK7sBSBdtwT83SePN2jFlN5M7A==} peerDependencies: '@openzeppelin/merkle-tree': ^1.x cross-fetch: ^3.x @@ -1275,39 +1275,39 @@ packages: multiformats: optional: true - '@cowprotocol/sdk-app-data@6.0.0': - resolution: {integrity: sha512-0qoq0Y6WiaKfl32twLtLHrxoFlAlFaW17VMr+7KHGado79mJh/9tI4UsWfIoDrZICfSRxfdzIVCzMRRJK0abEA==} + '@cowprotocol/sdk-app-data@6.0.11': + resolution: {integrity: sha512-FLqTjDWXGyPGPsh3ZfGYFCI9t+9uToUzVNY2VnSZyXU7ztvg4Sh+KHZYRVn5co6nicLscm+CjUU/e+3CC/0a/w==} peerDependencies: ajv: ^8.x multiformats: ^9.x - '@cowprotocol/sdk-common@0.12.1': - resolution: {integrity: sha512-eh8o2b8iLHNRnS7ATRDNOkISp67KHV7JDzYn1qd/reCVPLlnN/lRDnNomT+A8uPU1aYV2eNkCkbLyTkkQ5bT4g==} + '@cowprotocol/sdk-common@0.14.5': + resolution: {integrity: sha512-Y+pzjo1zsIKg3qc5d7hMs/4JBQjtP0FJWpcBquEpvqiw3aFlyp/6HjcaS5tTGhSKy85D1H2uq7H1reuy3GYKQA==} - '@cowprotocol/sdk-config@2.4.0': - resolution: {integrity: sha512-NMJOqq3LfIjlFFUHd4zbx3Rc3YJl/oCklEaAxw10VHVDNMFMqcdK3tR6W9CPTILR8zAv5DDy1C2cPErXpcrzkQ==} + '@cowprotocol/sdk-config@2.10.0': + resolution: {integrity: sha512-k4mBAzwpemn0ZYFrMIXzqRPngI22mEHQU0edETLwxj+kG9nUrKBh56uuF5GOaX6OmT9RDL+b4bVR5+AxFoUDdg==} - '@cowprotocol/sdk-contracts-ts@3.4.0': - resolution: {integrity: sha512-mPnwaUp0rLX6o8dH9hXZoA0Nj5kpPaQMGePTpxq+DfggZc4Y17d6Re2rzaHJMoWMDm9zG+82xIXQnn4JWEwK7A==} + '@cowprotocol/sdk-contracts-ts@3.7.5': + resolution: {integrity: sha512-UNdbi7NhHBc+jE4/KZFKUHEJCxPL1wPCnunBSLtTvX0fyRpjlaTE1HHXqBUKXJOxLwWccjnofgYxKDY++AFzpQ==} - '@cowprotocol/sdk-ethers-v5-adapter@0.4.11': - resolution: {integrity: sha512-smFc78/x4VrHu7zLpTU5GF/cp1KE9qBQIyGhLkhT6edMzqq0ASpnuPajT2ddHylcUUR93sTAn9YYmUjYAb+VLQ==} + '@cowprotocol/sdk-ethers-v5-adapter@0.4.21': + resolution: {integrity: sha512-YabeSaouocAChyFN1nRjF4I1KtQY925GULzbMg+XNby8335XqW1OO7TFf20bGWUlkulnvnfzlFFak4jzjbLI/g==} peerDependencies: '@ethersproject/abstract-signer': ^5.8.0 '@typechain/ethers-v5': ^11.1.2 ethers: ^5.7.2 - '@cowprotocol/sdk-flash-loans@3.3.4': - resolution: {integrity: sha512-5IaWqtvQeGaa9fEqpiGxZHPT1HT2F//RSPhcM7NGnCZuv3ptwMrvNhhmxcLhtuCIuVe5RqAiT3VUrfCN4XDfUA==} + '@cowprotocol/sdk-flash-loans@4.0.0': + resolution: {integrity: sha512-IBmuCRh7koAxTlrhsLOItSNZW8GLEhVCdsN75aOF5kkgh3CosEVWjhNPUjW7J2TsBAT4BALapUqaFv0UMvMTlQ==} - '@cowprotocol/sdk-order-book@4.0.2': - resolution: {integrity: sha512-IuR6LARLtIrfRNkEqgPRkK5/1HRpR3+YktbkfqrH8B3Bi2YzMQxRVxu+N8KtEdC5fbHvkLixKKDDwN2gKAI3bA==} + '@cowprotocol/sdk-order-book@4.3.4': + resolution: {integrity: sha512-wwxFHA8/oun3NO5Kpz2xivdohOAmDG0vcg3m909quGkUr4BsJsSzaNgfuEFBCTYNfKZm8qaHwrtrq60mDlSUjg==} - '@cowprotocol/sdk-order-signing@1.1.7': - resolution: {integrity: sha512-0n1/Jsk/YHWfXoTx7IC9T5sCDd5NllRotkptjcV7cUWXS8HZVaUuw0EI+17gFHd/S+dro5s8e8Bmydvxq//8XQ==} + '@cowprotocol/sdk-order-signing@1.1.20': + resolution: {integrity: sha512-kjbea4pzPndQ1baErXNzbgyEIFYvnrnBtr4p8KbOXYsDBx3QFkNe4ylQZZhBXafeRJVRGo2yHbxHqDVCAunGqg==} - '@cowprotocol/sdk-trading@2.3.0': - resolution: {integrity: sha512-fuDfMTN/7t4PzXe0vcAHS09sEBMJqYIHx5gDgWMI65kMo9xnVJwHXHXV5nF2OpaTkvyOb6Z9CT7TIsSEmIAWrw==} + '@cowprotocol/sdk-trading@2.7.8': + resolution: {integrity: sha512-KFvBWsba4xn6Z9WMFEDmWxZJPZcFNimkV3z29yMc8hOGllHpGZzF5mOUwG5bFlS+XiNxVo23YLyqDBCT7BGglw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -11548,15 +11548,15 @@ snapshots: dependencies: chalk: 4.1.2 - '@cowprotocol/cow-sdk@9.2.7(ajv@8.20.0)(cross-fetch@4.1.0)(multiformats@9.9.0)': + '@cowprotocol/cow-sdk@9.2.21(ajv@8.20.0)(cross-fetch@4.1.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-app-data': 6.0.0(ajv@8.20.0)(multiformats@9.9.0) - '@cowprotocol/sdk-common': 0.12.1 - '@cowprotocol/sdk-config': 2.4.0 - '@cowprotocol/sdk-contracts-ts': 3.4.0 - '@cowprotocol/sdk-order-book': 4.0.2 - '@cowprotocol/sdk-order-signing': 1.1.7 - '@cowprotocol/sdk-trading': 2.3.0(ajv@8.20.0)(multiformats@9.9.0) + '@cowprotocol/sdk-app-data': 6.0.11(ajv@8.20.0)(multiformats@9.9.0) + '@cowprotocol/sdk-common': 0.14.5 + '@cowprotocol/sdk-config': 2.10.0 + '@cowprotocol/sdk-contracts-ts': 3.7.5 + '@cowprotocol/sdk-order-book': 4.3.4 + '@cowprotocol/sdk-order-signing': 1.1.20 + '@cowprotocol/sdk-trading': 2.7.8(ajv@8.20.0)(multiformats@9.9.0) cross-fetch: 4.1.0 optionalDependencies: multiformats: 9.9.0 @@ -11564,74 +11564,74 @@ snapshots: - ajv - encoding - '@cowprotocol/sdk-app-data@6.0.0(ajv@8.20.0)(multiformats@9.9.0)': + '@cowprotocol/sdk-app-data@6.0.11(ajv@8.20.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-common': 0.12.1 + '@cowprotocol/sdk-common': 0.14.5 ajv: 8.20.0 json-stringify-deterministic: 1.0.14 multiformats: 9.9.0 - '@cowprotocol/sdk-common@0.12.1': + '@cowprotocol/sdk-common@0.14.5': dependencies: - '@cowprotocol/sdk-config': 2.4.0 + '@cowprotocol/sdk-config': 2.10.0 - '@cowprotocol/sdk-config@2.4.0': + '@cowprotocol/sdk-config@2.10.0': dependencies: exponential-backoff: 3.1.3 limiter: 2.1.0 - '@cowprotocol/sdk-contracts-ts@3.4.0': + '@cowprotocol/sdk-contracts-ts@3.7.5': dependencies: - '@cowprotocol/sdk-common': 0.12.1 - '@cowprotocol/sdk-config': 2.4.0 + '@cowprotocol/sdk-common': 0.14.5 + '@cowprotocol/sdk-config': 2.10.0 - '@cowprotocol/sdk-ethers-v5-adapter@0.4.11(@ethersproject/abstract-signer@5.8.0)(@typechain/ethers-v5@11.1.2(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@cowprotocol/sdk-ethers-v5-adapter@0.4.21(@ethersproject/abstract-signer@5.8.0)(@typechain/ethers-v5@11.1.2(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: - '@cowprotocol/sdk-common': 0.12.1 + '@cowprotocol/sdk-common': 0.14.5 '@ethersproject/abstract-signer': 5.8.0 '@typechain/ethers-v5': 11.1.2(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(ethers@5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typechain@8.3.2(typescript@5.9.3))(typescript@5.9.3) ethers: 5.8.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - '@cowprotocol/sdk-flash-loans@3.3.4(ajv@8.20.0)(multiformats@9.9.0)': + '@cowprotocol/sdk-flash-loans@4.0.0(ajv@8.20.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-app-data': 6.0.0(ajv@8.20.0)(multiformats@9.9.0) - '@cowprotocol/sdk-common': 0.12.1 - '@cowprotocol/sdk-config': 2.4.0 - '@cowprotocol/sdk-order-book': 4.0.2 - '@cowprotocol/sdk-order-signing': 1.1.7 - '@cowprotocol/sdk-trading': 2.3.0(ajv@8.20.0)(multiformats@9.9.0) + '@cowprotocol/sdk-app-data': 6.0.11(ajv@8.20.0)(multiformats@9.9.0) + '@cowprotocol/sdk-common': 0.14.5 + '@cowprotocol/sdk-config': 2.10.0 + '@cowprotocol/sdk-order-book': 4.3.4 + '@cowprotocol/sdk-order-signing': 1.1.20 + '@cowprotocol/sdk-trading': 2.7.8(ajv@8.20.0)(multiformats@9.9.0) transitivePeerDependencies: - ajv - encoding - multiformats - '@cowprotocol/sdk-order-book@4.0.2': + '@cowprotocol/sdk-order-book@4.3.4': dependencies: - '@cowprotocol/sdk-common': 0.12.1 - '@cowprotocol/sdk-config': 2.4.0 + '@cowprotocol/sdk-common': 0.14.5 + '@cowprotocol/sdk-config': 2.10.0 cross-fetch: 3.2.0 exponential-backoff: 3.1.3 limiter: 3.0.0 transitivePeerDependencies: - encoding - '@cowprotocol/sdk-order-signing@1.1.7': + '@cowprotocol/sdk-order-signing@1.1.20': dependencies: - '@cowprotocol/sdk-common': 0.12.1 - '@cowprotocol/sdk-config': 2.4.0 - '@cowprotocol/sdk-contracts-ts': 3.4.0 - '@cowprotocol/sdk-order-book': 4.0.2 + '@cowprotocol/sdk-common': 0.14.5 + '@cowprotocol/sdk-config': 2.10.0 + '@cowprotocol/sdk-contracts-ts': 3.7.5 + '@cowprotocol/sdk-order-book': 4.3.4 transitivePeerDependencies: - encoding - '@cowprotocol/sdk-trading@2.3.0(ajv@8.20.0)(multiformats@9.9.0)': + '@cowprotocol/sdk-trading@2.7.8(ajv@8.20.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-app-data': 6.0.0(ajv@8.20.0)(multiformats@9.9.0) - '@cowprotocol/sdk-common': 0.12.1 - '@cowprotocol/sdk-config': 2.4.0 - '@cowprotocol/sdk-contracts-ts': 3.4.0 - '@cowprotocol/sdk-order-book': 4.0.2 - '@cowprotocol/sdk-order-signing': 1.1.7 + '@cowprotocol/sdk-app-data': 6.0.11(ajv@8.20.0)(multiformats@9.9.0) + '@cowprotocol/sdk-common': 0.14.5 + '@cowprotocol/sdk-config': 2.10.0 + '@cowprotocol/sdk-contracts-ts': 3.7.5 + '@cowprotocol/sdk-order-book': 4.3.4 + '@cowprotocol/sdk-order-signing': 1.1.20 deepmerge: 4.3.1 transitivePeerDependencies: - ajv diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index bde3c82fae..d5bd9b6fda 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,6 +13,17 @@ minimumReleaseAge: 10080 minimumReleaseAgeExclude: - '@aave/*' - '@aave-dao/*' + # TODO: cow-sdk release from 2026-10-13, remove once it clears the 7-day window on 2026-10-20 + - '@cowprotocol/cow-sdk@9.2.21' + - '@cowprotocol/sdk-app-data@6.0.11' + - '@cowprotocol/sdk-common@0.14.5' + - '@cowprotocol/sdk-config@2.10.0' + - '@cowprotocol/sdk-contracts-ts@3.7.5' + - '@cowprotocol/sdk-ethers-v5-adapter@0.4.21' + - '@cowprotocol/sdk-flash-loans@4.0.0' + - '@cowprotocol/sdk-order-book@4.3.4' + - '@cowprotocol/sdk-order-signing@1.1.20' + - '@cowprotocol/sdk-trading@2.7.8' # Build-script allowlist. pnpm 10 blocks all dependency install/postinstall # scripts by default; only packages listed here may run them. This is the diff --git a/src/components/transactions/CancelCowOrder/CancelAdapterOrderActions.tsx b/src/components/transactions/CancelCowOrder/CancelAdapterOrderActions.tsx index 575435425a..086c0bfe84 100644 --- a/src/components/transactions/CancelCowOrder/CancelAdapterOrderActions.tsx +++ b/src/components/transactions/CancelCowOrder/CancelAdapterOrderActions.tsx @@ -1,4 +1,4 @@ -import { OrderStatus, SupportedChainId } from '@cowprotocol/cow-sdk'; +import { OrderStatus } from '@cowprotocol/cow-sdk'; import { Trans } from '@lingui/macro'; import { useQueryClient } from '@tanstack/react-query'; import { Interface } from 'ethers/lib/utils'; @@ -16,7 +16,7 @@ import { useRootStore } from 'src/store/root'; import { getErrorTextFromError, TxAction } from 'src/ui-config/errorMapping'; import { updateCowOrderStatus } from 'src/utils/swapAdapterHistory'; -import { ADAPTER_FACTORY } from '../Swap/constants/cow.constants'; +import { LEGACY_ADAPTER_FACTORY } from '../Swap/constants/cow.constants'; import { TxActionsWrapper } from '../TxActionsWrapper'; interface CancelAdapterOrderActionsProps { @@ -59,11 +59,8 @@ export const CancelAdapterOrderActions = ({ const adapterInterface = new Interface(ADAPTER_ABI); - const factoryAddress = ADAPTER_FACTORY[cowOrder.chainId as SupportedChainId]; - - if (!factoryAddress) { - throw new Error('Factory address not found for this chain'); - } + // An instance is only cancelled on the factory that created it. + const factoryAddress = cowSwapOrder.adapterFactoryAddress ?? LEGACY_ADAPTER_FACTORY; const data = adapterInterface.encodeFunctionData('cancelInstance', [ cowSwapOrder.adapterInstanceAddress, diff --git a/src/components/transactions/Swap/actions/CollateralSwap/CollateralSwapActionsViaCoWAdapters.tsx b/src/components/transactions/Swap/actions/CollateralSwap/CollateralSwapActionsViaCoWAdapters.tsx index 8a1720920c..fcbec4f7c0 100644 --- a/src/components/transactions/Swap/actions/CollateralSwap/CollateralSwapActionsViaCoWAdapters.tsx +++ b/src/components/transactions/Swap/actions/CollateralSwap/CollateralSwapActionsViaCoWAdapters.tsx @@ -1,5 +1,11 @@ import { normalize } from '@aave/math-utils'; -import { getOrderToSign, LimitTradeParameters, OrderKind, OrderStatus } from '@cowprotocol/cow-sdk'; +import { + getOrderToSign, + LimitTradeParameters, + OrderKind, + OrderStatus, + SupportedChainId, +} from '@cowprotocol/cow-sdk'; import { AaveFlashLoanType, HASH_ZERO } from '@cowprotocol/sdk-flash-loans'; import { Trans } from '@lingui/macro'; import { Dispatch, useEffect, useMemo, useState } from 'react'; @@ -13,7 +19,7 @@ import { saveCowOrderToUserHistory } from 'src/utils/swapAdapterHistory'; import { useShallow } from 'zustand/react/shallow'; import { TrackAnalyticsHandlers } from '../../analytics/useTrackAnalytics'; -import { COW_PARTNER_FEE } from '../../constants/cow.constants'; +import { ADAPTER_FACTORY, COW_PARTNER_FEE } from '../../constants/cow.constants'; import { APP_CODE_PER_SWAP_TYPE } from '../../constants/shared.constants'; import { addOrderTypeToAppData, @@ -304,6 +310,7 @@ export const CollateralSwapActionsViaCowAdapters = ({ decimals: state.buyAmountToken.decimals, }, adapterInstanceAddress: instanceAddress, + adapterFactoryAddress: ADAPTER_FACTORY[state.chainId as SupportedChainId], usedAdapter: true, // CollateralSwap via adapters always uses adapter (flashloan) srcAmount: state.sellAmountBigInt.toString(), destAmount: state.buyAmountBigInt.toString(), diff --git a/src/components/transactions/Swap/actions/DebtSwap/DebtSwapActionsViaCoW.tsx b/src/components/transactions/Swap/actions/DebtSwap/DebtSwapActionsViaCoW.tsx index 02dc948b14..8f6573e1ff 100644 --- a/src/components/transactions/Swap/actions/DebtSwap/DebtSwapActionsViaCoW.tsx +++ b/src/components/transactions/Swap/actions/DebtSwap/DebtSwapActionsViaCoW.tsx @@ -1,5 +1,11 @@ import { normalize } from '@aave/math-utils'; -import { getOrderToSign, LimitTradeParameters, OrderKind, OrderStatus } from '@cowprotocol/cow-sdk'; +import { + getOrderToSign, + LimitTradeParameters, + OrderKind, + OrderStatus, + SupportedChainId, +} from '@cowprotocol/cow-sdk'; import { AaveFlashLoanType, HASH_ZERO } from '@cowprotocol/sdk-flash-loans'; import { Trans } from '@lingui/macro'; import { Dispatch, useEffect, useMemo, useState } from 'react'; @@ -14,7 +20,7 @@ import { zeroAddress } from 'viem'; import { useShallow } from 'zustand/react/shallow'; import { TrackAnalyticsHandlers } from '../../analytics/useTrackAnalytics'; -import { COW_PARTNER_FEE } from '../../constants/cow.constants'; +import { ADAPTER_FACTORY, COW_PARTNER_FEE } from '../../constants/cow.constants'; import { APP_CODE_PER_SWAP_TYPE } from '../../constants/shared.constants'; import { addOrderTypeToAppData, @@ -331,6 +337,7 @@ export const DebtSwapActionsViaCoW = ({ decimals: state.buyAmountToken.decimals, }, adapterInstanceAddress: instanceAddress, + adapterFactoryAddress: ADAPTER_FACTORY[state.chainId as SupportedChainId], usedAdapter: true, // DebtSwap always uses adapter srcAmount: state.sellAmountBigInt.toString(), destAmount: state.buyAmountBigInt.toString(), diff --git a/src/components/transactions/Swap/actions/RepayWithCollateral/RepayWithCollateralActionsViaCoW.tsx b/src/components/transactions/Swap/actions/RepayWithCollateral/RepayWithCollateralActionsViaCoW.tsx index d44efb0995..37312da901 100644 --- a/src/components/transactions/Swap/actions/RepayWithCollateral/RepayWithCollateralActionsViaCoW.tsx +++ b/src/components/transactions/Swap/actions/RepayWithCollateral/RepayWithCollateralActionsViaCoW.tsx @@ -1,5 +1,11 @@ import { normalize } from '@aave/math-utils'; -import { getOrderToSign, LimitTradeParameters, OrderKind, OrderStatus } from '@cowprotocol/cow-sdk'; +import { + getOrderToSign, + LimitTradeParameters, + OrderKind, + OrderStatus, + SupportedChainId, +} from '@cowprotocol/cow-sdk'; import { AaveFlashLoanType, HASH_ZERO } from '@cowprotocol/sdk-flash-loans'; import { Trans } from '@lingui/macro'; import { Dispatch, useEffect, useMemo, useState } from 'react'; @@ -13,7 +19,7 @@ import { saveCowOrderToUserHistory } from 'src/utils/swapAdapterHistory'; import { useShallow } from 'zustand/react/shallow'; import { TrackAnalyticsHandlers } from '../../analytics/useTrackAnalytics'; -import { COW_PARTNER_FEE } from '../../constants/cow.constants'; +import { ADAPTER_FACTORY, COW_PARTNER_FEE } from '../../constants/cow.constants'; import { APP_CODE_PER_SWAP_TYPE } from '../../constants/shared.constants'; import { addOrderTypeToAppData, @@ -329,6 +335,7 @@ export const RepayWithCollateralActionsViaCoW = ({ decimals: state.buyAmountToken.decimals, }, adapterInstanceAddress: instanceAddress, + adapterFactoryAddress: ADAPTER_FACTORY[state.chainId as SupportedChainId], usedAdapter: true, // RepayWithCollateral always uses adapter srcAmount: state.sellAmountBigInt.toString(), destAmount: state.buyAmountBigInt.toString(), diff --git a/src/components/transactions/Swap/constants/cow.constants.ts b/src/components/transactions/Swap/constants/cow.constants.ts index 37ab7e217c..7a5cf3a7a3 100644 --- a/src/components/transactions/Swap/constants/cow.constants.ts +++ b/src/components/transactions/Swap/constants/cow.constants.ts @@ -8,43 +8,57 @@ import { OrderType, SwapType } from '../types'; export const HOOK_ADAPTER_PER_TYPE: Record> = { [AaveFlashLoanType.CollateralSwap]: { - [SupportedChainId.MAINNET]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.GNOSIS_CHAIN]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.ARBITRUM_ONE]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.AVALANCHE]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.BNB]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.POLYGON]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.BASE]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.LINEA]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', - [SupportedChainId.PLASMA]: '0x029d584E847373B6373b01dfaD1a0C9BfB916382', + [SupportedChainId.MAINNET]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.GNOSIS_CHAIN]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.ARBITRUM_ONE]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.AVALANCHE]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.BNB]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.POLYGON]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.BASE]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.LINEA]: '0xa1138627412212e53C208e220696f14b0185a82c', + [SupportedChainId.PLASMA]: '0xa1138627412212e53C208e220696f14b0185a82c', [SupportedChainId.SEPOLIA]: '', [SupportedChainId.INK]: '', [SupportedChainId.SOLANA]: '', }, [AaveFlashLoanType.DebtSwap]: { - [SupportedChainId.MAINNET]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.GNOSIS_CHAIN]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.ARBITRUM_ONE]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.AVALANCHE]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.BNB]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.POLYGON]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.BASE]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.LINEA]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', - [SupportedChainId.PLASMA]: '0x73e7aF13Ef172F13d8FEfEbfD90C7A6530096344', + [SupportedChainId.MAINNET]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.GNOSIS_CHAIN]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.ARBITRUM_ONE]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.AVALANCHE]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.BNB]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.POLYGON]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.BASE]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.LINEA]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', + [SupportedChainId.PLASMA]: '0xC898f87b572018ED25F501FFD620894a32dCa1AC', [SupportedChainId.SEPOLIA]: '', [SupportedChainId.INK]: '', [SupportedChainId.SOLANA]: '', }, [AaveFlashLoanType.RepayCollateral]: { - [SupportedChainId.MAINNET]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.GNOSIS_CHAIN]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.ARBITRUM_ONE]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.AVALANCHE]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.BNB]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.POLYGON]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.BASE]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.LINEA]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', - [SupportedChainId.PLASMA]: '0xAc27F3f86e78B14721d07C4f9CE999285f9AAa06', + [SupportedChainId.MAINNET]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.GNOSIS_CHAIN]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.ARBITRUM_ONE]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.AVALANCHE]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.BNB]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.POLYGON]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.BASE]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.LINEA]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.PLASMA]: '0x4AE46995af9ED4f4EdFC6FF1523b114EE4D7053a', + [SupportedChainId.SEPOLIA]: '', + [SupportedChainId.INK]: '', + [SupportedChainId.SOLANA]: '', + }, + [AaveFlashLoanType.Leverage]: { + [SupportedChainId.MAINNET]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.GNOSIS_CHAIN]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.ARBITRUM_ONE]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.AVALANCHE]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.BNB]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.POLYGON]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.BASE]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.LINEA]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', + [SupportedChainId.PLASMA]: '0xaEE8B0666BF8a584e9D67bFaa65007E74c70b26a', [SupportedChainId.SEPOLIA]: '', [SupportedChainId.INK]: '', [SupportedChainId.SOLANA]: '', @@ -52,20 +66,26 @@ export const HOOK_ADAPTER_PER_TYPE: Record = { - [SupportedChainId.MAINNET]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.GNOSIS_CHAIN]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.ARBITRUM_ONE]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.AVALANCHE]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.BNB]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.POLYGON]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.BASE]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.LINEA]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', - [SupportedChainId.PLASMA]: '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192', + [SupportedChainId.MAINNET]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.GNOSIS_CHAIN]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.ARBITRUM_ONE]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.AVALANCHE]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.BNB]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.POLYGON]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.BASE]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', + [SupportedChainId.LINEA]: '0x3171FC716942a40DEDe8dD0B7885dd9f44eca176', + [SupportedChainId.PLASMA]: '0xD2CC30cB0e77B80a34b879ccB6da67799e4ecD83', [SupportedChainId.SEPOLIA]: '', [SupportedChainId.INK]: '', [SupportedChainId.SOLANA]: '', }; +// Orders saved before the factory was recorded per order were all placed through this one. +export const LEGACY_ADAPTER_FACTORY = '0xdeCC46a4b09162F5369c5C80383AAa9159bCf192'; + +// EIP-712 domain name the factories above verify adapter order signatures against. +export const ADAPTER_FACTORY_DOMAIN_NAME = 'AaveV3AdapterV3Factory'; + export const DUST_PROTECTION_MULTIPLIER = 1.0003; // 3 BPS export const COW_UNSUPPORTED_ASSETS: Partial< diff --git a/src/components/transactions/Swap/helpers/cow/env.helpers.ts b/src/components/transactions/Swap/helpers/cow/env.helpers.ts index 5e2e9ca241..12bd1365a1 100644 --- a/src/components/transactions/Swap/helpers/cow/env.helpers.ts +++ b/src/components/transactions/Swap/helpers/cow/env.helpers.ts @@ -6,7 +6,11 @@ import { wagmiConfig } from 'src/ui-config/wagmiConfig'; import { getProvider } from 'src/utils/marketsAndNetworksConfig'; import { getAccount, getWalletClient } from 'wagmi/actions'; -import { ADAPTER_FACTORY, HOOK_ADAPTER_PER_TYPE } from '../../constants/cow.constants'; +import { + ADAPTER_FACTORY, + ADAPTER_FACTORY_DOMAIN_NAME, + HOOK_ADAPTER_PER_TYPE, +} from '../../constants/cow.constants'; import { APP_CODE_PER_SWAP_TYPE } from '../../constants/shared.constants'; import { SwapState } from '../../types'; import { COW_ENV } from './orders.helpers'; @@ -42,6 +46,7 @@ export const getCowFlashLoanSdk = async (chainId: number) => { return new AaveCollateralSwapSdk({ hookAdapterPerType: HOOK_ADAPTER_PER_TYPE, aaveAdapterFactory: ADAPTER_FACTORY, + adapterDomainName: ADAPTER_FACTORY_DOMAIN_NAME, hooksGasLimit: { pre: BigInt(300000), post: BigInt(700000), diff --git a/src/hooks/useTransactionHistory.tsx b/src/hooks/useTransactionHistory.tsx index 13bac5a23a..6c4d63f24e 100644 --- a/src/hooks/useTransactionHistory.tsx +++ b/src/hooks/useTransactionHistory.tsx @@ -470,6 +470,7 @@ export const useTransactionHistory = ({ isFilterActive }: { isFilterActive: bool orderId: e.orderId, chainId: e.chainId, adapterInstanceAddress: e.adapterInstanceAddress, + adapterFactoryAddress: e.adapterFactoryAddress, usedAdapter: e.usedAdapter, } as TransactionHistoryItemUnion; }) diff --git a/src/modules/history/types.ts b/src/modules/history/types.ts index 90549c23ab..4c722cd4c1 100644 --- a/src/modules/history/types.ts +++ b/src/modules/history/types.ts @@ -57,6 +57,7 @@ export type CowSwapSubset = SwapSubset & { protocol: 'cow'; orderId: string; adapterInstanceAddress?: string; // Instance address for adapter-based swaps + adapterFactoryAddress?: string; // Factory that created the instance usedAdapter?: boolean; // Whether adapter was used }; diff --git a/src/utils/swapAdapterHistory.ts b/src/utils/swapAdapterHistory.ts index d9f5bd1f53..273b28a2a3 100644 --- a/src/utils/swapAdapterHistory.ts +++ b/src/utils/swapAdapterHistory.ts @@ -23,6 +23,7 @@ export type CowAdapterEntry = { destAmount: string; // raw units // Adapter-specific fields for cancellation adapterInstanceAddress?: string; // Instance address for adapter-based swaps + adapterFactoryAddress?: string; // Factory that created the instance, and the one that can cancel it usedAdapter?: boolean; // Whether adapter was used (true for DebtSwap, RepayWithCollateral, and CollateralSwap with flashloan) };