@teleportdao/bitcoin 1.9.0 → 2.0.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/.tmp/block-parser.ts +58 -0
- package/.tmp/ordinal-helper.ts +133 -0
- package/.tmp/ordinal.ts +25 -0
- package/.tmp/rbf.ts +27 -24
- package/dist/bitcoin-interface-ordinal.d.ts +2 -2
- package/dist/bitcoin-interface-ordinal.d.ts.map +1 -1
- package/dist/bitcoin-interface-ordinal.js +1 -1
- package/dist/bitcoin-interface-ordinal.js.map +1 -1
- package/dist/bitcoin-interface-teleswap.d.ts +2 -53
- package/dist/bitcoin-interface-teleswap.d.ts.map +1 -1
- package/dist/bitcoin-interface-teleswap.js +6 -17
- package/dist/bitcoin-interface-teleswap.js.map +1 -1
- package/dist/bitcoin-interface-wallet.d.ts +29 -0
- package/dist/bitcoin-interface-wallet.d.ts.map +1 -0
- package/dist/bitcoin-interface-wallet.js +126 -0
- package/dist/bitcoin-interface-wallet.js.map +1 -0
- package/dist/bitcoin-interface.d.ts +5 -23
- package/dist/bitcoin-interface.d.ts.map +1 -1
- package/dist/bitcoin-interface.js +13 -92
- package/dist/bitcoin-interface.js.map +1 -1
- package/dist/bitcoin-wallet-base.d.ts +55 -31
- package/dist/bitcoin-wallet-base.d.ts.map +1 -1
- package/dist/bitcoin-wallet-base.js +105 -84
- package/dist/bitcoin-wallet-base.js.map +1 -1
- package/dist/ordinal-wallet.d.ts +29 -71
- package/dist/ordinal-wallet.d.ts.map +1 -1
- package/dist/ordinal-wallet.js +48 -108
- package/dist/ordinal-wallet.js.map +1 -1
- package/dist/teleswap-wallet.d.ts +10 -16
- package/dist/teleswap-wallet.d.ts.map +1 -1
- package/dist/teleswap-wallet.js +10 -30
- package/dist/teleswap-wallet.js.map +1 -1
- package/dist/transaction-builder/bitcoin-transaction-builder.d.ts +4 -11
- package/dist/transaction-builder/bitcoin-transaction-builder.d.ts.map +1 -1
- package/dist/transaction-builder/bitcoin-transaction-builder.js +2 -23
- package/dist/transaction-builder/bitcoin-transaction-builder.js.map +1 -1
- package/dist/transaction-builder/ordinal-transaction-builder.d.ts +3 -2
- package/dist/transaction-builder/ordinal-transaction-builder.d.ts.map +1 -1
- package/dist/transaction-builder/ordinal-transaction-builder.js +1 -6
- package/dist/transaction-builder/ordinal-transaction-builder.js.map +1 -1
- package/dist/transaction-builder/transaction-builder.d.ts +3 -7
- package/dist/transaction-builder/transaction-builder.d.ts.map +1 -1
- package/dist/transaction-builder/transaction-builder.js +22 -49
- package/dist/transaction-builder/transaction-builder.js.map +1 -1
- package/dist/type.d.ts +33 -18
- package/dist/type.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/bitcoin-interface-ordinal.ts +185 -181
- package/src/bitcoin-interface-teleswap.ts +237 -252
- package/src/bitcoin-interface-utils.ts +60 -60
- package/src/bitcoin-interface-wallet.ts +114 -0
- package/src/bitcoin-interface.ts +156 -239
- package/src/bitcoin-utils.ts +591 -591
- package/src/bitcoin-wallet-base.ts +344 -310
- package/src/helper/brc20-helper.ts +179 -179
- package/src/helper/ordinal-helper.ts +118 -118
- package/src/index.ts +15 -15
- package/src/ordinal-wallet.ts +659 -748
- package/src/sign/index.ts +1 -1
- package/src/sign/sign-transaction.ts +108 -108
- package/src/teleswap-wallet.ts +133 -155
- package/src/transaction-builder/bitcoin-transaction-builder.ts +26 -44
- package/src/transaction-builder/index.ts +3 -3
- package/src/transaction-builder/ordinal-transaction-builder.ts +139 -147
- package/src/transaction-builder/transaction-builder.ts +690 -706
- package/src/type.ts +74 -48
- package/src/utils/networks.ts +33 -33
- package/src/utils/tools.ts +92 -92
- package/tsconfig.json +9 -9
- package/webpack.config.js +16 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitcoin-interface-wallet.js","sourceRoot":"","sources":["../src/bitcoin-interface-wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { bitcoin as bitcoinProvider } from "@teleportdao/providers";
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
export declare class BitcoinInterface extends BitcoinInterfaceUtils {
|
|
2
|
+
import BitcoinInterfaceWallet from "./bitcoin-interface-wallet";
|
|
3
|
+
import type { BitcoinInterfaceConnectionInfo } from "./type";
|
|
4
|
+
export declare class BitcoinInterface extends BitcoinInterfaceWallet {
|
|
6
5
|
rpcProvider?: bitcoinProvider.BitcoinRPC;
|
|
7
|
-
|
|
8
|
-
apiProvider: bitcoinProvider.MempoolSpace;
|
|
9
|
-
constructor(connectionInfo: BitcoinConnectionInfo, networkName: string);
|
|
10
|
-
getFeeRate(speed?: "normal" | "slow" | "fast"): Promise<number>;
|
|
6
|
+
constructor(networkName: string, connectionInfo?: BitcoinInterfaceConnectionInfo);
|
|
11
7
|
getLatestBlockNumber(): Promise<number>;
|
|
12
8
|
getBlockHash(blockNumber: number): Promise<string>;
|
|
13
9
|
getBlockHeaderHex(blockNumber: number): Promise<string>;
|
|
14
10
|
getTransaction(txId: string): Promise<bitcoinProvider.Types.ConfirmedTransaction>;
|
|
15
11
|
getRawTransaction(txId: string): Promise<string>;
|
|
12
|
+
sendRawTransaction(txId: string): Promise<any>;
|
|
16
13
|
getMerkleProof(txId: string, blockHash: string): Promise<{
|
|
17
14
|
intermediateNodes: string;
|
|
18
15
|
transactionIndex: number;
|
|
@@ -42,21 +39,6 @@ export declare class BitcoinInterface extends BitcoinInterfaceUtils {
|
|
|
42
39
|
blockNumber: number;
|
|
43
40
|
blockHash: string;
|
|
44
41
|
}>;
|
|
45
|
-
getUtxo(address: string): Promise<bitcoinProvider.Types.Utxo[]>;
|
|
46
|
-
getExtendedUtxo(signerInfo: SignerInfo): Promise<{
|
|
47
|
-
hash: string;
|
|
48
|
-
value: number;
|
|
49
|
-
index: number;
|
|
50
|
-
signerInfo: SignerInfo;
|
|
51
|
-
}[]>;
|
|
52
|
-
getAddressesUtxo(allAddresses: string[]): Promise<bitcoinProvider.Types.Utxo[]>;
|
|
53
|
-
getAddressesExtendedUtxo(signerInfos: SignerInfo[]): Promise<{
|
|
54
|
-
hash: string;
|
|
55
|
-
value: number;
|
|
56
|
-
index: number;
|
|
57
|
-
signerInfo: SignerInfo;
|
|
58
|
-
}[]>;
|
|
59
|
-
getBalance(address: string): Promise<number>;
|
|
60
42
|
getBlockTransactions(addresses: string[], blockNumber: number, inputTxIds?: {
|
|
61
43
|
txId: string;
|
|
62
44
|
index: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-interface.d.ts","sourceRoot":"","sources":["../src/bitcoin-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAOnE,OAAO,
|
|
1
|
+
{"version":3,"file":"bitcoin-interface.d.ts","sourceRoot":"","sources":["../src/bitcoin-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAOnE,OAAO,sBAAsB,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,QAAQ,CAAA;AAE5D,qBAAa,gBAAiB,SAAQ,sBAAsB;IAC1D,WAAW,CAAC,EAAE,eAAe,CAAC,UAAU,CAAA;gBAE5B,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,8BAA8B;IAO1E,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvC,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvD,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAI9B,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAI/B,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QACT,iBAAiB,EAAE,MAAM,CAAA;QACzB,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAC;IAYI,eAAe,CAAC,WAAW,EAAE;QACjC,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE;YACZ,iBAAiB,EAAE,MAAM,CAAA;YACzB,gBAAgB,EAAE,MAAM,CAAA;SACzB,CAAA;KACF;;;;;;;;;;;;;;;;IAuBK,oBAAoB,CACxB,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,EAAO;;;;;;;;;;IAsBJ,6BAA6B,CACjC,SAAS,EAAE,MAAM,EAAE,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,UAAU,GAAE;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,EAAO;CAWX;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -8,32 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.BitcoinInterface = void 0;
|
|
13
16
|
const providers_1 = require("@teleportdao/providers");
|
|
14
17
|
const tools_1 = require("./utils/tools");
|
|
15
18
|
const bitcoin_utils_1 = require("./bitcoin-utils");
|
|
16
|
-
const
|
|
17
|
-
class BitcoinInterface extends
|
|
18
|
-
constructor(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (connectionInfo.api.provider === "BlockStream") {
|
|
22
|
-
this.apiProvider = new providers_1.bitcoin.BlockStream(this.testnet);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
this.apiProvider = new providers_1.bitcoin.MempoolSpace(this.testnet);
|
|
26
|
-
}
|
|
27
|
-
if ((_a = connectionInfo.rpc) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
19
|
+
const bitcoin_interface_wallet_1 = __importDefault(require("./bitcoin-interface-wallet"));
|
|
20
|
+
class BitcoinInterface extends bitcoin_interface_wallet_1.default {
|
|
21
|
+
constructor(networkName, connectionInfo) {
|
|
22
|
+
super(networkName, connectionInfo);
|
|
23
|
+
if (connectionInfo === null || connectionInfo === void 0 ? void 0 : connectionInfo.rpc) {
|
|
28
24
|
this.rpcProvider = providers_1.bitcoin.getRpcProvider(connectionInfo.rpc);
|
|
29
25
|
}
|
|
30
|
-
const utxoProvider = connectionInfo.utxo || connectionInfo.api;
|
|
31
|
-
this.utxoProvider = providers_1.bitcoin.getUtxoProvider(utxoProvider, networkName);
|
|
32
|
-
}
|
|
33
|
-
getFeeRate(speed) {
|
|
34
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
return new providers_1.bitcoin.MempoolSpace(this.testnet).getRecommendedFeeRate(speed);
|
|
36
|
-
});
|
|
37
26
|
}
|
|
38
27
|
getLatestBlockNumber() {
|
|
39
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -63,6 +52,11 @@ class BitcoinInterface extends bitcoin_interface_utils_1.BitcoinInterfaceUtils {
|
|
|
63
52
|
return (this.rpcProvider || this.apiProvider).getRawTransaction(txId);
|
|
64
53
|
});
|
|
65
54
|
}
|
|
55
|
+
sendRawTransaction(txId) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
return (this.rpcProvider || this.apiProvider).sendRawTransaction(txId);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
66
60
|
getMerkleProof(txId, blockHash) {
|
|
67
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
68
62
|
if (!this.rpcProvider) {
|
|
@@ -96,79 +90,6 @@ class BitcoinInterface extends bitcoin_interface_utils_1.BitcoinInterfaceUtils {
|
|
|
96
90
|
};
|
|
97
91
|
});
|
|
98
92
|
}
|
|
99
|
-
getUtxo(address) {
|
|
100
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
-
if (!this.utxoProvider) {
|
|
102
|
-
throw new Error("utxo provider not set");
|
|
103
|
-
}
|
|
104
|
-
return this.utxoProvider.getUtxos(address);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
getExtendedUtxo(signerInfo) {
|
|
108
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
let utxos = yield this.getUtxo(signerInfo.address);
|
|
110
|
-
return utxos.map((tx) => ({
|
|
111
|
-
hash: tx.txId,
|
|
112
|
-
value: tx.value,
|
|
113
|
-
index: tx.index,
|
|
114
|
-
signerInfo,
|
|
115
|
-
}));
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
getAddressesUtxo(allAddresses) {
|
|
119
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
-
const chunkOfAddresses = [];
|
|
121
|
-
const chunkLength = 20;
|
|
122
|
-
for (let i = 0; i < allAddresses.length; i += chunkLength) {
|
|
123
|
-
const tmp = allAddresses.slice(i, i + chunkLength);
|
|
124
|
-
chunkOfAddresses.push(tmp);
|
|
125
|
-
}
|
|
126
|
-
let results = [];
|
|
127
|
-
for (let addresses of chunkOfAddresses) {
|
|
128
|
-
const allPromises = [];
|
|
129
|
-
for (let address of addresses) {
|
|
130
|
-
let promise = yield this.getUtxo(address);
|
|
131
|
-
allPromises.push(promise);
|
|
132
|
-
}
|
|
133
|
-
let result = yield Promise.all(allPromises);
|
|
134
|
-
if (result.flat(1).length === 0) {
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
results.push(result.flat(1));
|
|
138
|
-
}
|
|
139
|
-
return results.flat(1);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
getAddressesExtendedUtxo(signerInfos) {
|
|
143
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
-
const chunkOfAddresses = [];
|
|
145
|
-
const chunkLength = 20;
|
|
146
|
-
for (let i = 0; i < signerInfos.length; i += chunkLength) {
|
|
147
|
-
const tmp = signerInfos.slice(i, i + chunkLength);
|
|
148
|
-
chunkOfAddresses.push(tmp);
|
|
149
|
-
}
|
|
150
|
-
let results = [];
|
|
151
|
-
for (let addresses of chunkOfAddresses) {
|
|
152
|
-
const allPromises = [];
|
|
153
|
-
for (let signerInfo of addresses) {
|
|
154
|
-
let promise = yield this.getExtendedUtxo(signerInfo);
|
|
155
|
-
allPromises.push(promise);
|
|
156
|
-
}
|
|
157
|
-
let result = yield Promise.all(allPromises);
|
|
158
|
-
if (result.flat(1).length === 0) {
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
results.push(result.flat(1));
|
|
162
|
-
}
|
|
163
|
-
return results.flat(1);
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
getBalance(address) {
|
|
167
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
168
|
-
let utxos = yield this.utxoProvider.getUtxos(address);
|
|
169
|
-
return utxos.reduce((a, tx) => a + Number(tx.value), 0);
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
93
|
getBlockTransactions(addresses, blockNumber, inputTxIds = []) {
|
|
173
94
|
return __awaiter(this, void 0, void 0, function* () {
|
|
174
95
|
if (!this.rpcProvider) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-interface.js","sourceRoot":"","sources":["../src/bitcoin-interface.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bitcoin-interface.js","sourceRoot":"","sources":["../src/bitcoin-interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Network, Payment } from "bitcoinjs-lib";
|
|
3
3
|
import { BitcoinTransactionBuilder } from "./transaction-builder";
|
|
4
|
-
import type {
|
|
5
|
-
import type { ExtendedUtxo, SignerInfo, Target } from "./transaction-builder/transaction-builder";
|
|
4
|
+
import type { RPCConnectionInfo, UtxoConnectionInfo } from "./type";
|
|
5
|
+
import type { ExtendedUtxo, SignerInfo, Target, TargetAddress } from "./transaction-builder/transaction-builder";
|
|
6
6
|
import BitcoinSign from "./sign/sign-transaction";
|
|
7
|
-
import {
|
|
7
|
+
import { BitcoinInterfaceWallet } from "./bitcoin-interface-wallet";
|
|
8
|
+
export type FeeRateType = "normal" | "slow" | "fast" | number;
|
|
8
9
|
export declare class BitcoinBaseWallet {
|
|
9
10
|
network: Network;
|
|
10
11
|
hdWalletPath: {
|
|
@@ -17,7 +18,7 @@ export declare class BitcoinBaseWallet {
|
|
|
17
18
|
p2tr: string;
|
|
18
19
|
};
|
|
19
20
|
transactionBuilder: BitcoinTransactionBuilder;
|
|
20
|
-
btcInterface:
|
|
21
|
+
btcInterface: BitcoinInterfaceWallet;
|
|
21
22
|
signer: BitcoinSign;
|
|
22
23
|
currentAccount?: string;
|
|
23
24
|
currentAccountType?: string;
|
|
@@ -26,51 +27,73 @@ export declare class BitcoinBaseWallet {
|
|
|
26
27
|
publicKeys?: Buffer[];
|
|
27
28
|
addressObj?: Payment;
|
|
28
29
|
bitcoinAddress: string | undefined;
|
|
29
|
-
constructor(networkName: string, connectionInfo?:
|
|
30
|
+
constructor(networkName: string, connectionInfo?: {
|
|
31
|
+
utxo?: UtxoConnectionInfo;
|
|
32
|
+
rpc?: RPCConnectionInfo;
|
|
33
|
+
});
|
|
34
|
+
static satoshiToBTC(satoshi: number | string): string;
|
|
35
|
+
static btcToSatoshi(btc: number | string): string;
|
|
30
36
|
get signerInfo(): {
|
|
31
37
|
address: string;
|
|
32
38
|
publicKey: string;
|
|
33
39
|
addressType: string;
|
|
34
40
|
} | undefined;
|
|
35
|
-
createTransactionInputsAndOutputs({ targets, extendedUtxo, changeAddress, feeRate, }: {
|
|
36
|
-
targets: Target[];
|
|
37
|
-
extendedUtxo: ExtendedUtxo[];
|
|
38
|
-
changeAddress: string;
|
|
39
|
-
feeRate: number;
|
|
40
|
-
fullAmount?: boolean;
|
|
41
|
-
}): {
|
|
42
|
-
inputs: ExtendedUtxo[];
|
|
43
|
-
fee: number;
|
|
44
|
-
outputs: Target[];
|
|
45
|
-
change: import("./transaction-builder").ChangeTarget | undefined;
|
|
46
|
-
};
|
|
47
|
-
checkBalanceIsSufficient({ targets, extendedUtxo, changeAddress, feeRate, fullAmount, }: {
|
|
48
|
-
targets: Target[];
|
|
49
|
-
extendedUtxo: ExtendedUtxo[];
|
|
50
|
-
changeAddress: string;
|
|
51
|
-
feeRate: number;
|
|
52
|
-
fullAmount?: boolean;
|
|
53
|
-
}): boolean;
|
|
54
|
-
setMultiSigAccount(accountType?: string): void;
|
|
55
41
|
setAccountPrivateKey(privateKeyHex: string): void;
|
|
42
|
+
setAccountType(accountType?: string): string;
|
|
56
43
|
setAccountPrivateKeyByMnemonic({ mnemonic, mnemonicPassword, index, walletNumber, addressType, }: {
|
|
57
44
|
mnemonic: string;
|
|
58
45
|
mnemonicPassword?: string;
|
|
59
46
|
index?: number;
|
|
60
47
|
walletNumber?: number;
|
|
61
48
|
addressType?: string;
|
|
62
|
-
}): string
|
|
63
|
-
|
|
64
|
-
|
|
49
|
+
}): string;
|
|
50
|
+
checkBalanceIsSufficient({ targets, extendedUtxo, changeAddress, feeRate, }: {
|
|
51
|
+
targets: Target[];
|
|
52
|
+
extendedUtxo: ExtendedUtxo[];
|
|
53
|
+
changeAddress: string;
|
|
54
|
+
feeRate: number;
|
|
55
|
+
}): boolean;
|
|
65
56
|
getExtendedUtxo(input: SignerInfo): Promise<{
|
|
66
|
-
signerInfo: SignerInfo;
|
|
67
57
|
hash: string;
|
|
68
58
|
value: number;
|
|
69
59
|
index: number;
|
|
60
|
+
signerInfo: SignerInfo;
|
|
70
61
|
}[]>;
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
getFeeRate(feeRate?: FeeRateType): Promise<number>;
|
|
63
|
+
sendBTC(receiverAddress: string, amountInSatoshi: number | "all", fee?: FeeRateType, staticExtendedUtxo?: ExtendedUtxo[]): Promise<string>;
|
|
64
|
+
sendBTCMultipleAddress(receivers: TargetAddress[], fee?: FeeRateType, staticExtendedUtxo?: ExtendedUtxo[]): Promise<string>;
|
|
65
|
+
sendBTCToMultipleAddressUnsignedTx(receivers: TargetAddress[], signerInfo: SignerInfo, fee?: FeeRateType, staticExtendedUtxo?: ExtendedUtxo[], fullAmount?: boolean): Promise<{
|
|
66
|
+
unsignedTransaction: string;
|
|
67
|
+
outputs: Target[];
|
|
68
|
+
inputs: {
|
|
69
|
+
hash: string;
|
|
70
|
+
value: number;
|
|
71
|
+
index: number;
|
|
72
|
+
signerInfo: SignerInfo;
|
|
73
|
+
}[];
|
|
74
|
+
fee: number;
|
|
75
|
+
change: import("./transaction-builder").ChangeTarget | undefined;
|
|
76
|
+
possibleTxId: string | undefined;
|
|
77
|
+
}>;
|
|
78
|
+
sendBTCUnsignedTx(receiver: string, amountInSatoshi: number | "all", signerInfo: SignerInfo, fee?: FeeRateType, staticExtendedUtxo?: ExtendedUtxo[]): Promise<{
|
|
79
|
+
unsignedTransaction: string;
|
|
80
|
+
outputs: Target[];
|
|
81
|
+
inputs: {
|
|
82
|
+
hash: string;
|
|
83
|
+
value: number;
|
|
84
|
+
index: number;
|
|
85
|
+
signerInfo: SignerInfo;
|
|
86
|
+
}[];
|
|
87
|
+
fee: number;
|
|
88
|
+
change: import("./transaction-builder").ChangeTarget | undefined;
|
|
89
|
+
possibleTxId: string | undefined;
|
|
90
|
+
}>;
|
|
73
91
|
sendSignedTx(signedTx: string): Promise<string>;
|
|
92
|
+
sendSignedPsbt(signedPsbt: string): Promise<string>;
|
|
93
|
+
sendSignedPsbtWithRetry(signedPsbt: string, { maxTries, retrySleep }?: {
|
|
94
|
+
maxTries?: number | undefined;
|
|
95
|
+
retrySleep?: number | undefined;
|
|
96
|
+
}): Promise<string>;
|
|
74
97
|
sendMultiSignedPsbt(signedPsbts?: string[]): Promise<string>;
|
|
75
98
|
increaseTransactionFeeUnsignedPsbt(txId: string, signerInfos: SignerInfo[], extraExtendedUtxo: ExtendedUtxo[], changeAddress: string, staticFeeRate?: number): Promise<{
|
|
76
99
|
unsignedTransaction: string;
|
|
@@ -83,6 +106,7 @@ export declare class BitcoinBaseWallet {
|
|
|
83
106
|
}[];
|
|
84
107
|
fee: number;
|
|
85
108
|
change: import("./transaction-builder").ChangeTarget | undefined;
|
|
109
|
+
possibleTxId: string | undefined;
|
|
86
110
|
}>;
|
|
87
111
|
}
|
|
88
112
|
//# sourceMappingURL=bitcoin-wallet-base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-wallet-base.d.ts","sourceRoot":"","sources":["../src/bitcoin-wallet-base.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAIhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"bitcoin-wallet-base.d.ts","sourceRoot":"","sources":["../src/bitcoin-wallet-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,23 +45,25 @@ const transaction_builder_1 = require("./transaction-builder");
|
|
|
45
45
|
const sign_transaction_1 = __importDefault(require("./sign/sign-transaction"));
|
|
46
46
|
const bitcoin_utils_1 = require("./bitcoin-utils");
|
|
47
47
|
const networks_1 = __importDefault(require("./utils/networks"));
|
|
48
|
+
const tools_1 = require("./utils/tools");
|
|
48
49
|
const bip32 = (0, bip32_1.default)(secp256k1_1.default);
|
|
49
50
|
class BitcoinBaseWallet {
|
|
50
|
-
constructor(networkName, connectionInfo
|
|
51
|
-
api: {
|
|
52
|
-
provider: "BlockStream",
|
|
53
|
-
},
|
|
54
|
-
}) {
|
|
51
|
+
constructor(networkName, connectionInfo) {
|
|
55
52
|
this.network = networks_1.default[networkName];
|
|
56
53
|
this.hdWalletPath = configs_1.hdWalletPath.bitcoin;
|
|
57
|
-
this.transactionBuilder = new transaction_builder_1.BitcoinTransactionBuilder(
|
|
54
|
+
this.transactionBuilder = new transaction_builder_1.BitcoinTransactionBuilder(networkName, this.network, connectionInfo);
|
|
58
55
|
this.btcInterface = this.transactionBuilder.btcInterface;
|
|
59
56
|
this.signer = new sign_transaction_1.default(this.network);
|
|
60
57
|
this.currentAccount = undefined;
|
|
61
58
|
this.currentAccountType = undefined;
|
|
62
59
|
this.privateKey = undefined;
|
|
63
60
|
this.publicKey = undefined;
|
|
64
|
-
|
|
61
|
+
}
|
|
62
|
+
static satoshiToBTC(satoshi) {
|
|
63
|
+
return new bignumber_js_1.default(satoshi).dividedBy(1e8).toString();
|
|
64
|
+
}
|
|
65
|
+
static btcToSatoshi(btc) {
|
|
66
|
+
return new bignumber_js_1.default(btc).multipliedBy(1e8).toFixed(0);
|
|
65
67
|
}
|
|
66
68
|
get signerInfo() {
|
|
67
69
|
return this.privateKey
|
|
@@ -72,44 +74,25 @@ class BitcoinBaseWallet {
|
|
|
72
74
|
}
|
|
73
75
|
: undefined;
|
|
74
76
|
}
|
|
75
|
-
createTransactionInputsAndOutputs({ targets, extendedUtxo, changeAddress, feeRate, }) {
|
|
76
|
-
return this.transactionBuilder.helperHandleInputsAndOutputs({
|
|
77
|
-
targets,
|
|
78
|
-
extendedUtxo,
|
|
79
|
-
changeObject: {
|
|
80
|
-
address: changeAddress,
|
|
81
|
-
},
|
|
82
|
-
feeRate,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
checkBalanceIsSufficient({ targets, extendedUtxo, changeAddress, feeRate, fullAmount = false, }) {
|
|
86
|
-
try {
|
|
87
|
-
this.transactionBuilder.helperHandleInputsAndOutputs({
|
|
88
|
-
targets,
|
|
89
|
-
extendedUtxo,
|
|
90
|
-
changeObject: {
|
|
91
|
-
address: changeAddress,
|
|
92
|
-
},
|
|
93
|
-
feeRate,
|
|
94
|
-
});
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
setMultiSigAccount(accountType = "p2sh") {
|
|
102
|
-
throw new Error("not supported yet");
|
|
103
|
-
switch (accountType) {
|
|
104
|
-
default:
|
|
105
|
-
throw new Error("accountType is incorrect");
|
|
106
|
-
}
|
|
107
|
-
this.currentAccountType = accountType;
|
|
108
|
-
}
|
|
109
77
|
setAccountPrivateKey(privateKeyHex) {
|
|
110
78
|
this.privateKey = Buffer.from(privateKeyHex, "hex");
|
|
111
79
|
let publicKey = (0, bitcoin_utils_1.getPubKeyFromPrivateKeyHex)(privateKeyHex, this.network);
|
|
112
80
|
this.publicKey = publicKey;
|
|
81
|
+
this.setAccountType("p2wpkh");
|
|
82
|
+
}
|
|
83
|
+
setAccountType(accountType = "p2pkh") {
|
|
84
|
+
if (!this.publicKey) {
|
|
85
|
+
throw new Error("account not initialized");
|
|
86
|
+
}
|
|
87
|
+
let addressObj = this.transactionBuilder.createAddressObject({
|
|
88
|
+
addressType: accountType,
|
|
89
|
+
publicKey: this.publicKey,
|
|
90
|
+
});
|
|
91
|
+
this.currentAccount = addressObj.address;
|
|
92
|
+
this.currentAccountType = accountType;
|
|
93
|
+
this.addressObj = addressObj;
|
|
94
|
+
this.bitcoinAddress = addressObj.address;
|
|
95
|
+
return addressObj.address;
|
|
113
96
|
}
|
|
114
97
|
setAccountPrivateKeyByMnemonic({ mnemonic, mnemonicPassword = "", index = 0, walletNumber = 0, addressType = "p2sh-p2wpkh", }) {
|
|
115
98
|
if (!bip39.validateMnemonic(mnemonic))
|
|
@@ -124,78 +107,116 @@ class BitcoinBaseWallet {
|
|
|
124
107
|
const account = node.derivePath(path);
|
|
125
108
|
const userKeyPair = account.derive(index);
|
|
126
109
|
this.setAccountPrivateKey(userKeyPair.privateKey.toString("hex"));
|
|
127
|
-
return this.
|
|
128
|
-
}
|
|
129
|
-
setAccountPublicKey(publicKeyHex) {
|
|
130
|
-
this.publicKey = Buffer.from(publicKeyHex, "hex");
|
|
110
|
+
return this.setAccountType(addressType);
|
|
131
111
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
112
|
+
checkBalanceIsSufficient({ targets, extendedUtxo, changeAddress, feeRate, }) {
|
|
113
|
+
try {
|
|
114
|
+
this.transactionBuilder.helperHandleInputsAndOutputs({
|
|
115
|
+
targets,
|
|
116
|
+
extendedUtxo,
|
|
117
|
+
changeObject: {
|
|
118
|
+
address: changeAddress,
|
|
119
|
+
},
|
|
120
|
+
feeRate,
|
|
121
|
+
});
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
return false;
|
|
135
126
|
}
|
|
136
|
-
let addressObj = this.transactionBuilder.createAddressObject({
|
|
137
|
-
addressType: accountType,
|
|
138
|
-
publicKey: this.publicKey,
|
|
139
|
-
});
|
|
140
|
-
this.currentAccount = addressObj.address;
|
|
141
|
-
this.currentAccountType = accountType;
|
|
142
|
-
this.addressObj = addressObj;
|
|
143
|
-
this.bitcoinAddress = addressObj.address;
|
|
144
|
-
return addressObj.address;
|
|
145
127
|
}
|
|
146
128
|
getExtendedUtxo(input) {
|
|
147
129
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
-
return this.
|
|
130
|
+
return this.btcInterface.getExtendedUtxo(input);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
getFeeRate(feeRate = "normal") {
|
|
134
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
+
if (feeRate === 0)
|
|
136
|
+
throw new Error("feeRate should be greater than 0");
|
|
137
|
+
if (+feeRate > 0)
|
|
138
|
+
return +feeRate;
|
|
139
|
+
if (typeof feeRate === "string")
|
|
140
|
+
return this.btcInterface.getFeeRate(feeRate);
|
|
141
|
+
throw new Error("incorrect feeRate");
|
|
149
142
|
});
|
|
150
143
|
}
|
|
151
|
-
|
|
144
|
+
sendBTC(receiverAddress, amountInSatoshi, fee = "normal", staticExtendedUtxo) {
|
|
152
145
|
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
-
if (!this.
|
|
146
|
+
if (!this.signerInfo || !this.privateKey) {
|
|
154
147
|
throw new Error("account not initialized");
|
|
155
148
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
149
|
+
const unsignedTx = yield this.sendBTCUnsignedTx(receiverAddress, amountInSatoshi, this.signerInfo, fee, staticExtendedUtxo);
|
|
150
|
+
let signedPsbt = yield this.signer.signPsbt(unsignedTx, this.privateKey);
|
|
151
|
+
let signedTx = this.signer.finalizePsbts([signedPsbt]);
|
|
152
|
+
let txId = yield this.sendSignedTx(signedTx);
|
|
153
|
+
return txId;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
sendBTCMultipleAddress(receivers, fee = "normal", staticExtendedUtxo) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
if (!this.signerInfo || !this.privateKey) {
|
|
159
|
+
throw new Error("account not initialized");
|
|
160
|
+
}
|
|
161
|
+
const unsignedTx = yield this.sendBTCToMultipleAddressUnsignedTx(receivers, this.signerInfo, fee, staticExtendedUtxo);
|
|
162
|
+
let signedPsbt = yield this.signer.signPsbt(unsignedTx, this.privateKey);
|
|
163
|
+
let signedTx = this.signer.finalizePsbts([signedPsbt]);
|
|
164
|
+
let txId = yield this.sendSignedTx(signedTx);
|
|
165
|
+
return txId;
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
sendBTCToMultipleAddressUnsignedTx(receivers, signerInfo, fee = "normal", staticExtendedUtxo, fullAmount = false) {
|
|
169
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
170
|
+
if (!fullAmount) {
|
|
171
|
+
receivers.forEach((r) => {
|
|
172
|
+
if ((0, bignumber_js_1.default)(r.value).isEqualTo(0))
|
|
173
|
+
throw new Error("incorrect amount");
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
else if (receivers.length > 1)
|
|
177
|
+
throw new Error("fullAmount only support one receiver");
|
|
178
|
+
let feeRate = yield this.getFeeRate(fee);
|
|
179
|
+
let extendedUtxo = staticExtendedUtxo || (yield this.getExtendedUtxo(signerInfo));
|
|
164
180
|
let unsignedTx = yield this.transactionBuilder.processUnsignedTransaction({
|
|
165
181
|
extendedUtxo,
|
|
166
|
-
targets:
|
|
167
|
-
|
|
168
|
-
address: receiverAddress,
|
|
169
|
-
value: +amount,
|
|
170
|
-
},
|
|
171
|
-
],
|
|
172
|
-
changeAddress: this.currentAccount,
|
|
182
|
+
targets: receivers,
|
|
183
|
+
changeAddress: signerInfo.address,
|
|
173
184
|
feeRate,
|
|
174
185
|
fullAmount,
|
|
175
186
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
187
|
+
return unsignedTx;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
sendBTCUnsignedTx(receiver, amountInSatoshi, signerInfo, fee = "normal", staticExtendedUtxo) {
|
|
191
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
192
|
+
return this.sendBTCToMultipleAddressUnsignedTx([{ address: receiver, value: amountInSatoshi === "all" ? 0 : amountInSatoshi }], signerInfo, fee, staticExtendedUtxo, amountInSatoshi === "all");
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
sendSignedTx(signedTx) {
|
|
196
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
197
|
+
let txId = yield this.btcInterface.sendRawTransaction(signedTx);
|
|
179
198
|
return txId;
|
|
180
199
|
});
|
|
181
200
|
}
|
|
182
201
|
sendSignedPsbt(signedPsbt) {
|
|
183
202
|
return __awaiter(this, void 0, void 0, function* () {
|
|
184
203
|
let signedTx = this.signer.finalizePsbts([signedPsbt]);
|
|
185
|
-
let txId = yield this.
|
|
204
|
+
let txId = yield this.sendSignedTx(signedTx);
|
|
186
205
|
return txId;
|
|
187
206
|
});
|
|
188
207
|
}
|
|
189
|
-
|
|
208
|
+
sendSignedPsbtWithRetry(signedPsbt, { maxTries = 5, retrySleep = 5000 } = {}) {
|
|
190
209
|
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
-
|
|
192
|
-
|
|
210
|
+
return (0, tools_1.runWithRetries)(() => this.sendSignedPsbt(signedPsbt), {
|
|
211
|
+
retrySleep,
|
|
212
|
+
maxTries,
|
|
213
|
+
});
|
|
193
214
|
});
|
|
194
215
|
}
|
|
195
216
|
sendMultiSignedPsbt(signedPsbts = []) {
|
|
196
217
|
return __awaiter(this, void 0, void 0, function* () {
|
|
197
218
|
let signedTx = this.signer.finalizePsbts(signedPsbts);
|
|
198
|
-
let txId = yield this.
|
|
219
|
+
let txId = yield this.btcInterface.sendRawTransaction(signedTx);
|
|
199
220
|
return txId;
|
|
200
221
|
});
|
|
201
222
|
}
|
|
@@ -212,7 +233,7 @@ class BitcoinBaseWallet {
|
|
|
212
233
|
throw new Error("signerInfo not match");
|
|
213
234
|
}
|
|
214
235
|
let changeIndex = transaction.vout.findIndex((vo) => transaction.vin.find((vi) => vo.address === vi.address || vo.address === changeAddress));
|
|
215
|
-
const feeRate = staticFeeRate || (yield this.
|
|
236
|
+
const feeRate = staticFeeRate || (yield this.btcInterface.getFeeRate("fast"));
|
|
216
237
|
let targets = transaction.vout
|
|
217
238
|
.filter((_, index) => index !== changeIndex)
|
|
218
239
|
.map((vo) => vo.address
|