diff --git a/modules/cli/cmd/sequencer/sudo/feeAsset.go b/modules/cli/cmd/sequencer/sudo/feeAsset.go deleted file mode 100644 index bd5e624..0000000 --- a/modules/cli/cmd/sequencer/sudo/feeAsset.go +++ /dev/null @@ -1,154 +0,0 @@ -package sudo - -import ( - "github.com/astriaorg/astria-cli-go/modules/cli/cmd" - sequencercmd "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/ui" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// feeAssetCmd represents the root command for interacting with fee assets on -// the sequencer. -var feeAssetCmd = &cobra.Command{ - Use: "fee-asset", - Short: "Interact with fee assets on the sequencer.", -} - -// addFeeAssetCmd represents the add fee asset command -var addFeeAssetCmd = &cobra.Command{ - Use: "add [asset] [--keyfile | --keyring-address | --privkey]", - Short: "Add a fee asset to the sequencer.", - Args: cobra.ExactArgs(1), - Run: addFeeAssetCmdHandler, -} - -func addFeeAssetCmdHandler(c *cobra.Command, args []string) { - flagHandler := cmd.CreateCliFlagHandlerWithUseConfigFlag(c, cmd.EnvPrefix, "network") - networkConfig := sequencercmd.GetNetworkConfigFromFlags(flagHandler) - flagHandler.SetConfig(networkConfig) - - printJSON := flagHandler.GetValue("json") == "true" - sequencerURL := flagHandler.GetValue("sequencer-url") - sequencerURL = sequencercmd.AddPortToURL(sequencerURL) - sequencerChainID := flagHandler.GetValue("sequencer-chain-id") - isAsync := flagHandler.GetValue("async") == "true" - - asset := args[0] - - priv, err := sequencercmd.GetPrivateKeyFromFlags(c) - if err != nil { - log.WithError(err).Error("Could not get private key from flags") - panic(err) - } - from, err := sequencercmd.PrivateKeyFromText(priv) - if err != nil { - log.WithError(err).Error("Error decoding private key") - panic(err) - } - - opts := sequencer.FeeAssetOpts{ - IsAsync: isAsync, - AddressPrefix: sequencercmd.DefaultAddressPrefix, - FromKey: from, - SequencerURL: sequencerURL, - SequencerChainID: sequencerChainID, - Asset: asset, - } - tx, err := sequencer.AddFeeAsset(opts) - if err != nil { - log.WithError(err).Error("Error adding fee asset") - panic(err) - } - - printer := ui.ResultsPrinter{ - Data: tx, - PrintJSON: printJSON, - } - printer.Render() -} - -// removeFeeAssetCmd represents the remove fee asset command -var removeFeeAssetCmd = &cobra.Command{ - Use: "remove [asset] [--keyfile | --keyring-address | --privkey]", - Short: "Remove a fee asset from the sequencer.", - Args: cobra.ExactArgs(1), - Run: removeFeeAssetCmdHandler, -} - -func removeFeeAssetCmdHandler(c *cobra.Command, args []string) { - flagHandler := cmd.CreateCliFlagHandlerWithUseConfigFlag(c, cmd.EnvPrefix, "network") - networkConfig := sequencercmd.GetNetworkConfigFromFlags(flagHandler) - flagHandler.SetConfig(networkConfig) - - printJSON := flagHandler.GetValue("json") == "true" - sequencerURL := flagHandler.GetValue("sequencer-url") - sequencerURL = sequencercmd.AddPortToURL(sequencerURL) - sequencerChainID := flagHandler.GetValue("sequencer-chain-id") - isAsync := flagHandler.GetValue("async") == "true" - - asset := args[0] - - priv, err := sequencercmd.GetPrivateKeyFromFlags(c) - if err != nil { - log.WithError(err).Error("Could not get private key from flags") - panic(err) - } - from, err := sequencercmd.PrivateKeyFromText(priv) - if err != nil { - log.WithError(err).Error("Error decoding private key") - panic(err) - } - - opts := sequencer.FeeAssetOpts{ - IsAsync: isAsync, - AddressPrefix: sequencercmd.DefaultAddressPrefix, - FromKey: from, - SequencerURL: sequencerURL, - SequencerChainID: sequencerChainID, - Asset: asset, - } - tx, err := sequencer.RemoveFeeAsset(opts) - if err != nil { - log.WithError(err).Error("Error removing fee asset") - panic(err) - } - - printer := ui.ResultsPrinter{ - Data: tx, - PrintJSON: printJSON, - } - printer.Render() -} - -func init() { - sudoCmd.AddCommand(feeAssetCmd) - feeAssetCmd.AddCommand(addFeeAssetCmd) - - afafh := cmd.CreateCliFlagHandler(addFeeAssetCmd, cmd.EnvPrefix) - afafh.BindStringFlag("network", sequencercmd.DefaultTargetNetwork, "Configure the values to target a specific network.") - afafh.BindStringPFlag("sequencer-url", "u", sequencercmd.DefaultSequencerURL, "The URL of the sequencer to add fee asset to.") - afafh.BindBoolFlag("json", false, "Output the command result in JSON format.") - afafh.BindBoolFlag("async", false, "If true, the function will return immediately. If false, the function will wait for the transaction to be seen on the network.") - afafh.BindStringPFlag("sequencer-chain-id", "c", sequencercmd.DefaultSequencerChainID, "The chain ID of the sequencer.") - afafh.BindStringFlag("keyfile", "", "Path to secure keyfile for sender.") - afafh.BindStringFlag("keyring-address", "", "The address of the sender. Requires private key be stored in keyring.") - afafh.BindStringFlag("privkey", "", "The private key of the sender.") - addFeeAssetCmd.MarkFlagsOneRequired("keyfile", "keyring-address", "privkey") - addFeeAssetCmd.MarkFlagsMutuallyExclusive("keyfile", "keyring-address", "privkey") - - feeAssetCmd.AddCommand(removeFeeAssetCmd) - - rfafh := cmd.CreateCliFlagHandler(removeFeeAssetCmd, cmd.EnvPrefix) - rfafh.BindStringFlag("network", sequencercmd.DefaultTargetNetwork, "Configure the values to target a specific network.") - rfafh.BindStringPFlag("sequencer-url", "u", sequencercmd.DefaultSequencerURL, "The URL of the sequencer to remove fee asset from.") - rfafh.BindBoolFlag("json", false, "Output the command result in JSON format.") - rfafh.BindBoolFlag("async", false, "If true, the function will return immediately. If false, the function will wait for the transaction to be seen on the network.") - rfafh.BindStringPFlag("sequencer-chain-id", "c", sequencercmd.DefaultSequencerChainID, "The chain ID of the sequencer.") - rfafh.BindStringFlag("keyfile", "", "Path to secure keyfile for sender.") - rfafh.BindStringFlag("keyring-address", "", "The address of the sender. Requires private key be stored in keyring.") - rfafh.BindStringFlag("privkey", "", "The private key of the sender.") - removeFeeAssetCmd.MarkFlagsOneRequired("keyfile", "keyring-address", "privkey") - removeFeeAssetCmd.MarkFlagsMutuallyExclusive("keyfile", "keyring-address", "privkey") -} diff --git a/modules/cli/cmd/sequencer/sudo/ibcRelayer.go b/modules/cli/cmd/sequencer/sudo/ibcRelayer.go deleted file mode 100644 index a633f8d..0000000 --- a/modules/cli/cmd/sequencer/sudo/ibcRelayer.go +++ /dev/null @@ -1,156 +0,0 @@ -package sudo - -import ( - "github.com/astriaorg/astria-cli-go/modules/cli/cmd" - sequencercmd "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/ui" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// IBCRelayerCmd represents the root command for interacting with IBC Relayers -// on the sequencer. -var IBCRelayerCmd = &cobra.Command{ - Use: "ibc-relayer", - Short: "Interact with IBC Relayers on the sequencer.", -} - -// addIBCRelayerCmd represents the add ibc relayer command -var addIBCRelayerCmd = &cobra.Command{ - Use: "add [address] [--keyfile | --keyring-address | --privkey]", - Short: "Add an address to the IBC Relayer set on the sequencer.", - Args: cobra.ExactArgs(1), - Run: addIBCRelayerCmdHandler, -} - -func addIBCRelayerCmdHandler(c *cobra.Command, args []string) { - flagHandler := cmd.CreateCliFlagHandlerWithUseConfigFlag(c, cmd.EnvPrefix, "network") - networkConfig := sequencercmd.GetNetworkConfigFromFlags(flagHandler) - flagHandler.SetConfig(networkConfig) - - printJSON := flagHandler.GetValue("json") == "true" - sequencerURL := flagHandler.GetValue("sequencer-url") - sequencerURL = sequencercmd.AddPortToURL(sequencerURL) - sequencerChainID := flagHandler.GetValue("sequencer-chain-id") - isAsync := flagHandler.GetValue("async") == "true" - - ibcAdd := args[0] - addIbcAddress := sequencercmd.AddressFromText(ibcAdd) - - priv, err := sequencercmd.GetPrivateKeyFromFlags(c) - if err != nil { - log.WithError(err).Error("Could not get private key from flags") - panic(err) - } - from, err := sequencercmd.PrivateKeyFromText(priv) - if err != nil { - log.WithError(err).Error("Error decoding private key") - panic(err) - } - - opts := sequencer.IBCRelayerOpts{ - IsAsync: isAsync, - AddressPrefix: sequencercmd.DefaultAddressPrefix, - FromKey: from, - SequencerURL: sequencerURL, - SequencerChainID: sequencerChainID, - IBCRelayerAddress: addIbcAddress, - } - tx, err := sequencer.AddIBCRelayer(opts) - if err != nil { - log.WithError(err).Error("Error adding IBC relayer") - panic(err) - } - - printer := ui.ResultsPrinter{ - Data: tx, - PrintJSON: printJSON, - } - printer.Render() -} - -// removeIBCRelayerCmd represents the remove ibc relayer command -var removeIBCRelayerCmd = &cobra.Command{ - Use: "remove [address] [--keyfile | --keyring-address | --privkey]", - Short: "Remove an address from the IBC Relayer set on the sequencer.", - Args: cobra.ExactArgs(1), - Run: removeIBCRelayerCmdHandler, -} - -func removeIBCRelayerCmdHandler(c *cobra.Command, args []string) { - flagHandler := cmd.CreateCliFlagHandlerWithUseConfigFlag(c, cmd.EnvPrefix, "network") - networkConfig := sequencercmd.GetNetworkConfigFromFlags(flagHandler) - flagHandler.SetConfig(networkConfig) - - printJSON := flagHandler.GetValue("json") == "true" - sequencerURL := flagHandler.GetValue("sequencer-url") - sequencerURL = sequencercmd.AddPortToURL(sequencerURL) - sequencerChainID := flagHandler.GetValue("sequencer-chain-id") - isAsync := flagHandler.GetValue("async") == "true" - - ibcRmv := args[0] - rmvIbcAddress := sequencercmd.AddressFromText(ibcRmv) - - priv, err := sequencercmd.GetPrivateKeyFromFlags(c) - if err != nil { - log.WithError(err).Error("Could not get private key from flags") - panic(err) - } - from, err := sequencercmd.PrivateKeyFromText(priv) - if err != nil { - log.WithError(err).Error("Error decoding private key") - panic(err) - } - - opts := sequencer.IBCRelayerOpts{ - IsAsync: isAsync, - AddressPrefix: sequencercmd.DefaultAddressPrefix, - FromKey: from, - SequencerURL: sequencerURL, - SequencerChainID: sequencerChainID, - IBCRelayerAddress: rmvIbcAddress, - } - tx, err := sequencer.RemoveIBCRelayer(opts) - if err != nil { - log.WithError(err).Error("Error removing IBC relayer") - panic(err) - } - - printer := ui.ResultsPrinter{ - Data: tx, - PrintJSON: printJSON, - } - printer.Render() -} - -func init() { - sudoCmd.AddCommand(IBCRelayerCmd) - IBCRelayerCmd.AddCommand(addIBCRelayerCmd) - - aibfh := cmd.CreateCliFlagHandler(addIBCRelayerCmd, cmd.EnvPrefix) - aibfh.BindStringFlag("network", sequencercmd.DefaultTargetNetwork, "Configure the values to target a specific network.") - aibfh.BindStringPFlag("sequencer-url", "u", sequencercmd.DefaultSequencerURL, "The URL of the sequencer to add the relayer address to.") - aibfh.BindBoolFlag("json", false, "Output the command result in JSON format.") - aibfh.BindBoolFlag("async", false, "If true, the function will return immediately. If false, the function will wait for the transaction to be seen on the network.") - aibfh.BindStringPFlag("sequencer-chain-id", "c", sequencercmd.DefaultSequencerChainID, "The chain ID of the sequencer.") - aibfh.BindStringFlag("keyfile", "", "Path to secure keyfile for sender.") - aibfh.BindStringFlag("keyring-address", "", "The address of the sender. Requires private key be stored in keyring.") - aibfh.BindStringFlag("privkey", "", "The private key of the sender.") - addIBCRelayerCmd.MarkFlagsOneRequired("keyfile", "keyring-address", "privkey") - addIBCRelayerCmd.MarkFlagsMutuallyExclusive("keyfile", "keyring-address", "privkey") - - IBCRelayerCmd.AddCommand(removeIBCRelayerCmd) - - ribfh := cmd.CreateCliFlagHandler(removeIBCRelayerCmd, cmd.EnvPrefix) - ribfh.BindStringFlag("network", sequencercmd.DefaultTargetNetwork, "Configure the values to target a specific network.") - ribfh.BindStringPFlag("sequencer-url", "u", sequencercmd.DefaultSequencerURL, "The URL of the sequencer to remove the relayer address from.") - ribfh.BindBoolFlag("json", false, "Output the command result in JSON format.") - ribfh.BindBoolFlag("async", false, "If true, the function will return immediately. If false, the function will wait for the transaction to be seen on the network.") - ribfh.BindStringPFlag("sequencer-chain-id", "c", sequencercmd.DefaultSequencerChainID, "The chain ID of the sequencer.") - ribfh.BindStringFlag("keyfile", "", "Path to secure keyfile for sender.") - ribfh.BindStringFlag("keyring-address", "", "The address of the sender. Requires private key be stored in keyring.") - ribfh.BindStringFlag("privkey", "", "The private key of the sender.") - removeIBCRelayerCmd.MarkFlagsOneRequired("keyfile", "keyring-address", "privkey") - removeIBCRelayerCmd.MarkFlagsMutuallyExclusive("keyfile", "keyring-address", "privkey") -} diff --git a/modules/cli/cmd/sequencer/sudo/sudo.go b/modules/cli/cmd/sequencer/sudo/sudo.go deleted file mode 100644 index e2d96b6..0000000 --- a/modules/cli/cmd/sequencer/sudo/sudo.go +++ /dev/null @@ -1,16 +0,0 @@ -package sudo - -import ( - "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer" - "github.com/spf13/cobra" -) - -// sudoCmd represents the root sequencer sudo command -var sudoCmd = &cobra.Command{ - Use: "sudo", - Short: "The root command for all sudo commands for interacting with the sequencer.", -} - -func init() { - sequencer.SequencerCmd.AddCommand(sudoCmd) -} diff --git a/modules/cli/cmd/sequencer/sudo/sudoAddressChange.go b/modules/cli/cmd/sequencer/sudo/sudoAddressChange.go deleted file mode 100644 index 64125d4..0000000 --- a/modules/cli/cmd/sequencer/sudo/sudoAddressChange.go +++ /dev/null @@ -1,81 +0,0 @@ -package sudo - -import ( - "github.com/astriaorg/astria-cli-go/modules/cli/cmd" - sequencercmd "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/ui" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// sudoAddressChangeCmd represents the sudo address change command -var sudoAddressChangeCmd = &cobra.Command{ - Use: "sudo-address-change [address] [--keyfile | --keyring-address | --privkey]", - Short: "Update the sequencer's sudo address to a new address.", - Long: `Update the sequencer's sudo address to a new address. The provided address must be a valid address on the chain and will become the new sudo address.`, - Args: cobra.ExactArgs(1), - Run: sudoAddressChangeCmdHandler, -} - -func sudoAddressChangeCmdHandler(c *cobra.Command, args []string) { - flagHandler := cmd.CreateCliFlagHandlerWithUseConfigFlag(c, cmd.EnvPrefix, "network") - networkConfig := sequencercmd.GetNetworkConfigFromFlags(flagHandler) - flagHandler.SetConfig(networkConfig) - - printJSON := flagHandler.GetValue("json") == "true" - sequencerURL := flagHandler.GetValue("sequencer-url") - sequencerURL = sequencercmd.AddPortToURL(sequencerURL) - sequencerChainID := flagHandler.GetValue("sequencer-chain-id") - isAsync := flagHandler.GetValue("async") == "true" - - to := args[0] - toAddress := sequencercmd.AddressFromText(to) - - priv, err := sequencercmd.GetPrivateKeyFromFlags(c) - if err != nil { - log.WithError(err).Error("Could not get private key from flags") - panic(err) - } - from, err := sequencercmd.PrivateKeyFromText(priv) - if err != nil { - log.WithError(err).Error("Error decoding private key") - panic(err) - } - - opts := sequencer.ChangeSudoAddressOpts{ - IsAsync: isAsync, - AddressPrefix: sequencercmd.DefaultAddressPrefix, - FromKey: from, - UpdateAddress: toAddress, - SequencerURL: sequencerURL, - SequencerChainID: sequencerChainID, - } - tx, err := sequencer.ChangeSudoAddress(opts) - if err != nil { - log.WithError(err).Error("Error updating sudo address") - panic(err) - } - - printer := ui.ResultsPrinter{ - Data: tx, - PrintJSON: printJSON, - } - printer.Render() -} - -func init() { - sudoCmd.AddCommand(sudoAddressChangeCmd) - - flaghandler := cmd.CreateCliFlagHandler(sudoAddressChangeCmd, cmd.EnvPrefix) - flaghandler.BindStringFlag("network", sequencercmd.DefaultTargetNetwork, "Configure the values to target a specific network.") - flaghandler.BindBoolFlag("json", false, "Output the command result in JSON format.") - flaghandler.BindBoolFlag("async", false, "If true, the function will return immediately. If false, the function will wait for the transaction to be seen on the network.") - flaghandler.BindStringPFlag("sequencer-url", "u", sequencercmd.DefaultSequencerURL, "The URL of the sequencer to update the sudo address on.") - flaghandler.BindStringPFlag("sequencer-chain-id", "c", sequencercmd.DefaultSequencerChainID, "The chain ID of the sequencer.") - flaghandler.BindStringFlag("keyfile", "", "Path to secure keyfile for sender.") - flaghandler.BindStringFlag("keyring-address", "", "The address of the sender. Requires private key be stored in keyring.") - flaghandler.BindStringFlag("privkey", "", "The private key of the sender.") - addIBCRelayerCmd.MarkFlagsOneRequired("keyfile", "keyring-address", "privkey") - addIBCRelayerCmd.MarkFlagsMutuallyExclusive("keyfile", "keyring-address", "privkey") -} diff --git a/modules/cli/cmd/sequencer/sudo/validatorUpdate.go b/modules/cli/cmd/sequencer/sudo/validatorUpdate.go deleted file mode 100644 index a84e5d2..0000000 --- a/modules/cli/cmd/sequencer/sudo/validatorUpdate.go +++ /dev/null @@ -1,95 +0,0 @@ -package sudo - -import ( - "strconv" - - "github.com/astriaorg/astria-cli-go/modules/cli/cmd" - sequencercmd "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/sequencer" - "github.com/astriaorg/astria-cli-go/modules/cli/internal/ui" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// validatorUpdateCmd represents the validator update command -var validatorUpdateCmd = &cobra.Command{ - Use: "validator-update [public key] [power] [--keyfile | --keyring-address | --privkey]", - Short: "Update a validator on the sequencer.", - Long: `Update a validator on the sequencer. The user needs to provide a public key and a power level for the validator.`, - Args: cobra.ExactArgs(2), - Run: validatorUpdateCmdHandler, -} - -func validatorUpdateCmdHandler(c *cobra.Command, args []string) { - flagHandler := cmd.CreateCliFlagHandlerWithUseConfigFlag(c, cmd.EnvPrefix, "network") - networkConfig := sequencercmd.GetNetworkConfigFromFlags(flagHandler) - flagHandler.SetConfig(networkConfig) - - printJSON := flagHandler.GetValue("json") == "true" - sequencerURL := flagHandler.GetValue("sequencer-url") - sequencerURL = sequencercmd.AddPortToURL(sequencerURL) - sequencerChainID := flagHandler.GetValue("sequencer-chain-id") - isAsync := flagHandler.GetValue("async") == "true" - - pk := args[0] - pubKey, err := sequencercmd.PublicKeyFromText(pk) - if err != nil { - log.WithError(err).Error("Error decoding public key") - panic(err) - } - - pow := args[1] - power, err := strconv.ParseInt(pow, 10, 64) - if err != nil { - log.WithError(err).Errorf("Error decoding power string to int64 %v", pow) - panic(err) - } - - priv, err := sequencercmd.GetPrivateKeyFromFlags(c) - if err != nil { - log.WithError(err).Error("Could not get private key from flags") - panic(err) - } - from, err := sequencercmd.PrivateKeyFromText(priv) - if err != nil { - log.WithError(err).Error("Error decoding private key") - panic(err) - } - - opts := sequencer.UpdateValidatorOpts{ - IsAsync: isAsync, - AddressPrefix: sequencercmd.DefaultAddressPrefix, - FromKey: from, - PubKey: pubKey, - Power: power, - SequencerURL: sequencerURL, - SequencerChainID: sequencerChainID, - } - tx, err := sequencer.UpdateValidator(opts) - if err != nil { - log.WithError(err).Error("Error updating validator") - panic(err) - } - - printer := ui.ResultsPrinter{ - Data: tx, - PrintJSON: printJSON, - } - printer.Render() -} - -func init() { - sudoCmd.AddCommand(validatorUpdateCmd) - - flaghandler := cmd.CreateCliFlagHandler(validatorUpdateCmd, cmd.EnvPrefix) - flaghandler.BindStringFlag("network", sequencercmd.DefaultTargetNetwork, "Configure the values to target a specific network.") - flaghandler.BindBoolFlag("json", false, "Output the command result in JSON format.") - flaghandler.BindBoolFlag("async", false, "If true, the function will return immediately. If false, the function will wait for the transaction to be seen on the network.") - flaghandler.BindStringPFlag("sequencer-url", "u", sequencercmd.DefaultSequencerURL, "The URL of the sequencer to update the validator on.") - flaghandler.BindStringPFlag("sequencer-chain-id", "c", sequencercmd.DefaultSequencerChainID, "The chain ID of the sequencer.") - flaghandler.BindStringFlag("keyfile", "", "Path to secure keyfile for sender.") - flaghandler.BindStringFlag("keyring-address", "", "The address of the sender. Requires private key be stored in keyring.") - flaghandler.BindStringFlag("privkey", "", "The private key of the sender.") - addIBCRelayerCmd.MarkFlagsOneRequired("keyfile", "keyring-address", "privkey") - addIBCRelayerCmd.MarkFlagsMutuallyExclusive("keyfile", "keyring-address", "privkey") -} diff --git a/modules/cli/integration_tests/cmd_sequencer_integration_test.go b/modules/cli/integration_tests/cmd_sequencer_integration_test.go index 919119e..37a298f 100644 --- a/modules/cli/integration_tests/cmd_sequencer_integration_test.go +++ b/modules/cli/integration_tests/cmd_sequencer_integration_test.go @@ -9,7 +9,6 @@ import ( "math/big" "os/exec" "testing" - "time" "github.com/astriaorg/astria-cli-go/modules/cli/internal/sequencer" "github.com/stretchr/testify/assert" @@ -27,36 +26,6 @@ const TestBinPath = "../../../bin/astria-go-testy" // NOTE - the ordering of these tests matters -func TestAddAndRemoveFeeAssets(t *testing.T) { - key := fmt.Sprintf("--privkey=%s", TestFromPrivKey) - // test synchronously first - - // add a fee asset - addFeeAssetCmdSync := exec.Command(TestBinPath, "sequencer", "sudo", "fee-asset", "add", "bananas", key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err := addFeeAssetCmdSync.CombinedOutput() - assert.NoError(t, err) - - // remove a fee asset - removeFeeAssetCmdSync := exec.Command(TestBinPath, "sequencer", "sudo", "fee-asset", "remove", "bananas", key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err = removeFeeAssetCmdSync.CombinedOutput() - assert.NoError(t, err) - - // NOTE - test synchronously - // add a fee asset - testAssetName := "testAsset" - addFeeAssetCmd := exec.Command(TestBinPath, "sequencer", "sudo", "fee-asset", "add", testAssetName, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = addFeeAssetCmd.CombinedOutput() - assert.NoError(t, err) - - // remove a fee asset - removeFeeAssetCmd := exec.Command(TestBinPath, "sequencer", "sudo", "fee-asset", "remove", testAssetName, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = removeFeeAssetCmd.CombinedOutput() - assert.NoError(t, err) - - // wait a bit for async tx to be processed - time.Sleep(2 * time.Second) -} - func TestTransferAndGetNonce(t *testing.T) { // get initial blockheight getBlockHeightCmd := exec.Command(TestBinPath, "sequencer", "blockheight", "--json", "--sequencer-url", SequencerURL) @@ -186,76 +155,6 @@ func TestTransferFlags(t *testing.T) { assert.Error(t, err) } -func TestRemoveAndAddIBCRelayer(t *testing.T) { - key := fmt.Sprintf("--privkey=%s", TestFromPrivKey) - - // remove an address from the existing IBC relayer set - removeIBCRelayerCmd := exec.Command(TestBinPath, "sequencer", "sudo", "ibc-relayer", "remove", TestTo, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err := removeIBCRelayerCmd.CombinedOutput() - assert.NoError(t, err) - - // add same address back to the IBC relayer set - addIBCRelayerCmd := exec.Command(TestBinPath, "sequencer", "sudo", "ibc-relayer", "add", TestTo, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err = addIBCRelayerCmd.CombinedOutput() - assert.NoError(t, err) - - // test asynchronously - // remove an address from the existing IBC relayer set - removeIBCRelayerCmdAsync := exec.Command(TestBinPath, "sequencer", "sudo", "ibc-relayer", "remove", TestTo, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = removeIBCRelayerCmdAsync.CombinedOutput() - assert.NoError(t, err) - - // add same address back to the IBC relayer set - addIBCRelayerCmdAsync := exec.Command(TestBinPath, "sequencer", "sudo", "ibc-relayer", "add", TestTo, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = addIBCRelayerCmdAsync.CombinedOutput() - assert.NoError(t, err) - - // wait a bit for async tx to be processed - time.Sleep(2 * time.Second) -} - -func TestValidatorUpdate(t *testing.T) { - // update the validator power - key := fmt.Sprintf("--privkey=%s", TestFromPrivKey) - validatorUpdateCmd := exec.Command(TestBinPath, "sequencer", "sudo", "validator-update", TestToPubKey, "100", key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err := validatorUpdateCmd.CombinedOutput() - assert.NoError(t, err) - - // revert the validator power - validatorUpdateCmd = exec.Command(TestBinPath, "sequencer", "sudo", "validator-update", TestToPubKey, "10", key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err = validatorUpdateCmd.CombinedOutput() - assert.NoError(t, err) - - // test async - // update the validator power - validatorUpdateCmdAsync := exec.Command(TestBinPath, "sequencer", "sudo", "validator-update", TestToPubKey, "100", key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = validatorUpdateCmdAsync.CombinedOutput() - assert.NoError(t, err) - - // revert the validator power - validatorUpdateCmdAsync = exec.Command(TestBinPath, "sequencer", "sudo", "validator-update", TestToPubKey, "10", key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = validatorUpdateCmdAsync.CombinedOutput() - assert.NoError(t, err) - - // wait a bit for async tx to be processed - time.Sleep(2 * time.Second) -} - -func TestUpdateSudoAddress(t *testing.T) { - key := fmt.Sprintf("--privkey=%s", TestFromPrivKey) - - // change the sudo address - addressChangeCmd := exec.Command(TestBinPath, "sequencer", "sudo", "sudo-address-change", TestTo, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID) - _, err := addressChangeCmd.CombinedOutput() - assert.NoError(t, err) - - // async - // change the sudo address - addressChangeCmdAsync := exec.Command(TestBinPath, "sequencer", "sudo", "sudo-address-change", TestTo, key, "--sequencer-url", SequencerURL, "--sequencer-chain-id", SequencerChainID, "--async") - _, err = addressChangeCmdAsync.CombinedOutput() - assert.NoError(t, err) -} - func TestGetBlock(t *testing.T) { // get initial blockheight getBlockHeightCmd := exec.Command(TestBinPath, "sequencer", "blockheight", "--json", "--sequencer-url", SequencerURL) diff --git a/modules/cli/internal/sequencer/sequencer.go b/modules/cli/internal/sequencer/sequencer.go index ba61bfb..1cd59e4 100644 --- a/modules/cli/internal/sequencer/sequencer.go +++ b/modules/cli/internal/sequencer/sequencer.go @@ -8,8 +8,6 @@ import ( "time" txproto "buf.build/gen/go/astria/protocol-apis/protocolbuffers/go/astria/protocol/transactions/v1alpha1" - "buf.build/gen/go/astria/protocol-apis/protocolbuffers/go/astria_vendored/tendermint/abci" - "buf.build/gen/go/astria/protocol-apis/protocolbuffers/go/astria_vendored/tendermint/crypto" "github.com/astriaorg/astria-cli-go/modules/bech32m" "github.com/astriaorg/astria-cli-go/modules/go-sequencer-client/client" @@ -386,456 +384,3 @@ func BridgeLock(opts BridgeLockOpts) (*BridgeLockResponse, error) { return tr, nil } - -// AddFeeAsset adds a fee asset to the sequencer. -func AddFeeAsset(opts FeeAssetOpts) (*FeeAssetResponse, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Debugf("AddFeeAssetOpts: %v", opts) - - // client - log.Debug("Creating CometBFT client with url: ", opts.SequencerURL) - c, err := client.NewClient(opts.SequencerURL) - if err != nil { - log.WithError(err).Error("Error creating sequencer client") - return &FeeAssetResponse{}, err - } - - // Get current address nonce - signer := client.NewSigner(opts.FromKey) - fromAddr := signer.Address() - addr, err := bech32m.EncodeFromBytes(opts.AddressPrefix, fromAddr) - if err != nil { - log.WithError(err).Error("Failed to encode address") - return nil, err - } - nonce, err := c.GetNonce(ctx, addr.String()) - if err != nil { - log.WithError(err).Error("Error getting nonce") - return &FeeAssetResponse{}, err - } - - tx := &txproto.UnsignedTransaction{ - Params: &txproto.TransactionParams{ - ChainId: opts.SequencerChainID, - Nonce: nonce, - }, - Actions: []*txproto.Action{ - { - Value: &txproto.Action_FeeAssetChangeAction{ - FeeAssetChangeAction: &txproto.FeeAssetChangeAction{ - Value: &txproto.FeeAssetChangeAction_Addition{ - Addition: opts.Asset, - }, - }, - }, - }, - }, - } - - // sign transaction - signed, err := signer.SignTransaction(tx) - if err != nil { - log.WithError(err).Error("Error signing transaction") - return &FeeAssetResponse{}, err - } - - // broadcast tx - resp, err := c.BroadcastTx(ctx, signed, opts.IsAsync) - if err != nil { - log.WithError(err).Error("Error broadcasting transaction") - return &FeeAssetResponse{}, err - } - log.Debugf("Broadcast response: %v", resp) - - // response - hash := hex.EncodeToString(resp.Hash) - tr := &FeeAssetResponse{ - From: addr.String(), - Nonce: nonce, - TxHash: hash, - FeeAssetId: opts.Asset, - } - - log.Debugf("Transfer hash: %v", hash) - return tr, nil -} - -// RemoveFeeAsset removes a fee asset from the sequencer. -func RemoveFeeAsset(opts FeeAssetOpts) (*FeeAssetResponse, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Debugf("RemoveFeeAssetOpts: %v", opts) - - // client - log.Debug("Creating CometBFT client with url: ", opts.SequencerURL) - c, err := client.NewClient(opts.SequencerURL) - if err != nil { - log.WithError(err).Error("Error creating sequencer client") - return &FeeAssetResponse{}, err - } - - // Get current address nonce - signer := client.NewSigner(opts.FromKey) - fromAddr := signer.Address() - addr, err := bech32m.EncodeFromBytes(opts.AddressPrefix, fromAddr) - if err != nil { - log.WithError(err).Error("Failed to encode address") - return nil, err - } - nonce, err := c.GetNonce(ctx, addr.String()) - if err != nil { - log.WithError(err).Error("Error getting nonce") - return &FeeAssetResponse{}, err - } - - tx := &txproto.UnsignedTransaction{ - Params: &txproto.TransactionParams{ - ChainId: opts.SequencerChainID, - Nonce: nonce, - }, - Actions: []*txproto.Action{ - { - Value: &txproto.Action_FeeAssetChangeAction{ - FeeAssetChangeAction: &txproto.FeeAssetChangeAction{ - Value: &txproto.FeeAssetChangeAction_Removal{ - Removal: opts.Asset, - }, - }, - }, - }, - }, - } - - // sign transaction - signed, err := signer.SignTransaction(tx) - if err != nil { - log.WithError(err).Error("Error signing transaction") - return &FeeAssetResponse{}, err - } - - // broadcast tx - resp, err := c.BroadcastTx(ctx, signed, opts.IsAsync) - if err != nil { - log.WithError(err).Error("Error broadcasting transaction") - return &FeeAssetResponse{}, err - } - log.Debugf("Broadcast response: %v", resp) - - // response - hash := hex.EncodeToString(resp.Hash) - tr := &FeeAssetResponse{ - From: addr.String(), - Nonce: nonce, - TxHash: hash, - FeeAssetId: opts.Asset, - } - - log.Debugf("Transfer hash: %v", hash) - return tr, nil -} - -// AddIBCRelayer adds an IBC Relayer address to the sequencer. -func AddIBCRelayer(opts IBCRelayerOpts) (*IBCRelayerResponse, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Debugf("AddIBCRelayerOpts: %v", opts) - - // client - log.Debug("Creating CometBFT client with url: ", opts.SequencerURL) - c, err := client.NewClient(opts.SequencerURL) - if err != nil { - log.WithError(err).Error("Error creating sequencer client") - return &IBCRelayerResponse{}, err - } - - // Get current address nonce - signer := client.NewSigner(opts.FromKey) - fromAddr := signer.Address() - addr, err := bech32m.EncodeFromBytes(opts.AddressPrefix, fromAddr) - if err != nil { - log.WithError(err).Error("Failed to encode address") - return nil, err - } - nonce, err := c.GetNonce(ctx, addr.String()) - if err != nil { - log.WithError(err).Error("Error getting nonce") - return &IBCRelayerResponse{}, err - } - - tx := &txproto.UnsignedTransaction{ - Params: &txproto.TransactionParams{ - ChainId: opts.SequencerChainID, - Nonce: nonce, - }, - Actions: []*txproto.Action{ - { - Value: &txproto.Action_IbcRelayerChangeAction{ - IbcRelayerChangeAction: &txproto.IbcRelayerChangeAction{ - Value: &txproto.IbcRelayerChangeAction_Addition{ - Addition: opts.IBCRelayerAddress, - }, - }, - }, - }, - }, - } - - // sign transaction - signed, err := signer.SignTransaction(tx) - if err != nil { - log.WithError(err).Error("Error signing transaction") - return &IBCRelayerResponse{}, err - } - - // broadcast tx - resp, err := c.BroadcastTx(ctx, signed, opts.IsAsync) - if err != nil { - log.WithError(err).Error("Error broadcasting transaction") - return &IBCRelayerResponse{}, err - } - log.Debugf("Broadcast response: %v", resp) - - // response - hash := hex.EncodeToString(resp.Hash) - tr := &IBCRelayerResponse{ - From: addr.String(), - Nonce: nonce, - TxHash: hash, - IBCRelayerAddress: opts.IBCRelayerAddress.Bech32M, - } - - log.Debugf("Transfer hash: %v", hash) - return tr, nil -} - -// RemoveIBCRelayer removes an IBC Relayer address from the sequencer. -func RemoveIBCRelayer(opts IBCRelayerOpts) (*IBCRelayerResponse, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Debugf("RemoveIBCRelayerOpts: %v", opts) - - // client - log.Debug("Creating CometBFT client with url: ", opts.SequencerURL) - c, err := client.NewClient(opts.SequencerURL) - if err != nil { - log.WithError(err).Error("Error creating sequencer client") - return &IBCRelayerResponse{}, err - } - - // Get current address nonce - signer := client.NewSigner(opts.FromKey) - fromAddr := signer.Address() - addr, err := bech32m.EncodeFromBytes(opts.AddressPrefix, fromAddr) - if err != nil { - log.WithError(err).Error("Failed to encode address") - return nil, err - } - nonce, err := c.GetNonce(ctx, addr.String()) - if err != nil { - log.WithError(err).Error("Error getting nonce") - return &IBCRelayerResponse{}, err - } - - tx := &txproto.UnsignedTransaction{ - Params: &txproto.TransactionParams{ - ChainId: opts.SequencerChainID, - Nonce: nonce, - }, - Actions: []*txproto.Action{ - { - Value: &txproto.Action_IbcRelayerChangeAction{ - IbcRelayerChangeAction: &txproto.IbcRelayerChangeAction{ - Value: &txproto.IbcRelayerChangeAction_Removal{ - Removal: opts.IBCRelayerAddress, - }, - }, - }, - }, - }, - } - - // sign transaction - signed, err := signer.SignTransaction(tx) - if err != nil { - log.WithError(err).Error("Error signing transaction") - return &IBCRelayerResponse{}, err - } - - // broadcast tx - resp, err := c.BroadcastTx(ctx, signed, opts.IsAsync) - if err != nil { - log.WithError(err).Error("Error broadcasting transaction") - return &IBCRelayerResponse{}, err - } - log.Debugf("Broadcast response: %v", resp) - - // response - hash := hex.EncodeToString(resp.Hash) - tr := &IBCRelayerResponse{ - From: addr.String(), - Nonce: nonce, - TxHash: hash, - IBCRelayerAddress: opts.IBCRelayerAddress.Bech32M, - } - - log.Debugf("Transfer hash: %v", hash) - return tr, nil -} - -// ChangeSudoAddress changes the sudo address. -func ChangeSudoAddress(opts ChangeSudoAddressOpts) (*ChangeSudoAddressResponse, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Debugf("Change Sudo Address Opts: %v", opts) - - // client - log.Debug("Creating CometBFT client with url: ", opts.SequencerURL) - c, err := client.NewClient(opts.SequencerURL) - if err != nil { - log.WithError(err).Error("Error creating sequencer client") - return &ChangeSudoAddressResponse{}, err - } - - // Get current address nonce - signer := client.NewSigner(opts.FromKey) - fromAddr := signer.Address() - addr, err := bech32m.EncodeFromBytes(opts.AddressPrefix, fromAddr) - if err != nil { - log.WithError(err).Error("Failed to encode address") - return &ChangeSudoAddressResponse{}, err - } - nonce, err := c.GetNonce(ctx, addr.String()) - if err != nil { - log.WithError(err).Error("Error getting nonce") - return &ChangeSudoAddressResponse{}, err - } - - tx := &txproto.UnsignedTransaction{ - Params: &txproto.TransactionParams{ - ChainId: opts.SequencerChainID, - Nonce: nonce, - }, - Actions: []*txproto.Action{ - { - Value: &txproto.Action_SudoAddressChangeAction{ - SudoAddressChangeAction: &txproto.SudoAddressChangeAction{ - NewAddress: opts.UpdateAddress, - }, - }, - }, - }, - } - - // sign transaction - signed, err := signer.SignTransaction(tx) - if err != nil { - log.WithError(err).Error("Error signing transaction") - return &ChangeSudoAddressResponse{}, err - } - - // broadcast tx - resp, err := c.BroadcastTx(ctx, signed, opts.IsAsync) - if err != nil { - log.WithError(err).Error("Error broadcasting transaction") - return &ChangeSudoAddressResponse{}, err - } - log.Debugf("Broadcast response: %v", resp) - - // response - hash := hex.EncodeToString(resp.Hash) - tr := &ChangeSudoAddressResponse{ - From: addr.String(), - Nonce: nonce, - NewSudoAddress: opts.UpdateAddress.Bech32M, - TxHash: hash, - } - - log.Debugf("Change Sudo Address TX hash: %v", hash) - return tr, nil -} - -// UpdateValidator changes the power of a validator. -func UpdateValidator(opts UpdateValidatorOpts) (*UpdateValidatorResponse, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Debugf("Update Validator Opts: %v", opts) - - // client - log.Debug("Creating CometBFT client with url: ", opts.SequencerURL) - c, err := client.NewClient(opts.SequencerURL) - if err != nil { - log.WithError(err).Error("Error creating sequencer client") - return &UpdateValidatorResponse{}, err - } - - // Get current address nonce - signer := client.NewSigner(opts.FromKey) - fromAddr := signer.Address() - addr, err := bech32m.EncodeFromBytes(opts.AddressPrefix, fromAddr) - if err != nil { - log.WithError(err).Error("Failed to encode address") - return nil, err - } - nonce, err := c.GetNonce(ctx, addr.String()) - if err != nil { - log.WithError(err).Error("Error getting nonce") - return &UpdateValidatorResponse{}, err - } - - tx := &txproto.UnsignedTransaction{ - Params: &txproto.TransactionParams{ - ChainId: opts.SequencerChainID, - Nonce: nonce, - }, - Actions: []*txproto.Action{ - { - Value: &txproto.Action_ValidatorUpdateAction{ - ValidatorUpdateAction: &abci.ValidatorUpdate{ - PubKey: &crypto.PublicKey{ - Sum: &crypto.PublicKey_Ed25519{ - Ed25519: opts.PubKey, - }, - }, - Power: opts.Power, - }, - }, - }, - }, - } - - // sign transaction - signed, err := signer.SignTransaction(tx) - if err != nil { - log.WithError(err).Error("Error signing transaction") - return &UpdateValidatorResponse{}, err - } - - // broadcast tx - resp, err := c.BroadcastTx(ctx, signed, opts.IsAsync) - if err != nil { - log.WithError(err).Error("Error broadcasting transaction") - return &UpdateValidatorResponse{}, err - } - log.Debugf("Broadcast response: %v", resp) - - // response - hash := hex.EncodeToString(resp.Hash) - tr := &UpdateValidatorResponse{ - From: addr.String(), - Nonce: nonce, - PubKey: hex.EncodeToString(opts.PubKey[:]), - Power: fmt.Sprintf("%d", opts.Power), - TxHash: hash, - } - log.Debug(tr) - - log.Debugf("Update Validator TX hash: %v", hash) - return tr, nil -} diff --git a/modules/cli/main.go b/modules/cli/main.go index b6abf77..113b6c2 100644 --- a/modules/cli/main.go +++ b/modules/cli/main.go @@ -5,7 +5,6 @@ import ( // NOTE - must import the commands to register them _ "github.com/astriaorg/astria-cli-go/modules/cli/cmd/devrunner" _ "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer" - _ "github.com/astriaorg/astria-cli-go/modules/cli/cmd/sequencer/sudo" ) func main() {