From ade2b13e7afb4a50be584d8571064a4e71e3d0b5 Mon Sep 17 00:00:00 2001 From: Vadim Tokar <52737608+vraja-nayaka@users.noreply.github.com> Date: Mon, 20 May 2024 16:04:32 +0400 Subject: [PATCH] Fix signless disable transaction cancel error catching --- .../src/hooks/use-batch-sign-and-send.ts | 14 ++++++++++++-- .../src/hooks/use-create-session.ts | 8 ++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/frontend/packages/signless-transactions/src/hooks/use-batch-sign-and-send.ts b/frontend/packages/signless-transactions/src/hooks/use-batch-sign-and-send.ts index d77f8c9ad..fa4e341cb 100644 --- a/frontend/packages/signless-transactions/src/hooks/use-batch-sign-and-send.ts +++ b/frontend/packages/signless-transactions/src/hooks/use-batch-sign-and-send.ts @@ -80,15 +80,25 @@ function useBatchSignAndSend(type?: 'all' | 'force') { }); }; - const batchSign = async (txs: SubmittableExtrinsic<'promise', ISubmittableResult>[], pair?: KeyringPair) => { + const batchSign = async ( + txs: SubmittableExtrinsic<'promise', ISubmittableResult>[], + { pair, ...options }: Options = {}, + ) => { if (!account) throw new Error('No account address'); const { address, meta } = account; const batch = getBatch(); - return pair + const signAsync = pair ? batch(txs).signAsync(pair) : web3FromSource(meta.source).then(({ signer }) => batch(txs).signAsync(address, { signer })); + + return signAsync.catch(({ message }: Error) => { + const { onError = () => {}, onFinally = () => {} } = options; + + onError(message); + onFinally(); + }); }; const batchSend = async ( diff --git a/frontend/packages/signless-transactions/src/hooks/use-create-session.ts b/frontend/packages/signless-transactions/src/hooks/use-create-session.ts index a90e806a7..2b7904b0b 100644 --- a/frontend/packages/signless-transactions/src/hooks/use-create-session.ts +++ b/frontend/packages/signless-transactions/src/hooks/use-create-session.ts @@ -181,11 +181,15 @@ function useCreateSession(programId: HexString, metadata: ProgramMetadata | unde // We need to sign transactions before sending declineExtrinsic; // Otherwise, if the signing is canceled, the voucher will be invalid. - const signedTxs = await batchSign(txs); + const signedTxs = await batchSign(txs, options); + + if (!signedTxs) { + throw new Error('Transaction sign canceled'); + } if (!isExpired) { const declineExtrinsic = api.voucher.call(voucher.id, { DeclineVoucher: null }); - await sendTransaction(declineExtrinsic, pair, ['VoucherDeclined']); + await sendTransaction(declineExtrinsic, pair, ['VoucherDeclined'], options); } batchSend(signedTxs, { ...options, onError });