@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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 3.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [#1891](https://github.com/vultisig/vultisig-sdk/pull/1891) [`7d6a014`](https://github.com/vultisig/vultisig-sdk/commit/7d6a01440fd0b855356cce81469b5b5a91665862) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Standardize signed-transaction broadcast adapters on one typed accepted-or-failed result contract.
|
|
8
|
+
|
|
3
9
|
## 2.39.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { BroadcastTxResolver } from './resolver.js';
|
|
2
|
+
export type { BroadcastAcceptedResult, BroadcastFailedResult, BroadcastProviderDetails, BroadcastTxResolver, BroadcastTxResult, } from './resolver.js';
|
|
3
|
+
export { BroadcastErrorCode } from './resolver.js';
|
|
2
4
|
export declare const broadcastTx: BroadcastTxResolver;
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,mBAAmB,EAAkD,MAAM,YAAY,CAAA;AAgCjH,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,WAAW,EAAE,mBAoCzB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getChainKind } from '@vultisig/core-chain/ChainKind';
|
|
2
|
+
import { broadcastFailed, isBroadcastTxResult, isRetryableBroadcastCause } from './resolver.js';
|
|
2
3
|
import { broadcastBittensorTx } from './resolvers/bittensor.js';
|
|
3
4
|
import { broadcastCardanoTx } from './resolvers/cardano.js';
|
|
4
5
|
import { broadcastCosmosTx } from './resolvers/cosmos.js';
|
|
@@ -27,12 +28,42 @@ const resolvers = {
|
|
|
27
28
|
tron: broadcastTronTx,
|
|
28
29
|
};
|
|
29
30
|
const hasResolverOwnedRetry = (chainKind) => chainKind === 'evm' || chainKind === 'solana';
|
|
30
|
-
export
|
|
31
|
+
export { BroadcastErrorCode } from './resolver.js';
|
|
32
|
+
export const broadcastTx = async (input) => {
|
|
31
33
|
const chainKind = getChainKind(input.chain);
|
|
32
34
|
const resolver = resolvers[chainKind];
|
|
35
|
+
const resolveOnce = async () => {
|
|
36
|
+
try {
|
|
37
|
+
const result = await resolver(input);
|
|
38
|
+
if (isBroadcastTxResult(result))
|
|
39
|
+
return result;
|
|
40
|
+
return broadcastFailed(new Error('Broadcast resolver returned an invalid result'), false, {
|
|
41
|
+
provider: result,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (cause) {
|
|
45
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(cause));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
33
48
|
if (hasResolverOwnedRetry(chainKind)) {
|
|
34
|
-
return
|
|
49
|
+
return resolveOnce();
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
return await withTransientBroadcastRetry(async () => {
|
|
53
|
+
const result = await resolveOnce();
|
|
54
|
+
if (result.status === 'failed' && result.retryable)
|
|
55
|
+
throw result;
|
|
56
|
+
return result;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (cause) {
|
|
60
|
+
if (isBroadcastTxResult(cause))
|
|
61
|
+
return cause;
|
|
62
|
+
// The public boundary is total even if a future resolver forgets to
|
|
63
|
+
// normalize an exception. Default to non-retryable unless the cause is a
|
|
64
|
+
// recognizable transport failure; blindly retrying an ambiguous signed
|
|
65
|
+
// transaction can double-submit it.
|
|
66
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(cause));
|
|
35
67
|
}
|
|
36
|
-
return withTransientBroadcastRetry(() => resolver(input));
|
|
37
68
|
};
|
|
38
69
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,42 @@
|
|
|
1
1
|
import { Resolver } from '@vultisig/lib-utils/types/Resolver';
|
|
2
2
|
import { Chain } from '../../Chain.js';
|
|
3
3
|
import { SigningOutput } from '../../tw/signingOutput.js';
|
|
4
|
+
export declare const BroadcastErrorCode: {
|
|
5
|
+
readonly Rejected: "BROADCAST_REJECTED";
|
|
6
|
+
readonly Transport: "BROADCAST_TRANSPORT_ERROR";
|
|
7
|
+
};
|
|
8
|
+
export type BroadcastErrorCode = (typeof BroadcastErrorCode)[keyof typeof BroadcastErrorCode];
|
|
9
|
+
export type BroadcastProviderDetails = {
|
|
10
|
+
/** Chain/provider-native data, isolated so it cannot become the common contract by accident. */
|
|
11
|
+
provider: unknown;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The provider accepted (or already knew) the signed transaction.
|
|
15
|
+
*
|
|
16
|
+
* `finality: 'pending'` is intentional: a broadcast acknowledgement does not
|
|
17
|
+
* prove that the transaction executed successfully or reached finality.
|
|
18
|
+
*/
|
|
19
|
+
export type BroadcastAcceptedResult = {
|
|
20
|
+
status: 'accepted';
|
|
21
|
+
finality: 'pending';
|
|
22
|
+
txHash?: string;
|
|
23
|
+
details?: BroadcastProviderDetails;
|
|
24
|
+
};
|
|
25
|
+
export type BroadcastFailedResult = {
|
|
26
|
+
status: 'failed';
|
|
27
|
+
code: BroadcastErrorCode;
|
|
28
|
+
retryable: boolean;
|
|
29
|
+
/** Original provider/transport cause retained for diagnostics and logging. */
|
|
30
|
+
cause: unknown;
|
|
31
|
+
details?: BroadcastProviderDetails;
|
|
32
|
+
};
|
|
33
|
+
export type BroadcastTxResult = BroadcastAcceptedResult | BroadcastFailedResult;
|
|
34
|
+
export declare const broadcastAccepted: (txHash?: string, details?: BroadcastProviderDetails) => BroadcastAcceptedResult;
|
|
35
|
+
export declare const broadcastFailed: (cause: unknown, retryable: boolean, details?: BroadcastProviderDetails) => BroadcastFailedResult;
|
|
36
|
+
export declare const isRetryableBroadcastCause: (cause: unknown) => boolean;
|
|
37
|
+
export declare const isBroadcastTxResult: (value: unknown) => value is BroadcastTxResult;
|
|
4
38
|
export type BroadcastTxResolver<T extends Chain = Chain> = Resolver<{
|
|
5
39
|
chain: T;
|
|
6
40
|
tx: SigningOutput<T>;
|
|
7
|
-
}, Promise<
|
|
41
|
+
}, Promise<BroadcastTxResult>>;
|
|
8
42
|
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGtD,eAAO,MAAM,kBAAkB;;;CAGrB,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAA;AAE7F,MAAM,MAAM,wBAAwB,GAAG;IACrC,gGAAgG;IAChG,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,wBAAwB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,QAAQ,CAAA;IAChB,IAAI,EAAE,kBAAkB,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,8EAA8E;IAC9E,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,wBAAwB,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAE/E,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,UAAU,wBAAwB,KAAG,uBAKtF,CAAA;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,WAAW,OAAO,EAClB,UAAU,wBAAwB,KACjC,qBAMD,CAAA;AAEF,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,OAA2C,CAAA;AAYtG,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,iBAqB7D,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,CACjE;IACE,KAAK,EAAE,CAAC,CAAA;IACR,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CACrB,EACD,OAAO,CAAC,iBAAiB,CAAC,CAC3B,CAAA"}
|
|
@@ -1,2 +1,43 @@
|
|
|
1
|
-
|
|
1
|
+
import { isTransientBroadcastError } from './transientRetry.js';
|
|
2
|
+
export const BroadcastErrorCode = {
|
|
3
|
+
Rejected: 'BROADCAST_REJECTED',
|
|
4
|
+
Transport: 'BROADCAST_TRANSPORT_ERROR',
|
|
5
|
+
};
|
|
6
|
+
export const broadcastAccepted = (txHash, details) => ({
|
|
7
|
+
status: 'accepted',
|
|
8
|
+
finality: 'pending',
|
|
9
|
+
...(txHash ? { txHash } : {}),
|
|
10
|
+
...(details ? { details } : {}),
|
|
11
|
+
});
|
|
12
|
+
export const broadcastFailed = (cause, retryable, details) => ({
|
|
13
|
+
status: 'failed',
|
|
14
|
+
code: retryable ? BroadcastErrorCode.Transport : BroadcastErrorCode.Rejected,
|
|
15
|
+
retryable,
|
|
16
|
+
cause,
|
|
17
|
+
...(details ? { details } : {}),
|
|
18
|
+
});
|
|
19
|
+
export const isRetryableBroadcastCause = (cause) => isTransientBroadcastError(cause);
|
|
20
|
+
const hasOnlyKeys = (value, allowedKeys) => Object.keys(value).every(key => allowedKeys.includes(key));
|
|
21
|
+
const hasValidDetails = (result) => result.details === undefined ||
|
|
22
|
+
(typeof result.details === 'object' &&
|
|
23
|
+
result.details !== null &&
|
|
24
|
+
'provider' in result.details &&
|
|
25
|
+
hasOnlyKeys(result.details, ['provider']));
|
|
26
|
+
export const isBroadcastTxResult = (value) => {
|
|
27
|
+
if (!value || typeof value !== 'object')
|
|
28
|
+
return false;
|
|
29
|
+
const result = value;
|
|
30
|
+
if (result.status === 'accepted') {
|
|
31
|
+
return (result.finality === 'pending' &&
|
|
32
|
+
(result.txHash === undefined || (typeof result.txHash === 'string' && result.txHash.length > 0)) &&
|
|
33
|
+
hasValidDetails(result) &&
|
|
34
|
+
hasOnlyKeys(result, ['status', 'finality', 'txHash', 'details']));
|
|
35
|
+
}
|
|
36
|
+
return (result.status === 'failed' &&
|
|
37
|
+
((result.code === BroadcastErrorCode.Rejected && result.retryable === false) ||
|
|
38
|
+
(result.code === BroadcastErrorCode.Transport && result.retryable === true)) &&
|
|
39
|
+
'cause' in result &&
|
|
40
|
+
hasValidDetails(result) &&
|
|
41
|
+
hasOnlyKeys(result, ['status', 'code', 'retryable', 'cause', 'details']));
|
|
42
|
+
};
|
|
2
43
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/resolver.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/broadcast/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bittensor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/bittensor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,
|
|
1
|
+
{"version":3,"file":"bittensor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/bittensor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAShH,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAoC1E,CAAA"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { bittensorRpcUrl } from '@vultisig/core-chain/chains/bittensor/client';
|
|
2
2
|
import { ensureHexPrefix } from '@vultisig/lib-utils/hex/ensureHexPrefix';
|
|
3
3
|
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
4
|
+
import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
|
|
4
5
|
import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
|
|
5
6
|
import { formatSubstrateRpcError, isIdempotentSubstrateBroadcastError } from './substrate.js';
|
|
6
7
|
export const broadcastBittensorTx = async ({ chain, tx }) => {
|
|
7
8
|
const hexWithPrefix = ensureHexPrefix(Buffer.from(tx.encoded).toString('hex'));
|
|
9
|
+
const verify = async (error, retryable = isRetryableBroadcastCause(error)) => {
|
|
10
|
+
try {
|
|
11
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
|
|
12
|
+
}
|
|
13
|
+
catch (cause) {
|
|
14
|
+
return broadcastFailed(cause, retryable);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
8
17
|
try {
|
|
9
18
|
const response = await queryUrl(bittensorRpcUrl, {
|
|
10
19
|
body: {
|
|
@@ -16,16 +25,18 @@ export const broadcastBittensorTx = async ({ chain, tx }) => {
|
|
|
16
25
|
});
|
|
17
26
|
if (response.error) {
|
|
18
27
|
if (isIdempotentSubstrateBroadcastError(response.error)) {
|
|
19
|
-
return;
|
|
28
|
+
return broadcastAccepted();
|
|
20
29
|
}
|
|
21
|
-
|
|
30
|
+
const error = new Error(`Bittensor broadcast failed: ${formatSubstrateRpcError(response.error)}`);
|
|
31
|
+
return verify(error, false);
|
|
22
32
|
}
|
|
23
|
-
if (
|
|
24
|
-
|
|
33
|
+
if (response.result) {
|
|
34
|
+
return broadcastAccepted(response.result);
|
|
25
35
|
}
|
|
36
|
+
return verify(new Error('Bittensor broadcast failed: missing extrinsic hash in RPC response'), false);
|
|
26
37
|
}
|
|
27
|
-
catch (
|
|
28
|
-
|
|
38
|
+
catch (cause) {
|
|
39
|
+
return verify(cause);
|
|
29
40
|
}
|
|
30
41
|
};
|
|
31
42
|
//# sourceMappingURL=bittensor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bittensor.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/bittensor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"bittensor.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/bittensor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,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;AAChE,OAAO,EAAE,uBAAuB,EAAE,mCAAmC,EAAqB,MAAM,aAAa,CAAA;AAO7G,MAAM,CAAC,MAAM,oBAAoB,GAA8C,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACrG,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9E,MAAM,MAAM,GAAG,KAAK,EAAE,KAAc,EAAE,SAAS,GAAG,yBAAyB,CAAC,KAAK,CAAC,EAAE,EAAE;QACpF,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,SAAS,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC,CAAA;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAc,eAAe,EAAE;YAC5D,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,CAAC;aACN;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,mCAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,iBAAiB,EAAE,CAAA;YAC5B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,+BAA+B,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjG,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,oEAAoE,CAAC,EAAE,KAAK,CAAC,CAAA;IACvG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAQvD,OAAO,
|
|
1
|
+
{"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAQvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAoBhH,eAAO,MAAM,2BAA2B,GAAI,uBAGzC;IACD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;CACZ,KAAG,KAAK,GAAG,IAcX,CAAA;AAED,eAAO,MAAM,iCAAiC,GAAU,cAAc,UAAU,kBAQ/E,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CA8BtE,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { cardanoBroadcastTtlSafetyMargin } from '@vultisig/core-chain/chains/car
|
|
|
4
4
|
import { getCardanoTxHash } from '@vultisig/core-chain/tx/hash/resolvers/cardano';
|
|
5
5
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
6
6
|
import { submitCardanoCbor } from '../../../chains/cardano/submit/submitCardanoCbor.js';
|
|
7
|
+
import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
|
|
7
8
|
import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
|
|
8
9
|
import { selectEncodedBytes } from './utxo.js';
|
|
9
10
|
/**
|
|
@@ -39,22 +40,31 @@ export const assertCardanoTtlFreshForBroadcast = async (encodedBytes) => {
|
|
|
39
40
|
}
|
|
40
41
|
};
|
|
41
42
|
export const broadcastCardanoTx = async ({ chain, tx }) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
try {
|
|
44
|
+
const encodedBytes = selectEncodedBytes(chain, tx);
|
|
45
|
+
await assertCardanoTtlFreshForBroadcast(encodedBytes);
|
|
46
|
+
const cborHex = Buffer.from(encodedBytes).toString('hex');
|
|
47
|
+
const { txHash, errorMessage, rpcErrorCode } = await submitCardanoCbor(cborHex);
|
|
48
|
+
if (txHash)
|
|
49
|
+
return broadcastAccepted(txHash);
|
|
50
|
+
if (rpcErrorCode === alreadyCommittedCode) {
|
|
51
|
+
return broadcastAccepted((await getCardanoTxHash(tx)).replace(/^0x/i, ''));
|
|
52
|
+
}
|
|
53
|
+
const error = errorMessage ?? 'unknown broadcast failure';
|
|
54
|
+
// Any submit error past this point is ambiguous — it could be a benign MPC-race duplicate (another
|
|
55
|
+
// device already broadcast the same signed tx) OR a genuine failure (e.g. BadInputsUTxO: spent/invalid
|
|
56
|
+
// inputs). String-matching alone can't tell them apart, so verify against the real chain: the hash
|
|
57
|
+
// either resolves on-chain (the race case — success) or it doesn't (the real failure — returns it).
|
|
58
|
+
const broadcastError = new Error(`Failed to broadcast transaction: ${error}`);
|
|
59
|
+
try {
|
|
60
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error: broadcastError }));
|
|
61
|
+
}
|
|
62
|
+
catch (cause) {
|
|
63
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(broadcastError));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (cause) {
|
|
67
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(cause));
|
|
50
68
|
}
|
|
51
|
-
const error = errorMessage ?? 'unknown broadcast failure';
|
|
52
|
-
// Any submit error past this point is ambiguous — it could be a benign MPC-race duplicate (another
|
|
53
|
-
// device already broadcast the same signed tx) OR a genuine failure (e.g. BadInputsUTxO: spent/invalid
|
|
54
|
-
// inputs). String-matching alone can't tell them apart, so verify against the real chain: the hash
|
|
55
|
-
// either resolves on-chain (the race case — success) or it doesn't (the real failure — rethrows).
|
|
56
|
-
const broadcastError = new Error(`Failed to broadcast transaction: ${error}`);
|
|
57
|
-
await verifyBroadcastByHash({ chain, tx, error: broadcastError });
|
|
58
|
-
return null;
|
|
59
69
|
};
|
|
60
70
|
//# sourceMappingURL=cardano.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cardano.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAA;AAC9F,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAA;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;
|
|
1
|
+
{"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cardano.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cosmos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAMxD,OAAO,
|
|
1
|
+
{"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cosmos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAMxD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAIhH,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAA;AAEtG,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAMvE,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,mBAAmB,CAAC,WAAW,CAwC9D,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { getCosmosClient } from '@vultisig/core-chain/chains/cosmos/client';
|
|
|
3
3
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
4
4
|
import { isInError } from '@vultisig/lib-utils/error/isInError';
|
|
5
5
|
import { toCosmosSequenceMismatchError } from '../cosmosSequenceMismatch.js';
|
|
6
|
+
import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
|
|
6
7
|
import { DeliverTxFailedError } from '../transientRetry.js';
|
|
7
8
|
import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
|
|
8
9
|
export { CosmosSequenceMismatchError, toCosmosSequenceMismatchError } from '../cosmosSequenceMismatch.js';
|
|
@@ -13,41 +14,42 @@ export const getCosmosBroadcastTimeoutTxId = (error) => {
|
|
|
13
14
|
return txId.trim() || undefined;
|
|
14
15
|
};
|
|
15
16
|
export const broadcastCosmosTx = async ({ chain, tx }) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
try {
|
|
18
|
+
const { serialized } = tx;
|
|
19
|
+
const { tx_bytes } = JSON.parse(serialized);
|
|
20
|
+
const decodedTxBytes = Buffer.from(tx_bytes, 'base64');
|
|
21
|
+
const client = await getCosmosClient(chain);
|
|
22
|
+
const result = await attempt(client.broadcastTx(decodedTxBytes));
|
|
23
|
+
if (result.data !== undefined) {
|
|
24
|
+
try {
|
|
25
|
+
assertIsDeliverTxSuccess(result.data);
|
|
26
|
+
}
|
|
27
|
+
catch (deliverTxError) {
|
|
28
|
+
const message = deliverTxError instanceof Error ? deliverTxError.message : String(deliverTxError);
|
|
29
|
+
return broadcastFailed(new DeliverTxFailedError(message, { cause: deliverTxError }), false, {
|
|
30
|
+
provider: result.data,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return broadcastAccepted(result.data.transactionHash, { provider: result.data });
|
|
34
|
+
}
|
|
35
|
+
const { error } = result;
|
|
36
|
+
if (isInError(error, 'tx already exists in cache')) {
|
|
37
|
+
return broadcastAccepted();
|
|
38
|
+
}
|
|
39
|
+
const timeoutTxId = getCosmosBroadcastTimeoutTxId(error);
|
|
40
|
+
if (timeoutTxId) {
|
|
41
|
+
return broadcastAccepted(timeoutTxId);
|
|
42
|
+
}
|
|
43
|
+
const verificationError = toCosmosSequenceMismatchError(error) ?? error;
|
|
26
44
|
try {
|
|
27
|
-
|
|
45
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error: verificationError }));
|
|
28
46
|
}
|
|
29
|
-
catch (
|
|
30
|
-
|
|
31
|
-
// this throws into `withTransientBroadcastRetry`. A rawLog like "wasm
|
|
32
|
-
// contract aborted" would otherwise match the transient message regex
|
|
33
|
-
// and get resent, then swallowed as an idempotent "already in cache"
|
|
34
|
-
// success — reopening the bug this assert exists to close.
|
|
35
|
-
const message = deliverTxError instanceof Error ? deliverTxError.message : String(deliverTxError);
|
|
36
|
-
throw new DeliverTxFailedError(message, { cause: deliverTxError });
|
|
47
|
+
catch (cause) {
|
|
48
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(cause));
|
|
37
49
|
}
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (isInError(error, 'tx already exists in cache')) {
|
|
41
|
-
return;
|
|
42
50
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return timeoutTxId;
|
|
51
|
+
catch (cause) {
|
|
52
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(cause));
|
|
46
53
|
}
|
|
47
|
-
// Keep the hash-verification safety net first: another MPC participant may
|
|
48
|
-
// have successfully broadcast these same bytes just before this node returned
|
|
49
|
-
// a sequence rejection. When the hash is genuinely unknown, replace the raw
|
|
50
|
-
// code-32 message with direction-aware recovery guidance.
|
|
51
|
-
await verifyBroadcastByHash({ chain, tx, error: toCosmosSequenceMismatchError(error) ?? error });
|
|
52
54
|
};
|
|
53
55
|
//# sourceMappingURL=cosmos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cosmos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAMrD,OAAO,
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAMrD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAGhH,eAAO,MAAM,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CA2BxD,CAAA"}
|
|
@@ -2,18 +2,30 @@ import { getEvmClient } from '@vultisig/core-chain/chains/evm/client';
|
|
|
2
2
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
3
3
|
import { isInError } from '@vultisig/lib-utils/error/isInError';
|
|
4
4
|
import { ensureHexPrefix } from '@vultisig/lib-utils/hex/ensureHexPrefix';
|
|
5
|
+
import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
|
|
5
6
|
import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
|
|
6
7
|
export const broadcastEvmTx = async ({ chain, tx }) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
try {
|
|
9
|
+
const client = getEvmClient(chain);
|
|
10
|
+
const result = await attempt(client.sendRawTransaction({
|
|
11
|
+
serializedTransaction: ensureHexPrefix(Buffer.from(tx.encoded).toString('hex')),
|
|
12
|
+
}));
|
|
13
|
+
if ('data' in result) {
|
|
14
|
+
return broadcastAccepted(result.data);
|
|
15
|
+
}
|
|
16
|
+
const { error } = result;
|
|
17
|
+
if (error && isInError(error, 'already known', 'transaction already exists', 'tx already in mempool')) {
|
|
18
|
+
return broadcastAccepted();
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
|
|
22
|
+
}
|
|
23
|
+
catch (cause) {
|
|
24
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(error));
|
|
25
|
+
}
|
|
13
26
|
}
|
|
14
|
-
|
|
15
|
-
return;
|
|
27
|
+
catch (cause) {
|
|
28
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(cause));
|
|
16
29
|
}
|
|
17
|
-
await verifyBroadcastByHash({ chain, tx, error });
|
|
18
30
|
};
|
|
19
31
|
//# sourceMappingURL=evm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAuB,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAkC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACnF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QAElC,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,MAAM,CAAC,kBAAkB,CAAC;YACxB,qBAAqB,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChF,CAAC,CACH,CAAA;QAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QACxB,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,4BAA4B,EAAE,uBAAuB,CAAC,EAAE,CAAC;YACtG,OAAO,iBAAiB,EAAE,CAAA;QAC5B,CAAC;QAED,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;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;IACjE,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,
|
|
1
|
+
{"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAShH,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAgDxE,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ensureHexPrefix } from '@vultisig/lib-utils/hex/ensureHexPrefix';
|
|
2
2
|
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
3
3
|
import { polkadotRpcUrl } from '../../../chains/polkadot/client.js';
|
|
4
|
+
import { broadcastAccepted, broadcastFailed, isRetryableBroadcastCause } from '../resolver.js';
|
|
4
5
|
import { verifyBroadcastByHash } from '../verifyBroadcastByHash.js';
|
|
5
6
|
import { formatSubstrateRpcError, isIdempotentSubstrateBroadcastError } from './substrate.js';
|
|
6
7
|
export const broadcastPolkadotTx = async ({ chain, tx }) => {
|
|
@@ -20,19 +21,37 @@ export const broadcastPolkadotTx = async ({ chain, tx }) => {
|
|
|
20
21
|
// (string usually in `message`) or, less commonly, an Invalid
|
|
21
22
|
// Transaction variant whose duplicate signal lives in `data`.
|
|
22
23
|
if (isIdempotentSubstrateBroadcastError(response.error)) {
|
|
23
|
-
return;
|
|
24
|
+
return broadcastAccepted();
|
|
25
|
+
}
|
|
26
|
+
const error = new Error(`Polkadot broadcast failed: ${formatSubstrateRpcError(response.error)}`);
|
|
27
|
+
try {
|
|
28
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
|
|
29
|
+
}
|
|
30
|
+
catch (cause) {
|
|
31
|
+
return broadcastFailed(cause, false);
|
|
24
32
|
}
|
|
25
|
-
throw new Error(`Polkadot broadcast failed: ${formatSubstrateRpcError(response.error)}`);
|
|
26
33
|
}
|
|
27
34
|
// Per JSON-RPC 2.0 a valid response must have exactly one of `result` /
|
|
28
35
|
// `error`. If both are missing (malformed gateway response, truncated
|
|
29
36
|
// body, …) do not silently assume success — force hash verification.
|
|
30
37
|
if (!response.result) {
|
|
31
|
-
|
|
38
|
+
const error = new Error('Polkadot broadcast failed: missing extrinsic hash in RPC response');
|
|
39
|
+
try {
|
|
40
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
|
|
41
|
+
}
|
|
42
|
+
catch (cause) {
|
|
43
|
+
return broadcastFailed(cause, false);
|
|
44
|
+
}
|
|
32
45
|
}
|
|
46
|
+
return broadcastAccepted(response.result);
|
|
33
47
|
}
|
|
34
48
|
catch (error) {
|
|
35
|
-
|
|
49
|
+
try {
|
|
50
|
+
return broadcastAccepted(await verifyBroadcastByHash({ chain, tx, error }));
|
|
51
|
+
}
|
|
52
|
+
catch (cause) {
|
|
53
|
+
return broadcastFailed(cause, isRetryableBroadcastCause(error));
|
|
54
|
+
}
|
|
36
55
|
}
|
|
37
56
|
};
|
|
38
57
|
//# sourceMappingURL=polkadot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polkadot.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"polkadot.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/polkadot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAuB,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,mCAAmC,EAAqB,MAAM,aAAa,CAAA;AAO7G,MAAM,CAAC,MAAM,mBAAmB,GAA6C,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;IACnG,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAE9E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAc,cAAc,EAAE;YAC3D,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,CAAC;aACN;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,sEAAsE;YACtE,uEAAuE;YACvE,8DAA8D;YAC9D,8DAA8D;YAC9D,IAAI,mCAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,iBAAiB,EAAE,CAAA;YAC5B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,8BAA8B,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAChG,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,wEAAwE;QACxE,sEAAsE;QACtE,qEAAqE;QACrE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;YAC5F,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;QACD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3C,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":"qbtc.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/qbtc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"qbtc.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/qbtc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,OAAO,EAAsC,mBAAmB,EAA6B,MAAM,aAAa,CAAA;AAShH,eAAO,MAAM,eAAe,EAAE,mBAAmB,CAAC,OAAO,KAAK,CAAC,IAAI,CAoFlE,CAAA"}
|