mainnet-js 2.7.31 → 3.0.0-next.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/dist/index.html +1 -1
- package/dist/{mainnet-2.7.31.js → mainnet-3.0.0-next.0.js} +718 -678
- 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 +39 -0
- package/dist/module/cache/walletCache.d.ts.map +1 -0
- package/dist/module/cache/walletCache.js +141 -0
- package/dist/module/cache/walletCache.js.map +1 -0
- 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} +47 -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 -1
- 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 +14 -14
- 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 +2 -1
- 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/transaction/Wif.d.ts +21 -19
- package/dist/module/transaction/Wif.d.ts.map +1 -1
- package/dist/module/transaction/Wif.js +18 -15
- package/dist/module/transaction/Wif.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/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 +1 -0
- package/dist/module/util/index.d.ts.map +1 -1
- package/dist/module/util/index.js +1 -0
- package/dist/module/util/index.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.map +1 -1
- package/dist/module/wallet/Base.d.ts +37 -93
- package/dist/module/wallet/Base.d.ts.map +1 -1
- package/dist/module/wallet/Base.js +83 -250
- 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/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 +3 -3
- package/dist/module/wallet/interface.d.ts.map +1 -1
- package/dist/module/wallet/model.d.ts +3 -3
- package/dist/module/wallet/model.d.ts.map +1 -1
- package/dist/module/wallet/model.js +2 -18
- 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 +252 -0
- package/src/history/{electrumTransformer.test.ts → getHistory.test.ts} +6 -19
- package/src/history/{electrumTransformer.ts → getHistory.ts} +63 -15
- package/src/index.ts +3 -1
- package/src/interface.ts +8 -1
- package/src/message/interface.ts +2 -28
- package/src/message/signed.test.ts +56 -48
- package/src/message/signed.ts +15 -18
- package/src/network/ElectrumNetworkProvider.ts +4 -4
- package/src/network/NetworkProvider.ts +2 -2
- package/src/network/Rpc.test.ts +1 -1
- package/src/network/constant.ts +4 -4
- package/src/transaction/Wif.ts +41 -35
- package/src/util/checkUtxos.ts +21 -26
- 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 +1 -0
- package/src/util/sumUtxoValue.ts +5 -5
- package/src/wallet/Base.ts +123 -332
- package/src/wallet/HDWallet.test.ts +372 -0
- package/src/wallet/HDWallet.ts +764 -0
- package/src/wallet/Watch.ts +447 -0
- package/src/wallet/Wif.ts +258 -283
- package/src/wallet/createWallet.ts +28 -18
- package/src/wallet/interface.ts +3 -3
- package/src/wallet/model.test.ts +2 -2
- package/src/wallet/model.ts +6 -23
- package/dist/module/history/electrumTransformer.d.ts.map +0 -1
- package/dist/module/history/electrumTransformer.js.map +0 -1
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { assertSuccess, decodeTransaction, hexToBin } from "@bitauth/libauth";
|
|
2
|
+
import { HDWallet, RegTestHDWallet } from "./HDWallet";
|
|
3
|
+
import { RegTestWallet, Wallet } from "./Wif";
|
|
4
|
+
import { Config } from "../config";
|
|
5
|
+
import { getNextUnusedIndex } from "../util/hd";
|
|
6
|
+
|
|
7
|
+
const expectedXpub =
|
|
8
|
+
"xpub6CGqRCnS5qDfyxtzV3y3tj8CY7qf3z3GiB2qnCUTdNkhpNxbLtobrU5ZXBVPG3rzPcBUpJAoj3K1u1jyDwKuduL71gLPm27Tckc85apgQRr";
|
|
9
|
+
const expectedXprv =
|
|
10
|
+
"xprv9yHV1hFYFTfNmUpXP2S3XbBTz61AeXKRLx7Eyp4r53DiwadSoMVMJfm5fvtxBc3NFKfozcH42LM66Kb5VaxdLvGk43JWahCegx6iaEJbkB2";
|
|
11
|
+
|
|
12
|
+
describe("HDWallet", () => {
|
|
13
|
+
it("should create a new HDWallet instance", async () => {
|
|
14
|
+
const wallet = await Wallet.fromSeed(
|
|
15
|
+
"divide battle bulb improve hockey favorite charge save merit fatal frog cage"
|
|
16
|
+
);
|
|
17
|
+
const walletSeed = await HDWallet.fromSeed(
|
|
18
|
+
"divide battle bulb improve hockey favorite charge save merit fatal frog cage"
|
|
19
|
+
);
|
|
20
|
+
const walletPriv = await HDWallet.fromXPriv(expectedXprv);
|
|
21
|
+
const walletPub = await HDWallet.fromXPub(expectedXpub);
|
|
22
|
+
|
|
23
|
+
expect(walletSeed.xPub).toBe(expectedXpub);
|
|
24
|
+
expect(walletSeed.xPriv).toBe(expectedXprv);
|
|
25
|
+
expect(walletPriv.xPub).toBe(expectedXpub);
|
|
26
|
+
expect(walletPriv.xPriv).toBe(expectedXprv);
|
|
27
|
+
expect(walletPub.xPub).toBe(expectedXpub);
|
|
28
|
+
|
|
29
|
+
expect(wallet.getDepositAddress()).toBe(walletSeed.getDepositAddress());
|
|
30
|
+
expect(wallet.getDepositAddress()).toBe(walletPriv.getDepositAddress());
|
|
31
|
+
expect(wallet.getDepositAddress()).toBe(walletPub.getDepositAddress());
|
|
32
|
+
|
|
33
|
+
expect(walletSeed.getChangeAddress()).toBe(walletPriv.getChangeAddress());
|
|
34
|
+
expect(walletSeed.getChangeAddress()).toBe(walletPub.getChangeAddress());
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("should serialize", async () => {
|
|
38
|
+
const wallet = await HDWallet.fromSeed(
|
|
39
|
+
"divide battle bulb improve hockey favorite charge save merit fatal frog cage"
|
|
40
|
+
);
|
|
41
|
+
expect(wallet.toString()).toBe(
|
|
42
|
+
"hd:mainnet:divide battle bulb improve hockey favorite charge save merit fatal frog cage:m/44'/0'/0':0:0"
|
|
43
|
+
);
|
|
44
|
+
expect(wallet.toDbString()).toBe(
|
|
45
|
+
"hd:mainnet:divide battle bulb improve hockey favorite charge save merit fatal frog cage:m/44'/0'/0':0:0"
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
wallet.name = "testWallet";
|
|
49
|
+
expect(wallet.toString()).toBe("named:mainnet:testWallet");
|
|
50
|
+
expect(wallet.toDbString()).toBe(
|
|
51
|
+
"hd:mainnet:divide battle bulb improve hockey favorite charge save merit fatal frog cage:m/44'/0'/0':0:0"
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const xPrivWallet = await HDWallet.fromXPriv(expectedXprv);
|
|
55
|
+
expect(xPrivWallet.toString()).toBe(
|
|
56
|
+
"hd:mainnet:xprv9yHV1hFYFTfNmUpXP2S3XbBTz61AeXKRLx7Eyp4r53DiwadSoMVMJfm5fvtxBc3NFKfozcH42LM66Kb5VaxdLvGk43JWahCegx6iaEJbkB2:0:0"
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const xPubWallet = await HDWallet.fromXPub(expectedXpub);
|
|
60
|
+
expect(xPubWallet.toString()).toBe(
|
|
61
|
+
"hd:mainnet:xpub6CGqRCnS5qDfyxtzV3y3tj8CY7qf3z3GiB2qnCUTdNkhpNxbLtobrU5ZXBVPG3rzPcBUpJAoj3K1u1jyDwKuduL71gLPm27Tckc85apgQRr:0:0"
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const uninitializedWallet = new HDWallet();
|
|
65
|
+
expect(() => uninitializedWallet.toDbString()).toThrowError(
|
|
66
|
+
"HDWallet has no mnemonic, xPriv or xPub to serialize"
|
|
67
|
+
);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("Get next index", () => {
|
|
71
|
+
expect(getNextUnusedIndex(-1, [null, null, null])).toBe(0);
|
|
72
|
+
expect(getNextUnusedIndex(-1, ["", null, null])).toBe(1);
|
|
73
|
+
expect(getNextUnusedIndex(-1, ["", null, ""])).toBe(1);
|
|
74
|
+
expect(getNextUnusedIndex(-1, ["", "", null])).toBe(2);
|
|
75
|
+
expect(getNextUnusedIndex(-1, ["", "", ""])).toBe(3);
|
|
76
|
+
|
|
77
|
+
expect(getNextUnusedIndex(0, [null, null, null])).toBe(0);
|
|
78
|
+
expect(getNextUnusedIndex(1, [null, null, null])).toBe(1);
|
|
79
|
+
expect(getNextUnusedIndex(2, [null, null, null])).toBe(2);
|
|
80
|
+
|
|
81
|
+
expect(
|
|
82
|
+
getNextUnusedIndex(-1, [
|
|
83
|
+
"759933dd4c6d75f097ec75158ebc04a1f89bc484fc6df0352816328fb4f533a4",
|
|
84
|
+
null,
|
|
85
|
+
null,
|
|
86
|
+
null,
|
|
87
|
+
])
|
|
88
|
+
).toBe(1);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("promises", async () => {
|
|
92
|
+
const result = await Promise.all([
|
|
93
|
+
(async () => 1)(),
|
|
94
|
+
new Promise((resolve) => resolve(2)),
|
|
95
|
+
]);
|
|
96
|
+
expect(JSON.stringify(result)).toBe(JSON.stringify([1, 2]));
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("deposit indexes", async () => {
|
|
100
|
+
const hdWallet = await RegTestHDWallet.newRandom();
|
|
101
|
+
expect(hdWallet.depositIndex).toBe(0);
|
|
102
|
+
|
|
103
|
+
const fundingWallet = await RegTestWallet.fromId(
|
|
104
|
+
"wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
await fundingWallet.send({
|
|
108
|
+
cashaddr: hdWallet.getDepositAddress(0),
|
|
109
|
+
value: 100000,
|
|
110
|
+
unit: "sat",
|
|
111
|
+
});
|
|
112
|
+
expect(hdWallet.depositIndex).toBe(1);
|
|
113
|
+
|
|
114
|
+
await fundingWallet.send({
|
|
115
|
+
cashaddr: hdWallet.getDepositAddress(1),
|
|
116
|
+
value: 100000,
|
|
117
|
+
unit: "sat",
|
|
118
|
+
});
|
|
119
|
+
expect(hdWallet.depositIndex).toBe(2);
|
|
120
|
+
|
|
121
|
+
await fundingWallet.send({
|
|
122
|
+
cashaddr: hdWallet.getDepositAddress(4),
|
|
123
|
+
value: 100000,
|
|
124
|
+
unit: "sat",
|
|
125
|
+
});
|
|
126
|
+
expect(hdWallet.depositIndex).toBe(5);
|
|
127
|
+
|
|
128
|
+
// beyond gap size, should not update index
|
|
129
|
+
await fundingWallet.send({
|
|
130
|
+
cashaddr: hdWallet.getDepositAddress(30),
|
|
131
|
+
value: 100000,
|
|
132
|
+
unit: "sat",
|
|
133
|
+
});
|
|
134
|
+
expect(hdWallet.depositIndex).toBe(5);
|
|
135
|
+
|
|
136
|
+
await hdWallet.scanMoreAddresses(30);
|
|
137
|
+
expect(hdWallet.depositIndex).toBe(31);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("Should send funds from an HDWallet", async () => {
|
|
141
|
+
const fundingWallet = await RegTestWallet.fromId(
|
|
142
|
+
"wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
const hdWallet = await RegTestHDWallet.newRandom();
|
|
146
|
+
expect(await hdWallet.getBalance("sat")).toBe(0);
|
|
147
|
+
|
|
148
|
+
const depositAddress = hdWallet.getDepositAddress();
|
|
149
|
+
await fundingWallet.send({
|
|
150
|
+
cashaddr: depositAddress,
|
|
151
|
+
value: 100000,
|
|
152
|
+
unit: "sat",
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
expect(await hdWallet.getBalance("sat")).toBe(100000);
|
|
156
|
+
|
|
157
|
+
const depositAddress2 = hdWallet.getDepositAddress();
|
|
158
|
+
expect(depositAddress).not.toBe(depositAddress2);
|
|
159
|
+
|
|
160
|
+
// send more funds to new deposit address
|
|
161
|
+
await fundingWallet.send({
|
|
162
|
+
cashaddr: depositAddress2,
|
|
163
|
+
value: 100000,
|
|
164
|
+
unit: "sat",
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
expect(await hdWallet.getBalance("sat")).toBe(200000);
|
|
168
|
+
|
|
169
|
+
expect(
|
|
170
|
+
await (
|
|
171
|
+
await RegTestWallet.watchOnly(hdWallet.getDepositAddress(0))
|
|
172
|
+
).getBalance("sat")
|
|
173
|
+
).toBe(100000);
|
|
174
|
+
expect(
|
|
175
|
+
await (
|
|
176
|
+
await RegTestWallet.watchOnly(hdWallet.getDepositAddress(1))
|
|
177
|
+
).getBalance("sat")
|
|
178
|
+
).toBe(100000);
|
|
179
|
+
expect(
|
|
180
|
+
await (
|
|
181
|
+
await RegTestWallet.watchOnly(hdWallet.getDepositAddress(2))
|
|
182
|
+
).getBalance("sat")
|
|
183
|
+
).toBe(0);
|
|
184
|
+
|
|
185
|
+
expect(
|
|
186
|
+
await (
|
|
187
|
+
await RegTestWallet.watchOnly(hdWallet.getChangeAddress(0))
|
|
188
|
+
).getBalance("sat")
|
|
189
|
+
).toBe(0);
|
|
190
|
+
|
|
191
|
+
const bob = await RegTestWallet.newRandom();
|
|
192
|
+
|
|
193
|
+
await hdWallet.send({
|
|
194
|
+
cashaddr: bob.getDepositAddress(),
|
|
195
|
+
value: 150000,
|
|
196
|
+
unit: "sat",
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
expect(
|
|
200
|
+
await (
|
|
201
|
+
await RegTestWallet.watchOnly(hdWallet.getDepositAddress(0))
|
|
202
|
+
).getBalance("sat")
|
|
203
|
+
).toBe(0);
|
|
204
|
+
expect(
|
|
205
|
+
await (
|
|
206
|
+
await RegTestWallet.watchOnly(hdWallet.getDepositAddress(1))
|
|
207
|
+
).getBalance("sat")
|
|
208
|
+
).toBe(0);
|
|
209
|
+
expect(
|
|
210
|
+
await (
|
|
211
|
+
await RegTestWallet.watchOnly(hdWallet.getDepositAddress(2))
|
|
212
|
+
).getBalance("sat")
|
|
213
|
+
).toBe(0);
|
|
214
|
+
|
|
215
|
+
expect(
|
|
216
|
+
await (
|
|
217
|
+
await RegTestWallet.watchOnly(hdWallet.getChangeAddress(0))
|
|
218
|
+
).getBalance("sat")
|
|
219
|
+
).toBeGreaterThan(50000 - 1000);
|
|
220
|
+
|
|
221
|
+
expect(hdWallet.getChangeAddress()).not.toBe(hdWallet.getChangeAddress(0));
|
|
222
|
+
expect(hdWallet.getChangeAddress()).toBe(hdWallet.getChangeAddress(1));
|
|
223
|
+
|
|
224
|
+
expect(hdWallet.depositIndex).toBe(2);
|
|
225
|
+
expect(hdWallet.changeIndex).toBe(1);
|
|
226
|
+
|
|
227
|
+
expect(await bob.getBalance("sat")).toBe(150000);
|
|
228
|
+
|
|
229
|
+
expect(await hdWallet.getBalance("sat")).toBe(49639); // minus fees
|
|
230
|
+
|
|
231
|
+
expect((await hdWallet.getMaxAmountToSend()).sat).toBe(49407);
|
|
232
|
+
|
|
233
|
+
const charlie = await RegTestWallet.newRandom();
|
|
234
|
+
await hdWallet.sendMax(charlie.cashaddr);
|
|
235
|
+
|
|
236
|
+
expect(await charlie.getBalance("sat")).toBe(49407);
|
|
237
|
+
expect(await hdWallet.getBalance("sat")).toBe(0);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it("Should build unsigned transactions from an HDWallet", async () => {
|
|
241
|
+
const fundingWallet = await RegTestWallet.fromId(
|
|
242
|
+
"wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
const hdWallet = await RegTestHDWallet.newRandom();
|
|
246
|
+
expect(await hdWallet.getBalance("sat")).toBe(0);
|
|
247
|
+
|
|
248
|
+
const depositAddress = hdWallet.getDepositAddress();
|
|
249
|
+
await fundingWallet.send({
|
|
250
|
+
cashaddr: depositAddress,
|
|
251
|
+
value: 100000,
|
|
252
|
+
unit: "sat",
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
expect(await hdWallet.getBalance("sat")).toBe(100000);
|
|
256
|
+
|
|
257
|
+
const unsignedTx = await hdWallet.send(
|
|
258
|
+
{
|
|
259
|
+
cashaddr: (await RegTestWallet.newRandom()).getDepositAddress(),
|
|
260
|
+
value: 50000,
|
|
261
|
+
unit: "sat",
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
buildUnsigned: true,
|
|
265
|
+
}
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
const tx = assertSuccess(
|
|
269
|
+
decodeTransaction(hexToBin(unsignedTx.unsignedTransaction!))
|
|
270
|
+
);
|
|
271
|
+
expect(tx.inputs.length).toBe(1);
|
|
272
|
+
expect(tx.inputs[0].unlockingBytecode.length).toBe(0); // should be empty
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
it("WalletCache persistence, addresses", async () => {
|
|
276
|
+
const memoryCacheValue = Config.UseMemoryCache;
|
|
277
|
+
Config.UseMemoryCache = true;
|
|
278
|
+
|
|
279
|
+
const hdWallet = await RegTestHDWallet.newRandom();
|
|
280
|
+
|
|
281
|
+
// get some addresses to populate cache
|
|
282
|
+
hdWallet.getDepositAddress(0);
|
|
283
|
+
hdWallet.getDepositAddress(100);
|
|
284
|
+
|
|
285
|
+
hdWallet.getChangeAddress(0);
|
|
286
|
+
hdWallet.getChangeAddress(100);
|
|
287
|
+
|
|
288
|
+
// persist cache
|
|
289
|
+
await hdWallet.walletCache.persist();
|
|
290
|
+
|
|
291
|
+
// check cache data is there in other instance
|
|
292
|
+
const otherWallet = await RegTestHDWallet.fromId(hdWallet.toDbString());
|
|
293
|
+
expect(
|
|
294
|
+
otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))
|
|
295
|
+
).toBeDefined();
|
|
296
|
+
expect(
|
|
297
|
+
otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(99))
|
|
298
|
+
).not.toBeDefined();
|
|
299
|
+
expect(
|
|
300
|
+
otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(100))
|
|
301
|
+
).toBeDefined();
|
|
302
|
+
|
|
303
|
+
expect(
|
|
304
|
+
otherWallet.walletCache.getByAddress(hdWallet.getChangeAddress(0))
|
|
305
|
+
).toBeDefined();
|
|
306
|
+
expect(
|
|
307
|
+
otherWallet.walletCache.getByAddress(hdWallet.getChangeAddress(99))
|
|
308
|
+
).not.toBeDefined();
|
|
309
|
+
expect(
|
|
310
|
+
otherWallet.walletCache.getByAddress(hdWallet.getChangeAddress(100))
|
|
311
|
+
).toBeDefined();
|
|
312
|
+
|
|
313
|
+
Config.UseMemoryCache = memoryCacheValue;
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
it("WalletCache persistence, status and utxo", async () => {
|
|
317
|
+
const memoryCacheValue = Config.UseMemoryCache;
|
|
318
|
+
Config.UseMemoryCache = true;
|
|
319
|
+
|
|
320
|
+
const hdWallet = await RegTestHDWallet.newRandom();
|
|
321
|
+
|
|
322
|
+
// get some addresses to populate cache
|
|
323
|
+
hdWallet.getDepositAddress(0);
|
|
324
|
+
expect(
|
|
325
|
+
hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.status
|
|
326
|
+
).toBeNull();
|
|
327
|
+
|
|
328
|
+
const fundingWallet = await RegTestWallet.fromId(
|
|
329
|
+
"wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
|
|
330
|
+
);
|
|
331
|
+
await fundingWallet.send({
|
|
332
|
+
cashaddr: hdWallet.getDepositAddress(0),
|
|
333
|
+
value: 100000,
|
|
334
|
+
unit: "sat",
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
expect(
|
|
338
|
+
hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.status
|
|
339
|
+
).not.toBeNull();
|
|
340
|
+
expect(
|
|
341
|
+
hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.utxos
|
|
342
|
+
.length
|
|
343
|
+
).toBe(1);
|
|
344
|
+
|
|
345
|
+
// persist cache
|
|
346
|
+
await hdWallet.walletCache.persist();
|
|
347
|
+
|
|
348
|
+
// check cache data is there in other instance
|
|
349
|
+
const otherWallet = await RegTestHDWallet.fromId(hdWallet.toDbString());
|
|
350
|
+
await otherWallet.watchPromise; // ensure any async init is done
|
|
351
|
+
expect(
|
|
352
|
+
otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))
|
|
353
|
+
?.status
|
|
354
|
+
).not.toBeNull();
|
|
355
|
+
expect(
|
|
356
|
+
hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.utxos
|
|
357
|
+
.length
|
|
358
|
+
).toBe(1);
|
|
359
|
+
expect(
|
|
360
|
+
JSON.stringify(
|
|
361
|
+
hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.utxos
|
|
362
|
+
)
|
|
363
|
+
).toBe(
|
|
364
|
+
JSON.stringify(
|
|
365
|
+
otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))
|
|
366
|
+
?.utxos
|
|
367
|
+
)
|
|
368
|
+
);
|
|
369
|
+
|
|
370
|
+
Config.UseMemoryCache = memoryCacheValue;
|
|
371
|
+
});
|
|
372
|
+
});
|