@@ -436,7 +436,8 @@ var universeProofCommand = cli.Command{
436
436
` ,
437
437
Subcommands : []cli.Command {
438
438
universeProofQueryCommand ,
439
- universeProofInsertInsert ,
439
+ universeProofInsertCommand ,
440
+ universeProofPushCommand ,
440
441
},
441
442
}
442
443
@@ -474,24 +475,34 @@ func parseAssetKey(ctx *cli.Context) (*unirpc.AssetKey, error) {
474
475
}, nil
475
476
}
476
477
477
- func universeProofQuery (ctx * cli.Context ) error {
478
- ctxc := getContext ()
479
- client , cleanUp := getUniverseClient (ctx )
480
- defer cleanUp ()
481
-
478
+ func parseUniverseProofArgs (ctx * cli.Context ) (* unirpc.UniverseKey , error ) {
482
479
assetKey , err := parseAssetKey (ctx )
483
480
if err != nil {
484
- return err
481
+ return nil , err
485
482
}
486
483
487
484
universeID , err := parseUniverseID (ctx , true )
488
485
if err != nil {
489
- return err
486
+ return nil , err
490
487
}
491
- uProof , err := client .QueryProof (ctxc , & unirpc.UniverseKey {
488
+
489
+ return & unirpc.UniverseKey {
492
490
Id : universeID ,
493
491
LeafKey : assetKey ,
494
- })
492
+ }, nil
493
+ }
494
+
495
+ func universeProofQuery (ctx * cli.Context ) error {
496
+ uKey , err := parseUniverseProofArgs (ctx )
497
+ if err != nil {
498
+ return err
499
+ }
500
+
501
+ ctxc := getContext ()
502
+ client , cleanUp := getUniverseClient (ctx )
503
+ defer cleanUp ()
504
+
505
+ uProof , err := client .QueryProof (ctxc , uKey )
495
506
if err != nil {
496
507
return err
497
508
}
@@ -500,7 +511,7 @@ func universeProofQuery(ctx *cli.Context) error {
500
511
return nil
501
512
}
502
513
503
- var universeProofInsertInsert = cli.Command {
514
+ var universeProofInsertCommand = cli.Command {
504
515
Name : "insert" ,
505
516
Usage : "insert a new universe proof" ,
506
517
Description : `
@@ -519,25 +530,17 @@ func universeProofInsert(ctx *cli.Context) error {
519
530
return cli .ShowSubcommandHelp (ctx )
520
531
}
521
532
522
- assetKey , err := parseAssetKey (ctx )
533
+ uKey , err := parseUniverseProofArgs (ctx )
523
534
if err != nil {
524
535
return err
525
536
}
526
537
527
- universeID , err := parseUniverseID (ctx , true )
528
- if err != nil {
529
- return err
530
- }
531
538
filePath := lncfg .CleanAndExpandPath (ctx .String (proofPathName ))
532
539
rawFile , err := readFile (filePath )
533
540
if err != nil {
534
541
return fmt .Errorf ("unable to read proof file: %w" , err )
535
542
}
536
543
537
- ctxc := getContext ()
538
- client , cleanUp := getUniverseClient (ctx )
539
- defer cleanUp ()
540
-
541
544
// The server always expects the raw state transition proof, so
542
545
// depending on the input we get, we either need to extract the last
543
546
// state transition proof or can use it directly.
@@ -563,11 +566,12 @@ func universeProofInsert(ctx *cli.Context) error {
563
566
return fmt .Errorf ("invalid proof file format" )
564
567
}
565
568
569
+ ctxc := getContext ()
570
+ client , cleanUp := getUniverseClient (ctx )
571
+ defer cleanUp ()
572
+
566
573
req := & unirpc.AssetProof {
567
- Key : & unirpc.UniverseKey {
568
- Id : universeID ,
569
- LeafKey : assetKey ,
570
- },
574
+ Key : uKey ,
571
575
AssetLeaf : & unirpc.AssetLeaf {
572
576
Proof : rawProof ,
573
577
},
@@ -581,6 +585,59 @@ func universeProofInsert(ctx *cli.Context) error {
581
585
return nil
582
586
}
583
587
588
+ var universeProofPushCommand = cli.Command {
589
+ Name : "push" ,
590
+ ShortName : "p" ,
591
+ Usage : "push a proof to a remote Universe" ,
592
+ Description : `
593
+ Push a proof present in the local Universe to a remote Universe.
594
+ ` ,
595
+ Flags : append (universeProofArgs , universeServerArgs ... ),
596
+ Action : universeProofPush ,
597
+ }
598
+
599
+ func universeProofPush (ctx * cli.Context ) error {
600
+ uniServerName := ctx .String (universeHostName )
601
+ uniServerID := ctx .Int (universeServerID )
602
+ uniAddr := unirpc.UniverseFederationServer {}
603
+
604
+ switch {
605
+ case uniServerName == "" && uniServerID == 0 :
606
+ return cli .ShowSubcommandHelp (ctx )
607
+
608
+ case uniServerName != "" && uniServerID != 0 :
609
+ return fmt .Errorf ("cannot specify both universe host name " +
610
+ "and ID" )
611
+
612
+ case uniServerName != "" :
613
+ uniAddr .Host = uniServerName
614
+
615
+ case uniServerID != 0 :
616
+ uniAddr .Id = int32 (uniServerID )
617
+ }
618
+
619
+ uKey , err := parseUniverseProofArgs (ctx )
620
+ if err != nil {
621
+ return err
622
+ }
623
+
624
+ ctxc := getContext ()
625
+ client , cleanUp := getUniverseClient (ctx )
626
+ defer cleanUp ()
627
+
628
+ req := unirpc.PushProofRequest {
629
+ Key : uKey ,
630
+ Server : & uniAddr ,
631
+ }
632
+ resp , err := client .PushProof (ctxc , & req )
633
+ if err != nil {
634
+ return err
635
+ }
636
+
637
+ printRespJSON (resp )
638
+ return nil
639
+ }
640
+
584
641
var (
585
642
universeHostName = "universe_host"
586
643
)
@@ -745,24 +802,26 @@ func universeFederationAdd(ctx *cli.Context) error {
745
802
746
803
const universeServerID = "server_id"
747
804
805
+ var universeServerArgs = []cli.Flag {
806
+ cli.StringFlag {
807
+ Name : universeHostName ,
808
+ Usage : "the host:port or just host of the remote " +
809
+ "universe" ,
810
+ },
811
+ cli.IntFlag {
812
+ Name : universeServerID ,
813
+ Usage : "the ID of the universe server in our federation" ,
814
+ },
815
+ }
816
+
748
817
var universeFederationDelCommand = cli.Command {
749
818
Name : "del" ,
750
819
ShortName : "d" ,
751
820
Description : `
752
821
Remove a server from the Federation. Servers can be identified either
753
822
via their ID, or the server host.
754
823
` ,
755
- Flags : []cli.Flag {
756
- cli.StringFlag {
757
- Name : universeHostName ,
758
- Usage : "the host:port or just host of the remote " +
759
- "universe" ,
760
- },
761
- cli.IntFlag {
762
- Name : universeServerID ,
763
- Usage : "the ID of the universe server to delete" ,
764
- },
765
- },
824
+ Flags : universeServerArgs ,
766
825
Action : universeFederationDel ,
767
826
}
768
827
0 commit comments