mainnet-js 3.0.0-next.1 → 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 (46) hide show
  1. package/dist/index.html +1 -1
  2. package/dist/{mainnet-3.0.0-next.1.js → mainnet-3.0.0-next.2.js} +7 -7
  3. package/dist/module/history/getHistory.js +17 -17
  4. package/dist/module/history/getHistory.js.map +1 -1
  5. package/dist/module/history/interface.d.ts +1 -1
  6. package/dist/module/history/interface.d.ts.map +1 -1
  7. package/dist/module/interface.d.ts +5 -3
  8. package/dist/module/interface.d.ts.map +1 -1
  9. package/dist/module/interface.js.map +1 -1
  10. package/dist/module/network/ElectrumNetworkProvider.d.ts.map +1 -1
  11. package/dist/module/network/ElectrumNetworkProvider.js +1 -3
  12. package/dist/module/network/ElectrumNetworkProvider.js.map +1 -1
  13. package/dist/module/network/interface.d.ts +2 -2
  14. package/dist/module/network/interface.d.ts.map +1 -1
  15. package/dist/module/transaction/Wif.d.ts.map +1 -1
  16. package/dist/module/transaction/Wif.js +25 -23
  17. package/dist/module/transaction/Wif.js.map +1 -1
  18. package/dist/module/util/asSendRequestObject.js +2 -2
  19. package/dist/module/util/asSendRequestObject.js.map +1 -1
  20. package/dist/module/util/sumUtxoValue.js +1 -1
  21. package/dist/module/util/sumUtxoValue.js.map +1 -1
  22. package/dist/module/wallet/Base.d.ts +18 -18
  23. package/dist/module/wallet/Base.d.ts.map +1 -1
  24. package/dist/module/wallet/Base.js +64 -69
  25. package/dist/module/wallet/Base.js.map +1 -1
  26. package/dist/module/wallet/HDWallet.d.ts +1 -1
  27. package/dist/module/wallet/Wif.d.ts +1 -1
  28. package/dist/module/wallet/model.d.ts +41 -25
  29. package/dist/module/wallet/model.d.ts.map +1 -1
  30. package/dist/module/wallet/model.js +10 -14
  31. package/dist/module/wallet/model.js.map +1 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +1 -1
  34. package/src/history/getHistory.ts +17 -17
  35. package/src/history/interface.ts +1 -1
  36. package/src/interface.ts +5 -3
  37. package/src/network/ElectrumNetworkProvider.ts +1 -3
  38. package/src/network/interface.ts +2 -2
  39. package/src/transaction/Wif.ts +27 -23
  40. package/src/util/asSendRequestObject.ts +2 -2
  41. package/src/util/sumUtxoValue.ts +1 -1
  42. package/src/wallet/Base.ts +67 -72
  43. package/src/wallet/Cashtokens.test.headless.js +217 -162
  44. package/src/wallet/Cashtokens.test.ts +470 -369
  45. package/src/wallet/HDWallet.test.ts +36 -24
  46. package/src/wallet/model.ts +49 -41
@@ -31,7 +31,7 @@ describe(`Test cashtokens`, () => {
31
31
  "bchtest:pzszr88euuuy87uarx9krcuh5psy4zzghsm2033xk4"
32
32
  );
33
33
  const utxos = await wallet.getTokenUtxos();
34
- expect(utxos[0].token?.tokenId).toBeDefined();
34
+ expect(utxos[0].token?.category).toBeDefined();
35
35
  });
36
36
 
37
37
  test("Test token genesis and max amount to send", async () => {
@@ -56,10 +56,10 @@ describe(`Test cashtokens`, () => {
56
56
  amount: 100n,
57
57
  });
58
58
 
59
- const tokenId = genesisResponse.tokenIds![0];
60
- const tokenBalance = await alice.getTokenBalance(tokenId);
59
+ const category = genesisResponse.categories![0];
60
+ const tokenBalance = await alice.getTokenBalance(category);
61
61
  expect(tokenBalance).toBe(100n);
62
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
62
+ const tokenUtxos = await alice.getTokenUtxos(category);
63
63
  expect(tokenUtxos.length).toBe(1);
64
64
  await alice.send([
65
65
  new SendRequest({
@@ -69,10 +69,10 @@ describe(`Test cashtokens`, () => {
69
69
  new TokenSendRequest({
70
70
  cashaddr: bob.cashaddr!,
71
71
  amount: 25n,
72
- tokenId: tokenId,
72
+ category: category,
73
73
  }),
74
74
  ]);
75
- expect(await bob.getTokenBalance(tokenId)).toBe(25n);
75
+ expect(await bob.getTokenBalance(category)).toBe(25n);
76
76
  expect(await bob.getBalance()).toBe(5000n);
77
77
 
78
78
  await bob.send(
@@ -81,11 +81,11 @@ describe(`Test cashtokens`, () => {
81
81
  value: 1000n,
82
82
  })
83
83
  );
84
- expect(await bob.getTokenBalance(tokenId)).toBe(25n);
84
+ expect(await bob.getTokenBalance(category)).toBe(25n);
85
85
  expect(await bob.getBalance()).toBe(3780n);
86
86
 
87
87
  await bob.sendMax(alice.cashaddr!);
88
- expect(await bob.getTokenBalance(tokenId)).toBe(25n);
88
+ expect(await bob.getTokenBalance(category)).toBe(25n);
89
89
  expect(await bob.getBalance()).toBe(0n);
90
90
  });
91
91
 
@@ -96,75 +96,75 @@ describe(`Test cashtokens`, () => {
96
96
  amount: 300n,
97
97
  });
98
98
 
99
- const tokenId = genesisResponse.tokenIds![0];
100
- const tokenBalance = await alice.getTokenBalance(tokenId);
99
+ const category = genesisResponse.categories![0];
100
+ const tokenBalance = await alice.getTokenBalance(category);
101
101
  expect(tokenBalance).toBe(300n);
102
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
102
+ const tokenUtxos = await alice.getTokenUtxos(category);
103
103
  expect(tokenUtxos.length).toBe(1);
104
104
  const response = await alice.send([
105
105
  new TokenSendRequest({
106
106
  cashaddr: bob.cashaddr!,
107
107
  amount: 25n,
108
- tokenId: tokenId,
108
+ category: category,
109
109
  }),
110
110
  new TokenSendRequest({
111
111
  cashaddr: alice.cashaddr!,
112
112
  amount: 25n,
113
- tokenId: tokenId,
113
+ category: category,
114
114
  }),
115
115
  new SendRequest({
116
116
  cashaddr: bob.cashaddr!,
117
117
  value: 20000n,
118
118
  }),
119
119
  ]);
120
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
120
+ const newTokenUtxos = await alice.getTokenUtxos(category);
121
121
  expect(newTokenUtxos.length).toBe(2);
122
- expect(await alice.getTokenBalance(tokenId)).toBe(275n);
123
- expect(await bob.getTokenBalance(tokenId)).toBe(25n);
124
- expect(await bob.getNftTokenBalance(tokenId)).toBe(0);
125
- expect((await bob.getAllNftTokenBalances())[tokenId] || 0).toBe(0);
122
+ expect(await alice.getTokenBalance(category)).toBe(275n);
123
+ expect(await bob.getTokenBalance(category)).toBe(25n);
124
+ expect(await bob.getNftTokenBalance(category)).toBe(0);
125
+ expect((await bob.getAllNftTokenBalances())[category] || 0).toBe(0);
126
126
 
127
127
  await alice.send([
128
128
  new TokenSendRequest({
129
129
  cashaddr: bob.cashaddr!,
130
130
  amount: 75n,
131
- tokenId: tokenId,
131
+ category: category,
132
132
  }),
133
133
  new TokenSendRequest({
134
134
  cashaddr: bob.cashaddr!,
135
135
  amount: 100n,
136
- tokenId: tokenId,
136
+ category: category,
137
137
  }),
138
138
  new TokenSendRequest({
139
139
  cashaddr: bob.cashaddr!,
140
140
  amount: 100n,
141
- tokenId: tokenId,
141
+ category: category,
142
142
  }),
143
143
  ]);
144
144
 
145
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
146
- expect(await bob.getTokenBalance(tokenId)).toBe(300n);
145
+ expect(await alice.getTokenBalance(category)).toBe(0n);
146
+ expect(await bob.getTokenBalance(category)).toBe(300n);
147
147
 
148
148
  await bob.tokenBurn({
149
- tokenId: tokenId,
149
+ category: category,
150
150
  amount: 99n,
151
151
  });
152
152
 
153
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
154
- expect(await bob.getTokenBalance(tokenId)).toBe(201n);
153
+ expect(await alice.getTokenBalance(category)).toBe(0n);
154
+ expect(await bob.getTokenBalance(category)).toBe(201n);
155
155
 
156
156
  await bob.tokenBurn({
157
- tokenId: tokenId,
157
+ category: category,
158
158
  amount: 200n,
159
159
  });
160
160
 
161
- expect(await bob.getTokenBalance(tokenId)).toBe(1n);
161
+ expect(await bob.getTokenBalance(category)).toBe(1n);
162
162
 
163
163
  await bob.tokenBurn({
164
- tokenId: tokenId,
164
+ category: category,
165
165
  amount: 1n,
166
166
  });
167
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
167
+ expect(await bob.getTokenBalance(category)).toBe(0n);
168
168
  });
169
169
 
170
170
  test("Test NFT cashtoken genesis and sending", async () => {
@@ -172,56 +172,65 @@ describe(`Test cashtokens`, () => {
172
172
  const bob = await RegTestWallet.newRandom();
173
173
  const genesisResponse = await alice.tokenGenesis({
174
174
  cashaddr: alice.cashaddr!,
175
- capability: NFTCapability.mutable,
176
- commitment: "abcd",
175
+ nft: {
176
+ capability: NFTCapability.mutable,
177
+ commitment: "abcd",
178
+ },
177
179
  });
178
180
 
179
- const tokenId = genesisResponse.tokenIds![0];
180
- const tokenBalance = await alice.getTokenBalance(tokenId);
181
+ const category = genesisResponse.categories![0];
182
+ const tokenBalance = await alice.getTokenBalance(category);
181
183
  expect(tokenBalance).toBe(0n);
182
- const nftTokenBalance = await alice.getNftTokenBalance(tokenId);
184
+ const nftTokenBalance = await alice.getNftTokenBalance(category);
183
185
  expect(nftTokenBalance).toBe(1);
184
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
186
+ const tokenUtxos = await alice.getTokenUtxos(category);
185
187
  expect(tokenUtxos.length).toBe(1);
186
188
  const response = await alice.send([
187
- {
189
+ new TokenSendRequest({
188
190
  cashaddr: bob.cashaddr!,
189
- tokenId: tokenId,
190
- capability: NFTCapability.mutable,
191
- commitment: "abcd",
192
- } as any,
191
+ category: category,
192
+ nft: {
193
+ capability: NFTCapability.mutable,
194
+ commitment: "abcd",
195
+ },
196
+ }),
193
197
  ]);
194
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
195
- expect(await alice.getNftTokenBalance(tokenId)).toBe(0);
196
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
198
+ expect(await alice.getTokenBalance(category)).toBe(0n);
199
+ expect(await alice.getNftTokenBalance(category)).toBe(0);
200
+ const newTokenUtxos = await alice.getTokenUtxos(category);
197
201
  expect(newTokenUtxos.length).toBe(0);
198
202
 
199
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
200
- const bobTokenUtxos = await bob.getTokenUtxos(tokenId);
203
+ expect(await bob.getTokenBalance(category)).toBe(0n);
204
+ const bobTokenUtxos = await bob.getTokenUtxos(category);
201
205
  expect(bobTokenUtxos.length).toBe(1);
202
- expect(tokenId).toEqual(response.tokenIds![0]);
203
- expect(bobTokenUtxos[0].token?.commitment).toEqual("abcd");
206
+ expect(category).toEqual(response.categories![0]);
207
+ expect(bobTokenUtxos[0].token?.nft?.commitment).toEqual("abcd");
204
208
  });
205
209
 
206
210
  test("Test immutable NFT cashtoken genesis and sending, error on mutation", async () => {
207
211
  const alice = await RegTestWallet.fromId(process.env.ALICE_ID!);
208
212
  const genesisResponse = await alice.tokenGenesis({
209
213
  cashaddr: alice.cashaddr!,
210
- capability: NFTCapability.none,
211
- commitment: "abcd",
214
+ nft: {
215
+ capability: NFTCapability.none,
216
+ commitment: "abcd",
217
+ },
212
218
  });
213
219
 
214
- const tokenId = genesisResponse.tokenIds![0];
215
- const tokenBalance = await alice.getTokenBalance(tokenId);
220
+ const category = genesisResponse.categories![0];
221
+ const tokenBalance = await alice.getTokenBalance(category);
216
222
  expect(tokenBalance).toBe(0n);
217
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
223
+ const tokenUtxos = await alice.getTokenUtxos(category);
218
224
  expect(tokenUtxos.length).toBe(1);
219
225
  await expect(
220
226
  alice.send([
221
227
  new TokenSendRequest({
222
228
  cashaddr: alice.cashaddr!,
223
- tokenId: tokenId,
224
- commitment: "abcd02",
229
+ category: category,
230
+ nft: {
231
+ capability: NFTCapability.none,
232
+ commitment: "abcd02",
233
+ },
225
234
  }),
226
235
  ])
227
236
  ).rejects.toThrow("No suitable token utxos available to send token");
@@ -231,108 +240,128 @@ describe(`Test cashtokens`, () => {
231
240
  const alice = await RegTestWallet.fromId(process.env.ALICE_ID!);
232
241
  const genesisResponse = await alice.tokenGenesis({
233
242
  cashaddr: alice.cashaddr!,
234
- capability: NFTCapability.mutable,
235
- commitment: "abcd",
243
+ nft: {
244
+ capability: NFTCapability.mutable,
245
+ commitment: "abcd",
246
+ },
236
247
  });
237
248
 
238
- const tokenId = genesisResponse.tokenIds![0];
239
- const tokenBalance = await alice.getTokenBalance(tokenId);
249
+ const category = genesisResponse.categories![0];
250
+ const tokenBalance = await alice.getTokenBalance(category);
240
251
  expect(tokenBalance).toBe(0n);
241
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
252
+ const tokenUtxos = await alice.getTokenUtxos(category);
242
253
  expect(tokenUtxos.length).toBe(1);
243
254
  const response = await alice.send([
244
255
  new TokenSendRequest({
245
256
  cashaddr: alice.cashaddr!,
246
- tokenId: tokenId,
247
- capability: NFTCapability.mutable,
248
- commitment: "abcd02",
257
+ category: category,
258
+ nft: {
259
+ capability: NFTCapability.mutable,
260
+ commitment: "abcd02",
261
+ },
249
262
  }),
250
263
  ]);
251
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
252
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
264
+ expect(await alice.getTokenBalance(category)).toBe(0n);
265
+ const newTokenUtxos = await alice.getTokenUtxos(category);
253
266
  expect(newTokenUtxos.length).toBe(1);
254
- expect(tokenId).toEqual(response.tokenIds![0]);
255
- expect(newTokenUtxos[0].token?.commitment).toEqual("abcd02");
267
+ expect(category).toEqual(response.categories![0]);
268
+ expect(newTokenUtxos[0].token?.nft?.commitment).toEqual("abcd02");
256
269
  });
257
270
 
258
271
  test("Test minting NFT cashtoken genesis and minting", async () => {
259
272
  const alice = await RegTestWallet.fromId(process.env.ALICE_ID!);
260
273
  const genesisResponse = await alice.tokenGenesis({
261
274
  cashaddr: alice.cashaddr!,
262
- capability: NFTCapability.minting,
263
- commitment: "abcd",
275
+ nft: {
276
+ capability: NFTCapability.minting,
277
+ commitment: "abcd",
278
+ },
264
279
  });
265
280
 
266
- const tokenId = genesisResponse.tokenIds![0];
267
- const tokenBalance = await alice.getTokenBalance(tokenId);
281
+ const category = genesisResponse.categories![0];
282
+ const tokenBalance = await alice.getTokenBalance(category);
268
283
  expect(tokenBalance).toBe(0n);
269
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
284
+ const tokenUtxos = await alice.getTokenUtxos(category);
270
285
  expect(tokenUtxos.length).toBe(1);
271
- const response = await alice.tokenMint(tokenId, [
286
+ const response = await alice.tokenMint(category, [
272
287
  new TokenMintRequest({
273
288
  cashaddr: alice.cashaddr!,
274
- commitment: "test",
275
- capability: NFTCapability.none,
289
+ nft: {
290
+ commitment: "test",
291
+ capability: NFTCapability.none,
292
+ },
276
293
  }),
277
294
  new TokenMintRequest({
278
295
  cashaddr: alice.cashaddr!,
279
- commitment: "test2",
280
- capability: NFTCapability.none,
296
+ nft: {
297
+ commitment: "test2",
298
+ capability: NFTCapability.none,
299
+ },
281
300
  }),
282
301
  ]);
283
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
284
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
302
+ expect(await alice.getTokenBalance(category)).toBe(0n);
303
+ const newTokenUtxos = await alice.getTokenUtxos(category);
285
304
  expect(newTokenUtxos.length).toBe(3);
286
- expect(tokenId).toEqual(response.tokenIds![0]);
305
+ expect(category).toEqual(response.categories![0]);
287
306
  });
288
307
 
289
308
  test("Test minting semifungible tokens and sending them", async () => {
290
309
  const alice = await RegTestWallet.fromId(process.env.ALICE_ID!);
291
310
  const genesisResponse = await alice.tokenGenesis({
292
311
  cashaddr: alice.cashaddr!,
293
- capability: NFTCapability.minting,
294
- commitment: "abcd",
312
+ nft: {
313
+ capability: NFTCapability.minting,
314
+ commitment: "abcd",
315
+ },
295
316
  });
296
317
 
297
- const tokenId = genesisResponse.tokenIds![0];
318
+ const category = genesisResponse.categories![0];
298
319
 
299
320
  // mint 2 NFTs, amount reducing
300
- const response = await alice.tokenMint(tokenId, [
321
+ const response = await alice.tokenMint(category, [
301
322
  new TokenMintRequest({
302
323
  cashaddr: alice.cashaddr!,
303
- capability: NFTCapability.none,
304
- commitment: "0a",
324
+ nft: {
325
+ capability: NFTCapability.none,
326
+ commitment: "0a",
327
+ },
305
328
  }),
306
329
  new TokenMintRequest({
307
330
  cashaddr: alice.cashaddr!,
308
- capability: NFTCapability.none,
309
- commitment: "0a",
331
+ nft: {
332
+ capability: NFTCapability.none,
333
+ commitment: "0a",
334
+ },
310
335
  }),
311
336
  ]);
312
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
337
+ const newTokenUtxos = await alice.getTokenUtxos(category);
313
338
  expect(newTokenUtxos.length).toBe(3);
314
- expect(tokenId).toEqual(response.tokenIds![0]);
339
+ expect(category).toEqual(response.categories![0]);
315
340
 
316
341
  const bob = await RegTestWallet.newRandom();
317
342
  await alice.send([
318
343
  new TokenSendRequest({
319
344
  cashaddr: bob.cashaddr!,
320
- tokenId: tokenId,
321
- capability: NFTCapability.none,
322
- commitment: "0a",
345
+ category: category,
346
+ nft: {
347
+ capability: NFTCapability.none,
348
+ commitment: "0a",
349
+ },
323
350
  }),
324
351
  new TokenSendRequest({
325
352
  cashaddr: bob.cashaddr!,
326
- tokenId: tokenId,
327
- capability: NFTCapability.none,
328
- commitment: "0a",
353
+ category: category,
354
+ nft: {
355
+ capability: NFTCapability.none,
356
+ commitment: "0a",
357
+ },
329
358
  }),
330
359
  ]);
331
360
 
332
- expect((await alice.getTokenUtxos(tokenId)).length).toBe(1);
333
- const bobTokenUtxos = await bob.getTokenUtxos(tokenId);
361
+ expect((await alice.getTokenUtxos(category)).length).toBe(1);
362
+ const bobTokenUtxos = await bob.getTokenUtxos(category);
334
363
  expect(bobTokenUtxos.length).toBe(2);
335
- expect(tokenId).toEqual(response.tokenIds![0]);
364
+ expect(category).toEqual(response.categories![0]);
336
365
  });
337
366
 
338
367
  test("Test minting NFT and optionally burning FT cashtoken", async () => {
@@ -340,87 +369,103 @@ describe(`Test cashtokens`, () => {
340
369
  const genesisResponse = await alice.tokenGenesis({
341
370
  cashaddr: alice.cashaddr!,
342
371
  amount: 4n,
343
- capability: NFTCapability.minting,
344
- commitment: "abcd",
372
+ nft: {
373
+ capability: NFTCapability.minting,
374
+ commitment: "abcd",
375
+ },
345
376
  });
346
377
 
347
- const tokenId = genesisResponse.tokenIds![0];
348
- const tokenBalance = await alice.getTokenBalance(tokenId);
378
+ const category = genesisResponse.categories![0];
379
+ const tokenBalance = await alice.getTokenBalance(category);
349
380
  expect(tokenBalance).toBe(4n);
350
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
381
+ const tokenUtxos = await alice.getTokenUtxos(category);
351
382
  expect(tokenUtxos.length).toBe(1);
352
383
 
353
384
  // mint 2 NFTs, amount reducing
354
385
  const response = await alice.tokenMint(
355
- tokenId,
386
+ category,
356
387
  [
357
388
  new TokenMintRequest({
358
389
  cashaddr: alice.cashaddr!,
359
- capability: NFTCapability.none,
360
- commitment: "0a",
390
+ nft: {
391
+ capability: NFTCapability.none,
392
+ commitment: "0a",
393
+ },
361
394
  }),
362
395
  new TokenMintRequest({
363
396
  cashaddr: alice.cashaddr!,
364
- capability: NFTCapability.none,
365
- commitment: "0b",
397
+ nft: {
398
+ capability: NFTCapability.none,
399
+ commitment: "0b",
400
+ },
366
401
  }),
367
402
  ],
368
403
  true
369
404
  );
370
- expect(await alice.getTokenBalance(tokenId)).toBe(2n);
371
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
405
+ expect(await alice.getTokenBalance(category)).toBe(2n);
406
+ const newTokenUtxos = await alice.getTokenUtxos(category);
372
407
  expect(newTokenUtxos.length).toBe(3);
373
- expect(tokenId).toEqual(response.tokenIds![0]);
408
+ expect(category).toEqual(response.categories![0]);
374
409
 
375
410
  // mint 2 more NFTs without amount reducing
376
411
  const ftResponse = await alice.tokenMint(
377
- tokenId,
412
+ category,
378
413
  [
379
414
  new TokenMintRequest({
380
415
  cashaddr: alice.cashaddr!,
381
- capability: NFTCapability.none,
382
- commitment: "0c",
416
+ nft: {
417
+ capability: NFTCapability.none,
418
+ commitment: "0c",
419
+ },
383
420
  }),
384
421
  new TokenMintRequest({
385
422
  cashaddr: alice.cashaddr!,
386
- capability: NFTCapability.none,
387
- commitment: "0d",
423
+ nft: {
424
+ capability: NFTCapability.none,
425
+ commitment: "0d",
426
+ },
388
427
  }),
389
428
  ],
390
429
  false
391
430
  );
392
- expect(await alice.getTokenBalance(tokenId)).toBe(2n);
393
- const ftTokenUtxos = await alice.getTokenUtxos(tokenId);
431
+ expect(await alice.getTokenBalance(category)).toBe(2n);
432
+ const ftTokenUtxos = await alice.getTokenUtxos(category);
394
433
  expect(ftTokenUtxos.length).toBe(5);
395
- expect(tokenId).toEqual(ftResponse.tokenIds![0]);
434
+ expect(category).toEqual(ftResponse.categories![0]);
396
435
 
397
436
  // we are going to hit amount -1, when minting 3 more NFTs
398
437
  // check that it will stop at 0
399
438
  const ft2Response = await alice.tokenMint(
400
- tokenId,
439
+ category,
401
440
  [
402
441
  new TokenMintRequest({
403
442
  cashaddr: alice.cashaddr!,
404
- capability: NFTCapability.none,
405
- commitment: "0a",
443
+ nft: {
444
+ capability: NFTCapability.none,
445
+ commitment: "0a",
446
+ },
406
447
  }),
407
448
  new TokenMintRequest({
408
449
  cashaddr: alice.cashaddr!,
409
- capability: NFTCapability.none,
410
- commitment: "0a",
450
+ nft: {
451
+ capability: NFTCapability.none,
452
+ commitment: "0a",
453
+ },
411
454
  }),
412
455
  new TokenMintRequest({
413
456
  cashaddr: alice.cashaddr!,
414
- capability: NFTCapability.none,
415
- commitment: "0a",
457
+ nft: {
458
+ capability: NFTCapability.none,
459
+ commitment: "0a",
460
+ },
416
461
  }),
417
462
  ],
418
463
  true
419
464
  );
420
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
421
- const ft2TokenUtxos = await alice.getTokenUtxos(tokenId);
465
+ expect(await alice.getTokenBalance(category)).toBe(0n);
466
+ const ft2TokenUtxos = await alice.getTokenUtxos(category);
422
467
  expect(ft2TokenUtxos.length).toBe(8);
423
- expect(tokenId).toEqual(ft2Response.tokenIds![0]);
468
+ expect(category).toEqual(ft2Response.categories![0]);
424
469
  });
425
470
 
426
471
  test("Test explicit burning of FT", async () => {
@@ -430,16 +475,16 @@ describe(`Test cashtokens`, () => {
430
475
  amount: 4n,
431
476
  });
432
477
 
433
- const tokenId = genesisResponse.tokenIds![0];
434
- const tokenBalance = await alice.getTokenBalance(tokenId);
478
+ const category = genesisResponse.categories![0];
479
+ const tokenBalance = await alice.getTokenBalance(category);
435
480
  expect(tokenBalance).toBe(4n);
436
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
481
+ const tokenUtxos = await alice.getTokenUtxos(category);
437
482
  expect(tokenUtxos.length).toBe(1);
438
483
 
439
484
  // burn 5 FT
440
485
  const response = await alice.tokenBurn(
441
486
  {
442
- tokenId: tokenId,
487
+ category: category,
443
488
  amount: 5n,
444
489
  },
445
490
  "burn"
@@ -451,10 +496,10 @@ describe(`Test cashtokens`, () => {
451
496
  expect(rawTx!.vout[0].scriptPubKey.hex).toContain(
452
497
  binToHex(utf8ToBin("burn"))
453
498
  );
454
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
455
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
499
+ expect(await alice.getTokenBalance(category)).toBe(0n);
500
+ const newTokenUtxos = await alice.getTokenUtxos(category);
456
501
  expect(newTokenUtxos.length).toBe(0);
457
- expect(tokenId).toEqual(response.tokenIds![0]);
502
+ expect(category).toEqual(response.categories![0]);
458
503
  });
459
504
 
460
505
  test("Test explicit burning of FT and NFT", async () => {
@@ -462,23 +507,27 @@ describe(`Test cashtokens`, () => {
462
507
  const genesisResponse = await alice.tokenGenesis({
463
508
  cashaddr: alice.cashaddr!,
464
509
  amount: 4n,
465
- capability: NFTCapability.minting,
466
- commitment: "abcd",
510
+ nft: {
511
+ capability: NFTCapability.minting,
512
+ commitment: "abcd",
513
+ },
467
514
  });
468
515
 
469
- const tokenId = genesisResponse.tokenIds![0];
470
- const tokenBalance = await alice.getTokenBalance(tokenId);
516
+ const category = genesisResponse.categories![0];
517
+ const tokenBalance = await alice.getTokenBalance(category);
471
518
  expect(tokenBalance).toBe(4n);
472
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
519
+ const tokenUtxos = await alice.getTokenUtxos(category);
473
520
  expect(tokenUtxos.length).toBe(1);
474
521
 
475
522
  // burn 1 FT
476
523
  const response = await alice.tokenBurn(
477
524
  {
478
- tokenId: tokenId,
525
+ category: category,
479
526
  amount: 1n,
480
- capability: NFTCapability.minting,
481
- commitment: "abcd",
527
+ nft: {
528
+ capability: NFTCapability.minting,
529
+ commitment: "abcd",
530
+ },
482
531
  },
483
532
  "burn"
484
533
  );
@@ -489,45 +538,49 @@ describe(`Test cashtokens`, () => {
489
538
  expect(rawTx!.vout[0].scriptPubKey.hex).toContain(
490
539
  binToHex(utf8ToBin("burn"))
491
540
  );
492
- expect(await alice.getTokenBalance(tokenId)).toBe(3n);
493
- expect((await alice.getAllTokenBalances())[tokenId]).toBe(3n);
494
- const newTokenUtxos = await alice.getTokenUtxos(tokenId);
541
+ expect(await alice.getTokenBalance(category)).toBe(3n);
542
+ expect((await alice.getAllTokenBalances())[category]).toBe(3n);
543
+ const newTokenUtxos = await alice.getTokenUtxos(category);
495
544
  expect(newTokenUtxos.length).toBe(1);
496
- expect(await alice.getNftTokenBalance(tokenId)).toBe(1);
497
- expect((await alice.getAllNftTokenBalances())[tokenId || 0]).toBe(1);
498
- expect(tokenId).toEqual(response.tokenIds![0]);
545
+ expect(await alice.getNftTokenBalance(category)).toBe(1);
546
+ expect((await alice.getAllNftTokenBalances())[category || 0]).toBe(1);
547
+ expect(category).toEqual(response.categories![0]);
499
548
 
500
549
  // burn the rest FTs
501
550
  const ftResponse = await alice.tokenBurn(
502
551
  {
503
- tokenId: tokenId,
552
+ category: category,
504
553
  amount: 5n,
505
- capability: NFTCapability.minting,
506
- commitment: "abcd",
554
+ nft: {
555
+ capability: NFTCapability.minting,
556
+ commitment: "abcd",
557
+ },
507
558
  },
508
559
  "burn"
509
560
  );
510
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
511
- const ftTokenUtxos = await alice.getTokenUtxos(tokenId);
561
+ expect(await alice.getTokenBalance(category)).toBe(0n);
562
+ const ftTokenUtxos = await alice.getTokenUtxos(category);
512
563
  expect(ftTokenUtxos.length).toBe(1);
513
- expect(tokenId).toEqual(ftResponse.tokenIds![0]);
564
+ expect(category).toEqual(ftResponse.categories![0]);
514
565
 
515
566
  // burn the NFT too
516
567
  const nftResponse = await alice.tokenBurn(
517
568
  {
518
- tokenId: tokenId,
519
- capability: NFTCapability.minting,
520
- commitment: "abcd",
569
+ category: category,
570
+ nft: {
571
+ capability: NFTCapability.minting,
572
+ commitment: "abcd",
573
+ },
521
574
  },
522
575
  "burn"
523
576
  );
524
- expect(await alice.getTokenBalance(tokenId)).toBe(0n);
525
- expect((await alice.getAllTokenBalances())[tokenId] || 0n).toBe(0n);
526
- const nftTokenUtxos = await alice.getTokenUtxos(tokenId);
577
+ expect(await alice.getTokenBalance(category)).toBe(0n);
578
+ expect((await alice.getAllTokenBalances())[category] || 0n).toBe(0n);
579
+ const nftTokenUtxos = await alice.getTokenUtxos(category);
527
580
  expect(nftTokenUtxos.length).toBe(0);
528
- expect(tokenId).toEqual(nftResponse.tokenIds![0]);
529
- expect(await alice.getNftTokenBalance(tokenId)).toBe(0);
530
- expect((await alice.getAllNftTokenBalances())[tokenId] || 0).toBe(0);
581
+ expect(category).toEqual(nftResponse.categories![0]);
582
+ expect(await alice.getNftTokenBalance(category)).toBe(0);
583
+ expect((await alice.getAllNftTokenBalances())[category] || 0).toBe(0);
531
584
  });
532
585
 
533
586
  test("Test cashtoken satoshi values and fee calculations", async () => {
@@ -539,10 +592,10 @@ describe(`Test cashtokens`, () => {
539
592
  cashaddr: bob.cashaddr!,
540
593
  });
541
594
 
542
- const tokenId = genesisResponse.tokenIds![0];
543
- const tokenBalance = await bob.getTokenBalance(tokenId);
595
+ const category = genesisResponse.categories![0];
596
+ const tokenBalance = await bob.getTokenBalance(category);
544
597
  expect(tokenBalance).toBe(100n);
545
- const tokenUtxos = await bob.getTokenUtxos(tokenId);
598
+ const tokenUtxos = await bob.getTokenUtxos(category);
546
599
  expect(tokenUtxos.length).toBe(1);
547
600
  expect(tokenUtxos[0].satoshis).toBe(7000n);
548
601
 
@@ -551,13 +604,13 @@ describe(`Test cashtokens`, () => {
551
604
  new TokenSendRequest({
552
605
  cashaddr: bob.cashaddr!,
553
606
  amount: 100n,
554
- tokenId: tokenId,
607
+ category: category,
555
608
  value: 1500n,
556
609
  }),
557
610
  ]);
558
- let newTokenUtxos = await bob.getTokenUtxos(tokenId);
611
+ let newTokenUtxos = await bob.getTokenUtxos(category);
559
612
  expect(newTokenUtxos.length).toBe(1);
560
- expect(await bob.getTokenBalance(tokenId)).toBe(100n);
613
+ expect(await bob.getTokenBalance(category)).toBe(100n);
561
614
 
562
615
  let bobUtxos = await bob.getAddressUtxos(bob.cashaddr!);
563
616
  expect(bobUtxos.length).toBe(2);
@@ -569,13 +622,13 @@ describe(`Test cashtokens`, () => {
569
622
  new TokenSendRequest({
570
623
  cashaddr: bob.cashaddr!,
571
624
  amount: 100n,
572
- tokenId: tokenId,
625
+ category: category,
573
626
  value: 3000n,
574
627
  }),
575
628
  ]);
576
- newTokenUtxos = await bob.getTokenUtxos(tokenId);
629
+ newTokenUtxos = await bob.getTokenUtxos(category);
577
630
  expect(newTokenUtxos.length).toBe(1);
578
- expect(await bob.getTokenBalance(tokenId)).toBe(100n);
631
+ expect(await bob.getTokenBalance(category)).toBe(100n);
579
632
 
580
633
  bobUtxos = await bob.getAddressUtxos(bob.cashaddr!);
581
634
  expect(bobUtxos.length).toBe(2);
@@ -590,15 +643,17 @@ describe(`Test cashtokens`, () => {
590
643
  const genesisResponse = await alice.tokenGenesis({
591
644
  amount: 100n,
592
645
  value: 5000n,
593
- capability: NFTCapability.minting,
594
- commitment: "test",
646
+ nft: {
647
+ capability: NFTCapability.minting,
648
+ commitment: "test",
649
+ },
595
650
  cashaddr: alice.cashaddr!,
596
651
  });
597
652
 
598
- const tokenId = genesisResponse.tokenIds![0];
599
- const tokenBalance = await alice.getTokenBalance(tokenId);
653
+ const category = genesisResponse.categories![0];
654
+ const tokenBalance = await alice.getTokenBalance(category);
600
655
  expect(tokenBalance).toBe(100n);
601
- const tokenUtxos = await alice.getTokenUtxos(tokenId);
656
+ const tokenUtxos = await alice.getTokenUtxos(category);
602
657
  expect(tokenUtxos.length).toBe(1);
603
658
  expect(tokenUtxos[0].satoshis).toBe(5000n);
604
659
 
@@ -610,16 +665,18 @@ describe(`Test cashtokens`, () => {
610
665
  new TokenSendRequest({
611
666
  cashaddr: bob.cashaddr!,
612
667
  amount: 100n,
613
- tokenId: tokenId,
668
+ category: category,
614
669
  value: 1500n,
615
- capability: NFTCapability.minting,
616
- commitment: "test",
670
+ nft: {
671
+ capability: NFTCapability.minting,
672
+ commitment: "test",
673
+ },
617
674
  }),
618
675
  ])),
619
676
  0
620
677
  );
621
678
 
622
- const cancel = await bob.watchTokenBalance(tokenId, (balance) => {
679
+ const cancel = await bob.watchTokenBalance(category, (balance) => {
623
680
  seenBalance = balance;
624
681
  });
625
682
 
@@ -628,7 +685,7 @@ describe(`Test cashtokens`, () => {
628
685
  bobTxId = tx.txid;
629
686
  });
630
687
 
631
- const balance = await bob.waitForTokenBalance(tokenId, 100n);
688
+ const balance = await bob.waitForTokenBalance(category, 100n);
632
689
  await delay(500);
633
690
  expect(balance).toBe(100n);
634
691
  expect(seenBalance).toBe(100n);
@@ -650,21 +707,21 @@ describe(`Test cashtokens`, () => {
650
707
  amount: 100n,
651
708
  });
652
709
 
653
- const tokenId = genesisResponse.tokenIds![0];
654
- const tokenBalance = await bob.getTokenBalance(tokenId);
710
+ const category = genesisResponse.categories![0];
711
+ const tokenBalance = await bob.getTokenBalance(category);
655
712
 
656
713
  expect(tokenBalance).toBe(100n);
657
- const tokenUtxos = await bob.getTokenUtxos(tokenId);
714
+ const tokenUtxos = await bob.getTokenUtxos(category);
658
715
  expect(tokenUtxos.length).toBe(1);
659
716
 
660
717
  const genesis2Response = await bob.tokenGenesis({
661
718
  amount: 200n,
662
719
  });
663
720
 
664
- const tokenId2 = genesis2Response.tokenIds![0];
665
- const tokenBalance2 = await bob.getTokenBalance(tokenId2);
721
+ const category2 = genesis2Response.categories![0];
722
+ const tokenBalance2 = await bob.getTokenBalance(category2);
666
723
  expect(tokenBalance2).toBe(200n);
667
- const tokenUtxos2 = await bob.getTokenUtxos(tokenId2);
724
+ const tokenUtxos2 = await bob.getTokenUtxos(category2);
668
725
  expect(tokenUtxos2.length).toBe(1);
669
726
 
670
727
  expect((await bob.getTokenUtxos()).length).toBe(2);
@@ -682,21 +739,21 @@ describe(`Test cashtokens`, () => {
682
739
  amount: 100n,
683
740
  });
684
741
 
685
- const tokenId = genesisResponse.tokenIds![0];
686
- const tokenBalance = await bob.getTokenBalance(tokenId);
742
+ const category = genesisResponse.categories![0];
743
+ const tokenBalance = await bob.getTokenBalance(category);
687
744
 
688
745
  expect(tokenBalance).toBe(100n);
689
- const tokenUtxos = await bob.getTokenUtxos(tokenId);
746
+ const tokenUtxos = await bob.getTokenUtxos(category);
690
747
  expect(tokenUtxos.length).toBe(1);
691
748
 
692
749
  const genesis2Response = await bob.tokenGenesis({
693
750
  amount: 200n,
694
751
  });
695
752
 
696
- const tokenId2 = genesis2Response.tokenIds![0];
697
- const tokenBalance2 = await bob.getTokenBalance(tokenId2);
753
+ const category2 = genesis2Response.categories![0];
754
+ const tokenBalance2 = await bob.getTokenBalance(category2);
698
755
  expect(tokenBalance2).toBe(200n);
699
- const tokenUtxos2 = await bob.getTokenUtxos(tokenId2);
756
+ const tokenUtxos2 = await bob.getTokenUtxos(category2);
700
757
  expect(tokenUtxos2.length).toBe(1);
701
758
 
702
759
  expect((await bob.getTokenUtxos()).length).toBe(2);
@@ -704,13 +761,13 @@ describe(`Test cashtokens`, () => {
704
761
  const charlie = await RegTestWallet.newRandom();
705
762
  await bob.send({
706
763
  cashaddr: charlie.cashaddr!,
707
- tokenId: tokenId,
764
+ category: category,
708
765
  amount: 50n,
709
766
  });
710
767
  expect((await bob.getTokenUtxos()).length).toBe(2);
711
768
  expect((await charlie.getTokenUtxos()).length).toBe(1);
712
- expect(await bob.getTokenBalance(tokenId)).toBe(50n);
713
- expect(await charlie.getTokenBalance(tokenId)).toBe(50n);
769
+ expect(await bob.getTokenBalance(category)).toBe(50n);
770
+ expect(await charlie.getTokenBalance(category)).toBe(50n);
714
771
  });
715
772
 
716
773
  test("Test sending bch should not burn tokens", async () => {
@@ -724,18 +781,18 @@ describe(`Test cashtokens`, () => {
724
781
  amount: 100n,
725
782
  });
726
783
 
727
- const tokenId = genesisResponse.tokenIds![0];
728
- const tokenBalance = await bob.getTokenBalance(tokenId);
784
+ const category = genesisResponse.categories![0];
785
+ const tokenBalance = await bob.getTokenBalance(category);
729
786
 
730
787
  expect(tokenBalance).toBe(100n);
731
- const tokenUtxos = await bob.getTokenUtxos(tokenId);
788
+ const tokenUtxos = await bob.getTokenUtxos(category);
732
789
  expect(tokenUtxos.length).toBe(1);
733
790
 
734
791
  await bob.send({ cashaddr: alice.cashaddr!, value: 1000n });
735
792
 
736
- const tokenBalance2 = await bob.getTokenBalance(tokenId);
793
+ const tokenBalance2 = await bob.getTokenBalance(category);
737
794
  expect(tokenBalance2).toBe(100n);
738
- const tokenUtxos2 = await bob.getTokenUtxos(tokenId);
795
+ const tokenUtxos2 = await bob.getTokenUtxos(category);
739
796
  expect(tokenUtxos2.length).toBe(1);
740
797
  });
741
798
 
@@ -753,11 +810,11 @@ describe(`Test cashtokens`, () => {
753
810
  amount: 1001n,
754
811
  });
755
812
 
756
- const tokenId = genesisResponse.tokenIds![0];
813
+ const category = genesisResponse.categories![0];
757
814
 
758
- const tokenBalance = await bob.getTokenBalance(tokenId);
815
+ const tokenBalance = await bob.getTokenBalance(category);
759
816
  expect(tokenBalance).toBe(1001n);
760
- const tokenUtxos = await bob.getTokenUtxos(tokenId);
817
+ const tokenUtxos = await bob.getTokenUtxos(category);
761
818
  expect(tokenUtxos.length).toBe(1);
762
819
 
763
820
  await bob.send({ cashaddr: alice.cashaddr!, value: 1000n });
@@ -765,57 +822,57 @@ describe(`Test cashtokens`, () => {
765
822
  await bob.send([
766
823
  {
767
824
  cashaddr: charlie.cashaddr!,
768
- tokenId: tokenId,
825
+ category: category,
769
826
  amount: 5n,
770
827
  },
771
828
  {
772
829
  cashaddr: charlie.cashaddr!,
773
- tokenId: tokenId,
830
+ category: category,
774
831
  amount: 501n,
775
832
  },
776
833
  {
777
834
  cashaddr: charlie.cashaddr!,
778
- tokenId: tokenId,
835
+ category: category,
779
836
  amount: 95n,
780
837
  },
781
838
  {
782
839
  cashaddr: charlie.cashaddr!,
783
- tokenId: tokenId,
840
+ category: category,
784
841
  amount: 100n,
785
842
  },
786
843
  {
787
844
  cashaddr: charlie.cashaddr!,
788
- tokenId: tokenId,
845
+ category: category,
789
846
  amount: 300n,
790
847
  },
791
848
  ]);
792
849
 
793
- const tokenBalance2 = await bob.getTokenBalance(tokenId);
850
+ const tokenBalance2 = await bob.getTokenBalance(category);
794
851
  expect(tokenBalance2).toBe(0n);
795
- const tokenUtxos2 = await bob.getTokenUtxos(tokenId);
852
+ const tokenUtxos2 = await bob.getTokenUtxos(category);
796
853
  expect(tokenUtxos2.length).toBe(0);
797
854
 
798
- const tokenBalance3 = await charlie.getTokenBalance(tokenId);
855
+ const tokenBalance3 = await charlie.getTokenBalance(category);
799
856
  expect(tokenBalance3).toBe(1001n);
800
- const tokenUtxos3 = await charlie.getTokenUtxos(tokenId);
857
+ const tokenUtxos3 = await charlie.getTokenUtxos(category);
801
858
  expect(tokenUtxos3.length).toBe(5);
802
859
 
803
860
  // charlie sends some from one of this utxos
804
861
  await charlie.send([
805
862
  {
806
863
  cashaddr: bob.cashaddr!,
807
- tokenId: tokenId,
864
+ category: category,
808
865
  amount: 50n,
809
866
  },
810
867
  ]);
811
- const tokenBalance4 = await charlie.getTokenBalance(tokenId);
868
+ const tokenBalance4 = await charlie.getTokenBalance(category);
812
869
  expect(tokenBalance4).toBe(951n);
813
- const tokenUtxos4 = await charlie.getTokenUtxos(tokenId);
870
+ const tokenUtxos4 = await charlie.getTokenUtxos(category);
814
871
  expect(tokenUtxos4.length).toBe(1);
815
872
 
816
- const tokenBalance5 = await bob.getTokenBalance(tokenId);
873
+ const tokenBalance5 = await bob.getTokenBalance(category);
817
874
  expect(tokenBalance5).toBe(50n);
818
- const tokenUtxos5 = await bob.getTokenUtxos(tokenId);
875
+ const tokenUtxos5 = await bob.getTokenUtxos(category);
819
876
  expect(tokenUtxos5.length).toBe(1);
820
877
  });
821
878
 
@@ -828,40 +885,46 @@ describe(`Test cashtokens`, () => {
828
885
  await alice.send({ cashaddr: bob.cashaddr!, value: 10000n });
829
886
 
830
887
  const genesisResponse = await bob.tokenGenesis({
831
- capability: "minting",
832
- commitment: "",
888
+ nft: {
889
+ capability: "minting",
890
+ commitment: "",
891
+ },
833
892
  });
834
893
 
835
- const tokenId = genesisResponse.tokenIds![0];
894
+ const category = genesisResponse.categories![0];
836
895
 
837
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
838
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
839
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
896
+ expect(await bob.getTokenBalance(category)).toBe(0n);
897
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
898
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
840
899
 
841
- await bob.tokenMint(tokenId, {
842
- capability: "none",
843
- commitment: "0a",
900
+ await bob.tokenMint(category, {
901
+ nft: {
902
+ capability: "none",
903
+ commitment: "0a",
904
+ },
844
905
  });
845
906
 
846
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
847
- expect(await bob.getNftTokenBalance(tokenId)).toBe(2);
848
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
907
+ expect(await bob.getTokenBalance(category)).toBe(0n);
908
+ expect(await bob.getNftTokenBalance(category)).toBe(2);
909
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
849
910
 
850
911
  await bob.send(
851
912
  new TokenSendRequest({
852
- tokenId: tokenId,
853
- capability: "none",
854
- commitment: "0a",
913
+ category: category,
914
+ nft: {
915
+ capability: "none",
916
+ commitment: "0a",
917
+ },
855
918
  cashaddr: charlie.cashaddr!,
856
919
  })
857
920
  );
858
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
859
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
860
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
921
+ expect(await bob.getTokenBalance(category)).toBe(0n);
922
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
923
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
861
924
 
862
- expect(await charlie.getTokenBalance(tokenId)).toBe(0n);
863
- expect(await charlie.getNftTokenBalance(tokenId)).toBe(1);
864
- expect((await charlie.getTokenUtxos(tokenId)).length).toBe(1);
925
+ expect(await charlie.getTokenBalance(category)).toBe(0n);
926
+ expect(await charlie.getNftTokenBalance(category)).toBe(1);
927
+ expect((await charlie.getTokenUtxos(category)).length).toBe(1);
865
928
  });
866
929
 
867
930
  test("Test sending NFTs after burning minting token", async () => {
@@ -873,75 +936,87 @@ describe(`Test cashtokens`, () => {
873
936
  await alice.send({ cashaddr: bob.cashaddr!, value: 10000n });
874
937
 
875
938
  const genesisResponse = await bob.tokenGenesis({
876
- capability: "minting",
877
- commitment: "",
939
+ nft: {
940
+ capability: "minting",
941
+ commitment: "",
942
+ },
878
943
  });
879
944
 
880
- const tokenId = genesisResponse.tokenIds![0];
945
+ const category = genesisResponse.categories![0];
881
946
 
882
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
883
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
884
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
947
+ expect(await bob.getTokenBalance(category)).toBe(0n);
948
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
949
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
885
950
 
886
- await bob.tokenMint(tokenId, {
887
- capability: "none",
888
- commitment: "0a",
951
+ await bob.tokenMint(category, {
952
+ nft: {
953
+ capability: "none",
954
+ commitment: "0a",
955
+ },
889
956
  });
890
957
 
891
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
892
- expect(await bob.getNftTokenBalance(tokenId)).toBe(2);
893
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
958
+ expect(await bob.getTokenBalance(category)).toBe(0n);
959
+ expect(await bob.getNftTokenBalance(category)).toBe(2);
960
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
894
961
 
895
- await bob.tokenMint(tokenId, {
896
- capability: "none",
897
- commitment: "0b",
962
+ await bob.tokenMint(category, {
963
+ nft: {
964
+ capability: "none",
965
+ commitment: "0b",
966
+ },
898
967
  });
899
968
 
900
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
901
- expect(await bob.getNftTokenBalance(tokenId)).toBe(3);
902
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(3);
969
+ expect(await bob.getTokenBalance(category)).toBe(0n);
970
+ expect(await bob.getNftTokenBalance(category)).toBe(3);
971
+ expect((await bob.getTokenUtxos(category)).length).toBe(3);
903
972
 
904
973
  await bob.tokenBurn({
905
- tokenId: tokenId,
906
- capability: "minting",
907
- commitment: "",
974
+ category: category,
975
+ nft: {
976
+ capability: "minting",
977
+ commitment: "",
978
+ },
908
979
  });
909
980
 
910
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
911
- expect(await bob.getNftTokenBalance(tokenId)).toBe(2);
912
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
981
+ expect(await bob.getTokenBalance(category)).toBe(0n);
982
+ expect(await bob.getNftTokenBalance(category)).toBe(2);
983
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
913
984
 
914
985
  await bob.send(
915
986
  new TokenSendRequest({
916
- tokenId: tokenId,
917
- capability: "none",
918
- commitment: "0a",
987
+ category: category,
988
+ nft: {
989
+ capability: "none",
990
+ commitment: "0a",
991
+ },
919
992
  cashaddr: charlie.cashaddr!,
920
993
  })
921
994
  );
922
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
923
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
924
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
995
+ expect(await bob.getTokenBalance(category)).toBe(0n);
996
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
997
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
925
998
 
926
- expect(await charlie.getTokenBalance(tokenId)).toBe(0n);
927
- expect(await charlie.getNftTokenBalance(tokenId)).toBe(1);
928
- expect((await charlie.getTokenUtxos(tokenId)).length).toBe(1);
999
+ expect(await charlie.getTokenBalance(category)).toBe(0n);
1000
+ expect(await charlie.getNftTokenBalance(category)).toBe(1);
1001
+ expect((await charlie.getTokenUtxos(category)).length).toBe(1);
929
1002
 
930
1003
  await bob.send(
931
1004
  new TokenSendRequest({
932
- tokenId: tokenId,
933
- capability: "none",
934
- commitment: "0b",
1005
+ category: category,
1006
+ nft: {
1007
+ capability: "none",
1008
+ commitment: "0b",
1009
+ },
935
1010
  cashaddr: charlie.cashaddr!,
936
1011
  })
937
1012
  );
938
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
939
- expect(await bob.getNftTokenBalance(tokenId)).toBe(0);
940
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(0);
1013
+ expect(await bob.getTokenBalance(category)).toBe(0n);
1014
+ expect(await bob.getNftTokenBalance(category)).toBe(0);
1015
+ expect((await bob.getTokenUtxos(category)).length).toBe(0);
941
1016
 
942
- expect(await charlie.getTokenBalance(tokenId)).toBe(0n);
943
- expect(await charlie.getNftTokenBalance(tokenId)).toBe(2);
944
- expect((await charlie.getTokenUtxos(tokenId)).length).toBe(2);
1017
+ expect(await charlie.getTokenBalance(category)).toBe(0n);
1018
+ expect(await charlie.getNftTokenBalance(category)).toBe(2);
1019
+ expect((await charlie.getTokenUtxos(category)).length).toBe(2);
945
1020
  });
946
1021
 
947
1022
  test("Test sending NFTs with empty commitment", async () => {
@@ -953,50 +1028,60 @@ describe(`Test cashtokens`, () => {
953
1028
  await alice.send({ cashaddr: bob.cashaddr!, value: 10000n });
954
1029
 
955
1030
  const genesisResponse = await bob.tokenGenesis({
956
- capability: "minting",
957
- commitment: "00",
1031
+ nft: {
1032
+ capability: "minting",
1033
+ commitment: "00",
1034
+ },
958
1035
  });
959
1036
 
960
- const tokenId = genesisResponse.tokenIds![0];
1037
+ const category = genesisResponse.categories![0];
961
1038
 
962
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
963
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
964
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
1039
+ expect(await bob.getTokenBalance(category)).toBe(0n);
1040
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
1041
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
965
1042
 
966
- await bob.tokenMint(tokenId, {
967
- capability: "none",
968
- commitment: "0a",
1043
+ await bob.tokenMint(category, {
1044
+ nft: {
1045
+ capability: "none",
1046
+ commitment: "0a",
1047
+ },
969
1048
  });
970
1049
 
971
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
972
- expect(await bob.getNftTokenBalance(tokenId)).toBe(2);
973
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
1050
+ expect(await bob.getTokenBalance(category)).toBe(0n);
1051
+ expect(await bob.getNftTokenBalance(category)).toBe(2);
1052
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
974
1053
 
975
- await bob.tokenMint(tokenId, {
976
- capability: "none",
977
- commitment: "0b",
1054
+ await bob.tokenMint(category, {
1055
+ nft: {
1056
+ capability: "none",
1057
+ commitment: "0b",
1058
+ },
978
1059
  });
979
1060
 
980
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
981
- expect(await bob.getNftTokenBalance(tokenId)).toBe(3);
982
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(3);
1061
+ expect(await bob.getTokenBalance(category)).toBe(0n);
1062
+ expect(await bob.getNftTokenBalance(category)).toBe(3);
1063
+ expect((await bob.getTokenUtxos(category)).length).toBe(3);
983
1064
 
984
1065
  await bob.tokenBurn({
985
- tokenId: tokenId,
986
- capability: "minting",
987
- commitment: "00",
1066
+ category: category,
1067
+ nft: {
1068
+ capability: "minting",
1069
+ commitment: "00",
1070
+ },
988
1071
  });
989
1072
 
990
- expect(await bob.getTokenBalance(tokenId)).toBe(0n);
991
- expect(await bob.getNftTokenBalance(tokenId)).toBe(2);
992
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
1073
+ expect(await bob.getTokenBalance(category)).toBe(0n);
1074
+ expect(await bob.getNftTokenBalance(category)).toBe(2);
1075
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
993
1076
 
994
1077
  await expect(
995
1078
  bob.send(
996
1079
  new TokenSendRequest({
997
- tokenId: tokenId,
998
- capability: "none",
999
- commitment: "",
1080
+ category: category,
1081
+ nft: {
1082
+ capability: "none",
1083
+ commitment: "",
1084
+ },
1000
1085
  cashaddr: charlie.cashaddr!,
1001
1086
  })
1002
1087
  )
@@ -1016,56 +1101,62 @@ describe(`Test cashtokens`, () => {
1016
1101
  await alice.send({ cashaddr: bob.cashaddr!, value: 10000n });
1017
1102
 
1018
1103
  const genesisResponse = await bob.tokenGenesis({
1019
- capability: "none",
1020
- commitment: "0000000e",
1104
+ nft: {
1105
+ capability: "none",
1106
+ commitment: "0000000e",
1107
+ },
1021
1108
  amount: 10000n,
1022
1109
  });
1023
1110
 
1024
- const tokenId = genesisResponse.tokenIds![0];
1111
+ const category = genesisResponse.categories![0];
1025
1112
 
1026
- expect(await bob.getTokenBalance(tokenId)).toBe(10000n);
1027
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
1028
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
1113
+ expect(await bob.getTokenBalance(category)).toBe(10000n);
1114
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
1115
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
1029
1116
 
1030
1117
  // explicitly split FT amounts from NFT
1031
1118
  await bob.send([
1032
1119
  new TokenSendRequest({
1033
1120
  cashaddr: bob.cashaddr!,
1034
- tokenId: tokenId,
1035
- capability: "none",
1036
- commitment: "0000000e",
1121
+ category: category,
1122
+ nft: {
1123
+ capability: "none",
1124
+ commitment: "0000000e",
1125
+ },
1037
1126
  }),
1038
1127
  new TokenSendRequest({
1039
1128
  cashaddr: bob.cashaddr!,
1040
- tokenId: tokenId,
1129
+ category: category,
1041
1130
  amount: 10000n,
1042
1131
  }),
1043
1132
  ]);
1044
1133
 
1045
- expect(await bob.getTokenBalance(tokenId)).toBe(10000n);
1046
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
1047
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
1134
+ expect(await bob.getTokenBalance(category)).toBe(10000n);
1135
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
1136
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
1048
1137
 
1049
1138
  // add FT amount to an NFT
1050
1139
  await bob.send([
1051
1140
  new TokenSendRequest({
1052
1141
  cashaddr: bob.cashaddr!,
1053
- tokenId: tokenId,
1142
+ category: category,
1054
1143
  amount: 9000n,
1055
1144
  }),
1056
1145
  new TokenSendRequest({
1057
1146
  cashaddr: bob.cashaddr!,
1058
- tokenId: tokenId,
1059
- capability: "none",
1060
- commitment: "0000000e",
1147
+ category: category,
1148
+ nft: {
1149
+ capability: "none",
1150
+ commitment: "0000000e",
1151
+ },
1061
1152
  amount: 1000n,
1062
1153
  }),
1063
1154
  ]);
1064
1155
 
1065
- expect(await bob.getTokenBalance(tokenId)).toBe(10000n);
1066
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
1067
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(2);
1068
- const tokenUtxos = await bob.getTokenUtxos(tokenId);
1156
+ expect(await bob.getTokenBalance(category)).toBe(10000n);
1157
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
1158
+ expect((await bob.getTokenUtxos(category)).length).toBe(2);
1159
+ const tokenUtxos = await bob.getTokenUtxos(category);
1069
1160
  expect(tokenUtxos[0].token?.amount).toBe(9000n);
1070
1161
  expect(tokenUtxos[1].token?.amount).toBe(1000n);
1071
1162
 
@@ -1073,16 +1164,18 @@ describe(`Test cashtokens`, () => {
1073
1164
  await bob.send([
1074
1165
  new TokenSendRequest({
1075
1166
  cashaddr: bob.cashaddr!,
1076
- tokenId: tokenId,
1077
- capability: "none",
1078
- commitment: "0000000e",
1167
+ category: category,
1168
+ nft: {
1169
+ capability: "none",
1170
+ commitment: "0000000e",
1171
+ },
1079
1172
  amount: 10000n,
1080
1173
  }),
1081
1174
  ]);
1082
1175
 
1083
- expect(await bob.getTokenBalance(tokenId)).toBe(10000n);
1084
- expect(await bob.getNftTokenBalance(tokenId)).toBe(1);
1085
- expect((await bob.getTokenUtxos(tokenId)).length).toBe(1);
1176
+ expect(await bob.getTokenBalance(category)).toBe(10000n);
1177
+ expect(await bob.getNftTokenBalance(category)).toBe(1);
1178
+ expect((await bob.getTokenUtxos(category)).length).toBe(1);
1086
1179
  });
1087
1180
 
1088
1181
  test("Should encode unsigned transactions", async () => {
@@ -1092,15 +1185,17 @@ describe(`Test cashtokens`, () => {
1092
1185
  aliceWallet.cashaddr!
1093
1186
  );
1094
1187
 
1095
- let tokenId;
1188
+ let category;
1096
1189
  {
1097
1190
  const aliceUtxos = await aliceWallet.getAddressUtxos();
1098
1191
 
1099
- const { unsignedTransaction, sourceOutputs, tokenIds } =
1192
+ const { unsignedTransaction, sourceOutputs, categories } =
1100
1193
  await aliceWatchWallet.tokenGenesis(
1101
1194
  {
1102
- capability: "minting",
1103
- commitment: "00",
1195
+ nft: {
1196
+ capability: "minting",
1197
+ commitment: "00",
1198
+ },
1104
1199
  },
1105
1200
  undefined,
1106
1201
  { buildUnsigned: true }
@@ -1128,12 +1223,12 @@ describe(`Test cashtokens`, () => {
1128
1223
  );
1129
1224
  await aliceWallet.submitTransaction(signed);
1130
1225
 
1131
- tokenId = tokenIds![0];
1226
+ category = categories![0];
1132
1227
 
1133
- expect(await aliceWallet.getNftTokenBalance(tokenId)).toBe(1);
1134
- const tokenUtxos = await aliceWallet.getTokenUtxos(tokenId);
1228
+ expect(await aliceWallet.getNftTokenBalance(category)).toBe(1);
1229
+ const tokenUtxos = await aliceWallet.getTokenUtxos(category);
1135
1230
  expect(tokenUtxos.length).toBe(1);
1136
- expect(tokenUtxos[0].token?.capability).toBe(NFTCapability.minting);
1231
+ expect(tokenUtxos[0].token?.nft?.capability).toBe(NFTCapability.minting);
1137
1232
  }
1138
1233
 
1139
1234
  {
@@ -1141,10 +1236,12 @@ describe(`Test cashtokens`, () => {
1141
1236
 
1142
1237
  const { unsignedTransaction, sourceOutputs } =
1143
1238
  await aliceWatchWallet.tokenMint(
1144
- tokenId,
1239
+ category,
1145
1240
  {
1146
- capability: "none",
1147
- commitment: "0a",
1241
+ nft: {
1242
+ capability: "none",
1243
+ commitment: "0a",
1244
+ },
1148
1245
  },
1149
1246
  undefined,
1150
1247
  { buildUnsigned: true }
@@ -1174,17 +1271,18 @@ describe(`Test cashtokens`, () => {
1174
1271
  );
1175
1272
  await aliceWallet.submitTransaction(signed);
1176
1273
 
1177
- expect(await aliceWallet.getNftTokenBalance(tokenId)).toBe(2);
1178
- const tokenUtxos = await aliceWallet.getTokenUtxos(tokenId);
1274
+ expect(await aliceWallet.getNftTokenBalance(category)).toBe(2);
1275
+ const tokenUtxos = await aliceWallet.getTokenUtxos(category);
1179
1276
  expect(tokenUtxos.length).toBe(2);
1180
1277
  expect(
1181
1278
  tokenUtxos.filter(
1182
- (val) => val.token?.capability === NFTCapability.minting
1279
+ (val) => val.token?.nft?.capability === NFTCapability.minting
1183
1280
  ).length
1184
1281
  ).toBe(1);
1185
1282
  expect(
1186
- tokenUtxos.filter((val) => val.token?.capability === NFTCapability.none)
1187
- .length
1283
+ tokenUtxos.filter(
1284
+ (val) => val.token?.nft?.capability === NFTCapability.none
1285
+ ).length
1188
1286
  ).toBe(1);
1189
1287
  }
1190
1288
 
@@ -1195,9 +1293,11 @@ describe(`Test cashtokens`, () => {
1195
1293
  await aliceWatchWallet.send(
1196
1294
  [
1197
1295
  new TokenSendRequest({
1198
- tokenId: tokenId,
1199
- capability: "none",
1200
- commitment: "0a",
1296
+ category: category,
1297
+ nft: {
1298
+ capability: "none",
1299
+ commitment: "0a",
1300
+ },
1201
1301
  cashaddr: aliceWallet.cashaddr!,
1202
1302
  }),
1203
1303
  ],
@@ -1226,17 +1326,18 @@ describe(`Test cashtokens`, () => {
1226
1326
  sourceOutputs!
1227
1327
  );
1228
1328
  await aliceWallet.submitTransaction(signed);
1229
- expect(await aliceWallet.getNftTokenBalance(tokenId)).toBe(2);
1230
- const tokenUtxos = await aliceWallet.getTokenUtxos(tokenId);
1329
+ expect(await aliceWallet.getNftTokenBalance(category)).toBe(2);
1330
+ const tokenUtxos = await aliceWallet.getTokenUtxos(category);
1231
1331
  expect(tokenUtxos.length).toBe(2);
1232
1332
  expect(
1233
1333
  tokenUtxos.filter(
1234
- (val) => val.token?.capability === NFTCapability.minting
1334
+ (val) => val.token?.nft?.capability === NFTCapability.minting
1235
1335
  ).length
1236
1336
  ).toBe(1);
1237
1337
  expect(
1238
- tokenUtxos.filter((val) => val.token?.capability === NFTCapability.none)
1239
- .length
1338
+ tokenUtxos.filter(
1339
+ (val) => val.token?.nft?.capability === NFTCapability.none
1340
+ ).length
1240
1341
  ).toBe(1);
1241
1342
  }
1242
1343
  });
@@ -1246,13 +1347,13 @@ describe(`Test cashtokens`, () => {
1246
1347
  const genesisResponse = await alice.tokenGenesis({
1247
1348
  amount: 100n,
1248
1349
  });
1249
- const tokenId = genesisResponse.tokenIds![0];
1350
+ const category = genesisResponse.categories![0];
1250
1351
 
1251
1352
  const previousValue = Config.EnforceCashTokenReceiptAddresses;
1252
1353
 
1253
1354
  const wrap = (addr) => {
1254
1355
  return new Promise((resolve) => {
1255
- resolve(new TokenSendRequest({ cashaddr: addr, tokenId: "" }));
1356
+ resolve(new TokenSendRequest({ cashaddr: addr, category: "" }));
1256
1357
  });
1257
1358
  };
1258
1359
 
@@ -1264,7 +1365,7 @@ describe(`Test cashtokens`, () => {
1264
1365
  alice.send(
1265
1366
  new TokenSendRequest({
1266
1367
  cashaddr: alice.cashaddr!,
1267
- tokenId: tokenId,
1368
+ category: category,
1268
1369
  amount: 1n,
1269
1370
  })
1270
1371
  )
@@ -1274,7 +1375,7 @@ describe(`Test cashtokens`, () => {
1274
1375
  alice.send(
1275
1376
  new TokenSendRequest({
1276
1377
  cashaddr: alice.tokenaddr!,
1277
- tokenId: tokenId,
1378
+ category: category,
1278
1379
  amount: 2n,
1279
1380
  })
1280
1381
  )
@@ -1289,7 +1390,7 @@ describe(`Test cashtokens`, () => {
1289
1390
  await alice.send(
1290
1391
  new TokenSendRequest({
1291
1392
  cashaddr: alice.cashaddr!,
1292
- tokenId: tokenId,
1393
+ category: category,
1293
1394
  amount: 1n,
1294
1395
  })
1295
1396
  ))()
@@ -1299,7 +1400,7 @@ describe(`Test cashtokens`, () => {
1299
1400
  alice.send(
1300
1401
  new TokenSendRequest({
1301
1402
  cashaddr: alice.tokenaddr!,
1302
- tokenId: tokenId,
1403
+ category: category,
1303
1404
  amount: 2n,
1304
1405
  })
1305
1406
  )