@@ -1403,6 +1403,61 @@ func testCustomChannelsForceClose(_ context.Context, net *NetworkHarness,
1403
1403
// UTXO he can use.
1404
1404
assertNumAssetUTXOs (t .t , daveTap , 1 )
1405
1405
assertNumAssetUTXOs (t .t , charlieTap , 2 )
1406
+
1407
+ // We'll make sure Dave can spend his asset UTXO by sending it all but
1408
+ // one unit to Zane (the universe).
1409
+ assetSendAmount := daveBalance - 1
1410
+ zaneAddr , err := universeTap .NewAddr (ctxb , & taprpc.NewAddrRequest {
1411
+ Amt : assetSendAmount ,
1412
+ AssetId : assetID ,
1413
+ ProofCourierAddr : fmt .Sprintf (
1414
+ "%s://%s" , proof .UniverseRpcCourierType ,
1415
+ charlieTap .node .Cfg .LitAddr (),
1416
+ ),
1417
+ })
1418
+ require .NoError (t .t , err )
1419
+
1420
+ t .Logf ("Sending %v asset from Dave units to Zane..." , assetSendAmount )
1421
+
1422
+ // Send the assets to Zane. We expect Dave to have 3 transfers: the
1423
+ // funding txn, their force close sweep, and now this new send.
1424
+ itest .AssertAddrCreated (t .t , universeTap , cents , zaneAddr )
1425
+ sendResp , err := daveTap .SendAsset (ctxb , & taprpc.SendAssetRequest {
1426
+ TapAddrs : []string {zaneAddr .Encoded },
1427
+ })
1428
+ require .NoError (t .t , err )
1429
+ itest .ConfirmAndAssertOutboundTransfer (
1430
+ t .t , t .lndHarness .Miner .Client , daveTap , sendResp , assetID ,
1431
+ []uint64 {1 , assetSendAmount }, 2 , 3 ,
1432
+ )
1433
+ itest .AssertNonInteractiveRecvComplete (t .t , universeTap , 1 )
1434
+
1435
+ // And now we also send all assets but one from Charlie to the universe
1436
+ // to make sure the time lock sweep output can also be spent correctly.
1437
+ assetSendAmount = charlieBalance - 1
1438
+ zaneAddr2 , err := universeTap .NewAddr (ctxb , & taprpc.NewAddrRequest {
1439
+ Amt : assetSendAmount ,
1440
+ AssetId : assetID ,
1441
+ ProofCourierAddr : fmt .Sprintf (
1442
+ "%s://%s" , proof .UniverseRpcCourierType ,
1443
+ charlieTap .node .Cfg .LitAddr (),
1444
+ ),
1445
+ })
1446
+ require .NoError (t .t , err )
1447
+
1448
+ t .Logf ("Sending %v asset from Charlie units to Zane..." ,
1449
+ assetSendAmount )
1450
+
1451
+ itest .AssertAddrCreated (t .t , universeTap , cents , zaneAddr2 )
1452
+ sendResp2 , err := charlieTap .SendAsset (ctxb , & taprpc.SendAssetRequest {
1453
+ TapAddrs : []string {zaneAddr2 .Encoded },
1454
+ })
1455
+ require .NoError (t .t , err )
1456
+ itest .ConfirmAndAssertOutboundTransfer (
1457
+ t .t , t .lndHarness .Miner .Client , charlieTap , sendResp2 , assetID ,
1458
+ []uint64 {1 , assetSendAmount }, 3 , 4 ,
1459
+ )
1460
+ itest .AssertNonInteractiveRecvComplete (t .t , universeTap , 2 )
1406
1461
}
1407
1462
1408
1463
// testCustomChannelsBreach tests a force close scenario that breaches an old
0 commit comments