Thanks for the help @daniel
Updated the incognito-cli with some new options to handle this and it seems to work fine.
Here’s the diff if anyone want it.
diff --git a/common.go b/common.go
index 409454e..d02bb03 100644
--- a/common.go
+++ b/common.go
@@ -53,8 +53,10 @@ const (
pairHashFlag = "pairHash"
amplifierFlag = "amplifier"
- mnemonicFlag = "mnemonic"
- numShardsFlag = "numShards"
+ mnemonicFlag = "mnemonic"
+ numShardsFlag = "numShards"
+ shardIDFlag = "shardID"
+ numAccountsFlag = "numAccounts"
evmAddressFlag = "evmAddress"
tokenAddressFlag = "externalTokenAddress"
diff --git a/flags.go b/flags.go
index 73cb551..0d1b311 100644
--- a/flags.go
+++ b/flags.go
@@ -231,6 +231,17 @@ var defaultFlags = map[string]cli.Flag{
Usage: "The number of shard",
Value: 8,
},
+ shardIDFlag: &cli.IntFlag{
+ Name: shardIDFlag,
+ Usage: "Only generate accounts belonging to this shardID",
+ Value: -1,
+ DefaultText: "any",
+ },
+ numAccountsFlag: &cli.IntFlag{
+ Name: numAccountsFlag,
+ Usage: "The number of accounts to generate",
+ Value: 5,
+ },
evmAddressFlag: &cli.StringFlag{
Name: evmAddressFlag,
diff --git a/commands.go b/commands.go
index 23438cb..26d99d8 100644
--- a/commands.go
+++ b/commands.go
@@ -136,6 +136,8 @@ var accountCommands = []*cli.Command{
Description: "This command helps generate a new mnemonic phrase and its Incognito accounts.",
Flags: []cli.Flag{
defaultFlags[numShardsFlag],
+ defaultFlags[shardIDFlag],
+ defaultFlags[numAccountsFlag],
},
Action: genKeySet,
},
@@ -147,6 +149,8 @@ var accountCommands = []*cli.Command{
Flags: []cli.Flag{
defaultFlags[mnemonicFlag],
defaultFlags[numShardsFlag],
+ defaultFlags[shardIDFlag],
+ defaultFlags[numAccountsFlag],
},
Action: importMnemonic,
},
diff --git a/account.go b/account.go
index a5ac4ce..0233378 100644
--- a/account.go
+++ b/account.go
@@ -408,14 +408,19 @@ func genKeySet(c *cli.Context) error {
}
numShards := c.Int(numShardsFlag)
- if numShards == 0 {
+ if (numShards < 1 || numShards > 255) {
return fmt.Errorf("%v is invalid", numShardsFlag)
}
common.MaxShardNumber = numShards
- numAccounts := 5
+ shardFilter := c.Int(shardIDFlag)
+ if (shardFilter >= numShards) {
+ return fmt.Errorf("%v is invalid for %v shards", shardIDFlag, numShards)
+ }
+
+ numAccounts := c.Int(numAccountsFlag)
fmt.Printf("mnemonic: %v\n", mnemonic)
- for i := 0; i < numAccounts; i++ {
+ for i := 0; numAccounts > 0; i++ {
childKey, err := w.DeriveChild(uint32(i))
if err != nil {
return err
@@ -425,12 +430,14 @@ func genKeySet(c *cli.Context) error {
if err != nil {
return err
}
-
- jsb, err := json.MarshalIndent(info, "", "\t")
- if err != nil {
- return fmt.Errorf("marshalling key info error: %v", err)
+ if (shardFilter < 0 || info.ShardID == byte(shardFilter)) {
+ jsb, err := json.MarshalIndent(info, "", "\t")
+ if err != nil {
+ return fmt.Errorf("marshalling key info error: %v", err)
+ }
+ fmt.Println(string(jsb))
+ numAccounts--
}
- fmt.Println(string(jsb))
}
return nil
@@ -445,14 +452,19 @@ func importMnemonic(c *cli.Context) error {
}
numShards := c.Int(numShardsFlag)
- if numShards == 0 {
+ if (numShards < 1 || numShards > 255) {
return fmt.Errorf("%v is invalid", numShardsFlag)
}
common.MaxShardNumber = numShards
- numAccounts := 5
+ shardFilter := c.Int(shardIDFlag)
+ if (shardFilter > numShards) {
+ return fmt.Errorf("%v is invalid for %v shards", shardIDFlag, numShards)
+ }
+
+ numAccounts := c.Int(numAccountsFlag)
fmt.Printf("mnemonic: %v\n", mnemonic)
- for i := 0; i < numAccounts; i++ {
+ for i := 0; numAccounts > 0; i++ {
childKey, err := w.DeriveChild(uint32(i))
if err != nil {
return err
@@ -463,11 +475,14 @@ func importMnemonic(c *cli.Context) error {
return err
}
- jsb, err := json.MarshalIndent(info, "", "\t")
- if err != nil {
- return fmt.Errorf("marshalling key info error: %v", err)
+ if (shardFilter < 0 || info.ShardID == byte(shardFilter)) {
+ jsb, err := json.MarshalIndent(info, "", "\t")
+ if err != nil {
+ return fmt.Errorf("marshalling key info error: %v", err)
+ }
+ fmt.Println(string(jsb))
+ numAccounts--
}
- fmt.Println(string(jsb))
}
return nil