Skip to content

Commit 1ce13d9

Browse files
committed
itest: burn by group key
1 parent f119640 commit 1ce13d9

File tree

2 files changed

+76
-43
lines changed

2 files changed

+76
-43
lines changed

itest/burn_test.go

Lines changed: 72 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,10 @@ func testBurnAssets(t *harnessTest) {
117117
// should get an error saying that we cannot completely burn all assets
118118
// in an output.
119119
_, 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+
},
122124
},
123125
AmountToBurn: outputAmounts[3],
124126
ConfirmationText: taprootassets.AssetBurnConfirmationText,
@@ -136,18 +138,19 @@ func testBurnAssets(t *harnessTest) {
136138
)
137139

138140
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+
},
141145
},
142146
AmountToBurn: burnAmt,
143147
Note: burnNote,
144148
ConfirmationText: taprootassets.AssetBurnConfirmationText,
145149
})
146150
require.NoError(t.t, err)
147151

148-
burnRespJSON, err := formatProtoJSON(burnResp)
152+
_, err = formatProtoJSON(burnResp)
149153
require.NoError(t.t, err)
150-
t.Logf("Got response from burning %d units: %v", burnAmt, burnRespJSON)
151154

152155
AssertAssetOutboundTransferWithOutputs(
153156
t.t, minerClient, t.tapd, burnResp.BurnTransfer,
@@ -212,17 +215,18 @@ func testBurnAssets(t *harnessTest) {
212215
// collectible from the original mint TX), while there are other,
213216
// passive assets in the anchor output.
214217
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+
},
217222
},
218223
AmountToBurn: simpleCollectible.Amount,
219224
ConfirmationText: taprootassets.AssetBurnConfirmationText,
220225
})
221226
require.NoError(t.t, err)
222227

223-
burnRespJSON, err = formatProtoJSON(burnResp)
228+
_, err = formatProtoJSON(burnResp)
224229
require.NoError(t.t, err)
225-
t.Logf("Got response from burning all units: %v", burnRespJSON)
226230

227231
AssertAssetOutboundTransferWithOutputs(
228232
t.t, minerClient, t.tapd, burnResp.BurnTransfer,
@@ -243,18 +247,18 @@ func testBurnAssets(t *harnessTest) {
243247
const changeAmt = 300
244248
multiBurnAmt := outputAmounts[2] + secondSendAmt - changeAmt
245249
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+
},
248254
},
249255
AmountToBurn: multiBurnAmt,
250256
ConfirmationText: taprootassets.AssetBurnConfirmationText,
251257
})
252258
require.NoError(t.t, err)
253259

254-
burnRespJSON, err = formatProtoJSON(burnResp)
260+
_, err = formatProtoJSON(burnResp)
255261
require.NoError(t.t, err)
256-
t.Logf("Got response from burning units from multiple inputs: %v",
257-
burnRespJSON)
258262

259263
AssertAssetOutboundTransferWithOutputs(
260264
t.t, minerClient, t.tapd, burnResp.BurnTransfer,
@@ -279,28 +283,27 @@ func testBurnAssets(t *harnessTest) {
279283
IncludeSpent: true,
280284
})
281285
require.NoError(t.t, err)
282-
assets, err := formatProtoJSON(resp)
286+
_, err = formatProtoJSON(resp)
283287
require.NoError(t.t, err)
284-
t.Logf("All assets before last burn: %v", assets)
285288

286289
// Test case 5: Burn some units of a grouped asset. We start by making
287290
// sure we still have the full balance before burning.
288291
AssertBalanceByID(
289292
t.t, t.tapd, simpleGroupGen.AssetId, simpleGroup.Amount,
290293
)
291294
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+
},
294299
},
295300
AmountToBurn: burnAmt,
296301
ConfirmationText: taprootassets.AssetBurnConfirmationText,
297302
})
298303
require.NoError(t.t, err)
299304

300-
burnRespJSON, err = formatProtoJSON(burnResp)
305+
_, err = formatProtoJSON(burnResp)
301306
require.NoError(t.t, err)
302-
t.Logf("Got response from burning units from grouped asset: %v",
303-
burnRespJSON)
304307

305308
AssertAssetOutboundTransferWithOutputs(
306309
t.t, minerClient, t.tapd, burnResp.BurnTransfer,
@@ -311,10 +314,12 @@ func testBurnAssets(t *harnessTest) {
311314
t.t, t.tapd, simpleGroupGen.AssetId, simpleGroup.Amount-burnAmt,
312315
)
313316

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.
314320
AssertBalances(
315321
t.t, t.tapd,
316-
burnAmt+simpleCollectible.Amount+multiBurnAmt+burnAmt,
317-
WithNumUtxos(4), WithNumAnchorUtxos(4),
322+
burnAmt+multiBurnAmt+burnAmt,
318323
WithScriptKeyType(asset.ScriptKeyBurn),
319324
)
320325

@@ -351,18 +356,18 @@ func testBurnAssets(t *harnessTest) {
351356
simpleGroupCollect.Amount,
352357
)
353358
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+
},
356363
},
357364
AmountToBurn: 1,
358365
ConfirmationText: taprootassets.AssetBurnConfirmationText,
359366
})
360367
require.NoError(t.t, err)
361368

362-
burnRespJSON, err = formatProtoJSON(burnResp)
369+
_, err = formatProtoJSON(burnResp)
363370
require.NoError(t.t, err)
364-
t.Logf("Got response from burning units from grouped asset: %v",
365-
burnRespJSON)
366371

367372
AssertAssetOutboundTransferWithOutputs(
368373
t.t, minerClient, t.tapd, burnResp.BurnTransfer,
@@ -373,8 +378,7 @@ func testBurnAssets(t *harnessTest) {
373378

374379
AssertBalances(
375380
t.t, t.tapd,
376-
burnAmt+simpleCollectible.Amount+multiBurnAmt+burnAmt+1,
377-
WithNumUtxos(5), WithNumAnchorUtxos(5),
381+
burnAmt+multiBurnAmt+burnAmt+1,
378382
WithScriptKeyType(asset.ScriptKeyBurn),
379383
)
380384

@@ -422,6 +426,7 @@ func testBurnGroupedAssets(t *harnessTest) {
422426

423427
var (
424428
firstMintResp = firstMintResponses[0]
429+
burnAssetID1 = firstMintResp.AssetGenesis.AssetId
425430
assetGroupKey = firstMintResp.AssetGroup.TweakedGroupKey
426431
)
427432

@@ -456,33 +461,34 @@ func testBurnGroupedAssets(t *harnessTest) {
456461
assetGroup := assetGroups.Groups[encodedGroupKey]
457462
require.Len(t.t, assetGroup.Assets, 2)
458463

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.
460468
var (
461-
burnAssetID = secondMintResp.AssetGenesis.AssetId
469+
burnAssetID2 = secondMintResp.AssetGenesis.AssetId
462470

463471
preBurnAmt = secondMintResp.Amount
464472
burnAmt = uint64(10)
465473
postBurnAmt = preBurnAmt - burnAmt
466474
)
467475

468476
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+
},
471481
},
472482
AmountToBurn: burnAmt,
473483
Note: burnNote,
474484
ConfirmationText: taprootassets.AssetBurnConfirmationText,
475485
})
476486
require.NoError(t.t, err)
477487

478-
burnRespJSON, err := formatProtoJSON(burnResp)
479-
require.NoError(t.t, err)
480-
t.Logf("Got response from burning %d units: %v", burnAmt, burnRespJSON)
481-
482488
// Assert that the asset burn transfer occurred correctly.
483489
AssertAssetOutboundTransferWithOutputs(
484490
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,
486492
true,
487493
)
488494

@@ -502,7 +508,7 @@ func testBurnGroupedAssets(t *harnessTest) {
502508
)
503509

504510
// 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)
506512

507513
// Confirm that the minted asset group still contains two assets.
508514
assetGroups, err = t.tapd.ListGroups(ctxb, &taprpc.ListGroupsRequest{})
@@ -523,4 +529,29 @@ func testBurnGroupedAssets(t *harnessTest) {
523529
require.Equal(t.t, burnAmt, burn.Amount)
524530
require.Equal(t.t, burnNote, burn.Note)
525531
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)
526557
}

itest/supply_commit_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,10 @@ func testSupplyCommitMintBurn(t *harnessTest) {
895895
)
896896

897897
burnResp, err := t.tapd.BurnAsset(ctxb, &taprpc.BurnAssetRequest{
898-
Asset: &taprpc.BurnAssetRequest_AssetId{
899-
AssetId: rpcFirstAsset.AssetGenesis.AssetId,
898+
Asset: &taprpc.AssetSpecifier{
899+
Id: &taprpc.AssetSpecifier_AssetId{
900+
AssetId: rpcFirstAsset.AssetGenesis.AssetId,
901+
},
900902
},
901903
AmountToBurn: burnAmt,
902904
Note: burnNote,

0 commit comments

Comments
 (0)