@@ -436,7 +436,8 @@ var universeProofCommand = cli.Command{
436436 ` ,
437437 Subcommands : []cli.Command {
438438 universeProofQueryCommand ,
439- universeProofInsertInsert ,
439+ universeProofInsertCommand ,
440+ universeProofPushCommand ,
440441 },
441442}
442443
@@ -474,24 +475,34 @@ func parseAssetKey(ctx *cli.Context) (*unirpc.AssetKey, error) {
474475 }, nil
475476}
476477
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 ) {
482479 assetKey , err := parseAssetKey (ctx )
483480 if err != nil {
484- return err
481+ return nil , err
485482 }
486483
487484 universeID , err := parseUniverseID (ctx , true )
488485 if err != nil {
489- return err
486+ return nil , err
490487 }
491- uProof , err := client .QueryProof (ctxc , & unirpc.UniverseKey {
488+
489+ return & unirpc.UniverseKey {
492490 Id : universeID ,
493491 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 )
495506 if err != nil {
496507 return err
497508 }
@@ -500,7 +511,7 @@ func universeProofQuery(ctx *cli.Context) error {
500511 return nil
501512}
502513
503- var universeProofInsertInsert = cli.Command {
514+ var universeProofInsertCommand = cli.Command {
504515 Name : "insert" ,
505516 Usage : "insert a new universe proof" ,
506517 Description : `
@@ -519,25 +530,17 @@ func universeProofInsert(ctx *cli.Context) error {
519530 return cli .ShowSubcommandHelp (ctx )
520531 }
521532
522- assetKey , err := parseAssetKey (ctx )
533+ uKey , err := parseUniverseProofArgs (ctx )
523534 if err != nil {
524535 return err
525536 }
526537
527- universeID , err := parseUniverseID (ctx , true )
528- if err != nil {
529- return err
530- }
531538 filePath := lncfg .CleanAndExpandPath (ctx .String (proofPathName ))
532539 rawFile , err := readFile (filePath )
533540 if err != nil {
534541 return fmt .Errorf ("unable to read proof file: %w" , err )
535542 }
536543
537- ctxc := getContext ()
538- client , cleanUp := getUniverseClient (ctx )
539- defer cleanUp ()
540-
541544 // The server always expects the raw state transition proof, so
542545 // depending on the input we get, we either need to extract the last
543546 // state transition proof or can use it directly.
@@ -563,11 +566,12 @@ func universeProofInsert(ctx *cli.Context) error {
563566 return fmt .Errorf ("invalid proof file format" )
564567 }
565568
569+ ctxc := getContext ()
570+ client , cleanUp := getUniverseClient (ctx )
571+ defer cleanUp ()
572+
566573 req := & unirpc.AssetProof {
567- Key : & unirpc.UniverseKey {
568- Id : universeID ,
569- LeafKey : assetKey ,
570- },
574+ Key : uKey ,
571575 AssetLeaf : & unirpc.AssetLeaf {
572576 Proof : rawProof ,
573577 },
@@ -581,6 +585,59 @@ func universeProofInsert(ctx *cli.Context) error {
581585 return nil
582586}
583587
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+
584641var (
585642 universeHostName = "universe_host"
586643)
@@ -745,24 +802,26 @@ func universeFederationAdd(ctx *cli.Context) error {
745802
746803const universeServerID = "server_id"
747804
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+
748817var universeFederationDelCommand = cli.Command {
749818 Name : "del" ,
750819 ShortName : "d" ,
751820 Description : `
752821 Remove a server from the Federation. Servers can be identified either
753822 via their ID, or the server host.
754823 ` ,
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 ,
766825 Action : universeFederationDel ,
767826}
768827
0 commit comments