mainnet-js 3.0.0-next.0 → 3.0.0-next.2

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.
Files changed (127) hide show
  1. package/dist/index.html +1 -1
  2. package/dist/{mainnet-3.0.0-next.0.js → mainnet-3.0.0-next.2.js} +21 -41
  3. package/dist/module/cache/walletCache.d.ts +10 -4
  4. package/dist/module/cache/walletCache.d.ts.map +1 -1
  5. package/dist/module/cache/walletCache.js +12 -13
  6. package/dist/module/cache/walletCache.js.map +1 -1
  7. package/dist/module/chain.d.ts +1 -1
  8. package/dist/module/chain.js +1 -1
  9. package/dist/module/chain.js.map +1 -1
  10. package/dist/module/constant.d.ts +1 -1
  11. package/dist/module/constant.d.ts.map +1 -1
  12. package/dist/module/constant.js +1 -1
  13. package/dist/module/constant.js.map +1 -1
  14. package/dist/module/enum.d.ts +1 -7
  15. package/dist/module/enum.d.ts.map +1 -1
  16. package/dist/module/enum.js +0 -6
  17. package/dist/module/enum.js.map +1 -1
  18. package/dist/module/history/getHistory.d.ts.map +1 -1
  19. package/dist/module/history/getHistory.js +17 -47
  20. package/dist/module/history/getHistory.js.map +1 -1
  21. package/dist/module/history/interface.d.ts +1 -1
  22. package/dist/module/history/interface.d.ts.map +1 -1
  23. package/dist/module/interface.d.ts +6 -5
  24. package/dist/module/interface.d.ts.map +1 -1
  25. package/dist/module/interface.js.map +1 -1
  26. package/dist/module/network/ElectrumNetworkProvider.d.ts.map +1 -1
  27. package/dist/module/network/ElectrumNetworkProvider.js +2 -4
  28. package/dist/module/network/ElectrumNetworkProvider.js.map +1 -1
  29. package/dist/module/network/getRelayFeeCache.js +2 -2
  30. package/dist/module/network/getRelayFeeCache.js.map +1 -1
  31. package/dist/module/network/interface.d.ts +2 -2
  32. package/dist/module/network/interface.d.ts.map +1 -1
  33. package/dist/module/rate/ExchangeRate.d.ts +2 -1
  34. package/dist/module/rate/ExchangeRate.d.ts.map +1 -1
  35. package/dist/module/rate/ExchangeRate.js +4 -1
  36. package/dist/module/rate/ExchangeRate.js.map +1 -1
  37. package/dist/module/transaction/Wif.d.ts +9 -9
  38. package/dist/module/transaction/Wif.d.ts.map +1 -1
  39. package/dist/module/transaction/Wif.js +35 -35
  40. package/dist/module/transaction/Wif.js.map +1 -1
  41. package/dist/module/transaction/allocateFee.d.ts +3 -3
  42. package/dist/module/transaction/allocateFee.d.ts.map +1 -1
  43. package/dist/module/transaction/allocateFee.js +5 -6
  44. package/dist/module/transaction/allocateFee.js.map +1 -1
  45. package/dist/module/util/amountInSatoshi.d.ts +1 -1
  46. package/dist/module/util/amountInSatoshi.d.ts.map +1 -1
  47. package/dist/module/util/amountInSatoshi.js +3 -9
  48. package/dist/module/util/amountInSatoshi.js.map +1 -1
  49. package/dist/module/util/asSendRequestObject.d.ts.map +1 -1
  50. package/dist/module/util/asSendRequestObject.js +10 -7
  51. package/dist/module/util/asSendRequestObject.js.map +1 -1
  52. package/dist/module/util/convert.d.ts +3 -0
  53. package/dist/module/util/convert.d.ts.map +1 -1
  54. package/dist/module/util/convert.js +12 -0
  55. package/dist/module/util/convert.js.map +1 -1
  56. package/dist/module/util/index.d.ts +2 -3
  57. package/dist/module/util/index.d.ts.map +1 -1
  58. package/dist/module/util/index.js +2 -3
  59. package/dist/module/util/index.js.map +1 -1
  60. package/dist/module/util/satoshiToAmount.d.ts +1 -1
  61. package/dist/module/util/satoshiToAmount.d.ts.map +1 -1
  62. package/dist/module/util/satoshiToAmount.js +3 -9
  63. package/dist/module/util/satoshiToAmount.js.map +1 -1
  64. package/dist/module/util/sumSendRequestAmounts.d.ts.map +1 -1
  65. package/dist/module/util/sumSendRequestAmounts.js +3 -4
  66. package/dist/module/util/sumSendRequestAmounts.js.map +1 -1
  67. package/dist/module/util/sumUtxoValue.d.ts +1 -1
  68. package/dist/module/util/sumUtxoValue.js +3 -3
  69. package/dist/module/util/sumUtxoValue.js.map +1 -1
  70. package/dist/module/wallet/Base.d.ts +28 -30
  71. package/dist/module/wallet/Base.d.ts.map +1 -1
  72. package/dist/module/wallet/Base.js +82 -119
  73. package/dist/module/wallet/Base.js.map +1 -1
  74. package/dist/module/wallet/HDWallet.d.ts +1 -1
  75. package/dist/module/wallet/Util.js +1 -1
  76. package/dist/module/wallet/Util.js.map +1 -1
  77. package/dist/module/wallet/Wif.d.ts +1 -1
  78. package/dist/module/wallet/interface.d.ts +2 -3
  79. package/dist/module/wallet/interface.d.ts.map +1 -1
  80. package/dist/module/wallet/model.d.ts +53 -41
  81. package/dist/module/wallet/model.d.ts.map +1 -1
  82. package/dist/module/wallet/model.js +14 -22
  83. package/dist/module/wallet/model.js.map +1 -1
  84. package/dist/tsconfig.tsbuildinfo +1 -1
  85. package/package.json +1 -1
  86. package/src/cache/walletCache.ts +23 -36
  87. package/src/chain.ts +1 -1
  88. package/src/constant.ts +1 -1
  89. package/src/enum.ts +0 -6
  90. package/src/history/getHistory.test.ts +20 -34
  91. package/src/history/getHistory.ts +17 -49
  92. package/src/history/interface.ts +1 -1
  93. package/src/interface.ts +6 -5
  94. package/src/network/Connection.test.ts +3 -3
  95. package/src/network/ElectrumNetworkProvider.ts +2 -4
  96. package/src/network/Rpc.test.ts +2 -3
  97. package/src/network/getRelayFeeCache.ts +2 -2
  98. package/src/network/interface.ts +2 -2
  99. package/src/rate/ExchangeRate.test.ts +2 -44
  100. package/src/rate/ExchangeRate.ts +5 -2
  101. package/src/transaction/Wif.ts +50 -45
  102. package/src/transaction/allocateFee.test.ts +110 -131
  103. package/src/transaction/allocateFee.ts +14 -15
  104. package/src/util/amountInSatoshi.test.ts +1 -9
  105. package/src/util/amountInSatoshi.ts +6 -10
  106. package/src/util/asSendRequestObject.ts +12 -7
  107. package/src/util/convert.ts +18 -0
  108. package/src/util/index.ts +2 -7
  109. package/src/util/satoshiToAmount.test.ts +1 -1
  110. package/src/util/satoshiToAmount.ts +4 -10
  111. package/src/util/sumSendRequestAmounts.ts +3 -4
  112. package/src/util/sumUtxoValue.ts +4 -4
  113. package/src/wallet/Base.ts +95 -164
  114. package/src/wallet/Cashtokens.test.headless.js +228 -173
  115. package/src/wallet/Cashtokens.test.ts +506 -406
  116. package/src/wallet/HDWallet.test.ts +223 -68
  117. package/src/wallet/Util.ts +1 -1
  118. package/src/wallet/Wif.test.ts +108 -133
  119. package/src/wallet/interface.ts +2 -3
  120. package/src/wallet/model.test.ts +2 -5
  121. package/src/wallet/model.ts +64 -71
  122. package/dist/module/util/balanceObjectFromSatoshi.d.ts +0 -8
  123. package/dist/module/util/balanceObjectFromSatoshi.d.ts.map +0 -1
  124. package/dist/module/util/balanceObjectFromSatoshi.js +0 -35
  125. package/dist/module/util/balanceObjectFromSatoshi.js.map +0 -1
  126. package/src/util/balanceObjectFromSatoshi.test.ts +0 -58
  127. package/src/util/balanceObjectFromSatoshi.ts +0 -52
@@ -3,6 +3,9 @@ import { HDWallet, RegTestHDWallet } from "./HDWallet";
3
3
  import { RegTestWallet, Wallet } from "./Wif";
4
4
  import { Config } from "../config";
5
5
  import { getNextUnusedIndex } from "../util/hd";
6
+ import { NFTCapability } from "../interface";
7
+ import { TokenMintRequest, TokenSendRequest } from "./model";
8
+ import { stringify } from "../cache";
6
9
 
7
10
  const expectedXpub =
8
11
  "xpub6CGqRCnS5qDfyxtzV3y3tj8CY7qf3z3GiB2qnCUTdNkhpNxbLtobrU5ZXBVPG3rzPcBUpJAoj3K1u1jyDwKuduL71gLPm27Tckc85apgQRr";
@@ -93,7 +96,7 @@ describe("HDWallet", () => {
93
96
  (async () => 1)(),
94
97
  new Promise((resolve) => resolve(2)),
95
98
  ]);
96
- expect(JSON.stringify(result)).toBe(JSON.stringify([1, 2]));
99
+ expect(stringify(result)).toBe(stringify([1, 2]));
97
100
  });
98
101
 
99
102
  it("deposit indexes", async () => {
@@ -106,30 +109,26 @@ describe("HDWallet", () => {
106
109
 
107
110
  await fundingWallet.send({
108
111
  cashaddr: hdWallet.getDepositAddress(0),
109
- value: 100000,
110
- unit: "sat",
112
+ value: 100000n,
111
113
  });
112
114
  expect(hdWallet.depositIndex).toBe(1);
113
115
 
114
116
  await fundingWallet.send({
115
117
  cashaddr: hdWallet.getDepositAddress(1),
116
- value: 100000,
117
- unit: "sat",
118
+ value: 100000n,
118
119
  });
119
120
  expect(hdWallet.depositIndex).toBe(2);
120
121
 
121
122
  await fundingWallet.send({
122
123
  cashaddr: hdWallet.getDepositAddress(4),
123
- value: 100000,
124
- unit: "sat",
124
+ value: 100000n,
125
125
  });
126
126
  expect(hdWallet.depositIndex).toBe(5);
127
127
 
128
128
  // beyond gap size, should not update index
129
129
  await fundingWallet.send({
130
130
  cashaddr: hdWallet.getDepositAddress(30),
131
- value: 100000,
132
- unit: "sat",
131
+ value: 100000n,
133
132
  });
134
133
  expect(hdWallet.depositIndex).toBe(5);
135
134
 
@@ -143,16 +142,15 @@ describe("HDWallet", () => {
143
142
  );
144
143
 
145
144
  const hdWallet = await RegTestHDWallet.newRandom();
146
- expect(await hdWallet.getBalance("sat")).toBe(0);
145
+ expect(await hdWallet.getBalance()).toBe(0n);
147
146
 
148
147
  const depositAddress = hdWallet.getDepositAddress();
149
148
  await fundingWallet.send({
150
149
  cashaddr: depositAddress,
151
- value: 100000,
152
- unit: "sat",
150
+ value: 100000n,
153
151
  });
154
152
 
155
- expect(await hdWallet.getBalance("sat")).toBe(100000);
153
+ expect(await hdWallet.getBalance()).toBe(100000n);
156
154
 
157
155
  const depositAddress2 = hdWallet.getDepositAddress();
158
156
  expect(depositAddress).not.toBe(depositAddress2);
@@ -160,63 +158,61 @@ describe("HDWallet", () => {
160
158
  // send more funds to new deposit address
161
159
  await fundingWallet.send({
162
160
  cashaddr: depositAddress2,
163
- value: 100000,
164
- unit: "sat",
161
+ value: 100000n,
165
162
  });
166
163
 
167
- expect(await hdWallet.getBalance("sat")).toBe(200000);
164
+ expect(await hdWallet.getBalance()).toBe(200000n);
168
165
 
169
166
  expect(
170
167
  await (
171
168
  await RegTestWallet.watchOnly(hdWallet.getDepositAddress(0))
172
- ).getBalance("sat")
173
- ).toBe(100000);
169
+ ).getBalance()
170
+ ).toBe(100000n);
174
171
  expect(
175
172
  await (
176
173
  await RegTestWallet.watchOnly(hdWallet.getDepositAddress(1))
177
- ).getBalance("sat")
178
- ).toBe(100000);
174
+ ).getBalance()
175
+ ).toBe(100000n);
179
176
  expect(
180
177
  await (
181
178
  await RegTestWallet.watchOnly(hdWallet.getDepositAddress(2))
182
- ).getBalance("sat")
183
- ).toBe(0);
179
+ ).getBalance()
180
+ ).toBe(0n);
184
181
 
185
182
  expect(
186
183
  await (
187
184
  await RegTestWallet.watchOnly(hdWallet.getChangeAddress(0))
188
- ).getBalance("sat")
189
- ).toBe(0);
185
+ ).getBalance()
186
+ ).toBe(0n);
190
187
 
191
188
  const bob = await RegTestWallet.newRandom();
192
189
 
193
190
  await hdWallet.send({
194
191
  cashaddr: bob.getDepositAddress(),
195
- value: 150000,
196
- unit: "sat",
192
+ value: 150000n,
197
193
  });
198
194
 
199
195
  expect(
200
196
  await (
201
197
  await RegTestWallet.watchOnly(hdWallet.getDepositAddress(0))
202
- ).getBalance("sat")
203
- ).toBe(0);
198
+ ).getBalance()
199
+ ).toBe(0n);
204
200
  expect(
205
201
  await (
206
202
  await RegTestWallet.watchOnly(hdWallet.getDepositAddress(1))
207
- ).getBalance("sat")
208
- ).toBe(0);
203
+ ).getBalance()
204
+ ).toBe(0n);
209
205
  expect(
210
206
  await (
211
207
  await RegTestWallet.watchOnly(hdWallet.getDepositAddress(2))
212
- ).getBalance("sat")
213
- ).toBe(0);
208
+ ).getBalance()
209
+ ).toBe(0n);
214
210
 
215
211
  expect(
216
212
  await (
217
213
  await RegTestWallet.watchOnly(hdWallet.getChangeAddress(0))
218
- ).getBalance("sat")
219
- ).toBeGreaterThan(50000 - 1000);
214
+ ).getBalance()
215
+ ).toBeGreaterThan(50000n - 1000n);
220
216
 
221
217
  expect(hdWallet.getChangeAddress()).not.toBe(hdWallet.getChangeAddress(0));
222
218
  expect(hdWallet.getChangeAddress()).toBe(hdWallet.getChangeAddress(1));
@@ -224,17 +220,16 @@ describe("HDWallet", () => {
224
220
  expect(hdWallet.depositIndex).toBe(2);
225
221
  expect(hdWallet.changeIndex).toBe(1);
226
222
 
227
- expect(await bob.getBalance("sat")).toBe(150000);
223
+ expect(await bob.getBalance()).toBe(150000n);
228
224
 
229
- expect(await hdWallet.getBalance("sat")).toBe(49639); // minus fees
230
-
231
- expect((await hdWallet.getMaxAmountToSend()).sat).toBe(49407);
225
+ expect(await hdWallet.getBalance()).toBe(49639n); // minus fees
232
226
 
227
+ expect(await hdWallet.getMaxAmountToSend()).toBe(49407n);
233
228
  const charlie = await RegTestWallet.newRandom();
234
229
  await hdWallet.sendMax(charlie.cashaddr);
235
230
 
236
- expect(await charlie.getBalance("sat")).toBe(49407);
237
- expect(await hdWallet.getBalance("sat")).toBe(0);
231
+ expect(await charlie.getBalance()).toBe(49407n);
232
+ expect(await hdWallet.getBalance()).toBe(0n);
238
233
  });
239
234
 
240
235
  it("Should build unsigned transactions from an HDWallet", async () => {
@@ -243,22 +238,20 @@ describe("HDWallet", () => {
243
238
  );
244
239
 
245
240
  const hdWallet = await RegTestHDWallet.newRandom();
246
- expect(await hdWallet.getBalance("sat")).toBe(0);
241
+ expect(await hdWallet.getBalance()).toBe(0n);
247
242
 
248
243
  const depositAddress = hdWallet.getDepositAddress();
249
244
  await fundingWallet.send({
250
245
  cashaddr: depositAddress,
251
- value: 100000,
252
- unit: "sat",
246
+ value: 100000n,
253
247
  });
254
248
 
255
- expect(await hdWallet.getBalance("sat")).toBe(100000);
249
+ expect(await hdWallet.getBalance()).toBe(100000n);
256
250
 
257
251
  const unsignedTx = await hdWallet.send(
258
252
  {
259
253
  cashaddr: (await RegTestWallet.newRandom()).getDepositAddress(),
260
- value: 50000,
261
- unit: "sat",
254
+ value: 50000n,
262
255
  },
263
256
  {
264
257
  buildUnsigned: true,
@@ -291,23 +284,23 @@ describe("HDWallet", () => {
291
284
  // check cache data is there in other instance
292
285
  const otherWallet = await RegTestHDWallet.fromId(hdWallet.toDbString());
293
286
  expect(
294
- otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))
287
+ otherWallet.walletCache.get(hdWallet.getDepositAddress(0))
295
288
  ).toBeDefined();
296
289
  expect(
297
- otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(99))
290
+ otherWallet.walletCache.get(hdWallet.getDepositAddress(99))
298
291
  ).not.toBeDefined();
299
292
  expect(
300
- otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(100))
293
+ otherWallet.walletCache.get(hdWallet.getDepositAddress(100))
301
294
  ).toBeDefined();
302
295
 
303
296
  expect(
304
- otherWallet.walletCache.getByAddress(hdWallet.getChangeAddress(0))
297
+ otherWallet.walletCache.get(hdWallet.getChangeAddress(0))
305
298
  ).toBeDefined();
306
299
  expect(
307
- otherWallet.walletCache.getByAddress(hdWallet.getChangeAddress(99))
300
+ otherWallet.walletCache.get(hdWallet.getChangeAddress(99))
308
301
  ).not.toBeDefined();
309
302
  expect(
310
- otherWallet.walletCache.getByAddress(hdWallet.getChangeAddress(100))
303
+ otherWallet.walletCache.get(hdWallet.getChangeAddress(100))
311
304
  ).toBeDefined();
312
305
 
313
306
  Config.UseMemoryCache = memoryCacheValue;
@@ -322,7 +315,7 @@ describe("HDWallet", () => {
322
315
  // get some addresses to populate cache
323
316
  hdWallet.getDepositAddress(0);
324
317
  expect(
325
- hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.status
318
+ hdWallet.walletCache.get(hdWallet.getDepositAddress(0))?.status
326
319
  ).toBeNull();
327
320
 
328
321
  const fundingWallet = await RegTestWallet.fromId(
@@ -330,16 +323,14 @@ describe("HDWallet", () => {
330
323
  );
331
324
  await fundingWallet.send({
332
325
  cashaddr: hdWallet.getDepositAddress(0),
333
- value: 100000,
334
- unit: "sat",
326
+ value: 100000n,
335
327
  });
336
328
 
337
329
  expect(
338
- hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.status
330
+ hdWallet.walletCache.get(hdWallet.getDepositAddress(0))?.status
339
331
  ).not.toBeNull();
340
332
  expect(
341
- hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.utxos
342
- .length
333
+ hdWallet.walletCache.get(hdWallet.getDepositAddress(0))?.utxos.length
343
334
  ).toBe(1);
344
335
 
345
336
  // persist cache
@@ -349,24 +340,188 @@ describe("HDWallet", () => {
349
340
  const otherWallet = await RegTestHDWallet.fromId(hdWallet.toDbString());
350
341
  await otherWallet.watchPromise; // ensure any async init is done
351
342
  expect(
352
- otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))
353
- ?.status
343
+ otherWallet.walletCache.get(hdWallet.getDepositAddress(0))?.status
354
344
  ).not.toBeNull();
355
345
  expect(
356
- hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.utxos
357
- .length
346
+ hdWallet.walletCache.get(hdWallet.getDepositAddress(0))?.utxos.length
358
347
  ).toBe(1);
359
348
  expect(
360
- JSON.stringify(
361
- hdWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))?.utxos
362
- )
349
+ stringify(hdWallet.walletCache.get(hdWallet.getDepositAddress(0))?.utxos)
363
350
  ).toBe(
364
- JSON.stringify(
365
- otherWallet.walletCache.getByAddress(hdWallet.getDepositAddress(0))
366
- ?.utxos
351
+ stringify(
352
+ otherWallet.walletCache.get(hdWallet.getDepositAddress(0))?.utxos
367
353
  )
368
354
  );
369
355
 
370
356
  Config.UseMemoryCache = memoryCacheValue;
371
357
  });
358
+
359
+ it("Cashtokens integration test", async () => {
360
+ const fundingWallet = await RegTestWallet.fromId(
361
+ "wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
362
+ );
363
+ const alice = await RegTestHDWallet.newRandom();
364
+ await fundingWallet.send({
365
+ cashaddr: alice.getDepositAddress(),
366
+ value: 1000000n,
367
+ });
368
+
369
+ const genesisResponse = await alice.tokenGenesis({
370
+ cashaddr: alice.getDepositAddress(1),
371
+ nft: {
372
+ capability: NFTCapability.minting,
373
+ commitment: "abcd",
374
+ },
375
+ amount: 1000n,
376
+ });
377
+
378
+ const tokenId = genesisResponse.categories![0];
379
+
380
+ await new Promise((resolve) => setTimeout(resolve, 500));
381
+
382
+ // mint 2 NFTs, amount reducing
383
+ const response = await alice.tokenMint(tokenId, [
384
+ new TokenMintRequest({
385
+ cashaddr: alice.getDepositAddress(2),
386
+ nft: {
387
+ capability: NFTCapability.none,
388
+ commitment: "",
389
+ },
390
+ }),
391
+ new TokenMintRequest({
392
+ cashaddr: alice.getDepositAddress(3),
393
+ nft: {
394
+ capability: NFTCapability.mutable,
395
+ commitment: "00",
396
+ },
397
+ }),
398
+ ]);
399
+
400
+ await new Promise((resolve) => setTimeout(resolve, 500));
401
+
402
+ const newTokenUtxos = await alice.getTokenUtxos(tokenId);
403
+ expect(newTokenUtxos.length).toBe(3);
404
+ expect(tokenId).toEqual(response.categories![0]);
405
+
406
+ const bob = await RegTestWallet.newRandom();
407
+ await alice.send([
408
+ new TokenSendRequest({
409
+ cashaddr: bob.cashaddr!,
410
+ category: tokenId,
411
+ nft: {
412
+ capability: NFTCapability.minting,
413
+ commitment: "abcd",
414
+ },
415
+ amount: 1000n,
416
+ }),
417
+ new TokenSendRequest({
418
+ cashaddr: bob.cashaddr!,
419
+ category: tokenId,
420
+ nft: {
421
+ capability: NFTCapability.none,
422
+ commitment: "",
423
+ },
424
+ }),
425
+ new TokenSendRequest({
426
+ cashaddr: bob.cashaddr!,
427
+ category: tokenId,
428
+ nft: {
429
+ capability: NFTCapability.mutable,
430
+ commitment: "00",
431
+ },
432
+ }),
433
+ ]);
434
+
435
+ await new Promise((resolve) => setTimeout(resolve, 500));
436
+
437
+ expect((await alice.getTokenUtxos(tokenId)).length).toBe(0);
438
+ const bobTokenUtxos = await bob.getTokenUtxos(tokenId);
439
+ expect(bobTokenUtxos.length).toBe(3);
440
+ expect(tokenId).toEqual(response.categories![0]);
441
+ });
442
+
443
+ test("Test enforcing token addresses", async () => {
444
+ const fundingWallet = await RegTestWallet.fromId(
445
+ "wif:regtest:cNfsPtqN2bMRS7vH5qd8tR8GMvgXyL5BjnGAKgZ8DYEiCrCCQcP6"
446
+ );
447
+ const alice = await RegTestHDWallet.newRandom();
448
+ await fundingWallet.send({
449
+ cashaddr: alice.getDepositAddress(),
450
+ value: 1000000n,
451
+ });
452
+
453
+ const genesisResponse = await alice.tokenGenesis({
454
+ amount: 100n,
455
+ });
456
+ const category = genesisResponse.categories![0];
457
+
458
+ await new Promise((resolve) => setTimeout(resolve, 500));
459
+
460
+ const previousValue = Config.EnforceCashTokenReceiptAddresses;
461
+
462
+ const wrap = (addr) => {
463
+ return new Promise((resolve) => {
464
+ resolve(new TokenSendRequest({ cashaddr: addr, category: "" }));
465
+ });
466
+ };
467
+
468
+ Config.EnforceCashTokenReceiptAddresses = false;
469
+ await expect(wrap(alice.getDepositAddress())).resolves.not.toThrow();
470
+ await expect(wrap(alice.getTokenDepositAddress())).resolves.not.toThrow();
471
+
472
+ await expect(
473
+ alice.send(
474
+ new TokenSendRequest({
475
+ cashaddr: alice.getDepositAddress(),
476
+ category: category,
477
+ amount: 1n,
478
+ })
479
+ )
480
+ ).resolves.not.toThrow();
481
+
482
+ await new Promise((resolve) => setTimeout(resolve, 500));
483
+
484
+ await expect(
485
+ alice.send(
486
+ new TokenSendRequest({
487
+ cashaddr: alice.getTokenDepositAddress(),
488
+ category: category,
489
+ amount: 2n,
490
+ })
491
+ )
492
+ ).resolves.not.toThrow();
493
+
494
+ await new Promise((resolve) => setTimeout(resolve, 500));
495
+
496
+ Config.EnforceCashTokenReceiptAddresses = true;
497
+ await expect(wrap(alice.getDepositAddress())).rejects.toThrow();
498
+ await expect(wrap(alice.getTokenDepositAddress())).resolves.not.toThrow();
499
+
500
+ await expect(
501
+ (async () =>
502
+ await alice.send(
503
+ new TokenSendRequest({
504
+ cashaddr: alice.getDepositAddress(),
505
+ category: category,
506
+ amount: 1n,
507
+ })
508
+ ))()
509
+ ).rejects.toThrow();
510
+
511
+ await new Promise((resolve) => setTimeout(resolve, 500));
512
+
513
+ await expect(
514
+ alice.send(
515
+ new TokenSendRequest({
516
+ cashaddr: alice.getTokenDepositAddress(),
517
+ category: category,
518
+ amount: 2n,
519
+ })
520
+ )
521
+ ).resolves.not.toThrow();
522
+
523
+ await new Promise((resolve) => setTimeout(resolve, 500));
524
+
525
+ Config.EnforceCashTokenReceiptAddresses = previousValue;
526
+ });
372
527
  });
@@ -142,7 +142,7 @@ export class Util {
142
142
  ],
143
143
  hex: binToHex(output.lockingBytecode),
144
144
  } as ElectrumRawTransactionVoutScriptPubKey,
145
- value: Number(output.valueSatoshis) / bchParam.subUnits,
145
+ value: Number(output.valueSatoshis) / Number(bchParam.subUnits),
146
146
  };
147
147
  }
148
148
  );