-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
control: add network settings management via ir control (#3059)
- Loading branch information
Showing
32 changed files
with
2,749 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package control | ||
|
||
import ( | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var notaryCmd = &cobra.Command{ | ||
Use: "notary", | ||
Short: "Commands with notary request with alphabet key of inner ring node", | ||
} | ||
|
||
func initControlNotaryCmd() { | ||
notaryCmd.AddCommand(listNotaryCmd) | ||
notaryCmd.AddCommand(notaryRequestCmd) | ||
notaryCmd.AddCommand(notarySignCmd) | ||
|
||
initControlNotaryListCmd() | ||
initControlNotaryRequestCmd() | ||
initControlNotarySignCmd() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package control | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/nspcc-dev/neo-go/pkg/util" | ||
rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client" | ||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/commonflags" | ||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key" | ||
ircontrol "github.com/nspcc-dev/neofs-node/pkg/services/control/ir" | ||
ircontrolsrv "github.com/nspcc-dev/neofs-node/pkg/services/control/ir/server" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var listNotaryCmd = &cobra.Command{ | ||
Use: "list", | ||
Short: "Get list of all notary requests in network", | ||
Long: "Get list of all notary requests in network", | ||
Args: cobra.NoArgs, | ||
RunE: listNotary, | ||
} | ||
|
||
func initControlNotaryListCmd() { | ||
initControlFlags(listNotaryCmd) | ||
} | ||
|
||
func listNotary(cmd *cobra.Command, _ []string) error { | ||
ctx, cancel := commonflags.GetCommandContext(cmd) | ||
defer cancel() | ||
|
||
pk, err := key.Get(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
cli, err := getClient(ctx) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
req := new(ircontrol.NotaryListRequest) | ||
|
||
req.SetBody(new(ircontrol.NotaryListRequest_Body)) | ||
|
||
err = ircontrolsrv.SignMessage(pk, req) | ||
if err != nil { | ||
return fmt.Errorf("could not sign request: %w", err) | ||
} | ||
|
||
var resp *ircontrol.NotaryListResponse | ||
err = cli.ExecRaw(func(client *rawclient.Client) error { | ||
resp, err = ircontrol.NotaryList(client, req) | ||
return err | ||
}) | ||
if err != nil { | ||
return fmt.Errorf("rpc error: %w", err) | ||
} | ||
|
||
err = verifyResponse(resp.GetSignature(), resp.GetBody()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
txs := resp.GetBody().GetTransactions() | ||
|
||
for _, tx := range txs { | ||
hash, err := util.Uint256DecodeBytesBE(tx.GetHash()) | ||
if err != nil { | ||
return fmt.Errorf("failed to decode hash: %w", err) | ||
} | ||
cmd.Println(hash.String()) | ||
} | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
package control | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
|
||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys" | ||
"github.com/nspcc-dev/neo-go/pkg/util" | ||
rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client" | ||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/commonflags" | ||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key" | ||
ircontrol "github.com/nspcc-dev/neofs-node/pkg/services/control/ir" | ||
ircontrolsrv "github.com/nspcc-dev/neofs-node/pkg/services/control/ir/server" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
const notaryMethodFlag = "method" | ||
|
||
var notaryRequestCmd = &cobra.Command{ | ||
Use: "request", | ||
Short: "Create and send a notary request", | ||
Long: "Create and send a notary request with one of the following methods:\n" + | ||
"- newEpoch, transaction for creating of new NeoFS epoch event in FS chain, no args\n" + | ||
"- setConfig, transaction to add/update global config value in the NeoFS network, 1 arg in the form key=val\n" + | ||
"- removeNode, transaction to move nodes to the Offline state in the candidates list, 1 arg is the public key of the node", | ||
RunE: notaryRequest, | ||
} | ||
|
||
func initControlNotaryRequestCmd() { | ||
initControlFlags(notaryRequestCmd) | ||
|
||
flags := notaryRequestCmd.Flags() | ||
flags.String(notaryMethodFlag, "", "Requested method") | ||
} | ||
|
||
func notaryRequest(cmd *cobra.Command, args []string) error { | ||
ctx, cancel := commonflags.GetCommandContext(cmd) | ||
defer cancel() | ||
|
||
pk, err := key.Get(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
cli, err := getClient(ctx) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
req := new(ircontrol.NotaryRequestRequest) | ||
body := new(ircontrol.NotaryRequestRequest_Body) | ||
req.SetBody(body) | ||
|
||
method, _ := cmd.Flags().GetString(notaryMethodFlag) | ||
body.SetMethod(method) | ||
|
||
switch method { | ||
case "newEpoch": | ||
if len(args) > 0 { | ||
cmd.Println("method 'newEpoch', but the args provided, they will be ignored") | ||
} | ||
case "setConfig": | ||
if len(args) != 1 { | ||
return fmt.Errorf("invalid number of args provided for 'setConfig', expected 1, got %d", len(args)) | ||
} | ||
|
||
kv := strings.SplitN(args[0], "=", 2) | ||
if len(kv) != 2 { | ||
return fmt.Errorf("invalid parameter format: must be 'key=val', got: %s", args[0]) | ||
} | ||
|
||
body.SetArgs([][]byte{[]byte(kv[0]), []byte(kv[1])}) | ||
case "removeNode": | ||
if len(args) != 1 { | ||
return fmt.Errorf("invalid number of args provided for 'removeNode', expected 1, got %d", len(args)) | ||
} | ||
key, err := keys.NewPublicKeyFromString(args[0]) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
body.SetArgs([][]byte{key.Bytes()}) | ||
} | ||
|
||
err = ircontrolsrv.SignMessage(pk, req) | ||
if err != nil { | ||
return fmt.Errorf("could not sign request: %w", err) | ||
} | ||
|
||
var resp *ircontrol.NotaryRequestResponse | ||
err = cli.ExecRaw(func(client *rawclient.Client) error { | ||
resp, err = ircontrol.NotaryRequest(client, req) | ||
return err | ||
}) | ||
if err != nil { | ||
return fmt.Errorf("rpc error: %w", err) | ||
} | ||
|
||
err = verifyResponse(resp.GetSignature(), resp.GetBody()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
hashB := resp.GetBody().GetHash() | ||
|
||
hash, err := util.Uint256DecodeBytesBE(hashB) | ||
if err != nil { | ||
return fmt.Errorf("failed to decode hash %v: %w", hashB, err) | ||
} | ||
cmd.Printf("Transaction Hash: %s\n", hash.String()) | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package control | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/nspcc-dev/neo-go/pkg/util" | ||
rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client" | ||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/commonflags" | ||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key" | ||
ircontrol "github.com/nspcc-dev/neofs-node/pkg/services/control/ir" | ||
ircontrolsrv "github.com/nspcc-dev/neofs-node/pkg/services/control/ir/server" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var notarySignHashFlag string | ||
|
||
var notarySignCmd = &cobra.Command{ | ||
Use: "sign", | ||
Short: "Sign notary request by its hash", | ||
Long: "Sign notary request by its hash", | ||
Args: cobra.NoArgs, | ||
RunE: notarySign, | ||
} | ||
|
||
func initControlNotarySignCmd() { | ||
initControlFlags(notarySignCmd) | ||
|
||
flags := notarySignCmd.Flags() | ||
flags.StringVar(¬arySignHashFlag, "hash", "", "hash of the notary request") | ||
} | ||
|
||
func notarySign(cmd *cobra.Command, _ []string) error { | ||
ctx, cancel := commonflags.GetCommandContext(cmd) | ||
defer cancel() | ||
|
||
pk, err := key.Get(cmd) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
cli, err := getClient(ctx) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
req := new(ircontrol.NotarySignRequest) | ||
body := new(ircontrol.NotarySignRequest_Body) | ||
req.SetBody(body) | ||
hash, err := util.Uint256DecodeStringBE(notarySignHashFlag) | ||
if err != nil { | ||
return fmt.Errorf("failed to decode hash: %w", err) | ||
} | ||
body.SetHash(hash.BytesBE()) | ||
|
||
err = ircontrolsrv.SignMessage(pk, req) | ||
if err != nil { | ||
return fmt.Errorf("could not sign request: %w", err) | ||
} | ||
|
||
var resp *ircontrol.NotarySignResponse | ||
err = cli.ExecRaw(func(client *rawclient.Client) error { | ||
resp, err = ircontrol.NotarySign(client, req) | ||
return err | ||
}) | ||
if err != nil { | ||
return fmt.Errorf("rpc error: %w", err) | ||
} | ||
|
||
err = verifyResponse(resp.GetSignature(), resp.GetBody()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
## neofs-cli control notary | ||
|
||
Commands with notary request with alphabet key of inner ring node | ||
|
||
### Options | ||
|
||
``` | ||
-h, --help help for notary | ||
``` | ||
|
||
### Options inherited from parent commands | ||
|
||
``` | ||
-c, --config string Config file (default is $HOME/.config/neofs-cli/config.yaml) | ||
-v, --verbose Verbose output | ||
``` | ||
|
||
### SEE ALSO | ||
|
||
* [neofs-cli control](neofs-cli_control.md) - Operations with storage node | ||
* [neofs-cli control notary list](neofs-cli_control_notary_list.md) - Get list of all notary requests in network | ||
* [neofs-cli control notary request](neofs-cli_control_notary_request.md) - Create and send a notary request | ||
* [neofs-cli control notary sign](neofs-cli_control_notary_sign.md) - Sign notary request by its hash | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
## neofs-cli control notary list | ||
|
||
Get list of all notary requests in network | ||
|
||
### Synopsis | ||
|
||
Get list of all notary requests in network | ||
|
||
``` | ||
neofs-cli control notary list [flags] | ||
``` | ||
|
||
### Options | ||
|
||
``` | ||
--address string Address of wallet account | ||
--endpoint string Remote node control address (as 'multiaddr' or '<host>:<port>') | ||
-h, --help help for list | ||
-t, --timeout duration Timeout for the operation (default 15s) | ||
-w, --wallet string Path to the wallet | ||
``` | ||
|
||
### Options inherited from parent commands | ||
|
||
``` | ||
-c, --config string Config file (default is $HOME/.config/neofs-cli/config.yaml) | ||
-v, --verbose Verbose output | ||
``` | ||
|
||
### SEE ALSO | ||
|
||
* [neofs-cli control notary](neofs-cli_control_notary.md) - Commands with notary request with alphabet key of inner ring node | ||
|
Oops, something went wrong.