ci(release): publish latest release

parent 9de3b729
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmQ2oCvxsKb6KLE7XeR4ppyZWhiAsEAMwtXta9Gwtvptnx` - CIDv0: `QmU2prusDiAfiySsHU8tcVbFwcrvSXdEDBVbvyzkpYKEUH`
- CIDv1: `bafybeiazesdn7jujaopqkz3nwemsmtbdp4fcxvjv75cevqgm3fhe65nwdu` - CIDv1: `bafybeicususuyvytbxxpmjbk7ustwesnzwekzn4fs3argdhmr3d3p2t2mi`
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,68 +10,10 @@ You can also access the Uniswap Interface from an IPFS gateway. ...@@ -10,68 +10,10 @@ 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://bafybeiazesdn7jujaopqkz3nwemsmtbdp4fcxvjv75cevqgm3fhe65nwdu.ipfs.dweb.link/ - https://bafybeicususuyvytbxxpmjbk7ustwesnzwekzn4fs3argdhmr3d3p2t2mi.ipfs.dweb.link/
- https://bafybeiazesdn7jujaopqkz3nwemsmtbdp4fcxvjv75cevqgm3fhe65nwdu.ipfs.cf-ipfs.com/ - https://bafybeicususuyvytbxxpmjbk7ustwesnzwekzn4fs3argdhmr3d3p2t2mi.ipfs.cf-ipfs.com/
- [ipfs://QmQ2oCvxsKb6KLE7XeR4ppyZWhiAsEAMwtXta9Gwtvptnx/](ipfs://QmQ2oCvxsKb6KLE7XeR4ppyZWhiAsEAMwtXta9Gwtvptnx/) - [ipfs://QmU2prusDiAfiySsHU8tcVbFwcrvSXdEDBVbvyzkpYKEUH/](ipfs://QmU2prusDiAfiySsHU8tcVbFwcrvSXdEDBVbvyzkpYKEUH/)
## 5.34.0 (2024-06-12) ### 5.34.1 (2024-06-13)
### Features
* **web:** [multichain] 4070 add chain approval to swap execution flow (#8284) f645d37
* **web:** [multichain] 4101 update chain id in swap and limit context (#8363) 83cf952
* **web:** [multichain] 4121 add switch chain to send execution flow (#8060) a40162b
* **web:** [multichain] 4127 fallback to gql (token balances) when chain is not synced (#8059) 9848242
* **web:** 4194 use correct native currency in send (#8446) dbff9f3
* **web:** 4194 use correct native currency in swap (#8448) 27a34cd
* **web:** 4250 - add UniverseChainInfo and UniverseChainId types (#8632) 5c6208a
* **web:** 4250 - create UNIVERSE_CHAIN_INFO and mainnet property (#8633) db60dc7
* **web:** 4250 - move RPCType and DEFAULT_NATIVE_ADDRESS to uniswap pkg (#8634) f578d39
* **web:** 4250 - pull all chain info from universe (#8643) d76fbf2
* **web:** 4250 - use mainnet from UniverseChainInfo on wallet (#8636) 2161df6
* **web:** 4250 - use mainnet from UniverseChainInfo on web (#8635) 2864084
* **web:** Add base to supported moonpay chains (#8805) d06d5cb
* **web:** add infringing LV nft collections (#8719) 095e89c
* **web:** Add Moonpay deeplink (#8806) 81e6971
* **web:** add quoteId to Xv2 rfq POST (#8909) 54a936b
* **web:** add unauthenticated FOR transaction fetcher to uniswap package (#8587) 3a6ccfe
* **web:** adding zora (#8711) e99544c
* **web:** FOR - share token picker button (#8741) 3048ad2
* **web:** migrate off direct console logging (#8334) e5f9873
* **web:** move basic sharable ForAggregator API calls to uniswap package (#8553) fa54d49
* **web:** move Pill component to shared uniswap package (#8701) 4806ede
* **web:** Refreshed nav "Get Started" modal (#8642) 6a0e15d
* **web:** Refreshed nav better app layout (#8625) 4b23b54
* **web:** Refreshed nav chain selector dropdown (#8627) b5d092c
* **web:** Refreshed nav company menu dropdown (#8641) b7b2244
* **web:** Refreshed nav preferences menu and theme toggle (#8628) 9d43d7d
* **web:** Refreshed nav prep work, organize files (#8622) 9c8b5f7
* **web:** Replace direct thegraph queries with new BE queries (#8626) 5081b54
* **web:** share country picker component for FOR (#8702) 3800c04
### Bug Fixes
* **web:** [multichain] token selector in TDP should use connected chain (#8963) 6ef7dbc
* **web:** AccountDrawer still showing in in-app browser on scroll when closed (#8623) ae322cb
* **web:** can't switch to mainnet if first pageload has chain query param (#8684) d2e3bfb
* **web:** connector may be undefined on landing page (#8822) 9323bd4
* **web:** dialog button should no longer be disabled (#8849) 56285db
* **web:** don't disable swap settings for unconnected chains (#8651) 141b089
* **web:** fix missing translation, despite matching the library doesnt work with fee.bestForStable (#8629) 9470c59
* **web:** liquidity translations (#8821) 4744be8
* **web:** Pass account to send in transferInfo - staging (#8902) 786dead
* **web:** patch wagmi to fix MM bug (#8841) 834a26c
* **web:** Remove duplicate app promo banners (#8646) b35c3c1
* **web:** removing zora from network selector when feature flag is off (#8960) e1eb12d
* **web:** update useOnClickOutside to handle tooltips (#8704) 3697c7e
* **web:** use address, chainId, from useAccount instead of web3-react (#8513) 26bc9fb
* **web:** use orders text in CancelLimitDialog (#8706) 3fb4151
### Continuous Integration
* **web:** update sitemaps f972a73
web/5.34.0 web/5.34.1
\ No newline at end of file \ No newline at end of file
...@@ -561,11 +561,8 @@ function parseRemoteActivity( ...@@ -561,11 +561,8 @@ function parseRemoteActivity(
) )
return { ...defaultFields, ...parsedFields } return { ...defaultFields, ...parsedFields }
} catch (e) { } catch (e) {
logger.error(e, { logger.debug('parseRemote', 'parseRemoteActivity', 'Failed to parse remote activity', {
tags: { error: e,
file: 'parseRemote',
function: 'parseRemoteActivity',
},
extra: { assetActivity }, extra: { assetActivity },
}) })
return undefined return undefined
......
...@@ -201,12 +201,7 @@ async function cancelMultipleUniswapXOrders({ ...@@ -201,12 +201,7 @@ async function cancelMultipleUniswapXOrders({
return transactions return transactions
} catch (error) { } catch (error) {
if (!didUserReject(error)) { if (!didUserReject(error)) {
logger.error(error, { logger.debug('utils', 'cancelMultipleUniswapXOrders', 'Failed to cancel multiple orders', { error, orders })
tags: {
file: 'utils',
function: 'cancelMultipleUniswapXOrders',
},
})
} }
return undefined return undefined
} }
...@@ -228,13 +223,10 @@ async function getCancelMultipleUniswapXOrdersTransaction( ...@@ -228,13 +223,10 @@ async function getCancelMultipleUniswapXOrdersTransaction(
chainId, chainId,
} }
} catch (error) { } catch (error) {
const wrappedError = new Error('could not populate cancel transaction') const wrappedError = new Error('could not populate cancel transaction', { cause: error })
wrappedError.cause = error logger.debug('utils', 'getCancelMultipleUniswapXOrdersTransaction', wrappedError.message, {
logger.error(wrappedError, { error: wrappedError,
tags: { orders,
file: 'utils',
function: 'getCancelMultipleUniswapXOrdersTransaction',
},
}) })
return undefined return undefined
} }
......
...@@ -33,9 +33,7 @@ async function fetchChunk(multicall: UniswapInterfaceMulticall, chunk: Call[]): ...@@ -33,9 +33,7 @@ async function fetchChunk(multicall: UniswapInterfaceMulticall, chunk: Call[]):
]).then(([c0, c1]) => [...c0, ...c1]) ]).then(([c0, c1]) => [...c0, ...c1])
} }
} }
logger.error(error, { logger.debug('getTokensAsync', 'fetchChunk', 'Error fetching chunk', { error, extra: { chunk } })
tags: { file: 'getTokensAsync', function: 'fetchChunk' },
})
throw error throw error
} }
} }
...@@ -58,13 +56,7 @@ function tryParseToken(address: string, chainId: ChainId, data: CallResult[]) { ...@@ -58,13 +56,7 @@ function tryParseToken(address: string, chainId: ChainId, data: CallResult[]) {
return new Token(chainId, address, decimals, symbol, name) return new Token(chainId, address, decimals, symbol, name)
} catch (error) { } catch (error) {
logger.error(error, { logger.debug('getTokensAsync', 'tryParseToken', 'Failed to parse token', { error, address, chainId })
tags: {
file: 'getTokensAsync',
function: 'tryParseToken',
},
extra: { address, chainId },
})
return undefined return undefined
} }
} }
......
...@@ -144,7 +144,7 @@ export default function useMultiChainPositions(account: string, chains = DEFAULT ...@@ -144,7 +144,7 @@ export default function useMultiChainPositions(account: string, chains = DEFAULT
const slot0 = poolInterface.decodeFunctionResult('slot0', result.returnData) const slot0 = poolInterface.decodeFunctionResult('slot0', result.returnData)
acc.push(createPositionInfo(account, chainId, positionDetails[i], slot0, ...poolPairs[i])) acc.push(createPositionInfo(account, chainId, positionDetails[i], slot0, ...poolPairs[i]))
} else { } else {
logger.warn('useMultiChainPositions', 'fetchPositionInfo', 'slot0 fetch errored', result) logger.debug('useMultiChainPositions', 'fetchPositionInfo', 'slot0 fetch errored', result)
} }
return acc return acc
}, []) }, [])
...@@ -172,14 +172,10 @@ export default function useMultiChainPositions(account: string, chains = DEFAULT ...@@ -172,14 +172,10 @@ export default function useMultiChainPositions(account: string, chains = DEFAULT
const postionDetails = await fetchPositionDetails(pm, positionIds) const postionDetails = await fetchPositionDetails(pm, positionIds)
return fetchPositionInfo(postionDetails, chainId, multicall) return fetchPositionInfo(postionDetails, chainId, multicall)
} catch (error) { } catch (error) {
const wrappedError = new Error('Failed to fetch positions for chain') const wrappedError = new Error('Failed to fetch positions for chain', { cause: error })
wrappedError.cause = error logger.debug('useMultiChainPositions', 'fetchPositionsForChain', wrappedError.message, {
logger.error(wrappedError, { error: wrappedError,
tags: { chainId,
file: 'useMultiChainPositions',
function: 'fetchPositionsForChain',
},
extra: { chainId },
}) })
return [] return []
} }
......
...@@ -99,12 +99,7 @@ export function useConfirmModalState({ ...@@ -99,12 +99,7 @@ export function useConfirmModalState({
if (didUserReject(e)) { if (didUserReject(e)) {
return return
} }
logger.error(e, { logger.warn('useConfirmModalState', 'catchUserReject', 'Failed to wrap', { error: e, trade })
tags: {
file: 'useConfirmModalState',
function: 'useConfirmModalState',
},
})
setApprovalError(errorType) setApprovalError(errorType)
} }
......
...@@ -32,15 +32,7 @@ export function ConnectionProvider({ children }: PropsWithChildren) { ...@@ -32,15 +32,7 @@ export function ConnectionProvider({ children }: PropsWithChildren) {
} }
// TODO(WEB-1859): re-add special treatment for already-pending injected errors & move debug to after didUserReject() check // TODO(WEB-1859): re-add special treatment for already-pending injected errors & move debug to after didUserReject() check
logger.error(error, { logger.warn('useConnect', 'ConnectionProvider', `Connection failed: ${connector.name}`)
tags: {
file: 'useConnect',
function: 'ConnectionProvider',
},
extra: {
connector: connector.name,
},
})
sendAnalyticsEvent(InterfaceEventName.WALLET_CONNECTED, { sendAnalyticsEvent(InterfaceEventName.WALLET_CONNECTED, {
result: WalletConnectionResult.FAILED, result: WalletConnectionResult.FAILED,
......
...@@ -74,13 +74,11 @@ export function useContract<T extends Contract = Contract>( ...@@ -74,13 +74,11 @@ export function useContract<T extends Contract = Contract>(
try { try {
return getContract(address, ABI, provider, withSignerIfPossible && account.address ? account.address : undefined) return getContract(address, ABI, provider, withSignerIfPossible && account.address ? account.address : undefined)
} catch (error) { } catch (error) {
const wrappedError = new Error('failed to get contract') const wrappedError = new Error('failed to get contract', { cause: error })
wrappedError.cause = error logger.warn('useContract', 'useContract', wrappedError.message, {
logger.error(wrappedError, { error: wrappedError,
tags: { addressOrAddressMap,
file: 'useContract', address: account.address,
function: 'useContract',
},
}) })
return null return null
} }
...@@ -103,14 +101,8 @@ function useMainnetContract<T extends Contract = Contract>(address: string | und ...@@ -103,14 +101,8 @@ function useMainnetContract<T extends Contract = Contract>(address: string | und
try { try {
return getContract(address, ABI, provider) return getContract(address, ABI, provider)
} catch (error) { } catch (error) {
const wrappedError = new Error('failed to get mainnet contract') const wrappedError = new Error('failed to get mainnet contract', { cause: error })
wrappedError.cause = error logger.warn('useContract', 'useMainnetContract', wrappedError.message, wrappedError)
logger.error(wrappedError, {
tags: {
file: 'useContract',
function: 'useMainnetContract',
},
})
return null return null
} }
}, [isMainnet, contract, address, ABI]) as T }, [isMainnet, contract, address, ABI]) as T
......
...@@ -26,15 +26,7 @@ export function useFetchListCallback(): (listUrl: string, skipValidation?: boole ...@@ -26,15 +26,7 @@ export function useFetchListCallback(): (listUrl: string, skipValidation?: boole
return tokenList return tokenList
}) })
.catch((error) => { .catch((error) => {
logger.error(error, { logger.debug('useFetchListCallback', 'useFetchListCallback', 'Failed to fetch list', { error, listUrl })
tags: {
file: 'useFetchListCallback',
function: 'useFetchListCallback',
},
extra: {
listUrl,
},
})
dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message })) dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message }))
throw error throw error
}) })
......
...@@ -84,7 +84,7 @@ async function getSwapTaxes( ...@@ -84,7 +84,7 @@ async function getSwapTaxes(
}) })
} }
} catch (e) { } catch (e) {
logger.debug('useSwapTaxes', 'getSwapTaxes', 'Failed to get swap taxes for token(s):', addresses, e) logger.warn('useSwapTaxes', 'getSwapTaxes', 'Failed to get swap taxes for token(s):', addresses, e)
} }
const inputTax = (inputTokenAddress ? FEE_CACHE[inputTokenAddress]?.sellTax : ZERO_PERCENT) ?? ZERO_PERCENT const inputTax = (inputTokenAddress ? FEE_CACHE[inputTokenAddress]?.sellTax : ZERO_PERCENT) ?? ZERO_PERCENT
......
...@@ -48,7 +48,10 @@ export function useSwitchChain() { ...@@ -48,7 +48,10 @@ export function useSwitchChain() {
setSearchParams(searchParams, { replace: true }) setSearchParams(searchParams, { replace: true })
} }
} catch (error) { } catch (error) {
logger.warn('useSwitchChain', 'useSwitchChain', 'Failed to set SearchParams', error) logger.warn('useSwitchChain', 'useSwitchChain', 'Failed to set SearchParams', {
error,
searchParams,
})
} }
}, },
onSettled(_, error) { onSettled(_, error) {
......
...@@ -113,14 +113,8 @@ export function useUniversalRouterSwapCallback( ...@@ -113,14 +113,8 @@ export function useUniversalRouterSwapCallback(
txRequest: tx, txRequest: tx,
isAutoSlippage, isAutoSlippage,
}) })
const wrappedError = new Error('gas error') const wrappedError = new Error('gas error', { cause: gasError })
wrappedError.cause = gasError logger.warn('useUniversalRouter', 'useUniversalRouterSwapCallback', 'Failed to estimate gas', wrappedError)
logger.error(wrappedError, {
tags: {
file: 'useUniversalRouter',
function: 'useUniversalRouterSwapCallback',
},
})
throw new GasEstimationError() throw new GasEstimationError()
} }
......
...@@ -164,12 +164,7 @@ Please file a bug detailing how this happened - https://github.com/Uniswap/inter ...@@ -164,12 +164,7 @@ Please file a bug detailing how this happened - https://github.com/Uniswap/inter
}) })
return txReceipt.hash return txReceipt.hash
} catch (error) { } catch (error) {
logger.error(error, { logger.warn('useWrapCallback', 'useWrapCallback', 'Failed to wrap', error)
tags: {
file: 'useWrapCallback',
function: 'useWrapCallback',
},
})
throw error throw error
} }
}) })
......
...@@ -72,19 +72,14 @@ export function useApproval( ...@@ -72,19 +72,14 @@ export function useApproval(
const approve = useCallback(async () => { const approve = useCallback(async () => {
function logFailure(error: Error | string): undefined { function logFailure(error: Error | string): undefined {
if (typeof error === 'string') { if (typeof error === 'string') {
logger.warn('useApproval', 'approve', error) logger.debug('useApproval', 'approve', error)
} else { } else {
logger.error(error, { logger.debug('useApproval', 'approve', 'Failed to approve amount', {
tags: { error,
file: 'useApproval', tokenChain: token?.chainId,
function: 'approve', token: token?.address,
}, chainId,
extra: { amountToApprove: amountToApprove?.toFixed(),
tokenChain: token?.chainId,
token: token?.address,
chainId,
amountToApprove: amountToApprove?.toFixed(),
},
}) })
} }
......
...@@ -85,7 +85,7 @@ export default class AppJsonRpcProvider extends ConfiguredJsonRpcProvider { ...@@ -85,7 +85,7 @@ export default class AppJsonRpcProvider extends ConfiguredJsonRpcProvider {
controller.onSuccess() controller.onSuccess()
return result return result
} catch (error) { } catch (error) {
logger.debug('AppJsonRpcProvider', 'perform', 'rpc action failed', error) logger.warn('AppJsonRpcProvider', 'perform', 'rpc action failed', error)
controller.onError() controller.onError()
} }
} }
......
...@@ -116,7 +116,7 @@ export function usePollPendingOrders(onActivityUpdate: OnActivityUpdate) { ...@@ -116,7 +116,7 @@ export function usePollPendingOrders(onActivityUpdate: OnActivityUpdate) {
}) })
}) })
} catch (e) { } catch (e) {
logger.debug('orders', 'usePollPendingOrders', e) logger.debug('usePollPendingOrders', 'getOrderStatuses', 'Failed to fetch order statuses', e)
} }
setCurrentDelay((currentDelay) => Math.min(currentDelay * 2, ms('30s'))) setCurrentDelay((currentDelay) => Math.min(currentDelay * 2, ms('30s')))
timeout = setTimeout(getOrderStatuses, currentDelay) timeout = setTimeout(getOrderStatuses, currentDelay)
......
...@@ -65,12 +65,7 @@ export function useFiatOnrampAvailability(shouldCheck: boolean, callback?: () => ...@@ -65,12 +65,7 @@ export function useFiatOnrampAvailability(shouldCheck: boolean, callback?: () =>
callback() callback()
} }
} catch (e) { } catch (e) {
logger.error(e, { logger.warn('useFiatOnrampAvailability', 'checkAvailability', 'Error fetching FOR availability', e)
tags: {
file: 'application/hooks',
function: 'useFiatOnrampAvailability',
},
})
if (stale) { if (stale) {
return return
} }
......
...@@ -40,12 +40,7 @@ function fetchClaimMapping(): Promise<ClaimAddressMapping> { ...@@ -40,12 +40,7 @@ function fetchClaimMapping(): Promise<ClaimAddressMapping> {
) )
.then((res) => res.json()) .then((res) => res.json())
.catch((error) => { .catch((error) => {
logger.error(error, { logger.warn('claim/hooks', 'fetchClaimMapping', 'Claim mapping fetch failed', error)
tags: {
file: 'claim/hooks',
function: 'fetchClaimMapping',
},
})
FETCH_CLAIM_MAPPING_PROMISE = null FETCH_CLAIM_MAPPING_PROMISE = null
})) }))
) )
...@@ -60,13 +55,7 @@ function fetchClaimFile(key: string): Promise<{ [address: string]: UserClaimData ...@@ -60,13 +55,7 @@ function fetchClaimFile(key: string): Promise<{ [address: string]: UserClaimData
) )
.then((res) => res.json()) .then((res) => res.json())
.catch((error) => { .catch((error) => {
logger.error(error, { logger.warn('claim/hooks', 'fetchClaimFile', 'Claim file fetch failed', error)
tags: {
file: 'claim/hooks',
function: 'fetchClaimFile',
},
extra: { address: key },
})
delete FETCH_CLAIM_FILE_PROMISES[key] delete FETCH_CLAIM_FILE_PROMISES[key]
})) }))
) )
......
...@@ -53,12 +53,7 @@ function useCombinedTokenMapFromUrls(urls: string[] | undefined): TokenAddressMa ...@@ -53,12 +53,7 @@ function useCombinedTokenMapFromUrls(urls: string[] | undefined): TokenAddressMa
try { try {
return combineMaps(allTokens, tokensToChainTokenMap(current)) return combineMaps(allTokens, tokensToChainTokenMap(current))
} catch (error) { } catch (error) {
logger.error(error, { logger.warn('lists/hooks', 'useCombinedTokenMapFromUrls', 'Failed to combine tokens', error)
tags: {
file: 'lists/hooks',
function: 'useCombinedTokenMapFromUrls',
},
})
return allTokens return allTokens
} }
}, {}) }, {})
......
...@@ -79,13 +79,7 @@ export default function Updater(): null { ...@@ -79,13 +79,7 @@ export default function Updater(): null {
) )
}) })
.catch((error) => { .catch((error) => {
logger.error(error, { logger.warn('logs/updater', 'Updater#useEffect', 'Failed to fetch logs', { error, filter })
tags: {
file: 'logs/updater',
function: 'Updater#useEffect',
},
extra: { filter },
})
dispatch( dispatch(
fetchedLogsError({ fetchedLogsError({
chainId, chainId,
......
...@@ -160,14 +160,11 @@ export function useDerivedMintInfo( ...@@ -160,14 +160,11 @@ export function useDerivedMintInfo(
try { try {
return pair.getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) return pair.getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB)
} catch (error) { } catch (error) {
logger.error( logger.warn(
'mint/hooks',
'useDerivedMintInfo',
`Error getLiquidityMinted: ${error}. Total supply: ${totalSupply}, tokenAmountA: ${tokenAmountA}, tokenAmountB: ${tokenAmountB}`, `Error getLiquidityMinted: ${error}. Total supply: ${totalSupply}, tokenAmountA: ${tokenAmountA}, tokenAmountB: ${tokenAmountB}`,
{ { error }
tags: {
file: 'mint/hooks',
function: 'useDerivedMintInfo',
},
}
) )
return undefined return undefined
} }
......
...@@ -89,12 +89,7 @@ export function computeRoutes(args: GetQuoteArgs, routes: ClassicQuoteData['rout ...@@ -89,12 +89,7 @@ export function computeRoutes(args: GetQuoteArgs, routes: ClassicQuoteData['rout
} }
}) })
} catch (e) { } catch (e) {
logger.error(e, { logger.warn('routing/utils', 'computeRoutes', 'Failed to compute routes', { error: e })
tags: {
file: 'routing/utils',
function: 'computeRoutes',
},
})
return return
} }
} }
......
...@@ -151,12 +151,7 @@ export function useStakingInfo(pairToFilterBy?: Pair | null): StakingInfo[] { ...@@ -151,12 +151,7 @@ export function useStakingInfo(pairToFilterBy?: Pair | null): StakingInfo[] {
rewardRateState.error || rewardRateState.error ||
periodFinishState.error periodFinishState.error
) { ) {
logger.error(new Error('Failed to load staking rewards info'), { logger.warn('stake/hooks', 'useStakingInfo', 'Failed to load staking rewards info')
tags: {
file: 'stake/hooks',
function: 'useStakingInfo',
},
})
return memo return memo
} }
......
...@@ -7,12 +7,7 @@ export function unregister() { ...@@ -7,12 +7,7 @@ export function unregister() {
registration.unregister() registration.unregister()
}) })
.catch((error) => { .catch((error) => {
logger.error(error, { logger.warn('serviceWorker', 'unregister', 'Service worker unregister failed', error)
tags: {
file: 'serviceWorker',
function: 'unregister',
},
})
}) })
} }
} }
...@@ -60,7 +60,7 @@ export async function signTypedData( ...@@ -60,7 +60,7 @@ export async function signTypedData(
'signing', 'signing',
'signTypedData', 'signTypedData',
'signTypedData: wallet does not implement EIP-712, falling back to eth_sign', 'signTypedData: wallet does not implement EIP-712, falling back to eth_sign',
error.message error
) )
const hash = _TypedDataEncoder.hash(populated.domain, types, populated.value) const hash = _TypedDataEncoder.hash(populated.domain, types, populated.value)
return await signer.provider.send('eth_sign', [address, hash]) return await signer.provider.send('eth_sign', [address, hash])
......
...@@ -71,13 +71,12 @@ export function swapErrorToUserReadableMessage(error: any): string { ...@@ -71,13 +71,12 @@ export function swapErrorToUserReadableMessage(error: any): string {
return t`The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.` return t`The output token cannot be transferred. There may be an issue with the output token. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3.`
default: default:
if (reason?.indexOf('undefined is not an object') !== -1) { if (reason?.indexOf('undefined is not an object') !== -1) {
logger.error(error, { logger.warn(
tags: { 'swapErrorToUserReadableMessage',
file: 'swapErrorToUserReadableMessage', 'swapErrorToUserReadableMessage',
function: 'swapErrorToUserReadableMessage', 'Undefined object error',
}, reason
extra: { reason }, )
})
return t`An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee-on-transfer and rebase tokens are incompatible with Uniswap V3.` return t`An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee-on-transfer and rebase tokens are incompatible with Uniswap V3.`
} }
return t( return t(
......
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