Skip to content

Commit

Permalink
Add two keys for the bridge CLI bootstrapping
Browse files Browse the repository at this point in the history
  • Loading branch information
dzmitryhil committed Feb 8, 2024
1 parent 42c3ed7 commit 2aed90c
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 25 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,7 @@ The balance should cover the token issuance fee and fee for the deployment trans
#### Generate config template

```bash
export RELAYERS_COUNT={Relayes count to be used}
./coreumbridge-xrpl-relayer bootstrap-bridge bootstrapping.yaml --key-name bridge-account --init-only --relayers-count $RELAYERS_COUNT
./coreumbridge-xrpl-relayer bootstrap-bridge bootstrapping.yaml --key-name bridge-account --init-only --relayers-count 32
```

The output will print the XRPL bridge address and min XRPL bridge account balance. Fund it and proceed to the nex step.
Expand Down
2 changes: 1 addition & 1 deletion relayer/client/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,10 +295,10 @@ func (b *BridgeClient) Bootstrap(
}
b.log.Info(ctx, "Deploying contract", zap.Any("settings", instantiationCfg))
contractAddress, err := b.contractClient.DeployAndInstantiate(ctx, senderAddress, contactByteCode, instantiationCfg)
b.log.Info(ctx, "Contract is deployed successfully", zap.String("address", contractAddress.String()))
if err != nil {
return nil, errors.Wrap(err, "failed to deploy contract")
}
b.log.Info(ctx, "Contract is deployed successfully", zap.String("address", contractAddress.String()))

if err := b.setUpXRPLBridgeAccount(ctx, bridgeAccountKeyName, cfg, xrplSignerEntries); err != nil {
return nil, err
Expand Down
44 changes: 27 additions & 17 deletions relayer/cmd/cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ const (
FlagHome = "home"
// FlagKeyName is key name flag.
FlagKeyName = "key-name"
// FlagCoreumKeyName is coreum key name flag.
FlagCoreumKeyName = "coreum-key-name"
// FlagXRPLKeyName is XRPL key name flag.
FlagXRPLKeyName = "xrpl-key-name"
// FlagCoreumChainID is chain-id flag.
FlagCoreumChainID = "coreum-chain-id"
// FlagCoreumGRPCURL is Coreum GRPC URL flag.
Expand Down Expand Up @@ -496,28 +500,41 @@ $ bootstrap-bridge bootstrapping.yaml --%s bridge-account
if err != nil {
return errors.Wrap(err, "failed to get client context")
}

log, err := GetCLILogger()
if err != nil {
return err
}

keyName, err := cmd.Flags().GetString(FlagKeyName)
xrplKeyName, err := cmd.Flags().GetString(FlagXRPLKeyName)
if err != nil {
return errors.Wrapf(err, "failed to get %s", FlagKeyName)
return errors.Wrapf(err, "failed to get %s", FlagXRPLKeyName)
}

xrplClientCtx, err := WithKeyring(clientCtx, cmd.Flags(), xrpl.KeyringSuffix)
if err != nil {
return err
}

xrplKeyringTxSigner := xrpl.NewKeyringTxSigner(xrplClientCtx.Keyring)
xrplBridgeAddress, err := xrplKeyringTxSigner.Account(keyName)
xrplBridgeAddress, err := xrplKeyringTxSigner.Account(xrplKeyName)
if err != nil {
return err
}
log.Info(ctx, "XRPL bridge address", zap.String("address", xrplBridgeAddress.String()))
coreumKeyName, err := cmd.Flags().GetString(FlagCoreumKeyName)
if err != nil {
return errors.Wrapf(err, "failed to get %s", FlagCoreumKeyName)
}
coreumClientCtx, err := WithKeyring(clientCtx, cmd.Flags(), coreum.KeyringSuffix)
if err != nil {
return err
}
coreumKRRecord, err := coreumClientCtx.Keyring.Key(coreumKeyName)
if err != nil {
return errors.Wrapf(err, "failed to get key by name:%s", coreumKeyName)
}
coreumAddress, err := coreumKRRecord.GetAddress()
if err != nil {
return errors.Wrapf(err, "failed to address for key name:%s", coreumKeyName)
}
log.Info(ctx, "Coreum deployer address", zap.String("address", coreumAddress.String()))

filePath := args[0]
initOnly, err := cmd.Flags().GetBool(FlagInitOnly)
Expand All @@ -541,14 +558,6 @@ $ bootstrap-bridge bootstrapping.yaml --%s bridge-account
return nil
}

record, err := xrplClientCtx.Keyring.Key(keyName)
if err != nil {
return errors.Wrapf(err, "failed to get key by name:%s", keyName)
}
addr, err := record.GetAddress()
if err != nil {
return errors.Wrapf(err, "failed to address for key name:%s", keyName)
}
cfg, err := bridgeclient.ReadBootstrappingConfig(filePath)
if err != nil {
return err
Expand All @@ -558,16 +567,17 @@ $ bootstrap-bridge bootstrapping.yaml --%s bridge-account
input := bufio.NewScanner(os.Stdin)
input.Scan()

_, err = bridgeClient.Bootstrap(ctx, addr, keyName, cfg)
_, err = bridgeClient.Bootstrap(ctx, coreumAddress, xrplKeyName, cfg)
return err
},
}
addKeyringFlags(cmd)
addKeyNameFlag(cmd)
addHomeFlag(cmd)

cmd.PersistentFlags().Bool(FlagInitOnly, false, "Init default config")
cmd.PersistentFlags().Int(FlagRelayersCount, 0, "Relayers count")
cmd.PersistentFlags().String(FlagCoreumKeyName, "", "Key name from the Coreum keyring")
cmd.PersistentFlags().String(FlagXRPLKeyName, "", "Key name from the XRPL keyring")

return cmd
}
Expand Down
14 changes: 9 additions & 5 deletions relayer/cmd/cli/cli_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,25 +114,29 @@ func TestBootstrapCmd(t *testing.T) {
configPath := path.Join(t.TempDir(), "bootstrapping.yaml")

keyringDir := t.TempDir()
keyName := "deployer"
addKeyToTestKeyring(t, keyringDir, keyName, xrpl.KeyringSuffix, xrpl.XRPLHDPath)
xrplKeyName := "xrpl-bridge"
addKeyToTestKeyring(t, keyringDir, xrplKeyName, xrpl.KeyringSuffix, xrpl.XRPLHDPath)
contractDeployer := "contract-deployer"
addKeyToTestKeyring(t, keyringDir, contractDeployer, coreum.KeyringSuffix, xrpl.XRPLHDPath)

// call bootstrap with init only
args := []string{
configPath,
flagWithPrefix(cli.FlagInitOnly),
flagWithPrefix(cli.FlagRelayersCount), "3",
flagWithPrefix(cli.FlagKeyName), keyName,
flagWithPrefix(cli.FlagXRPLKeyName), xrplKeyName,
flagWithPrefix(cli.FlagCoreumKeyName), contractDeployer,
}
args = append(args, testKeyringFlags(keyringDir)...)
executeCmd(t, cli.BootstrapBridgeCmd(mockBridgeClientProvider(nil)), args...)

// use generated file
bridgeClientMock := NewMockBridgeClient(ctrl)
bridgeClientMock.EXPECT().Bootstrap(gomock.Any(), gomock.Any(), keyName, bridgeclient.DefaultBootstrappingConfig())
bridgeClientMock.EXPECT().Bootstrap(gomock.Any(), gomock.Any(), xrplKeyName, bridgeclient.DefaultBootstrappingConfig())
args = []string{
configPath,
flagWithPrefix(cli.FlagKeyName), keyName,
flagWithPrefix(cli.FlagXRPLKeyName), xrplKeyName,
flagWithPrefix(cli.FlagCoreumKeyName), contractDeployer,
}
args = append(args, testKeyringFlags(keyringDir)...)
executeCmd(t, cli.BootstrapBridgeCmd(mockBridgeClientProvider(bridgeClientMock)), args...)
Expand Down

0 comments on commit 2aed90c

Please sign in to comment.