@bitgo/wasm-utxo 4.4.0 → 4.5.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.
@@ -1,25 +1,16 @@
1
1
  /* tslint:disable */
2
2
  /* eslint-disable */
3
3
  export const memory: WebAssembly.Memory;
4
- export const __wbg_wrapdescriptor_free: (a: number, b: number) => void;
5
- export const __wbg_wrapminiscript_free: (a: number, b: number) => void;
6
- export const wrapdescriptor_atDerivationIndex: (a: number, b: number, c: number) => void;
7
- export const wrapdescriptor_descType: (a: number, b: number) => void;
8
- export const wrapdescriptor_encode: (a: number, b: number) => void;
9
- export const wrapdescriptor_fromString: (a: number, b: number, c: number, d: number, e: number) => void;
10
- export const wrapdescriptor_fromStringDetectType: (a: number, b: number, c: number) => void;
11
- export const wrapdescriptor_hasWildcard: (a: number) => number;
12
- export const wrapdescriptor_maxWeightToSatisfy: (a: number, b: number) => void;
13
- export const wrapdescriptor_node: (a: number, b: number) => void;
14
- export const wrapdescriptor_scriptPubkey: (a: number, b: number) => void;
15
- export const wrapdescriptor_toAsmString: (a: number, b: number) => void;
16
- export const wrapdescriptor_toString: (a: number, b: number) => void;
17
- export const wrapminiscript_encode: (a: number, b: number) => void;
18
- export const wrapminiscript_fromBitcoinScript: (a: number, b: number, c: number, d: number, e: number) => void;
19
- export const wrapminiscript_fromString: (a: number, b: number, c: number, d: number, e: number) => void;
20
- export const wrapminiscript_node: (a: number, b: number) => void;
21
- export const wrapminiscript_toAsmString: (a: number, b: number) => void;
22
- export const wrapminiscript_toString: (a: number, b: number) => void;
4
+ export const __wbg_wasmreplayprotection_free: (a: number, b: number) => void;
5
+ export const __wbg_wasmrootwalletkeys_free: (a: number, b: number) => void;
6
+ export const wasmreplayprotection_from_addresses: (a: number, b: number, c: number, d: number, e: number) => void;
7
+ export const wasmreplayprotection_from_output_scripts: (a: number, b: number) => number;
8
+ export const wasmreplayprotection_from_public_keys: (a: number, b: number, c: number) => void;
9
+ export const wasmrootwalletkeys_backup_key: (a: number) => number;
10
+ export const wasmrootwalletkeys_bitgo_key: (a: number) => number;
11
+ export const wasmrootwalletkeys_new: (a: number, b: number, c: number, d: number) => void;
12
+ export const wasmrootwalletkeys_user_key: (a: number) => number;
13
+ export const wasmrootwalletkeys_with_derivation_prefixes: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void;
23
14
  export const __wbg_addressnamespace_free: (a: number, b: number) => void;
24
15
  export const __wbg_inscriptionsnamespace_free: (a: number, b: number) => void;
25
16
  export const __wbg_wasmbip32_free: (a: number, b: number) => void;
@@ -97,6 +88,9 @@ export const wrappsbt_add_input_at_index: (a: number, b: number, c: number, d: n
97
88
  export const wrappsbt_add_output: (a: number, b: number, c: number, d: bigint) => number;
98
89
  export const wrappsbt_add_output_at_index: (a: number, b: number, c: number, d: number, e: number, f: bigint) => void;
99
90
  export const wrappsbt_clone: (a: number) => number;
91
+ export const wrappsbt_delete_input_kv: (a: number, b: number, c: number, d: number) => void;
92
+ export const wrappsbt_delete_kv: (a: number, b: number, c: number) => void;
93
+ export const wrappsbt_delete_output_kv: (a: number, b: number, c: number, d: number) => void;
100
94
  export const wrappsbt_deserialize: (a: number, b: number, c: number) => void;
101
95
  export const wrappsbt_extract_transaction: (a: number, b: number) => void;
102
96
  export const wrappsbt_finalize_mut: (a: number, b: number) => void;
@@ -139,6 +133,25 @@ export const wasmzcashtransaction_lock_time: (a: number) => number;
139
133
  export const wasmzcashtransaction_version: (a: number) => number;
140
134
  export const wrappsbt_lock_time: (a: number) => number;
141
135
  export const wrappsbt_version: (a: number) => number;
136
+ export const __wbg_wrapdescriptor_free: (a: number, b: number) => void;
137
+ export const __wbg_wrapminiscript_free: (a: number, b: number) => void;
138
+ export const wrapdescriptor_atDerivationIndex: (a: number, b: number, c: number) => void;
139
+ export const wrapdescriptor_descType: (a: number, b: number) => void;
140
+ export const wrapdescriptor_encode: (a: number, b: number) => void;
141
+ export const wrapdescriptor_fromString: (a: number, b: number, c: number, d: number, e: number) => void;
142
+ export const wrapdescriptor_fromStringDetectType: (a: number, b: number, c: number) => void;
143
+ export const wrapdescriptor_hasWildcard: (a: number) => number;
144
+ export const wrapdescriptor_maxWeightToSatisfy: (a: number, b: number) => void;
145
+ export const wrapdescriptor_node: (a: number, b: number) => void;
146
+ export const wrapdescriptor_scriptPubkey: (a: number, b: number) => void;
147
+ export const wrapdescriptor_toAsmString: (a: number, b: number) => void;
148
+ export const wrapdescriptor_toString: (a: number, b: number) => void;
149
+ export const wrapminiscript_encode: (a: number, b: number) => void;
150
+ export const wrapminiscript_fromBitcoinScript: (a: number, b: number, c: number, d: number, e: number) => void;
151
+ export const wrapminiscript_fromString: (a: number, b: number, c: number, d: number, e: number) => void;
152
+ export const wrapminiscript_node: (a: number, b: number) => void;
153
+ export const wrapminiscript_toAsmString: (a: number, b: number) => void;
154
+ export const wrapminiscript_toString: (a: number, b: number) => void;
142
155
  export const __wbg_bip322namespace_free: (a: number, b: number) => void;
143
156
  export const __wbg_bitgopsbt_free: (a: number, b: number) => void;
144
157
  export const __wbg_fixedscriptwalletnamespace_free: (a: number, b: number) => void;
@@ -169,6 +182,9 @@ export const bitgopsbt_combine_musig2_nonces: (a: number, b: number, c: number)
169
182
  export const bitgopsbt_create_empty: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
170
183
  export const bitgopsbt_create_empty_zcash: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
171
184
  export const bitgopsbt_create_empty_zcash_at_height: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
185
+ export const bitgopsbt_delete_input_kv: (a: number, b: number, c: number, d: number) => void;
186
+ export const bitgopsbt_delete_kv: (a: number, b: number, c: number) => void;
187
+ export const bitgopsbt_delete_output_kv: (a: number, b: number, c: number, d: number) => void;
172
188
  export const bitgopsbt_expiry_height: (a: number) => number;
173
189
  export const bitgopsbt_extract_bitcoin_transaction: (a: number, b: number) => void;
174
190
  export const bitgopsbt_extract_dash_transaction: (a: number, b: number) => void;
@@ -177,7 +193,10 @@ export const bitgopsbt_extract_transaction: (a: number, b: number) => void;
177
193
  export const bitgopsbt_extract_zcash_transaction: (a: number, b: number) => void;
178
194
  export const bitgopsbt_finalize_all_inputs: (a: number, b: number) => void;
179
195
  export const bitgopsbt_from_bytes: (a: number, b: number, c: number, d: number, e: number) => void;
180
- export const bitgopsbt_from_half_signed_legacy_transaction: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
196
+ export const bitgopsbt_from_half_signed_legacy_transaction: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
197
+ export const bitgopsbt_from_half_signed_legacy_transaction_dash: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
198
+ export const bitgopsbt_from_half_signed_legacy_transaction_zcash_with_block_height: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
199
+ export const bitgopsbt_from_half_signed_legacy_transaction_zcash_with_branch_id: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
181
200
  export const bitgopsbt_generate_musig2_nonces: (a: number, b: number, c: number, d: number, e: number) => void;
182
201
  export const bitgopsbt_get_global_xpubs: (a: number) => number;
183
202
  export const bitgopsbt_get_input_kv: (a: number, b: number, c: number, d: number) => void;
@@ -246,21 +265,11 @@ export const wasmdimensions_has_segwit: (a: number) => number;
246
265
  export const wasmdimensions_plus: (a: number, b: number) => number;
247
266
  export const wasmdimensions_times: (a: number, b: number) => number;
248
267
  export const wasmutxonamespace_get_wasm_utxo_version: (a: number) => void;
249
- export const bitgopsbt_sign_all_with_xpriv: (a: number, b: number, c: number) => void;
268
+ export const bitgopsbt_sign_wallet_input: (a: number, b: number, c: number, d: number) => void;
250
269
  export const parsePsbtToJson: (a: number, b: number, c: number, d: number, e: number) => void;
251
270
  export const parseTxToJson: (a: number, b: number, c: number, d: number, e: number) => void;
252
- export const bitgopsbt_sign_wallet_input: (a: number, b: number, c: number, d: number) => void;
253
271
  export const bitgopsbt_sign_replay_protection_inputs: (a: number, b: number, c: number) => void;
254
- export const __wbg_wasmreplayprotection_free: (a: number, b: number) => void;
255
- export const __wbg_wasmrootwalletkeys_free: (a: number, b: number) => void;
256
- export const wasmreplayprotection_from_addresses: (a: number, b: number, c: number, d: number, e: number) => void;
257
- export const wasmreplayprotection_from_output_scripts: (a: number, b: number) => number;
258
- export const wasmreplayprotection_from_public_keys: (a: number, b: number, c: number) => void;
259
- export const wasmrootwalletkeys_backup_key: (a: number) => number;
260
- export const wasmrootwalletkeys_bitgo_key: (a: number) => number;
261
- export const wasmrootwalletkeys_new: (a: number, b: number, c: number, d: number) => void;
262
- export const wasmrootwalletkeys_user_key: (a: number) => number;
263
- export const wasmrootwalletkeys_with_derivation_prefixes: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void;
272
+ export const bitgopsbt_sign_all_with_xpriv: (a: number, b: number, c: number) => void;
264
273
  export const rustsecp256k1_v0_10_0_context_create: (a: number) => number;
265
274
  export const rustsecp256k1_v0_10_0_context_destroy: (a: number) => void;
266
275
  export const rustsecp256k1_v0_10_0_default_error_callback_fn: (a: number, b: number) => void;
@@ -8,7 +8,7 @@ import { type ECPairArg } from "../ecpair.js";
8
8
  import type { UtxolibName } from "../utxolibCompat.js";
9
9
  import type { CoinName } from "../coinName.js";
10
10
  import type { InputScriptType } from "./scriptType.js";
11
- import { type ITransaction } from "../transaction.js";
11
+ import { Transaction, DashTransaction, type ITransaction } from "../transaction.js";
12
12
  export type { InputScriptType };
13
13
  export type NetworkName = UtxolibName | CoinName;
14
14
  export type ScriptId = {
@@ -151,12 +151,17 @@ export declare class BitGoPsbt extends PsbtBase<WasmBitGoPsbt> implements IPsbtW
151
151
  * with proper wallet metadata (bip32Derivation, scripts, witnessUtxo).
152
152
  * Only supports p2sh, p2shP2wsh, and p2wsh inputs (not taproot).
153
153
  *
154
- * @param txBytes - The serialized half-signed legacy transaction
154
+ * Supports both Bitcoin-like coins (BTC, LTC, DOGE) and Dash (DASH).
155
+ * Zcash is NOT supported; use ZcashBitGoPsbt.fromHalfSignedLegacyTransaction instead.
156
+ *
157
+ * @param txBytesOrTx - Transaction bytes or decoded transaction instance (Bitcoin-like or Dash)
155
158
  * @param network - Network name
156
159
  * @param walletKeys - The wallet's root keys
157
160
  * @param unspents - Chain, index, and value for each input
161
+ * @param _options - Reserved for future use and signature compatibility with subclasses
162
+ * @throws Error if transaction is Zcash (use ZcashBitGoPsbt.fromHalfSignedLegacyTransaction instead)
158
163
  */
159
- static fromHalfSignedLegacyTransaction(txBytes: Uint8Array, network: NetworkName, walletKeys: WalletKeysArg, unspents: HydrationUnspent[]): BitGoPsbt;
164
+ static fromHalfSignedLegacyTransaction(txBytesOrTx: Uint8Array | Transaction | DashTransaction, network: NetworkName, walletKeys: WalletKeysArg, unspents: HydrationUnspent[], _options?: unknown): BitGoPsbt;
160
165
  /**
161
166
  * Add an input to the PSBT
162
167
  *
@@ -4,6 +4,7 @@ import { RootWalletKeys } from "./RootWalletKeys.js";
4
4
  import { ReplayProtection } from "./ReplayProtection.js";
5
5
  import { BIP32, isBIP32Arg } from "../bip32.js";
6
6
  import { ECPair } from "../ecpair.js";
7
+ import { toCoinName } from "../coinName.js";
7
8
  import { Transaction, DashTransaction, ZcashTransaction, } from "../transaction.js";
8
9
  export class BitGoPsbt extends PsbtBase {
9
10
  constructor(wasm) {
@@ -60,14 +61,32 @@ export class BitGoPsbt extends PsbtBase {
60
61
  * with proper wallet metadata (bip32Derivation, scripts, witnessUtxo).
61
62
  * Only supports p2sh, p2shP2wsh, and p2wsh inputs (not taproot).
62
63
  *
63
- * @param txBytes - The serialized half-signed legacy transaction
64
+ * Supports both Bitcoin-like coins (BTC, LTC, DOGE) and Dash (DASH).
65
+ * Zcash is NOT supported; use ZcashBitGoPsbt.fromHalfSignedLegacyTransaction instead.
66
+ *
67
+ * @param txBytesOrTx - Transaction bytes or decoded transaction instance (Bitcoin-like or Dash)
64
68
  * @param network - Network name
65
69
  * @param walletKeys - The wallet's root keys
66
70
  * @param unspents - Chain, index, and value for each input
71
+ * @param _options - Reserved for future use and signature compatibility with subclasses
72
+ * @throws Error if transaction is Zcash (use ZcashBitGoPsbt.fromHalfSignedLegacyTransaction instead)
67
73
  */
68
- static fromHalfSignedLegacyTransaction(txBytes, network, walletKeys, unspents) {
74
+ static fromHalfSignedLegacyTransaction(txBytesOrTx, network, walletKeys, unspents,
75
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
76
+ _options) {
69
77
  const keys = RootWalletKeys.from(walletKeys);
70
- const wasm = WasmBitGoPsbt.from_half_signed_legacy_transaction(txBytes, network, keys.wasm, unspents);
78
+ // Parse bytes to Transaction if needed
79
+ const tx = txBytesOrTx instanceof Uint8Array
80
+ ? Transaction.fromBytes(txBytesOrTx, toCoinName(network))
81
+ : txBytesOrTx;
82
+ // Validate that this is not a Zcash transaction
83
+ if (tx instanceof ZcashTransaction) {
84
+ throw new Error("Use ZcashBitGoPsbt.fromHalfSignedLegacyTransaction() for Zcash transactions");
85
+ }
86
+ // Pass WASM transaction directly to avoid serialization round-trip
87
+ const wasm = tx instanceof DashTransaction
88
+ ? WasmBitGoPsbt.from_half_signed_legacy_transaction_dash(tx.wasm, network, keys.wasm, unspents)
89
+ : WasmBitGoPsbt.from_half_signed_legacy_transaction(tx.wasm, network, keys.wasm, unspents);
71
90
  return new BitGoPsbt(wasm);
72
91
  }
73
92
  addInputAtIndex(index, txidOrOptions, voutOrScript, value, script, sequence) {
@@ -1,6 +1,6 @@
1
1
  import { type WalletKeysArg } from "./RootWalletKeys.js";
2
- import { BitGoPsbt, type CreateEmptyOptions } from "./BitGoPsbt.js";
3
- import { ZcashTransaction } from "../transaction.js";
2
+ import { BitGoPsbt, type CreateEmptyOptions, type HydrationUnspent } from "./BitGoPsbt.js";
3
+ import { ZcashTransaction, type ITransaction } from "../transaction.js";
4
4
  /** Zcash network names */
5
5
  export type ZcashNetworkName = "zcash" | "zcashTest" | "zec" | "tzec";
6
6
  /** Options for creating an empty Zcash PSBT (preferred method using block height) */
@@ -101,6 +101,51 @@ export declare class ZcashBitGoPsbt extends BitGoPsbt {
101
101
  * @returns A ZcashBitGoPsbt instance
102
102
  */
103
103
  static fromBytes(bytes: Uint8Array, network: ZcashNetworkName): ZcashBitGoPsbt;
104
+ /**
105
+ * Reconstruct a Zcash PSBT from a half-signed legacy transaction
106
+ *
107
+ * This is the inverse of `getHalfSignedLegacyFormat()` for Zcash. It decodes the Zcash wire
108
+ * format (which includes version_group_id, expiry_height, and sapling fields), extracts
109
+ * partial signatures, and reconstructs a proper Zcash PSBT with consensus metadata.
110
+ *
111
+ * Supports two modes for determining consensus_branch_id:
112
+ * - **Recommended**: Pass `blockHeight` to auto-determine consensus_branch_id via network upgrade activation heights
113
+ * - **Advanced**: Pass `consensusBranchId` directly if you already know it (e.g., 0xC2D6D0B4 for NU5)
114
+ *
115
+ * @param txBytesOrTx - Either serialized Zcash transaction bytes or a decoded ZcashTransaction instance
116
+ * @param network - Zcash network name ("zcash", "zcashTest", "zec", "tzec")
117
+ * @param walletKeys - The wallet's root keys
118
+ * @param unspents - Chain, index, and value for each input
119
+ * @param options - Either `{ blockHeight: number }` or `{ consensusBranchId: number }`
120
+ * @returns A ZcashBitGoPsbt instance
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * // Round-trip with block height (recommended)
125
+ * const legacyBytes = psbt.getHalfSignedLegacyFormat();
126
+ * const reconstructed = ZcashBitGoPsbt.fromHalfSignedLegacyTransaction(
127
+ * legacyBytes,
128
+ * "zec",
129
+ * walletKeys,
130
+ * unspents,
131
+ * { blockHeight: 1687105 } // NU5 activation height
132
+ * );
133
+ *
134
+ * // Or with explicit consensus branch ID
135
+ * const reconstructed = ZcashBitGoPsbt.fromHalfSignedLegacyTransaction(
136
+ * legacyBytes,
137
+ * "zec",
138
+ * walletKeys,
139
+ * unspents,
140
+ * { consensusBranchId: 0xC2D6D0B4 } // NU5 branch ID
141
+ * );
142
+ * ```
143
+ */
144
+ static fromHalfSignedLegacyTransaction(txBytesOrTx: Uint8Array | ITransaction, network: ZcashNetworkName, walletKeys: WalletKeysArg, unspents: HydrationUnspent[], options: {
145
+ blockHeight: number;
146
+ } | {
147
+ consensusBranchId: number;
148
+ }): ZcashBitGoPsbt;
104
149
  /**
105
150
  * Get the Zcash version group ID
106
151
  * @returns The version group ID (e.g., 0x892F2085 for Sapling)
@@ -93,6 +93,60 @@ export class ZcashBitGoPsbt extends BitGoPsbt {
93
93
  const wasm = WasmBitGoPsbt.from_bytes(bytes, network);
94
94
  return new ZcashBitGoPsbt(wasm);
95
95
  }
96
+ /**
97
+ * Reconstruct a Zcash PSBT from a half-signed legacy transaction
98
+ *
99
+ * This is the inverse of `getHalfSignedLegacyFormat()` for Zcash. It decodes the Zcash wire
100
+ * format (which includes version_group_id, expiry_height, and sapling fields), extracts
101
+ * partial signatures, and reconstructs a proper Zcash PSBT with consensus metadata.
102
+ *
103
+ * Supports two modes for determining consensus_branch_id:
104
+ * - **Recommended**: Pass `blockHeight` to auto-determine consensus_branch_id via network upgrade activation heights
105
+ * - **Advanced**: Pass `consensusBranchId` directly if you already know it (e.g., 0xC2D6D0B4 for NU5)
106
+ *
107
+ * @param txBytesOrTx - Either serialized Zcash transaction bytes or a decoded ZcashTransaction instance
108
+ * @param network - Zcash network name ("zcash", "zcashTest", "zec", "tzec")
109
+ * @param walletKeys - The wallet's root keys
110
+ * @param unspents - Chain, index, and value for each input
111
+ * @param options - Either `{ blockHeight: number }` or `{ consensusBranchId: number }`
112
+ * @returns A ZcashBitGoPsbt instance
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * // Round-trip with block height (recommended)
117
+ * const legacyBytes = psbt.getHalfSignedLegacyFormat();
118
+ * const reconstructed = ZcashBitGoPsbt.fromHalfSignedLegacyTransaction(
119
+ * legacyBytes,
120
+ * "zec",
121
+ * walletKeys,
122
+ * unspents,
123
+ * { blockHeight: 1687105 } // NU5 activation height
124
+ * );
125
+ *
126
+ * // Or with explicit consensus branch ID
127
+ * const reconstructed = ZcashBitGoPsbt.fromHalfSignedLegacyTransaction(
128
+ * legacyBytes,
129
+ * "zec",
130
+ * walletKeys,
131
+ * unspents,
132
+ * { consensusBranchId: 0xC2D6D0B4 } // NU5 branch ID
133
+ * );
134
+ * ```
135
+ */
136
+ static fromHalfSignedLegacyTransaction(txBytesOrTx, network, walletKeys, unspents, options) {
137
+ const keys = RootWalletKeys.from(walletKeys);
138
+ const tx = txBytesOrTx instanceof Uint8Array
139
+ ? ZcashTransaction.fromBytes(txBytesOrTx)
140
+ : txBytesOrTx;
141
+ if ("blockHeight" in options) {
142
+ const wasm = WasmBitGoPsbt.from_half_signed_legacy_transaction_zcash_with_block_height(tx.wasm, network, keys.wasm, unspents, options.blockHeight);
143
+ return new ZcashBitGoPsbt(wasm);
144
+ }
145
+ else {
146
+ const wasm = WasmBitGoPsbt.from_half_signed_legacy_transaction_zcash_with_branch_id(tx.wasm, network, keys.wasm, unspents, options.consensusBranchId);
147
+ return new ZcashBitGoPsbt(wasm);
148
+ }
149
+ }
96
150
  // --- Zcash-specific getters ---
97
151
  /**
98
152
  * Get the Zcash version group ID
@@ -12,10 +12,13 @@ export interface IPsbt extends ITransactionCommon<PsbtInputData, PsbtOutputData>
12
12
  removeOutput(index: number): void;
13
13
  setKV(key: PsbtKvKey, value: Uint8Array): void;
14
14
  getKV(key: PsbtKvKey): Uint8Array | undefined;
15
+ deleteKV(key: PsbtKvKey): void;
15
16
  setInputKV(index: number, key: PsbtKvKey, value: Uint8Array): void;
16
17
  getInputKV(index: number, key: PsbtKvKey): Uint8Array | undefined;
18
+ deleteInputKV(index: number, key: PsbtKvKey): void;
17
19
  setOutputKV(index: number, key: PsbtKvKey, value: Uint8Array): void;
18
20
  getOutputKV(index: number, key: PsbtKvKey): Uint8Array | undefined;
21
+ deleteOutputKV(index: number, key: PsbtKvKey): void;
19
22
  }
20
23
  /** Extended PSBT with address resolution (no coin parameter needed) */
21
24
  export interface IPsbtWithAddress extends IPsbt {
@@ -15,10 +15,13 @@ interface WasmPsbtBase {
15
15
  remove_output(index: number): void;
16
16
  set_kv(key: unknown, value: Uint8Array): void;
17
17
  get_kv(key: unknown): Uint8Array | null | undefined;
18
+ delete_kv(key: unknown): void;
18
19
  set_input_kv(index: number, key: unknown, value: Uint8Array): void;
19
20
  get_input_kv(index: number, key: unknown): Uint8Array | null | undefined;
21
+ delete_input_kv(index: number, key: unknown): void;
20
22
  set_output_kv(index: number, key: unknown, value: Uint8Array): void;
21
23
  get_output_kv(index: number, key: unknown): Uint8Array | null | undefined;
24
+ delete_output_kv(index: number, key: unknown): void;
22
25
  }
23
26
  export declare abstract class PsbtBase<W extends WasmPsbtBase> {
24
27
  protected _wasm: W;
@@ -40,5 +43,8 @@ export declare abstract class PsbtBase<W extends WasmPsbtBase> {
40
43
  getInputKV(index: number, key: PsbtKvKey): Uint8Array | undefined;
41
44
  setOutputKV(index: number, key: PsbtKvKey, value: Uint8Array): void;
42
45
  getOutputKV(index: number, key: PsbtKvKey): Uint8Array | undefined;
46
+ deleteKV(key: PsbtKvKey): void;
47
+ deleteInputKV(index: number, key: PsbtKvKey): void;
48
+ deleteOutputKV(index: number, key: PsbtKvKey): void;
43
49
  }
44
50
  export {};
@@ -55,4 +55,13 @@ export class PsbtBase {
55
55
  getOutputKV(index, key) {
56
56
  return this._wasm.get_output_kv(index, key) ?? undefined;
57
57
  }
58
+ deleteKV(key) {
59
+ this._wasm.delete_kv(key);
60
+ }
61
+ deleteInputKV(index, key) {
62
+ this._wasm.delete_input_kv(index, key);
63
+ }
64
+ deleteOutputKV(index, key) {
65
+ this._wasm.delete_output_kv(index, key);
66
+ }
58
67
  }
@@ -24,11 +24,19 @@ export interface ITransaction extends ITransactionCommon<TxInputData, TxOutputDa
24
24
  */
25
25
  export declare class Transaction extends TransactionBase<WasmTransaction> {
26
26
  private constructor();
27
+ /**
28
+ * Check if a coin is supported by this transaction class.
29
+ * Bitcoin-like transactions support all coins except Zcash and Dash.
30
+ */
31
+ static supportsCoin(coin: CoinName): boolean;
27
32
  /**
28
33
  * Create an empty transaction (version 1, locktime 0)
29
34
  */
30
35
  static create(): Transaction;
31
36
  static fromBytes(bytes: Uint8Array): Transaction;
37
+ static fromBytes(bytes: Uint8Array, coin: "zec" | "tzec"): ZcashTransaction;
38
+ static fromBytes(bytes: Uint8Array, coin: "dash" | "tdash"): DashTransaction;
39
+ static fromBytes(bytes: Uint8Array, coin: CoinName): Transaction | ZcashTransaction | DashTransaction;
32
40
  /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
33
41
  static fromWasm(wasm: WasmTransaction): Transaction;
34
42
  /**
@@ -60,6 +68,11 @@ export declare class Transaction extends TransactionBase<WasmTransaction> {
60
68
  */
61
69
  export declare class ZcashTransaction extends TransactionBase<WasmZcashTransaction> {
62
70
  private constructor();
71
+ /**
72
+ * Check if a coin is supported by this transaction class.
73
+ * Zcash transactions support Zcash mainnet and testnet.
74
+ */
75
+ static supportsCoin(coin: CoinName): boolean;
63
76
  static fromBytes(bytes: Uint8Array): ZcashTransaction;
64
77
  /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
65
78
  static fromWasm(wasm: WasmZcashTransaction): ZcashTransaction;
@@ -73,6 +86,11 @@ export declare class ZcashTransaction extends TransactionBase<WasmZcashTransacti
73
86
  */
74
87
  export declare class DashTransaction extends TransactionBase<WasmDashTransaction> {
75
88
  private constructor();
89
+ /**
90
+ * Check if a coin is supported by this transaction class.
91
+ * Dash transactions support Dash mainnet and testnet.
92
+ */
93
+ static supportsCoin(coin: CoinName): boolean;
76
94
  static fromBytes(bytes: Uint8Array): DashTransaction;
77
95
  /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
78
96
  static fromWasm(wasm: WasmDashTransaction): DashTransaction;
@@ -9,13 +9,26 @@ export class Transaction extends TransactionBase {
9
9
  constructor(wasm) {
10
10
  super(wasm);
11
11
  }
12
+ /**
13
+ * Check if a coin is supported by this transaction class.
14
+ * Bitcoin-like transactions support all coins except Zcash and Dash.
15
+ */
16
+ static supportsCoin(coin) {
17
+ return !ZcashTransaction.supportsCoin(coin) && !DashTransaction.supportsCoin(coin);
18
+ }
12
19
  /**
13
20
  * Create an empty transaction (version 1, locktime 0)
14
21
  */
15
22
  static create() {
16
23
  return new Transaction(WasmTransaction.create());
17
24
  }
18
- static fromBytes(bytes) {
25
+ static fromBytes(bytes, coin) {
26
+ if (coin !== undefined) {
27
+ if (ZcashTransaction.supportsCoin(coin))
28
+ return ZcashTransaction.fromBytes(bytes);
29
+ if (DashTransaction.supportsCoin(coin))
30
+ return DashTransaction.fromBytes(bytes);
31
+ }
19
32
  return new Transaction(WasmTransaction.from_bytes(bytes));
20
33
  }
21
34
  /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
@@ -65,6 +78,13 @@ export class ZcashTransaction extends TransactionBase {
65
78
  constructor(wasm) {
66
79
  super(wasm);
67
80
  }
81
+ /**
82
+ * Check if a coin is supported by this transaction class.
83
+ * Zcash transactions support Zcash mainnet and testnet.
84
+ */
85
+ static supportsCoin(coin) {
86
+ return coin === "zec" || coin === "tzec";
87
+ }
68
88
  static fromBytes(bytes) {
69
89
  return new ZcashTransaction(WasmZcashTransaction.from_bytes(bytes));
70
90
  }
@@ -86,6 +106,13 @@ export class DashTransaction extends TransactionBase {
86
106
  constructor(wasm) {
87
107
  super(wasm);
88
108
  }
109
+ /**
110
+ * Check if a coin is supported by this transaction class.
111
+ * Dash transactions support Dash mainnet and testnet.
112
+ */
113
+ static supportsCoin(coin) {
114
+ return coin === "dash" || coin === "tdash";
115
+ }
89
116
  static fromBytes(bytes) {
90
117
  return new DashTransaction(WasmDashTransaction.from_bytes(bytes));
91
118
  }
@@ -221,6 +221,9 @@ export class BitGoPsbt {
221
221
  * Returns error if block height is before Overwinter activation
222
222
  */
223
223
  static create_empty_zcash_at_height(network: string, wallet_keys: WasmRootWalletKeys, block_height: number, version?: number | null, lock_time?: number | null, version_group_id?: number | null, expiry_height?: number | null): BitGoPsbt;
224
+ delete_input_kv(index: number, key: any): void;
225
+ delete_kv(key: any): void;
226
+ delete_output_kv(index: number, key: any): void;
224
227
  /**
225
228
  * Get the Zcash expiry height (returns None for non-Zcash PSBTs)
226
229
  */
@@ -298,12 +301,45 @@ export class BitGoPsbt {
298
301
  * Convert a half-signed legacy transaction to a psbt-lite.
299
302
  *
300
303
  * # Arguments
301
- * * `tx_bytes` - The serialized half-signed legacy transaction
304
+ * * `tx` - The decoded half-signed legacy transaction
302
305
  * * `network` - Network name (utxolib or coin name)
303
306
  * * `wallet_keys` - The wallet's root keys
304
307
  * * `unspents` - Array of `{ chain: number, index: number, value: bigint }` for each input
305
308
  */
306
- static from_half_signed_legacy_transaction(tx_bytes: Uint8Array, network: string, wallet_keys: WasmRootWalletKeys, unspents: any): BitGoPsbt;
309
+ static from_half_signed_legacy_transaction(tx: WasmTransaction, network: string, wallet_keys: WasmRootWalletKeys, unspents: any): BitGoPsbt;
310
+ /**
311
+ * Convert a half-signed legacy Dash transaction to a psbt-lite.
312
+ *
313
+ * # Arguments
314
+ * * `tx` - The decoded Dash transaction
315
+ * * `network` - Network name ("dash" or "tdash")
316
+ * * `wallet_keys` - The wallet's root keys
317
+ * * `unspents` - Array of `{ chain: number, index: number, value: bigint }` for each input
318
+ */
319
+ static from_half_signed_legacy_transaction_dash(tx: WasmDashTransaction, network: string, wallet_keys: WasmRootWalletKeys, unspents: any): BitGoPsbt;
320
+ /**
321
+ * Convert a half-signed legacy Zcash transaction to a psbt-lite (with block height).
322
+ * Thin wrapper: resolves block_height → consensus_branch_id and delegates to the explicit variant.
323
+ *
324
+ * # Arguments
325
+ * * `tx` - The decoded Zcash transaction
326
+ * * `network` - Network name ("zec" or "tzec")
327
+ * * `wallet_keys` - The wallet's root keys
328
+ * * `unspents` - Array of `{ chain: number, index: number, value: bigint }` for each input
329
+ * * `block_height` - Block height to determine consensus branch ID
330
+ */
331
+ static from_half_signed_legacy_transaction_zcash_with_block_height(tx: WasmZcashTransaction, network: string, wallet_keys: WasmRootWalletKeys, unspents: any, block_height: number): BitGoPsbt;
332
+ /**
333
+ * Convert a half-signed legacy Zcash transaction to a psbt-lite (with consensus branch ID).
334
+ *
335
+ * # Arguments
336
+ * * `tx` - The decoded Zcash transaction
337
+ * * `network` - Network name ("zec" or "tzec")
338
+ * * `wallet_keys` - The wallet's root keys
339
+ * * `unspents` - Array of `{ chain: number, index: number, value: bigint }` for each input
340
+ * * `consensus_branch_id` - Zcash consensus branch ID
341
+ */
342
+ static from_half_signed_legacy_transaction_zcash_with_branch_id(tx: WasmZcashTransaction, network: string, wallet_keys: WasmRootWalletKeys, unspents: any, consensus_branch_id: number): BitGoPsbt;
307
343
  /**
308
344
  * Generate and store MuSig2 nonces for all MuSig2 inputs
309
345
  *
@@ -1363,6 +1399,9 @@ export class WrapPsbt {
1363
1399
  */
1364
1400
  add_output_at_index(index: number, script: Uint8Array, value: bigint): number;
1365
1401
  clone(): WrapPsbt;
1402
+ delete_input_kv(index: number, key: any): void;
1403
+ delete_kv(key: any): void;
1404
+ delete_output_kv(index: number, key: any): void;
1366
1405
  static deserialize(psbt: Uint8Array): WrapPsbt;
1367
1406
  /**
1368
1407
  * Extract the final transaction from a finalized PSBT