From 407ba8d1df7524d390e6305c2666647e81b015a8 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Fri, 27 Nov 2020 12:39:00 -0300 Subject: [PATCH 1/4] Fix black notification --- src/logic/safe/store/actions/createTransaction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logic/safe/store/actions/createTransaction.ts b/src/logic/safe/store/actions/createTransaction.ts index 23570126cd..10ed6ad872 100644 --- a/src/logic/safe/store/actions/createTransaction.ts +++ b/src/logic/safe/store/actions/createTransaction.ts @@ -217,7 +217,7 @@ const createTransaction = ( dispatch(closeSnackbarAction({ key: pendingExecutionKey })) } - dispatch(enqueueSnackbar(errorMsg)) + dispatch(enqueueSnackbar({ key: err.code, message: errorMsg, options: { persist: true, variant: 'error' } })) const executeDataUsedSignatures = safeInstance.methods .execTransaction(to, valueInWei, txData, operation, 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, sigs) From 4d29ecef4dd9477cb17186b60cce3d7af5efa99f Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Fri, 27 Nov 2020 14:18:02 -0300 Subject: [PATCH 2/4] Fix executing tx even if the user rejected it --- src/logic/safe/store/actions/createTransaction.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/logic/safe/store/actions/createTransaction.ts b/src/logic/safe/store/actions/createTransaction.ts index 10ed6ad872..d0aa047dee 100644 --- a/src/logic/safe/store/actions/createTransaction.ts +++ b/src/logic/safe/store/actions/createTransaction.ts @@ -57,6 +57,7 @@ export interface CreateTransactionArgs { type CreateTransactionAction = ThunkAction, AppReduxState, DispatchReturn, AnyAction> type ConfirmEventHandler = (safeTxHash: string) => void type ErrorEventHandler = () => void +const REJECT_CONFIRM_TX_ERROR_CODE = 4001 const createTransaction = ( { @@ -219,11 +220,13 @@ const createTransaction = ( dispatch(enqueueSnackbar({ key: err.code, message: errorMsg, options: { persist: true, variant: 'error' } })) - const executeDataUsedSignatures = safeInstance.methods - .execTransaction(to, valueInWei, txData, operation, 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, sigs) - .encodeABI() - const errMsg = await getErrorMessage(safeInstance.options.address, 0, executeDataUsedSignatures, from) - console.error(`Error creating the TX - an attempt to get the error message: ${errMsg}`) + if (err.code !== REJECT_CONFIRM_TX_ERROR_CODE) { + const executeDataUsedSignatures = safeInstance.methods + .execTransaction(to, valueInWei, txData, operation, 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, sigs) + .encodeABI() + const errMsg = await getErrorMessage(safeInstance.options.address, 0, executeDataUsedSignatures, from) + console.error(`Error creating the TX - an attempt to get the error message: ${errMsg}`) + } } return txHash From cb78ca59f348a9c054a3052895f443fad5aaca77 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Wed, 2 Dec 2020 12:55:29 -0300 Subject: [PATCH 3/4] Fix hidden metamask error code --- src/logic/safe/store/actions/createTransaction.ts | 5 ++--- src/logic/safe/transactions/offchainSigner/index.ts | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/logic/safe/store/actions/createTransaction.ts b/src/logic/safe/store/actions/createTransaction.ts index d0aa047dee..0106e56fd6 100644 --- a/src/logic/safe/store/actions/createTransaction.ts +++ b/src/logic/safe/store/actions/createTransaction.ts @@ -57,7 +57,7 @@ export interface CreateTransactionArgs { type CreateTransactionAction = ThunkAction, AppReduxState, DispatchReturn, AnyAction> type ConfirmEventHandler = (safeTxHash: string) => void type ErrorEventHandler = () => void -const REJECT_CONFIRM_TX_ERROR_CODE = 4001 +export const METAMASK_REJECT_CONFIRM_TX_ERROR_CODE = 4001 const createTransaction = ( { @@ -211,7 +211,6 @@ const createTransaction = ( ? `${notificationsQueue.afterExecutionError.message} - ${err.message}` : notificationsQueue.afterExecutionError.message - console.error(`Error creating the TX: `, err) dispatch(closeSnackbarAction({ key: beforeExecutionKey })) if (pendingExecutionKey) { @@ -220,7 +219,7 @@ const createTransaction = ( dispatch(enqueueSnackbar({ key: err.code, message: errorMsg, options: { persist: true, variant: 'error' } })) - if (err.code !== REJECT_CONFIRM_TX_ERROR_CODE) { + if (err.code !== METAMASK_REJECT_CONFIRM_TX_ERROR_CODE) { const executeDataUsedSignatures = safeInstance.methods .execTransaction(to, valueInWei, txData, operation, 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, sigs) .encodeABI() diff --git a/src/logic/safe/transactions/offchainSigner/index.ts b/src/logic/safe/transactions/offchainSigner/index.ts index 6113d568db..08e0480364 100644 --- a/src/logic/safe/transactions/offchainSigner/index.ts +++ b/src/logic/safe/transactions/offchainSigner/index.ts @@ -1,5 +1,6 @@ import { getEIP712Signer } from './EIP712Signer' import { ethSigner } from './ethSigner' +import { METAMASK_REJECT_CONFIRM_TX_ERROR_CODE } from 'src/logic/safe/store/actions/createTransaction' // 1. we try to sign via EIP-712 if user's wallet supports it // 2. If not, try to use eth_sign (Safe version has to be >1.1.1) @@ -29,9 +30,8 @@ export const tryOffchainSigning = async (safeTxHash: string, txArgs, isHW: boole break } catch (err) { console.error(err) - // Metamask sign request error code - if (err.code === 4001) { - throw new Error('User denied sign request') + if (err.code === METAMASK_REJECT_CONFIRM_TX_ERROR_CODE) { + throw err } } } From 60ba17d84d3e92a5922167dfc00d5f0b25832b1d Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Wed, 2 Dec 2020 13:25:31 -0300 Subject: [PATCH 4/4] Fix proccessTransaction notifications and metamask sign reject handling --- .../safe/store/actions/processTransaction.ts | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/logic/safe/store/actions/processTransaction.ts b/src/logic/safe/store/actions/processTransaction.ts index 7c513aebb2..eced5a75c8 100644 --- a/src/logic/safe/store/actions/processTransaction.ts +++ b/src/logic/safe/store/actions/processTransaction.ts @@ -97,7 +97,7 @@ const processTransaction = ({ const signature = await tryOffchainSigning(tx.safeTxHash, { ...txArgs, safeAddress }, hardwareWallet) if (signature) { - dispatch(closeSnackbarAction(beforeExecutionKey)) + dispatch(closeSnackbarAction({ key: beforeExecutionKey })) await saveTxToHistory({ ...txArgs, signature }) // TODO: while we wait for the tx to be stored in the service and later update the tx info @@ -130,7 +130,7 @@ const processTransaction = ({ .send(sendParams) .once('transactionHash', async (hash: string) => { txHash = hash - dispatch(closeSnackbarAction(beforeExecutionKey)) + dispatch(closeSnackbarAction({ key: beforeExecutionKey })) pendingExecutionKey = dispatch(enqueueSnackbar(notificationsQueue.pendingExecution)) @@ -141,19 +141,19 @@ const processTransaction = ({ ]) dispatch(fetchTransactions(safeAddress)) } catch (e) { - dispatch(closeSnackbarAction(pendingExecutionKey)) + dispatch(closeSnackbarAction({ key: pendingExecutionKey })) await storeTx({ transaction: tx, safeAddress, dispatch, state }) console.error(e) } }) .on('error', (error) => { - dispatch(closeSnackbarAction(pendingExecutionKey)) + dispatch(closeSnackbarAction({ key: pendingExecutionKey })) storeTx({ transaction: tx, safeAddress, dispatch, state }) console.error('Processing transaction error: ', error) }) .then(async (receipt) => { if (pendingExecutionKey) { - dispatch(closeSnackbarAction(pendingExecutionKey)) + dispatch(closeSnackbarAction({ key: pendingExecutionKey })) } dispatch( @@ -178,17 +178,16 @@ const processTransaction = ({ const errorMsg = err.message ? `${notificationsQueue.afterExecutionError.message} - ${err.message}` : notificationsQueue.afterExecutionError.message - console.error(err) - if (txHash !== undefined) { - dispatch(closeSnackbarAction(beforeExecutionKey)) + dispatch(closeSnackbarAction({ key: beforeExecutionKey })) - if (pendingExecutionKey) { - dispatch(closeSnackbarAction(pendingExecutionKey)) - } + if (pendingExecutionKey) { + dispatch(closeSnackbarAction({ key: pendingExecutionKey })) + } - dispatch(enqueueSnackbar(errorMsg)) + dispatch(enqueueSnackbar({ key: err.code, message: errorMsg, options: { persist: true, variant: 'error' } })) + if (txHash) { const executeData = safeInstance.methods.approveHash(txHash).encodeABI() const errMsg = await getErrorMessage(safeInstance.options.address, 0, executeData, from) console.error(`Error executing the TX: ${errMsg}`)