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