Skip to content

Commit 947fedc

Browse files
ci(release): publish latest release
1 parent a2eef1e commit 947fedc

File tree

3 files changed

+40
-186
lines changed

3 files changed

+40
-186
lines changed

RELEASE

Lines changed: 5 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
IPFS hash of the deployment:
2-
- CIDv0: `QmYHj3rUHGFTPrskT4YbeyXkrmhsrMBKM4KsYVavcLpYW5`
3-
- CIDv1: `bafybeiet2uenzqsau5dmg6yzpcufisgiqzghzndejd7ox4ivnbuzxmyidi`
2+
- CIDv0: `QmVSBSXs5YKGxoQRMTooop6QXxPSEYapNhs6AoRXF9iEjf`
3+
- CIDv1: `bafybeidjnr27fk4owtjmksfokdkfiw7uz7iolqaj22ylbyjwf3jmlvfpuy`
44

55
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
66

@@ -10,99 +10,9 @@ You can also access the Uniswap Interface from an IPFS gateway.
1010
Your Uniswap settings are never remembered across different URLs.
1111

1212
IPFS gateways:
13-
- https://bafybeiet2uenzqsau5dmg6yzpcufisgiqzghzndejd7ox4ivnbuzxmyidi.ipfs.dweb.link/
14-
- [ipfs://QmYHj3rUHGFTPrskT4YbeyXkrmhsrMBKM4KsYVavcLpYW5/](ipfs://QmYHj3rUHGFTPrskT4YbeyXkrmhsrMBKM4KsYVavcLpYW5/)
13+
- https://bafybeidjnr27fk4owtjmksfokdkfiw7uz7iolqaj22ylbyjwf3jmlvfpuy.ipfs.dweb.link/
14+
- [ipfs://QmVSBSXs5YKGxoQRMTooop6QXxPSEYapNhs6AoRXF9iEjf/](ipfs://QmVSBSXs5YKGxoQRMTooop6QXxPSEYapNhs6AoRXF9iEjf/)
1515

16-
## 5.104.0 (2025-07-31)
17-
18-
19-
### Features
20-
21-
* **web:** [lp] sort fee tiers by tvl (#21598) 8b6116d
22-
* **web:** abstracted wallet connector hooks (#21168) c4a4198
23-
* **web:** add MultiBlockchainAddressDisplay (#21477) 8f07ba1
24-
* **web:** add svmAccountDetails (#21473) 8ac1623
25-
* **web:** Add TWIT.json (#21871) 3ad0247
26-
* **web:** handle solana disconnect (#21572) 67449d8
27-
* **web:** implement multi-plaftorm connector deduplication util (#21167) 327d7f5
28-
* **web:** implement WalletConnectorMeta utils (#21166) 9f3996d
29-
* **web:** improve redux hydration check saga (#19552) c23dd31
30-
* **web:** jup execute endpoint (#21580) 15b3110
31-
* **web:** jup order endpoint (#21574) 52f03ba
32-
* **web:** prepopulate onramp for moonpay ads (#21834) 2ecbaae
33-
* **web:** replace old WalletConnectorOption with new (#21361) ff1845e
34-
* **web:** solanaSwapSaga (#21581) 6efb6e1
35-
* **web:** use git tag as version (#22063) 8f86019
36-
* **web:** use new WalletConnectorOptions with new hooks (#21389) 8e60136
37-
* **web:** wallet connector option should use WalletConnectorMeta (#21314) bf69053
38-
39-
40-
### Bug Fixes
41-
42-
* **web:** [lp] default increase position currency fields (#21728) 1fe477a
43-
* **web:** [lp] dynamic fee in default fee tiers (#21723) 829560e
44-
* **web:** [lp] enable create fee tier with hook (#21727) 68cf2a2
45-
* **web:** [lp] improve positions page performance (#21750) 5e5edc4
46-
* **web:** [lp] reset defaultFeeTierSelected when feeTierData changes (#21612) 113e8f0
47-
* **web:** 07 28 fix web pool fee can be 0 for dynamic pools staging (#22114) ce65c4f
48-
* **web:** add blast API URL to CSP (#21705) 44d0509
49-
* **web:** align version in settings (#21842) 712e9c7
50-
* **web:** catch vite preload errors (#22029) 03935e0
51-
* **web:** eslint rule useAccount fix (#21804) 70d4d05
52-
* **web:** fix blockaid logo size (#21858) ea94fc8
53-
* **web:** fix chart rendering loop (#21913) c99540d
54-
* **web:** fix storybook tests (#19733) fbc8edb
55-
* **web:** fix wallet connection analytics (#21765) 6b905f5
56-
* **web:** handle binance wallet app browser wagmi injected connector (#21900) 55a8ca2
57-
* **web:** mobile browser injected wallet (#22117) 44992f2
58-
* **web:** need to account from to send function (#22217) f424d9c
59-
* **web:** prevent testnet mode from breaking native token logos (#21848) 7f3378f
60-
* **web:** prevent token unwrapping for v4 on the explore page (#22047) b5ac039
61-
* **web:** remove conditional hook calls (#22025) 185f349
62-
* **web:** remove data: from scriptSrc in CSP (#21788) facf675
63-
* **web:** theme settings (#21856) d913334
64-
* **web:** unblock solana explore (#21866) 01785b8
65-
* **web:** Update Order routing popup to show Dynamic instead of flag (#21854) b7a52a3
66-
* **web:** update rendering for mini-p (#21966) 17dfffb
67-
* **web:** update the create position review modal for one sided positions (#21655) fa21880
68-
* **web:** use icon override map for wallet connector icons (#21674) c07d2b2
69-
* **web:** use native token for increase calldata query (#22169) a6fabfc
70-
* **web:** vite smoketest - wait for UI element instead of network idle (#21602) f31d52b
71-
72-
73-
### Continuous Integration
74-
75-
* **web:** update sitemaps c57b17d
76-
77-
78-
### Styles
79-
80-
* **web:** fix hover states on connected wallet and mini-portfolio rail (#21914) 4e4e3e1
81-
* **web:** update tdp description length from 4 to 6 rows (#21875) 7f1b530
82-
83-
84-
### Code Refactoring
85-
86-
* **web:** align types better with Uniswap types by migrating info -> typeInfo (#21498) ba66ce8
87-
* **web:** break wallet connection logging/analytics/ui/state into wrappers around base functionality (#21792) e694ba8
88-
* **web:** decouple evm connector chain ID from popup activity (#21582) a4a8905
89-
* **web:** delete web transaction reducer and update code, types and tests (#21812) 5d71ab0
90-
* **web:** type RPC_PROVIDERS as EVM only (#21850) efabaa4
91-
* **web:** update web's transaction reducer structure to use the same structure as Uniswap's transaction reducer for easier migration, and add migration (#21496) 246c2ac
92-
* **web:** use usePortfolioBalances to fetch token data from gql or rest (#21971) 0a274e0
93-
94-
95-
### Tests
96-
97-
* **web:** [lp] create - custom fee tier (#21670) 6a31f2b
98-
* **web:** [lp] generateCreateCalldataQueryParams and generateAddLiquidityApprovalParams (#21863) da7d009
99-
* **web:** [lp] generateCreatePositionTxRequest (#21865) 811c197
100-
* **web:** [lp] migrate v3 e2e (#21654) 532a7cf
101-
* **web:** [lp] unit tests for getDependentAmountFromV2Pair, getDependentAmountFromV3Position, getDependentAmountFromV4Position (#21868) ca98497
102-
* **web:** [lp] unit tests for useDepositInfo (#21885) 6c3ef5c
103-
* **web:** fix a few e2e tests (#22076) ae30666
104-
* **web:** fix formatting for expected ETH balance after successful swap (#21698) c4935e0
105-
* **web:** fix Swap Settings test id (#21658) 40abac2
106-
* **web:** fix swap test for detecting ERC20 balance (#21697) 2f9b3dd
16+
### 5.104.3 (2025-07-31)
10717

10818

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web/5.104.0
1+
web/5.104.3

apps/web/src/state/sagas/transactions/utils.ts

Lines changed: 34 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type { TransactionDetails, TransactionInfo, VitalTxFields } from 'state/t
1111
import { isPendingTx } from 'state/transactions/utils'
1212
import type { InterfaceState } from 'state/webReducer'
1313
import type { SagaGenerator } from 'typed-redux-saga'
14-
import { call, cancel, delay, fork, put, race, select, spawn, take } from 'typed-redux-saga'
14+
import { call, cancel, delay, fork, put, race, select, take } from 'typed-redux-saga'
1515
import { FetchError } from 'uniswap/src/data/apiClients/FetchError'
1616
import { Routing } from 'uniswap/src/data/tradingApi/__generated__'
1717
import { isL2ChainId, isUniverseChainId } from 'uniswap/src/features/chains/utils'
@@ -114,16 +114,7 @@ export interface HandleOnChainStepParams<T extends OnChainTransactionStep = OnCh
114114
onModification?: (response: VitalTxFields) => void | Generator<unknown, void, unknown>
115115
}
116116
export function* handleOnChainStep<T extends OnChainTransactionStep>(params: HandleOnChainStepParams<T>) {
117-
const {
118-
account,
119-
step,
120-
setCurrentStep,
121-
info,
122-
allowDuplicativeTx,
123-
ignoreInterrupt,
124-
onModification,
125-
shouldWaitForConfirmation,
126-
} = params
117+
const { account, step, setCurrentStep, info, allowDuplicativeTx, ignoreInterrupt, onModification } = params
127118
const { chainId } = step.txRequest
128119

129120
addTransactionBreadcrumb({ step, data: { ...info } })
@@ -157,60 +148,48 @@ export function* handleOnChainStep<T extends OnChainTransactionStep>(params: Han
157148
// Trigger UI prompting user to accept
158149
setCurrentStep({ step, accepted: false })
159150

160-
let transaction: InterfaceTransactionDetails
161-
const createTransaction = (hash: string): InterfaceTransactionDetails => ({
162-
id: hash,
163-
from: account.address,
164-
typeInfo: info,
165-
hash,
166-
chainId,
167-
routing: getRoutingForTransaction(info),
168-
transactionOriginType: TransactionOriginType.Internal,
169-
status: TransactionStatus.Pending,
170-
addedTime: Date.now(),
171-
options: {
172-
request: {
173-
to: step.txRequest.to,
174-
from: account.address,
175-
data: step.txRequest.data,
176-
value: step.txRequest.value,
177-
gasLimit: step.txRequest.gasLimit,
178-
gasPrice: step.txRequest.gasPrice,
179-
nonce: step.txRequest.nonce,
180-
chainId: step.txRequest.chainId,
181-
},
182-
},
183-
})
184-
185151
// Prompt wallet to submit transaction
186-
// If should wait for confirmation, we block until the transaction is confirmed
187-
// Otherwise, we submit the transaction and return the hash immediately and spawn a detection task to check for modifications
188-
if (shouldWaitForConfirmation) {
189-
const { hash, data, nonce } = yield* call(submitTransaction, params)
190-
transaction = createTransaction(hash)
191-
192-
if (step.txRequest.data !== data && onModification) {
193-
yield* call(onModification, { hash, data, nonce })
194-
}
195-
} else {
196-
const hash = yield* call(submitTransactionAsync, params)
197-
transaction = createTransaction(hash)
198-
199-
if (onModification) {
200-
yield* spawn(handleOnModificationAsync, { onModification, hash, step })
201-
}
202-
}
152+
const { hash, nonce, data } = yield* call(submitTransaction, params)
203153

204154
// Trigger waiting UI after user accepts
205155
setCurrentStep({ step, accepted: true })
206156

207157
// Add transaction to local state to start polling for status
208-
yield* put(addTransaction(transaction))
158+
yield* put(
159+
addTransaction({
160+
id: hash,
161+
from: account.address,
162+
nonce,
163+
typeInfo: info,
164+
hash,
165+
chainId,
166+
routing: getRoutingForTransaction(info),
167+
transactionOriginType: TransactionOriginType.Internal,
168+
status: TransactionStatus.Pending,
169+
addedTime: Date.now(),
170+
options: {
171+
request: {
172+
to: step.txRequest.to,
173+
from: account.address,
174+
data: step.txRequest.data,
175+
value: step.txRequest.value,
176+
gasLimit: step.txRequest.gasLimit,
177+
gasPrice: step.txRequest.gasPrice,
178+
nonce: step.txRequest.nonce,
179+
chainId: step.txRequest.chainId,
180+
},
181+
},
182+
} satisfies InterfaceTransactionDetails),
183+
)
184+
185+
if (step.txRequest.data !== data && onModification) {
186+
yield* call(onModification, { hash, data, nonce })
187+
}
209188

210189
// If the transaction flow was interrupted while awaiting input, throw an error after input is received
211190
yield* call(throwIfInterrupted)
212191

213-
return yield* handleOnChainConfirmation(params, transaction.hash)
192+
return yield* handleOnChainConfirmation(params, hash)
214193
}
215194

216195
/** Waits for a transaction to complete, or immediately throws if interrupted. */
@@ -240,21 +219,6 @@ function* handleOnChainConfirmation(params: HandleOnChainStepParams, hash: strin
240219
return hash
241220
}
242221

243-
function* handleOnModificationAsync({
244-
onModification,
245-
hash,
246-
step,
247-
}: {
248-
onModification: NonNullable<HandleOnChainStepParams['onModification']>
249-
hash: HexString
250-
step: OnChainTransactionStep
251-
}) {
252-
const { data, nonce } = yield* call(recoverTransactionFromHash, hash, step)
253-
if (step.txRequest.data !== data) {
254-
yield* call(onModification, { hash, data, nonce })
255-
}
256-
}
257-
258222
/** Submits a transaction and handles potential wallet errors */
259223
function* submitTransaction(params: HandleOnChainStepParams): SagaGenerator<VitalTxFields> {
260224
const { account, step } = params
@@ -271,26 +235,6 @@ function* submitTransaction(params: HandleOnChainStepParams): SagaGenerator<Vita
271235
}
272236
}
273237

274-
/** Submits a transaction and handles potential wallet errors */
275-
function* submitTransactionAsync(params: HandleOnChainStepParams): SagaGenerator<HexString> {
276-
const { account, step } = params
277-
const signer = yield* call(getSigner, account.address)
278-
279-
try {
280-
const response = yield* call([signer.provider, 'send'], 'eth_sendTransaction', [
281-
{ from: account.address, ...step.txRequest },
282-
])
283-
284-
if (!isValidHexString(response)) {
285-
throw new TransactionStepFailedError({ message: 'Transaction failed', step })
286-
}
287-
288-
return response
289-
} catch (error) {
290-
throw new TransactionStepFailedError({ message: 'Transaction failed', step })
291-
}
292-
}
293-
294238
/** Polls for transaction details when only hash is known */
295239
function* recoverTransactionFromHash(hash: HexString, step: OnChainTransactionStep): SagaGenerator<VitalTxFields> {
296240
const transaction = yield* pollForTransaction(hash, step.txRequest.chainId)

0 commit comments

Comments
 (0)