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.
- package/dist/index.html +1 -1
- package/dist/{mainnet-3.0.0-next.1.js → mainnet-3.0.0-next.2.js} +7 -7
- package/dist/module/history/getHistory.js +17 -17
- package/dist/module/history/getHistory.js.map +1 -1
- package/dist/module/history/interface.d.ts +1 -1
- package/dist/module/history/interface.d.ts.map +1 -1
- package/dist/module/interface.d.ts +5 -3
- package/dist/module/interface.d.ts.map +1 -1
- package/dist/module/interface.js.map +1 -1
- package/dist/module/network/ElectrumNetworkProvider.d.ts.map +1 -1
- package/dist/module/network/ElectrumNetworkProvider.js +1 -3
- package/dist/module/network/ElectrumNetworkProvider.js.map +1 -1
- package/dist/module/network/interface.d.ts +2 -2
- package/dist/module/network/interface.d.ts.map +1 -1
- package/dist/module/transaction/Wif.d.ts.map +1 -1
- package/dist/module/transaction/Wif.js +25 -23
- package/dist/module/transaction/Wif.js.map +1 -1
- package/dist/module/util/asSendRequestObject.js +2 -2
- package/dist/module/util/asSendRequestObject.js.map +1 -1
- package/dist/module/util/sumUtxoValue.js +1 -1
- package/dist/module/util/sumUtxoValue.js.map +1 -1
- package/dist/module/wallet/Base.d.ts +18 -18
- package/dist/module/wallet/Base.d.ts.map +1 -1
- package/dist/module/wallet/Base.js +64 -69
- package/dist/module/wallet/Base.js.map +1 -1
- package/dist/module/wallet/HDWallet.d.ts +1 -1
- package/dist/module/wallet/Wif.d.ts +1 -1
- package/dist/module/wallet/model.d.ts +41 -25
- package/dist/module/wallet/model.d.ts.map +1 -1
- package/dist/module/wallet/model.js +10 -14
- package/dist/module/wallet/model.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/history/getHistory.ts +17 -17
- package/src/history/interface.ts +1 -1
- package/src/interface.ts +5 -3
- package/src/network/ElectrumNetworkProvider.ts +1 -3
- package/src/network/interface.ts +2 -2
- package/src/transaction/Wif.ts +27 -23
- package/src/util/asSendRequestObject.ts +2 -2
- package/src/util/sumUtxoValue.ts +1 -1
- package/src/wallet/Base.ts +67 -72
- package/src/wallet/Cashtokens.test.headless.js +217 -162
- package/src/wallet/Cashtokens.test.ts +470 -369
- package/src/wallet/HDWallet.test.ts +36 -24
- 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?.
|
|
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
|
|
60
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
72
|
+
category: category,
|
|
73
73
|
}),
|
|
74
74
|
]);
|
|
75
|
-
expect(await bob.getTokenBalance(
|
|
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(
|
|
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(
|
|
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
|
|
100
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
108
|
+
category: category,
|
|
109
109
|
}),
|
|
110
110
|
new TokenSendRequest({
|
|
111
111
|
cashaddr: alice.cashaddr!,
|
|
112
112
|
amount: 25n,
|
|
113
|
-
|
|
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(
|
|
120
|
+
const newTokenUtxos = await alice.getTokenUtxos(category);
|
|
121
121
|
expect(newTokenUtxos.length).toBe(2);
|
|
122
|
-
expect(await alice.getTokenBalance(
|
|
123
|
-
expect(await bob.getTokenBalance(
|
|
124
|
-
expect(await bob.getNftTokenBalance(
|
|
125
|
-
expect((await bob.getAllNftTokenBalances())[
|
|
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
|
-
|
|
131
|
+
category: category,
|
|
132
132
|
}),
|
|
133
133
|
new TokenSendRequest({
|
|
134
134
|
cashaddr: bob.cashaddr!,
|
|
135
135
|
amount: 100n,
|
|
136
|
-
|
|
136
|
+
category: category,
|
|
137
137
|
}),
|
|
138
138
|
new TokenSendRequest({
|
|
139
139
|
cashaddr: bob.cashaddr!,
|
|
140
140
|
amount: 100n,
|
|
141
|
-
|
|
141
|
+
category: category,
|
|
142
142
|
}),
|
|
143
143
|
]);
|
|
144
144
|
|
|
145
|
-
expect(await alice.getTokenBalance(
|
|
146
|
-
expect(await bob.getTokenBalance(
|
|
145
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
146
|
+
expect(await bob.getTokenBalance(category)).toBe(300n);
|
|
147
147
|
|
|
148
148
|
await bob.tokenBurn({
|
|
149
|
-
|
|
149
|
+
category: category,
|
|
150
150
|
amount: 99n,
|
|
151
151
|
});
|
|
152
152
|
|
|
153
|
-
expect(await alice.getTokenBalance(
|
|
154
|
-
expect(await bob.getTokenBalance(
|
|
153
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
154
|
+
expect(await bob.getTokenBalance(category)).toBe(201n);
|
|
155
155
|
|
|
156
156
|
await bob.tokenBurn({
|
|
157
|
-
|
|
157
|
+
category: category,
|
|
158
158
|
amount: 200n,
|
|
159
159
|
});
|
|
160
160
|
|
|
161
|
-
expect(await bob.getTokenBalance(
|
|
161
|
+
expect(await bob.getTokenBalance(category)).toBe(1n);
|
|
162
162
|
|
|
163
163
|
await bob.tokenBurn({
|
|
164
|
-
|
|
164
|
+
category: category,
|
|
165
165
|
amount: 1n,
|
|
166
166
|
});
|
|
167
|
-
expect(await bob.getTokenBalance(
|
|
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
|
-
|
|
176
|
-
|
|
175
|
+
nft: {
|
|
176
|
+
capability: NFTCapability.mutable,
|
|
177
|
+
commitment: "abcd",
|
|
178
|
+
},
|
|
177
179
|
});
|
|
178
180
|
|
|
179
|
-
const
|
|
180
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
184
|
+
const nftTokenBalance = await alice.getNftTokenBalance(category);
|
|
183
185
|
expect(nftTokenBalance).toBe(1);
|
|
184
|
-
const tokenUtxos = await alice.getTokenUtxos(
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
category: category,
|
|
192
|
+
nft: {
|
|
193
|
+
capability: NFTCapability.mutable,
|
|
194
|
+
commitment: "abcd",
|
|
195
|
+
},
|
|
196
|
+
}),
|
|
193
197
|
]);
|
|
194
|
-
expect(await alice.getTokenBalance(
|
|
195
|
-
expect(await alice.getNftTokenBalance(
|
|
196
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
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(
|
|
200
|
-
const bobTokenUtxos = await bob.getTokenUtxos(
|
|
203
|
+
expect(await bob.getTokenBalance(category)).toBe(0n);
|
|
204
|
+
const bobTokenUtxos = await bob.getTokenUtxos(category);
|
|
201
205
|
expect(bobTokenUtxos.length).toBe(1);
|
|
202
|
-
expect(
|
|
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
|
-
|
|
211
|
-
|
|
214
|
+
nft: {
|
|
215
|
+
capability: NFTCapability.none,
|
|
216
|
+
commitment: "abcd",
|
|
217
|
+
},
|
|
212
218
|
});
|
|
213
219
|
|
|
214
|
-
const
|
|
215
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
224
|
-
|
|
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
|
-
|
|
235
|
-
|
|
243
|
+
nft: {
|
|
244
|
+
capability: NFTCapability.mutable,
|
|
245
|
+
commitment: "abcd",
|
|
246
|
+
},
|
|
236
247
|
});
|
|
237
248
|
|
|
238
|
-
const
|
|
239
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
257
|
+
category: category,
|
|
258
|
+
nft: {
|
|
259
|
+
capability: NFTCapability.mutable,
|
|
260
|
+
commitment: "abcd02",
|
|
261
|
+
},
|
|
249
262
|
}),
|
|
250
263
|
]);
|
|
251
|
-
expect(await alice.getTokenBalance(
|
|
252
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
264
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
265
|
+
const newTokenUtxos = await alice.getTokenUtxos(category);
|
|
253
266
|
expect(newTokenUtxos.length).toBe(1);
|
|
254
|
-
expect(
|
|
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
|
-
|
|
263
|
-
|
|
275
|
+
nft: {
|
|
276
|
+
capability: NFTCapability.minting,
|
|
277
|
+
commitment: "abcd",
|
|
278
|
+
},
|
|
264
279
|
});
|
|
265
280
|
|
|
266
|
-
const
|
|
267
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
284
|
+
const tokenUtxos = await alice.getTokenUtxos(category);
|
|
270
285
|
expect(tokenUtxos.length).toBe(1);
|
|
271
|
-
const response = await alice.tokenMint(
|
|
286
|
+
const response = await alice.tokenMint(category, [
|
|
272
287
|
new TokenMintRequest({
|
|
273
288
|
cashaddr: alice.cashaddr!,
|
|
274
|
-
|
|
275
|
-
|
|
289
|
+
nft: {
|
|
290
|
+
commitment: "test",
|
|
291
|
+
capability: NFTCapability.none,
|
|
292
|
+
},
|
|
276
293
|
}),
|
|
277
294
|
new TokenMintRequest({
|
|
278
295
|
cashaddr: alice.cashaddr!,
|
|
279
|
-
|
|
280
|
-
|
|
296
|
+
nft: {
|
|
297
|
+
commitment: "test2",
|
|
298
|
+
capability: NFTCapability.none,
|
|
299
|
+
},
|
|
281
300
|
}),
|
|
282
301
|
]);
|
|
283
|
-
expect(await alice.getTokenBalance(
|
|
284
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
302
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
303
|
+
const newTokenUtxos = await alice.getTokenUtxos(category);
|
|
285
304
|
expect(newTokenUtxos.length).toBe(3);
|
|
286
|
-
expect(
|
|
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
|
-
|
|
294
|
-
|
|
312
|
+
nft: {
|
|
313
|
+
capability: NFTCapability.minting,
|
|
314
|
+
commitment: "abcd",
|
|
315
|
+
},
|
|
295
316
|
});
|
|
296
317
|
|
|
297
|
-
const
|
|
318
|
+
const category = genesisResponse.categories![0];
|
|
298
319
|
|
|
299
320
|
// mint 2 NFTs, amount reducing
|
|
300
|
-
const response = await alice.tokenMint(
|
|
321
|
+
const response = await alice.tokenMint(category, [
|
|
301
322
|
new TokenMintRequest({
|
|
302
323
|
cashaddr: alice.cashaddr!,
|
|
303
|
-
|
|
304
|
-
|
|
324
|
+
nft: {
|
|
325
|
+
capability: NFTCapability.none,
|
|
326
|
+
commitment: "0a",
|
|
327
|
+
},
|
|
305
328
|
}),
|
|
306
329
|
new TokenMintRequest({
|
|
307
330
|
cashaddr: alice.cashaddr!,
|
|
308
|
-
|
|
309
|
-
|
|
331
|
+
nft: {
|
|
332
|
+
capability: NFTCapability.none,
|
|
333
|
+
commitment: "0a",
|
|
334
|
+
},
|
|
310
335
|
}),
|
|
311
336
|
]);
|
|
312
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
337
|
+
const newTokenUtxos = await alice.getTokenUtxos(category);
|
|
313
338
|
expect(newTokenUtxos.length).toBe(3);
|
|
314
|
-
expect(
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
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
|
-
|
|
327
|
-
|
|
328
|
-
|
|
353
|
+
category: category,
|
|
354
|
+
nft: {
|
|
355
|
+
capability: NFTCapability.none,
|
|
356
|
+
commitment: "0a",
|
|
357
|
+
},
|
|
329
358
|
}),
|
|
330
359
|
]);
|
|
331
360
|
|
|
332
|
-
expect((await alice.getTokenUtxos(
|
|
333
|
-
const bobTokenUtxos = await bob.getTokenUtxos(
|
|
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(
|
|
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
|
-
|
|
344
|
-
|
|
372
|
+
nft: {
|
|
373
|
+
capability: NFTCapability.minting,
|
|
374
|
+
commitment: "abcd",
|
|
375
|
+
},
|
|
345
376
|
});
|
|
346
377
|
|
|
347
|
-
const
|
|
348
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
386
|
+
category,
|
|
356
387
|
[
|
|
357
388
|
new TokenMintRequest({
|
|
358
389
|
cashaddr: alice.cashaddr!,
|
|
359
|
-
|
|
360
|
-
|
|
390
|
+
nft: {
|
|
391
|
+
capability: NFTCapability.none,
|
|
392
|
+
commitment: "0a",
|
|
393
|
+
},
|
|
361
394
|
}),
|
|
362
395
|
new TokenMintRequest({
|
|
363
396
|
cashaddr: alice.cashaddr!,
|
|
364
|
-
|
|
365
|
-
|
|
397
|
+
nft: {
|
|
398
|
+
capability: NFTCapability.none,
|
|
399
|
+
commitment: "0b",
|
|
400
|
+
},
|
|
366
401
|
}),
|
|
367
402
|
],
|
|
368
403
|
true
|
|
369
404
|
);
|
|
370
|
-
expect(await alice.getTokenBalance(
|
|
371
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
405
|
+
expect(await alice.getTokenBalance(category)).toBe(2n);
|
|
406
|
+
const newTokenUtxos = await alice.getTokenUtxos(category);
|
|
372
407
|
expect(newTokenUtxos.length).toBe(3);
|
|
373
|
-
expect(
|
|
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
|
-
|
|
412
|
+
category,
|
|
378
413
|
[
|
|
379
414
|
new TokenMintRequest({
|
|
380
415
|
cashaddr: alice.cashaddr!,
|
|
381
|
-
|
|
382
|
-
|
|
416
|
+
nft: {
|
|
417
|
+
capability: NFTCapability.none,
|
|
418
|
+
commitment: "0c",
|
|
419
|
+
},
|
|
383
420
|
}),
|
|
384
421
|
new TokenMintRequest({
|
|
385
422
|
cashaddr: alice.cashaddr!,
|
|
386
|
-
|
|
387
|
-
|
|
423
|
+
nft: {
|
|
424
|
+
capability: NFTCapability.none,
|
|
425
|
+
commitment: "0d",
|
|
426
|
+
},
|
|
388
427
|
}),
|
|
389
428
|
],
|
|
390
429
|
false
|
|
391
430
|
);
|
|
392
|
-
expect(await alice.getTokenBalance(
|
|
393
|
-
const ftTokenUtxos = await alice.getTokenUtxos(
|
|
431
|
+
expect(await alice.getTokenBalance(category)).toBe(2n);
|
|
432
|
+
const ftTokenUtxos = await alice.getTokenUtxos(category);
|
|
394
433
|
expect(ftTokenUtxos.length).toBe(5);
|
|
395
|
-
expect(
|
|
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
|
-
|
|
439
|
+
category,
|
|
401
440
|
[
|
|
402
441
|
new TokenMintRequest({
|
|
403
442
|
cashaddr: alice.cashaddr!,
|
|
404
|
-
|
|
405
|
-
|
|
443
|
+
nft: {
|
|
444
|
+
capability: NFTCapability.none,
|
|
445
|
+
commitment: "0a",
|
|
446
|
+
},
|
|
406
447
|
}),
|
|
407
448
|
new TokenMintRequest({
|
|
408
449
|
cashaddr: alice.cashaddr!,
|
|
409
|
-
|
|
410
|
-
|
|
450
|
+
nft: {
|
|
451
|
+
capability: NFTCapability.none,
|
|
452
|
+
commitment: "0a",
|
|
453
|
+
},
|
|
411
454
|
}),
|
|
412
455
|
new TokenMintRequest({
|
|
413
456
|
cashaddr: alice.cashaddr!,
|
|
414
|
-
|
|
415
|
-
|
|
457
|
+
nft: {
|
|
458
|
+
capability: NFTCapability.none,
|
|
459
|
+
commitment: "0a",
|
|
460
|
+
},
|
|
416
461
|
}),
|
|
417
462
|
],
|
|
418
463
|
true
|
|
419
464
|
);
|
|
420
|
-
expect(await alice.getTokenBalance(
|
|
421
|
-
const ft2TokenUtxos = await alice.getTokenUtxos(
|
|
465
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
466
|
+
const ft2TokenUtxos = await alice.getTokenUtxos(category);
|
|
422
467
|
expect(ft2TokenUtxos.length).toBe(8);
|
|
423
|
-
expect(
|
|
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
|
|
434
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
455
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
499
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
500
|
+
const newTokenUtxos = await alice.getTokenUtxos(category);
|
|
456
501
|
expect(newTokenUtxos.length).toBe(0);
|
|
457
|
-
expect(
|
|
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
|
-
|
|
466
|
-
|
|
510
|
+
nft: {
|
|
511
|
+
capability: NFTCapability.minting,
|
|
512
|
+
commitment: "abcd",
|
|
513
|
+
},
|
|
467
514
|
});
|
|
468
515
|
|
|
469
|
-
const
|
|
470
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
525
|
+
category: category,
|
|
479
526
|
amount: 1n,
|
|
480
|
-
|
|
481
|
-
|
|
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(
|
|
493
|
-
expect((await alice.getAllTokenBalances())[
|
|
494
|
-
const newTokenUtxos = await alice.getTokenUtxos(
|
|
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(
|
|
497
|
-
expect((await alice.getAllNftTokenBalances())[
|
|
498
|
-
expect(
|
|
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
|
-
|
|
552
|
+
category: category,
|
|
504
553
|
amount: 5n,
|
|
505
|
-
|
|
506
|
-
|
|
554
|
+
nft: {
|
|
555
|
+
capability: NFTCapability.minting,
|
|
556
|
+
commitment: "abcd",
|
|
557
|
+
},
|
|
507
558
|
},
|
|
508
559
|
"burn"
|
|
509
560
|
);
|
|
510
|
-
expect(await alice.getTokenBalance(
|
|
511
|
-
const ftTokenUtxos = await alice.getTokenUtxos(
|
|
561
|
+
expect(await alice.getTokenBalance(category)).toBe(0n);
|
|
562
|
+
const ftTokenUtxos = await alice.getTokenUtxos(category);
|
|
512
563
|
expect(ftTokenUtxos.length).toBe(1);
|
|
513
|
-
expect(
|
|
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
|
-
|
|
519
|
-
|
|
520
|
-
|
|
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(
|
|
525
|
-
expect((await alice.getAllTokenBalances())[
|
|
526
|
-
const nftTokenUtxos = await alice.getTokenUtxos(
|
|
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(
|
|
529
|
-
expect(await alice.getNftTokenBalance(
|
|
530
|
-
expect((await alice.getAllNftTokenBalances())[
|
|
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
|
|
543
|
-
const tokenBalance = await bob.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
607
|
+
category: category,
|
|
555
608
|
value: 1500n,
|
|
556
609
|
}),
|
|
557
610
|
]);
|
|
558
|
-
let newTokenUtxos = await bob.getTokenUtxos(
|
|
611
|
+
let newTokenUtxos = await bob.getTokenUtxos(category);
|
|
559
612
|
expect(newTokenUtxos.length).toBe(1);
|
|
560
|
-
expect(await bob.getTokenBalance(
|
|
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
|
-
|
|
625
|
+
category: category,
|
|
573
626
|
value: 3000n,
|
|
574
627
|
}),
|
|
575
628
|
]);
|
|
576
|
-
newTokenUtxos = await bob.getTokenUtxos(
|
|
629
|
+
newTokenUtxos = await bob.getTokenUtxos(category);
|
|
577
630
|
expect(newTokenUtxos.length).toBe(1);
|
|
578
|
-
expect(await bob.getTokenBalance(
|
|
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
|
-
|
|
594
|
-
|
|
646
|
+
nft: {
|
|
647
|
+
capability: NFTCapability.minting,
|
|
648
|
+
commitment: "test",
|
|
649
|
+
},
|
|
595
650
|
cashaddr: alice.cashaddr!,
|
|
596
651
|
});
|
|
597
652
|
|
|
598
|
-
const
|
|
599
|
-
const tokenBalance = await alice.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
668
|
+
category: category,
|
|
614
669
|
value: 1500n,
|
|
615
|
-
|
|
616
|
-
|
|
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(
|
|
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(
|
|
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
|
|
654
|
-
const tokenBalance = await bob.getTokenBalance(
|
|
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(
|
|
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
|
|
665
|
-
const tokenBalance2 = await bob.getTokenBalance(
|
|
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(
|
|
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
|
|
686
|
-
const tokenBalance = await bob.getTokenBalance(
|
|
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(
|
|
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
|
|
697
|
-
const tokenBalance2 = await bob.getTokenBalance(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
713
|
-
expect(await charlie.getTokenBalance(
|
|
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
|
|
728
|
-
const tokenBalance = await bob.getTokenBalance(
|
|
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(
|
|
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(
|
|
793
|
+
const tokenBalance2 = await bob.getTokenBalance(category);
|
|
737
794
|
expect(tokenBalance2).toBe(100n);
|
|
738
|
-
const tokenUtxos2 = await bob.getTokenUtxos(
|
|
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
|
|
813
|
+
const category = genesisResponse.categories![0];
|
|
757
814
|
|
|
758
|
-
const tokenBalance = await bob.getTokenBalance(
|
|
815
|
+
const tokenBalance = await bob.getTokenBalance(category);
|
|
759
816
|
expect(tokenBalance).toBe(1001n);
|
|
760
|
-
const tokenUtxos = await bob.getTokenUtxos(
|
|
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
|
-
|
|
825
|
+
category: category,
|
|
769
826
|
amount: 5n,
|
|
770
827
|
},
|
|
771
828
|
{
|
|
772
829
|
cashaddr: charlie.cashaddr!,
|
|
773
|
-
|
|
830
|
+
category: category,
|
|
774
831
|
amount: 501n,
|
|
775
832
|
},
|
|
776
833
|
{
|
|
777
834
|
cashaddr: charlie.cashaddr!,
|
|
778
|
-
|
|
835
|
+
category: category,
|
|
779
836
|
amount: 95n,
|
|
780
837
|
},
|
|
781
838
|
{
|
|
782
839
|
cashaddr: charlie.cashaddr!,
|
|
783
|
-
|
|
840
|
+
category: category,
|
|
784
841
|
amount: 100n,
|
|
785
842
|
},
|
|
786
843
|
{
|
|
787
844
|
cashaddr: charlie.cashaddr!,
|
|
788
|
-
|
|
845
|
+
category: category,
|
|
789
846
|
amount: 300n,
|
|
790
847
|
},
|
|
791
848
|
]);
|
|
792
849
|
|
|
793
|
-
const tokenBalance2 = await bob.getTokenBalance(
|
|
850
|
+
const tokenBalance2 = await bob.getTokenBalance(category);
|
|
794
851
|
expect(tokenBalance2).toBe(0n);
|
|
795
|
-
const tokenUtxos2 = await bob.getTokenUtxos(
|
|
852
|
+
const tokenUtxos2 = await bob.getTokenUtxos(category);
|
|
796
853
|
expect(tokenUtxos2.length).toBe(0);
|
|
797
854
|
|
|
798
|
-
const tokenBalance3 = await charlie.getTokenBalance(
|
|
855
|
+
const tokenBalance3 = await charlie.getTokenBalance(category);
|
|
799
856
|
expect(tokenBalance3).toBe(1001n);
|
|
800
|
-
const tokenUtxos3 = await charlie.getTokenUtxos(
|
|
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
|
-
|
|
864
|
+
category: category,
|
|
808
865
|
amount: 50n,
|
|
809
866
|
},
|
|
810
867
|
]);
|
|
811
|
-
const tokenBalance4 = await charlie.getTokenBalance(
|
|
868
|
+
const tokenBalance4 = await charlie.getTokenBalance(category);
|
|
812
869
|
expect(tokenBalance4).toBe(951n);
|
|
813
|
-
const tokenUtxos4 = await charlie.getTokenUtxos(
|
|
870
|
+
const tokenUtxos4 = await charlie.getTokenUtxos(category);
|
|
814
871
|
expect(tokenUtxos4.length).toBe(1);
|
|
815
872
|
|
|
816
|
-
const tokenBalance5 = await bob.getTokenBalance(
|
|
873
|
+
const tokenBalance5 = await bob.getTokenBalance(category);
|
|
817
874
|
expect(tokenBalance5).toBe(50n);
|
|
818
|
-
const tokenUtxos5 = await bob.getTokenUtxos(
|
|
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
|
-
|
|
832
|
-
|
|
888
|
+
nft: {
|
|
889
|
+
capability: "minting",
|
|
890
|
+
commitment: "",
|
|
891
|
+
},
|
|
833
892
|
});
|
|
834
893
|
|
|
835
|
-
const
|
|
894
|
+
const category = genesisResponse.categories![0];
|
|
836
895
|
|
|
837
|
-
expect(await bob.getTokenBalance(
|
|
838
|
-
expect(await bob.getNftTokenBalance(
|
|
839
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
842
|
-
|
|
843
|
-
|
|
900
|
+
await bob.tokenMint(category, {
|
|
901
|
+
nft: {
|
|
902
|
+
capability: "none",
|
|
903
|
+
commitment: "0a",
|
|
904
|
+
},
|
|
844
905
|
});
|
|
845
906
|
|
|
846
|
-
expect(await bob.getTokenBalance(
|
|
847
|
-
expect(await bob.getNftTokenBalance(
|
|
848
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
853
|
-
|
|
854
|
-
|
|
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(
|
|
859
|
-
expect(await bob.getNftTokenBalance(
|
|
860
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
863
|
-
expect(await charlie.getNftTokenBalance(
|
|
864
|
-
expect((await charlie.getTokenUtxos(
|
|
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
|
-
|
|
877
|
-
|
|
939
|
+
nft: {
|
|
940
|
+
capability: "minting",
|
|
941
|
+
commitment: "",
|
|
942
|
+
},
|
|
878
943
|
});
|
|
879
944
|
|
|
880
|
-
const
|
|
945
|
+
const category = genesisResponse.categories![0];
|
|
881
946
|
|
|
882
|
-
expect(await bob.getTokenBalance(
|
|
883
|
-
expect(await bob.getNftTokenBalance(
|
|
884
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
887
|
-
|
|
888
|
-
|
|
951
|
+
await bob.tokenMint(category, {
|
|
952
|
+
nft: {
|
|
953
|
+
capability: "none",
|
|
954
|
+
commitment: "0a",
|
|
955
|
+
},
|
|
889
956
|
});
|
|
890
957
|
|
|
891
|
-
expect(await bob.getTokenBalance(
|
|
892
|
-
expect(await bob.getNftTokenBalance(
|
|
893
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
896
|
-
|
|
897
|
-
|
|
962
|
+
await bob.tokenMint(category, {
|
|
963
|
+
nft: {
|
|
964
|
+
capability: "none",
|
|
965
|
+
commitment: "0b",
|
|
966
|
+
},
|
|
898
967
|
});
|
|
899
968
|
|
|
900
|
-
expect(await bob.getTokenBalance(
|
|
901
|
-
expect(await bob.getNftTokenBalance(
|
|
902
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
906
|
-
|
|
907
|
-
|
|
974
|
+
category: category,
|
|
975
|
+
nft: {
|
|
976
|
+
capability: "minting",
|
|
977
|
+
commitment: "",
|
|
978
|
+
},
|
|
908
979
|
});
|
|
909
980
|
|
|
910
|
-
expect(await bob.getTokenBalance(
|
|
911
|
-
expect(await bob.getNftTokenBalance(
|
|
912
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
917
|
-
|
|
918
|
-
|
|
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(
|
|
923
|
-
expect(await bob.getNftTokenBalance(
|
|
924
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
927
|
-
expect(await charlie.getNftTokenBalance(
|
|
928
|
-
expect((await charlie.getTokenUtxos(
|
|
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
|
-
|
|
933
|
-
|
|
934
|
-
|
|
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(
|
|
939
|
-
expect(await bob.getNftTokenBalance(
|
|
940
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
943
|
-
expect(await charlie.getNftTokenBalance(
|
|
944
|
-
expect((await charlie.getTokenUtxos(
|
|
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
|
-
|
|
957
|
-
|
|
1031
|
+
nft: {
|
|
1032
|
+
capability: "minting",
|
|
1033
|
+
commitment: "00",
|
|
1034
|
+
},
|
|
958
1035
|
});
|
|
959
1036
|
|
|
960
|
-
const
|
|
1037
|
+
const category = genesisResponse.categories![0];
|
|
961
1038
|
|
|
962
|
-
expect(await bob.getTokenBalance(
|
|
963
|
-
expect(await bob.getNftTokenBalance(
|
|
964
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
967
|
-
|
|
968
|
-
|
|
1043
|
+
await bob.tokenMint(category, {
|
|
1044
|
+
nft: {
|
|
1045
|
+
capability: "none",
|
|
1046
|
+
commitment: "0a",
|
|
1047
|
+
},
|
|
969
1048
|
});
|
|
970
1049
|
|
|
971
|
-
expect(await bob.getTokenBalance(
|
|
972
|
-
expect(await bob.getNftTokenBalance(
|
|
973
|
-
expect((await bob.getTokenUtxos(
|
|
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(
|
|
976
|
-
|
|
977
|
-
|
|
1054
|
+
await bob.tokenMint(category, {
|
|
1055
|
+
nft: {
|
|
1056
|
+
capability: "none",
|
|
1057
|
+
commitment: "0b",
|
|
1058
|
+
},
|
|
978
1059
|
});
|
|
979
1060
|
|
|
980
|
-
expect(await bob.getTokenBalance(
|
|
981
|
-
expect(await bob.getNftTokenBalance(
|
|
982
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
986
|
-
|
|
987
|
-
|
|
1066
|
+
category: category,
|
|
1067
|
+
nft: {
|
|
1068
|
+
capability: "minting",
|
|
1069
|
+
commitment: "00",
|
|
1070
|
+
},
|
|
988
1071
|
});
|
|
989
1072
|
|
|
990
|
-
expect(await bob.getTokenBalance(
|
|
991
|
-
expect(await bob.getNftTokenBalance(
|
|
992
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
998
|
-
|
|
999
|
-
|
|
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
|
-
|
|
1020
|
-
|
|
1104
|
+
nft: {
|
|
1105
|
+
capability: "none",
|
|
1106
|
+
commitment: "0000000e",
|
|
1107
|
+
},
|
|
1021
1108
|
amount: 10000n,
|
|
1022
1109
|
});
|
|
1023
1110
|
|
|
1024
|
-
const
|
|
1111
|
+
const category = genesisResponse.categories![0];
|
|
1025
1112
|
|
|
1026
|
-
expect(await bob.getTokenBalance(
|
|
1027
|
-
expect(await bob.getNftTokenBalance(
|
|
1028
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1121
|
+
category: category,
|
|
1122
|
+
nft: {
|
|
1123
|
+
capability: "none",
|
|
1124
|
+
commitment: "0000000e",
|
|
1125
|
+
},
|
|
1037
1126
|
}),
|
|
1038
1127
|
new TokenSendRequest({
|
|
1039
1128
|
cashaddr: bob.cashaddr!,
|
|
1040
|
-
|
|
1129
|
+
category: category,
|
|
1041
1130
|
amount: 10000n,
|
|
1042
1131
|
}),
|
|
1043
1132
|
]);
|
|
1044
1133
|
|
|
1045
|
-
expect(await bob.getTokenBalance(
|
|
1046
|
-
expect(await bob.getNftTokenBalance(
|
|
1047
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
-
|
|
1142
|
+
category: category,
|
|
1054
1143
|
amount: 9000n,
|
|
1055
1144
|
}),
|
|
1056
1145
|
new TokenSendRequest({
|
|
1057
1146
|
cashaddr: bob.cashaddr!,
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
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(
|
|
1066
|
-
expect(await bob.getNftTokenBalance(
|
|
1067
|
-
expect((await bob.getTokenUtxos(
|
|
1068
|
-
const tokenUtxos = await bob.getTokenUtxos(
|
|
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
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
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(
|
|
1084
|
-
expect(await bob.getNftTokenBalance(
|
|
1085
|
-
expect((await bob.getTokenUtxos(
|
|
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
|
|
1188
|
+
let category;
|
|
1096
1189
|
{
|
|
1097
1190
|
const aliceUtxos = await aliceWallet.getAddressUtxos();
|
|
1098
1191
|
|
|
1099
|
-
const { unsignedTransaction, sourceOutputs,
|
|
1192
|
+
const { unsignedTransaction, sourceOutputs, categories } =
|
|
1100
1193
|
await aliceWatchWallet.tokenGenesis(
|
|
1101
1194
|
{
|
|
1102
|
-
|
|
1103
|
-
|
|
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
|
-
|
|
1226
|
+
category = categories![0];
|
|
1132
1227
|
|
|
1133
|
-
expect(await aliceWallet.getNftTokenBalance(
|
|
1134
|
-
const tokenUtxos = await aliceWallet.getTokenUtxos(
|
|
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
|
-
|
|
1239
|
+
category,
|
|
1145
1240
|
{
|
|
1146
|
-
|
|
1147
|
-
|
|
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(
|
|
1178
|
-
const tokenUtxos = await aliceWallet.getTokenUtxos(
|
|
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(
|
|
1187
|
-
.
|
|
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
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
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(
|
|
1230
|
-
const tokenUtxos = await aliceWallet.getTokenUtxos(
|
|
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(
|
|
1239
|
-
.
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1403
|
+
category: category,
|
|
1303
1404
|
amount: 2n,
|
|
1304
1405
|
})
|
|
1305
1406
|
)
|