@vultisig/core-chain 2.39.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.
- package/CHANGELOG.md +6 -0
- package/dist/tx/broadcast/index.d.ts +2 -0
- package/dist/tx/broadcast/index.d.ts.map +1 -1
- package/dist/tx/broadcast/index.js +34 -3
- package/dist/tx/broadcast/index.js.map +1 -1
- package/dist/tx/broadcast/resolver.d.ts +35 -1
- package/dist/tx/broadcast/resolver.d.ts.map +1 -1
- package/dist/tx/broadcast/resolver.js +42 -1
- package/dist/tx/broadcast/resolver.js.map +1 -1
- package/dist/tx/broadcast/resolvers/bittensor.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/bittensor.js +17 -6
- package/dist/tx/broadcast/resolvers/bittensor.js.map +1 -1
- package/dist/tx/broadcast/resolvers/cardano.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/cardano.js +26 -16
- package/dist/tx/broadcast/resolvers/cardano.js.map +1 -1
- package/dist/tx/broadcast/resolvers/cosmos.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/cosmos.js +33 -31
- package/dist/tx/broadcast/resolvers/cosmos.js.map +1 -1
- package/dist/tx/broadcast/resolvers/evm.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/evm.js +21 -9
- package/dist/tx/broadcast/resolvers/evm.js.map +1 -1
- package/dist/tx/broadcast/resolvers/polkadot.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/polkadot.js +23 -4
- package/dist/tx/broadcast/resolvers/polkadot.js.map +1 -1
- package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/qbtc.js +69 -52
- package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
- package/dist/tx/broadcast/resolvers/ripple.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/ripple.js +24 -9
- package/dist/tx/broadcast/resolvers/ripple.js.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.js +19 -10
- package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
- package/dist/tx/broadcast/resolvers/sui.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/sui.js +20 -14
- package/dist/tx/broadcast/resolvers/sui.js.map +1 -1
- package/dist/tx/broadcast/resolvers/ton.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/ton.js +16 -5
- package/dist/tx/broadcast/resolvers/ton.js.map +1 -1
- package/dist/tx/broadcast/resolvers/tron.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/tron.js +15 -6
- package/dist/tx/broadcast/resolvers/tron.js.map +1 -1
- package/dist/tx/broadcast/resolvers/utxo.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/utxo.js +27 -17
- package/dist/tx/broadcast/resolvers/utxo.js.map +1 -1
- package/dist/tx/broadcast/transientRetry.d.ts.map +1 -1
- package/dist/tx/broadcast/transientRetry.js +4 -2
- package/dist/tx/broadcast/transientRetry.js.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.d.ts +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.d.ts.map +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.js +1 -1
- package/dist/tx/broadcast/verifyBroadcastByHash.js.map +1 -1
- package/package.json +1 -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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAA;AACvG,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
//
|
|
64
|
-
|
|
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;
|
|
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,
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,MAAM,MAAM,MAAM,CAAA;
|
|
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,
|
|
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
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
39
|
-
|
|
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;
|
|
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,
|
|
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
|
|
9
|
+
const result = await attempt(queryUrl(url, {
|
|
9
10
|
body: { boc: tx.encoded },
|
|
10
11
|
}));
|
|
11
|
-
|
|
12
|
-
|
|
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;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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,
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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;
|
|
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;
|
|
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"}
|