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