Skip to content

Commit

Permalink
Merge pull request #5387 from LiskHQ/5374-dont-pass-transaction-in-ur…
Browse files Browse the repository at this point in the history
…lparams

Dont pass transaction in URL in multi signature continuous flow
  • Loading branch information
ManuGowda authored Oct 16, 2023
2 parents d9bbb71 + 01a49ce commit 9e2ac13
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 8 deletions.
18 changes: 15 additions & 3 deletions src/modules/account/hooks/useCurrentAccount.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,19 @@ export function useCurrentAccount() {
(stake) => stake.confirmed !== stake.unconfirmed
);

const setAccount = (encryptedAccount, referrer, redirect = true) => {
// eslint-disable-next-line max-statements
const setAccount = (encryptedAccount, referrer, redirect = true, urlState) => {
// clear stakes list during login or accounts switch
const relativeUrlPath = referrer || routes.wallet.path;

if (pendingStakes.length) {
const onCancel = /* istanbul ignore next */ () =>
removeSearchParamsFromUrl(history, ['modal']);
const onConfirm = /* istanbul ignore next */ () => {
dispatch(setCurrentAccount(encryptedAccount));

dispatch(stakesReset());
history.push(referrer || routes.wallet.path);
history.push(relativeUrlPath);
};
const state = createConfirmSwitchState({
mode: 'pendingStakes',
Expand All @@ -40,7 +43,16 @@ export function useCurrentAccount() {
} else {
dispatch(setCurrentAccount(encryptedAccount));
if (redirect) {
history.push(referrer || routes.wallet.path);
if (urlState) {
const { pathname, search } = new URL(relativeUrlPath, window.location.origin);
history.push({
pathname,
search,
state: urlState,
});
} else {
history.push(relativeUrlPath);
}
}
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import WarningNotification from '@common/components/warningNotification';
import AccountRow from '@account/components/AccountRow';
import classNames from 'classnames';
import { getNextAccountToSign } from '@transaction/utils/multisignatureUtils';
import generateUniqueId from 'src/utils/generateUniqueId';
import getIllustration from '../TxBroadcaster/illustrationsMap';
import styles from './Multisignature.css';
import useTxInitiatorAccount from '../../hooks/useTxInitiatorAccount';
Expand All @@ -28,15 +29,18 @@ export const PartiallySignedActions = ({
transactionJSON,
reset,
}) => {
const [, setCurrentAccount] = useCurrentAccount();
const [currentAccount, setCurrentAccount] = useCurrentAccount();

const handleSwitchAccount = () => {
const stringifiedTransaction = encodeURIComponent(JSON.stringify(transactionJSON));
const uniqueUrlIdToPreventHashError = generateUniqueId();
setCurrentAccount(
nextAccountToSign,
`/wallet?modal=signMultiSignTransaction&stringifiedTransaction=${stringifiedTransaction}`,
`/wallet?modal=signMultiSignTransaction&prevAccount=${currentAccount.metadata.address}&uniqueId=${uniqueUrlIdToPreventHashError}`,
true,
{ stringifiedTransaction }
{
stringifiedTransaction,
}
);
reset?.();
};
Expand Down
26 changes: 26 additions & 0 deletions src/modules/transaction/configuration/statusConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { transactions as LiskTransaction } from '@liskhq/lisk-client';
import { isEmpty } from 'src/utils/helpers';
import { txStatusTypes } from '@transaction/configuration/txStatus';
import { calculateRemainingAndSignedMembers } from '@wallet/utils/account';
import { getNumberOfSignatures, joinModuleAndCommand, toTransactionJSON } from '../utils';
import { MODULE_COMMANDS_NAME_MAP } from './moduleCommand';

Expand Down Expand Up @@ -85,6 +86,24 @@ const getErrorMessage = (transaction, paramSchema, errorMessage) => {
};
};

function getHasRemainingMandatorySignatures(signedTransaction, walletKeys) {
const transactionSignaturesAsStrings = signedTransaction.signatures.map((signature) =>
signature.toString('hex')
);

const moduleCommand = joinModuleAndCommand(signedTransaction);
const isMultisignatureRegistration =
moduleCommand === MODULE_COMMANDS_NAME_MAP.registerMultisignature;

const { remaining } = calculateRemainingAndSignedMembers(
walletKeys,
{ ...signedTransaction, signatures: transactionSignaturesAsStrings },
isMultisignatureRegistration
);

return remaining.some(({ mandatory }) => mandatory);
}

/**
* Defines the Status of the broadcasted tx.
*/
Expand Down Expand Up @@ -135,6 +154,12 @@ export const getTransactionStatus = (account, transactions, options = {}) => {
moduleCommand === MODULE_COMMANDS_NAME_MAP.registerMultisignature;
const isMultisignature = account?.summary?.isMultisignature || options.isMultisignature;
const isInitatorAccountMultiSig = account?.numberOfSignatures > 0;

const hasRemainingMandatorySignatures = getHasRemainingMandatorySignatures(
transactions.signedTransaction,
account?.keys
);

let nonEmptySignatures = transactions.signedTransaction.signatures.filter(
(sig) => sig.length > 0
).length;
Expand All @@ -146,6 +171,7 @@ export const getTransactionStatus = (account, transactions, options = {}) => {
}

if (
hasRemainingMandatorySignatures ||
nonEmptySignatures < numberOfSignatures ||
(isMultisignature &&
nonEmptySignatures === numberOfSignatures &&
Expand Down
3 changes: 1 addition & 2 deletions src/modules/wallet/components/signMultisigView/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ import Status from '../signMultisigStatus';
const SignMultisigView = ({ history }) => {
const [currentStep, setCurrentStep] = useState();
const location = useLocation();
const queryParams = new URLSearchParams(location.search);
const stringifiedTransaction = queryParams.get('stringifiedTransaction');
const stringifiedTransaction = location.state?.stringifiedTransaction;

const onMultiStepChange = useCallback(({ step: { current } }) => {
setCurrentStep(current);
Expand Down

0 comments on commit 9e2ac13

Please sign in to comment.