mirror of
https://github.com/status-im/safe-react.git
synced 2025-02-17 03:57:04 +00:00
WA-238 Checking tx receipt status on withdrawn mutlsig txs
This commit is contained in:
parent
9b582f658f
commit
4c5d28db4b
@ -6,6 +6,7 @@ import Page from '~/components/layout/Page'
|
|||||||
import { getAccountsFrom, getThresholdFrom, getNamesFrom, getSafeNameFrom, getDailyLimitFrom } from '~/routes/open/utils/safeDataExtractor'
|
import { getAccountsFrom, getThresholdFrom, getNamesFrom, getSafeNameFrom, getDailyLimitFrom } from '~/routes/open/utils/safeDataExtractor'
|
||||||
import { getWeb3 } from '~/wallets/getWeb3'
|
import { getWeb3 } from '~/wallets/getWeb3'
|
||||||
import { getGnosisSafeContract, deploySafeContract, initContracts } from '~/wallets/safeContracts'
|
import { getGnosisSafeContract, deploySafeContract, initContracts } from '~/wallets/safeContracts'
|
||||||
|
import { checkReceiptStatus } from '~/wallets/ethTransactions'
|
||||||
import selector from './selector'
|
import selector from './selector'
|
||||||
import actions, { type Actions, type AddSafe } from './actions'
|
import actions, { type Actions, type AddSafe } from './actions'
|
||||||
import Layout from '../components/Layout'
|
import Layout from '../components/Layout'
|
||||||
@ -32,6 +33,7 @@ const createSafe = async (values: Object, userAccount: string, addSafe: AddSafe)
|
|||||||
|
|
||||||
await initContracts()
|
await initContracts()
|
||||||
const safe = await deploySafeContract(accounts, numConfirmations, dailyLimit, userAccount)
|
const safe = await deploySafeContract(accounts, numConfirmations, dailyLimit, userAccount)
|
||||||
|
checkReceiptStatus(safe.tx)
|
||||||
|
|
||||||
const param = safe.logs[1].args.proxy
|
const param = safe.logs[1].args.proxy
|
||||||
const safeContract = GnosisSafe.at(param)
|
const safeContract = GnosisSafe.at(param)
|
||||||
|
@ -8,7 +8,7 @@ import { getGnosisSafeContract } from '~/wallets/safeContracts'
|
|||||||
import { getWeb3 } from '~/wallets/getWeb3'
|
import { getWeb3 } from '~/wallets/getWeb3'
|
||||||
import { type Safe } from '~/routes/safe/store/model/safe'
|
import { type Safe } from '~/routes/safe/store/model/safe'
|
||||||
import { sameAddress } from '~/wallets/ethAddresses'
|
import { sameAddress } from '~/wallets/ethAddresses'
|
||||||
import executeTransaction from '~/wallets/ethTransactions'
|
import executeTransaction, { checkReceiptStatus } from '~/wallets/ethTransactions'
|
||||||
|
|
||||||
export const TX_NAME_PARAM = 'txName'
|
export const TX_NAME_PARAM = 'txName'
|
||||||
export const TX_DESTINATION_PARAM = 'txDestination'
|
export const TX_DESTINATION_PARAM = 'txDestination'
|
||||||
@ -98,14 +98,18 @@ export const createTransaction = async (
|
|||||||
const thresholdIsOne = safe.get('confirmations') === 1
|
const thresholdIsOne = safe.get('confirmations') === 1
|
||||||
if (hasOneOwner(safe) || thresholdIsOne) {
|
if (hasOneOwner(safe) || thresholdIsOne) {
|
||||||
const txConfirmationData = gnosisSafe.contract.execTransactionIfApproved.getData(txDestination, valueInWei, '0x', CALL, nonce)
|
const txConfirmationData = gnosisSafe.contract.execTransactionIfApproved.getData(txDestination, valueInWei, '0x', CALL, nonce)
|
||||||
const txReceipt = await executeTransaction(txConfirmationData, user, safeAddress)
|
const txHash = await executeTransaction(txConfirmationData, user, safeAddress)
|
||||||
|
checkReceiptStatus(txHash)
|
||||||
|
|
||||||
const executedConfirmations: List<Confirmation> = buildExecutedConfirmationFrom(safe.get('owners'), user)
|
const executedConfirmations: List<Confirmation> = buildExecutedConfirmationFrom(safe.get('owners'), user)
|
||||||
return storeTransaction(txName, nonce, txDestination, txValue, user, executedConfirmations, txReceipt, safeAddress, safe.get('confirmations'))
|
return storeTransaction(txName, nonce, txDestination, txValue, user, executedConfirmations, txHash, safeAddress, safe.get('confirmations'))
|
||||||
}
|
}
|
||||||
|
|
||||||
const txConfirmationData = gnosisSafe.contract.approveTransactionWithParameters.getData(txDestination, valueInWei, '0x', CALL, nonce)
|
const txConfirmationData = gnosisSafe.contract.approveTransactionWithParameters.getData(txDestination, valueInWei, '0x', CALL, nonce)
|
||||||
const txConfirmationReceipt = await executeTransaction(txConfirmationData, user, safeAddress)
|
const txConfirmationHash = await executeTransaction(txConfirmationData, user, safeAddress)
|
||||||
const confirmations: List<Confirmation> = buildConfirmationsFrom(safe.get('owners'), user, txConfirmationReceipt)
|
checkReceiptStatus(txConfirmationHash)
|
||||||
|
|
||||||
|
const confirmations: List<Confirmation> = buildConfirmationsFrom(safe.get('owners'), user, txConfirmationHash)
|
||||||
|
|
||||||
return storeTransaction(txName, nonce, txDestination, txValue, user, confirmations, '', safeAddress, safe.get('confirmations'))
|
return storeTransaction(txName, nonce, txDestination, txValue, user, confirmations, '', safeAddress, safe.get('confirmations'))
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import { getGnosisSafeContract } from '~/wallets/safeContracts'
|
|||||||
import { getWeb3 } from '~/wallets/getWeb3'
|
import { getWeb3 } from '~/wallets/getWeb3'
|
||||||
import { sameAddress } from '~/wallets/ethAddresses'
|
import { sameAddress } from '~/wallets/ethAddresses'
|
||||||
import { EXECUTED_CONFIRMATION_HASH } from '~/routes/safe/component/AddTransaction/createTransactions'
|
import { EXECUTED_CONFIRMATION_HASH } from '~/routes/safe/component/AddTransaction/createTransactions'
|
||||||
import executeTransaction from '~/wallets/ethTransactions'
|
import executeTransaction, { checkReceiptStatus } from '~/wallets/ethTransactions'
|
||||||
|
|
||||||
export const updateTransaction = (
|
export const updateTransaction = (
|
||||||
name: string,
|
name: string,
|
||||||
@ -111,11 +111,13 @@ export const processTransaction = async (
|
|||||||
const txValue = tx.get('value')
|
const txValue = tx.get('value')
|
||||||
const txDestination = tx.get('destination')
|
const txDestination = tx.get('destination')
|
||||||
|
|
||||||
const txReceipt = thresholdReached
|
const txHash = thresholdReached
|
||||||
? await execTransaction(gnosisSafe, txDestination, txValue, nonce, userAddress)
|
? await execTransaction(gnosisSafe, txDestination, txValue, nonce, userAddress)
|
||||||
: await execConfirmation(gnosisSafe, txDestination, txValue, nonce, userAddress)
|
: await execConfirmation(gnosisSafe, txDestination, txValue, nonce, userAddress)
|
||||||
|
|
||||||
const confirmationHash = thresholdReached ? EXECUTED_CONFIRMATION_HASH : txReceipt
|
checkReceiptStatus(txHash)
|
||||||
|
|
||||||
|
const confirmationHash = thresholdReached ? EXECUTED_CONFIRMATION_HASH : txHash
|
||||||
const executedConfirmations: List<Confirmation> = updateConfirmations(tx.get('confirmations'), userAddress, confirmationHash)
|
const executedConfirmations: List<Confirmation> = updateConfirmations(tx.get('confirmations'), userAddress, confirmationHash)
|
||||||
|
|
||||||
return updateTransaction(
|
return updateTransaction(
|
||||||
@ -125,7 +127,7 @@ export const processTransaction = async (
|
|||||||
txValue,
|
txValue,
|
||||||
userAddress,
|
userAddress,
|
||||||
executedConfirmations,
|
executedConfirmations,
|
||||||
thresholdReached ? txReceipt : '',
|
thresholdReached ? txHash : '',
|
||||||
safeAddress,
|
safeAddress,
|
||||||
threshold,
|
threshold,
|
||||||
)
|
)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import { getWeb3 } from '~/wallets/getWeb3'
|
import { getWeb3 } from '~/wallets/getWeb3'
|
||||||
import { getGnosisSafeContract, getCreateDailyLimitExtensionContract } from '~/wallets/safeContracts'
|
import { getGnosisSafeContract, getCreateDailyLimitExtensionContract } from '~/wallets/safeContracts'
|
||||||
import { type DailyLimitProps } from '~/routes/safe/store/model/dailyLimit'
|
import { type DailyLimitProps } from '~/routes/safe/store/model/dailyLimit'
|
||||||
import executeTransaction from '~/wallets/ethTransactions'
|
import executeTransaction, { checkReceiptStatus } from '~/wallets/ethTransactions'
|
||||||
|
|
||||||
export const LIMIT_POSITION = 0
|
export const LIMIT_POSITION = 0
|
||||||
export const SPENT_TODAY_POS = 1
|
export const SPENT_TODAY_POS = 1
|
||||||
@ -45,7 +45,8 @@ const withdrawn = async (values: Object, safeAddress: string, userAccount: strin
|
|||||||
|
|
||||||
const dailyLimitData = dailyLimitModule.contract.executeDailyLimit.getData(0, destination, value)
|
const dailyLimitData = dailyLimitModule.contract.executeDailyLimit.getData(0, destination, value)
|
||||||
|
|
||||||
return executeTransaction(dailyLimitData, userAccount, dailyLimitModule.address)
|
const txHash = await executeTransaction(dailyLimitData, userAccount, dailyLimitModule.address)
|
||||||
|
checkReceiptStatus(txHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default withdrawn
|
export default withdrawn
|
||||||
|
@ -9,6 +9,7 @@ import { SAFELIST_ADDRESS } from '~/routes/routes'
|
|||||||
import AppRoutes from '~/routes'
|
import AppRoutes from '~/routes'
|
||||||
import AddTransactionComponent from '~/routes/safe/component/AddTransaction'
|
import AddTransactionComponent from '~/routes/safe/component/AddTransaction'
|
||||||
import { createMultisigTxFilling, addFundsTo, checkBalanceOf, listTxsOf, getTagFromTransaction, expandTransactionOf, getTransactionFromReduxStore, confirmOwners } from '~/routes/safe/test/testMultisig'
|
import { createMultisigTxFilling, addFundsTo, checkBalanceOf, listTxsOf, getTagFromTransaction, expandTransactionOf, getTransactionFromReduxStore, confirmOwners } from '~/routes/safe/test/testMultisig'
|
||||||
|
import { sleep } from '~/utils/timer'
|
||||||
|
|
||||||
const renderSafe = localStore => (
|
const renderSafe = localStore => (
|
||||||
TestUtils.renderIntoDocument((
|
TestUtils.renderIntoDocument((
|
||||||
@ -40,6 +41,7 @@ describe('React DOM TESTS > Multisig transactions from safe [3 owners & 1 thresh
|
|||||||
await createMultisigTxFilling(SafeDom, AddTransactionComponent, store)
|
await createMultisigTxFilling(SafeDom, AddTransactionComponent, store)
|
||||||
await checkBalanceOf(address, '0.09')
|
await checkBalanceOf(address, '0.09')
|
||||||
await listTxsOf(SafeDom)
|
await listTxsOf(SafeDom)
|
||||||
|
await sleep(2500)
|
||||||
|
|
||||||
await expandTransactionOf(SafeDom, 3, 1)
|
await expandTransactionOf(SafeDom, 3, 1)
|
||||||
await confirmOwners(SafeDom, 'Adolfo 1 Eth Account [Confirmed]', 'Adolfo 2 Eth Account [Not confirmed]', 'Adolfo 3 Eth Account [Not confirmed]')
|
await confirmOwners(SafeDom, 'Adolfo 1 Eth Account [Confirmed]', 'Adolfo 2 Eth Account [Not confirmed]', 'Adolfo 3 Eth Account [Not confirmed]')
|
||||||
|
@ -5,6 +5,25 @@ import { promisify } from '~/utils/promisify'
|
|||||||
|
|
||||||
// const MAINNET_NETWORK = 1
|
// const MAINNET_NETWORK = 1
|
||||||
|
|
||||||
|
export const checkReceiptStatus = async (hash: string) => {
|
||||||
|
if (!hash) {
|
||||||
|
throw new Error('No valid Tx hash to get receipt from')
|
||||||
|
}
|
||||||
|
|
||||||
|
const web3 = getWeb3()
|
||||||
|
const txReceipt = await promisify(cb => web3.eth.getTransactionReceipt(hash, cb))
|
||||||
|
|
||||||
|
const { status } = txReceipt
|
||||||
|
if (!status) {
|
||||||
|
throw new Error('No status found on this transaction receipt')
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasError = status === '0x0'
|
||||||
|
if (hasError) {
|
||||||
|
throw new Error('Obtained a transaction failure in the receipt')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const calculateGasPrice = async () => {
|
export const calculateGasPrice = async () => {
|
||||||
/*
|
/*
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user