From 4619ae9471fc02543e3e18f0f89b73c68b561db2 Mon Sep 17 00:00:00 2001 From: Dzmitry Hil Date: Thu, 8 Feb 2024 14:52:26 +0300 Subject: [PATCH] Use in-memory KR for the runner --- integration-tests/processes/env_test.go | 2 +- relayer/cmd/cli/cli.go | 2 +- relayer/cmd/main.go | 2 +- relayer/runner/runner.go | 37 +++++++++++++++++++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/integration-tests/processes/env_test.go b/integration-tests/processes/env_test.go index 694b96af..975eff9f 100644 --- a/integration-tests/processes/env_test.go +++ b/integration-tests/processes/env_test.go @@ -627,7 +627,7 @@ func createDevRunner( // exit on errors relayerRunnerCfg.Processes.ExitOnError = true - components, err := runner.NewComponents(relayerRunnerCfg, xrplKeyring, coreumKeyring, chains.Log, false) + components, err := runner.NewComponents(relayerRunnerCfg, xrplKeyring, coreumKeyring, chains.Log, false, false) require.NoError(t, err) relayerRunner, err := runner.NewRunner(ctx, components, relayerRunnerCfg) diff --git a/relayer/cmd/cli/cli.go b/relayer/cmd/cli/cli.go index aaaa86c6..787a9163 100644 --- a/relayer/cmd/cli/cli.go +++ b/relayer/cmd/cli/cli.go @@ -230,7 +230,7 @@ func NewRunnerFromHome(cmd *cobra.Command) (*runner.Runner, error) { return nil, err } - components, err := runner.NewComponents(cfg, xrplClientCtx.Keyring, coreumClientCtx.Keyring, zapLogger, true) + components, err := runner.NewComponents(cfg, xrplClientCtx.Keyring, coreumClientCtx.Keyring, zapLogger, true, true) if err != nil { return nil, err } diff --git a/relayer/cmd/main.go b/relayer/cmd/main.go index dc64f30b..ff4b8566 100644 --- a/relayer/cmd/main.go +++ b/relayer/cmd/main.go @@ -115,7 +115,7 @@ func bridgeClientProvider(cmd *cobra.Command) (cli.BridgeClient, error) { return nil, errors.Wrap(err, "failed to configure coreum keyring") } - components, err := runner.NewComponents(cfg, xrplClientCtx.Keyring, coreumClientCtx.Keyring, log, true) + components, err := runner.NewComponents(cfg, xrplClientCtx.Keyring, coreumClientCtx.Keyring, log, true, false) if err != nil { return nil, err } diff --git a/relayer/runner/runner.go b/relayer/runner/runner.go index 2db1858b..c9cfe030 100644 --- a/relayer/runner/runner.go +++ b/relayer/runner/runner.go @@ -10,6 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/google/uuid" "github.com/pkg/errors" rippledata "github.com/rubblelabs/ripple/data" "go.uber.org/zap" @@ -23,6 +24,7 @@ import ( coreumchainclient "github.com/CoreumFoundation/coreum/v4/pkg/client" coreumchainconfig "github.com/CoreumFoundation/coreum/v4/pkg/config" coreumchainconstant "github.com/CoreumFoundation/coreum/v4/pkg/config/constant" + coreumkeyring "github.com/CoreumFoundation/coreum/v4/pkg/keyring" "github.com/CoreumFoundation/coreumbridge-xrpl/relayer/coreum" "github.com/CoreumFoundation/coreumbridge-xrpl/relayer/logger" "github.com/CoreumFoundation/coreumbridge-xrpl/relayer/metrics" @@ -185,13 +187,26 @@ func NewComponents( coreumKeyring keyring.Keyring, log logger.Logger, setCoreumSDKConfig bool, + reimportRelayerKeys bool, ) (Components, error) { + // if enabled, re-import the relayer keys from the config to in-memory keyring + if reimportRelayerKeys { + var err error + xrplKeyring, err = reimportKeyIntoInMemoryKR(xrplKeyring, cfg.XRPL.MultiSignerKeyName) + if err != nil { + return Components{}, err + } + coreumKeyring, err = reimportKeyIntoInMemoryKR(coreumKeyring, cfg.Coreum.RelayerKeyName) + if err != nil { + return Components{}, err + } + } + metricSet := metrics.NewRegistry() log, err := logger.WithMetrics(log, metricSet.ErrorCounter) if err != nil { return Components{}, err } - components := Components{ Metrics: metricSet, Log: log, @@ -266,7 +281,6 @@ func NewComponents( } components.CoreumClientCtx = coreumClientCtx - return components, nil } @@ -286,6 +300,25 @@ func getAddressFromKeyring(kr keyring.Keyring, keyName string) (sdk.AccAddress, return addr, nil } +func reimportKeyIntoInMemoryKR(sourceKr keyring.Keyring, keyName string) (keyring.Keyring, error) { + keyInfo, err := sourceKr.Key(keyName) + if err != nil { + return nil, errors.Wrapf(err, fmt.Sprintf("failed to get key from keyring, key name:%s", keyName)) + } + pass := uuid.NewString() + armor, err := sourceKr.ExportPrivKeyArmor(keyInfo.Name, pass) + if err != nil { + return nil, errors.Wrapf(err, "failed to export key") + } + encodingConfig := coreumchainconfig.NewEncodingConfig(coreumapp.ModuleBasics) + kr := coreumkeyring.NewConcurrentSafeKeyring(keyring.NewInMemory(encodingConfig.Codec)) + if err := kr.ImportPrivKey(keyInfo.Name, armor, pass); err != nil { + return nil, errors.Wrapf(err, "failed to import key") + } + + return kr, nil +} + func getGRPCClientConn(grpcURL string) (*grpc.ClientConn, error) { parsedURL, err := url.Parse(grpcURL) if err != nil {