ecash-lib 4.11.0 → 4.13.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +6 -0
  2. package/dist/consts.d.ts +11 -0
  3. package/dist/consts.d.ts.map +1 -1
  4. package/dist/consts.js +12 -1
  5. package/dist/consts.js.map +1 -1
  6. package/dist/ffi/ecash_lib_wasm_bg_browser.js +2638 -22098
  7. package/dist/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
  8. package/dist/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +3 -3
  9. package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
  10. package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +3 -3
  11. package/dist/ffi/ecash_lib_wasm_browser.d.ts +20 -20
  12. package/dist/ffi/ecash_lib_wasm_browser.js +83 -84
  13. package/dist/ffi/ecash_lib_wasm_nodejs.d.ts +17 -17
  14. package/dist/ffi/ecash_lib_wasm_nodejs.js +83 -84
  15. package/dist/initBrowser.d.ts +1 -1
  16. package/dist/initBrowser.d.ts.map +1 -1
  17. package/dist/initBrowser.js +1 -53
  18. package/dist/initBrowser.js.map +1 -1
  19. package/dist/initNodeJs.d.ts +1 -1
  20. package/dist/initNodeJs.d.ts.map +1 -1
  21. package/dist/initNodeJs.js +1 -50
  22. package/dist/initNodeJs.js.map +1 -1
  23. package/dist/initWasm.d.ts +2 -0
  24. package/dist/initWasm.d.ts.map +1 -0
  25. package/dist/initWasm.js +66 -0
  26. package/dist/initWasm.js.map +1 -0
  27. package/dist/payment/p2shInputData.d.ts +18 -0
  28. package/dist/payment/p2shInputData.d.ts.map +1 -0
  29. package/dist/payment/p2shInputData.js +88 -0
  30. package/dist/payment/p2shInputData.js.map +1 -0
  31. package/dist/psbt.d.ts +54 -4
  32. package/dist/psbt.d.ts.map +1 -1
  33. package/dist/psbt.js +256 -7
  34. package/dist/psbt.js.map +1 -1
  35. package/dist/script.d.ts +11 -1
  36. package/dist/script.d.ts.map +1 -1
  37. package/dist/script.js +24 -0
  38. package/dist/script.js.map +1 -1
  39. package/dist/signatories.d.ts +10 -2
  40. package/dist/signatories.d.ts.map +1 -1
  41. package/dist/signatories.js +156 -1
  42. package/dist/signatories.js.map +1 -1
  43. package/dist/tx.d.ts +40 -0
  44. package/dist/tx.d.ts.map +1 -1
  45. package/dist/tx.js +223 -0
  46. package/dist/tx.js.map +1 -1
  47. package/package.json +18 -5
  48. package/src/consts.ts +13 -0
  49. package/src/ffi/ecash_lib_wasm_bg_browser.js +2638 -22098
  50. package/src/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
  51. package/src/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +3 -3
  52. package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
  53. package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +3 -3
  54. package/src/ffi/ecash_lib_wasm_browser.d.ts +20 -20
  55. package/src/ffi/ecash_lib_wasm_browser.js +83 -84
  56. package/src/ffi/ecash_lib_wasm_nodejs.d.ts +17 -17
  57. package/src/ffi/ecash_lib_wasm_nodejs.js +83 -84
  58. package/src/initBrowser.ts +1 -24
  59. package/src/initNodeJs.ts +1 -18
  60. package/src/initWasm.ts +35 -0
  61. package/src/psbt.ts +328 -10
  62. package/src/script.ts +25 -1
  63. package/src/signatories.ts +214 -3
  64. package/src/tx.ts +279 -0
  65. package/.nycrc +0 -4
@@ -2,55 +2,6 @@
2
2
  // Copyright (c) 2024 The Bitcoin developers
3
3
  // Distributed under the MIT software license, see the accompanying
4
4
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
- Object.defineProperty(o, "default", { enumerable: true, value: v });
18
- }) : function(o, v) {
19
- o["default"] = v;
20
- });
21
- var __importStar = (this && this.__importStar) || (function () {
22
- var ownKeys = function(o) {
23
- ownKeys = Object.getOwnPropertyNames || function (o) {
24
- var ar = [];
25
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
- return ar;
27
- };
28
- return ownKeys(o);
29
- };
30
- return function (mod) {
31
- if (mod && mod.__esModule) return mod;
32
- var result = {};
33
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
- __setModuleDefault(result, mod);
35
- return result;
36
- };
37
- })();
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
- const ffi = __importStar(require("./ffi/ecash_lib_wasm_nodejs.js"));
40
- const ecc_js_1 = require("./ecc.js");
41
- const hash_js_1 = require("./hash.js");
42
- const publicKeyCrypto_js_1 = require("./publicKeyCrypto.js");
43
- (0, ecc_js_1.__setEcc)(new ffi.Ecc());
44
- (0, hash_js_1.__setHashes)({
45
- sha256: ffi.sha256,
46
- sha256d: ffi.sha256d,
47
- shaRmd160: ffi.shaRmd160,
48
- sha512: ffi.sha512,
49
- Sha256H: ffi.Sha256H,
50
- Sha512H: ffi.Sha512H,
51
- });
52
- (0, publicKeyCrypto_js_1.__setPkc)({
53
- algoSupported: ffi.publicKeyCryptoAlgoSupported,
54
- verify: ffi.publicKeyCryptoVerify,
55
- });
6
+ require("./initWasm.js");
56
7
  //# sourceMappingURL=initNodeJs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"initNodeJs.js","sourceRoot":"","sources":["../src/initNodeJs.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,oEAAsD;AACtD,qCAAoC;AACpC,uCAAwC;AACxC,6DAAgD;AAEhD,IAAA,iBAAQ,EAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACxB,IAAA,qBAAW,EAAC;IACR,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,SAAS,EAAE,GAAG,CAAC,SAAS;IACxB,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,OAAO,EAAE,GAAG,CAAC,OAAO;CACvB,CAAC,CAAC;AACH,IAAA,6BAAQ,EAAC;IACL,aAAa,EAAE,GAAG,CAAC,4BAA4B;IAC/C,MAAM,EAAE,GAAG,CAAC,qBAAqB;CACpC,CAAC,CAAC"}
1
+ {"version":3,"file":"initNodeJs.js","sourceRoot":"","sources":["../src/initNodeJs.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;AAEtE,yBAAuB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=initWasm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initWasm.d.ts","sourceRoot":"","sources":["../src/initWasm.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ // Copyright (c) 2024 The Bitcoin developers
3
+ // Distributed under the MIT software license, see the accompanying
4
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const ffi = __importStar(require("./ffi/ecash_lib_wasm_browser.js"));
40
+ const ecash_lib_wasm_bg_browser_js_1 = require("./ffi/ecash_lib_wasm_bg_browser.js");
41
+ const ecc_js_1 = require("./ecc.js");
42
+ const hash_js_1 = require("./hash.js");
43
+ const publicKeyCrypto_js_1 = require("./publicKeyCrypto.js");
44
+ /**
45
+ * Initialize WASM from an embedded base64 payload.
46
+ *
47
+ * We use this for both browser and Node.js entry points so bundlers (e.g.
48
+ * Next.js webpack on the server) do not need to resolve a separate .wasm file
49
+ * or polyfill fs.readFileSync at import time.
50
+ */
51
+ const wasmRaw = Uint8Array.from(atob(ecash_lib_wasm_bg_browser_js_1.ECASH_LIB_WASM_BASE64), c => c.charCodeAt(0));
52
+ ffi.initSync(wasmRaw);
53
+ (0, ecc_js_1.__setEcc)(new ffi.Ecc());
54
+ (0, hash_js_1.__setHashes)({
55
+ sha256: ffi.sha256,
56
+ sha256d: ffi.sha256d,
57
+ shaRmd160: ffi.shaRmd160,
58
+ sha512: ffi.sha512,
59
+ Sha256H: ffi.Sha256H,
60
+ Sha512H: ffi.Sha512H,
61
+ });
62
+ (0, publicKeyCrypto_js_1.__setPkc)({
63
+ algoSupported: ffi.publicKeyCryptoAlgoSupported,
64
+ verify: ffi.publicKeyCryptoVerify,
65
+ });
66
+ //# sourceMappingURL=initWasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initWasm.js","sourceRoot":"","sources":["../src/initWasm.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,qEAAuD;AACvD,qFAA2E;AAC3E,qCAAoC;AACpC,uCAAwC;AACxC,6DAAgD;AAEhD;;;;;;GAMG;AACH,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oDAAqB,CAAC,EAAE,CAAC,CAAC,EAAE,CAC7D,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,CAAC;AACF,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAEtB,IAAA,iBAAQ,EAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACxB,IAAA,qBAAW,EAAC;IACR,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,SAAS,EAAE,GAAG,CAAC,SAAS;IACxB,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,OAAO,EAAE,GAAG,CAAC,OAAO;CACvB,CAAC,CAAC;AACH,IAAA,6BAAQ,EAAC;IACL,aAAa,EAAE,GAAG,CAAC,4BAA4B;IAC/C,MAAM,EAAE,GAAG,CAAC,qBAAqB;CACpC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Parse scriptSig from a P2SH input that uses the P2SH_INPUT_DATA redeem script format:
3
+ * Redeem script: pushBytes(data) OP_DROP OP_CHECKSIG
4
+ * scriptSig = <sig> <pubkey> <redeemScript>
5
+ *
6
+ * @param scriptSig - The scriptSig bytes from the spending input
7
+ * @returns The sender's P2PKH address, or undefined if the scriptSig doesn't match the expected format
8
+ */
9
+ export declare function getP2shInputDataSenderAddress(scriptSig: Uint8Array, prefix?: string): string | undefined;
10
+ /**
11
+ * Parse scriptSig from a P2SH input that uses the P2SH_INPUT_DATA redeem script format
12
+ * and return the data push from the redeem script.
13
+ *
14
+ * @param scriptSig - The scriptSig bytes from the spending input
15
+ * @returns The data bytes from the redeem script, or undefined if the format doesn't match
16
+ */
17
+ export declare function getP2shInputDataData(scriptSig: Uint8Array): Uint8Array | undefined;
18
+ //# sourceMappingURL=p2shInputData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2shInputData.d.ts","sourceRoot":"","sources":["../../src/payment/p2shInputData.ts"],"names":[],"mappings":"AASA;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CACzC,SAAS,EAAE,UAAU,EACrB,MAAM,SAAU,GACjB,MAAM,GAAG,SAAS,CA2BpB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAkClF"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ // Copyright (c) 2026 The Bitcoin developers
3
+ // Distributed under the MIT software license, see the accompanying
4
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getP2shInputDataSenderAddress = getP2shInputDataSenderAddress;
7
+ exports.getP2shInputDataData = getP2shInputDataData;
8
+ const bytes_js_1 = require("../io/bytes.js");
9
+ const op_js_1 = require("../op.js");
10
+ const hash_js_1 = require("../hash.js");
11
+ const address_js_1 = require("../address/address.js");
12
+ /**
13
+ * Parse scriptSig from a P2SH input that uses the P2SH_INPUT_DATA redeem script format:
14
+ * Redeem script: pushBytes(data) OP_DROP OP_CHECKSIG
15
+ * scriptSig = <sig> <pubkey> <redeemScript>
16
+ *
17
+ * @param scriptSig - The scriptSig bytes from the spending input
18
+ * @returns The sender's P2PKH address, or undefined if the scriptSig doesn't match the expected format
19
+ */
20
+ function getP2shInputDataSenderAddress(scriptSig, prefix = 'ecash') {
21
+ const pushes = [];
22
+ const bytes = new bytes_js_1.Bytes(scriptSig);
23
+ while (bytes.data.length - bytes.idx > 0) {
24
+ try {
25
+ const op = (0, op_js_1.readOp)(bytes);
26
+ if ((0, op_js_1.isPushOp)(op)) {
27
+ pushes.push(op.data);
28
+ }
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ // scriptSig = <sig> <pubkey> <redeemScript> - we need the pubkey (second-to-last)
35
+ if (pushes.length < 2) {
36
+ return undefined;
37
+ }
38
+ const pubkey = pushes[pushes.length - 2];
39
+ // Pubkey is typically 33 bytes (compressed) or 65 bytes (uncompressed)
40
+ if (pubkey.length !== 33 && pubkey.length !== 65) {
41
+ return undefined;
42
+ }
43
+ const pkh = (0, hash_js_1.shaRmd160)(pubkey);
44
+ return address_js_1.Address.p2pkh(pkh, prefix).toString();
45
+ }
46
+ /**
47
+ * Parse scriptSig from a P2SH input that uses the P2SH_INPUT_DATA redeem script format
48
+ * and return the data push from the redeem script.
49
+ *
50
+ * @param scriptSig - The scriptSig bytes from the spending input
51
+ * @returns The data bytes from the redeem script, or undefined if the format doesn't match
52
+ */
53
+ function getP2shInputDataData(scriptSig) {
54
+ const pushes = [];
55
+ const bytes = new bytes_js_1.Bytes(scriptSig);
56
+ while (bytes.data.length - bytes.idx > 0) {
57
+ try {
58
+ const op = (0, op_js_1.readOp)(bytes);
59
+ if ((0, op_js_1.isPushOp)(op)) {
60
+ pushes.push(op.data);
61
+ }
62
+ }
63
+ catch {
64
+ return undefined;
65
+ }
66
+ }
67
+ // scriptSig = <sig> <pubkey> <redeemScript> - redeem script is last push
68
+ if (pushes.length < 1) {
69
+ return undefined;
70
+ }
71
+ const redeemScript = pushes[pushes.length - 1];
72
+ // Redeem script: pushBytes(data) OP_DROP OP_CHECKSIG - first op is the data push
73
+ const redeemBytes = new bytes_js_1.Bytes(redeemScript);
74
+ if (redeemBytes.data.length - redeemBytes.idx < 1) {
75
+ return undefined;
76
+ }
77
+ try {
78
+ const firstOp = (0, op_js_1.readOp)(redeemBytes);
79
+ if (!(0, op_js_1.isPushOp)(firstOp)) {
80
+ return undefined;
81
+ }
82
+ return firstOp.data;
83
+ }
84
+ catch {
85
+ return undefined;
86
+ }
87
+ }
88
+ //# sourceMappingURL=p2shInputData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2shInputData.js","sourceRoot":"","sources":["../../src/payment/p2shInputData.ts"],"names":[],"mappings":"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"}
package/dist/psbt.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import { Ecc } from './ecc.js';
2
+ import { Script } from './script.js';
3
+ import { type SigHashType } from './sigHashType.js';
1
4
  import { SignData, Tx } from './tx.js';
2
5
  /**
3
6
  * BIP 174 **magic bytes** for PSBT version 0: ASCII `psbt` + `0xff`.
@@ -14,22 +17,33 @@ export declare const PSBT_MAGIC: Uint8Array<ArrayBuffer>;
14
17
  * {@link resolveWitnessFromKey00}.
15
18
  */
16
19
  export declare const PSBT_IN_UTXO = 0;
20
+ /** Strip input scripts for PSBT global unsigned transaction (BIP 174). */
21
+ export declare function txToUnsigned(tx: Tx): Tx;
22
+ export interface PsbtInputMaps {
23
+ witnessUtxo: {
24
+ sats: bigint;
25
+ scriptPubKey: Uint8Array;
26
+ };
27
+ redeemScript?: Script;
28
+ partialSigs: Map<string, Uint8Array>;
29
+ }
17
30
  /** One PSBT key-value pair (BIP 174). */
18
31
  export type PsbtKeyValue = {
19
32
  key: Uint8Array;
20
33
  value: Uint8Array;
21
34
  };
22
35
  /**
23
- * BIP 174 PSBT decode/encode for eCash, aligned with Bitcoin ABC’s PSBT maps.
36
+ * BIP 174 PSBT for eCash multisig and ABC-aligned decode/encode.
24
37
  * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#serialization
25
38
  *
26
- * Use {@link Psbt.fromBytes} / {@link Psbt.toBytes} for round-trip; unknown
27
- * key-value pairs are preserved (BIP 174).
39
+ * Typical flow: {@link Psbt.fromTx} from a partially signed {@link Tx} plus
40
+ * {@link SignData} per input {@link Psbt.toBytes} → share → {@link Psbt.fromBytes}.
41
+ * Unknown key-value pairs are preserved (BIP 174).
28
42
  */
29
43
  export declare class Psbt {
30
44
  /** Unsigned transaction (empty scriptSigs). */
31
45
  readonly unsignedTx: Tx;
32
- /** Per-input data derived from maps (amount, scripts, partial sigs). */
46
+ /** Per-input signing data (amount, scripts, partial sig maps). */
33
47
  readonly signDataPerInput: SignData[];
34
48
  /** Per-input partial signatures: hex(pubkey) → signature incl. sighash byte. */
35
49
  readonly inputPartialSigs: Map<string, Uint8Array>[];
@@ -57,9 +71,45 @@ export declare class Psbt {
57
71
  unknownOutputPairs?: PsbtKeyValue[][];
58
72
  inputWitnessIncomplete?: boolean[];
59
73
  });
74
+ /**
75
+ * Build a PSBT from a transaction that may already include partial scriptSigs.
76
+ * Populates `PSBT_IN_UTXO` (`0x00`) + redeem script + partial signatures.
77
+ */
78
+ static fromTx(tx: Tx, signDataPerInput: SignData[], ecc: Ecc): Psbt;
60
79
  /** Deserialize PSBT bytes (BIP 174). */
61
80
  static fromBytes(data: Uint8Array): Psbt;
62
81
  /** Serialize to BIP 174 bytes. */
63
82
  toBytes(): Uint8Array;
83
+ /**
84
+ * Current transaction with scriptSigs built from partial signatures.
85
+ * Attach each input's `signData` for signing and validation helpers.
86
+ */
87
+ toTx(): Tx;
88
+ /**
89
+ * Add or merge a multisig signature on an input (same semantics as
90
+ * {@link Tx.addMultisigSignature}).
91
+ */
92
+ addMultisigSignature(params: {
93
+ inputIdx: number;
94
+ signature: Uint8Array;
95
+ signData: SignData;
96
+ ecc?: Ecc;
97
+ }): Psbt;
98
+ /**
99
+ * Like {@link addMultisigSignature}, but signs with a secret key (see
100
+ * {@link Tx.addMultisigSignatureFromKey}).
101
+ */
102
+ addMultisigSignatureFromKey(params: {
103
+ inputIdx: number;
104
+ sk: Uint8Array;
105
+ signData: SignData;
106
+ sigHashType?: SigHashType;
107
+ ecc?: Ecc;
108
+ }): Psbt;
109
+ /**
110
+ * Same as {@link Tx.isFullySignedMultisig} on {@link toTx} (including
111
+ * vacuous `true` when there are no multisig inputs).
112
+ */
113
+ isFullySignedMultisig(): boolean;
64
114
  }
65
115
  //# sourceMappingURL=psbt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../src/psbt.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAY,QAAQ,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,yBAAiD,CAAC;AAGzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,IAAO,CAAC;AA4OjC,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAgFlE;;;;;;GAMG;AACH,qBAAa,IAAI;IACb,+CAA+C;IAC/C,SAAgB,UAAU,EAAE,EAAE,CAAC;IAC/B,wEAAwE;IACxE,SAAgB,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7C,gFAAgF;IAChF,SAAgB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IAC5D;;;OAGG;IACH,SAAgB,kBAAkB,EAAE,YAAY,EAAE,CAAC;IACnD,oFAAoF;IACpF,SAAgB,iBAAiB,EAAE,YAAY,EAAE,EAAE,CAAC;IACpD,gCAAgC;IAChC,SAAgB,kBAAkB,EAAE,YAAY,EAAE,EAAE,CAAC;IACrD;;;;OAIG;IACH,SAAgB,sBAAsB,EAAE,OAAO,EAAE,CAAC;gBAE/B,MAAM,EAAE;QACvB,UAAU,EAAE,EAAE,CAAC;QACf,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC7B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5C,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAC;QACpC,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;QACrC,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;QACtC,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;KACtC;IAoCD,wCAAwC;WAC1B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAiG/C,kCAAkC;IAC3B,OAAO,IAAI,UAAU;CAsD/B"}
1
+ {"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../src/psbt.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAIH,QAAQ,EACR,EAAE,EAEL,MAAM,SAAS,CAAC;AAGjB;;;;;GAKG;AACH,eAAO,MAAM,UAAU,yBAAiD,CAAC;AAGzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,IAAO,CAAC;AAmKjC,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAWvC;AAiPD,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,UAAU,CAAA;KAAE,CAAC;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACxC;AAED,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAgFlE;;;;;;;GAOG;AACH,qBAAa,IAAI;IACb,+CAA+C;IAC/C,SAAgB,UAAU,EAAE,EAAE,CAAC;IAC/B,kEAAkE;IAClE,SAAgB,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7C,gFAAgF;IAChF,SAAgB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IAC5D;;;OAGG;IACH,SAAgB,kBAAkB,EAAE,YAAY,EAAE,CAAC;IACnD,oFAAoF;IACpF,SAAgB,iBAAiB,EAAE,YAAY,EAAE,EAAE,CAAC;IACpD,gCAAgC;IAChC,SAAgB,kBAAkB,EAAE,YAAY,EAAE,EAAE,CAAC;IACrD;;;;OAIG;IACH,SAAgB,sBAAsB,EAAE,OAAO,EAAE,CAAC;gBAE/B,MAAM,EAAE;QACvB,UAAU,EAAE,EAAE,CAAC;QACf,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC7B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5C,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAC;QACpC,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;QACrC,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;QACtC,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;KACtC;IAoCD;;;OAGG;WACW,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI;IAyB1E,wCAAwC;WAC1B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAiG/C,kCAAkC;IAC3B,OAAO,IAAI,UAAU;IAuD5B;;;OAGG;IACI,IAAI,IAAI,EAAE;IAoBjB;;;OAGG;IACI,oBAAoB,CAAC,MAAM,EAAE;QAChC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,UAAU,CAAC;QACtB,QAAQ,EAAE,QAAQ,CAAC;QACnB,GAAG,CAAC,EAAE,GAAG,CAAC;KACb,GAAG,IAAI;IAmBR;;;OAGG;IACI,2BAA2B,CAAC,MAAM,EAAE;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,UAAU,CAAC;QACf,QAAQ,EAAE,QAAQ,CAAC;QACnB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,GAAG,CAAC,EAAE,GAAG,CAAC;KACb,GAAG,IAAI;IAmBR;;;OAGG;IACI,qBAAqB,IAAI,OAAO;CAG1C"}