@teleportdao/bitcoin 1.4.4 → 1.4.7
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/dist/bitcoin-base.d.ts +62 -50
- package/dist/bitcoin-base.d.ts.map +1 -1
- package/dist/bitcoin-base.js +55 -28
- package/dist/bitcoin-base.js.map +1 -1
- package/dist/bitcoin-interface-utils.d.ts +12 -10
- package/dist/bitcoin-interface-utils.d.ts.map +1 -1
- package/dist/bitcoin-interface-utils.js +16 -10
- package/dist/bitcoin-interface-utils.js.map +1 -1
- package/dist/bitcoin-interface.d.ts +206 -50
- package/dist/bitcoin-interface.d.ts.map +1 -1
- package/dist/bitcoin-interface.js +42 -27
- package/dist/bitcoin-interface.js.map +1 -1
- package/dist/bitcoin-utils.d.ts +111 -41
- package/dist/bitcoin-utils.d.ts.map +1 -1
- package/dist/bitcoin-utils.js +215 -159
- package/dist/bitcoin-utils.js.map +1 -1
- package/dist/bundle.js +13 -4
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -13
- package/dist/index.js.map +1 -1
- package/dist/teleport-dao-payments.d.ts +60 -92
- package/dist/teleport-dao-payments.d.ts.map +1 -1
- package/dist/teleport-dao-payments.js +12 -1
- package/dist/teleport-dao-payments.js.map +1 -1
- package/dist/transaction-builder/bitcoin-transaction-builder.d.ts +8 -4
- package/dist/transaction-builder/bitcoin-transaction-builder.d.ts.map +1 -1
- package/dist/transaction-builder/bitcoin-transaction-builder.js +3 -3
- package/dist/transaction-builder/bitcoin-transaction-builder.js.map +1 -1
- package/dist/transaction-builder/transaction-builder.d.ts +63 -13
- package/dist/transaction-builder/transaction-builder.d.ts.map +1 -1
- package/dist/transaction-builder/transaction-builder.js +72 -19
- package/dist/transaction-builder/transaction-builder.js.map +1 -1
- package/dist/utils/networks.d.ts +5 -35
- package/dist/utils/networks.d.ts.map +1 -1
- package/dist/utils/networks.js +26 -2
- package/dist/utils/networks.js.map +1 -1
- package/dist/utils/tools.d.ts +15 -9
- package/dist/utils/tools.d.ts.map +1 -1
- package/dist/utils/tools.js +14 -11
- package/dist/utils/tools.js.map +1 -1
- package/package.json +6 -6
- package/src/{bitcoin-base.js → bitcoin-base.ts} +97 -69
- package/src/{bitcoin-interface-utils.js → bitcoin-interface-utils.ts} +59 -53
- package/src/{bitcoin-interface.js → bitcoin-interface.ts} +115 -45
- package/src/{bitcoin-utils.js → bitcoin-utils.ts} +337 -216
- package/src/index.ts +5 -8
- package/src/{teleport-dao-payments.js → teleport-dao-payments.ts} +67 -6
- package/src/transaction-builder/bitcoin-transaction-builder.ts +8 -4
- package/src/transaction-builder/transaction-builder.ts +102 -25
- package/src/utils/{networks.js → networks.ts} +33 -31
- package/src/utils/{tools.js → tools.ts} +80 -72
- package/tsconfig.json +10 -9
- package/webpack.config.js +16 -0
- package/dist/transaction-builder/transaction-builder-common.d.ts +0 -57
- package/dist/transaction-builder/transaction-builder-common.d.ts.map +0 -1
- package/dist/transaction-builder/transaction-builder-common.js +0 -183
- package/dist/transaction-builder/transaction-builder-common.js.map +0 -1
package/dist/bitcoin-utils.d.ts
CHANGED
|
@@ -1,48 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import networks from "./utils/networks";
|
|
3
|
+
import * as bitcoin from "bitcoinjs-lib";
|
|
4
|
+
export { networks };
|
|
5
|
+
export declare function generateMnemonic(): string;
|
|
6
|
+
export declare function parseRawTransaction(rawTransaction: string): {
|
|
7
|
+
version: string;
|
|
8
|
+
flag: string;
|
|
4
9
|
vin: string;
|
|
5
10
|
vout: string;
|
|
6
11
|
witness: string;
|
|
7
12
|
locktime: string;
|
|
8
13
|
};
|
|
9
|
-
export function
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
export declare function reverseBytes(hexInput: string): string;
|
|
15
|
+
export declare function getPublicKeyHexByXpubAndIndex(xpub: string, index?: number, isChange?: boolean, network?: bitcoin.networks.Network): string;
|
|
16
|
+
export declare function getPubKeyFromPrivateKeyWIF(privateKeyWIF: string, network?: bitcoin.networks.Network): Buffer;
|
|
17
|
+
export declare function getPubKeyFromPrivateKeyHex(privateKeyHex: string, network?: bitcoin.networks.Network): Buffer;
|
|
18
|
+
export declare function getPrivateKeyHexFromWIF(privateKeyWIF: string, network?: bitcoin.networks.Network): string;
|
|
19
|
+
export declare function calculateMerkleProof(blockTransactions: string[], txId: string, blockMerkleRoot?: string): {
|
|
20
|
+
intermediateNodes: string;
|
|
21
|
+
transactionIndex: number;
|
|
12
22
|
};
|
|
13
|
-
export function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, network?: bitcoin.networks.Network): bitcoin.payments.Payment;
|
|
21
|
-
export function createAddressObjectByAddress(address: any, network?: bitcoin.networks.Network): {
|
|
22
|
-
addressObject: bitcoin.payments.Payment;
|
|
23
|
-
addressType: "p2wpkh" | "p2sh" | "p2pkh";
|
|
23
|
+
export declare function parseBlockHeader(headerHex: string): {
|
|
24
|
+
version: string;
|
|
25
|
+
previousBlockHash: string;
|
|
26
|
+
merkleRoot: string;
|
|
27
|
+
timestamp: string;
|
|
28
|
+
difficulty: string;
|
|
29
|
+
nonce: string;
|
|
24
30
|
};
|
|
25
|
-
export function
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}, network?: bitcoin.networks.Network): bitcoin.payments.Payment;
|
|
29
|
-
export function getAddressType(address: any, network?: bitcoin.networks.Network): "p2tr" | "p2wpkh" | "p2sh" | "p2pkh";
|
|
30
|
-
export function getPubKeyFromPrivateKeyWIF(privateKeyWIF: any, network?: bitcoin.networks.Network): Buffer;
|
|
31
|
-
export function getPubKeyFromPrivateKeyHex(privateKeyHex: any, network?: bitcoin.networks.Network): Buffer;
|
|
32
|
-
export function getPublicKeyHexByXpubAndIndex(xpub: any, index?: number, isChange?: boolean, network?: bitcoin.networks.Network): string;
|
|
33
|
-
export function getPrivateKeyHexFromWIF(privateKeyWIF: any, network?: bitcoin.networks.Network): string;
|
|
34
|
-
export function reverseBytes(hexInput: any): string;
|
|
35
|
-
export function parseBlockHeader(headerHex: any): {};
|
|
36
|
-
export function generateMnemonic(): string;
|
|
37
|
-
export function parseRawBlock(rawBlockHex: any, blockNumber?: undefined, network?: any): {
|
|
38
|
-
blockNumber: undefined;
|
|
31
|
+
export declare function convertBitcoinScriptToAddress(script: Buffer, network?: bitcoin.networks.Network): string | null;
|
|
32
|
+
export declare function parseRawBlock(rawBlockHex: string, blockNumber?: number, network?: bitcoin.networks.Network): {
|
|
33
|
+
blockNumber: number | undefined;
|
|
39
34
|
merkleRoot: string;
|
|
40
35
|
prvBlockHash: string;
|
|
41
36
|
transactions: {
|
|
42
37
|
txId: string;
|
|
43
38
|
version: number;
|
|
44
39
|
locktime: number;
|
|
45
|
-
blockNumber: undefined;
|
|
40
|
+
blockNumber: number | undefined;
|
|
46
41
|
blockHash: string;
|
|
47
42
|
vout: {
|
|
48
43
|
address: string | null;
|
|
@@ -54,20 +49,95 @@ export function parseRawBlock(rawBlockHex: any, blockNumber?: undefined, network
|
|
|
54
49
|
txId: string;
|
|
55
50
|
index: number;
|
|
56
51
|
}[];
|
|
57
|
-
}[];
|
|
52
|
+
}[] | undefined;
|
|
58
53
|
};
|
|
59
|
-
export function extractTransactionsAndBlockInfoFromRawBlock(rawBlockHex:
|
|
54
|
+
export declare function extractTransactionsAndBlockInfoFromRawBlock(rawBlockHex: string, blockNumber: number, addresses?: string[], inputTxIds?: {
|
|
55
|
+
txId: string;
|
|
56
|
+
index: number;
|
|
57
|
+
address?: string;
|
|
58
|
+
script?: string;
|
|
59
|
+
value?: number;
|
|
60
|
+
}[], network?: bitcoin.networks.Network): {
|
|
60
61
|
blockInfo: {
|
|
61
|
-
blockNumber:
|
|
62
|
+
blockNumber: number;
|
|
62
63
|
blockHash: string;
|
|
63
64
|
merkleRoot: string;
|
|
64
65
|
prvBlockHash: string;
|
|
65
66
|
};
|
|
66
|
-
withdrawTxs:
|
|
67
|
-
|
|
67
|
+
withdrawTxs: {
|
|
68
|
+
txId: string;
|
|
69
|
+
version: number;
|
|
70
|
+
locktime: number;
|
|
71
|
+
blockNumber: number;
|
|
72
|
+
blockHash: string;
|
|
73
|
+
merkleProof: {
|
|
74
|
+
intermediateNodes: string;
|
|
75
|
+
transactionIndex: number;
|
|
76
|
+
};
|
|
77
|
+
vout: {
|
|
78
|
+
address: string | null;
|
|
79
|
+
script: string;
|
|
80
|
+
value: number;
|
|
81
|
+
}[];
|
|
82
|
+
vin: {
|
|
83
|
+
txId: string;
|
|
84
|
+
index: number;
|
|
85
|
+
address?: string | null;
|
|
86
|
+
script?: string | null;
|
|
87
|
+
value?: number | null;
|
|
88
|
+
}[];
|
|
89
|
+
address: string;
|
|
90
|
+
addressScript: string;
|
|
91
|
+
}[];
|
|
92
|
+
depositTxs: {
|
|
93
|
+
txId: string;
|
|
94
|
+
version: number;
|
|
95
|
+
locktime: number;
|
|
96
|
+
blockNumber: number;
|
|
97
|
+
blockHash: string;
|
|
98
|
+
merkleProof: {
|
|
99
|
+
intermediateNodes: string;
|
|
100
|
+
transactionIndex: number;
|
|
101
|
+
};
|
|
102
|
+
vout: {
|
|
103
|
+
address: string | null;
|
|
104
|
+
script: string;
|
|
105
|
+
value: number;
|
|
106
|
+
}[];
|
|
107
|
+
vin: {
|
|
108
|
+
txId: string;
|
|
109
|
+
index: number;
|
|
110
|
+
address?: string | null;
|
|
111
|
+
script?: string | null;
|
|
112
|
+
value?: number | null;
|
|
113
|
+
}[];
|
|
114
|
+
address: string;
|
|
115
|
+
addressScript: string;
|
|
116
|
+
}[];
|
|
117
|
+
};
|
|
118
|
+
export declare function validateAddress(address: string, network?: bitcoin.networks.Network): boolean;
|
|
119
|
+
export declare function getAddressType(address: string, network?: bitcoin.networks.Network): "p2tr" | "p2wpkh" | "p2sh" | "p2pkh";
|
|
120
|
+
export declare function createAddressObjectByScript({ addressType, script }: {
|
|
121
|
+
addressType: string;
|
|
122
|
+
script: Buffer;
|
|
123
|
+
}, network?: bitcoin.Network): bitcoin.payments.Payment;
|
|
124
|
+
export declare function createAddressObjectByHash({ addressType, hash }: {
|
|
125
|
+
addressType: string;
|
|
126
|
+
hash: Buffer;
|
|
127
|
+
}, network?: bitcoin.Network): bitcoin.payments.Payment;
|
|
128
|
+
export declare function createAddressObjectByPublicKey({ addressType, publicKey }: {
|
|
129
|
+
addressType: string;
|
|
130
|
+
publicKey: Buffer;
|
|
131
|
+
}, network?: bitcoin.Network): bitcoin.payments.Payment;
|
|
132
|
+
export declare function createAddressObjectByAddress(address: string, network?: bitcoin.networks.Network): {
|
|
133
|
+
addressObject: bitcoin.payments.Payment;
|
|
134
|
+
addressType: "p2wpkh" | "p2sh" | "p2pkh";
|
|
135
|
+
};
|
|
136
|
+
export declare function publicKeyConvertor(publicKeyHex: string, compressed?: boolean): string;
|
|
137
|
+
export declare const addressTypeHelper: {
|
|
138
|
+
addressTypesNumber: {
|
|
139
|
+
[key: string]: number;
|
|
140
|
+
};
|
|
141
|
+
addressTypes: string[];
|
|
68
142
|
};
|
|
69
|
-
export function validateAddress(address: any, network?: bitcoin.networks.Network): boolean;
|
|
70
|
-
import networks = require("./utils/networks");
|
|
71
|
-
import bitcoin = require("bitcoinjs-lib");
|
|
72
|
-
export { networks };
|
|
73
143
|
//# sourceMappingURL=bitcoin-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-utils.d.ts","sourceRoot":"","sources":["../src/bitcoin-utils.
|
|
1
|
+
{"version":3,"file":"bitcoin-utils.d.ts","sourceRoot":"","sources":["../src/bitcoin-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/bitcoin-utils.js
CHANGED
|
@@ -1,16 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.addressTypeHelper = exports.publicKeyConvertor = exports.createAddressObjectByAddress = exports.createAddressObjectByPublicKey = exports.createAddressObjectByHash = exports.createAddressObjectByScript = exports.getAddressType = exports.validateAddress = exports.extractTransactionsAndBlockInfoFromRawBlock = exports.parseRawBlock = exports.convertBitcoinScriptToAddress = exports.parseBlockHeader = exports.calculateMerkleProof = exports.getPrivateKeyHexFromWIF = exports.getPubKeyFromPrivateKeyHex = exports.getPubKeyFromPrivateKeyWIF = exports.getPublicKeyHexByXpubAndIndex = exports.reverseBytes = exports.parseRawTransaction = exports.generateMnemonic = exports.networks = void 0;
|
|
30
|
+
const bip39 = __importStar(require("bip39"));
|
|
31
|
+
const bip32 = __importStar(require("bip32"));
|
|
32
|
+
const networks_1 = __importDefault(require("./utils/networks"));
|
|
33
|
+
exports.networks = networks_1.default;
|
|
34
|
+
const bitcoin = __importStar(require("bitcoinjs-lib"));
|
|
35
|
+
const ECPair = bitcoin.ECPair;
|
|
4
36
|
let varUnit = require("varuint-bitcoin");
|
|
5
37
|
const fastRoot = require("merkle-lib/fastRoot");
|
|
6
38
|
const merkle = require("merkle-lib");
|
|
7
39
|
const merkleProof = require("merkle-lib/proof");
|
|
8
|
-
const bitcoin = require("bitcoinjs-lib");
|
|
9
|
-
const networks = require("./utils/networks");
|
|
10
40
|
function generateMnemonic() {
|
|
11
41
|
const mnemonic = bip39.generateMnemonic(256);
|
|
12
42
|
return mnemonic;
|
|
13
43
|
}
|
|
44
|
+
exports.generateMnemonic = generateMnemonic;
|
|
14
45
|
function parseRawTransaction(rawTransaction) {
|
|
15
46
|
const size = {
|
|
16
47
|
version: 4,
|
|
@@ -59,159 +90,42 @@ function parseRawTransaction(rawTransaction) {
|
|
|
59
90
|
let locktime = `0x${rawTransaction.slice(rawTransaction.length - 8, rawTransaction.length)}`;
|
|
60
91
|
return { version, flag, vin, vout, witness, locktime };
|
|
61
92
|
}
|
|
93
|
+
exports.parseRawTransaction = parseRawTransaction;
|
|
62
94
|
function reverseBytes(hexInput) {
|
|
63
95
|
return Buffer.from(hexInput, "hex").reverse().toString("hex");
|
|
64
96
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return "p2tr";
|
|
68
|
-
}
|
|
69
|
-
if (address.startsWith(network.bech32)) {
|
|
70
|
-
return "p2wpkh";
|
|
71
|
-
}
|
|
72
|
-
let base58Data = bitcoin.address.fromBase58Check(address);
|
|
73
|
-
if (base58Data.version === Number(network.scriptHash)) {
|
|
74
|
-
return "p2sh";
|
|
75
|
-
}
|
|
76
|
-
if (base58Data.version === Number(network.pubKeyHash)) {
|
|
77
|
-
return "p2pkh";
|
|
78
|
-
}
|
|
79
|
-
throw new Error("invalid address");
|
|
80
|
-
}
|
|
81
|
-
function createAddressObjectByHash({ addressType, hash }, network = bitcoin.networks.bitcoin) {
|
|
82
|
-
let addressObject;
|
|
83
|
-
switch (addressType) {
|
|
84
|
-
case "p2pkh":
|
|
85
|
-
addressObject = bitcoin.payments.p2pkh({
|
|
86
|
-
hash,
|
|
87
|
-
network,
|
|
88
|
-
});
|
|
89
|
-
break;
|
|
90
|
-
case "p2wpkh":
|
|
91
|
-
addressObject = bitcoin.payments.p2wpkh({
|
|
92
|
-
hash,
|
|
93
|
-
network,
|
|
94
|
-
});
|
|
95
|
-
break;
|
|
96
|
-
case "p2sh":
|
|
97
|
-
addressObject = bitcoin.payments.p2sh({
|
|
98
|
-
hash,
|
|
99
|
-
network,
|
|
100
|
-
});
|
|
101
|
-
break;
|
|
102
|
-
default:
|
|
103
|
-
throw new Error("address type is incorrect");
|
|
104
|
-
}
|
|
105
|
-
return addressObject;
|
|
106
|
-
}
|
|
107
|
-
function createAddressObjectByScript({ addressType, script }, network = bitcoin.networks.bitcoin) {
|
|
108
|
-
let addressObject;
|
|
109
|
-
switch (addressType) {
|
|
110
|
-
case "p2pkh":
|
|
111
|
-
addressObject = bitcoin.payments.p2pkh({
|
|
112
|
-
output: script,
|
|
113
|
-
network,
|
|
114
|
-
});
|
|
115
|
-
break;
|
|
116
|
-
case "p2wpkh":
|
|
117
|
-
addressObject = bitcoin.payments.p2wpkh({
|
|
118
|
-
output: script,
|
|
119
|
-
network,
|
|
120
|
-
});
|
|
121
|
-
break;
|
|
122
|
-
case "p2sh":
|
|
123
|
-
addressObject = bitcoin.payments.p2sh({
|
|
124
|
-
output: script,
|
|
125
|
-
network,
|
|
126
|
-
});
|
|
127
|
-
break;
|
|
128
|
-
default:
|
|
129
|
-
throw new Error("address type is incorrect");
|
|
130
|
-
}
|
|
131
|
-
return addressObject;
|
|
132
|
-
}
|
|
133
|
-
function createAddressObjectByPublicKey({ addressType, publicKey }, network = bitcoin.networks.bitcoin) {
|
|
134
|
-
let addressObject;
|
|
135
|
-
switch (addressType) {
|
|
136
|
-
case "p2pkh":
|
|
137
|
-
addressObject = bitcoin.payments.p2pkh({
|
|
138
|
-
pubkey: publicKey,
|
|
139
|
-
network,
|
|
140
|
-
});
|
|
141
|
-
break;
|
|
142
|
-
case "p2wpkh":
|
|
143
|
-
addressObject = bitcoin.payments.p2wpkh({
|
|
144
|
-
pubkey: publicKey,
|
|
145
|
-
network,
|
|
146
|
-
});
|
|
147
|
-
break;
|
|
148
|
-
case "p2sh-p2wpkh":
|
|
149
|
-
addressObject = bitcoin.payments.p2sh({
|
|
150
|
-
redeem: bitcoin.payments.p2wpkh({
|
|
151
|
-
pubkey: publicKey,
|
|
152
|
-
network,
|
|
153
|
-
}),
|
|
154
|
-
});
|
|
155
|
-
break;
|
|
156
|
-
default:
|
|
157
|
-
throw new Error("address type is incorrect");
|
|
158
|
-
}
|
|
159
|
-
return addressObject;
|
|
160
|
-
}
|
|
161
|
-
function createAddressObjectByAddress(address, network = bitcoin.networks.bitcoin) {
|
|
162
|
-
let addressType = getAddressType(address, network);
|
|
163
|
-
let addressObject;
|
|
164
|
-
switch (addressType) {
|
|
165
|
-
case "p2pkh":
|
|
166
|
-
addressObject = bitcoin.payments.p2pkh({
|
|
167
|
-
address,
|
|
168
|
-
network,
|
|
169
|
-
});
|
|
170
|
-
break;
|
|
171
|
-
case "p2wpkh":
|
|
172
|
-
addressObject = bitcoin.payments.p2wpkh({
|
|
173
|
-
address,
|
|
174
|
-
network,
|
|
175
|
-
});
|
|
176
|
-
break;
|
|
177
|
-
case "p2sh":
|
|
178
|
-
addressObject = bitcoin.payments.p2sh({
|
|
179
|
-
address,
|
|
180
|
-
network,
|
|
181
|
-
});
|
|
182
|
-
break;
|
|
183
|
-
default:
|
|
184
|
-
throw new Error("address type is incorrect");
|
|
185
|
-
}
|
|
186
|
-
return { addressObject, addressType };
|
|
187
|
-
}
|
|
188
|
-
function getPublicKeyHexByXpubAndIndex(xpub, index = 0, isChange = false, network = networks.bitcoin) {
|
|
97
|
+
exports.reverseBytes = reverseBytes;
|
|
98
|
+
function getPublicKeyHexByXpubAndIndex(xpub, index = 0, isChange = false, network = networks_1.default.bitcoin) {
|
|
189
99
|
const node = bip32.fromBase58(xpub, network);
|
|
190
100
|
return node
|
|
191
101
|
.derive(isChange ? 1 : 0)
|
|
192
102
|
.derive(index)
|
|
193
103
|
.publicKey.toString("hex");
|
|
194
104
|
}
|
|
105
|
+
exports.getPublicKeyHexByXpubAndIndex = getPublicKeyHexByXpubAndIndex;
|
|
195
106
|
function getPubKeyFromPrivateKeyWIF(privateKeyWIF, network = bitcoin.networks.bitcoin) {
|
|
196
107
|
let key = bitcoin.ECPair.fromWIF(privateKeyWIF, network);
|
|
197
108
|
return key.publicKey;
|
|
198
109
|
}
|
|
110
|
+
exports.getPubKeyFromPrivateKeyWIF = getPubKeyFromPrivateKeyWIF;
|
|
199
111
|
function getPubKeyFromPrivateKeyHex(privateKeyHex, network = bitcoin.networks.bitcoin) {
|
|
200
|
-
let key = bitcoin.ECPair.fromPrivateKey(Buffer.from(privateKeyHex, "hex"), network);
|
|
112
|
+
let key = bitcoin.ECPair.fromPrivateKey(Buffer.from(privateKeyHex, "hex"), { network });
|
|
201
113
|
return key.publicKey;
|
|
202
114
|
}
|
|
115
|
+
exports.getPubKeyFromPrivateKeyHex = getPubKeyFromPrivateKeyHex;
|
|
203
116
|
function getPrivateKeyHexFromWIF(privateKeyWIF, network = bitcoin.networks.bitcoin) {
|
|
204
117
|
let key = bitcoin.ECPair.fromWIF(privateKeyWIF, network);
|
|
205
118
|
return key.privateKey.toString("hex");
|
|
206
119
|
}
|
|
207
|
-
|
|
120
|
+
exports.getPrivateKeyHexFromWIF = getPrivateKeyHexFromWIF;
|
|
121
|
+
function calculateMerkleProof(blockTransactions, txId, blockMerkleRoot) {
|
|
208
122
|
let transactionIndex = blockTransactions.findIndex((tx) => tx === txId);
|
|
209
123
|
if (transactionIndex < 0)
|
|
210
124
|
throw new Error("txId is not in this tree");
|
|
211
125
|
let data = blockTransactions.map((a) => Buffer.from(a, "hex").reverse());
|
|
212
126
|
if (blockMerkleRoot &&
|
|
213
127
|
blockMerkleRoot !== fastRoot(data, bitcoin.crypto.hash256).toString("hex")) {
|
|
214
|
-
throw new Error("calculated
|
|
128
|
+
throw new Error("calculated merkleRoot and block merkleRoot not matched");
|
|
215
129
|
}
|
|
216
130
|
let tree = merkle(data, bitcoin.crypto.hash256);
|
|
217
131
|
let proof = merkleProof(tree, data[transactionIndex]);
|
|
@@ -224,6 +138,7 @@ function calculateMerkleProof(blockTransactions, txId, blockMerkleRoot = undefin
|
|
|
224
138
|
transactionIndex,
|
|
225
139
|
};
|
|
226
140
|
}
|
|
141
|
+
exports.calculateMerkleProof = calculateMerkleProof;
|
|
227
142
|
function parseBlockHeader(headerHex) {
|
|
228
143
|
const size = {
|
|
229
144
|
version: 4,
|
|
@@ -241,16 +156,18 @@ function parseBlockHeader(headerHex) {
|
|
|
241
156
|
}
|
|
242
157
|
return result;
|
|
243
158
|
}
|
|
159
|
+
exports.parseBlockHeader = parseBlockHeader;
|
|
244
160
|
function convertBitcoinScriptToAddress(script, network = bitcoin.networks.bitcoin) {
|
|
245
|
-
var _a;
|
|
246
161
|
try {
|
|
247
|
-
return
|
|
162
|
+
return bitcoin.address.fromOutputScript(script, network);
|
|
248
163
|
}
|
|
249
164
|
catch (error) {
|
|
250
165
|
return null;
|
|
251
166
|
}
|
|
252
167
|
}
|
|
253
|
-
|
|
168
|
+
exports.convertBitcoinScriptToAddress = convertBitcoinScriptToAddress;
|
|
169
|
+
function parseRawBlock(rawBlockHex, blockNumber, network = bitcoin.networks.bitcoin) {
|
|
170
|
+
var _a;
|
|
254
171
|
let block = bitcoin.Block.fromBuffer(Buffer.from(rawBlockHex, "hex"));
|
|
255
172
|
let blockHash = block.getHash().toString("hex");
|
|
256
173
|
let merkleRoot = block.merkleRoot.toString("hex");
|
|
@@ -259,7 +176,7 @@ function parseRawBlock(rawBlockHex, blockNumber = undefined, network = bitcoin.n
|
|
|
259
176
|
blockNumber,
|
|
260
177
|
merkleRoot,
|
|
261
178
|
prvBlockHash,
|
|
262
|
-
transactions: block.transactions.map((tx) => ({
|
|
179
|
+
transactions: (_a = block.transactions) === null || _a === void 0 ? void 0 : _a.map((tx) => ({
|
|
263
180
|
txId: tx.getId(),
|
|
264
181
|
version: tx.version,
|
|
265
182
|
locktime: tx.locktime,
|
|
@@ -278,7 +195,9 @@ function parseRawBlock(rawBlockHex, blockNumber = undefined, network = bitcoin.n
|
|
|
278
195
|
})),
|
|
279
196
|
};
|
|
280
197
|
}
|
|
198
|
+
exports.parseRawBlock = parseRawBlock;
|
|
281
199
|
function extractTransactionsAndBlockInfoFromRawBlock(rawBlockHex, blockNumber, addresses = [], inputTxIds = [], network = bitcoin.networks.bitcoin) {
|
|
200
|
+
var _a;
|
|
282
201
|
let block = bitcoin.Block.fromBuffer(Buffer.from(rawBlockHex, "hex"));
|
|
283
202
|
let blockHash = block.getHash().reverse().toString("hex");
|
|
284
203
|
let merkleRoot = block.merkleRoot.toString("hex");
|
|
@@ -293,7 +212,7 @@ function extractTransactionsAndBlockInfoFromRawBlock(rawBlockHex, blockNumber, a
|
|
|
293
212
|
let blockTxIds = block.transactions.map((tx) => tx.getId());
|
|
294
213
|
let withdrawTxs = [];
|
|
295
214
|
let depositTxs = [];
|
|
296
|
-
block.transactions.forEach((tx) => {
|
|
215
|
+
(_a = block.transactions) === null || _a === void 0 ? void 0 : _a.forEach((tx) => {
|
|
297
216
|
let txId = tx.getId();
|
|
298
217
|
let inputTxAddress;
|
|
299
218
|
let isWithdraw = tx.ins.find((vi) => {
|
|
@@ -322,16 +241,16 @@ function extractTransactionsAndBlockInfoFromRawBlock(rawBlockHex, blockNumber, a
|
|
|
322
241
|
return {
|
|
323
242
|
txId: Buffer.from(vi.hash).reverse().toString("hex"),
|
|
324
243
|
index: vi.index,
|
|
325
|
-
address: viInput.address || null,
|
|
326
|
-
script: viInput.script || null,
|
|
327
|
-
value: viInput.value || null,
|
|
244
|
+
address: (viInput === null || viInput === void 0 ? void 0 : viInput.address) || null,
|
|
245
|
+
script: (viInput === null || viInput === void 0 ? void 0 : viInput.script) || null,
|
|
246
|
+
value: (viInput === null || viInput === void 0 ? void 0 : viInput.value) || null,
|
|
328
247
|
};
|
|
329
248
|
}),
|
|
330
249
|
address: inputTxAddress,
|
|
331
250
|
addressScript: createAddressObjectByAddress(inputTxAddress, network).addressObject.output.toString("hex"),
|
|
332
251
|
});
|
|
333
252
|
}
|
|
334
|
-
let addressIndex;
|
|
253
|
+
let addressIndex = -1;
|
|
335
254
|
let isDeposit = tx.outs.find((blockTxVo) => {
|
|
336
255
|
let sIndex = addressScript.findIndex((addScript) => addScript === blockTxVo.script.toString("hex"));
|
|
337
256
|
if (sIndex >= 0) {
|
|
@@ -369,6 +288,7 @@ function extractTransactionsAndBlockInfoFromRawBlock(rawBlockHex, blockNumber, a
|
|
|
369
288
|
depositTxs,
|
|
370
289
|
};
|
|
371
290
|
}
|
|
291
|
+
exports.extractTransactionsAndBlockInfoFromRawBlock = extractTransactionsAndBlockInfoFromRawBlock;
|
|
372
292
|
function validateAddress(address, network = bitcoin.networks.bitcoin) {
|
|
373
293
|
try {
|
|
374
294
|
let isValid = false;
|
|
@@ -389,24 +309,160 @@ function validateAddress(address, network = bitcoin.networks.bitcoin) {
|
|
|
389
309
|
return false;
|
|
390
310
|
}
|
|
391
311
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
312
|
+
exports.validateAddress = validateAddress;
|
|
313
|
+
function toXOnlyPublicKey(pubKey) {
|
|
314
|
+
return pubKey.length === 32 ? pubKey : pubKey.slice(1, 33);
|
|
315
|
+
}
|
|
316
|
+
function getAddressType(address, network = bitcoin.networks.bitcoin) {
|
|
317
|
+
if (address.startsWith(`${network.bech32}1p`)) {
|
|
318
|
+
return "p2tr";
|
|
319
|
+
}
|
|
320
|
+
if (address.startsWith(network.bech32)) {
|
|
321
|
+
return "p2wpkh";
|
|
322
|
+
}
|
|
323
|
+
let base58Data = bitcoin.address.fromBase58Check(address);
|
|
324
|
+
if (base58Data.version === Number(network.scriptHash)) {
|
|
325
|
+
return "p2sh";
|
|
326
|
+
}
|
|
327
|
+
if (base58Data.version === Number(network.pubKeyHash)) {
|
|
328
|
+
return "p2pkh";
|
|
329
|
+
}
|
|
330
|
+
throw new Error("invalid address");
|
|
331
|
+
}
|
|
332
|
+
exports.getAddressType = getAddressType;
|
|
333
|
+
function createAddressObjectByScript({ addressType, script }, network = bitcoin.networks.bitcoin) {
|
|
334
|
+
let addressObject;
|
|
335
|
+
switch (addressType) {
|
|
336
|
+
case "p2pkh":
|
|
337
|
+
addressObject = bitcoin.payments.p2pkh({
|
|
338
|
+
output: script,
|
|
339
|
+
network,
|
|
340
|
+
});
|
|
341
|
+
break;
|
|
342
|
+
case "p2wpkh":
|
|
343
|
+
addressObject = bitcoin.payments.p2wpkh({
|
|
344
|
+
output: script,
|
|
345
|
+
network,
|
|
346
|
+
});
|
|
347
|
+
break;
|
|
348
|
+
case "p2sh":
|
|
349
|
+
addressObject = bitcoin.payments.p2sh({
|
|
350
|
+
output: script,
|
|
351
|
+
network,
|
|
352
|
+
});
|
|
353
|
+
break;
|
|
354
|
+
case "p2wsh":
|
|
355
|
+
addressObject = bitcoin.payments.p2wsh({
|
|
356
|
+
output: script,
|
|
357
|
+
network,
|
|
358
|
+
});
|
|
359
|
+
break;
|
|
360
|
+
default:
|
|
361
|
+
throw new Error("address type is incorrect");
|
|
362
|
+
}
|
|
363
|
+
return addressObject;
|
|
364
|
+
}
|
|
365
|
+
exports.createAddressObjectByScript = createAddressObjectByScript;
|
|
366
|
+
function createAddressObjectByHash({ addressType, hash }, network = bitcoin.networks.bitcoin) {
|
|
367
|
+
let addressObject;
|
|
368
|
+
switch (addressType) {
|
|
369
|
+
case "p2pkh":
|
|
370
|
+
addressObject = bitcoin.payments.p2pkh({
|
|
371
|
+
hash,
|
|
372
|
+
network,
|
|
373
|
+
});
|
|
374
|
+
break;
|
|
375
|
+
case "p2wpkh":
|
|
376
|
+
addressObject = bitcoin.payments.p2wpkh({
|
|
377
|
+
hash,
|
|
378
|
+
network,
|
|
379
|
+
});
|
|
380
|
+
break;
|
|
381
|
+
case "p2sh":
|
|
382
|
+
addressObject = bitcoin.payments.p2sh({
|
|
383
|
+
hash,
|
|
384
|
+
network,
|
|
385
|
+
});
|
|
386
|
+
break;
|
|
387
|
+
case "p2wsh":
|
|
388
|
+
addressObject = bitcoin.payments.p2wsh({
|
|
389
|
+
hash,
|
|
390
|
+
network,
|
|
391
|
+
});
|
|
392
|
+
break;
|
|
393
|
+
default:
|
|
394
|
+
throw new Error("address type is incorrect");
|
|
395
|
+
}
|
|
396
|
+
return addressObject;
|
|
397
|
+
}
|
|
398
|
+
exports.createAddressObjectByHash = createAddressObjectByHash;
|
|
399
|
+
function createAddressObjectByPublicKey({ addressType, publicKey }, network = bitcoin.networks.bitcoin) {
|
|
400
|
+
let addressObject;
|
|
401
|
+
switch (addressType) {
|
|
402
|
+
case "p2pkh":
|
|
403
|
+
addressObject = bitcoin.payments.p2pkh({
|
|
404
|
+
pubkey: publicKey,
|
|
405
|
+
network,
|
|
406
|
+
});
|
|
407
|
+
break;
|
|
408
|
+
case "p2wpkh":
|
|
409
|
+
addressObject = bitcoin.payments.p2wpkh({
|
|
410
|
+
pubkey: publicKey,
|
|
411
|
+
network,
|
|
412
|
+
});
|
|
413
|
+
break;
|
|
414
|
+
case "p2sh-p2wpkh":
|
|
415
|
+
addressObject = bitcoin.payments.p2sh({
|
|
416
|
+
redeem: bitcoin.payments.p2wpkh({
|
|
417
|
+
pubkey: publicKey,
|
|
418
|
+
network,
|
|
419
|
+
}),
|
|
420
|
+
});
|
|
421
|
+
break;
|
|
422
|
+
case "p2tr":
|
|
423
|
+
default:
|
|
424
|
+
throw new Error("address type is incorrect");
|
|
425
|
+
}
|
|
426
|
+
return addressObject;
|
|
427
|
+
}
|
|
428
|
+
exports.createAddressObjectByPublicKey = createAddressObjectByPublicKey;
|
|
429
|
+
function createAddressObjectByAddress(address, network = bitcoin.networks.bitcoin) {
|
|
430
|
+
let addressType = getAddressType(address, network);
|
|
431
|
+
let addressObject;
|
|
432
|
+
switch (addressType) {
|
|
433
|
+
case "p2pkh":
|
|
434
|
+
addressObject = bitcoin.payments.p2pkh({
|
|
435
|
+
address,
|
|
436
|
+
network,
|
|
437
|
+
});
|
|
438
|
+
break;
|
|
439
|
+
case "p2wpkh":
|
|
440
|
+
addressObject = bitcoin.payments.p2wpkh({
|
|
441
|
+
address,
|
|
442
|
+
network,
|
|
443
|
+
});
|
|
444
|
+
break;
|
|
445
|
+
case "p2sh":
|
|
446
|
+
addressObject = bitcoin.payments.p2sh({
|
|
447
|
+
address,
|
|
448
|
+
network,
|
|
449
|
+
});
|
|
450
|
+
break;
|
|
451
|
+
default:
|
|
452
|
+
throw new Error("address type is incorrect");
|
|
453
|
+
}
|
|
454
|
+
return { addressObject, addressType };
|
|
455
|
+
}
|
|
456
|
+
exports.createAddressObjectByAddress = createAddressObjectByAddress;
|
|
457
|
+
function publicKeyConvertor(publicKeyHex, compressed = true) {
|
|
458
|
+
let pubkey = ECPair.fromPublicKey(Buffer.from(publicKeyHex, "hex"), {
|
|
459
|
+
compressed,
|
|
460
|
+
});
|
|
461
|
+
return pubkey.publicKey.toString("hex");
|
|
462
|
+
}
|
|
463
|
+
exports.publicKeyConvertor = publicKeyConvertor;
|
|
464
|
+
exports.addressTypeHelper = {
|
|
465
|
+
addressTypesNumber: { p2pk: 0, p2pkh: 1, p2sh: 2, p2wpkh: 3, p2wsh: 4, p2tr: 5 },
|
|
466
|
+
addressTypes: ["p2pk", "p2pkh", "p2sh", "p2wpkh", "p2wsh", "p2tr"],
|
|
411
467
|
};
|
|
412
468
|
//# sourceMappingURL=bitcoin-utils.js.map
|