ci(release): publish latest release

parent 5a1edbe7
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmQToF1qiuAjejy6i8taYNKVGVw2eehvVKb8mimGtzmdnt` - CIDv0: `Qmare3scA791vEczmDbddpWRgmipd2LyBeHGoV53RzqJWd`
- CIDv1: `bafybeia7rqlhhzrec6fjpzeo2eh3ayuiiqrkqehr2puihgnpw5xabvisqu` - CIDv1: `bafybeifz7lwau4w4z7awqjzujhgnff4lpwxrj533xk3n6skzpjmvzpyhvi`
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
...@@ -10,51 +10,14 @@ You can also access the Uniswap Interface from an IPFS gateway. ...@@ -10,51 +10,14 @@ You can also access the Uniswap Interface from an IPFS gateway.
Your Uniswap settings are never remembered across different URLs. Your Uniswap settings are never remembered across different URLs.
IPFS gateways: IPFS gateways:
- https://bafybeia7rqlhhzrec6fjpzeo2eh3ayuiiqrkqehr2puihgnpw5xabvisqu.ipfs.dweb.link/ - https://bafybeifz7lwau4w4z7awqjzujhgnff4lpwxrj533xk3n6skzpjmvzpyhvi.ipfs.dweb.link/
- [ipfs://QmQToF1qiuAjejy6i8taYNKVGVw2eehvVKb8mimGtzmdnt/](ipfs://QmQToF1qiuAjejy6i8taYNKVGVw2eehvVKb8mimGtzmdnt/) - [ipfs://Qmare3scA791vEczmDbddpWRgmipd2LyBeHGoV53RzqJWd/](ipfs://Qmare3scA791vEczmDbddpWRgmipd2LyBeHGoV53RzqJWd/)
## 5.79.0 (2025-04-16) ### 5.79.1 (2025-04-17)
### Features
* **web:** [EW] add EW redux state and Recently Signed In Modal (#18035) f78e203
* **web:** [EW] add ExternallyConnectableExtension dynamic config to select which extension the web app will communicate with (#18226) 211a6f8
* **web:** [EW] Add new passkeys to wallet (#14816) a06b597
* **web:** [EW] Be able to delete passkeys (#14817) 53cf094
* **web:** [EW] Modify Sign In Connector (#17668) eb6e89f
* **web:** add apr section to position page (#18078) 328c45a
* **web:** add low network native balance warning for send (#18248) 1eb12a9
* **web:** add username to EW registration (#18084) 5ac58a5
* **web:** allow Low network token balance warning to show for interface (#18102) d756982
* **web:** lp incentive position card updates (#18044) d50e225
* **web:** update positions page with lp incentive boost treatments (#18026) 4211bdc
### Bug Fixes ### Bug Fixes
* **web:** fixing arb v3 (#18421) (#18503) 6d6599f * **web:** v4 0 slippage at max (#18588) 07180fd
* **web:** handle async token0 or token1 in create context (#18395) ad71e5e
* **web:** hotfix staging fix safari dropdown (#18468) b19c84c
* **web:** move to 1 worker and fix wallet connection (#18348) c38af7e
* **web:** only use mainnet in legacy searchbardropdown (#17966) de03a5d
* **web:** tooltip on hover tamagui bug (#18349) 4c9c8aa
* **web:** web staging builds (#18402) 8aff715
### Continuous Integration
* **web:** update sitemaps 7d9688f
### Code Refactoring
* **web:** kill multicall (#15064) ef6c894
* **web:** move x-specifics to getUniswapXSwapTxAndGasInfo (#18180) 35560f7
* **web:** rm unused indicativeTrade field from swapTxAndGasInfo (#18177) 3161013
* **web:** rm useMultipleContractSingleData in legacy v2 hook (#15062) ab7b73e
* **web:** rm useMultipleContractSingleData in usePools (#15063) 2dba888
* **web:** rm useMultipleContractSingleData in useV2Pairs (#15061) 7549b71
* **web:** rm useMultipleContractSingleData usage in useCurrencyBalance (#15059) 11995d0
web/5.79.0 web/5.79.1
\ No newline at end of file \ No newline at end of file
...@@ -18,6 +18,8 @@ import { ...@@ -18,6 +18,8 @@ import {
import { toSupportedChainId } from 'uniswap/src/features/chains/utils' import { toSupportedChainId } from 'uniswap/src/features/chains/utils'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types' import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import { useTransactionGasFee, useUSDCurrencyAmountOfGasFee } from 'uniswap/src/features/gas/hooks' import { useTransactionGasFee, useUSDCurrencyAmountOfGasFee } from 'uniswap/src/features/gas/hooks'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo' import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo'
import { import {
IncreasePositionTxAndGasInfo, IncreasePositionTxAndGasInfo,
...@@ -48,6 +50,7 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr ...@@ -48,6 +50,7 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr
const { derivedIncreaseLiquidityInfo, increaseLiquidityState, currentTransactionStep } = useIncreaseLiquidityContext() const { derivedIncreaseLiquidityInfo, increaseLiquidityState, currentTransactionStep } = useIncreaseLiquidityContext()
const { customDeadline, customSlippageTolerance } = useTransactionSettingsContext() const { customDeadline, customSlippageTolerance } = useTransactionSettingsContext()
const [hasIncreaseErrorResponse, setHasIncreaseErrorResponse] = useState(false) const [hasIncreaseErrorResponse, setHasIncreaseErrorResponse] = useState(false)
const v4ZeroSlippageEnabled = useFeatureFlag(FeatureFlags.V40Slippage)
const { currencyAmounts, error } = derivedIncreaseLiquidityInfo const { currencyAmounts, error } = derivedIncreaseLiquidityInfo
const { exactField } = increaseLiquidityState const { exactField } = increaseLiquidityState
...@@ -141,6 +144,10 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr ...@@ -141,6 +144,10 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr
exactField === PositionField.TOKEN0 ? [amount0, amount1] : [amount1, amount0] exactField === PositionField.TOKEN0 ? [amount0, amount1] : [amount1, amount0]
const independentToken = exactField === PositionField.TOKEN0 ? IndependentToken.TOKEN_0 : IndependentToken.TOKEN_1 const independentToken = exactField === PositionField.TOKEN0 ? IndependentToken.TOKEN_0 : IndependentToken.TOKEN_1
// stopgap measure to prevent overslippage on V4 pools
// TODO: remove this when we can set an upper limit on maxAmounts on protocol level
const forceV4ZeroSlippage = v4ZeroSlippageEnabled && positionInfo.version === ProtocolVersion.V4
return { return {
simulateTransaction: !approvalsNeeded, simulateTransaction: !approvalsNeeded,
protocol: apiProtocolItems, protocol: apiProtocolItems,
...@@ -161,9 +168,17 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr ...@@ -161,9 +168,17 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr
hooks: positionInfo.v4hook, hooks: positionInfo.v4hook,
}, },
}, },
slippageTolerance: customSlippageTolerance, slippageTolerance: forceV4ZeroSlippage ? 0 : customSlippageTolerance,
} }
}, [account, positionInfo, currencyAmounts, approvalsNeeded, customSlippageTolerance, exactField]) }, [
account,
positionInfo,
currencyAmounts,
approvalsNeeded,
customSlippageTolerance,
exactField,
v4ZeroSlippageEnabled,
])
const currency0Info = useCurrencyInfo(currencyId(positionInfo?.currency0Amount.currency)) const currency0Info = useCurrencyInfo(currencyId(positionInfo?.currency0Amount.currency))
const currency1Info = useCurrencyInfo(currencyId(positionInfo?.currency1Amount.currency)) const currency1Info = useCurrencyInfo(currencyId(positionInfo?.currency1Amount.currency))
......
import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb'
import { FeeTierSearchModal } from 'components/Liquidity/FeeTierSearchModal' import { FeeTierSearchModal } from 'components/Liquidity/FeeTierSearchModal'
import { useCreatePositionDependentAmountFallback } from 'components/Liquidity/hooks/useDependentAmountFallback' import { useCreatePositionDependentAmountFallback } from 'components/Liquidity/hooks/useDependentAmountFallback'
import { DepositState } from 'components/Liquidity/types' import { DepositState } from 'components/Liquidity/types'
...@@ -37,6 +38,8 @@ import { useCheckLpApprovalQuery } from 'uniswap/src/data/apiClients/tradingApi/ ...@@ -37,6 +38,8 @@ import { useCheckLpApprovalQuery } from 'uniswap/src/data/apiClients/tradingApi/
import { useCreateLpPositionCalldataQuery } from 'uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery' import { useCreateLpPositionCalldataQuery } from 'uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery'
import { toSupportedChainId } from 'uniswap/src/features/chains/utils' import { toSupportedChainId } from 'uniswap/src/features/chains/utils'
import { useTransactionGasFee, useUSDCurrencyAmountOfGasFee } from 'uniswap/src/features/gas/hooks' import { useTransactionGasFee, useUSDCurrencyAmountOfGasFee } from 'uniswap/src/features/gas/hooks'
import { FeatureFlags } from 'uniswap/src/features/gating/flags'
import { useFeatureFlag } from 'uniswap/src/features/gating/hooks'
import { getErrorMessageToDisplay, parseErrorMessageTitle } from 'uniswap/src/features/transactions/liquidity/utils' import { getErrorMessageToDisplay, parseErrorMessageTitle } from 'uniswap/src/features/transactions/liquidity/utils'
import { useTransactionSettingsContext } from 'uniswap/src/features/transactions/settings/contexts/TransactionSettingsContext' import { useTransactionSettingsContext } from 'uniswap/src/features/transactions/settings/contexts/TransactionSettingsContext'
import { TransactionStep, TransactionStepType } from 'uniswap/src/features/transactions/swap/types/steps' import { TransactionStep, TransactionStepType } from 'uniswap/src/features/transactions/swap/types/steps'
...@@ -170,6 +173,7 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod ...@@ -170,6 +173,7 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod
const { derivedDepositInfo, depositState } = useDepositContext() const { derivedDepositInfo, depositState } = useDepositContext()
const { priceRangeState, derivedPriceRangeInfo } = usePriceRangeContext() const { priceRangeState, derivedPriceRangeInfo } = usePriceRangeContext()
const swapSettings = useTransactionSettingsContext() const swapSettings = useTransactionSettingsContext()
const v4ZeroSlippageEnabled = useFeatureFlag(FeatureFlags.V40Slippage)
const hasError = Boolean(derivedDepositInfo.error) const hasError = Boolean(derivedDepositInfo.error)
const [hasCreateErrorResponse, setHasCreateErrorResponse] = useState(false) const [hasCreateErrorResponse, setHasCreateErrorResponse] = useState(false)
...@@ -215,6 +219,10 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod ...@@ -215,6 +219,10 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod
approvalCalldata?.gasFeeToken1Approval, approvalCalldata?.gasFeeToken1Approval,
) )
// stopgap measure to prevent overslippage on V4 pools
// TODO: remove this when we can set an upper limit on maxAmounts on protocol level
const forceV4ZeroSlippage = v4ZeroSlippageEnabled && derivedPositionInfo.protocolVersion === ProtocolVersion.V4
const createCalldataQueryParams = useMemo(() => { const createCalldataQueryParams = useMemo(() => {
return generateCreateCalldataQueryParams({ return generateCreateCalldataQueryParams({
account, account,
...@@ -225,6 +233,7 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod ...@@ -225,6 +233,7 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod
derivedPriceRangeInfo, derivedPriceRangeInfo,
derivedDepositInfo, derivedDepositInfo,
independentField: depositState.exactField, independentField: depositState.exactField,
slippageTolerance: forceV4ZeroSlippage ? 0 : undefined,
}) })
}, [ }, [
account, account,
...@@ -235,6 +244,7 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod ...@@ -235,6 +244,7 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod
positionState, positionState,
priceRangeState, priceRangeState,
depositState.exactField, depositState.exactField,
forceV4ZeroSlippage,
]) ])
const isUserCommittedToCreate = const isUserCommittedToCreate =
......
...@@ -1004,6 +1004,7 @@ export function generateCreateCalldataQueryParams({ ...@@ -1004,6 +1004,7 @@ export function generateCreateCalldataQueryParams({
derivedPriceRangeInfo, derivedPriceRangeInfo,
derivedDepositInfo, derivedDepositInfo,
independentField, independentField,
slippageTolerance,
}: { }: {
account?: AccountMeta account?: AccountMeta
approvalCalldata?: CheckApprovalLPResponse approvalCalldata?: CheckApprovalLPResponse
...@@ -1013,6 +1014,7 @@ export function generateCreateCalldataQueryParams({ ...@@ -1013,6 +1014,7 @@ export function generateCreateCalldataQueryParams({
derivedPriceRangeInfo: PriceRangeInfo derivedPriceRangeInfo: PriceRangeInfo
derivedDepositInfo: DepositInfo derivedDepositInfo: DepositInfo
independentField: PositionField independentField: PositionField
slippageTolerance?: number
}): CreateLPPositionRequest | undefined { }): CreateLPPositionRequest | undefined {
const apiProtocolItems = getProtocolItems(positionState.protocolVersion) const apiProtocolItems = getProtocolItems(positionState.protocolVersion)
const currencies = derivedPositionInfo.currencies const currencies = derivedPositionInfo.currencies
...@@ -1065,6 +1067,7 @@ export function generateCreateCalldataQueryParams({ ...@@ -1065,6 +1067,7 @@ export function generateCreateCalldataQueryParams({
independentAmount: independentAmount?.quotient.toString(), independentAmount: independentAmount?.quotient.toString(),
independentToken, independentToken,
defaultDependentAmount: dependentAmount?.quotient.toString(), defaultDependentAmount: dependentAmount?.quotient.toString(),
slippageTolerance,
position: { position: {
pool: { pool: {
token0: getCurrencyAddressForTradingApi(currencyAmounts[token0Index]?.currency), token0: getCurrencyAddressForTradingApi(currencyAmounts[token0Index]?.currency),
...@@ -1123,6 +1126,7 @@ export function generateCreateCalldataQueryParams({ ...@@ -1123,6 +1126,7 @@ export function generateCreateCalldataQueryParams({
independentToken, independentToken,
initialDependentAmount: initialPrice && dependentAmount?.quotient?.toString(), // only set this if there is an initialPrice initialDependentAmount: initialPrice && dependentAmount?.quotient?.toString(), // only set this if there is an initialPrice
initialPrice, initialPrice,
slippageTolerance,
position: { position: {
tickLower, tickLower,
tickUpper, tickUpper,
......
...@@ -64,6 +64,7 @@ export enum FeatureFlags { ...@@ -64,6 +64,7 @@ export enum FeatureFlags {
UniswapXSyntheticQuote, UniswapXSyntheticQuote,
UniswapXv2, UniswapXv2,
UniversalSwap, UniversalSwap,
V40Slippage,
} }
/* eslint-enable @typescript-eslint/prefer-enum-initializers */ /* eslint-enable @typescript-eslint/prefer-enum-initializers */
...@@ -111,6 +112,7 @@ export const WEB_FEATURE_FLAG_NAMES = new Map<FeatureFlags, string>([ ...@@ -111,6 +112,7 @@ export const WEB_FEATURE_FLAG_NAMES = new Map<FeatureFlags, string>([
[FeatureFlags.UniswapXSyntheticQuote, 'uniswapx_synthetic_quote'], [FeatureFlags.UniswapXSyntheticQuote, 'uniswapx_synthetic_quote'],
[FeatureFlags.UniswapXv2, 'uniswapx_v2'], [FeatureFlags.UniswapXv2, 'uniswapx_v2'],
[FeatureFlags.UniversalSwap, 'universal_swap'], [FeatureFlags.UniversalSwap, 'universal_swap'],
[FeatureFlags.V40Slippage, 'v4_0_slippage'],
]) ])
// These names must match the gate name on statsig // These names must match the gate name on statsig
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment