mainnet-js 2.7.34 → 3.0.0-next.1
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/index.html +1 -1
- package/dist/{mainnet-2.7.34.js → mainnet-3.0.0-next.1.js} +728 -708
- package/dist/module/cache/MemoryCache.d.ts +0 -1
- package/dist/module/cache/MemoryCache.d.ts.map +1 -1
- package/dist/module/cache/MemoryCache.js +5 -7
- package/dist/module/cache/MemoryCache.js.map +1 -1
- package/dist/module/cache/index.d.ts +1 -0
- package/dist/module/cache/index.d.ts.map +1 -1
- package/dist/module/cache/index.js +1 -0
- package/dist/module/cache/index.js.map +1 -1
- package/dist/module/cache/walletCache.d.ts +45 -0
- package/dist/module/cache/walletCache.d.ts.map +1 -0
- package/dist/module/cache/walletCache.js +140 -0
- package/dist/module/cache/walletCache.js.map +1 -0
- package/dist/module/chain.d.ts +1 -1
- package/dist/module/chain.js +1 -1
- package/dist/module/chain.js.map +1 -1
- package/dist/module/constant.d.ts +1 -1
- package/dist/module/constant.d.ts.map +1 -1
- package/dist/module/constant.js +1 -1
- package/dist/module/constant.js.map +1 -1
- package/dist/module/enum.d.ts +1 -7
- package/dist/module/enum.d.ts.map +1 -1
- package/dist/module/enum.js +0 -6
- package/dist/module/enum.js.map +1 -1
- package/dist/module/history/{electrumTransformer.d.ts → getHistory.d.ts} +3 -3
- package/dist/module/history/getHistory.d.ts.map +1 -0
- package/dist/module/history/{electrumTransformer.js → getHistory.js} +17 -14
- package/dist/module/history/getHistory.js.map +1 -0
- package/dist/module/index.d.ts +3 -1
- package/dist/module/index.d.ts.map +1 -1
- package/dist/module/index.js +3 -1
- package/dist/module/index.js.map +1 -1
- package/dist/module/interface.d.ts +7 -2
- package/dist/module/interface.d.ts.map +1 -1
- package/dist/module/interface.js.map +1 -1
- package/dist/module/message/interface.d.ts +2 -2
- package/dist/module/message/interface.d.ts.map +1 -1
- package/dist/module/message/interface.js +0 -3
- package/dist/module/message/interface.js.map +1 -1
- package/dist/module/message/signed.d.ts +5 -5
- package/dist/module/message/signed.d.ts.map +1 -1
- package/dist/module/message/signed.js +8 -8
- package/dist/module/message/signed.js.map +1 -1
- package/dist/module/network/ElectrumNetworkProvider.d.ts +2 -2
- package/dist/module/network/ElectrumNetworkProvider.d.ts.map +1 -1
- package/dist/module/network/ElectrumNetworkProvider.js +3 -2
- package/dist/module/network/ElectrumNetworkProvider.js.map +1 -1
- package/dist/module/network/NetworkProvider.d.ts +2 -2
- package/dist/module/network/NetworkProvider.d.ts.map +1 -1
- package/dist/module/network/constant.js +4 -4
- package/dist/module/network/constant.js.map +1 -1
- package/dist/module/network/getRelayFeeCache.js +2 -2
- package/dist/module/network/getRelayFeeCache.js.map +1 -1
- package/dist/module/rate/ExchangeRate.d.ts +2 -1
- package/dist/module/rate/ExchangeRate.d.ts.map +1 -1
- package/dist/module/rate/ExchangeRate.js +4 -1
- package/dist/module/rate/ExchangeRate.js.map +1 -1
- package/dist/module/transaction/Wif.d.ts +25 -23
- package/dist/module/transaction/Wif.d.ts.map +1 -1
- package/dist/module/transaction/Wif.js +26 -25
- package/dist/module/transaction/Wif.js.map +1 -1
- package/dist/module/transaction/allocateFee.d.ts +3 -3
- package/dist/module/transaction/allocateFee.d.ts.map +1 -1
- package/dist/module/transaction/allocateFee.js +5 -6
- package/dist/module/transaction/allocateFee.js.map +1 -1
- package/dist/module/util/amountInSatoshi.d.ts +1 -1
- package/dist/module/util/amountInSatoshi.d.ts.map +1 -1
- package/dist/module/util/amountInSatoshi.js +3 -9
- package/dist/module/util/amountInSatoshi.js.map +1 -1
- package/dist/module/util/asSendRequestObject.d.ts.map +1 -1
- package/dist/module/util/asSendRequestObject.js +10 -7
- package/dist/module/util/asSendRequestObject.js.map +1 -1
- package/dist/module/util/checkUtxos.d.ts +2 -2
- package/dist/module/util/checkUtxos.d.ts.map +1 -1
- package/dist/module/util/checkUtxos.js +11 -12
- package/dist/module/util/checkUtxos.js.map +1 -1
- package/dist/module/util/convert.d.ts +3 -0
- package/dist/module/util/convert.d.ts.map +1 -1
- package/dist/module/util/convert.js +12 -0
- package/dist/module/util/convert.js.map +1 -1
- package/dist/module/util/deriveCashaddr.d.ts.map +1 -1
- package/dist/module/util/deriveCashaddr.js +6 -0
- package/dist/module/util/deriveCashaddr.js.map +1 -1
- package/dist/module/util/deriveNetwork.js +1 -1
- package/dist/module/util/deriveNetwork.js.map +1 -1
- package/dist/module/util/hd.d.ts +3 -0
- package/dist/module/util/hd.d.ts.map +1 -0
- package/dist/module/util/hd.js +11 -0
- package/dist/module/util/hd.js.map +1 -0
- package/dist/module/util/index.d.ts +3 -3
- package/dist/module/util/index.d.ts.map +1 -1
- package/dist/module/util/index.js +3 -3
- package/dist/module/util/index.js.map +1 -1
- package/dist/module/util/satoshiToAmount.d.ts +1 -1
- package/dist/module/util/satoshiToAmount.d.ts.map +1 -1
- package/dist/module/util/satoshiToAmount.js +3 -9
- package/dist/module/util/satoshiToAmount.js.map +1 -1
- package/dist/module/util/sumSendRequestAmounts.d.ts.map +1 -1
- package/dist/module/util/sumSendRequestAmounts.js +3 -4
- package/dist/module/util/sumSendRequestAmounts.js.map +1 -1
- package/dist/module/util/sumUtxoValue.d.ts +3 -3
- package/dist/module/util/sumUtxoValue.d.ts.map +1 -1
- package/dist/module/util/sumUtxoValue.js +2 -2
- package/dist/module/util/sumUtxoValue.js.map +1 -1
- package/dist/module/wallet/Base.d.ts +45 -103
- package/dist/module/wallet/Base.d.ts.map +1 -1
- package/dist/module/wallet/Base.js +99 -298
- package/dist/module/wallet/Base.js.map +1 -1
- package/dist/module/wallet/HDWallet.d.ts +164 -0
- package/dist/module/wallet/HDWallet.d.ts.map +1 -0
- package/dist/module/wallet/HDWallet.js +486 -0
- package/dist/module/wallet/HDWallet.js.map +1 -0
- package/dist/module/wallet/Util.js +1 -1
- package/dist/module/wallet/Util.js.map +1 -1
- package/dist/module/wallet/Watch.d.ts +151 -0
- package/dist/module/wallet/Watch.d.ts.map +1 -0
- package/dist/module/wallet/Watch.js +307 -0
- package/dist/module/wallet/Watch.js.map +1 -0
- package/dist/module/wallet/Wif.d.ts +23 -29
- package/dist/module/wallet/Wif.d.ts.map +1 -1
- package/dist/module/wallet/Wif.js +204 -267
- package/dist/module/wallet/Wif.js.map +1 -1
- package/dist/module/wallet/createWallet.d.ts +7 -1
- package/dist/module/wallet/createWallet.d.ts.map +1 -1
- package/dist/module/wallet/createWallet.js +26 -17
- package/dist/module/wallet/createWallet.js.map +1 -1
- package/dist/module/wallet/interface.d.ts +5 -6
- package/dist/module/wallet/interface.d.ts.map +1 -1
- package/dist/module/wallet/model.d.ts +15 -19
- package/dist/module/wallet/model.d.ts.map +1 -1
- package/dist/module/wallet/model.js +5 -25
- package/dist/module/wallet/model.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/cache/MemoryCache.ts +5 -5
- package/src/cache/index.ts +1 -0
- package/src/cache/walletCache.ts +239 -0
- package/src/chain.ts +1 -1
- package/src/constant.ts +1 -1
- package/src/enum.ts +0 -6
- package/src/history/{electrumTransformer.test.ts → getHistory.test.ts} +26 -53
- package/src/history/{electrumTransformer.ts → getHistory.ts} +31 -15
- package/src/index.ts +3 -1
- package/src/interface.ts +8 -2
- package/src/message/interface.ts +2 -28
- package/src/message/signed.test.ts +36 -48
- package/src/message/signed.ts +9 -12
- package/src/network/Connection.test.ts +3 -3
- package/src/network/ElectrumNetworkProvider.ts +5 -5
- package/src/network/NetworkProvider.ts +2 -2
- package/src/network/Rpc.test.ts +3 -4
- package/src/network/constant.ts +4 -4
- package/src/network/getRelayFeeCache.ts +2 -2
- package/src/rate/ExchangeRate.test.ts +2 -44
- package/src/rate/ExchangeRate.ts +5 -2
- package/src/transaction/Wif.ts +59 -52
- package/src/transaction/allocateFee.test.ts +110 -131
- package/src/transaction/allocateFee.ts +14 -15
- package/src/util/amountInSatoshi.test.ts +1 -9
- package/src/util/amountInSatoshi.ts +6 -10
- package/src/util/asSendRequestObject.ts +12 -7
- package/src/util/checkUtxos.ts +21 -26
- package/src/util/convert.ts +18 -0
- package/src/util/deriveCashaddr.ts +8 -0
- package/src/util/deriveNetwork.ts +1 -1
- package/src/util/derivePublicKeyHash.test.ts +0 -13
- package/src/util/hd.ts +16 -0
- package/src/util/index.ts +3 -7
- package/src/util/satoshiToAmount.test.ts +1 -1
- package/src/util/satoshiToAmount.ts +4 -10
- package/src/util/sumSendRequestAmounts.ts +3 -4
- package/src/util/sumUtxoValue.ts +7 -7
- package/src/wallet/Base.ts +147 -420
- package/src/wallet/Cashtokens.test.headless.js +11 -11
- package/src/wallet/Cashtokens.test.ts +36 -37
- package/src/wallet/HDWallet.test.ts +515 -0
- package/src/wallet/HDWallet.ts +764 -0
- package/src/wallet/Util.ts +1 -1
- package/src/wallet/Watch.ts +447 -0
- package/src/wallet/Wif.bip39.test.ts +1 -1
- package/src/wallet/Wif.test.ts +108 -133
- package/src/wallet/Wif.ts +258 -283
- package/src/wallet/createWallet.ts +28 -18
- package/src/wallet/interface.ts +5 -6
- package/src/wallet/model.test.ts +4 -7
- package/src/wallet/model.ts +19 -51
- package/dist/module/history/electrumTransformer.d.ts.map +0 -1
- package/dist/module/history/electrumTransformer.js.map +0 -1
- package/dist/module/util/balanceObjectFromSatoshi.d.ts +0 -8
- package/dist/module/util/balanceObjectFromSatoshi.d.ts.map +0 -1
- package/dist/module/util/balanceObjectFromSatoshi.js +0 -35
- package/dist/module/util/balanceObjectFromSatoshi.js.map +0 -1
- package/src/util/balanceObjectFromSatoshi.test.ts +0 -58
- package/src/util/balanceObjectFromSatoshi.ts +0 -52
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import { assertSuccess, binToHex, CashAddressNetworkPrefix, decodeHdPrivateKey, decodeHdPublicKey, deriveHdPath, deriveHdPrivateNodeFromSeed, deriveHdPublicNode, deriveSeedFromBip39Mnemonic, encodeHdPrivateKey, encodeHdPublicKey, generateBip39Mnemonic, sha256, utf8ToBin, } from "@bitauth/libauth";
|
|
2
|
+
import { WalletCache } from "../cache/index.js";
|
|
3
|
+
import { Config } from "../config.js";
|
|
4
|
+
import { NetworkType, prefixFromNetworkMap } from "../enum.js";
|
|
5
|
+
import { getHistory } from "../history/getHistory.js";
|
|
6
|
+
import { checkForEmptySeed } from "../util/checkForEmptySeed.js";
|
|
7
|
+
import { BaseWallet } from "./Base.js";
|
|
8
|
+
import { WalletTypeEnum } from "./enum.js";
|
|
9
|
+
import { arrayRange, getNextUnusedIndex } from "../util/hd.js";
|
|
10
|
+
export const GAP_SIZE = 20;
|
|
11
|
+
export class HDWallet extends BaseWallet {
|
|
12
|
+
static { this.networkPrefix = CashAddressNetworkPrefix.mainnet; }
|
|
13
|
+
get networkPrefix() {
|
|
14
|
+
return prefixFromNetworkMap[this.network];
|
|
15
|
+
}
|
|
16
|
+
/// Create an uninitialized HDWallet, this method should not be called directly
|
|
17
|
+
/// Instead static methods such as `newRandom` or `fromSeed` should be used
|
|
18
|
+
constructor(network = NetworkType.Mainnet) {
|
|
19
|
+
super(network);
|
|
20
|
+
this.derivation = Config.DefaultParentDerivationPath;
|
|
21
|
+
// max index used for deposit address derivation
|
|
22
|
+
this.depositIndex = 0;
|
|
23
|
+
// max index used for change address derivation
|
|
24
|
+
this.changeIndex = 0;
|
|
25
|
+
this.depositStatusCallbacks = [];
|
|
26
|
+
this.changeStatusCallbacks = [];
|
|
27
|
+
this.depositWatchCancels = [];
|
|
28
|
+
this.changeWatchCancels = [];
|
|
29
|
+
this.depositStatuses = [];
|
|
30
|
+
this.changeStatuses = [];
|
|
31
|
+
this.depositUtxos = [];
|
|
32
|
+
this.changeUtxos = [];
|
|
33
|
+
this.watchPromise = undefined;
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
this.walletType = WalletTypeEnum.Hd;
|
|
36
|
+
}
|
|
37
|
+
/// Initialize the wallet given the options mnemonic, xPriv or xPub
|
|
38
|
+
/// If none provided, a new random mnemonic will be generated
|
|
39
|
+
/// If mnemonic or xPriv provided, the wallet will be able to sign transactions
|
|
40
|
+
/// If xPub provided, the wallet will be watch-only
|
|
41
|
+
/// This internal method is called by the various static constructors
|
|
42
|
+
async initialize({ name = "", depositIndex = 0, changeIndex = 0, mnemonic = undefined, derivation = undefined, xPriv = undefined, xPub = undefined, } = {}) {
|
|
43
|
+
// newRandom
|
|
44
|
+
if (!xPriv && !xPub && !mnemonic) {
|
|
45
|
+
mnemonic = generateBip39Mnemonic();
|
|
46
|
+
}
|
|
47
|
+
this.depositIndex = depositIndex;
|
|
48
|
+
this.changeIndex = changeIndex;
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
this.xPub = xPub ? xPub : "";
|
|
51
|
+
if (mnemonic?.length) {
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
this.derivation = derivation
|
|
54
|
+
? derivation
|
|
55
|
+
: Config.DefaultParentDerivationPath;
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
this.mnemonic = mnemonic ? mnemonic : generateBip39Mnemonic();
|
|
58
|
+
if (this.mnemonic.length == 0) {
|
|
59
|
+
throw Error("refusing to create wallet from empty mnemonic");
|
|
60
|
+
}
|
|
61
|
+
const seed = deriveSeedFromBip39Mnemonic(this.mnemonic);
|
|
62
|
+
checkForEmptySeed(seed);
|
|
63
|
+
const rootNode = deriveHdPrivateNodeFromSeed(seed, {
|
|
64
|
+
assumeValidity: true,
|
|
65
|
+
throwErrors: true,
|
|
66
|
+
});
|
|
67
|
+
const node = deriveHdPath(rootNode, this.derivation);
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
this.xPriv = assertSuccess(encodeHdPrivateKey({
|
|
70
|
+
...node,
|
|
71
|
+
network: this.network === NetworkType.Mainnet ? "mainnet" : "testnet",
|
|
72
|
+
node: node,
|
|
73
|
+
})).hdPrivateKey;
|
|
74
|
+
// @ts-ignore
|
|
75
|
+
this.xPrivNode = node;
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
this.xPubNode = deriveHdPublicNode(node);
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
this.xPub = assertSuccess(encodeHdPublicKey({
|
|
80
|
+
node: this.xPubNode,
|
|
81
|
+
network: this.network === NetworkType.Mainnet ? "mainnet" : "testnet",
|
|
82
|
+
})).hdPublicKey;
|
|
83
|
+
}
|
|
84
|
+
else if (xPriv) {
|
|
85
|
+
// @ts-ignore
|
|
86
|
+
this.xPriv = xPriv;
|
|
87
|
+
const decoded = assertSuccess(decodeHdPrivateKey(xPriv));
|
|
88
|
+
if (decoded.network !==
|
|
89
|
+
(this.network === NetworkType.Mainnet ? "mainnet" : "testnet")) {
|
|
90
|
+
throw new Error(`xPriv network (${decoded.network}) does not match wallet network (${this.network === NetworkType.Mainnet ? "mainnet" : "testnet"})`);
|
|
91
|
+
}
|
|
92
|
+
// @ts-ignore
|
|
93
|
+
this.xPrivNode = decoded.node;
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
this.xPubNode = deriveHdPublicNode(decoded.node);
|
|
96
|
+
// @ts-ignore
|
|
97
|
+
this.xPub = assertSuccess(encodeHdPublicKey({
|
|
98
|
+
node: this.xPubNode,
|
|
99
|
+
network: this.network === NetworkType.Mainnet ? "mainnet" : "testnet",
|
|
100
|
+
})).hdPublicKey;
|
|
101
|
+
}
|
|
102
|
+
else if (xPub) {
|
|
103
|
+
const decoded = assertSuccess(decodeHdPublicKey(xPub));
|
|
104
|
+
if (decoded.network !==
|
|
105
|
+
(this.network === NetworkType.Mainnet ? "mainnet" : "testnet")) {
|
|
106
|
+
throw new Error(`xPriv network (${decoded.network}) does not match wallet network (${this.network === NetworkType.Mainnet ? "mainnet" : "testnet"})`);
|
|
107
|
+
}
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
this.xPubNode = decoded.node;
|
|
110
|
+
// @ts-ignore
|
|
111
|
+
this.xPub = xPub;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new Error("mnemonic, xPriv or xPub must be provided to create an HDWallet");
|
|
115
|
+
}
|
|
116
|
+
this.name = name;
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
this.walletId = binToHex(sha256.hash(utf8ToBin(`${(this.mnemonic ? this.mnemonic + this.derivation : undefined) ??
|
|
119
|
+
this.xPriv ??
|
|
120
|
+
this.xPub}-${this.network}`)));
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
this.walletCache = new WalletCache(this.walletId, this.xPrivNode ?? this.xPubNode, this.networkPrefix);
|
|
123
|
+
// init wallet cache
|
|
124
|
+
await this.walletCache.init();
|
|
125
|
+
// start watching addresses asynchronously
|
|
126
|
+
this.makeWatchPromise().catch(() => { });
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/// Stops the wallet from watching for address changes
|
|
130
|
+
/// After calling this method, the wallet will no longer update and is considered defunct
|
|
131
|
+
async stop() {
|
|
132
|
+
await Promise.all([...this.depositWatchCancels, ...this.changeWatchCancels].map((cancelFn) => cancelFn?.()));
|
|
133
|
+
}
|
|
134
|
+
/// Scan more addresses for activity beyond the current gap limit, extending the watched range as needed
|
|
135
|
+
async scanMoreAddresses(amount = GAP_SIZE) {
|
|
136
|
+
await this.watchPromise;
|
|
137
|
+
await this.makeWatchPromise(amount);
|
|
138
|
+
await this.watchPromise;
|
|
139
|
+
}
|
|
140
|
+
/// Internal method to start watching addresses for activity, extending the watched range as needed
|
|
141
|
+
async makeWatchPromise(gapSize = GAP_SIZE) {
|
|
142
|
+
await this.watchPromise;
|
|
143
|
+
this.watchPromise = Promise.all([
|
|
144
|
+
(async () => {
|
|
145
|
+
const depositIndex = this.depositIndex;
|
|
146
|
+
const depositStartIndex = (this.depositStatuses
|
|
147
|
+
.filter((s) => s)
|
|
148
|
+
.map((_, i) => i)
|
|
149
|
+
.at(-1) ?? -1) + 1;
|
|
150
|
+
const depositStopIndex = Math.max(this.depositIndex, depositStartIndex + gapSize);
|
|
151
|
+
const depositAddresses = arrayRange(depositStartIndex, depositStopIndex).map((i) => this.walletCache.getByIndex(i, false).address);
|
|
152
|
+
await Promise.all(depositAddresses.map(async (addr, index) => new Promise(async (resolve) => {
|
|
153
|
+
index = depositStartIndex + index;
|
|
154
|
+
if (this.depositStatuses[index] !== undefined) {
|
|
155
|
+
resolve();
|
|
156
|
+
}
|
|
157
|
+
const { status: prevStatus, utxos: prevUtxos } = this.walletCache.getByIndex(index, false);
|
|
158
|
+
this.depositStatuses[index] = prevStatus;
|
|
159
|
+
this.depositUtxos[index] = prevUtxos;
|
|
160
|
+
const callback = async (args) => {
|
|
161
|
+
const [address, status] = args;
|
|
162
|
+
if (address != addr) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (status === null) {
|
|
166
|
+
this.depositUtxos[index] = [];
|
|
167
|
+
}
|
|
168
|
+
if (status !== null &&
|
|
169
|
+
status !== this.depositStatuses[index]) {
|
|
170
|
+
const utxos = (await this.provider.getUtxos(addr)).map((utxo) => {
|
|
171
|
+
utxo.address = addr;
|
|
172
|
+
return utxo;
|
|
173
|
+
});
|
|
174
|
+
this.depositUtxos[index] = utxos;
|
|
175
|
+
this.walletCache.setStatusAndUtxos(addr, status, utxos);
|
|
176
|
+
const newDepositIndex = Math.max(depositIndex, index + 1);
|
|
177
|
+
if (newDepositIndex > depositIndex) {
|
|
178
|
+
this.depositIndex = Math.max(newDepositIndex, this.depositIndex);
|
|
179
|
+
this.makeWatchPromise();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
this.depositStatuses[index] = status;
|
|
183
|
+
resolve();
|
|
184
|
+
};
|
|
185
|
+
this.depositWatchCancels[index] =
|
|
186
|
+
await this.provider.subscribeToAddress(addr, callback);
|
|
187
|
+
})));
|
|
188
|
+
return depositAddresses.length;
|
|
189
|
+
})(),
|
|
190
|
+
(async () => {
|
|
191
|
+
const changeIndex = this.changeIndex;
|
|
192
|
+
const changeStartIndex = (this.changeStatuses
|
|
193
|
+
.filter((s) => s)
|
|
194
|
+
.map((_, i) => i)
|
|
195
|
+
.at(-1) ?? -1) + 1;
|
|
196
|
+
const changeStopIndex = Math.max(this.changeIndex, changeStartIndex + gapSize);
|
|
197
|
+
const changeAddresses = arrayRange(changeStartIndex, changeStopIndex).map((i) => this.walletCache.getByIndex(i, true).address);
|
|
198
|
+
await Promise.all(changeAddresses.map(async (addr, index) => new Promise(async (resolve) => {
|
|
199
|
+
index = changeStartIndex + index;
|
|
200
|
+
if (this.changeStatuses[index] !== undefined) {
|
|
201
|
+
resolve();
|
|
202
|
+
}
|
|
203
|
+
const { status: prevStatus, utxos: prevUtxos } = this.walletCache.getByIndex(index, false);
|
|
204
|
+
this.changeStatuses[index] = prevStatus;
|
|
205
|
+
this.changeUtxos[index] = prevUtxos;
|
|
206
|
+
const callback = async (args) => {
|
|
207
|
+
const [address, status] = args;
|
|
208
|
+
if (address != addr) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (status === null) {
|
|
212
|
+
this.changeUtxos[index] = [];
|
|
213
|
+
}
|
|
214
|
+
if (status !== null &&
|
|
215
|
+
status !== this.changeStatuses[index]) {
|
|
216
|
+
const utxos = (await this.provider.getUtxos(addr)).map((utxo) => {
|
|
217
|
+
utxo.address = addr;
|
|
218
|
+
return utxo;
|
|
219
|
+
});
|
|
220
|
+
this.changeUtxos[index] = utxos;
|
|
221
|
+
this.walletCache.setStatusAndUtxos(addr, status, utxos);
|
|
222
|
+
const newChangeIndex = Math.max(changeIndex, index + 1);
|
|
223
|
+
if (newChangeIndex > changeIndex) {
|
|
224
|
+
this.changeIndex = Math.max(newChangeIndex, this.changeIndex);
|
|
225
|
+
this.makeWatchPromise();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
this.changeStatuses[index] = status;
|
|
229
|
+
resolve();
|
|
230
|
+
};
|
|
231
|
+
this.changeWatchCancels[index] =
|
|
232
|
+
await this.provider.subscribeToAddress(addr, callback);
|
|
233
|
+
})));
|
|
234
|
+
return changeAddresses.length;
|
|
235
|
+
})(),
|
|
236
|
+
]);
|
|
237
|
+
}
|
|
238
|
+
// Return wallet info
|
|
239
|
+
getInfo() {
|
|
240
|
+
return {
|
|
241
|
+
isTestnet: this.isTestnet,
|
|
242
|
+
name: this.name,
|
|
243
|
+
network: this.network,
|
|
244
|
+
seed: this.mnemonic,
|
|
245
|
+
walletId: this.toString(),
|
|
246
|
+
walletDbEntry: this.toDbString(),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* utxos Get unspent outputs for the wallet
|
|
251
|
+
*
|
|
252
|
+
*/
|
|
253
|
+
async getUtxos() {
|
|
254
|
+
await this.watchPromise;
|
|
255
|
+
return [...this.depositUtxos, ...this.changeUtxos].flat();
|
|
256
|
+
}
|
|
257
|
+
/// Get next unused deposit address, or the address at the specified index
|
|
258
|
+
getDepositAddress(index = -1) {
|
|
259
|
+
index = getNextUnusedIndex(index, this.depositStatuses);
|
|
260
|
+
return this.walletCache.getByIndex(index, false).address;
|
|
261
|
+
}
|
|
262
|
+
/// Get next unused token deposit address, or the token address at the specified index
|
|
263
|
+
getTokenDepositAddress(index = -1) {
|
|
264
|
+
index = getNextUnusedIndex(index, this.depositStatuses);
|
|
265
|
+
return this.walletCache.getByIndex(index, false).tokenAddress;
|
|
266
|
+
}
|
|
267
|
+
/// Get next unused change address, or the address at the specified index
|
|
268
|
+
getChangeAddress(index = -1) {
|
|
269
|
+
index = getNextUnusedIndex(index, this.changeStatuses);
|
|
270
|
+
return this.walletCache.getByIndex(index, true).address;
|
|
271
|
+
}
|
|
272
|
+
/// Get next unused token change address, or the token address at the specified index
|
|
273
|
+
getChangeTokenAddress(index = -1) {
|
|
274
|
+
index = getNextUnusedIndex(index, this.changeStatuses);
|
|
275
|
+
return this.walletCache.getByIndex(index, true).tokenAddress;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* fromSeed - create a wallet using the seed phrase and derivation path
|
|
279
|
+
*
|
|
280
|
+
* unless specified the derivation path m/44'/0'/0'/0/0 will be used
|
|
281
|
+
*
|
|
282
|
+
* @param seed BIP39 12 word seed phrase
|
|
283
|
+
* @param derivationPath BIP44 HD wallet derivation path to get a single the private key from hierarchy
|
|
284
|
+
*
|
|
285
|
+
* @returns instantiated wallet
|
|
286
|
+
*/
|
|
287
|
+
static async fromSeed(seed, derivationPath, depositIndex, changeIndex) {
|
|
288
|
+
return new this().initialize({
|
|
289
|
+
mnemonic: seed,
|
|
290
|
+
derivation: derivationPath,
|
|
291
|
+
depositIndex: depositIndex,
|
|
292
|
+
changeIndex: changeIndex,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* newRandom - create a random wallet
|
|
297
|
+
*
|
|
298
|
+
* if `name` parameter is specified, the wallet will also be persisted to DB
|
|
299
|
+
*
|
|
300
|
+
* @param name user friendly wallet alias
|
|
301
|
+
* @param dbName name under which the wallet will be stored in the database
|
|
302
|
+
*
|
|
303
|
+
* @returns instantiated wallet
|
|
304
|
+
*/
|
|
305
|
+
static async newRandom(name = "", dbName) {
|
|
306
|
+
dbName = dbName ? dbName : this.networkPrefix;
|
|
307
|
+
if (name.length > 0) {
|
|
308
|
+
return this.named(name, dbName);
|
|
309
|
+
}
|
|
310
|
+
return new this().initialize();
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* fromXPub - create a watch-only wallet using the HD Wallet Public key
|
|
314
|
+
*
|
|
315
|
+
* @param xPub HD Wallet Public Key
|
|
316
|
+
*
|
|
317
|
+
* @returns instantiated wallet
|
|
318
|
+
*/
|
|
319
|
+
static async fromXPub(xPub) {
|
|
320
|
+
return new this().initialize({
|
|
321
|
+
xPub: xPub,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* fromXPriv - create a wallet using the HD Wallet Private key
|
|
326
|
+
*
|
|
327
|
+
* @param xPub HD Wallet Private Key
|
|
328
|
+
*
|
|
329
|
+
* @returns instantiated wallet
|
|
330
|
+
*/
|
|
331
|
+
static async fromXPriv(xPriv) {
|
|
332
|
+
return new this().initialize({
|
|
333
|
+
xPriv: xPriv,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* fromId - create a wallet from encoded walletId string
|
|
338
|
+
*
|
|
339
|
+
* @param walletId walletId options to steer the creation process
|
|
340
|
+
*
|
|
341
|
+
* @returns wallet instantiated accordingly to the walletId rules
|
|
342
|
+
*/
|
|
343
|
+
static async fromId(walletId) {
|
|
344
|
+
return new this().fromId(walletId);
|
|
345
|
+
}
|
|
346
|
+
/// override the base class fromId method implementation
|
|
347
|
+
async fromId(walletId) {
|
|
348
|
+
const [walletType, networkGiven, arg1, arg2, arg3, arg4] = walletId.split(":");
|
|
349
|
+
if (this.network != networkGiven) {
|
|
350
|
+
throw Error(`Network prefix ${networkGiven} to a ${this.network} wallet`);
|
|
351
|
+
}
|
|
352
|
+
if (walletType === WalletTypeEnum.Named) {
|
|
353
|
+
if (arg2) {
|
|
354
|
+
// named:testnet:wallet_1:my_database
|
|
355
|
+
return this.named(arg1, arg2);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
// named:testnet:wallet_1
|
|
359
|
+
return this.named(arg1);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (walletType !== WalletTypeEnum.Hd) {
|
|
363
|
+
throw Error(`fromId called on a ${walletType} wallet, expected a ${WalletTypeEnum.Hd} wallet`);
|
|
364
|
+
}
|
|
365
|
+
if (arg1.startsWith("priv", 1)) {
|
|
366
|
+
return this.initialize({
|
|
367
|
+
xPriv: arg1,
|
|
368
|
+
depositIndex: parseInt(arg2) || 0,
|
|
369
|
+
changeIndex: parseInt(arg3) || 0,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
if (arg1.startsWith("pub", 1)) {
|
|
373
|
+
return this.initialize({
|
|
374
|
+
xPub: arg1,
|
|
375
|
+
depositIndex: parseInt(arg2) || 0,
|
|
376
|
+
changeIndex: parseInt(arg3) || 0,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
return this.initialize({
|
|
380
|
+
mnemonic: arg1,
|
|
381
|
+
derivation: arg2,
|
|
382
|
+
depositIndex: parseInt(arg3) || 0,
|
|
383
|
+
changeIndex: parseInt(arg4) || 0,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* encodeTransaction Encode and sign a transaction given a list of sendRequests, options and estimate fees.
|
|
388
|
+
* @param {SendRequest[]} sendRequests SendRequests
|
|
389
|
+
* @param {boolean} discardChange=false
|
|
390
|
+
* @param {SendRequestOptionsI} options Options of the send requests
|
|
391
|
+
*/
|
|
392
|
+
async encodeTransaction(requests, discardChange = false, options, privateKey) {
|
|
393
|
+
if (!this.xPriv && !privateKey && options?.buildUnsigned !== true) {
|
|
394
|
+
throw new Error(`Missing private key`);
|
|
395
|
+
}
|
|
396
|
+
return super.encodeTransaction(requests, discardChange, options, privateKey);
|
|
397
|
+
}
|
|
398
|
+
//#region Serialization
|
|
399
|
+
// Returns the serialized wallet as a string
|
|
400
|
+
// If storing in a database, set asNamed to false to store secrets
|
|
401
|
+
// In all other cases, the a named wallet is deserialized from the database
|
|
402
|
+
// by the name key
|
|
403
|
+
toString() {
|
|
404
|
+
if (this.name) {
|
|
405
|
+
return `named:${this.network}:${this.name}`;
|
|
406
|
+
}
|
|
407
|
+
return this.toDbString();
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* toDbString - store the serialized version of the wallet in the database, not just the name
|
|
411
|
+
*
|
|
412
|
+
* @throws {Error} if called on BaseWallet
|
|
413
|
+
*/
|
|
414
|
+
toDbString() {
|
|
415
|
+
if (this.walletType == WalletTypeEnum.Hd) {
|
|
416
|
+
if (this.mnemonic?.length > 0) {
|
|
417
|
+
return `${this.walletType}:${this.network}:${this.mnemonic}:${this.derivation}:${this.depositIndex}:${this.changeIndex}`;
|
|
418
|
+
}
|
|
419
|
+
if (this.xPriv?.length > 0) {
|
|
420
|
+
return `${this.walletType}:${this.network}:${this.xPriv}:${this.depositIndex}:${this.changeIndex}`;
|
|
421
|
+
}
|
|
422
|
+
if (this.xPub?.length > 0) {
|
|
423
|
+
return `${this.walletType}:${this.network}:${this.xPub}:${this.depositIndex}:${this.changeIndex}`;
|
|
424
|
+
}
|
|
425
|
+
throw Error("HDWallet has no mnemonic, xPriv or xPub to serialize");
|
|
426
|
+
}
|
|
427
|
+
throw Error("toDbString unsupported wallet type");
|
|
428
|
+
}
|
|
429
|
+
//#endregion Serialization
|
|
430
|
+
/**
|
|
431
|
+
* getHistory gets transaction history of this wallet with most data decoded and ready to present to user
|
|
432
|
+
* @note balance calculations are valid only if querying to the blockchain tip (`toHeight` === -1, `count` === -1)
|
|
433
|
+
* @note this method is heavy on network calls, if invoked in browser use of cache is advised, @see `Config.UseLocalStorageCache`
|
|
434
|
+
* @note this method tries to recreate the history tab view of Electron Cash wallet, however, it may not be 100% accurate if the tnransaction value changes are the same in the same block (ordering)
|
|
435
|
+
*
|
|
436
|
+
* @param unit optional, BCH or currency unit to present balance and balance changes. If unit is currency like USD or EUR, balances will be subject to possible rounding errors. Default 0
|
|
437
|
+
* @param fromHeight optional, if set, history will be limited. Default 0
|
|
438
|
+
* @param toHeight optional, if set, history will be limited. Default -1, meaning that all history items will be returned, including mempool
|
|
439
|
+
* @param start optional, if set, the result set will be paginated with offset `start`
|
|
440
|
+
* @param count optional, if set, the result set will be paginated with `count`. Default -1, meaning that all history items will be returned
|
|
441
|
+
*
|
|
442
|
+
* @returns an array of transaction history items, with input values and addresses encoded in cashaddress format. @see `TransactionHistoryItem` type
|
|
443
|
+
*/
|
|
444
|
+
async getHistory({ unit = "sat", fromHeight = 0, toHeight = -1, start = 0, count = -1, }) {
|
|
445
|
+
const addresses = [
|
|
446
|
+
...this.depositStatuses
|
|
447
|
+
.map((status, i) => status !== null && i < this.depositIndex
|
|
448
|
+
? this.walletCache.getByIndex(i, false).address
|
|
449
|
+
: undefined)
|
|
450
|
+
.filter((address) => address !== undefined),
|
|
451
|
+
...this.changeStatuses
|
|
452
|
+
.map((status, i) => status !== null && i < this.depositIndex
|
|
453
|
+
? this.walletCache.getByIndex(i, true).address
|
|
454
|
+
: undefined)
|
|
455
|
+
.filter((address) => address !== undefined),
|
|
456
|
+
];
|
|
457
|
+
return getHistory({
|
|
458
|
+
addresses: addresses,
|
|
459
|
+
provider: this.provider,
|
|
460
|
+
unit,
|
|
461
|
+
fromHeight,
|
|
462
|
+
toHeight,
|
|
463
|
+
start,
|
|
464
|
+
count,
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Class to manage a testnet wallet.
|
|
470
|
+
*/
|
|
471
|
+
export class TestNetHDWallet extends HDWallet {
|
|
472
|
+
static { this.networkPrefix = CashAddressNetworkPrefix.testnet; }
|
|
473
|
+
constructor() {
|
|
474
|
+
super(NetworkType.Testnet);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Class to manage a regtest wallet.
|
|
479
|
+
*/
|
|
480
|
+
export class RegTestHDWallet extends HDWallet {
|
|
481
|
+
static { this.networkPrefix = CashAddressNetworkPrefix.regtest; }
|
|
482
|
+
constructor() {
|
|
483
|
+
super(NetworkType.Regtest);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=HDWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HDWallet.js","sourceRoot":"","sources":["../../../src/wallet/HDWallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Util.js","sourceRoot":"","sources":["../../../src/wallet/Util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Util.js","sourceRoot":"","sources":["../../../src/wallet/Util.ts"],"names":[],"mappings":"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"}
|