@scure/btc-signer 1.7.0 → 1.8.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 +52 -1
- package/esm/_type_test.js +1 -1
- package/esm/index.d.ts +12 -12
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +10 -10
- package/esm/index.js.map +1 -1
- package/esm/musig2.js +1 -1
- package/esm/p2p.d.ts +38 -0
- package/esm/p2p.d.ts.map +1 -0
- package/esm/p2p.js +156 -0
- package/esm/p2p.js.map +1 -0
- package/esm/payment.d.ts +77 -21
- package/esm/payment.d.ts.map +1 -1
- package/esm/payment.js +63 -60
- package/esm/payment.js.map +1 -1
- package/esm/psbt.d.ts +1 -1
- package/esm/psbt.d.ts.map +1 -1
- package/esm/psbt.js +2 -35
- package/esm/psbt.js.map +1 -1
- package/esm/script.js +1 -1
- package/esm/transaction.d.ts +56 -4
- package/esm/transaction.d.ts.map +1 -1
- package/esm/transaction.js +151 -8
- package/esm/transaction.js.map +1 -1
- package/esm/utxo.d.ts +3 -55
- package/esm/utxo.d.ts.map +1 -1
- package/esm/utxo.js +5 -114
- package/esm/utxo.js.map +1 -1
- package/index.d.ts +12 -12
- package/index.d.ts.map +1 -1
- package/index.js +58 -58
- package/index.js.map +1 -1
- package/musig2.d.ts +1 -1
- package/musig2.js +2 -2
- package/p2p.d.ts +38 -0
- package/p2p.d.ts.map +1 -0
- package/p2p.js +158 -0
- package/p2p.js.map +1 -0
- package/package.json +11 -11
- package/payment.d.ts +77 -21
- package/payment.d.ts.map +1 -1
- package/payment.js +81 -78
- package/payment.js.map +1 -1
- package/psbt.d.ts +1 -1
- package/psbt.d.ts.map +1 -1
- package/psbt.js +22 -55
- package/psbt.js.map +1 -1
- package/script.js +3 -3
- package/src/_type_test.ts +1 -1
- package/src/index.ts +12 -12
- package/src/musig2.ts +1 -1
- package/src/p2p.ts +158 -0
- package/src/payment.ts +160 -75
- package/src/psbt.ts +2 -36
- package/src/script.ts +1 -1
- package/src/transaction.ts +156 -12
- package/src/utxo.ts +9 -111
- package/transaction.d.ts +56 -4
- package/transaction.d.ts.map +1 -1
- package/transaction.js +222 -75
- package/transaction.js.map +1 -1
- package/utxo.d.ts +3 -55
- package/utxo.d.ts.map +1 -1
- package/utxo.js +43 -156
- package/utxo.js.map +1 -1
package/src/utxo.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { hex } from '@scure/base';
|
|
2
2
|
import * as P from 'micro-packed';
|
|
3
|
-
import { Address, type CustomScript, OutScript, checkScript, tapLeafHash } from './payment.
|
|
4
|
-
import * as psbt from './psbt.
|
|
5
|
-
import { CompactSizeLen,
|
|
3
|
+
import { Address, type CustomScript, OutScript, checkScript, tapLeafHash } from './payment.ts';
|
|
4
|
+
import * as psbt from './psbt.ts';
|
|
5
|
+
import { CompactSizeLen, RawWitness, Script, VarBytes } from './script.ts';
|
|
6
6
|
import {
|
|
7
|
-
DEFAULT_SEQUENCE,
|
|
8
7
|
SignatureHash,
|
|
9
8
|
Transaction,
|
|
10
9
|
type TxOpts,
|
|
10
|
+
getInputType,
|
|
11
|
+
getPrevOut,
|
|
11
12
|
inputBeforeSign,
|
|
12
|
-
|
|
13
|
+
normalizeInput,
|
|
14
|
+
toVsize,
|
|
15
|
+
} from './transaction.ts';
|
|
13
16
|
import {
|
|
14
17
|
type Bytes,
|
|
15
18
|
NETWORK,
|
|
@@ -20,113 +23,8 @@ import {
|
|
|
20
23
|
isBytes,
|
|
21
24
|
sha256,
|
|
22
25
|
validatePubkey,
|
|
23
|
-
} from './utils.
|
|
26
|
+
} from './utils.ts';
|
|
24
27
|
|
|
25
|
-
export type PSBTInputs = psbt.PSBTKeyMapKeys<typeof psbt.PSBTInput>;
|
|
26
|
-
|
|
27
|
-
// Normalizes input
|
|
28
|
-
export function getPrevOut(input: psbt.TransactionInput): P.UnwrapCoder<typeof RawOutput> {
|
|
29
|
-
if (input.nonWitnessUtxo) {
|
|
30
|
-
if (input.index === undefined) throw new Error('Unknown input index');
|
|
31
|
-
return input.nonWitnessUtxo.outputs[input.index];
|
|
32
|
-
} else if (input.witnessUtxo) return input.witnessUtxo;
|
|
33
|
-
else throw new Error('Cannot find previous output info');
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function normalizeInput(
|
|
37
|
-
i: psbt.TransactionInputUpdate,
|
|
38
|
-
cur?: psbt.TransactionInput,
|
|
39
|
-
allowedFields?: (keyof psbt.TransactionInput)[],
|
|
40
|
-
disableScriptCheck = false,
|
|
41
|
-
allowUnknown = false
|
|
42
|
-
): psbt.TransactionInput {
|
|
43
|
-
let { nonWitnessUtxo, txid } = i;
|
|
44
|
-
// String support for common fields. We usually prefer Uint8Array to avoid errors
|
|
45
|
-
// like hex looking string accidentally passed, however, in case of nonWitnessUtxo
|
|
46
|
-
// it is better to expect string, since constructing this complex object will be
|
|
47
|
-
// difficult for user
|
|
48
|
-
if (typeof nonWitnessUtxo === 'string') nonWitnessUtxo = hex.decode(nonWitnessUtxo);
|
|
49
|
-
if (isBytes(nonWitnessUtxo)) nonWitnessUtxo = RawTx.decode(nonWitnessUtxo);
|
|
50
|
-
if (!('nonWitnessUtxo' in i) && nonWitnessUtxo === undefined)
|
|
51
|
-
nonWitnessUtxo = cur?.nonWitnessUtxo;
|
|
52
|
-
if (typeof txid === 'string') txid = hex.decode(txid);
|
|
53
|
-
// TODO: if we have nonWitnessUtxo, we can extract txId from here
|
|
54
|
-
if (txid === undefined) txid = cur?.txid;
|
|
55
|
-
let res: PSBTInputs = { ...cur, ...i, nonWitnessUtxo, txid };
|
|
56
|
-
if (!('nonWitnessUtxo' in i) && res.nonWitnessUtxo === undefined) delete res.nonWitnessUtxo;
|
|
57
|
-
if (res.sequence === undefined) res.sequence = DEFAULT_SEQUENCE;
|
|
58
|
-
if (res.tapMerkleRoot === null) delete res.tapMerkleRoot;
|
|
59
|
-
res = psbt.mergeKeyMap(psbt.PSBTInput, res, cur, allowedFields, allowUnknown);
|
|
60
|
-
psbt.PSBTInputCoder.encode(res); // Validates that everything is correct at this point
|
|
61
|
-
|
|
62
|
-
let prevOut;
|
|
63
|
-
if (res.nonWitnessUtxo && res.index !== undefined)
|
|
64
|
-
prevOut = res.nonWitnessUtxo.outputs[res.index];
|
|
65
|
-
else if (res.witnessUtxo) prevOut = res.witnessUtxo;
|
|
66
|
-
if (prevOut && !disableScriptCheck)
|
|
67
|
-
checkScript(prevOut && prevOut.script, res.redeemScript, res.witnessScript);
|
|
68
|
-
return res;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function getInputType(input: psbt.TransactionInput, allowLegacyWitnessUtxo = false) {
|
|
72
|
-
let txType = 'legacy';
|
|
73
|
-
let defaultSighash = SignatureHash.ALL;
|
|
74
|
-
const prevOut = getPrevOut(input);
|
|
75
|
-
const first = OutScript.decode(prevOut.script);
|
|
76
|
-
let type = first.type;
|
|
77
|
-
let cur = first;
|
|
78
|
-
const stack = [first];
|
|
79
|
-
if (first.type === 'tr') {
|
|
80
|
-
defaultSighash = SignatureHash.DEFAULT;
|
|
81
|
-
return {
|
|
82
|
-
txType: 'taproot',
|
|
83
|
-
type: 'tr',
|
|
84
|
-
last: first,
|
|
85
|
-
lastScript: prevOut.script,
|
|
86
|
-
defaultSighash,
|
|
87
|
-
sighash: input.sighashType || defaultSighash,
|
|
88
|
-
};
|
|
89
|
-
} else {
|
|
90
|
-
if (first.type === 'wpkh' || first.type === 'wsh') txType = 'segwit';
|
|
91
|
-
if (first.type === 'sh') {
|
|
92
|
-
if (!input.redeemScript) throw new Error('inputType: sh without redeemScript');
|
|
93
|
-
let child = OutScript.decode(input.redeemScript);
|
|
94
|
-
if (child.type === 'wpkh' || child.type === 'wsh') txType = 'segwit';
|
|
95
|
-
stack.push(child);
|
|
96
|
-
cur = child;
|
|
97
|
-
type += `-${child.type}`;
|
|
98
|
-
}
|
|
99
|
-
// wsh can be inside sh
|
|
100
|
-
if (cur.type === 'wsh') {
|
|
101
|
-
if (!input.witnessScript) throw new Error('inputType: wsh without witnessScript');
|
|
102
|
-
let child = OutScript.decode(input.witnessScript);
|
|
103
|
-
if (child.type === 'wsh') txType = 'segwit';
|
|
104
|
-
stack.push(child);
|
|
105
|
-
cur = child;
|
|
106
|
-
type += `-${child.type}`;
|
|
107
|
-
}
|
|
108
|
-
const last = stack[stack.length - 1];
|
|
109
|
-
if (last.type === 'sh' || last.type === 'wsh')
|
|
110
|
-
throw new Error('inputType: sh/wsh cannot be terminal type');
|
|
111
|
-
const lastScript = OutScript.encode(last);
|
|
112
|
-
const res = {
|
|
113
|
-
type,
|
|
114
|
-
txType,
|
|
115
|
-
last,
|
|
116
|
-
lastScript,
|
|
117
|
-
defaultSighash,
|
|
118
|
-
sighash: input.sighashType || defaultSighash,
|
|
119
|
-
};
|
|
120
|
-
if (txType === 'legacy' && !allowLegacyWitnessUtxo && !input.nonWitnessUtxo) {
|
|
121
|
-
throw new Error(
|
|
122
|
-
`Transaction/sign: legacy input without nonWitnessUtxo, can result in attack that forces paying higher fees. Pass allowLegacyWitnessUtxo=true, if you sure`
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
return res;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
export const toVsize = (weight: number): number => Math.ceil(weight / 4);
|
|
130
28
|
// UTXO Select
|
|
131
29
|
export type Output = { address: string; amount: bigint } | { script: Uint8Array; amount: bigint };
|
|
132
30
|
export type Accumulated =
|
package/transaction.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as P from 'micro-packed';
|
|
2
|
-
import { type CustomScript } from './payment.
|
|
3
|
-
import * as psbt from './psbt.
|
|
4
|
-
import
|
|
5
|
-
import
|
|
2
|
+
import { type CustomScript } from './payment.ts';
|
|
3
|
+
import * as psbt from './psbt.ts';
|
|
4
|
+
import { RawOutput } from './script.ts';
|
|
5
|
+
import * as u from './utils.ts';
|
|
6
|
+
import { type Bytes } from './utils.ts';
|
|
7
|
+
export declare const toVsize: (weight: number) => number;
|
|
6
8
|
interface HDKey {
|
|
7
9
|
publicKey: Bytes;
|
|
8
10
|
privateKey: Bytes;
|
|
@@ -65,6 +67,56 @@ export type TransactionInputRequired = {
|
|
|
65
67
|
};
|
|
66
68
|
export declare function inputBeforeSign(i: psbt.TransactionInput): TransactionInputRequired;
|
|
67
69
|
declare function validateOpts(opts: TxOpts): Readonly<TxOpts>;
|
|
70
|
+
export type PSBTInputs = psbt.PSBTKeyMapKeys<typeof psbt.PSBTInput>;
|
|
71
|
+
export declare function getPrevOut(input: psbt.TransactionInput): P.UnwrapCoder<typeof RawOutput>;
|
|
72
|
+
export declare function normalizeInput(i: psbt.TransactionInputUpdate, cur?: psbt.TransactionInput, allowedFields?: (keyof psbt.TransactionInput)[], disableScriptCheck?: boolean, allowUnknown?: boolean): psbt.TransactionInput;
|
|
73
|
+
export declare function getInputType(input: psbt.TransactionInput, allowLegacyWitnessUtxo?: boolean): {
|
|
74
|
+
type: string;
|
|
75
|
+
txType: string;
|
|
76
|
+
last: {
|
|
77
|
+
type: "p2a";
|
|
78
|
+
script: Bytes;
|
|
79
|
+
} | {
|
|
80
|
+
type: "pk";
|
|
81
|
+
pubkey: Bytes;
|
|
82
|
+
} | {
|
|
83
|
+
type: "pkh";
|
|
84
|
+
hash: Bytes;
|
|
85
|
+
} | {
|
|
86
|
+
type: "wpkh";
|
|
87
|
+
hash: Bytes;
|
|
88
|
+
} | {
|
|
89
|
+
type: "ms";
|
|
90
|
+
pubkeys: Bytes[];
|
|
91
|
+
m: number;
|
|
92
|
+
} | {
|
|
93
|
+
type: "tr";
|
|
94
|
+
pubkey: Bytes;
|
|
95
|
+
} | {
|
|
96
|
+
type: "tr_ns";
|
|
97
|
+
pubkeys: Bytes[];
|
|
98
|
+
} | {
|
|
99
|
+
type: "tr_ms";
|
|
100
|
+
pubkeys: Bytes[];
|
|
101
|
+
m: number;
|
|
102
|
+
} | {
|
|
103
|
+
type: "unknown";
|
|
104
|
+
script: Bytes;
|
|
105
|
+
};
|
|
106
|
+
lastScript: P.Bytes;
|
|
107
|
+
defaultSighash: SignatureHash.ALL;
|
|
108
|
+
sighash: number;
|
|
109
|
+
} | {
|
|
110
|
+
txType: string;
|
|
111
|
+
type: string;
|
|
112
|
+
last: {
|
|
113
|
+
type: "tr";
|
|
114
|
+
pubkey: Bytes;
|
|
115
|
+
};
|
|
116
|
+
lastScript: Uint8Array<ArrayBufferLike>;
|
|
117
|
+
defaultSighash: SignatureHash.DEFAULT;
|
|
118
|
+
sighash: number;
|
|
119
|
+
};
|
|
68
120
|
export declare class Transaction {
|
|
69
121
|
private global;
|
|
70
122
|
private inputs;
|
package/transaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAW,KAAK,YAAY,EAAuC,MAAM,cAAc,CAAC;AAC/F,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["src/transaction.ts"],"names":[],"mappings":"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"}
|