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.
- package/README.md +6 -0
- package/dist/consts.d.ts +11 -0
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +12 -1
- package/dist/consts.js.map +1 -1
- package/dist/ffi/ecash_lib_wasm_bg_browser.js +2638 -22098
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +3 -3
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +3 -3
- package/dist/ffi/ecash_lib_wasm_browser.d.ts +20 -20
- package/dist/ffi/ecash_lib_wasm_browser.js +83 -84
- package/dist/ffi/ecash_lib_wasm_nodejs.d.ts +17 -17
- package/dist/ffi/ecash_lib_wasm_nodejs.js +83 -84
- package/dist/initBrowser.d.ts +1 -1
- package/dist/initBrowser.d.ts.map +1 -1
- package/dist/initBrowser.js +1 -53
- package/dist/initBrowser.js.map +1 -1
- package/dist/initNodeJs.d.ts +1 -1
- package/dist/initNodeJs.d.ts.map +1 -1
- package/dist/initNodeJs.js +1 -50
- package/dist/initNodeJs.js.map +1 -1
- package/dist/initWasm.d.ts +2 -0
- package/dist/initWasm.d.ts.map +1 -0
- package/dist/initWasm.js +66 -0
- package/dist/initWasm.js.map +1 -0
- package/dist/payment/p2shInputData.d.ts +18 -0
- package/dist/payment/p2shInputData.d.ts.map +1 -0
- package/dist/payment/p2shInputData.js +88 -0
- package/dist/payment/p2shInputData.js.map +1 -0
- package/dist/psbt.d.ts +54 -4
- package/dist/psbt.d.ts.map +1 -1
- package/dist/psbt.js +256 -7
- package/dist/psbt.js.map +1 -1
- package/dist/script.d.ts +11 -1
- package/dist/script.d.ts.map +1 -1
- package/dist/script.js +24 -0
- package/dist/script.js.map +1 -1
- package/dist/signatories.d.ts +10 -2
- package/dist/signatories.d.ts.map +1 -1
- package/dist/signatories.js +156 -1
- package/dist/signatories.js.map +1 -1
- package/dist/tx.d.ts +40 -0
- package/dist/tx.d.ts.map +1 -1
- package/dist/tx.js +223 -0
- package/dist/tx.js.map +1 -1
- package/package.json +18 -5
- package/src/consts.ts +13 -0
- package/src/ffi/ecash_lib_wasm_bg_browser.js +2638 -22098
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +3 -3
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +3 -3
- package/src/ffi/ecash_lib_wasm_browser.d.ts +20 -20
- package/src/ffi/ecash_lib_wasm_browser.js +83 -84
- package/src/ffi/ecash_lib_wasm_nodejs.d.ts +17 -17
- package/src/ffi/ecash_lib_wasm_nodejs.js +83 -84
- package/src/initBrowser.ts +1 -24
- package/src/initNodeJs.ts +1 -18
- package/src/initWasm.ts +35 -0
- package/src/psbt.ts +328 -10
- package/src/script.ts +25 -1
- package/src/signatories.ts +214 -3
- package/src/tx.ts +279 -0
- package/.nycrc +0 -4
package/dist/initNodeJs.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/initNodeJs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initNodeJs.js","sourceRoot":"","sources":["../src/initNodeJs.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE
|
|
1
|
+
{"version":3,"file":"initNodeJs.js","sourceRoot":"","sources":["../src/initNodeJs.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;AAEtE,yBAAuB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initWasm.d.ts","sourceRoot":"","sources":["../src/initWasm.ts"],"names":[],"mappings":""}
|
package/dist/initWasm.js
ADDED
|
@@ -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
|
|
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
|
-
*
|
|
27
|
-
*
|
|
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
|
|
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
|
package/dist/psbt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../src/psbt.ts"],"names":[],"mappings":"
|
|
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"}
|