@@ -117,8 +117,10 @@ func testBurnAssets(t *harnessTest) {
117
117
// should get an error saying that we cannot completely burn all assets
118
118
// in an output.
119
119
_ , err = t .tapd .BurnAsset (ctxt , & taprpc.BurnAssetRequest {
120
- Asset : & taprpc.BurnAssetRequest_AssetId {
121
- AssetId : simpleAssetID [:],
120
+ Asset : & taprpc.AssetSpecifier {
121
+ Id : & taprpc.AssetSpecifier_AssetId {
122
+ AssetId : simpleAssetID [:],
123
+ },
122
124
},
123
125
AmountToBurn : outputAmounts [3 ],
124
126
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
@@ -136,18 +138,19 @@ func testBurnAssets(t *harnessTest) {
136
138
)
137
139
138
140
burnResp , err := t .tapd .BurnAsset (ctxt , & taprpc.BurnAssetRequest {
139
- Asset : & taprpc.BurnAssetRequest_AssetId {
140
- AssetId : simpleAssetID [:],
141
+ Asset : & taprpc.AssetSpecifier {
142
+ Id : & taprpc.AssetSpecifier_AssetId {
143
+ AssetId : simpleAssetID [:],
144
+ },
141
145
},
142
146
AmountToBurn : burnAmt ,
143
147
Note : burnNote ,
144
148
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
145
149
})
146
150
require .NoError (t .t , err )
147
151
148
- burnRespJSON , err : = formatProtoJSON (burnResp )
152
+ _ , err = formatProtoJSON (burnResp )
149
153
require .NoError (t .t , err )
150
- t .Logf ("Got response from burning %d units: %v" , burnAmt , burnRespJSON )
151
154
152
155
AssertAssetOutboundTransferWithOutputs (
153
156
t .t , minerClient , t .tapd , burnResp .BurnTransfer ,
@@ -212,17 +215,18 @@ func testBurnAssets(t *harnessTest) {
212
215
// collectible from the original mint TX), while there are other,
213
216
// passive assets in the anchor output.
214
217
burnResp , err = t .tapd .BurnAsset (ctxt , & taprpc.BurnAssetRequest {
215
- Asset : & taprpc.BurnAssetRequest_AssetId {
216
- AssetId : simpleCollectibleGen .AssetId ,
218
+ Asset : & taprpc.AssetSpecifier {
219
+ Id : & taprpc.AssetSpecifier_AssetId {
220
+ AssetId : simpleCollectibleGen .AssetId ,
221
+ },
217
222
},
218
223
AmountToBurn : simpleCollectible .Amount ,
219
224
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
220
225
})
221
226
require .NoError (t .t , err )
222
227
223
- burnRespJSON , err = formatProtoJSON (burnResp )
228
+ _ , err = formatProtoJSON (burnResp )
224
229
require .NoError (t .t , err )
225
- t .Logf ("Got response from burning all units: %v" , burnRespJSON )
226
230
227
231
AssertAssetOutboundTransferWithOutputs (
228
232
t .t , minerClient , t .tapd , burnResp .BurnTransfer ,
@@ -243,18 +247,18 @@ func testBurnAssets(t *harnessTest) {
243
247
const changeAmt = 300
244
248
multiBurnAmt := outputAmounts [2 ] + secondSendAmt - changeAmt
245
249
burnResp , err = t .tapd .BurnAsset (ctxt , & taprpc.BurnAssetRequest {
246
- Asset : & taprpc.BurnAssetRequest_AssetId {
247
- AssetId : simpleAssetGen .AssetId ,
250
+ Asset : & taprpc.AssetSpecifier {
251
+ Id : & taprpc.AssetSpecifier_AssetId {
252
+ AssetId : simpleAssetGen .AssetId ,
253
+ },
248
254
},
249
255
AmountToBurn : multiBurnAmt ,
250
256
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
251
257
})
252
258
require .NoError (t .t , err )
253
259
254
- burnRespJSON , err = formatProtoJSON (burnResp )
260
+ _ , err = formatProtoJSON (burnResp )
255
261
require .NoError (t .t , err )
256
- t .Logf ("Got response from burning units from multiple inputs: %v" ,
257
- burnRespJSON )
258
262
259
263
AssertAssetOutboundTransferWithOutputs (
260
264
t .t , minerClient , t .tapd , burnResp .BurnTransfer ,
@@ -279,28 +283,27 @@ func testBurnAssets(t *harnessTest) {
279
283
IncludeSpent : true ,
280
284
})
281
285
require .NoError (t .t , err )
282
- assets , err : = formatProtoJSON (resp )
286
+ _ , err = formatProtoJSON (resp )
283
287
require .NoError (t .t , err )
284
- t .Logf ("All assets before last burn: %v" , assets )
285
288
286
289
// Test case 5: Burn some units of a grouped asset. We start by making
287
290
// sure we still have the full balance before burning.
288
291
AssertBalanceByID (
289
292
t .t , t .tapd , simpleGroupGen .AssetId , simpleGroup .Amount ,
290
293
)
291
294
burnResp , err = t .tapd .BurnAsset (ctxt , & taprpc.BurnAssetRequest {
292
- Asset : & taprpc.BurnAssetRequest_AssetId {
293
- AssetId : simpleGroupGen .AssetId ,
295
+ Asset : & taprpc.AssetSpecifier {
296
+ Id : & taprpc.AssetSpecifier_AssetId {
297
+ AssetId : simpleGroupGen .AssetId ,
298
+ },
294
299
},
295
300
AmountToBurn : burnAmt ,
296
301
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
297
302
})
298
303
require .NoError (t .t , err )
299
304
300
- burnRespJSON , err = formatProtoJSON (burnResp )
305
+ _ , err = formatProtoJSON (burnResp )
301
306
require .NoError (t .t , err )
302
- t .Logf ("Got response from burning units from grouped asset: %v" ,
303
- burnRespJSON )
304
307
305
308
AssertAssetOutboundTransferWithOutputs (
306
309
t .t , minerClient , t .tapd , burnResp .BurnTransfer ,
@@ -311,10 +314,12 @@ func testBurnAssets(t *harnessTest) {
311
314
t .t , t .tapd , simpleGroupGen .AssetId , simpleGroup .Amount - burnAmt ,
312
315
)
313
316
317
+ // Depending on passive re-anchoring behavior, earlier burn outputs
318
+ // might become spent when inputs are consolidated. We assert only
319
+ // currently unspent burn outputs here.
314
320
AssertBalances (
315
321
t .t , t .tapd ,
316
- burnAmt + simpleCollectible .Amount + multiBurnAmt + burnAmt ,
317
- WithNumUtxos (4 ), WithNumAnchorUtxos (4 ),
322
+ burnAmt + multiBurnAmt + burnAmt ,
318
323
WithScriptKeyType (asset .ScriptKeyBurn ),
319
324
)
320
325
@@ -351,18 +356,18 @@ func testBurnAssets(t *harnessTest) {
351
356
simpleGroupCollect .Amount ,
352
357
)
353
358
burnResp , err = t .tapd .BurnAsset (ctxt , & taprpc.BurnAssetRequest {
354
- Asset : & taprpc.BurnAssetRequest_AssetId {
355
- AssetId : simpleGroupCollectGen .AssetId ,
359
+ Asset : & taprpc.AssetSpecifier {
360
+ Id : & taprpc.AssetSpecifier_AssetId {
361
+ AssetId : simpleGroupCollectGen .AssetId ,
362
+ },
356
363
},
357
364
AmountToBurn : 1 ,
358
365
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
359
366
})
360
367
require .NoError (t .t , err )
361
368
362
- burnRespJSON , err = formatProtoJSON (burnResp )
369
+ _ , err = formatProtoJSON (burnResp )
363
370
require .NoError (t .t , err )
364
- t .Logf ("Got response from burning units from grouped asset: %v" ,
365
- burnRespJSON )
366
371
367
372
AssertAssetOutboundTransferWithOutputs (
368
373
t .t , minerClient , t .tapd , burnResp .BurnTransfer ,
@@ -373,8 +378,7 @@ func testBurnAssets(t *harnessTest) {
373
378
374
379
AssertBalances (
375
380
t .t , t .tapd ,
376
- burnAmt + simpleCollectible .Amount + multiBurnAmt + burnAmt + 1 ,
377
- WithNumUtxos (5 ), WithNumAnchorUtxos (5 ),
381
+ burnAmt + multiBurnAmt + burnAmt + 1 ,
378
382
WithScriptKeyType (asset .ScriptKeyBurn ),
379
383
)
380
384
@@ -422,6 +426,7 @@ func testBurnGroupedAssets(t *harnessTest) {
422
426
423
427
var (
424
428
firstMintResp = firstMintResponses [0 ]
429
+ burnAssetID1 = firstMintResp .AssetGenesis .AssetId
425
430
assetGroupKey = firstMintResp .AssetGroup .TweakedGroupKey
426
431
)
427
432
@@ -456,33 +461,34 @@ func testBurnGroupedAssets(t *harnessTest) {
456
461
assetGroup := assetGroups .Groups [encodedGroupKey ]
457
462
require .Len (t .t , assetGroup .Assets , 2 )
458
463
459
- // Burn some amount of the second asset.
464
+ totalAmt := firstMintResp .Amount + secondMintResp .Amount
465
+ AssertBalanceByGroup (t .t , t .tapd , encodedGroupKey , totalAmt )
466
+
467
+ // Test case 1: Burn by asset id.
460
468
var (
461
- burnAssetID = secondMintResp .AssetGenesis .AssetId
469
+ burnAssetID2 = secondMintResp .AssetGenesis .AssetId
462
470
463
471
preBurnAmt = secondMintResp .Amount
464
472
burnAmt = uint64 (10 )
465
473
postBurnAmt = preBurnAmt - burnAmt
466
474
)
467
475
468
476
burnResp , err := t .tapd .BurnAsset (ctxb , & taprpc.BurnAssetRequest {
469
- Asset : & taprpc.BurnAssetRequest_AssetId {
470
- AssetId : burnAssetID ,
477
+ Asset : & taprpc.AssetSpecifier {
478
+ Id : & taprpc.AssetSpecifier_AssetId {
479
+ AssetId : burnAssetID2 ,
480
+ },
471
481
},
472
482
AmountToBurn : burnAmt ,
473
483
Note : burnNote ,
474
484
ConfirmationText : taprootassets .AssetBurnConfirmationText ,
475
485
})
476
486
require .NoError (t .t , err )
477
487
478
- burnRespJSON , err := formatProtoJSON (burnResp )
479
- require .NoError (t .t , err )
480
- t .Logf ("Got response from burning %d units: %v" , burnAmt , burnRespJSON )
481
-
482
488
// Assert that the asset burn transfer occurred correctly.
483
489
AssertAssetOutboundTransferWithOutputs (
484
490
t .t , miner , t .tapd , burnResp .BurnTransfer ,
485
- [][]byte {burnAssetID }, []uint64 {postBurnAmt , burnAmt }, 0 , 1 , 2 ,
491
+ [][]byte {burnAssetID2 }, []uint64 {postBurnAmt , burnAmt }, 0 , 1 , 2 ,
486
492
true ,
487
493
)
488
494
@@ -502,7 +508,7 @@ func testBurnGroupedAssets(t *harnessTest) {
502
508
)
503
509
504
510
// Our asset balance should have been decreased by the burned amount.
505
- AssertBalanceByID (t .t , t .tapd , burnAssetID , postBurnAmt )
511
+ AssertBalanceByID (t .t , t .tapd , burnAssetID2 , postBurnAmt )
506
512
507
513
// Confirm that the minted asset group still contains two assets.
508
514
assetGroups , err = t .tapd .ListGroups (ctxb , & taprpc.ListGroupsRequest {})
@@ -523,4 +529,29 @@ func testBurnGroupedAssets(t *harnessTest) {
523
529
require .Equal (t .t , burnAmt , burn .Amount )
524
530
require .Equal (t .t , burnNote , burn .Note )
525
531
require .Equal (t .t , assetGroupKey , burn .TweakedGroupKey )
532
+
533
+ // Test case 2: Burn by group key close to the full
534
+ // remaining amount so we select multiple inputs.
535
+ burnAmt = totalAmt - burnAmt - 1
536
+ burnResp , err = t .tapd .BurnAsset (ctxb , & taprpc.BurnAssetRequest {
537
+ Asset : & taprpc.AssetSpecifier {
538
+ Id : & taprpc.AssetSpecifier_GroupKey {
539
+ GroupKey : assetGroupKey ,
540
+ },
541
+ },
542
+ AmountToBurn : burnAmt ,
543
+ ConfirmationText : taprootassets .AssetBurnConfirmationText ,
544
+ })
545
+ require .NoError (t .t , err )
546
+
547
+ // Output 0: 1 (change)
548
+ // Output 1: Asset 1 burn output (partially burnt, 1 unit remaining)
549
+ // Output 2: Asset 2 burn output (completely burnt)
550
+ AssertAssetOutboundTransferWithOutputs (
551
+ t .t , miner , t .tapd , burnResp .BurnTransfer ,
552
+ [][]byte {burnAssetID1 , burnAssetID2 },
553
+ []uint64 {1 , firstMintResp .Amount - 1 , postBurnAmt },
554
+ 1 , 2 , 3 , true ,
555
+ )
556
+ AssertBalanceByGroup (t .t , t .tapd , encodedGroupKey , 1 )
526
557
}
0 commit comments