@exodus/bip322-js 1.1.0-rc.0 → 1.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/CHANGELOG.md +57 -0
- package/dist/BIP322.js +14 -17
- package/dist/BIP322.js.map +1 -0
- package/dist/Signer.js +2 -2
- package/dist/Signer.js.map +1 -0
- package/dist/Verifier.js +41 -35
- package/dist/Verifier.js.map +1 -0
- package/dist/bitcoinjs/DecodeScriptSignature.js.map +1 -0
- package/dist/bitcoinjs/index.d.ts +1 -2
- package/dist/bitcoinjs/index.js +1 -2
- package/dist/bitcoinjs/index.js.map +1 -0
- package/dist/helpers/Address.d.ts +2 -2
- package/dist/helpers/Address.js +53 -62
- package/dist/helpers/Address.js.map +1 -0
- package/dist/helpers/BIP137.js +2 -7
- package/dist/helpers/BIP137.js.map +1 -0
- package/dist/helpers/VarInt.js +8 -12
- package/dist/helpers/VarInt.js.map +1 -0
- package/dist/helpers/VarStr.js +1 -1
- package/dist/helpers/VarStr.js.map +1 -0
- package/dist/helpers/Witness.js +3 -3
- package/dist/helpers/Witness.js.map +1 -0
- package/dist/helpers/index.d.ts +5 -6
- package/dist/helpers/index.js +5 -6
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -0
- package/package.json +15 -8
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
## [1.1.0-rc.0](https://github.com/ExodusMovement/exodus-hydra.git/compare/@exodus/bip322-js@1.1.0-exodus.6...@exodus/bip322-js@1.1.0-rc.0) (2024-10-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @exodus/bip322-js
|
|
9
|
+
|
|
10
|
+
# Changelog
|
|
11
|
+
|
|
12
|
+
All notable changes to this project will be documented in this file.
|
|
13
|
+
|
|
14
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
15
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
16
|
+
|
|
17
|
+
## [Current]
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Bumped `@exodus/bitcoinjs-lib` fork
|
|
22
|
+
- Removed ecc initialization of `@exodus/bitcoinjs-lib`
|
|
23
|
+
|
|
24
|
+
## [1.1.0-exodus.6] - 2024-07-22
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- Swap out with `@exodus/bitcoinjs-lib` fork
|
|
29
|
+
- Swap out with `@exodus/secp256k1` fork
|
|
30
|
+
|
|
31
|
+
## [1.1.0-exodus.4] - 2023-10-31
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- Sign with `SIGHASH_DEFAULT` instead of `SIGHASH_ALL` for non-spec compliant compatibility.
|
|
36
|
+
|
|
37
|
+
## [1.1.0] - 2023-08-20
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- Added support for BIP-137 legacy signature verification against P2SH-P2WPKH, P2WPKH, and single-key-spend P2TR addresses.
|
|
42
|
+
|
|
43
|
+
## [1.0.3] - 2023-06-29
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Fixed ECC library uninitialized error during taproot signature verification.
|
|
48
|
+
|
|
49
|
+
## [1.0.2] - 2023-06-28
|
|
50
|
+
|
|
51
|
+
Initial release.
|
|
52
|
+
|
|
53
|
+
### Added
|
|
54
|
+
|
|
55
|
+
- Generate raw toSpend and toSign BIP-322 transactions via the BIP322 class.
|
|
56
|
+
- Sign a BIP-322 signature using a private key via the Signer class.
|
|
57
|
+
- Verify a simple BIP-322 signature via the Verifier class.
|
package/dist/BIP322.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import createHash from
|
|
1
|
+
import createHash from 'create-hash';
|
|
2
2
|
import * as bitcoin from '@exodus/bitcoinjs';
|
|
3
3
|
class BIP322 {
|
|
4
|
-
static TAG = Buffer.from(
|
|
4
|
+
static TAG = Buffer.from('BIP0322-signed-message');
|
|
5
5
|
static hashMessage(message) {
|
|
6
6
|
const tagHasher = createHash('sha256');
|
|
7
7
|
tagHasher.update(this.TAG);
|
|
@@ -10,8 +10,7 @@ class BIP322 {
|
|
|
10
10
|
messageHasher.update(tagHash);
|
|
11
11
|
messageHasher.update(tagHash);
|
|
12
12
|
messageHasher.update(Buffer.from(message));
|
|
13
|
-
|
|
14
|
-
return messageHash;
|
|
13
|
+
return messageHasher.digest();
|
|
15
14
|
}
|
|
16
15
|
static buildToSpendTx(message, scriptPublicKey) {
|
|
17
16
|
const psbt = new bitcoin.Psbt();
|
|
@@ -24,18 +23,18 @@ class BIP322 {
|
|
|
24
23
|
scriptSig.set(messageHash, scriptSigPartOne.length);
|
|
25
24
|
psbt.addInput({
|
|
26
25
|
hash: '0'.repeat(64),
|
|
27
|
-
index:
|
|
26
|
+
index: 0xff_ff_ff_ff,
|
|
28
27
|
sequence: 0,
|
|
29
28
|
finalScriptSig: Buffer.from(scriptSig),
|
|
30
|
-
witnessScript: Buffer.from([])
|
|
29
|
+
witnessScript: Buffer.from([]),
|
|
31
30
|
});
|
|
32
31
|
psbt.addOutput({
|
|
33
32
|
value: 0,
|
|
34
|
-
script: scriptPublicKey
|
|
33
|
+
script: scriptPublicKey,
|
|
35
34
|
});
|
|
36
35
|
return psbt.extractTransaction();
|
|
37
36
|
}
|
|
38
|
-
static buildToSignTx(toSpendTxId, witnessScript, isRedeemScript = false, tapInternalKey
|
|
37
|
+
static buildToSignTx(toSpendTxId, witnessScript, isRedeemScript = false, tapInternalKey) {
|
|
39
38
|
const psbt = new bitcoin.Psbt();
|
|
40
39
|
psbt.setVersion(0);
|
|
41
40
|
psbt.setLocktime(0);
|
|
@@ -45,33 +44,31 @@ class BIP322 {
|
|
|
45
44
|
sequence: 0,
|
|
46
45
|
witnessUtxo: {
|
|
47
46
|
script: witnessScript,
|
|
48
|
-
value: 0
|
|
49
|
-
}
|
|
47
|
+
value: 0,
|
|
48
|
+
},
|
|
50
49
|
});
|
|
51
50
|
if (isRedeemScript) {
|
|
52
51
|
psbt.updateInput(0, {
|
|
53
|
-
redeemScript: witnessScript
|
|
52
|
+
redeemScript: witnessScript,
|
|
54
53
|
});
|
|
55
54
|
}
|
|
56
55
|
if (tapInternalKey) {
|
|
57
56
|
psbt.updateInput(0, {
|
|
58
|
-
tapInternalKey
|
|
57
|
+
tapInternalKey,
|
|
59
58
|
});
|
|
60
59
|
}
|
|
61
60
|
psbt.addOutput({
|
|
62
61
|
value: 0,
|
|
63
|
-
script: Buffer.from([0x6a])
|
|
62
|
+
script: Buffer.from([0x6a]),
|
|
64
63
|
});
|
|
65
64
|
return psbt;
|
|
66
65
|
}
|
|
67
66
|
static encodeWitness(signedPsbt) {
|
|
68
|
-
const witness = signedPsbt.data.inputs[0]
|
|
67
|
+
const witness = signedPsbt.data.inputs[0]?.finalScriptWitness;
|
|
69
68
|
if (witness) {
|
|
70
69
|
return witness.toString('base64');
|
|
71
70
|
}
|
|
72
|
-
|
|
73
|
-
throw new Error('Cannot encode empty witness stack.');
|
|
74
|
-
}
|
|
71
|
+
throw new Error('Cannot encode empty witness stack.');
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
export default BIP322;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BIP322.js","sourceRoot":"","sources":["../src/BIP322.ts"],"names":[],"mappings":"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"}
|
package/dist/Signer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import BIP322 from './BIP322';
|
|
2
|
-
import { Address } from './helpers';
|
|
1
|
+
import BIP322 from './BIP322.js';
|
|
2
|
+
import { Address } from './helpers/index.js';
|
|
3
3
|
import * as bitcoin from '@exodus/bitcoinjs';
|
|
4
4
|
import * as bitcoinMessage from 'bitcoinjs-message';
|
|
5
5
|
class Signer {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":"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"}
|
package/dist/Verifier.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import BIP322 from
|
|
2
|
-
import { Address, BIP137 } from
|
|
1
|
+
import BIP322 from './BIP322.js';
|
|
2
|
+
import { Address, BIP137 } from './helpers/index.js';
|
|
3
3
|
import * as bitcoin from '@exodus/bitcoinjs';
|
|
4
4
|
import ecc from '@exodus/bitcoinerlab-secp256k1';
|
|
5
5
|
import * as bitcoinMessage from 'bitcoinjs-message';
|
|
6
|
-
import { decodeScriptSignature } from './bitcoinjs';
|
|
6
|
+
import { decodeScriptSignature } from './bitcoinjs/index.js';
|
|
7
7
|
class Verifier {
|
|
8
8
|
static verifySignature(signerAddress, message, signatureBase64) {
|
|
9
9
|
if (Address.isP2PKH(signerAddress) || BIP137.isBIP137Signature(signatureBase64)) {
|
|
@@ -13,7 +13,7 @@ class Verifier {
|
|
|
13
13
|
const toSpendTx = BIP322.buildToSpendTx(message, scriptPubKey);
|
|
14
14
|
const toSignTx = BIP322.buildToSignTx(toSpendTx.getId(), scriptPubKey);
|
|
15
15
|
toSignTx.updateInput(0, {
|
|
16
|
-
finalScriptWitness: Buffer.from(signatureBase64, 'base64')
|
|
16
|
+
finalScriptWitness: Buffer.from(signatureBase64, 'base64'),
|
|
17
17
|
});
|
|
18
18
|
const witness = toSignTx.extractTransaction().ins[0].witness;
|
|
19
19
|
const encodedSignature = witness[0];
|
|
@@ -40,7 +40,7 @@ class Verifier {
|
|
|
40
40
|
}
|
|
41
41
|
return ecc.verify(hashToSign, publicKey, signature);
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
if (Address.isP2TR(signerAddress)) {
|
|
44
44
|
if (!Address.isSingleKeyP2TRWitness(witness)) {
|
|
45
45
|
throw new Error('BIP-322 verification from script-spend P2TR is unsupported.');
|
|
46
46
|
}
|
|
@@ -60,58 +60,64 @@ class Verifier {
|
|
|
60
60
|
}
|
|
61
61
|
return ecc.verifySchnorr(hashToSign, publicKey, signature);
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
throw new Error('Only P2WPKH, P2SH-P2WPKH, and single-key-spend P2TR BIP-322 verification is supported. Unsupported address is provided.');
|
|
65
|
-
}
|
|
63
|
+
throw new Error('Only P2WPKH, P2SH-P2WPKH, and single-key-spend P2TR BIP-322 verification is supported. Unsupported address is provided.');
|
|
66
64
|
}
|
|
67
65
|
static verifyBIP137Signature(signerAddress, message, signatureBase64) {
|
|
68
66
|
if (Address.isP2PKH(signerAddress)) {
|
|
69
67
|
return bitcoinMessage.verify(message, signerAddress, signatureBase64);
|
|
70
68
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
else if (Address.isP2WPKH(signerAddress)) {
|
|
81
|
-
const p2wpkhAddressDerived = Address.convertPubKeyIntoAddress(publicKeySigned, 'p2wpkh');
|
|
82
|
-
if (p2wpkhAddressDerived.mainnet !== signerAddress && p2wpkhAddressDerived.testnet !== signerAddress) {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
69
|
+
const publicKeySigned = BIP137.derivePubKey(message, signatureBase64);
|
|
70
|
+
const legacySigningAddress = Address.convertPubKeyIntoAddress(publicKeySigned, 'p2pkh').mainnet;
|
|
71
|
+
if (Address.isP2SH(signerAddress)) {
|
|
72
|
+
const p2shAddressDerived = Address.convertPubKeyIntoAddress(publicKeySigned, 'p2sh-p2wpkh');
|
|
73
|
+
if (p2shAddressDerived.mainnet !== signerAddress &&
|
|
74
|
+
p2shAddressDerived.testnet !== signerAddress) {
|
|
75
|
+
return false;
|
|
85
76
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
77
|
+
}
|
|
78
|
+
else if (Address.isP2WPKH(signerAddress)) {
|
|
79
|
+
const p2wpkhAddressDerived = Address.convertPubKeyIntoAddress(publicKeySigned, 'p2wpkh');
|
|
80
|
+
if (p2wpkhAddressDerived.mainnet !== signerAddress &&
|
|
81
|
+
p2wpkhAddressDerived.testnet !== signerAddress) {
|
|
82
|
+
return false;
|
|
91
83
|
}
|
|
92
|
-
|
|
84
|
+
}
|
|
85
|
+
else if (Address.isP2TR(signerAddress)) {
|
|
86
|
+
const p2trAddressDerived = Address.convertPubKeyIntoAddress(publicKeySigned, 'p2tr');
|
|
87
|
+
if (p2trAddressDerived.mainnet !== signerAddress &&
|
|
88
|
+
p2trAddressDerived.testnet !== signerAddress) {
|
|
93
89
|
return false;
|
|
94
90
|
}
|
|
95
|
-
return bitcoinMessage.verify(message, legacySigningAddress, signatureBase64);
|
|
96
91
|
}
|
|
92
|
+
else {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return bitcoinMessage.verify(message, legacySigningAddress, signatureBase64);
|
|
97
96
|
}
|
|
98
97
|
static getHashForSigP2WPKH(toSignTx) {
|
|
99
98
|
const signingScript = bitcoin.payments.p2pkh({
|
|
100
|
-
hash: toSignTx.data.inputs[0].witnessUtxo.script.subarray(2)
|
|
99
|
+
hash: toSignTx.data.inputs[0].witnessUtxo.script.subarray(2),
|
|
101
100
|
}).output;
|
|
102
|
-
return toSignTx
|
|
101
|
+
return toSignTx
|
|
102
|
+
.extractTransaction()
|
|
103
|
+
.hashForWitnessV0(0, signingScript, 0, bitcoin.Transaction.SIGHASH_ALL);
|
|
103
104
|
}
|
|
104
105
|
static getHashForSigP2SHInP2WPKH(toSignTx, hashedPubkey) {
|
|
105
106
|
const signingScript = bitcoin.payments.p2pkh({
|
|
106
|
-
hash: hashedPubkey
|
|
107
|
+
hash: hashedPubkey,
|
|
107
108
|
}).output;
|
|
108
|
-
return toSignTx
|
|
109
|
+
return toSignTx
|
|
110
|
+
.extractTransaction()
|
|
111
|
+
.hashForWitnessV0(0, signingScript, 0, bitcoin.Transaction.SIGHASH_ALL);
|
|
109
112
|
}
|
|
110
113
|
static getHashForSigP2TR(toSignTx, hashType) {
|
|
111
|
-
if (hashType !== bitcoin.Transaction.SIGHASH_DEFAULT &&
|
|
114
|
+
if (hashType !== bitcoin.Transaction.SIGHASH_DEFAULT &&
|
|
115
|
+
hashType !== bitcoin.Transaction.SIGHASH_ALL) {
|
|
112
116
|
throw new Error('Invalid SIGHASH used in signature. Must be either SIGHASH_ALL or SIGHASH_DEFAULT.');
|
|
113
117
|
}
|
|
114
|
-
return toSignTx
|
|
118
|
+
return toSignTx
|
|
119
|
+
.extractTransaction()
|
|
120
|
+
.hashForWitnessV1(0, [toSignTx.data.inputs[0].witnessUtxo.script], [0], hashType);
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
export default Verifier;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Verifier.js","sourceRoot":"","sources":["../src/Verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecodeScriptSignature.js","sourceRoot":"","sources":["../../src/bitcoinjs/DecodeScriptSignature.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { decodeScriptSignature };
|
|
1
|
+
export { decodeScriptSignature } from './DecodeScriptSignature.js';
|
package/dist/bitcoinjs/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bitcoinjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -7,8 +7,8 @@ declare class Address {
|
|
|
7
7
|
static isSingleKeyP2TRWitness(witness: Buffer[]): boolean;
|
|
8
8
|
static convertAdressToScriptPubkey(address: string): Buffer;
|
|
9
9
|
static convertPubKeyIntoAddress(publicKey: Buffer, addressType: 'p2pkh' | 'p2sh-p2wpkh' | 'p2wpkh' | 'p2tr'): {
|
|
10
|
-
mainnet: string;
|
|
11
|
-
testnet: string;
|
|
10
|
+
mainnet: string | undefined;
|
|
11
|
+
testnet: string | undefined;
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
export default Address;
|
package/dist/helpers/Address.js
CHANGED
|
@@ -4,17 +4,10 @@ class Address {
|
|
|
4
4
|
if (address[0] === '1' || address[0] === 'm' || address[0] === 'n') {
|
|
5
5
|
return true;
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
7
|
+
return false;
|
|
10
8
|
}
|
|
11
9
|
static isP2SH(address) {
|
|
12
|
-
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
10
|
+
return address[0] === '3' || address[0] === '2';
|
|
18
11
|
}
|
|
19
12
|
static isP2WPKH(address) {
|
|
20
13
|
if (address.slice(0, 4) === 'bc1q' || address.slice(0, 4) === 'tb1q') {
|
|
@@ -22,103 +15,101 @@ class Address {
|
|
|
22
15
|
if (scriptPubKey.byteLength === 22) {
|
|
23
16
|
return true;
|
|
24
17
|
}
|
|
25
|
-
else {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
18
|
return false;
|
|
31
19
|
}
|
|
20
|
+
return false;
|
|
32
21
|
}
|
|
33
22
|
static isP2TR(address) {
|
|
34
|
-
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
23
|
+
return address.slice(0, 4) === 'bc1p' || address.slice(0, 4) === 'tb1p';
|
|
40
24
|
}
|
|
41
25
|
static isP2WPKHWitness(witness) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
else {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
26
|
+
return (witness.length === 2 &&
|
|
27
|
+
witness[1].byteLength === 33 &&
|
|
28
|
+
(witness[1][0] === 0x02 || witness[1][0] === 0x03));
|
|
48
29
|
}
|
|
49
30
|
static isSingleKeyP2TRWitness(witness) {
|
|
50
|
-
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
31
|
+
return witness.length === 1;
|
|
56
32
|
}
|
|
57
33
|
static convertAdressToScriptPubkey(address) {
|
|
58
34
|
if (address[0] === '1' || address[0] === 'm' || address[0] === 'n') {
|
|
59
35
|
return bitcoin.payments.p2pkh({
|
|
60
|
-
address
|
|
61
|
-
network:
|
|
36
|
+
address,
|
|
37
|
+
network: address[0] === '1' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet,
|
|
62
38
|
}).output;
|
|
63
39
|
}
|
|
64
|
-
|
|
40
|
+
if (address[0] === '3' || address[0] === '2') {
|
|
65
41
|
return bitcoin.payments.p2sh({
|
|
66
|
-
address
|
|
67
|
-
network:
|
|
42
|
+
address,
|
|
43
|
+
network: address[0] === '3' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet,
|
|
68
44
|
}).output;
|
|
69
45
|
}
|
|
70
|
-
|
|
46
|
+
if (address.slice(0, 4) === 'bc1q' || address.slice(0, 4) === 'tb1q') {
|
|
71
47
|
if (address.length === 42) {
|
|
72
48
|
return bitcoin.payments.p2wpkh({
|
|
73
|
-
address
|
|
74
|
-
network:
|
|
49
|
+
address,
|
|
50
|
+
network: address.slice(0, 4) === 'bc1q' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet,
|
|
75
51
|
}).output;
|
|
76
52
|
}
|
|
77
|
-
|
|
53
|
+
if (address.length === 62) {
|
|
78
54
|
return bitcoin.payments.p2wsh({
|
|
79
|
-
address
|
|
80
|
-
network:
|
|
55
|
+
address,
|
|
56
|
+
network: address.slice(0, 4) === 'bc1q' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet,
|
|
81
57
|
}).output;
|
|
82
58
|
}
|
|
83
59
|
}
|
|
84
|
-
else if (address.slice(0, 4) === 'bc1p' || address.slice(0, 4) === 'tb1p')
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
60
|
+
else if ((address.slice(0, 4) === 'bc1p' || address.slice(0, 4) === 'tb1p') &&
|
|
61
|
+
address.length === 62) {
|
|
62
|
+
return bitcoin.payments.p2tr({
|
|
63
|
+
address,
|
|
64
|
+
network: address.slice(0, 4) === 'bc1p' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet,
|
|
65
|
+
}).output;
|
|
91
66
|
}
|
|
92
|
-
throw new Error(
|
|
67
|
+
throw new Error('Unknown address type');
|
|
93
68
|
}
|
|
94
69
|
static convertPubKeyIntoAddress(publicKey, addressType) {
|
|
95
70
|
switch (addressType) {
|
|
96
71
|
case 'p2pkh':
|
|
97
72
|
return {
|
|
98
|
-
mainnet: bitcoin.payments.p2pkh({ pubkey: publicKey, network: bitcoin.networks.bitcoin })
|
|
99
|
-
|
|
73
|
+
mainnet: bitcoin.payments.p2pkh({ pubkey: publicKey, network: bitcoin.networks.bitcoin })
|
|
74
|
+
.address,
|
|
75
|
+
testnet: bitcoin.payments.p2pkh({ pubkey: publicKey, network: bitcoin.networks.testnet })
|
|
76
|
+
.address,
|
|
100
77
|
};
|
|
101
78
|
case 'p2sh-p2wpkh':
|
|
102
79
|
return {
|
|
103
80
|
mainnet: bitcoin.payments.p2sh({
|
|
104
|
-
redeem: bitcoin.payments.p2wpkh({
|
|
105
|
-
|
|
81
|
+
redeem: bitcoin.payments.p2wpkh({
|
|
82
|
+
pubkey: publicKey,
|
|
83
|
+
network: bitcoin.networks.bitcoin,
|
|
84
|
+
}),
|
|
85
|
+
network: bitcoin.networks.bitcoin,
|
|
106
86
|
}).address,
|
|
107
87
|
testnet: bitcoin.payments.p2sh({
|
|
108
|
-
redeem: bitcoin.payments.p2wpkh({
|
|
109
|
-
|
|
110
|
-
|
|
88
|
+
redeem: bitcoin.payments.p2wpkh({
|
|
89
|
+
pubkey: publicKey,
|
|
90
|
+
network: bitcoin.networks.testnet,
|
|
91
|
+
}),
|
|
92
|
+
network: bitcoin.networks.testnet,
|
|
93
|
+
}).address,
|
|
111
94
|
};
|
|
112
95
|
case 'p2wpkh':
|
|
113
96
|
return {
|
|
114
|
-
mainnet: bitcoin.payments.p2wpkh({ pubkey: publicKey, network: bitcoin.networks.bitcoin })
|
|
115
|
-
|
|
97
|
+
mainnet: bitcoin.payments.p2wpkh({ pubkey: publicKey, network: bitcoin.networks.bitcoin })
|
|
98
|
+
.address,
|
|
99
|
+
testnet: bitcoin.payments.p2wpkh({ pubkey: publicKey, network: bitcoin.networks.testnet })
|
|
100
|
+
.address,
|
|
116
101
|
};
|
|
117
102
|
case 'p2tr':
|
|
118
103
|
const internalPubkey = publicKey.byteLength === 33 ? publicKey.subarray(1, 33) : publicKey;
|
|
119
104
|
return {
|
|
120
|
-
mainnet: bitcoin.payments.p2tr({
|
|
121
|
-
|
|
105
|
+
mainnet: bitcoin.payments.p2tr({
|
|
106
|
+
internalPubkey,
|
|
107
|
+
network: bitcoin.networks.bitcoin,
|
|
108
|
+
}).address,
|
|
109
|
+
testnet: bitcoin.payments.p2tr({
|
|
110
|
+
internalPubkey,
|
|
111
|
+
network: bitcoin.networks.testnet,
|
|
112
|
+
}).address,
|
|
122
113
|
};
|
|
123
114
|
default:
|
|
124
115
|
throw new Error('Cannot convert public key into unsupported address type.');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Address.js","sourceRoot":"","sources":["../../src/helpers/Address.ts"],"names":[],"mappings":"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"}
|
package/dist/helpers/BIP137.js
CHANGED
|
@@ -3,12 +3,7 @@ import * as bitcoinMessage from 'bitcoinjs-message';
|
|
|
3
3
|
class BIP137 {
|
|
4
4
|
static isBIP137Signature(signature) {
|
|
5
5
|
const signatureBuffer = Buffer.from(signature, 'base64');
|
|
6
|
-
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
6
|
+
return signatureBuffer.byteLength === 65;
|
|
12
7
|
}
|
|
13
8
|
static derivePubKey(message, signature) {
|
|
14
9
|
const messageHash = bitcoinMessage.magicHash(message);
|
|
@@ -26,7 +21,7 @@ class BIP137 {
|
|
|
26
21
|
return {
|
|
27
22
|
compressed: !!(flagByte & 12),
|
|
28
23
|
recovery: flagByte & 3,
|
|
29
|
-
signature: signature.subarray(1)
|
|
24
|
+
signature: signature.subarray(1),
|
|
30
25
|
};
|
|
31
26
|
}
|
|
32
27
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BIP137.js","sourceRoot":"","sources":["../../src/helpers/BIP137.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAA;AAKnD,MAAM,MAAM;IAMH,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QAE/C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QACxD,OAAO,eAAe,CAAC,UAAU,KAAK,EAAE,CAAA;IAC1C,CAAC;IAQM,MAAM,CAAC,YAAY,CAAC,OAAe,EAAE,SAAiB;QAE3D,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAErD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;QAE/E,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAC/C,gBAAgB,CAAC,SAAS,EAC1B,gBAAgB,CAAC,QAAQ,EACzB,WAAW,EACX,gBAAgB,CAAC,UAAU,CAC5B,CAAA;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACxC,CAAC;IAQO,MAAM,CAAC,eAAe,CAAC,SAAiB;QAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QAC5C,IAAI,QAAQ,GAAG,EAAE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAChD,CAAC;QAED,OAAO;YACL,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;YAC7B,QAAQ,EAAE,QAAQ,GAAG,CAAC;YACtB,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjC,CAAA;IACH,CAAC;CACF;AAED,eAAe,MAAM,CAAA"}
|
package/dist/helpers/VarInt.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
class VarInt {
|
|
2
2
|
static encode(i) {
|
|
3
|
-
if (i <
|
|
3
|
+
if (i < 0xfd) {
|
|
4
4
|
const buffer = Buffer.alloc(1);
|
|
5
5
|
buffer.writeUInt8(i);
|
|
6
6
|
return buffer;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
if (i < 0x1_00_00) {
|
|
9
9
|
const buffer = Buffer.alloc(3);
|
|
10
10
|
buffer.writeUInt8(0xfd);
|
|
11
11
|
buffer.writeUInt16LE(i, 1);
|
|
12
12
|
return buffer;
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
if (i < 0x1_00_00_00_00) {
|
|
15
15
|
const buffer = Buffer.alloc(5);
|
|
16
16
|
buffer.writeUInt8(0xfe);
|
|
17
17
|
buffer.writeUInt32LE(i, 1);
|
|
18
18
|
return buffer;
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
if (i < 0x1_00_00_00_00_00_00) {
|
|
21
21
|
const buffer = Buffer.alloc(9);
|
|
22
22
|
buffer.writeUInt8(0xff);
|
|
23
23
|
buffer.writeUIntLE(i, 1, 6);
|
|
@@ -25,9 +25,7 @@ class VarInt {
|
|
|
25
25
|
buffer.writeUInt8(0x00, 8);
|
|
26
26
|
return buffer;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
throw new Error(`Integer too large: ${i}`);
|
|
30
|
-
}
|
|
28
|
+
throw new Error(`Integer too large: ${i}`);
|
|
31
29
|
}
|
|
32
30
|
static decode(b) {
|
|
33
31
|
if (b.byteLength === 0) {
|
|
@@ -37,15 +35,13 @@ class VarInt {
|
|
|
37
35
|
if (i === 0xfd) {
|
|
38
36
|
return b.readUInt16LE(1);
|
|
39
37
|
}
|
|
40
|
-
|
|
38
|
+
if (i === 0xfe) {
|
|
41
39
|
return b.readUInt32LE(1);
|
|
42
40
|
}
|
|
43
|
-
|
|
41
|
+
if (i === 0xff) {
|
|
44
42
|
return b.readUIntLE(1, 6);
|
|
45
43
|
}
|
|
46
|
-
|
|
47
|
-
return i;
|
|
48
|
-
}
|
|
44
|
+
return i;
|
|
49
45
|
}
|
|
50
46
|
}
|
|
51
47
|
export default VarInt;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VarInt.js","sourceRoot":"","sources":["../../src/helpers/VarInt.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM;IAOH,MAAM,CAAC,MAAM,CAAC,CAAS;QAC5B,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YACpB,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1B,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1B,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,CAAC,GAAG,qBAAqB,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAC3B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1B,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;IAC5C,CAAC;IAQM,MAAM,CAAC,MAAM,CAAC,CAAS;QAE5B,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QAGD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAA;QAEvB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAEf,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAEf,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAEf,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,CAAC;QAGD,OAAO,CAAC,CAAA;IACV,CAAC;CACF;AAED,eAAe,MAAM,CAAA"}
|
package/dist/helpers/VarStr.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VarStr.js","sourceRoot":"","sources":["../../src/helpers/VarStr.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAA;AAMhC,MAAM,MAAM;IAOH,MAAM,CAAC,MAAM,CAAC,CAAS;QAE5B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAE5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC;IAQM,MAAM,CAAC,MAAM,CAAC,CAAS;QAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAE/B,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAA;QAEzD,OAAO,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAA;IAChE,CAAC;CACF;AAED,eAAe,MAAM,CAAA"}
|
package/dist/helpers/Witness.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import VarInt from
|
|
2
|
-
import VarStr from
|
|
1
|
+
import VarInt from './VarInt.js';
|
|
2
|
+
import VarStr from './VarStr.js';
|
|
3
3
|
class Witness {
|
|
4
4
|
static serialize(witnesses) {
|
|
5
5
|
let witnessStack = VarInt.encode(witnesses.length);
|
|
@@ -9,7 +9,7 @@ class Witness {
|
|
|
9
9
|
return witnessStack.toString('base64');
|
|
10
10
|
}
|
|
11
11
|
static deserialize(encodedWitness) {
|
|
12
|
-
|
|
12
|
+
const witnessDecoded = [];
|
|
13
13
|
let witnessToDecode;
|
|
14
14
|
if (typeof encodedWitness === 'string') {
|
|
15
15
|
witnessToDecode = Buffer.from(encodedWitness, 'base64');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Witness.js","sourceRoot":"","sources":["../../src/helpers/Witness.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,MAAM,MAAM,aAAa,CAAA;AAKhC,MAAM,OAAO;IAQJ,MAAM,CAAC,SAAS,CAAC,SAAuB;QAE7C,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAElD,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE5B,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;QAEF,OAAO,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC;IASM,MAAM,CAAC,WAAW,CAAC,cAA+B;QAEvD,MAAM,cAAc,GAAa,EAAE,CAAA;QAEnC,IAAI,eAAuB,CAAA;QAC3B,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YAEvC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;QACzD,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,cAAc,CAAA;QAClC,CAAC;QAGD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QAEnD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,CAAA;QAC3D,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAEtC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;YAE9C,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAE5B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAA;YACvD,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAGD,OAAO,cAAc,CAAA;IACvB,CAAC;CACF;AAED,eAAe,OAAO,CAAA"}
|
package/dist/helpers/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export { Address, BIP137, VarInt, VarStr, Witness };
|
|
1
|
+
export { default as Address } from './Address.js';
|
|
2
|
+
export { default as VarInt } from './VarInt.js';
|
|
3
|
+
export { default as BIP137 } from './BIP137.js';
|
|
4
|
+
export { default as Witness } from './Witness.js';
|
|
5
|
+
export { default as VarStr } from './VarStr.js';
|
package/dist/helpers/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export { Address, BIP137, VarInt, VarStr, Witness };
|
|
1
|
+
export { default as Address } from './Address.js';
|
|
2
|
+
export { default as VarInt } from './VarInt.js';
|
|
3
|
+
export { default as BIP137 } from './BIP137.js';
|
|
4
|
+
export { default as Witness } from './Witness.js';
|
|
5
|
+
export { default as VarStr } from './VarStr.js';
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export {
|
|
1
|
+
export { default as BIP322 } from './BIP322.js';
|
|
2
|
+
export { default as Signer } from './Signer.js';
|
|
3
|
+
export { Witness, Address } from './helpers/index.js';
|
|
4
|
+
export { default as Verifier } from './Verifier.js';
|
|
5
|
+
export { BIP137 } from './helpers/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export {
|
|
1
|
+
export { default as BIP322 } from './BIP322.js';
|
|
2
|
+
export { default as Signer } from './Signer.js';
|
|
3
|
+
export { Witness, Address } from './helpers/index.js';
|
|
4
|
+
export { default as Verifier } from './Verifier.js';
|
|
5
|
+
export { BIP137 } from './helpers/index.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exodus/bip322-js",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A Javascript library that provides utility functions related to the BIP-322 signature scheme",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,11 +8,18 @@
|
|
|
8
8
|
"publishConfig": {
|
|
9
9
|
"access": "restricted"
|
|
10
10
|
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"CHANGELOG.md"
|
|
14
|
+
],
|
|
11
15
|
"scripts": {
|
|
12
16
|
"build": "tsc",
|
|
17
|
+
"lint": "eslint",
|
|
18
|
+
"lint:fix": "run lint --fix",
|
|
13
19
|
"doc": "typedoc src/index.ts",
|
|
14
20
|
"prepack": "npm run build",
|
|
15
|
-
"test": "run -T exodus-test --jest --esbuild"
|
|
21
|
+
"test": "run -T exodus-test --jest --esbuild",
|
|
22
|
+
"prepublishOnly": "yarn run -T build --scope @exodus/bip322-js"
|
|
16
23
|
},
|
|
17
24
|
"keywords": [
|
|
18
25
|
"bip322",
|
|
@@ -21,10 +28,10 @@
|
|
|
21
28
|
"typescript",
|
|
22
29
|
"no-WASM"
|
|
23
30
|
],
|
|
24
|
-
"author": "
|
|
31
|
+
"author": "Exodus Movement, Inc.",
|
|
25
32
|
"repository": {
|
|
26
33
|
"type": "git",
|
|
27
|
-
"url": "git+https://github.com/ExodusMovement/exodus-hydra.git
|
|
34
|
+
"url": "git+https://github.com/ExodusMovement/exodus-hydra.git"
|
|
28
35
|
},
|
|
29
36
|
"license": "MIT",
|
|
30
37
|
"devDependencies": {
|
|
@@ -36,13 +43,13 @@
|
|
|
36
43
|
"dependencies": {
|
|
37
44
|
"@exodus/bitcoinerlab-secp256k1": "^1.0.5-exodus.1",
|
|
38
45
|
"@exodus/bitcoinjs": "^1.1.0",
|
|
39
|
-
"@exodus/secp256k1": "4.0.2-exodus.0",
|
|
46
|
+
"@exodus/secp256k1": "^4.0.2-exodus.0",
|
|
40
47
|
"bitcoinjs-message": "^2.2.0",
|
|
41
48
|
"create-hash": "^1.2.0"
|
|
42
49
|
},
|
|
43
|
-
"homepage": "https://github.com/ExodusMovement/exodus-hydra
|
|
50
|
+
"homepage": "https://github.com/ExodusMovement/exodus-hydra/tree/master/libraries/bip322-js",
|
|
44
51
|
"bugs": {
|
|
45
|
-
"url": "https://github.com/ExodusMovement/exodus-hydra
|
|
52
|
+
"url": "https://github.com/ExodusMovement/exodus-hydra/issues?q=is%3Aissue+is%3Aopen+label%3Abip322-js"
|
|
46
53
|
},
|
|
47
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "5e7420d5169df5428f6955c1e0008ea57a07b18c"
|
|
48
55
|
}
|