diff --git a/cmd/neofs-adm/internal/modules/morph/initialize.go b/cmd/neofs-adm/internal/modules/morph/initialize.go index faa3df537..ecd8b62eb 100644 --- a/cmd/neofs-adm/internal/modules/morph/initialize.go +++ b/cmd/neofs-adm/internal/modules/morph/initialize.go @@ -21,7 +21,7 @@ import ( ) type initializeContext struct { - Client *client.Client + clientContext // CommitteeAcc is used for retrieving committee address and verification script. CommitteeAcc *wallet.Account // ConsensusAcc is used for retrieving committee address and verification script. @@ -29,9 +29,6 @@ type initializeContext struct { Wallets []*wallet.Wallet // Accounts contains simple signature accounts in the same order as in Wallets. Accounts []*wallet.Account - Hashes []util.Uint256 - WaitDuration time.Duration - PollInterval time.Duration Contracts map[string]*contractState Command *cobra.Command ContractPath string @@ -158,13 +155,15 @@ func newInitializeContext(cmd *cobra.Command, v *viper.Viper) (*initializeContex } initCtx := &initializeContext{ - Client: c, + clientContext: clientContext{ + Client: c, + WaitDuration: time.Second * 30, + PollInterval: time.Second, + }, ConsensusAcc: consensusAcc, CommitteeAcc: committeeAcc, Wallets: wallets, Accounts: accounts, - WaitDuration: time.Second * 30, - PollInterval: time.Second, Command: cmd, Contracts: make(map[string]*contractState), ContractPath: ctrPath, @@ -222,11 +221,15 @@ func openAlphabetWallets(walletDir string) ([]*wallet.Wallet, error) { } func (c *initializeContext) awaitTx() error { + return c.clientContext.awaitTx(c.Command) +} + +func (c *clientContext) awaitTx(cmd *cobra.Command) error { if len(c.Hashes) == 0 { return nil } - c.Command.Println("Waiting for transactions to persist...") + cmd.Println("Waiting for transactions to persist...") tick := time.NewTicker(c.PollInterval) defer tick.Stop() diff --git a/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go b/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go index 43ac70c1a..f8b00ae03 100644 --- a/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go +++ b/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go @@ -87,13 +87,7 @@ func (c *initializeContext) multiSignAndSend(tx *transaction.Transaction, accTyp return err } - h, err := c.Client.SendRawTransaction(tx) - if err != nil { - return err - } - - c.Hashes = append(c.Hashes, h) - return nil + return c.sendTx(tx, c.Command, false) } func (c *initializeContext) multiSign(tx *transaction.Transaction, accType string) error { diff --git a/cmd/neofs-adm/internal/modules/morph/n3client.go b/cmd/neofs-adm/internal/modules/morph/n3client.go index 578772d0f..4862816dc 100644 --- a/cmd/neofs-adm/internal/modules/morph/n3client.go +++ b/cmd/neofs-adm/internal/modules/morph/n3client.go @@ -3,11 +3,22 @@ package morph import ( "context" "errors" + "time" + "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/rpc/client" + "github.com/nspcc-dev/neo-go/pkg/util" + "github.com/spf13/cobra" "github.com/spf13/viper" ) +type clientContext struct { + Client *client.Client + Hashes []util.Uint256 + WaitDuration time.Duration + PollInterval time.Duration +} + func getN3Client(v *viper.Viper) (*client.Client, error) { ctx := context.Background() // FIXME(@fyrchik): timeout context endpoint := v.GetString(endpointFlag) @@ -23,3 +34,17 @@ func getN3Client(v *viper.Viper) (*client.Client, error) { } return c, nil } + +func (c *clientContext) sendTx(tx *transaction.Transaction, cmd *cobra.Command, await bool) error { + h, err := c.Client.SendRawTransaction(tx) + if err != nil { + return err + } + + c.Hashes = append(c.Hashes, h) + + if await { + return c.awaitTx(cmd) + } + return nil +} diff --git a/cmd/neofs-adm/internal/modules/morph/notary.go b/cmd/neofs-adm/internal/modules/morph/notary.go new file mode 100644 index 000000000..e49eca088 --- /dev/null +++ b/cmd/neofs-adm/internal/modules/morph/notary.go @@ -0,0 +1 @@ +package morph