@@ -410,8 +410,8 @@ func TestDistributeCoins(t *testing.T) {
410
410
vPktVersion : tappsbt .V1 ,
411
411
expectedInputs : map [asset.ID ][]asset.ScriptKey {
412
412
assetID2 .ID (): {
413
- assetID2Tranche1 .ScriptKey ,
414
413
assetID2Tranche2 .ScriptKey ,
414
+ assetID2Tranche1 .ScriptKey ,
415
415
},
416
416
},
417
417
expectedOutputs : map [asset.ID ][]* tappsbt.VOutput {
@@ -452,8 +452,8 @@ func TestDistributeCoins(t *testing.T) {
452
452
},
453
453
expectedInputs : map [asset.ID ][]asset.ScriptKey {
454
454
assetID2 .ID (): {
455
- assetID2Tranche1 .ScriptKey ,
456
455
assetID2Tranche2 .ScriptKey ,
456
+ assetID2Tranche1 .ScriptKey ,
457
457
},
458
458
},
459
459
expectedOutputs : map [asset.ID ][]* tappsbt.VOutput {
@@ -613,19 +613,19 @@ func TestDistributeCoins(t *testing.T) {
613
613
},
614
614
expectedInputs : map [asset.ID ][]asset.ScriptKey {
615
615
assetID1 .ID (): {
616
- assetID1Tranche1 .ScriptKey ,
617
- assetID1Tranche2 .ScriptKey ,
618
616
assetID1Tranche3 .ScriptKey ,
617
+ assetID1Tranche2 .ScriptKey ,
618
+ assetID1Tranche1 .ScriptKey ,
619
619
},
620
620
assetID2 .ID (): {
621
- assetID2Tranche1 .ScriptKey ,
622
- assetID2Tranche2 .ScriptKey ,
623
621
assetID2Tranche3 .ScriptKey ,
622
+ assetID2Tranche2 .ScriptKey ,
623
+ assetID2Tranche1 .ScriptKey ,
624
624
},
625
625
assetID3 .ID (): {
626
- assetID3Tranche1 .ScriptKey ,
627
- assetID3Tranche2 .ScriptKey ,
628
626
assetID3Tranche3 .ScriptKey ,
627
+ assetID3Tranche2 .ScriptKey ,
628
+ assetID3Tranche1 .ScriptKey ,
629
629
},
630
630
},
631
631
expectedOutputs : map [asset.ID ][]* tappsbt.VOutput {
@@ -689,19 +689,19 @@ func TestDistributeCoins(t *testing.T) {
689
689
},
690
690
expectedInputs : map [asset.ID ][]asset.ScriptKey {
691
691
assetID1 .ID (): {
692
- assetID1Tranche1 .ScriptKey ,
693
- assetID1Tranche2 .ScriptKey ,
694
692
assetID1Tranche3 .ScriptKey ,
693
+ assetID1Tranche2 .ScriptKey ,
694
+ assetID1Tranche1 .ScriptKey ,
695
695
},
696
696
assetID2 .ID (): {
697
- assetID2Tranche1 .ScriptKey ,
698
- assetID2Tranche2 .ScriptKey ,
699
697
assetID2Tranche3 .ScriptKey ,
698
+ assetID2Tranche2 .ScriptKey ,
699
+ assetID2Tranche1 .ScriptKey ,
700
700
},
701
701
assetID3 .ID (): {
702
- assetID3Tranche1 .ScriptKey ,
703
- assetID3Tranche2 .ScriptKey ,
704
702
assetID3Tranche3 .ScriptKey ,
703
+ assetID3Tranche2 .ScriptKey ,
704
+ assetID3Tranche1 .ScriptKey ,
705
705
},
706
706
},
707
707
expectedOutputs : map [asset.ID ][]* tappsbt.VOutput {
@@ -770,19 +770,19 @@ func TestDistributeCoins(t *testing.T) {
770
770
},
771
771
expectedInputs : map [asset.ID ][]asset.ScriptKey {
772
772
assetID1 .ID (): {
773
- assetID1Tranche1 .ScriptKey ,
774
- assetID1Tranche2 .ScriptKey ,
775
773
assetID1Tranche3 .ScriptKey ,
774
+ assetID1Tranche2 .ScriptKey ,
775
+ assetID1Tranche1 .ScriptKey ,
776
776
},
777
777
assetID2 .ID (): {
778
- assetID2Tranche1 .ScriptKey ,
779
- assetID2Tranche2 .ScriptKey ,
780
778
assetID2Tranche3 .ScriptKey ,
779
+ assetID2Tranche2 .ScriptKey ,
780
+ assetID2Tranche1 .ScriptKey ,
781
781
},
782
782
assetID3 .ID (): {
783
- assetID3Tranche1 .ScriptKey ,
784
- assetID3Tranche2 .ScriptKey ,
785
783
assetID3Tranche3 .ScriptKey ,
784
+ assetID3Tranche2 .ScriptKey ,
785
+ assetID3Tranche1 .ScriptKey ,
786
786
},
787
787
},
788
788
expectedOutputs : map [asset.ID ][]* tappsbt.VOutput {
@@ -1230,3 +1230,139 @@ func TestAllocationsFromTemplate(t *testing.T) {
1230
1230
})
1231
1231
}
1232
1232
}
1233
+
1234
+ // TestSortPiecesWithProofs tests that we can sort pieces of assets with their
1235
+ // proofs. The sorting is done first by asset ID, then by the amount of the
1236
+ // proofs in descending order and then by script key.
1237
+ func TestSortPiecesWithProofs (t * testing.T ) {
1238
+ key1 := asset .NewScriptKey (test .ParsePubKey (
1239
+ t , "03a15fd6e1fded33270ae01183dfc8f8edd1274644b7d014ac5ab576f" +
1240
+ "bf8328b05" ,
1241
+ ))
1242
+ key2 := asset .NewScriptKey (test .ParsePubKey (
1243
+ t , "029191ec924fb3c6bbd0d264d0b3cf97fcb2fc1eb5737184e7e17e35c" +
1244
+ "6609ee853" ,
1245
+ ))
1246
+ tests := []struct {
1247
+ name string
1248
+ input []* piece
1249
+ expected []* piece
1250
+ }{{
1251
+ name : "sort by asset ID and proofs by amount" ,
1252
+ input : []* piece {{
1253
+ assetID : asset.ID {0x02 },
1254
+ proofs : []* proof.Proof {{
1255
+ Asset : asset.Asset {
1256
+ Amount : 50 ,
1257
+ ScriptKey : key1 ,
1258
+ },
1259
+ }, {
1260
+ Asset : asset.Asset {
1261
+ Amount : 300 ,
1262
+ ScriptKey : key2 ,
1263
+ },
1264
+ }, {
1265
+ Asset : asset.Asset {
1266
+ Amount : 100 ,
1267
+ ScriptKey : key2 ,
1268
+ },
1269
+ }},
1270
+ }, {
1271
+ assetID : asset.ID {0x01 },
1272
+ proofs : []* proof.Proof {{
1273
+ Asset : asset.Asset {
1274
+ Amount : 200 ,
1275
+ ScriptKey : key1 ,
1276
+ },
1277
+ }, {
1278
+ Asset : asset.Asset {
1279
+ Amount : 150 ,
1280
+ ScriptKey : key2 ,
1281
+ },
1282
+ }},
1283
+ }},
1284
+ expected : []* piece {{
1285
+ assetID : asset.ID {0x01 },
1286
+ proofs : []* proof.Proof {{
1287
+ Asset : asset.Asset {
1288
+ Amount : 200 ,
1289
+ ScriptKey : key1 ,
1290
+ },
1291
+ }, {
1292
+ Asset : asset.Asset {
1293
+ Amount : 150 ,
1294
+ ScriptKey : key2 ,
1295
+ },
1296
+ }},
1297
+ }, {
1298
+ assetID : asset.ID {0x02 },
1299
+ proofs : []* proof.Proof {{
1300
+ Asset : asset.Asset {
1301
+ Amount : 300 ,
1302
+ ScriptKey : key2 ,
1303
+ },
1304
+ }, {
1305
+ Asset : asset.Asset {
1306
+ Amount : 100 ,
1307
+ ScriptKey : key2 ,
1308
+ },
1309
+ }, {
1310
+ Asset : asset.Asset {
1311
+ Amount : 50 ,
1312
+ ScriptKey : key1 ,
1313
+ },
1314
+ }},
1315
+ }},
1316
+ }, {
1317
+ name : "script keys after amount" ,
1318
+ input : []* piece {{
1319
+ assetID : asset.ID {0x01 },
1320
+ proofs : []* proof.Proof {{
1321
+ Asset : asset.Asset {
1322
+ Amount : 50 ,
1323
+ ScriptKey : key1 ,
1324
+ },
1325
+ }, {
1326
+ Asset : asset.Asset {
1327
+ Amount : 50 ,
1328
+ ScriptKey : key2 ,
1329
+ },
1330
+ }, {
1331
+ Asset : asset.Asset {
1332
+ Amount : 50 ,
1333
+ ScriptKey : key2 ,
1334
+ },
1335
+ }},
1336
+ }},
1337
+ expected : []* piece {{
1338
+ assetID : asset.ID {0x01 },
1339
+ proofs : []* proof.Proof {{
1340
+ Asset : asset.Asset {
1341
+ Amount : 50 ,
1342
+ ScriptKey : key2 ,
1343
+ },
1344
+ }, {
1345
+ Asset : asset.Asset {
1346
+ Amount : 50 ,
1347
+ ScriptKey : key2 ,
1348
+ },
1349
+ }, {
1350
+ Asset : asset.Asset {
1351
+ Amount : 50 ,
1352
+ ScriptKey : key1 ,
1353
+ },
1354
+ }},
1355
+ }},
1356
+ }, {
1357
+ name : "empty input" ,
1358
+ input : []* piece {},
1359
+ expected : []* piece {},
1360
+ }}
1361
+
1362
+ for _ , tt := range tests {
1363
+ t .Run (tt .name , func (t * testing.T ) {
1364
+ sortPiecesWithProofs (tt .input )
1365
+ require .Equal (t , tt .expected , tt .input )
1366
+ })
1367
+ }
1368
+ }
0 commit comments