diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx index c3accaad1d32..9eabca029fdf 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx @@ -333,7 +333,7 @@ export function Trader(props: TraderProps) { shareText, state: tradeState, }) - }, [tradeState /* update tx dialog only if state changed */]) + }, [tradeState?.type /* update tx dialog only if state changed */]) // #endregion // #region swap callback diff --git a/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts index 50dffd19ff2b..7a7f2e6e3bea 100644 --- a/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/0x/useTradeCallback.ts @@ -2,7 +2,14 @@ import { useCallback, useMemo, useState } from 'react' import stringify from 'json-stable-stringify' import { pick } from 'lodash-unified' import type { TransactionConfig } from 'web3-core' -import { GasOptionConfig, TransactionState, TransactionStateType, useAccount, useWeb3 } from '@masknet/web3-shared-evm' +import { + GasOptionConfig, + TransactionEventType, + TransactionState, + TransactionStateType, + useAccount, + useWeb3, +} from '@masknet/web3-shared-evm' import type { SwapQuoteResponse, TradeComputed } from '../../types' import { TargetChainIdContext } from '../useTargetChainIdContext' import { SUPPORTED_CHAIN_ID_LIST } from './constants' @@ -58,21 +65,23 @@ export function useTradeCallback(tradeComputed: TradeComputed // send transaction and wait for hash return new Promise((resolve, reject) => { - web3.eth.sendTransaction(config_, (error, hash) => { - if (error) { + web3.eth + .sendTransaction(config_, (error) => { + if (!error) return setTradeState({ type: TransactionStateType.FAILED, error, }) reject(error) - } else { + }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { setTradeState({ - type: TransactionStateType.HASH, - hash, + type: TransactionStateType.CONFIRMED, + no, + receipt, }) - resolve(hash) - } - }) + resolve(receipt.transactionHash) + }) }) }, [web3, account, chainId, stringify(config), gasConfig]) diff --git a/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts index fc65f7159721..afd5e35d926d 100644 --- a/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/bancor/useTradeCallback.ts @@ -1,6 +1,13 @@ import { useCallback, useMemo, useState } from 'react' import stringify from 'json-stable-stringify' -import { GasOptionConfig, TransactionState, TransactionStateType, useAccount, useWeb3 } from '@masknet/web3-shared-evm' +import { + GasOptionConfig, + TransactionEventType, + TransactionState, + TransactionStateType, + useAccount, + useWeb3, +} from '@masknet/web3-shared-evm' import type { SwapBancorRequest, TradeComputed } from '../../types' import { PluginTraderRPC } from '../../messages' import { pick } from 'lodash-unified' @@ -59,21 +66,23 @@ export function useTradeCallback(tradeComputed: TradeComputed // send transaction and wait for hash return new Promise((resolve, reject) => { - web3.eth.sendTransaction(config_, (error, hash) => { - if (error) { + web3.eth + .sendTransaction(config_, (error, hash) => { + if (!error) return setTradeState({ type: TransactionStateType.FAILED, error, }) reject(error) - } else { + }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { setTradeState({ - type: TransactionStateType.HASH, - hash, + type: TransactionStateType.CONFIRMED, + no, + receipt, }) - resolve(hash) - } - }) + resolve(receipt.transactionHash) + }) }) }, [web3, account, chainId, stringify(trade), gasConfig]) diff --git a/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts index d6c655e0b439..24b3ddabef05 100644 --- a/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/dodo/useTradeCallback.ts @@ -2,7 +2,14 @@ import { useCallback, useMemo, useState } from 'react' import stringify from 'json-stable-stringify' import { pick } from 'lodash-unified' import type { TransactionConfig } from 'web3-core' -import { GasOptionConfig, TransactionState, TransactionStateType, useAccount, useWeb3 } from '@masknet/web3-shared-evm' +import { + GasOptionConfig, + TransactionEventType, + TransactionState, + TransactionStateType, + useAccount, + useWeb3, +} from '@masknet/web3-shared-evm' import type { SwapRouteSuccessResponse, TradeComputed } from '../../types' import { TargetChainIdContext } from '../useTargetChainIdContext' @@ -56,21 +63,23 @@ export function useTradeCallback( // send transaction and wait for hash return new Promise((resolve, reject) => { - web3.eth.sendTransaction(config_, (error, hash) => { - if (error) { + web3.eth + .sendTransaction(config_, (error) => { + if (!error) return setTradeState({ type: TransactionStateType.FAILED, error, }) reject(error) - } else { + }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { setTradeState({ - type: TransactionStateType.HASH, - hash, + type: TransactionStateType.CONFIRMED, + no, + receipt, }) - resolve(hash) - } - }) + resolve(receipt.transactionHash) + }) }) }, [web3, account, chainId, stringify(config), gasConfig]) diff --git a/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts index 38d729d0a6bd..902e54eaa9ce 100644 --- a/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/openocean/useTradeCallback.ts @@ -9,6 +9,7 @@ import { useChainId, useWeb3, GasOptionConfig, + TransactionEventType, } from '@masknet/web3-shared-evm' import type { SwapOOSuccessResponse, TradeComputed } from '../../types' @@ -61,21 +62,23 @@ export function useTradeCallback( // send transaction and wait for hash return new Promise((resolve, reject) => { - web3.eth.sendTransaction(config_, (error, hash) => { - if (error) { + web3.eth + .sendTransaction(config_, (error) => { + if (!error) return setTradeState({ type: TransactionStateType.FAILED, error, }) reject(error) - } else { + }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { setTradeState({ - type: TransactionStateType.HASH, - hash, + type: TransactionStateType.CONFIRMED, + no, + receipt, }) - resolve(hash) - } - }) + resolve(receipt.transactionHash) + }) }) }, [web3, account, chainId, stringify(config)]) diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useTradeCallback.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useTradeCallback.ts index 6a8a82e07e7d..e9ed72553689 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useTradeCallback.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useTradeCallback.ts @@ -1,7 +1,14 @@ import { useCallback, useState } from 'react' import BigNumber from 'bignumber.js' import type { SwapParameters } from '@uniswap/v2-sdk' -import { GasOptionConfig, TransactionState, TransactionStateType, useAccount, useWeb3 } from '@masknet/web3-shared-evm' +import { + GasOptionConfig, + TransactionEventType, + TransactionState, + TransactionStateType, + useAccount, + useWeb3, +} from '@masknet/web3-shared-evm' import { useSwapParameters as useTradeParameters } from './useTradeParameters' import type { SwapCall, Trade, TradeComputed } from '../../types' import { swapErrorToUserReadableMessage } from '../../helpers' @@ -135,18 +142,19 @@ export function useTradeCallback( call: { address, calldata, value }, } = bestCallOption - web3.eth.sendTransaction( - { - from: account, - to: address, - data: calldata, - ...('gasEstimate' in bestCallOption ? { gas: bestCallOption.gasEstimate.toFixed() } : {}), - ...(!value || /^0x0*$/.test(value) ? {} : { value }), - ...gasConfig, - }, - async (error, hash) => { - if (error) { - if ((error as any)?.code) { + web3.eth + .sendTransaction( + { + from: account, + to: address, + data: calldata, + ...('gasEstimate' in bestCallOption ? { gas: bestCallOption.gasEstimate.toFixed() } : {}), + ...(!value || /^0x0*$/.test(value) ? {} : { value }), + ...gasConfig, + }, + async (error) => { + if (!error) return + if ((error as any).code) { const error_ = new Error( (error as any)?.message === 'Unable to add more requests.' ? 'Unable to add more requests.' @@ -163,15 +171,16 @@ export function useTradeCallback( error: new Error(`Swap failed: ${swapErrorToUserReadableMessage(error)}`), }) } - } else { - setTradeState({ - type: TransactionStateType.HASH, - hash: hash, - }) - resolve(hash) - } - }, - ) + }, + ) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { + setTradeState({ + type: TransactionStateType.CONFIRMED, + no, + receipt, + }) + resolve(receipt.transactionHash) + }) }) }, [web3, account, tradeParameters, gasConfig]) diff --git a/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx b/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx index 96e30a9465bd..42c4e66728d5 100644 --- a/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx +++ b/packages/mask/src/plugins/dHEDGE/UI/InvestDialog.tsx @@ -164,9 +164,9 @@ export function InvestDialog() { (ev) => { if (!ev.open) { retryLoadTokenBalance() - if (investState.type === TransactionStateType.HASH) onClose() + if (investState.type === TransactionStateType.CONFIRMED) onClose() } - if (investState.type === TransactionStateType.HASH) setRawAmount('') + if (investState.type === TransactionStateType.CONFIRMED) setRawAmount('') resetInvestCallback() }, [id, investState, retryLoadTokenBalance, retryLoadTokenBalance, onClose], diff --git a/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts b/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts index ab5f0b2a58dd..a957baa3dba7 100644 --- a/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts +++ b/packages/mask/src/plugins/dHEDGE/hooks/useInvestCallback.ts @@ -66,13 +66,6 @@ export function useInvestCallback(pool: Pool | undefined, amount: string, token? ...config, gas: estimatedGas, }) - .on(TransactionEventType.TRANSACTION_HASH, (hash) => { - setInvestState({ - type: TransactionStateType.HASH, - hash, - }) - resolve(hash) - }) .on(TransactionEventType.ERROR, (error) => { setInvestState({ type: TransactionStateType.FAILED, @@ -80,6 +73,14 @@ export function useInvestCallback(pool: Pool | undefined, amount: string, token? }) reject(error) }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { + setInvestState({ + type: TransactionStateType.CONFIRMED, + no, + receipt, + }) + resolve(receipt.transactionHash) + }) }) }, [pool, account, amount, token]) diff --git a/packages/mask/src/social-network-adaptor/twitter.com/shared.ts b/packages/mask/src/social-network-adaptor/twitter.com/shared.ts index 1b1ce5795335..f971f7549c1b 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/shared.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/shared.ts @@ -36,7 +36,14 @@ export const twitterShared: SocialNetwork.Shared & SocialNetwork.Base = { height, screenX: window.screenX + (window.innerWidth - width) / 2, screenY: window.screenY + (window.innerHeight - height) / 2, - behaviors: { toolbar: true, status: true, resizable: true, scrollbars: true }, + opener: true, + referrer: true, + behaviors: { + toolbar: true, + status: true, + resizable: true, + scrollbars: true, + }, }) if (openedWindow === null) { location.assign(url) diff --git a/packages/web3-shared/evm/hooks/useNativeTokenWrapperCallback.ts b/packages/web3-shared/evm/hooks/useNativeTokenWrapperCallback.ts index 522cc4319931..965409a698b2 100644 --- a/packages/web3-shared/evm/hooks/useNativeTokenWrapperCallback.ts +++ b/packages/web3-shared/evm/hooks/useNativeTokenWrapperCallback.ts @@ -59,13 +59,6 @@ export function useNativeTokenWrapperCallback(chainId?: ChainId) { wrapperContract.methods .deposit() .send(config as PayableTx) - .on(TransactionEventType.TRANSACTION_HASH, (hash) => { - setTransactionState({ - type: TransactionStateType.HASH, - hash, - }) - resolve(hash) - }) .on(TransactionEventType.ERROR, (error) => { setTransactionState({ type: TransactionStateType.FAILED, @@ -73,6 +66,14 @@ export function useNativeTokenWrapperCallback(chainId?: ChainId) { }) reject(error) }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { + setTransactionState({ + type: TransactionStateType.CONFIRMED, + no, + receipt, + }) + resolve(receipt.transactionHash) + }) }) }, [account, wrapperContract], @@ -136,13 +137,6 @@ export function useNativeTokenWrapperCallback(chainId?: ChainId) { wrapperContract.methods .withdraw(withdrawAmount) .send(config as NonPayableTx) - .on(TransactionEventType.TRANSACTION_HASH, (hash) => { - setTransactionState({ - type: TransactionStateType.HASH, - hash, - }) - resolve(hash) - }) .on(TransactionEventType.ERROR, (error) => { setTransactionState({ type: TransactionStateType.FAILED, @@ -150,6 +144,14 @@ export function useNativeTokenWrapperCallback(chainId?: ChainId) { }) reject(error) }) + .on(TransactionEventType.CONFIRMATION, (no, receipt) => { + setTransactionState({ + type: TransactionStateType.CONFIRMED, + no, + receipt, + }) + resolve(receipt.transactionHash) + }) }) }, [account, wrapperContract], diff --git a/packages/web3-shared/evm/hooks/useTransactionCallback.ts b/packages/web3-shared/evm/hooks/useTransactionCallback.ts index 7bb891671b27..9e9d8f26efd4 100644 --- a/packages/web3-shared/evm/hooks/useTransactionCallback.ts +++ b/packages/web3-shared/evm/hooks/useTransactionCallback.ts @@ -44,14 +44,6 @@ export function useTransactionCallback( return new Promise(async (resolve, reject) => { method .send(gasExpectedConfig) - .once(TransactionEventType.TRANSACTION_HASH, (hash) => { - if (type !== TransactionStateType.HASH) return - setState({ - type: TransactionStateType.HASH, - hash, - }) - resolve() - }) .once(TransactionEventType.RECEIPT, (receipt) => { if (type !== TransactionStateType.RECEIPT) return setState({