From 215a2e2165420865e1bc5c2f46d34874c1378472 Mon Sep 17 00:00:00 2001 From: Rosen Santev Date: Wed, 21 Feb 2024 14:21:55 +0200 Subject: [PATCH 1/2] Improve smart contract interaction commands to support encrypted secrets manager --- command/rootchain/validators/validator_info.go | 2 +- command/rootchain/withdraw/withdraw.go | 2 +- command/sidechain/helper.go | 11 ++++++----- command/sidechain/registration/params.go | 11 ++++++----- .../sidechain/registration/register_validator.go | 10 +++++++++- command/sidechain/rewards/params.go | 7 ++++--- command/sidechain/rewards/rewards.go | 10 +++++++++- command/sidechain/staking/params.go | 13 +++++++------ command/sidechain/staking/stake.go | 10 +++++++++- command/sidechain/unstaking/params.go | 9 +++++---- command/sidechain/unstaking/unstake.go | 10 +++++++++- command/sidechain/whitelist/params.go | 1 + command/sidechain/whitelist/whitelist_validator.go | 10 +++++++++- command/sidechain/withdraw/params.go | 7 ++++--- command/sidechain/withdraw/withdraw.go | 10 +++++++++- 15 files changed, 89 insertions(+), 34 deletions(-) diff --git a/command/rootchain/validators/validator_info.go b/command/rootchain/validators/validator_info.go index fef89e0d8..1179356da 100644 --- a/command/rootchain/validators/validator_info.go +++ b/command/rootchain/validators/validator_info.go @@ -80,7 +80,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, false) if err != nil { return err } diff --git a/command/rootchain/withdraw/withdraw.go b/command/rootchain/withdraw/withdraw.go index 8fc212e62..eef1623d8 100644 --- a/command/rootchain/withdraw/withdraw.go +++ b/command/rootchain/withdraw/withdraw.go @@ -81,7 +81,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, false) if err != nil { return err } diff --git a/command/sidechain/helper.go b/command/sidechain/helper.go index 070ff0c7b..61cbc7997 100644 --- a/command/sidechain/helper.go +++ b/command/sidechain/helper.go @@ -10,8 +10,9 @@ import ( ) const ( - SelfFlag = "self" - AmountFlag = "amount" + SelfFlag = "self" + AmountFlag = "amount" + InsecureLocalStoreFlag = "insecure" DefaultGasPrice = 1879048192 // 0x70000000 ) @@ -37,7 +38,7 @@ func ValidateSecretFlags(dataDir, config string) error { } // GetAccount resolves secrets manager and returns an account object -func GetAccount(accountDir, accountConfig string) (*wallet.Account, error) { +func GetAccount(accountDir, accountConfig string, insecureLocalStore bool) (*wallet.Account, error) { // resolve secrets manager instance and allow usage of insecure local secrets manager secretsManager, err := polybftsecrets.GetSecretsManager(accountDir, accountConfig, true) if err != nil { @@ -48,8 +49,8 @@ func GetAccount(accountDir, accountConfig string) (*wallet.Account, error) { } // GetAccountFromDir returns an account object from local secrets manager -func GetAccountFromDir(accountDir string) (*wallet.Account, error) { - return GetAccount(accountDir, "") +func GetAccountFromDir(accountDir string, insecureLocalStore bool) (*wallet.Account, error) { + return GetAccount(accountDir, "", insecureLocalStore) } // Hydra TODO: Fix it to get validator info from child chain diff --git a/command/sidechain/registration/params.go b/command/sidechain/registration/params.go index cc219dc5b..9b282bd58 100644 --- a/command/sidechain/registration/params.go +++ b/command/sidechain/registration/params.go @@ -15,11 +15,12 @@ const ( ) type registerParams struct { - accountDir string - accountConfig string - jsonRPC string - stake string - chainID int64 + accountDir string + accountConfig string + jsonRPC string + stake string + chainID int64 + insecureLocalStore bool } func (rp *registerParams) validateFlags() error { diff --git a/command/sidechain/registration/register_validator.go b/command/sidechain/registration/register_validator.go index 6c156ff97..5a03fb825 100644 --- a/command/sidechain/registration/register_validator.go +++ b/command/sidechain/registration/register_validator.go @@ -11,6 +11,7 @@ import ( "github.com/0xPolygon/polygon-edge/command" "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/polybftsecrets" + "github.com/0xPolygon/polygon-edge/command/sidechain" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" bls "github.com/0xPolygon/polygon-edge/consensus/polybft/signer" "github.com/0xPolygon/polygon-edge/consensus/polybft/wallet" @@ -74,6 +75,13 @@ func setFlags(cmd *cobra.Command) { "the ID of the chain", ) + cmd.Flags().BoolVar( + ¶ms.insecureLocalStore, + sidechain.InsecureLocalStoreFlag, + false, + "a flag to indicate if the secrets used are encrypted. If set to true, the secrets are stored in plain text.", + ) + helper.RegisterJSONRPCFlag(cmd) cmd.MarkFlagsMutuallyExclusive(polybftsecrets.AccountConfigFlag, polybftsecrets.AccountDirFlag) } @@ -88,7 +96,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - secretsManager, err := polybftsecrets.GetSecretsManager(params.accountDir, params.accountConfig, true) + secretsManager, err := polybftsecrets.GetSecretsManager(params.accountDir, params.accountConfig, params.insecureLocalStore) if err != nil { return err } diff --git a/command/sidechain/rewards/params.go b/command/sidechain/rewards/params.go index 35f42abcb..70b1d8b9c 100644 --- a/command/sidechain/rewards/params.go +++ b/command/sidechain/rewards/params.go @@ -9,9 +9,10 @@ import ( ) type withdrawRewardsParams struct { - accountDir string - accountConfig string - jsonRPC string + accountDir string + accountConfig string + jsonRPC string + insecureLocalStore bool } type withdrawRewardResult struct { diff --git a/command/sidechain/rewards/rewards.go b/command/sidechain/rewards/rewards.go index af0cc40b2..35f761c9a 100644 --- a/command/sidechain/rewards/rewards.go +++ b/command/sidechain/rewards/rewards.go @@ -11,6 +11,7 @@ import ( "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/polybftsecrets" rootHelper "github.com/0xPolygon/polygon-edge/command/rootchain/helper" + "github.com/0xPolygon/polygon-edge/command/sidechain" sidechainHelper "github.com/0xPolygon/polygon-edge/command/sidechain" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" "github.com/0xPolygon/polygon-edge/contracts" @@ -50,6 +51,13 @@ func setFlags(cmd *cobra.Command) { polybftsecrets.AccountConfigFlagDesc, ) + cmd.Flags().BoolVar( + ¶ms.insecureLocalStore, + sidechain.InsecureLocalStoreFlag, + false, + "a flag to indicate if the secrets used are encrypted. If set to true, the secrets are stored in plain text.", + ) + cmd.MarkFlagsMutuallyExclusive(polybftsecrets.AccountDirFlag, polybftsecrets.AccountConfigFlag) } @@ -63,7 +71,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, params.insecureLocalStore) if err != nil { return err } diff --git a/command/sidechain/staking/params.go b/command/sidechain/staking/params.go index 0fe284a88..56cfe129b 100644 --- a/command/sidechain/staking/params.go +++ b/command/sidechain/staking/params.go @@ -13,12 +13,13 @@ var ( ) type stakeParams struct { - accountDir string - accountConfig string - jsonRPC string - amount string - self bool - delegateAddress string + accountDir string + accountConfig string + jsonRPC string + amount string + self bool + delegateAddress string + insecureLocalStore bool } func (v *stakeParams) validateFlags() error { diff --git a/command/sidechain/staking/stake.go b/command/sidechain/staking/stake.go index 095c325e0..ef2ab291e 100644 --- a/command/sidechain/staking/stake.go +++ b/command/sidechain/staking/stake.go @@ -8,6 +8,7 @@ import ( "github.com/0xPolygon/polygon-edge/command" "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/polybftsecrets" + "github.com/0xPolygon/polygon-edge/command/sidechain" sidechainHelper "github.com/0xPolygon/polygon-edge/command/sidechain" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" "github.com/0xPolygon/polygon-edge/contracts" @@ -74,6 +75,13 @@ func setFlags(cmd *cobra.Command) { "account address to which stake should be delegated", ) + cmd.Flags().BoolVar( + ¶ms.insecureLocalStore, + sidechain.InsecureLocalStoreFlag, + false, + "a flag to indicate if the secrets used are encrypted. If set to true, the secrets are stored in plain text.", + ) + cmd.MarkFlagsMutuallyExclusive(sidechainHelper.SelfFlag, delegateAddressFlag) cmd.MarkFlagsMutuallyExclusive(polybftsecrets.AccountDirFlag, polybftsecrets.AccountConfigFlag) } @@ -88,7 +96,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, params.insecureLocalStore) if err != nil { return err } diff --git a/command/sidechain/unstaking/params.go b/command/sidechain/unstaking/params.go index 3b094eee4..e9accfef6 100644 --- a/command/sidechain/unstaking/params.go +++ b/command/sidechain/unstaking/params.go @@ -14,10 +14,11 @@ var ( ) type unstakeParams struct { - accountDir string - accountConfig string - jsonRPC string - amount string + accountDir string + accountConfig string + jsonRPC string + amount string + insecureLocalStore bool amountValue *big.Int } diff --git a/command/sidechain/unstaking/unstake.go b/command/sidechain/unstaking/unstake.go index 894843dd3..a48020a4e 100644 --- a/command/sidechain/unstaking/unstake.go +++ b/command/sidechain/unstaking/unstake.go @@ -7,6 +7,7 @@ import ( "github.com/0xPolygon/polygon-edge/command" "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/polybftsecrets" + "github.com/0xPolygon/polygon-edge/command/sidechain" sidechainHelper "github.com/0xPolygon/polygon-edge/command/sidechain" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" "github.com/0xPolygon/polygon-edge/contracts" @@ -54,6 +55,13 @@ func setFlags(cmd *cobra.Command) { "amount to unstake from validator", ) + cmd.Flags().BoolVar( + ¶ms.insecureLocalStore, + sidechain.InsecureLocalStoreFlag, + false, + "a flag to indicate if the secrets used are encrypted. If set to true, the secrets are stored in plain text.", + ) + cmd.MarkFlagsMutuallyExclusive(polybftsecrets.AccountDirFlag, polybftsecrets.AccountConfigFlag) } @@ -67,7 +75,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, params.insecureLocalStore) if err != nil { return err } diff --git a/command/sidechain/whitelist/params.go b/command/sidechain/whitelist/params.go index 923a9ce05..e7ac323fb 100644 --- a/command/sidechain/whitelist/params.go +++ b/command/sidechain/whitelist/params.go @@ -17,6 +17,7 @@ type whitelistParams struct { accountConfig string jsonRPC string newValidatorAddress string + insecureLocalStore bool } func (ep *whitelistParams) validateFlags() error { diff --git a/command/sidechain/whitelist/whitelist_validator.go b/command/sidechain/whitelist/whitelist_validator.go index 2df028a67..5919bdd49 100644 --- a/command/sidechain/whitelist/whitelist_validator.go +++ b/command/sidechain/whitelist/whitelist_validator.go @@ -7,6 +7,7 @@ import ( "github.com/0xPolygon/polygon-edge/command" "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/polybftsecrets" + "github.com/0xPolygon/polygon-edge/command/sidechain" sidechainHelper "github.com/0xPolygon/polygon-edge/command/sidechain" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" "github.com/0xPolygon/polygon-edge/contracts" @@ -58,6 +59,13 @@ func setFlags(cmd *cobra.Command) { "account address of a possible validator", ) + cmd.Flags().BoolVar( + ¶ms.insecureLocalStore, + sidechain.InsecureLocalStoreFlag, + false, + "a flag to indicate if the secrets used are encrypted. If set to true, the secrets are stored in plain text.", + ) + cmd.MarkFlagsMutuallyExclusive(polybftsecrets.AccountDirFlag, polybftsecrets.AccountConfigFlag) helper.RegisterJSONRPCFlag(cmd) } @@ -72,7 +80,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - governanceAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + governanceAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, params.insecureLocalStore) if err != nil { return fmt.Errorf("enlist validator failed: %w", err) } diff --git a/command/sidechain/withdraw/params.go b/command/sidechain/withdraw/params.go index 522f7f1b5..ceec11f3c 100644 --- a/command/sidechain/withdraw/params.go +++ b/command/sidechain/withdraw/params.go @@ -10,9 +10,10 @@ import ( ) type withdrawParams struct { - accountDir string - accountConfig string - jsonRPC string + accountDir string + accountConfig string + jsonRPC string + insecureLocalStore bool } func (w *withdrawParams) validateFlags() error { diff --git a/command/sidechain/withdraw/withdraw.go b/command/sidechain/withdraw/withdraw.go index 19394c3b4..d8c6e8516 100644 --- a/command/sidechain/withdraw/withdraw.go +++ b/command/sidechain/withdraw/withdraw.go @@ -11,6 +11,7 @@ import ( "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/polybftsecrets" rootHelper "github.com/0xPolygon/polygon-edge/command/rootchain/helper" + "github.com/0xPolygon/polygon-edge/command/sidechain" sidechainHelper "github.com/0xPolygon/polygon-edge/command/sidechain" "github.com/0xPolygon/polygon-edge/consensus/polybft/contractsapi" "github.com/0xPolygon/polygon-edge/contracts" @@ -49,6 +50,13 @@ func setFlags(cmd *cobra.Command) { polybftsecrets.AccountConfigFlagDesc, ) + cmd.Flags().BoolVar( + ¶ms.insecureLocalStore, + sidechain.InsecureLocalStoreFlag, + false, + "a flag to indicate if the secrets used are encrypted. If set to true, the secrets are stored in plain text.", + ) + cmd.MarkFlagsMutuallyExclusive(polybftsecrets.AccountDirFlag, polybftsecrets.AccountConfigFlag) } @@ -62,7 +70,7 @@ func runCommand(cmd *cobra.Command, _ []string) error { outputter := command.InitializeOutputter(cmd) defer outputter.WriteOutput() - validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig) + validatorAccount, err := sidechainHelper.GetAccount(params.accountDir, params.accountConfig, params.insecureLocalStore) if err != nil { return err } From a161e592ef9959f4fd60fffe57425456bba503d5 Mon Sep 17 00:00:00 2001 From: Rosen Santev Date: Wed, 21 Feb 2024 14:37:10 +0200 Subject: [PATCH 2/2] fix static parameter --- command/sidechain/helper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/command/sidechain/helper.go b/command/sidechain/helper.go index 61cbc7997..db05c86f8 100644 --- a/command/sidechain/helper.go +++ b/command/sidechain/helper.go @@ -40,7 +40,7 @@ func ValidateSecretFlags(dataDir, config string) error { // GetAccount resolves secrets manager and returns an account object func GetAccount(accountDir, accountConfig string, insecureLocalStore bool) (*wallet.Account, error) { // resolve secrets manager instance and allow usage of insecure local secrets manager - secretsManager, err := polybftsecrets.GetSecretsManager(accountDir, accountConfig, true) + secretsManager, err := polybftsecrets.GetSecretsManager(accountDir, accountConfig, insecureLocalStore) if err != nil { return nil, err }