xpi-ts 0.2.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/LICENSE +21 -0
- package/README.md +516 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/lib/bitcore/address.d.ts +66 -0
- package/dist/lib/bitcore/address.d.ts.map +1 -0
- package/dist/lib/bitcore/address.js +407 -0
- package/dist/lib/bitcore/block/block.d.ts +57 -0
- package/dist/lib/bitcore/block/block.d.ts.map +1 -0
- package/dist/lib/bitcore/block/block.js +233 -0
- package/dist/lib/bitcore/block/blockheader.d.ts +82 -0
- package/dist/lib/bitcore/block/blockheader.d.ts.map +1 -0
- package/dist/lib/bitcore/block/blockheader.js +323 -0
- package/dist/lib/bitcore/block/index.d.ts +5 -0
- package/dist/lib/bitcore/block/index.d.ts.map +1 -0
- package/dist/lib/bitcore/block/index.js +2 -0
- package/dist/lib/bitcore/chunk.d.ts +22 -0
- package/dist/lib/bitcore/chunk.d.ts.map +1 -0
- package/dist/lib/bitcore/chunk.js +46 -0
- package/dist/lib/bitcore/crypto/bn.d.ts +53 -0
- package/dist/lib/bitcore/crypto/bn.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/bn.js +238 -0
- package/dist/lib/bitcore/crypto/ecdsa.d.ts +46 -0
- package/dist/lib/bitcore/crypto/ecdsa.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/ecdsa.js +247 -0
- package/dist/lib/bitcore/crypto/hash.d.ts +16 -0
- package/dist/lib/bitcore/crypto/hash.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/hash.js +87 -0
- package/dist/lib/bitcore/crypto/index.d.ts +9 -0
- package/dist/lib/bitcore/crypto/index.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/index.js +8 -0
- package/dist/lib/bitcore/crypto/musig2.d.ts +40 -0
- package/dist/lib/bitcore/crypto/musig2.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/musig2.js +236 -0
- package/dist/lib/bitcore/crypto/point.d.ts +20 -0
- package/dist/lib/bitcore/crypto/point.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/point.js +133 -0
- package/dist/lib/bitcore/crypto/random.d.ts +7 -0
- package/dist/lib/bitcore/crypto/random.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/random.js +30 -0
- package/dist/lib/bitcore/crypto/schnorr.d.ts +40 -0
- package/dist/lib/bitcore/crypto/schnorr.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/schnorr.js +185 -0
- package/dist/lib/bitcore/crypto/signature.d.ts +53 -0
- package/dist/lib/bitcore/crypto/signature.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/signature.js +300 -0
- package/dist/lib/bitcore/crypto/sigtype.d.ts +5 -0
- package/dist/lib/bitcore/crypto/sigtype.d.ts.map +1 -0
- package/dist/lib/bitcore/crypto/sigtype.js +18 -0
- package/dist/lib/bitcore/encoding/base58.d.ts +16 -0
- package/dist/lib/bitcore/encoding/base58.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/base58.js +55 -0
- package/dist/lib/bitcore/encoding/base58check.d.ts +9 -0
- package/dist/lib/bitcore/encoding/base58check.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/base58check.js +82 -0
- package/dist/lib/bitcore/encoding/bufferreader.d.ts +34 -0
- package/dist/lib/bitcore/encoding/bufferreader.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/bufferreader.js +198 -0
- package/dist/lib/bitcore/encoding/bufferwriter.d.ts +36 -0
- package/dist/lib/bitcore/encoding/bufferwriter.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/bufferwriter.js +189 -0
- package/dist/lib/bitcore/encoding/varint.d.ts +20 -0
- package/dist/lib/bitcore/encoding/varint.d.ts.map +1 -0
- package/dist/lib/bitcore/encoding/varint.js +61 -0
- package/dist/lib/bitcore/errors.d.ts +28 -0
- package/dist/lib/bitcore/errors.d.ts.map +1 -0
- package/dist/lib/bitcore/errors.js +325 -0
- package/dist/lib/bitcore/hdprivatekey.d.ts +78 -0
- package/dist/lib/bitcore/hdprivatekey.d.ts.map +1 -0
- package/dist/lib/bitcore/hdprivatekey.js +381 -0
- package/dist/lib/bitcore/hdpublickey.d.ts +98 -0
- package/dist/lib/bitcore/hdpublickey.d.ts.map +1 -0
- package/dist/lib/bitcore/hdpublickey.js +416 -0
- package/dist/lib/bitcore/index.d.ts +60 -0
- package/dist/lib/bitcore/index.d.ts.map +1 -0
- package/dist/lib/bitcore/index.js +44 -0
- package/dist/lib/bitcore/message.d.ts +23 -0
- package/dist/lib/bitcore/message.d.ts.map +1 -0
- package/dist/lib/bitcore/message.js +112 -0
- package/dist/lib/bitcore/mnemonic/errors.d.ts +7 -0
- package/dist/lib/bitcore/mnemonic/errors.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/errors.js +20 -0
- package/dist/lib/bitcore/mnemonic/index.d.ts +5 -0
- package/dist/lib/bitcore/mnemonic/index.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/index.js +4 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.d.ts +23 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/mnemonic.js +164 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts +2 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/pbkdf2.js +25 -0
- package/dist/lib/bitcore/mnemonic/words/english.d.ts +2 -0
- package/dist/lib/bitcore/mnemonic/words/english.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/words/english.js +2050 -0
- package/dist/lib/bitcore/mnemonic/words/index.d.ts +4 -0
- package/dist/lib/bitcore/mnemonic/words/index.d.ts.map +1 -0
- package/dist/lib/bitcore/mnemonic/words/index.js +4 -0
- package/dist/lib/bitcore/musig2/index.d.ts +3 -0
- package/dist/lib/bitcore/musig2/index.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/index.js +2 -0
- package/dist/lib/bitcore/musig2/session.d.ts +79 -0
- package/dist/lib/bitcore/musig2/session.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/session.js +346 -0
- package/dist/lib/bitcore/musig2/signer.d.ts +61 -0
- package/dist/lib/bitcore/musig2/signer.d.ts.map +1 -0
- package/dist/lib/bitcore/musig2/signer.js +146 -0
- package/dist/lib/bitcore/networks.d.ts +53 -0
- package/dist/lib/bitcore/networks.d.ts.map +1 -0
- package/dist/lib/bitcore/networks.js +150 -0
- package/dist/lib/bitcore/opcode.d.ts +250 -0
- package/dist/lib/bitcore/opcode.d.ts.map +1 -0
- package/dist/lib/bitcore/opcode.js +270 -0
- package/dist/lib/bitcore/privatekey.d.ts +56 -0
- package/dist/lib/bitcore/privatekey.d.ts.map +1 -0
- package/dist/lib/bitcore/privatekey.js +237 -0
- package/dist/lib/bitcore/publickey.d.ts +59 -0
- package/dist/lib/bitcore/publickey.d.ts.map +1 -0
- package/dist/lib/bitcore/publickey.js +263 -0
- package/dist/lib/bitcore/script/interpreter.d.ts +98 -0
- package/dist/lib/bitcore/script/interpreter.d.ts.map +1 -0
- package/dist/lib/bitcore/script/interpreter.js +1704 -0
- package/dist/lib/bitcore/script.d.ts +111 -0
- package/dist/lib/bitcore/script.d.ts.map +1 -0
- package/dist/lib/bitcore/script.js +1112 -0
- package/dist/lib/bitcore/taproot/musig2.d.ts +29 -0
- package/dist/lib/bitcore/taproot/musig2.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot/musig2.js +104 -0
- package/dist/lib/bitcore/taproot/nft.d.ts +164 -0
- package/dist/lib/bitcore/taproot/nft.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot/nft.js +407 -0
- package/dist/lib/bitcore/taproot.d.ts +65 -0
- package/dist/lib/bitcore/taproot.d.ts.map +1 -0
- package/dist/lib/bitcore/taproot.js +288 -0
- package/dist/lib/bitcore/transaction/index.d.ts +12 -0
- package/dist/lib/bitcore/transaction/index.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/index.js +6 -0
- package/dist/lib/bitcore/transaction/input.d.ts +202 -0
- package/dist/lib/bitcore/transaction/input.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/input.js +911 -0
- package/dist/lib/bitcore/transaction/output.d.ts +48 -0
- package/dist/lib/bitcore/transaction/output.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/output.js +231 -0
- package/dist/lib/bitcore/transaction/sighash.d.ts +32 -0
- package/dist/lib/bitcore/transaction/sighash.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/sighash.js +335 -0
- package/dist/lib/bitcore/transaction/signature.d.ts +36 -0
- package/dist/lib/bitcore/transaction/signature.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/signature.js +130 -0
- package/dist/lib/bitcore/transaction/transaction.d.ts +164 -0
- package/dist/lib/bitcore/transaction/transaction.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/transaction.js +1016 -0
- package/dist/lib/bitcore/transaction/unspentoutput.d.ts +58 -0
- package/dist/lib/bitcore/transaction/unspentoutput.d.ts.map +1 -0
- package/dist/lib/bitcore/transaction/unspentoutput.js +167 -0
- package/dist/lib/bitcore/unit.d.ts +44 -0
- package/dist/lib/bitcore/unit.d.ts.map +1 -0
- package/dist/lib/bitcore/unit.js +106 -0
- package/dist/lib/bitcore/uri.d.ts +29 -0
- package/dist/lib/bitcore/uri.d.ts.map +1 -0
- package/dist/lib/bitcore/uri.js +163 -0
- package/dist/lib/bitcore/util/base32.d.ts +5 -0
- package/dist/lib/bitcore/util/base32.d.ts.map +1 -0
- package/dist/lib/bitcore/util/base32.js +58 -0
- package/dist/lib/bitcore/util/buffer.d.ts +18 -0
- package/dist/lib/bitcore/util/buffer.d.ts.map +1 -0
- package/dist/lib/bitcore/util/buffer.js +76 -0
- package/dist/lib/bitcore/util/convertBits.d.ts +2 -0
- package/dist/lib/bitcore/util/convertBits.d.ts.map +1 -0
- package/dist/lib/bitcore/util/convertBits.js +26 -0
- package/dist/lib/bitcore/util/js.d.ts +9 -0
- package/dist/lib/bitcore/util/js.d.ts.map +1 -0
- package/dist/lib/bitcore/util/js.js +45 -0
- package/dist/lib/bitcore/util/preconditions.d.ts +6 -0
- package/dist/lib/bitcore/util/preconditions.d.ts.map +1 -0
- package/dist/lib/bitcore/util/preconditions.js +31 -0
- package/dist/lib/bitcore/util.d.ts +14 -0
- package/dist/lib/bitcore/util.d.ts.map +1 -0
- package/dist/lib/bitcore/util.js +13 -0
- package/dist/lib/bitcore/xaddress.d.ts +45 -0
- package/dist/lib/bitcore/xaddress.d.ts.map +1 -0
- package/dist/lib/bitcore/xaddress.js +279 -0
- package/dist/lib/rank/api.d.ts +75 -0
- package/dist/lib/rank/api.d.ts.map +1 -0
- package/dist/lib/rank/api.js +4 -0
- package/dist/lib/rank/index.d.ts +127 -0
- package/dist/lib/rank/index.d.ts.map +1 -0
- package/dist/lib/rank/index.js +421 -0
- package/dist/lib/rank/opcode.d.ts +23 -0
- package/dist/lib/rank/opcode.d.ts.map +1 -0
- package/dist/lib/rank/opcode.js +23 -0
- package/dist/lib/rank/script.d.ts +2 -0
- package/dist/lib/rank/script.d.ts.map +1 -0
- package/dist/lib/rank/script.js +7 -0
- package/dist/lib/rank/transaction.d.ts +3 -0
- package/dist/lib/rank/transaction.d.ts.map +1 -0
- package/dist/lib/rank/transaction.js +12 -0
- package/dist/lib/rpc.d.ts +136 -0
- package/dist/lib/rpc.d.ts.map +1 -0
- package/dist/lib/rpc.js +62 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +20 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +8 -0
- package/dist/utils/string.d.ts +11 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +47 -0
- package/dist/utils/types.d.ts +2 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/wallet.d.ts +12 -0
- package/dist/utils/wallet.d.ts.map +1 -0
- package/dist/utils/wallet.js +28 -0
- package/package.json +91 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { BN } from './crypto/bn.js';
|
|
2
|
+
import { Point } from './crypto/point.js';
|
|
3
|
+
import { Hash } from './crypto/hash.js';
|
|
4
|
+
import { JSUtil } from './util/js.js';
|
|
5
|
+
import { get as getNetwork, defaultNetwork } from './networks.js';
|
|
6
|
+
import { PrivateKey } from './privatekey.js';
|
|
7
|
+
import { Address } from './address.js';
|
|
8
|
+
export class PublicKey {
|
|
9
|
+
point;
|
|
10
|
+
compressed;
|
|
11
|
+
network;
|
|
12
|
+
constructor(data, extra) {
|
|
13
|
+
if (data instanceof PublicKey) {
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
if (!data) {
|
|
17
|
+
throw new Error('First argument is required, please include public key data.');
|
|
18
|
+
}
|
|
19
|
+
extra = extra || {};
|
|
20
|
+
const info = this._classifyArgs(data, extra);
|
|
21
|
+
info.point?.validate();
|
|
22
|
+
JSUtil.defineImmutable(this, {
|
|
23
|
+
point: info.point,
|
|
24
|
+
compressed: info.compressed,
|
|
25
|
+
network: info.network || defaultNetwork,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
_classifyArgs(data, extra) {
|
|
29
|
+
const info = {
|
|
30
|
+
compressed: extra.compressed === undefined ? true : extra.compressed,
|
|
31
|
+
};
|
|
32
|
+
if (data instanceof Point) {
|
|
33
|
+
info.point = data;
|
|
34
|
+
}
|
|
35
|
+
else if (typeof data === 'object' &&
|
|
36
|
+
data !== null &&
|
|
37
|
+
'x' in data &&
|
|
38
|
+
'y' in data) {
|
|
39
|
+
const objectInfo = PublicKey._transformObject(data);
|
|
40
|
+
Object.assign(info, objectInfo);
|
|
41
|
+
}
|
|
42
|
+
else if (typeof data === 'string') {
|
|
43
|
+
const derInfo = PublicKey._transformDER(Buffer.from(data, 'hex'));
|
|
44
|
+
Object.assign(info, derInfo);
|
|
45
|
+
}
|
|
46
|
+
else if (PublicKey._isBuffer(data)) {
|
|
47
|
+
const derInfo = PublicKey._transformDER(data);
|
|
48
|
+
Object.assign(info, derInfo);
|
|
49
|
+
}
|
|
50
|
+
else if (PublicKey._isPrivateKey(data)) {
|
|
51
|
+
const privkeyInfo = PublicKey._transformPrivateKey(data);
|
|
52
|
+
Object.assign(info, privkeyInfo);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
throw new TypeError('First argument is an unrecognized data format.');
|
|
56
|
+
}
|
|
57
|
+
if (!info.network) {
|
|
58
|
+
info.network = extra.network ? getNetwork(extra.network) : undefined;
|
|
59
|
+
}
|
|
60
|
+
if (!info.point) {
|
|
61
|
+
throw new Error('Failed to derive a valid point from the input data');
|
|
62
|
+
}
|
|
63
|
+
return info;
|
|
64
|
+
}
|
|
65
|
+
static _isPrivateKey(param) {
|
|
66
|
+
return param instanceof PrivateKey;
|
|
67
|
+
}
|
|
68
|
+
static _isBuffer(param) {
|
|
69
|
+
return Buffer.isBuffer(param) || param instanceof Uint8Array;
|
|
70
|
+
}
|
|
71
|
+
static _transformPrivateKey(privkey) {
|
|
72
|
+
if (!PublicKey._isPrivateKey(privkey)) {
|
|
73
|
+
throw new Error('Must be an instance of PrivateKey');
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
point: Point.getG().mul(privkey.bn),
|
|
77
|
+
compressed: privkey.compressed,
|
|
78
|
+
network: privkey.network,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
static _transformDER(buf, strict = true) {
|
|
82
|
+
if (!PublicKey._isBuffer(buf)) {
|
|
83
|
+
throw new Error('Must be a hex buffer of DER encoded public key');
|
|
84
|
+
}
|
|
85
|
+
let point;
|
|
86
|
+
let compressed;
|
|
87
|
+
let x;
|
|
88
|
+
let y;
|
|
89
|
+
let xbuf;
|
|
90
|
+
let ybuf;
|
|
91
|
+
if (buf[0] === 0x04 || (!strict && (buf[0] === 0x06 || buf[0] === 0x07))) {
|
|
92
|
+
xbuf = buf.subarray(1, 33);
|
|
93
|
+
ybuf = buf.subarray(33, 65);
|
|
94
|
+
if (xbuf.length !== 32 || ybuf.length !== 32 || buf.length !== 65) {
|
|
95
|
+
throw new TypeError('Length of x and y must be 32 bytes');
|
|
96
|
+
}
|
|
97
|
+
x = new BN(xbuf, 'be');
|
|
98
|
+
y = new BN(ybuf, 'be');
|
|
99
|
+
point = new Point(x, y);
|
|
100
|
+
compressed = false;
|
|
101
|
+
}
|
|
102
|
+
else if (buf[0] === 0x03) {
|
|
103
|
+
xbuf = buf.subarray(1);
|
|
104
|
+
x = new BN(xbuf, 'be');
|
|
105
|
+
const xInfo = PublicKey._transformX(true, x);
|
|
106
|
+
point = xInfo.point;
|
|
107
|
+
compressed = true;
|
|
108
|
+
}
|
|
109
|
+
else if (buf[0] === 0x02) {
|
|
110
|
+
xbuf = buf.subarray(1);
|
|
111
|
+
x = new BN(xbuf, 'be');
|
|
112
|
+
const xInfo = PublicKey._transformX(false, x);
|
|
113
|
+
point = xInfo.point;
|
|
114
|
+
compressed = true;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw new TypeError('Invalid DER format public key');
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
point,
|
|
121
|
+
compressed,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
static _transformX(odd, x) {
|
|
125
|
+
if (typeof odd !== 'boolean') {
|
|
126
|
+
throw new Error('Must specify whether y is odd or not (true or false)');
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
point: Point.fromX(odd, x),
|
|
130
|
+
compressed: true,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
static _transformObject(json) {
|
|
134
|
+
const x = new BN(json.x, 16);
|
|
135
|
+
const y = new BN(json.y, 16);
|
|
136
|
+
const point = new Point(x, y);
|
|
137
|
+
return {
|
|
138
|
+
point: point,
|
|
139
|
+
compressed: json.compressed,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
static fromPrivateKey(privkey) {
|
|
143
|
+
if (!PublicKey._isPrivateKey(privkey)) {
|
|
144
|
+
throw new Error('Must be an instance of PrivateKey');
|
|
145
|
+
}
|
|
146
|
+
const info = PublicKey._transformPrivateKey(privkey);
|
|
147
|
+
return new PublicKey(info.point, {
|
|
148
|
+
compressed: info.compressed,
|
|
149
|
+
network: info.network,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
static fromDER(buf, strict) {
|
|
153
|
+
if (!PublicKey._isBuffer(buf)) {
|
|
154
|
+
throw new Error('Must be a hex buffer of DER encoded public key');
|
|
155
|
+
}
|
|
156
|
+
const info = PublicKey._transformDER(buf, strict);
|
|
157
|
+
return new PublicKey(info.point, {
|
|
158
|
+
compressed: info.compressed,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
static fromBuffer(buf, strict) {
|
|
162
|
+
return PublicKey.fromDER(buf, strict);
|
|
163
|
+
}
|
|
164
|
+
static fromPoint(point, compressed) {
|
|
165
|
+
if (!(point instanceof Point)) {
|
|
166
|
+
throw new Error('First argument must be an instance of Point.');
|
|
167
|
+
}
|
|
168
|
+
return new PublicKey(point, {
|
|
169
|
+
compressed: compressed,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
static fromString(str, encoding) {
|
|
173
|
+
const buf = Buffer.from(str, encoding || 'hex');
|
|
174
|
+
const info = PublicKey._transformDER(buf);
|
|
175
|
+
return new PublicKey(info.point, {
|
|
176
|
+
compressed: info.compressed,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
static fromX(odd, x) {
|
|
180
|
+
const info = PublicKey._transformX(odd, x);
|
|
181
|
+
return new PublicKey(info.point, {
|
|
182
|
+
compressed: info.compressed,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
static getValidationError(data) {
|
|
186
|
+
try {
|
|
187
|
+
new PublicKey(data);
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
return e;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
static isValid(data) {
|
|
195
|
+
if (data instanceof PublicKey) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return !PublicKey.getValidationError(data);
|
|
199
|
+
}
|
|
200
|
+
toObject() {
|
|
201
|
+
return {
|
|
202
|
+
x: this.point.getX().toString(16).padStart(64, '0'),
|
|
203
|
+
y: this.point.getY().toString(16).padStart(64, '0'),
|
|
204
|
+
compressed: this.compressed,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
toJSON() {
|
|
208
|
+
return this.toObject();
|
|
209
|
+
}
|
|
210
|
+
toBigNumber() {
|
|
211
|
+
return this.point.getX();
|
|
212
|
+
}
|
|
213
|
+
toBuffer() {
|
|
214
|
+
return this.toDER();
|
|
215
|
+
}
|
|
216
|
+
toDER() {
|
|
217
|
+
const x = this.point.getX();
|
|
218
|
+
const y = this.point.getY();
|
|
219
|
+
const xbuf = x.toArrayLike(Buffer, 'be', 32);
|
|
220
|
+
const ybuf = y.toArrayLike(Buffer, 'be', 32);
|
|
221
|
+
let prefix;
|
|
222
|
+
if (!this.compressed) {
|
|
223
|
+
prefix = Buffer.from([0x04]);
|
|
224
|
+
return Buffer.concat([prefix, xbuf, ybuf]);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const odd = y.mod(new BN(2)).eq(new BN(1));
|
|
228
|
+
if (odd) {
|
|
229
|
+
prefix = Buffer.from([0x03]);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
prefix = Buffer.from([0x02]);
|
|
233
|
+
}
|
|
234
|
+
return Buffer.concat([prefix, xbuf]);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
_getID() {
|
|
238
|
+
return Hash.sha256ripemd160(this.toBuffer());
|
|
239
|
+
}
|
|
240
|
+
toAddress(network) {
|
|
241
|
+
return Address.fromPublicKey(this, network);
|
|
242
|
+
}
|
|
243
|
+
toString() {
|
|
244
|
+
return this.toDER().toString('hex');
|
|
245
|
+
}
|
|
246
|
+
inspect() {
|
|
247
|
+
return `<PublicKey: ${this.toString()}${this.compressed ? '' : ', uncompressed'}>`;
|
|
248
|
+
}
|
|
249
|
+
addScalar(scalar) {
|
|
250
|
+
const scalarBN = Buffer.isBuffer(scalar) ? new BN(scalar) : scalar;
|
|
251
|
+
const G = Point.getG();
|
|
252
|
+
const tweakPoint = G.mul(scalarBN);
|
|
253
|
+
const tweakedPoint = this.point.add(tweakPoint);
|
|
254
|
+
tweakedPoint.validate();
|
|
255
|
+
return new PublicKey(tweakedPoint, {
|
|
256
|
+
compressed: this.compressed,
|
|
257
|
+
network: this.network,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
static getN() {
|
|
261
|
+
return Point.getN();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Script } from '../script.js';
|
|
2
|
+
import { BN } from '../crypto/bn.js';
|
|
3
|
+
import type { Transaction } from '../transaction/transaction.js';
|
|
4
|
+
export interface InterpreterData {
|
|
5
|
+
script?: Script;
|
|
6
|
+
tx?: Transaction;
|
|
7
|
+
nin?: number;
|
|
8
|
+
flags?: number;
|
|
9
|
+
satoshisBN?: bigint;
|
|
10
|
+
outputScript?: Script;
|
|
11
|
+
}
|
|
12
|
+
export interface InterpreterObject {
|
|
13
|
+
script?: Script;
|
|
14
|
+
tx?: Transaction;
|
|
15
|
+
nin?: number;
|
|
16
|
+
flags?: number;
|
|
17
|
+
satoshisBN?: bigint;
|
|
18
|
+
outputScript?: Script;
|
|
19
|
+
stack?: Buffer[];
|
|
20
|
+
}
|
|
21
|
+
export declare class Interpreter {
|
|
22
|
+
static SCRIPT_VERIFY_NONE: number;
|
|
23
|
+
static SCRIPT_VERIFY_P2SH: number;
|
|
24
|
+
static SCRIPT_VERIFY_STRICTENC: number;
|
|
25
|
+
static SCRIPT_VERIFY_DERSIG: number;
|
|
26
|
+
static SCRIPT_VERIFY_LOW_S: number;
|
|
27
|
+
static SCRIPT_VERIFY_NULLDUMMY: number;
|
|
28
|
+
static SCRIPT_VERIFY_SIGPUSHONLY: number;
|
|
29
|
+
static SCRIPT_VERIFY_MINIMALDATA: number;
|
|
30
|
+
static SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS: number;
|
|
31
|
+
static SCRIPT_VERIFY_CLEANSTACK: number;
|
|
32
|
+
static SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY: number;
|
|
33
|
+
static SCRIPT_VERIFY_CHECKSEQUENCEVERIFY: number;
|
|
34
|
+
static SCRIPT_VERIFY_MINIMALIF: number;
|
|
35
|
+
static SCRIPT_VERIFY_NULLFAIL: number;
|
|
36
|
+
static SCRIPT_VERIFY_COMPRESSED_PUBKEYTYPE: number;
|
|
37
|
+
static SCRIPT_ENABLE_SIGHASH_FORKID: number;
|
|
38
|
+
static SCRIPT_ENABLE_REPLAY_PROTECTION: number;
|
|
39
|
+
static SCRIPT_ENABLE_CHECKDATASIG: number;
|
|
40
|
+
static SCRIPT_DISALLOW_SEGWIT_RECOVERY: number;
|
|
41
|
+
static SCRIPT_ENABLE_SCHNORR_MULTISIG: number;
|
|
42
|
+
static SCRIPT_VERIFY_INPUT_SIGCHECKS: number;
|
|
43
|
+
static SCRIPT_TAPROOT_KEY_SPEND_PATH: number;
|
|
44
|
+
static SCRIPT_DISABLE_TAPROOT_SIGHASH_LOTUS: number;
|
|
45
|
+
static MAX_SCRIPT_ELEMENT_SIZE: number;
|
|
46
|
+
static MAX_SCRIPT_SIZE: number;
|
|
47
|
+
static MAX_STACK_SIZE: number;
|
|
48
|
+
static MAX_OPCODE_COUNT: number;
|
|
49
|
+
static false: Buffer<ArrayBuffer>;
|
|
50
|
+
static true: Buffer<ArrayBuffer>;
|
|
51
|
+
static MAXIMUM_ELEMENT_SIZE: number;
|
|
52
|
+
static LOCKTIME_THRESHOLD: number;
|
|
53
|
+
static LOCKTIME_THRESHOLD_BN: BN;
|
|
54
|
+
static SEQUENCE_LOCKTIME_DISABLE_FLAG: number;
|
|
55
|
+
static SEQUENCE_LOCKTIME_TYPE_FLAG: number;
|
|
56
|
+
static SEQUENCE_LOCKTIME_MASK: number;
|
|
57
|
+
script: Script;
|
|
58
|
+
tx?: Transaction;
|
|
59
|
+
nin?: number;
|
|
60
|
+
flags: number;
|
|
61
|
+
satoshisBN?: bigint;
|
|
62
|
+
outputScript?: Script;
|
|
63
|
+
stack: Buffer[];
|
|
64
|
+
altstack: Buffer[];
|
|
65
|
+
pc: number;
|
|
66
|
+
pbegincodehash: number;
|
|
67
|
+
nOpCount: number;
|
|
68
|
+
vfExec: boolean[];
|
|
69
|
+
errstr: string;
|
|
70
|
+
constructor(obj?: InterpreterObject);
|
|
71
|
+
static create(obj?: InterpreterObject): Interpreter;
|
|
72
|
+
initialize(): void;
|
|
73
|
+
set(obj: InterpreterObject): Interpreter;
|
|
74
|
+
verify(scriptSig: Script, scriptPubkey: Script, tx: Transaction, nin: number, flags: number, satoshisBN: bigint): boolean;
|
|
75
|
+
checkRawSignatureEncoding(buf: Buffer): boolean;
|
|
76
|
+
checkSignatureEncoding(buf: Buffer): boolean;
|
|
77
|
+
checkTxSignatureEncoding(buf: Buffer): boolean;
|
|
78
|
+
checkDataSignatureEncoding(buf: Buffer): boolean;
|
|
79
|
+
checkPubkeyEncoding(buf: Buffer): boolean;
|
|
80
|
+
private isCompressedOrUncompressedPubkey;
|
|
81
|
+
evaluate(): boolean;
|
|
82
|
+
private toScriptNumBuffer;
|
|
83
|
+
private fromScriptNumBuffer;
|
|
84
|
+
private castToBool;
|
|
85
|
+
step(): boolean;
|
|
86
|
+
private decodeBitfield;
|
|
87
|
+
private countBits;
|
|
88
|
+
private stacktop;
|
|
89
|
+
private isOpcodeDisabled;
|
|
90
|
+
checkLockTime(nLockTime: BN): boolean;
|
|
91
|
+
checkSequence(nSequence: BN): boolean;
|
|
92
|
+
static castToBool(buf: Buffer): boolean;
|
|
93
|
+
static isSchnorrSig(buf: Buffer): boolean;
|
|
94
|
+
private _verifyScriptType;
|
|
95
|
+
static _isMinimallyEncoded(buf: Buffer, nMaxNumSize?: number): boolean;
|
|
96
|
+
static _minimallyEncode(buf: Buffer): Buffer;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=interpreter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../../../lib/bitcore/script/interpreter.ts"],"names":[],"mappings":"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"}
|