@bitgo/wasm-utxo 1.44.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cjs/js/fixedScriptWallet/BitGoPsbt.d.ts +34 -50
  2. package/dist/cjs/js/fixedScriptWallet/BitGoPsbt.js +71 -32
  3. package/dist/cjs/js/fixedScriptWallet/RootWalletKeys.d.ts +5 -0
  4. package/dist/cjs/js/fixedScriptWallet/RootWalletKeys.js +7 -0
  5. package/dist/cjs/js/fixedScriptWallet/index.d.ts +1 -1
  6. package/dist/cjs/js/fixedScriptWallet/index.js +2 -1
  7. package/dist/cjs/js/index.d.ts +6 -1
  8. package/dist/cjs/js/psbt.d.ts +15 -6
  9. package/dist/cjs/js/transaction.d.ts +2 -6
  10. package/dist/cjs/js/transaction.js +6 -6
  11. package/dist/cjs/js/wasm/wasm_utxo.d.ts +32 -86
  12. package/dist/cjs/js/wasm/wasm_utxo.js +463 -81
  13. package/dist/cjs/js/wasm/wasm_utxo_bg.wasm +0 -0
  14. package/dist/cjs/js/wasm/wasm_utxo_bg.wasm.d.ts +71 -54
  15. package/dist/esm/js/fixedScriptWallet/BitGoPsbt.d.ts +34 -50
  16. package/dist/esm/js/fixedScriptWallet/BitGoPsbt.js +71 -33
  17. package/dist/esm/js/fixedScriptWallet/RootWalletKeys.d.ts +5 -0
  18. package/dist/esm/js/fixedScriptWallet/RootWalletKeys.js +7 -0
  19. package/dist/esm/js/fixedScriptWallet/index.d.ts +1 -1
  20. package/dist/esm/js/fixedScriptWallet/index.js +1 -1
  21. package/dist/esm/js/index.d.ts +6 -1
  22. package/dist/esm/js/index.js +1 -1
  23. package/dist/esm/js/psbt.d.ts +15 -6
  24. package/dist/esm/js/transaction.d.ts +2 -6
  25. package/dist/esm/js/transaction.js +6 -6
  26. package/dist/esm/js/wasm/wasm_utxo.d.ts +32 -86
  27. package/dist/esm/js/wasm/wasm_utxo_bg.js +463 -81
  28. package/dist/esm/js/wasm/wasm_utxo_bg.wasm +0 -0
  29. package/dist/esm/js/wasm/wasm_utxo_bg.wasm.d.ts +71 -54
  30. package/package.json +11 -4
@@ -368,6 +368,36 @@ class BitGoPsbt {
368
368
  const ptr = this.__destroy_into_raw();
369
369
  wasm.__wbg_bitgopsbt_free(ptr, 0);
370
370
  }
371
+ /**
372
+ * @param {string} txid
373
+ * @param {number} vout
374
+ * @param {bigint} value
375
+ * @param {Uint8Array} script
376
+ * @param {number | null} [sequence]
377
+ * @param {Uint8Array | null} [prev_tx]
378
+ * @returns {number}
379
+ */
380
+ add_input(txid, vout, value, script, sequence, prev_tx) {
381
+ try {
382
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
383
+ const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
384
+ const len0 = WASM_VECTOR_LEN;
385
+ const ptr1 = passArray8ToWasm0(script, wasm.__wbindgen_export);
386
+ const len1 = WASM_VECTOR_LEN;
387
+ var ptr2 = isLikeNone(prev_tx) ? 0 : passArray8ToWasm0(prev_tx, wasm.__wbindgen_export);
388
+ var len2 = WASM_VECTOR_LEN;
389
+ wasm.bitgopsbt_add_input(retptr, this.__wbg_ptr, ptr0, len0, vout, value, ptr1, len1, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0, ptr2, len2);
390
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
391
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
392
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
393
+ if (r2) {
394
+ throw takeObject(r1);
395
+ }
396
+ return r0 >>> 0;
397
+ } finally {
398
+ wasm.__wbindgen_add_to_stack_pointer(16);
399
+ }
400
+ }
371
401
  /**
372
402
  * Add an input to the PSBT
373
403
  *
@@ -380,6 +410,7 @@ class BitGoPsbt {
380
410
  *
381
411
  * # Returns
382
412
  * The index of the newly added input
413
+ * @param {number} index
383
414
  * @param {string} txid
384
415
  * @param {number} vout
385
416
  * @param {bigint} value
@@ -388,7 +419,7 @@ class BitGoPsbt {
388
419
  * @param {Uint8Array | null} [prev_tx]
389
420
  * @returns {number}
390
421
  */
391
- add_input(txid, vout, value, script, sequence, prev_tx) {
422
+ add_input_at_index(index, txid, vout, value, script, sequence, prev_tx) {
392
423
  try {
393
424
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
394
425
  const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -397,7 +428,7 @@ class BitGoPsbt {
397
428
  const len1 = WASM_VECTOR_LEN;
398
429
  var ptr2 = isLikeNone(prev_tx) ? 0 : passArray8ToWasm0(prev_tx, wasm.__wbindgen_export);
399
430
  var len2 = WASM_VECTOR_LEN;
400
- wasm.bitgopsbt_add_input(retptr, this.__wbg_ptr, ptr0, len0, vout, value, ptr1, len1, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0, ptr2, len2);
431
+ wasm.bitgopsbt_add_input_at_index(retptr, this.__wbg_ptr, index, ptr0, len0, vout, value, ptr1, len1, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0, ptr2, len2);
401
432
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
402
433
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
403
434
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -410,14 +441,6 @@ class BitGoPsbt {
410
441
  }
411
442
  }
412
443
  /**
413
- * Add an output to the PSBT
414
- *
415
- * # Arguments
416
- * * `script` - The output script (scriptPubKey)
417
- * * `value` - The value in satoshis
418
- *
419
- * # Returns
420
- * The index of the newly added output
421
444
  * @param {Uint8Array} script
422
445
  * @param {bigint} value
423
446
  * @returns {number}
@@ -440,14 +463,29 @@ class BitGoPsbt {
440
463
  }
441
464
  }
442
465
  /**
443
- * Add an output to the PSBT by address
444
- *
445
- * # Arguments
446
- * * `address` - The destination address
447
- * * `value` - The value in satoshis
448
- *
449
- * # Returns
450
- * The index of the newly added output
466
+ * @param {number} index
467
+ * @param {Uint8Array} script
468
+ * @param {bigint} value
469
+ * @returns {number}
470
+ */
471
+ add_output_at_index(index, script, value) {
472
+ try {
473
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
474
+ const ptr0 = passArray8ToWasm0(script, wasm.__wbindgen_export);
475
+ const len0 = WASM_VECTOR_LEN;
476
+ wasm.bitgopsbt_add_output_at_index(retptr, this.__wbg_ptr, index, ptr0, len0, value);
477
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
478
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
479
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
480
+ if (r2) {
481
+ throw takeObject(r1);
482
+ }
483
+ return r0 >>> 0;
484
+ } finally {
485
+ wasm.__wbindgen_add_to_stack_pointer(16);
486
+ }
487
+ }
488
+ /**
451
489
  * @param {string} address
452
490
  * @param {bigint} value
453
491
  * @returns {number}
@@ -469,6 +507,29 @@ class BitGoPsbt {
469
507
  wasm.__wbindgen_add_to_stack_pointer(16);
470
508
  }
471
509
  }
510
+ /**
511
+ * @param {number} index
512
+ * @param {string} address
513
+ * @param {bigint} value
514
+ * @returns {number}
515
+ */
516
+ add_output_with_address_at_index(index, address, value) {
517
+ try {
518
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
519
+ const ptr0 = passStringToWasm0(address, wasm.__wbindgen_export, wasm.__wbindgen_export2);
520
+ const len0 = WASM_VECTOR_LEN;
521
+ wasm.bitgopsbt_add_output_with_address_at_index(retptr, this.__wbg_ptr, index, ptr0, len0, value);
522
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
523
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
524
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
525
+ if (r2) {
526
+ throw takeObject(r1);
527
+ }
528
+ return r0 >>> 0;
529
+ } finally {
530
+ wasm.__wbindgen_add_to_stack_pointer(16);
531
+ }
532
+ }
472
533
  /**
473
534
  * Add a PayGo attestation to a PSBT output
474
535
  *
@@ -502,20 +563,6 @@ class BitGoPsbt {
502
563
  }
503
564
  }
504
565
  /**
505
- * Add a replay protection input to the PSBT
506
- *
507
- * Replay protection inputs are P2SH-P2PK inputs used on forked networks to prevent
508
- * transaction replay attacks. They use a simple pubkey script without wallet derivation.
509
- *
510
- * # Arguments
511
- * * `ecpair` - The ECPair containing the public key for the replay protection input
512
- * * `txid` - The transaction ID (hex string) of the output being spent
513
- * * `vout` - The output index being spent
514
- * * `value` - The value in satoshis
515
- * * `sequence` - Optional sequence number (default: 0xFFFFFFFE for RBF)
516
- *
517
- * # Returns
518
- * The index of the newly added input
519
566
  * @param {WasmECPair} ecpair
520
567
  * @param {string} txid
521
568
  * @param {number} vout
@@ -545,25 +592,36 @@ class BitGoPsbt {
545
592
  }
546
593
  }
547
594
  /**
548
- * Add a wallet input with full PSBT metadata
549
- *
550
- * This is a higher-level method that adds an input and populates all required
551
- * PSBT fields (scripts, derivation info, etc.) based on the wallet's chain type.
552
- *
553
- * # Arguments
554
- * * `txid` - The transaction ID (hex string)
555
- * * `vout` - The output index being spent
556
- * * `value` - The value in satoshis
557
- * * `chain` - The chain code (0/1=p2sh, 10/11=p2shP2wsh, 20/21=p2wsh, 30/31=p2tr, 40/41=p2trMusig2)
558
- * * `index` - The derivation index
559
- * * `wallet_keys` - The root wallet keys
560
- * * `signer` - The key that will sign ("user", "backup", or "bitgo") - required for p2tr/p2trMusig2
561
- * * `cosigner` - The key that will co-sign - required for p2tr/p2trMusig2
562
- * * `sequence` - Optional sequence number (default: 0xFFFFFFFE for RBF)
563
- * * `prev_tx` - Optional full previous transaction bytes (for non-segwit)
564
- *
565
- * # Returns
566
- * The index of the newly added input
595
+ * @param {number} index
596
+ * @param {WasmECPair} ecpair
597
+ * @param {string} txid
598
+ * @param {number} vout
599
+ * @param {bigint} value
600
+ * @param {number | null} [sequence]
601
+ * @param {Uint8Array | null} [prev_tx]
602
+ * @returns {number}
603
+ */
604
+ add_replay_protection_input_at_index(index, ecpair, txid, vout, value, sequence, prev_tx) {
605
+ try {
606
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
607
+ _assertClass(ecpair, WasmECPair);
608
+ const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
609
+ const len0 = WASM_VECTOR_LEN;
610
+ var ptr1 = isLikeNone(prev_tx) ? 0 : passArray8ToWasm0(prev_tx, wasm.__wbindgen_export);
611
+ var len1 = WASM_VECTOR_LEN;
612
+ wasm.bitgopsbt_add_replay_protection_input_at_index(retptr, this.__wbg_ptr, index, ecpair.__wbg_ptr, ptr0, len0, vout, value, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0, ptr1, len1);
613
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
614
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
615
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
616
+ if (r2) {
617
+ throw takeObject(r1);
618
+ }
619
+ return r0 >>> 0;
620
+ } finally {
621
+ wasm.__wbindgen_add_to_stack_pointer(16);
622
+ }
623
+ }
624
+ /**
567
625
  * @param {string} txid
568
626
  * @param {number} vout
569
627
  * @param {bigint} value
@@ -601,19 +659,44 @@ class BitGoPsbt {
601
659
  }
602
660
  }
603
661
  /**
604
- * Add a wallet output with full PSBT metadata
605
- *
606
- * This creates a verifiable wallet output (typically for change) with all required
607
- * PSBT fields (scripts, derivation info) based on the wallet's chain type.
608
- *
609
- * # Arguments
610
- * * `chain` - The chain code (0/1=p2sh, 10/11=p2shP2wsh, 20/21=p2wsh, 30/31=p2tr, 40/41=p2trMusig2)
611
- * * `index` - The derivation index
612
- * * `value` - The value in satoshis
613
- * * `wallet_keys` - The root wallet keys
614
- *
615
- * # Returns
616
- * The index of the newly added output
662
+ * @param {number} index
663
+ * @param {string} txid
664
+ * @param {number} vout
665
+ * @param {bigint} value
666
+ * @param {WasmRootWalletKeys} wallet_keys
667
+ * @param {number} chain
668
+ * @param {number} derivation_index
669
+ * @param {string | null} [signer]
670
+ * @param {string | null} [cosigner]
671
+ * @param {number | null} [sequence]
672
+ * @param {Uint8Array | null} [prev_tx]
673
+ * @returns {number}
674
+ */
675
+ add_wallet_input_at_index(index, txid, vout, value, wallet_keys, chain, derivation_index, signer, cosigner, sequence, prev_tx) {
676
+ try {
677
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
678
+ const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
679
+ const len0 = WASM_VECTOR_LEN;
680
+ _assertClass(wallet_keys, WasmRootWalletKeys);
681
+ var ptr1 = isLikeNone(signer) ? 0 : passStringToWasm0(signer, wasm.__wbindgen_export, wasm.__wbindgen_export2);
682
+ var len1 = WASM_VECTOR_LEN;
683
+ var ptr2 = isLikeNone(cosigner) ? 0 : passStringToWasm0(cosigner, wasm.__wbindgen_export, wasm.__wbindgen_export2);
684
+ var len2 = WASM_VECTOR_LEN;
685
+ var ptr3 = isLikeNone(prev_tx) ? 0 : passArray8ToWasm0(prev_tx, wasm.__wbindgen_export);
686
+ var len3 = WASM_VECTOR_LEN;
687
+ wasm.bitgopsbt_add_wallet_input_at_index(retptr, this.__wbg_ptr, index, ptr0, len0, vout, value, wallet_keys.__wbg_ptr, chain, derivation_index, ptr1, len1, ptr2, len2, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0, ptr3, len3);
688
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
689
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
690
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
691
+ if (r2) {
692
+ throw takeObject(r1);
693
+ }
694
+ return r0 >>> 0;
695
+ } finally {
696
+ wasm.__wbindgen_add_to_stack_pointer(16);
697
+ }
698
+ }
699
+ /**
617
700
  * @param {number} chain
618
701
  * @param {number} index
619
702
  * @param {bigint} value
@@ -636,6 +719,30 @@ class BitGoPsbt {
636
719
  wasm.__wbindgen_add_to_stack_pointer(16);
637
720
  }
638
721
  }
722
+ /**
723
+ * @param {number} index
724
+ * @param {number} chain
725
+ * @param {number} derivation_index
726
+ * @param {bigint} value
727
+ * @param {WasmRootWalletKeys} wallet_keys
728
+ * @returns {number}
729
+ */
730
+ add_wallet_output_at_index(index, chain, derivation_index, value, wallet_keys) {
731
+ try {
732
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
733
+ _assertClass(wallet_keys, WasmRootWalletKeys);
734
+ wasm.bitgopsbt_add_wallet_output_at_index(retptr, this.__wbg_ptr, index, chain, derivation_index, value, wallet_keys.__wbg_ptr);
735
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
736
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
737
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
738
+ if (r2) {
739
+ throw takeObject(r1);
740
+ }
741
+ return r0 >>> 0;
742
+ } finally {
743
+ wasm.__wbindgen_add_to_stack_pointer(16);
744
+ }
745
+ }
639
746
  /**
640
747
  * Combine/merge data from another PSBT into this one
641
748
  *
@@ -1018,6 +1125,14 @@ class BitGoPsbt {
1018
1125
  wasm.__wbindgen_add_to_stack_pointer(16);
1019
1126
  }
1020
1127
  }
1128
+ /**
1129
+ * Returns the global xpubs from the PSBT as an array of WasmBIP32 instances.
1130
+ * @returns {any}
1131
+ */
1132
+ get_global_xpubs() {
1133
+ const ret = wasm.bitgopsbt_get_global_xpubs(this.__wbg_ptr);
1134
+ return takeObject(ret);
1135
+ }
1021
1136
  /**
1022
1137
  * Get all PSBT inputs as an array of PsbtInputData
1023
1138
  *
@@ -1222,6 +1337,38 @@ class BitGoPsbt {
1222
1337
  wasm.__wbindgen_add_to_stack_pointer(16);
1223
1338
  }
1224
1339
  }
1340
+ /**
1341
+ * @param {number} index
1342
+ */
1343
+ remove_input(index) {
1344
+ try {
1345
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1346
+ wasm.bitgopsbt_remove_input(retptr, this.__wbg_ptr, index);
1347
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1348
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1349
+ if (r1) {
1350
+ throw takeObject(r0);
1351
+ }
1352
+ } finally {
1353
+ wasm.__wbindgen_add_to_stack_pointer(16);
1354
+ }
1355
+ }
1356
+ /**
1357
+ * @param {number} index
1358
+ */
1359
+ remove_output(index) {
1360
+ try {
1361
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1362
+ wasm.bitgopsbt_remove_output(retptr, this.__wbg_ptr, index);
1363
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1364
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1365
+ if (r1) {
1366
+ throw takeObject(r0);
1367
+ }
1368
+ } finally {
1369
+ wasm.__wbindgen_add_to_stack_pointer(16);
1370
+ }
1371
+ }
1225
1372
  /**
1226
1373
  * Serialize the PSBT to bytes
1227
1374
  *
@@ -2021,6 +2168,35 @@ class FixedScriptWalletNamespace {
2021
2168
  wasm.__wbindgen_add_to_stack_pointer(16);
2022
2169
  }
2023
2170
  }
2171
+ /**
2172
+ * Sort an xpub triple into [user, backup, bitgo] order by validating
2173
+ * against the PSBT's wallet inputs. Returns a RootWalletKeys with the
2174
+ * correct ordering.
2175
+ * @param {BitGoPsbt} psbt
2176
+ * @param {WasmBIP32} user_or_a
2177
+ * @param {WasmBIP32} backup_or_b
2178
+ * @param {WasmBIP32} bitgo_or_c
2179
+ * @returns {WasmRootWalletKeys}
2180
+ */
2181
+ static to_wallet_keys(psbt, user_or_a, backup_or_b, bitgo_or_c) {
2182
+ try {
2183
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2184
+ _assertClass(psbt, BitGoPsbt);
2185
+ _assertClass(user_or_a, WasmBIP32);
2186
+ _assertClass(backup_or_b, WasmBIP32);
2187
+ _assertClass(bitgo_or_c, WasmBIP32);
2188
+ wasm.fixedscriptwalletnamespace_to_wallet_keys(retptr, psbt.__wbg_ptr, user_or_a.__wbg_ptr, backup_or_b.__wbg_ptr, bitgo_or_c.__wbg_ptr);
2189
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2190
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2191
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2192
+ if (r2) {
2193
+ throw takeObject(r1);
2194
+ }
2195
+ return WasmRootWalletKeys.__wrap(r0);
2196
+ } finally {
2197
+ wasm.__wbindgen_add_to_stack_pointer(16);
2198
+ }
2199
+ }
2024
2200
  }
2025
2201
  if (Symbol.dispose) FixedScriptWalletNamespace.prototype[Symbol.dispose] = FixedScriptWalletNamespace.prototype.free;
2026
2202
  exports.FixedScriptWalletNamespace = FixedScriptWalletNamespace;
@@ -3512,6 +3688,29 @@ class WasmTransaction {
3512
3688
  const ptr = this.__destroy_into_raw();
3513
3689
  wasm.__wbg_wasmtransaction_free(ptr, 0);
3514
3690
  }
3691
+ /**
3692
+ * @param {string} txid
3693
+ * @param {number} vout
3694
+ * @param {number | null} [sequence]
3695
+ * @returns {number}
3696
+ */
3697
+ add_input(txid, vout, sequence) {
3698
+ try {
3699
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
3700
+ const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
3701
+ const len0 = WASM_VECTOR_LEN;
3702
+ wasm.wasmtransaction_add_input(retptr, this.__wbg_ptr, ptr0, len0, vout, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0);
3703
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
3704
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
3705
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
3706
+ if (r2) {
3707
+ throw takeObject(r1);
3708
+ }
3709
+ return r0 >>> 0;
3710
+ } finally {
3711
+ wasm.__wbindgen_add_to_stack_pointer(16);
3712
+ }
3713
+ }
3515
3714
  /**
3516
3715
  * Add an input to the transaction
3517
3716
  *
@@ -3522,17 +3721,18 @@ class WasmTransaction {
3522
3721
  *
3523
3722
  * # Returns
3524
3723
  * The index of the newly added input
3724
+ * @param {number} index
3525
3725
  * @param {string} txid
3526
3726
  * @param {number} vout
3527
3727
  * @param {number | null} [sequence]
3528
3728
  * @returns {number}
3529
3729
  */
3530
- add_input(txid, vout, sequence) {
3730
+ add_input_at_index(index, txid, vout, sequence) {
3531
3731
  try {
3532
3732
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
3533
3733
  const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
3534
3734
  const len0 = WASM_VECTOR_LEN;
3535
- wasm.wasmtransaction_add_input(retptr, this.__wbg_ptr, ptr0, len0, vout, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0);
3735
+ wasm.wasmtransaction_add_input_at_index(retptr, this.__wbg_ptr, index, ptr0, len0, vout, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0);
3536
3736
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
3537
3737
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
3538
3738
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -3545,14 +3745,6 @@ class WasmTransaction {
3545
3745
  }
3546
3746
  }
3547
3747
  /**
3548
- * Add an output to the transaction
3549
- *
3550
- * # Arguments
3551
- * * `script` - The output script (scriptPubKey)
3552
- * * `value` - The value in satoshis
3553
- *
3554
- * # Returns
3555
- * The index of the newly added output
3556
3748
  * @param {Uint8Array} script
3557
3749
  * @param {bigint} value
3558
3750
  * @returns {number}
@@ -3563,6 +3755,29 @@ class WasmTransaction {
3563
3755
  const ret = wasm.wasmtransaction_add_output(this.__wbg_ptr, ptr0, len0, value);
3564
3756
  return ret >>> 0;
3565
3757
  }
3758
+ /**
3759
+ * @param {number} index
3760
+ * @param {Uint8Array} script
3761
+ * @param {bigint} value
3762
+ * @returns {number}
3763
+ */
3764
+ add_output_at_index(index, script, value) {
3765
+ try {
3766
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
3767
+ const ptr0 = passArray8ToWasm0(script, wasm.__wbindgen_export);
3768
+ const len0 = WASM_VECTOR_LEN;
3769
+ wasm.wasmtransaction_add_output_at_index(retptr, this.__wbg_ptr, index, ptr0, len0, value);
3770
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
3771
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
3772
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
3773
+ if (r2) {
3774
+ throw takeObject(r1);
3775
+ }
3776
+ return r0 >>> 0;
3777
+ } finally {
3778
+ wasm.__wbindgen_add_to_stack_pointer(16);
3779
+ }
3780
+ }
3566
3781
  /**
3567
3782
  * Create an empty transaction (version 1, locktime 0)
3568
3783
  * @returns {WasmTransaction}
@@ -4237,6 +4452,33 @@ class WrapPsbt {
4237
4452
  const ptr = this.__destroy_into_raw();
4238
4453
  wasm.__wbg_wrappsbt_free(ptr, 0);
4239
4454
  }
4455
+ /**
4456
+ * @param {string} txid
4457
+ * @param {number} vout
4458
+ * @param {bigint} value
4459
+ * @param {Uint8Array} script
4460
+ * @param {number | null} [sequence]
4461
+ * @returns {number}
4462
+ */
4463
+ addInput(txid, vout, value, script, sequence) {
4464
+ try {
4465
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
4466
+ const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
4467
+ const len0 = WASM_VECTOR_LEN;
4468
+ const ptr1 = passArray8ToWasm0(script, wasm.__wbindgen_export);
4469
+ const len1 = WASM_VECTOR_LEN;
4470
+ wasm.wrappsbt_addInput(retptr, this.__wbg_ptr, ptr0, len0, vout, value, ptr1, len1, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0);
4471
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
4472
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
4473
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
4474
+ if (r2) {
4475
+ throw takeObject(r1);
4476
+ }
4477
+ return r0 >>> 0;
4478
+ } finally {
4479
+ wasm.__wbindgen_add_to_stack_pointer(16);
4480
+ }
4481
+ }
4240
4482
  /**
4241
4483
  * Add an input to the PSBT
4242
4484
  *
@@ -4249,6 +4491,7 @@ class WrapPsbt {
4249
4491
  *
4250
4492
  * # Returns
4251
4493
  * The index of the newly added input
4494
+ * @param {number} index
4252
4495
  * @param {string} txid
4253
4496
  * @param {number} vout
4254
4497
  * @param {bigint} value
@@ -4256,14 +4499,14 @@ class WrapPsbt {
4256
4499
  * @param {number | null} [sequence]
4257
4500
  * @returns {number}
4258
4501
  */
4259
- addInput(txid, vout, value, script, sequence) {
4502
+ addInputAtIndex(index, txid, vout, value, script, sequence) {
4260
4503
  try {
4261
4504
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
4262
4505
  const ptr0 = passStringToWasm0(txid, wasm.__wbindgen_export, wasm.__wbindgen_export2);
4263
4506
  const len0 = WASM_VECTOR_LEN;
4264
4507
  const ptr1 = passArray8ToWasm0(script, wasm.__wbindgen_export);
4265
4508
  const len1 = WASM_VECTOR_LEN;
4266
- wasm.wrappsbt_addInput(retptr, this.__wbg_ptr, ptr0, len0, vout, value, ptr1, len1, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0);
4509
+ wasm.wrappsbt_addInputAtIndex(retptr, this.__wbg_ptr, index, ptr0, len0, vout, value, ptr1, len1, isLikeNone(sequence) ? 0x100000001 : (sequence) >>> 0);
4267
4510
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
4268
4511
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
4269
4512
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -4275,6 +4518,17 @@ class WrapPsbt {
4275
4518
  wasm.__wbindgen_add_to_stack_pointer(16);
4276
4519
  }
4277
4520
  }
4521
+ /**
4522
+ * @param {Uint8Array} script
4523
+ * @param {bigint} value
4524
+ * @returns {number}
4525
+ */
4526
+ addOutput(script, value) {
4527
+ const ptr0 = passArray8ToWasm0(script, wasm.__wbindgen_export);
4528
+ const len0 = WASM_VECTOR_LEN;
4529
+ const ret = wasm.wrappsbt_addOutput(this.__wbg_ptr, ptr0, len0, value);
4530
+ return ret >>> 0;
4531
+ }
4278
4532
  /**
4279
4533
  * Add an output to the PSBT
4280
4534
  *
@@ -4284,15 +4538,27 @@ class WrapPsbt {
4284
4538
  *
4285
4539
  * # Returns
4286
4540
  * The index of the newly added output
4541
+ * @param {number} index
4287
4542
  * @param {Uint8Array} script
4288
4543
  * @param {bigint} value
4289
4544
  * @returns {number}
4290
4545
  */
4291
- addOutput(script, value) {
4292
- const ptr0 = passArray8ToWasm0(script, wasm.__wbindgen_export);
4293
- const len0 = WASM_VECTOR_LEN;
4294
- const ret = wasm.wrappsbt_addOutput(this.__wbg_ptr, ptr0, len0, value);
4295
- return ret >>> 0;
4546
+ addOutputAtIndex(index, script, value) {
4547
+ try {
4548
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
4549
+ const ptr0 = passArray8ToWasm0(script, wasm.__wbindgen_export);
4550
+ const len0 = WASM_VECTOR_LEN;
4551
+ wasm.wrappsbt_addOutputAtIndex(retptr, this.__wbg_ptr, index, ptr0, len0, value);
4552
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
4553
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
4554
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
4555
+ if (r2) {
4556
+ throw takeObject(r1);
4557
+ }
4558
+ return r0 >>> 0;
4559
+ } finally {
4560
+ wasm.__wbindgen_add_to_stack_pointer(16);
4561
+ }
4296
4562
  }
4297
4563
  /**
4298
4564
  * @returns {WrapPsbt}
@@ -4361,6 +4627,14 @@ class WrapPsbt {
4361
4627
  wasm.__wbindgen_add_to_stack_pointer(16);
4362
4628
  }
4363
4629
  }
4630
+ /**
4631
+ * Get global xpubs from the PSBT as an array of WasmBIP32 instances.
4632
+ * @returns {any}
4633
+ */
4634
+ getGlobalXpubs() {
4635
+ const ret = wasm.wrappsbt_getGlobalXpubs(this.__wbg_ptr);
4636
+ return takeObject(ret);
4637
+ }
4364
4638
  /**
4365
4639
  * Get all PSBT inputs as an array of PsbtInputData
4366
4640
  *
@@ -4530,6 +4804,38 @@ class WrapPsbt {
4530
4804
  const ret = wasm.wrappsbt_outputCount(this.__wbg_ptr);
4531
4805
  return ret >>> 0;
4532
4806
  }
4807
+ /**
4808
+ * @param {number} index
4809
+ */
4810
+ removeInput(index) {
4811
+ try {
4812
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
4813
+ wasm.wrappsbt_removeInput(retptr, this.__wbg_ptr, index);
4814
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
4815
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
4816
+ if (r1) {
4817
+ throw takeObject(r0);
4818
+ }
4819
+ } finally {
4820
+ wasm.__wbindgen_add_to_stack_pointer(16);
4821
+ }
4822
+ }
4823
+ /**
4824
+ * @param {number} index
4825
+ */
4826
+ removeOutput(index) {
4827
+ try {
4828
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
4829
+ wasm.wrappsbt_removeOutput(retptr, this.__wbg_ptr, index);
4830
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
4831
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
4832
+ if (r1) {
4833
+ throw takeObject(r0);
4834
+ }
4835
+ } finally {
4836
+ wasm.__wbindgen_add_to_stack_pointer(16);
4837
+ }
4838
+ }
4533
4839
  /**
4534
4840
  * @returns {Uint8Array}
4535
4841
  */
@@ -4954,6 +5260,13 @@ function __wbg_get_imports() {
4954
5260
  const ret = Error(getStringFromWasm0(arg0, arg1));
4955
5261
  return addHeapObject(ret);
4956
5262
  },
5263
+ __wbg___wbindgen_debug_string_0bc8482c6e3508ae: function(arg0, arg1) {
5264
+ const ret = debugString(getObject(arg1));
5265
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
5266
+ const len1 = WASM_VECTOR_LEN;
5267
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
5268
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
5269
+ },
4957
5270
  __wbg___wbindgen_is_function_0095a73b8b156f76: function(arg0) {
4958
5271
  const ret = typeof(getObject(arg0)) === 'function';
4959
5272
  return ret;
@@ -5097,6 +5410,10 @@ function __wbg_get_imports() {
5097
5410
  const ret = getObject(arg0).versions;
5098
5411
  return addHeapObject(ret);
5099
5412
  },
5413
+ __wbg_wasmbip32_new: function(arg0) {
5414
+ const ret = WasmBIP32.__wrap(arg0);
5415
+ return addHeapObject(ret);
5416
+ },
5100
5417
  __wbg_wasmdashtransaction_new: function(arg0) {
5101
5418
  const ret = WasmDashTransaction.__wrap(arg0);
5102
5419
  return addHeapObject(ret);
@@ -5223,6 +5540,71 @@ function addBorrowedObject(obj) {
5223
5540
  return stack_pointer;
5224
5541
  }
5225
5542
 
5543
+ function debugString(val) {
5544
+ // primitive types
5545
+ const type = typeof val;
5546
+ if (type == 'number' || type == 'boolean' || val == null) {
5547
+ return `${val}`;
5548
+ }
5549
+ if (type == 'string') {
5550
+ return `"${val}"`;
5551
+ }
5552
+ if (type == 'symbol') {
5553
+ const description = val.description;
5554
+ if (description == null) {
5555
+ return 'Symbol';
5556
+ } else {
5557
+ return `Symbol(${description})`;
5558
+ }
5559
+ }
5560
+ if (type == 'function') {
5561
+ const name = val.name;
5562
+ if (typeof name == 'string' && name.length > 0) {
5563
+ return `Function(${name})`;
5564
+ } else {
5565
+ return 'Function';
5566
+ }
5567
+ }
5568
+ // objects
5569
+ if (Array.isArray(val)) {
5570
+ const length = val.length;
5571
+ let debug = '[';
5572
+ if (length > 0) {
5573
+ debug += debugString(val[0]);
5574
+ }
5575
+ for(let i = 1; i < length; i++) {
5576
+ debug += ', ' + debugString(val[i]);
5577
+ }
5578
+ debug += ']';
5579
+ return debug;
5580
+ }
5581
+ // Test for built-in
5582
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
5583
+ let className;
5584
+ if (builtInMatches && builtInMatches.length > 1) {
5585
+ className = builtInMatches[1];
5586
+ } else {
5587
+ // Failed to match the standard '[object ClassName]'
5588
+ return toString.call(val);
5589
+ }
5590
+ if (className == 'Object') {
5591
+ // we're a user defined class or Object
5592
+ // JSON.stringify avoids problems with cycles, and is generally much
5593
+ // easier than looping through ownProperties of `val`.
5594
+ try {
5595
+ return 'Object(' + JSON.stringify(val) + ')';
5596
+ } catch (_) {
5597
+ return 'Object';
5598
+ }
5599
+ }
5600
+ // errors
5601
+ if (val instanceof Error) {
5602
+ return `${val.name}: ${val.message}\n${val.stack}`;
5603
+ }
5604
+ // TODO we could test for more things here, like `Set`s and `Map`s.
5605
+ return className;
5606
+ }
5607
+
5226
5608
  function dropObject(idx) {
5227
5609
  if (idx < 132) return;
5228
5610
  heap[idx] = heap_next;