paritytech / capi

[WIP] A framework for crafting interactions with Substrate chains
https://docs.capi.dev
Apache License 2.0
104 stars 9 forks source link

Duplicate transactions with transactionStatuses #1200

Open VadimSaveljev opened 1 year ago

VadimSaveljev commented 1 year ago

'sent' is an ExtrinsicStatusRune here

sent.transactionStatuses((status) => {
  if (status === 'ready') {
    setStatus(...);
  }

  return false;
}).run();

const inBlockEvents = await sent.inBlockEvents().run();

So this code breaks if I cancel the transaction, even though it's in a try catch block The initial fix was to add await await sent.transactionStatuses but then it will be stuck forever, unless I add return true

   if (status === 'ready') {
    setStatus(...);

    return true;
  }

unfortunately this creates a new issue, now the first transaction will be called twice in a row I receive a popup two times, after confirming the second one, only then it proceeds further

VadimSaveljev commented 1 year ago

the only way to mitigate this for now is to use the initial code without await or return true and add .rehandle(is(SignerError), (error) => error.access('inner')) after .transactionStatuses At least this way my catch captures the error and the whole page doesn't turn red

though I thought error.access('inner') would return specifically that portion of the error object instead I get this Screenshot 2023-07-18 at 20 35 51

maybe this https://github.com/paritytech/capi/pull/1176 will help me later