@vultisig/core-chain 2.38.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/chains/cosmos/gas.d.ts +9 -0
  3. package/dist/chains/cosmos/gas.d.ts.map +1 -1
  4. package/dist/chains/cosmos/gas.js +9 -0
  5. package/dist/chains/cosmos/gas.js.map +1 -1
  6. package/dist/chains/cosmos/terraClassicTax.d.ts +15 -0
  7. package/dist/chains/cosmos/terraClassicTax.d.ts.map +1 -1
  8. package/dist/chains/cosmos/terraClassicTax.js +14 -0
  9. package/dist/chains/cosmos/terraClassicTax.js.map +1 -1
  10. package/dist/swap/utils/getSwapArrivalStatus/index.d.ts +79 -0
  11. package/dist/swap/utils/getSwapArrivalStatus/index.d.ts.map +1 -0
  12. package/dist/swap/utils/getSwapArrivalStatus/index.js +374 -0
  13. package/dist/swap/utils/getSwapArrivalStatus/index.js.map +1 -0
  14. package/dist/tx/broadcast/index.d.ts +2 -0
  15. package/dist/tx/broadcast/index.d.ts.map +1 -1
  16. package/dist/tx/broadcast/index.js +34 -3
  17. package/dist/tx/broadcast/index.js.map +1 -1
  18. package/dist/tx/broadcast/resolver.d.ts +35 -1
  19. package/dist/tx/broadcast/resolver.d.ts.map +1 -1
  20. package/dist/tx/broadcast/resolver.js +42 -1
  21. package/dist/tx/broadcast/resolver.js.map +1 -1
  22. package/dist/tx/broadcast/resolvers/bittensor.d.ts.map +1 -1
  23. package/dist/tx/broadcast/resolvers/bittensor.js +17 -6
  24. package/dist/tx/broadcast/resolvers/bittensor.js.map +1 -1
  25. package/dist/tx/broadcast/resolvers/cardano.d.ts.map +1 -1
  26. package/dist/tx/broadcast/resolvers/cardano.js +26 -16
  27. package/dist/tx/broadcast/resolvers/cardano.js.map +1 -1
  28. package/dist/tx/broadcast/resolvers/cosmos.d.ts.map +1 -1
  29. package/dist/tx/broadcast/resolvers/cosmos.js +33 -31
  30. package/dist/tx/broadcast/resolvers/cosmos.js.map +1 -1
  31. package/dist/tx/broadcast/resolvers/evm.d.ts.map +1 -1
  32. package/dist/tx/broadcast/resolvers/evm.js +21 -9
  33. package/dist/tx/broadcast/resolvers/evm.js.map +1 -1
  34. package/dist/tx/broadcast/resolvers/polkadot.d.ts.map +1 -1
  35. package/dist/tx/broadcast/resolvers/polkadot.js +23 -4
  36. package/dist/tx/broadcast/resolvers/polkadot.js.map +1 -1
  37. package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
  38. package/dist/tx/broadcast/resolvers/qbtc.js +69 -52
  39. package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
  40. package/dist/tx/broadcast/resolvers/ripple.d.ts.map +1 -1
  41. package/dist/tx/broadcast/resolvers/ripple.js +24 -9
  42. package/dist/tx/broadcast/resolvers/ripple.js.map +1 -1
  43. package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
  44. package/dist/tx/broadcast/resolvers/solana.js +19 -10
  45. package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
  46. package/dist/tx/broadcast/resolvers/sui.d.ts.map +1 -1
  47. package/dist/tx/broadcast/resolvers/sui.js +20 -14
  48. package/dist/tx/broadcast/resolvers/sui.js.map +1 -1
  49. package/dist/tx/broadcast/resolvers/ton.d.ts.map +1 -1
  50. package/dist/tx/broadcast/resolvers/ton.js +16 -5
  51. package/dist/tx/broadcast/resolvers/ton.js.map +1 -1
  52. package/dist/tx/broadcast/resolvers/tron.d.ts.map +1 -1
  53. package/dist/tx/broadcast/resolvers/tron.js +15 -6
  54. package/dist/tx/broadcast/resolvers/tron.js.map +1 -1
  55. package/dist/tx/broadcast/resolvers/utxo.d.ts.map +1 -1
  56. package/dist/tx/broadcast/resolvers/utxo.js +27 -17
  57. package/dist/tx/broadcast/resolvers/utxo.js.map +1 -1
  58. package/dist/tx/broadcast/transientRetry.d.ts.map +1 -1
  59. package/dist/tx/broadcast/transientRetry.js +4 -2
  60. package/dist/tx/broadcast/transientRetry.js.map +1 -1
  61. package/dist/tx/broadcast/verifyBroadcastByHash.d.ts +1 -1
  62. package/dist/tx/broadcast/verifyBroadcastByHash.d.ts.map +1 -1
  63. package/dist/tx/broadcast/verifyBroadcastByHash.js +1 -1
  64. package/dist/tx/broadcast/verifyBroadcastByHash.js.map +1 -1
  65. package/package.json +6 -1
@@ -2,6 +2,8 @@ import { qbtcRestUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintR
2
2
  import { waitForQbtcTxInclusion } from '@vultisig/core-chain/chains/cosmos/qbtc/waitForQbtcTxInclusion';
3
3
  import { attempt } from '@vultisig/lib-utils/attempt';
4
4
  import { isInError } from '@vultisig/lib-utils/error/isInError';
5
+ import { HttpResponseError } from '@vultisig/lib-utils/fetch/HttpResponseError';
6
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
5
7
  import { DeliverTxFailedError } from '../transientRetry.js';
6
8
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
7
9
  // QBTC block time is ~5-7s; give a DeliverTx a generous window to land before treating the tx as
@@ -9,61 +11,76 @@ import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
9
11
  const QBTC_INCLUSION_TIMEOUT_MS = 30_000;
10
12
  const QBTC_INCLUSION_POLL_INTERVAL_MS = 1_000;
11
13
  export const broadcastQbtcTx = async ({ chain, tx }) => {
12
- const { serialized } = tx;
13
- const { tx_bytes } = JSON.parse(serialized);
14
- const resp = await fetch(`${qbtcRestUrl}/cosmos/tx/v1beta1/txs`, {
15
- method: 'POST',
16
- headers: { 'Content-Type': 'application/json' },
17
- body: JSON.stringify({
18
- tx_bytes,
19
- mode: 'BROADCAST_MODE_SYNC',
20
- }),
21
- });
22
- if (!resp.ok) {
23
- const text = await resp.text();
24
- if (isInError(text, 'tx already exists in cache')) {
25
- return;
14
+ try {
15
+ const { serialized } = tx;
16
+ const { tx_bytes } = JSON.parse(serialized);
17
+ const resp = await fetch(`${qbtcRestUrl}/cosmos/tx/v1beta1/txs`, {
18
+ method: 'POST',
19
+ headers: { 'Content-Type': 'application/json' },
20
+ body: JSON.stringify({
21
+ tx_bytes,
22
+ mode: 'BROADCAST_MODE_SYNC',
23
+ }),
24
+ });
25
+ if (!resp.ok) {
26
+ const text = await resp.text();
27
+ if (isInError(text, 'tx already exists in cache')) {
28
+ return broadcastAccepted();
29
+ }
30
+ const err = new HttpResponseError({
31
+ message: `QBTC broadcast failed (${resp.status}): ${text}`,
32
+ status: resp.status,
33
+ statusText: resp.statusText,
34
+ url: resp.url || `${qbtcRestUrl}/cosmos/tx/v1beta1/txs`,
35
+ body: text,
36
+ });
37
+ try {
38
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error: err }));
39
+ }
40
+ catch (cause) {
41
+ return broadcastFailed(cause, isRetryableBroadcastCause(err));
42
+ }
26
43
  }
27
- const err = new Error(`QBTC broadcast failed (${resp.status}): ${text}`);
28
- await verifyBroadcastByHash({ chain, tx, error: err });
29
- return;
30
- }
31
- const data = (await resp.json());
32
- const checkTx = data.tx_response;
33
- // CheckTx (mempool admission). A missing code, or a non-zero code, is NOT a confirmed on-chain
34
- // state verify by hash rather than trusting it. Reading it as `code && code !== 0` (the old
35
- // guard) treated a MISSING tx_response as a silent success: half of this false-success bug.
36
- if (typeof checkTx?.code !== 'number' || checkTx.code !== 0) {
37
- const log = checkTx?.raw_log || checkTx?.log;
38
- if (log && isInError(log, 'tx already exists in cache')) {
39
- return;
44
+ const data = (await resp.json());
45
+ const checkTx = data.tx_response;
46
+ if (typeof checkTx?.code !== 'number' || checkTx.code !== 0) {
47
+ const log = checkTx?.raw_log || checkTx?.log;
48
+ if (log && isInError(log, 'tx already exists in cache')) {
49
+ return broadcastAccepted();
50
+ }
51
+ const error = new Error(`QBTC CheckTx failed: ${log ?? 'missing tx_response.code'}`);
52
+ try {
53
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
54
+ }
55
+ catch (cause) {
56
+ return broadcastFailed(cause, false);
57
+ }
40
58
  }
41
- const err = new Error(`QBTC CheckTx failed: ${log ?? 'missing tx_response.code'}`);
42
- await verifyBroadcastByHash({ chain, tx, error: err });
43
- return;
44
- }
45
- // CheckTx passed but BROADCAST_MODE_SYNC only surfaces CheckTx. A DeliverTx failure (out-of-gas,
46
- // execution revert) still comes back code=0 HERE, so returning now would report an on-chain tx that
47
- // moved nothing as a success. Poll for inclusion and re-check the DeliverTx code (mirrors the QBTC
48
- // claim helper, broadcastClaimTx). A CONFIRMED DeliverTx failure throws a non-retryable
49
- // DeliverTxFailedError; if we cannot confirm within the window (timeout / transient RPC error) the
50
- // tx is in the mempool, not failed, so leave it in-flight — the status resolver reports the final
51
- // code.
52
- const txHash = checkTx.txhash;
53
- if (!txHash) {
54
- await verifyBroadcastByHash({ chain, tx, error: new Error('QBTC broadcast: missing txhash on CheckTx response') });
55
- return;
56
- }
57
- const { data: included, error: inclusionError } = await attempt(waitForQbtcTxInclusion({
58
- txHash,
59
- timeoutMs: QBTC_INCLUSION_TIMEOUT_MS,
60
- intervalMs: QBTC_INCLUSION_POLL_INTERVAL_MS,
61
- }));
62
- if (inclusionError || included === undefined || typeof included.code !== 'number') {
63
- return;
59
+ const txHash = checkTx.txhash;
60
+ if (!txHash) {
61
+ const error = new Error('QBTC broadcast: missing txhash on CheckTx response');
62
+ try {
63
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
64
+ }
65
+ catch (cause) {
66
+ return broadcastFailed(cause, false);
67
+ }
68
+ }
69
+ const { data: included, error: inclusionError } = await attempt(waitForQbtcTxInclusion({
70
+ txHash,
71
+ timeoutMs: QBTC_INCLUSION_TIMEOUT_MS,
72
+ intervalMs: QBTC_INCLUSION_POLL_INTERVAL_MS,
73
+ }));
74
+ if (inclusionError || included === undefined || typeof included.code !== 'number') {
75
+ return broadcastAccepted(txHash);
76
+ }
77
+ if (included.code !== 0) {
78
+ return broadcastFailed(new DeliverTxFailedError(`QBTC transaction execution failed: ${included.raw_log || included.log}`), false);
79
+ }
80
+ return broadcastAccepted(txHash, { provider: included });
64
81
  }
65
- if (included.code !== 0) {
66
- throw new DeliverTxFailedError(`QBTC transaction execution failed: ${included.raw_log || included.log}`);
82
+ catch (cause) {
83
+ return broadcastFailed(cause, isRetryableBroadcastCause(cause));
67
84
  }
68
85
  };
69
86
  //# sourceMappingURL=qbtc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qbtc.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/qbtc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qbtc.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/qbtc.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AA8BjD,eAAO,MAAM,4BAA4B,GAAI,cAAc,MAAM,KAAG,OAAuC,CAAA;AAE3G,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,UAAU,CAAC,MAAM,CA0CpE,CAAA"}
1
+ {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AA8BhH,eAAO,MAAM,4BAA4B,GAAI,cAAc,MAAM,KAAG,OAAuC,CAAA;AAE3G,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAqDpE,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { getRippleClient } from '@vultisig/core-chain/chains/ripple/client';
2
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
2
3
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
3
4
  /**
4
5
  * Engine result codes from XRPL `submit` that indicate the tx may already
@@ -28,7 +29,13 @@ import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
28
29
  const PEER_RACE_ENGINE_RESULTS = new Set(['tefALREADY', 'tefPAST_SEQ']);
29
30
  export const isRippleInFlightEngineResult = (engineResult) => engineResult === 'terQUEUED';
30
31
  export const broadcastRippleTx = async ({ chain, tx }) => {
31
- const client = await getRippleClient();
32
+ let client;
33
+ try {
34
+ client = await getRippleClient();
35
+ }
36
+ catch (cause) {
37
+ return broadcastFailed(cause, isRetryableBroadcastCause(cause));
38
+ }
32
39
  // RPC-level errors (network blip, connection drop) get the safety-net
33
40
  // verify-by-hash path: another peer's broadcast may have landed the tx.
34
41
  let response;
@@ -39,13 +46,17 @@ export const broadcastRippleTx = async ({ chain, tx }) => {
39
46
  });
40
47
  }
41
48
  catch (error) {
42
- await verifyBroadcastByHash({ chain, tx, error });
43
- return;
49
+ try {
50
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
51
+ }
52
+ catch (cause) {
53
+ return broadcastFailed(cause, isRetryableBroadcastCause(error));
54
+ }
44
55
  }
45
56
  const engineResultCode = response?.result?.engine_result_code;
46
57
  if (typeof engineResultCode !== 'number' || engineResultCode === 0) {
47
58
  // tesSUCCESS (applied / queued for next ledger). All good.
48
- return;
59
+ return broadcastAccepted(response?.result?.tx_json?.hash);
49
60
  }
50
61
  const engineResult = response.result.engine_result ?? 'unknown';
51
62
  const engineResultMessage = response.result.engine_result_message ?? '';
@@ -53,14 +64,18 @@ export const broadcastRippleTx = async ({ chain, tx }) => {
53
64
  if (PEER_RACE_ENGINE_RESULTS.has(engineResult)) {
54
65
  // Duplicate / past-sequence: fast MPC peer's broadcast may have
55
66
  // already landed the tx. Verify before swallowing.
56
- await verifyBroadcastByHash({ chain, tx, error });
57
- return;
67
+ try {
68
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
69
+ }
70
+ catch (cause) {
71
+ return broadcastFailed(cause, false);
72
+ }
58
73
  }
59
74
  if (isRippleInFlightEngineResult(engineResult)) {
60
- return;
75
+ return broadcastAccepted(response?.result?.tx_json?.hash);
61
76
  }
62
77
  // Authoritative rejection at preflight (tem*/tec*/tel*/remaining ter*/remaining tef*).
63
- // Propagate so the caller sees the real failure instead of a fake hash.
64
- throw error;
78
+ // Return it through the shared contract so callers never receive a raw throw.
79
+ return broadcastFailed(error, false);
65
80
  };
66
81
  //# sourceMappingURL=ripple.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAA;AAEvE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,YAAoB,EAAW,EAAE,CAAC,YAAY,KAAK,WAAW,CAAA;AAE3G,MAAM,CAAC,MAAM,iBAAiB,GAA2C,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/F,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;IAEtC,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,QAAQ,CAAA;IACZ,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAC9B,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;SACjD,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAA;IAC7D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QACnE,2DAA2D;QAC3D,OAAM;IACR,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAA;IAC/D,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAA;IACvE,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,8BAA8B,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtG,CAAA;IAED,IAAI,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,gEAAgE;QAChE,mDAAmD;QACnD,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,IAAI,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,OAAM;IACR,CAAC;IAED,uFAAuF;IACvF,wEAAwE;IACxE,MAAM,KAAK,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ripple.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAuDjD,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,UAAU,CAAC,MAAM,CA2CpE,CAAA"}
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAwDhH,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAiDpE,CAAA"}
@@ -3,6 +3,7 @@ import { getSolanaClient } from '@vultisig/core-chain/chains/solana/client';
3
3
  import { sendJitoTransaction } from '@vultisig/core-chain/chains/solana/jito';
4
4
  import { isInError } from '@vultisig/lib-utils/error/isInError';
5
5
  import base58 from 'bs58';
6
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
6
7
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
7
8
  const solanaStandardRpcMaxAttempts = 3;
8
9
  const solanaStandardRpcRetryDelayMs = 500;
@@ -33,11 +34,10 @@ const sendSolanaRawTransaction = async (rawTransaction) => {
33
34
  const client = getSolanaClient();
34
35
  for (let attempt = 1; attempt <= solanaStandardRpcMaxAttempts; attempt++) {
35
36
  try {
36
- await client.sendRawTransaction(rawTransaction, {
37
+ return await client.sendRawTransaction(rawTransaction, {
37
38
  skipPreflight: false,
38
39
  preflightCommitment: 'confirmed',
39
40
  });
40
- return;
41
41
  }
42
42
  catch (error) {
43
43
  if (isTransientBlockhashError(error) && attempt < solanaStandardRpcMaxAttempts) {
@@ -47,9 +47,16 @@ const sendSolanaRawTransaction = async (rawTransaction) => {
47
47
  throw error;
48
48
  }
49
49
  }
50
+ throw new Error('Solana broadcast retry loop exhausted');
50
51
  };
51
52
  export const broadcastSolanaTx = async ({ chain, tx }) => {
52
- const rawTransaction = base58.decode(tx.encoded);
53
+ let rawTransaction;
54
+ try {
55
+ rawTransaction = base58.decode(tx.encoded);
56
+ }
57
+ catch (cause) {
58
+ return broadcastFailed(cause, false);
59
+ }
53
60
  // Try JITO first for MEV protection, but still relay through standard RPC.
54
61
  // JITO can accept sendTransaction without the signature later appearing in
55
62
  // public Solana history, so standard RPC propagation is the durable signal.
@@ -60,7 +67,7 @@ export const broadcastSolanaTx = async ({ chain, tx }) => {
60
67
  console.warn('[solana] JITO sendTransaction failed, falling back to standard RPC:', err);
61
68
  }
62
69
  try {
63
- await sendSolanaRawTransaction(rawTransaction);
70
+ return broadcastAccepted(await sendSolanaRawTransaction(rawTransaction));
64
71
  }
65
72
  catch (error) {
66
73
  // A duplicate-signature error means the node already accepted this exact
@@ -83,13 +90,15 @@ export const broadcastSolanaTx = async ({ chain, tx }) => {
83
90
  // raw-SDK consumer that broadcasts and skips that confirmation poll is
84
91
  // exposed to the optimistic result; the CLI agent always confirms.
85
92
  if (isInError(error, 'already been processed', 'AlreadyProcessed')) {
86
- return;
93
+ return broadcastAccepted();
94
+ }
95
+ const cause = withSolanaBroadcastReason(error);
96
+ try {
97
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error: cause }));
98
+ }
99
+ catch (verifiedCause) {
100
+ return broadcastFailed(verifiedCause, isTransientBlockhashError(error) || isRetryableBroadcastCause(error));
87
101
  }
88
- await verifyBroadcastByHash({
89
- chain,
90
- tx,
91
- error: withSolanaBroadcastReason(error),
92
- });
93
102
  }
94
103
  };
95
104
  //# sourceMappingURL=solana.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/solana.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/sui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAGL,wBAAwB,EACzB,MAAM,mDAAmD,CAAA;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,oBAAoB,GAAI,QAAQ,wBAAwB,GAAG,IAAI,GAAG,SAAS,KAAG,IAI1F,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAkC9D,CAAA"}
1
+ {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/sui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAIL,wBAAwB,EACzB,MAAM,mDAAmD,CAAA;AAG1D,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAIhH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,wBAAwB,GAAG,IAAI,GAAG,SAAS,KAAG,IAI1F,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAuC9D,CAAA"}
@@ -1,7 +1,8 @@
1
1
  import { fromBase64 } from '@mysten/sui/utils';
2
2
  import { getSuiClient } from '@vultisig/core-chain/chains/sui/client';
3
- import { describeSuiExecutionFailure, isSuiExecutionSuccess, } from '@vultisig/core-chain/chains/sui/transactionResult';
3
+ import { describeSuiExecutionFailure, getSuiResultTransaction, isSuiExecutionSuccess, } from '@vultisig/core-chain/chains/sui/transactionResult';
4
4
  import { attempt } from '@vultisig/lib-utils/attempt';
5
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
5
6
  import { DeliverTxFailedError } from '../transientRetry.js';
6
7
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
7
8
  export const assertSuiTxSucceeded = (result) => {
@@ -10,21 +11,21 @@ export const assertSuiTxSucceeded = (result) => {
10
11
  throw new DeliverTxFailedError(`Sui transaction failed on-chain: ${describeSuiExecutionFailure(result)}`);
11
12
  };
12
13
  export const broadcastSuiTx = async ({ chain, tx }) => {
13
- const { data: response, error } = await attempt(getSuiClient().executeTransaction({
14
+ const result = await attempt(Promise.resolve().then(() => getSuiClient().executeTransaction({
14
15
  transaction: fromBase64(tx.unsignedTx),
15
16
  signatures: [tx.signature],
16
- // sdk#1398: without requesting effects, execution resolves with a digest even when the tx
17
- // executed but ABORTED (MoveAbort / InsufficientGas) — an RPC-level success that is NOT
18
- // execution success. Ask for effects so we can tell the two apart.
19
17
  include: { effects: true },
20
- }));
21
- if (error) {
22
- await verifyBroadcastByHash({ chain, tx, error });
23
- return;
24
- }
25
- if (!response) {
26
- return;
18
+ })));
19
+ if ('error' in result) {
20
+ const { error } = result;
21
+ try {
22
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
23
+ }
24
+ catch (cause) {
25
+ return broadcastFailed(cause, isRetryableBroadcastCause(error));
26
+ }
27
27
  }
28
+ const response = result.data;
28
29
  // Mirror the status resolver (status/resolvers/sui.ts): ONLY an explicit `$kind: 'Transaction'`
29
30
  // with `status.success === true` is execution success. A `FailedTransaction` (MoveAbort /
30
31
  // InsufficientGas) — or a missing/unknown status — must NOT be returned as a digest-carrying
@@ -35,7 +36,12 @@ export const broadcastSuiTx = async ({ chain, tx }) => {
35
36
  // `instanceof` BEFORE its message-regex runs: a Sui abort error string routinely contains
36
37
  // "aborted"/"timed out", which the transient patterns match — a bare Error would be misclassified
37
38
  // as transient and the aborted tx re-sent by withTransientBroadcastRetry.
38
- assertSuiTxSucceeded(response);
39
- return response;
39
+ try {
40
+ assertSuiTxSucceeded(response);
41
+ }
42
+ catch (cause) {
43
+ return broadcastFailed(cause, false, { provider: response });
44
+ }
45
+ return broadcastAccepted(getSuiResultTransaction(response)?.digest, { provider: response });
40
46
  };
41
47
  //# sourceMappingURL=sui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sui.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/sui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GAEtB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAGrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAmD,EAAQ,EAAE;IAChG,IAAI,qBAAqB,CAAC,MAAM,CAAC;QAAE,OAAM;IAEzC,MAAM,IAAI,oBAAoB,CAAC,oCAAoC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAC3G,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAwC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACzF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7C,YAAY,EAAE,CAAC,kBAAkB,CAAC;QAChC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC;QACtC,UAAU,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1B,0FAA0F;QAC1F,wFAAwF;QACxF,mEAAmE;QACnE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAC3B,CAAC,CACH,CAAA;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAM;IACR,CAAC;IAED,gGAAgG;IAChG,0FAA0F;IAC1F,6FAA6F;IAC7F,gGAAgG;IAChG,+FAA+F;IAC/F,EAAE;IACF,mGAAmG;IACnG,0FAA0F;IAC1F,kGAAkG;IAClG,0EAA0E;IAC1E,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAE9B,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"sui.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/sui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAuB,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAmD,EAAQ,EAAE;IAChG,IAAI,qBAAqB,CAAC,MAAM,CAAC;QAAE,OAAM;IAEzC,MAAM,IAAI,oBAAoB,CAAC,oCAAoC,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAC3G,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAwC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAC1B,YAAY,EAAE,CAAC,kBAAkB,CAAC;QAChC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC;QACtC,UAAU,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAC1B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAC3B,CAAC,CACH,CACF,CAAA;IAED,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QACxB,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;IAE5B,gGAAgG;IAChG,0FAA0F;IAC1F,6FAA6F;IAC7F,gGAAgG;IAChG,+FAA+F;IAC/F,EAAE;IACF,mGAAmG;IACnG,0FAA0F;IAC1F,kGAAkG;IAClG,0EAA0E;IAC1E,IAAI,CAAC;QACH,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,iBAAiB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC7F,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAkB9D,CAAA"}
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAGhH,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,CA2B9D,CAAA"}
@@ -2,18 +2,29 @@ import { rootApiUrl } from '@vultisig/core-config';
2
2
  import { attempt } from '@vultisig/lib-utils/attempt';
3
3
  import { isInError } from '@vultisig/lib-utils/error/isInError';
4
4
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
5
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
5
6
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
6
7
  export const broadcastTonTx = async ({ chain, tx }) => {
7
8
  const url = `${rootApiUrl}/ton/v2/sendBocReturnHash`;
8
- const { error } = await attempt(queryUrl(url, {
9
+ const result = await attempt(queryUrl(url, {
9
10
  body: { boc: tx.encoded },
10
11
  }));
11
- if (!error) {
12
- return;
12
+ const hash = result.data?.result?.hash;
13
+ if (hash) {
14
+ return broadcastAccepted(hash);
13
15
  }
16
+ const responseMissingHash = result.data !== undefined;
17
+ const error = responseMissingHash
18
+ ? new Error('TON broadcast failed: missing transaction hash in response')
19
+ : result.error;
14
20
  if (isInError(error, 'duplicate message', 'duplicate msg_seqno')) {
15
- return;
21
+ return broadcastAccepted();
22
+ }
23
+ try {
24
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
25
+ }
26
+ catch (cause) {
27
+ return broadcastFailed(cause, responseMissingHash ? false : isRetryableBroadcastCause(error));
16
28
  }
17
- await verifyBroadcastByHash({ chain, tx, error });
18
29
  };
19
30
  //# sourceMappingURL=ton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAG7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAwC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACzF,MAAM,GAAG,GAAG,GAAG,UAAU,2BAA2B,CAAA;IAEpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7B,QAAQ,CAA+B,GAAG,EAAE;QAC1C,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE;KAC1B,CAAC,CACH,CAAA;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAM;IACR,CAAC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,CAAC;QACjE,OAAM;IACR,CAAC;IAED,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;AACnD,CAAC,CAAA"}
1
+ {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/ton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAuB,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAwC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACzF,MAAM,GAAG,GAAG,GAAG,UAAU,2BAA2B,CAAA;IAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,QAAQ,CAAiC,GAAG,EAAE;QAC5C,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE;KAC1B,CAAC,CACH,CAAA;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAA;IACtC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAA;IACrD,MAAM,KAAK,GAAG,mBAAmB;QAC/B,CAAC,CAAC,IAAI,KAAK,CAAC,4DAA4D,CAAC;QACzE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;IAChB,IAAI,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,CAAC;QACjE,OAAO,iBAAiB,EAAE,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/F,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAIvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,eAAO,MAAM,eAAe,EAAE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAuBhE,CAAA"}
1
+ {"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/tron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAIvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAGhH,eAAO,MAAM,eAAe,EAAE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CA6BhE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
2
  import { tronRpcUrl } from '../../../chains/tron/config.js';
3
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
3
4
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
4
5
  export const broadcastTronTx = async ({ chain, tx }) => {
5
6
  try {
@@ -10,15 +11,23 @@ export const broadcastTronTx = async ({ chain, tx }) => {
10
11
  const msg = result.message
11
12
  ? Buffer.from(result.message, 'hex').toString('utf8')
12
13
  : (result.code ?? 'Unknown error');
13
- throw new Error(`Tron broadcast failed: ${msg}`);
14
+ const error = new Error(`Tron broadcast failed: ${msg}`);
15
+ try {
16
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
17
+ }
18
+ catch (cause) {
19
+ return broadcastFailed(cause, false);
20
+ }
14
21
  }
15
- // Return the tx hash string, consistent with the other broadcast resolvers (which return a hash
16
- // or void) rather than the full RPC envelope. The SDK's BroadcastService discards this return and
17
- // derives the hash itself, so no consumer reads the object — this is a shape-consistency fix.
18
- return result.txid;
22
+ return broadcastAccepted(result.txid);
19
23
  }
20
24
  catch (error) {
21
- await verifyBroadcastByHash({ chain, tx, error });
25
+ try {
26
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
27
+ }
28
+ catch (cause) {
29
+ return broadcastFailed(cause, isRetryableBroadcastCause(error));
30
+ }
22
31
  }
23
32
  };
24
33
  //# sourceMappingURL=tron.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tron.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/tron.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAyC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,GAAG,UAAU,8BAA8B,EAC3C;YACE,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CACF,CAAA;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;gBACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrD,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,eAAe,CAAC,CAAA;YACpC,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAA;QAClD,CAAC;QAED,gGAAgG;QAChG,kGAAkG;QAClG,8FAA8F;QAC9F,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"tron.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/tron.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAuB,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAyC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,GAAG,UAAU,8BAA8B,EAC3C;YACE,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CACF,CAAA;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;gBACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrD,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,eAAe,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAA;YACxD,IAAI,CAAC;gBACH,OAAO,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;YAC7E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"utxo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/utxo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAOlF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,KAAK,kBAAkB,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAetF,eAAO,MAAM,eAAe,EAAE,mBAAmB,CAAC,cAAc,CAuB/D,CAAA;AAQD,eAAO,MAAM,kBAAkB,GAAI,OAAO,cAAc,EAAE,IAAI,kBAAkB,KAAG,UAKlF,CAAA"}
1
+ {"version":3,"file":"utxo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/utxo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAOlF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAGhH,KAAK,kBAAkB,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAetF,eAAO,MAAM,eAAe,EAAE,mBAAmB,CAAC,cAAc,CA8B/D,CAAA;AAQD,eAAO,MAAM,kBAAkB,GAAI,OAAO,cAAc,EAAE,IAAI,kBAAkB,KAAG,UAKlF,CAAA"}
@@ -3,26 +3,36 @@ import { extractErrorMsg } from '@vultisig/lib-utils/error/extractErrorMsg';
3
3
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
4
4
  import { getChainKind } from '../../../ChainKind.js';
5
5
  import { getBlockchairBaseUrl } from '../../../chains/utxo/client/getBlockchairBaseUrl.js';
6
+ import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
6
7
  import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
7
8
  export const broadcastUtxoTx = async ({ chain, tx }) => {
8
- const url = `${getBlockchairBaseUrl(chain)}/push/transaction`;
9
- const encodedBytes = selectEncodedBytes(chain, tx);
10
- const response = await queryUrl(url, {
11
- body: {
12
- data: Buffer.from(encodedBytes).toString('hex'),
13
- },
14
- });
15
- if (response.data) {
16
- return response.data.transaction_hash;
9
+ try {
10
+ const url = `${getBlockchairBaseUrl(chain)}/push/transaction`;
11
+ const encodedBytes = selectEncodedBytes(chain, tx);
12
+ const response = await queryUrl(url, {
13
+ body: {
14
+ data: Buffer.from(encodedBytes).toString('hex'),
15
+ },
16
+ });
17
+ if (response.data) {
18
+ return broadcastAccepted(response.data.transaction_hash);
19
+ }
20
+ const error = 'context' in response ? response.context.error : extractErrorMsg(response);
21
+ // Any submit error past this point is ambiguous — it could be a benign MPC-race duplicate (another
22
+ // device already broadcast the same signed tx) OR a genuine failure (e.g. BadInputsUTxO: spent/invalid
23
+ // inputs). String-matching alone can't tell them apart, so verify against the real chain: the hash
24
+ // either resolves on-chain (the race case — success) or it doesn't (the real failure — returns it).
25
+ const broadcastError = new Error(`Failed to broadcast transaction: ${extractErrorMsg(error)}`);
26
+ try {
27
+ return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error: broadcastError }));
28
+ }
29
+ catch (cause) {
30
+ return broadcastFailed(cause, isRetryableBroadcastCause(broadcastError));
31
+ }
32
+ }
33
+ catch (cause) {
34
+ return broadcastFailed(cause, isRetryableBroadcastCause(cause));
17
35
  }
18
- const error = 'context' in response ? response.context.error : extractErrorMsg(response);
19
- // Any submit error past this point is ambiguous — it could be a benign MPC-race duplicate (another
20
- // device already broadcast the same signed tx) OR a genuine failure (e.g. BadInputsUTxO: spent/invalid
21
- // inputs). String-matching alone can't tell them apart, so verify against the real chain: the hash
22
- // either resolves on-chain (the race case — success) or it doesn't (the real failure — rethrows).
23
- const broadcastError = new Error(`Failed to broadcast transaction: ${extractErrorMsg(error)}`);
24
- await verifyBroadcastByHash({ chain, tx, error: broadcastError });
25
- return null;
26
36
  };
27
37
  const hasSigningResultV2 = (tx) => tx != null && typeof tx === 'object' && 'signingResultV2' in tx && !!tx.signingResultV2;
28
38
  export const selectEncodedBytes = (chain, tx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"utxo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/utxo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAA;AAGvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAiBhE,MAAM,CAAC,MAAM,eAAe,GAAwC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1F,MAAM,GAAG,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,mBAAmB,CAAA;IAC7D,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,EAAwB,CAAC,CAAA;IAExE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA8B,GAAG,EAAE;QAChE,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;SAChD;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAA;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;IAExF,mGAAmG;IACnG,uGAAuG;IACvG,mGAAmG;IACnG,kGAAkG;IAClG,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,oCAAoC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9F,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;IACjE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CACzB,EAAsB,EAGtB,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,iBAAiB,IAAI,EAAE,IAAI,CAAC,CAAE,EAAU,CAAC,eAAe,CAAA;AAErG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAqB,EAAE,EAAsB,EAAc,EAAE;IAC9F,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC3F,OAAO,eAAe,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC,CAAA"}
1
+ {"version":3,"file":"utxo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/utxo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAA;AAEvF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAuB,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAiBhE,MAAM,CAAC,MAAM,eAAe,GAAwC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1F,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,mBAAmB,CAAA;QAC7D,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,EAAwB,CAAC,CAAA;QAExE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA8B,GAAG,EAAE;YAChE,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;aAChD;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAExF,mGAAmG;QACnG,uGAAuG;QACvG,mGAAmG;QACnG,oGAAoG;QACpG,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,oCAAoC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9F,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QAC7F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,EAAE,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;IACjE,CAAC;AACH,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CACzB,EAAsB,EAGtB,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,iBAAiB,IAAI,EAAE,IAAI,CAAC,CAAE,EAAU,CAAC,eAAe,CAAA;AAErG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAqB,EAAE,EAAsB,EAAc,EAAE;IAC9F,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC3F,OAAO,eAAe,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"transientRetry.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/transientRetry.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAuE1C,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,OA2C1D,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,CAAC,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAkB3F,CAAA"}
1
+ {"version":3,"file":"transientRetry.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/transientRetry.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAyE1C,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,OA2C1D,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,CAAC,EAAE,WAAW,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAkB3F,CAAA"}