Fix hardened path printing, show 20 addresses after empty
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
parent
bb6a354b62
commit
753d7b71a9
@ -29,6 +29,8 @@ var ledgerCmd = &cli.Command{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const hdHard = 0x80000000
|
||||||
|
|
||||||
var ledgerListAddressesCmd = &cli.Command{
|
var ledgerListAddressesCmd = &cli.Command{
|
||||||
Name: "list",
|
Name: "list",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
@ -57,12 +59,13 @@ var ledgerListAddressesCmd = &cli.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 20; i++ {
|
end := 20
|
||||||
|
for i := 0; i < end; i++ {
|
||||||
if err := ctx.Err(); err != nil {
|
if err := ctx.Err(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
p := []uint32{0x80000000 + 44, 0x80000000 + 461, 0x80000000, 0, uint32(i)}
|
p := []uint32{hdHard | 44, hdHard | 461, hdHard | 0, 0, uint32(i)}
|
||||||
pubk, err := fl.GetPublicKeySECP256K1(p)
|
pubk, err := fl.GetPublicKeySECP256K1(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -78,6 +81,9 @@ var ledgerListAddressesCmd = &cli.Command{
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("getting balance: %w", err)
|
return xerrors.Errorf("getting balance: %w", err)
|
||||||
}
|
}
|
||||||
|
if !b.IsZero() {
|
||||||
|
end = i + 21 // BIP32 spec, stop after 20 empty addresses
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Printf("%s %s %s\n", addr, printHDPath(p), types.FIL(b))
|
fmt.Printf("%s %s %s\n", addr, printHDPath(p), types.FIL(b))
|
||||||
} else {
|
} else {
|
||||||
@ -108,12 +114,12 @@ func parseHDPath(s string) ([]uint32, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if v >= 0x80000000 {
|
if v >= hdHard {
|
||||||
return nil, fmt.Errorf("path element %s too large", p)
|
return nil, fmt.Errorf("path element %s too large", p)
|
||||||
}
|
}
|
||||||
|
|
||||||
if hard {
|
if hard {
|
||||||
v += 0x80000000
|
v += hdHard
|
||||||
}
|
}
|
||||||
out = append(out, uint32(v))
|
out = append(out, uint32(v))
|
||||||
}
|
}
|
||||||
@ -121,20 +127,20 @@ func parseHDPath(s string) ([]uint32, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printHDPath(pth []uint32) string {
|
func printHDPath(pth []uint32) string {
|
||||||
s := "m/"
|
s := "m"
|
||||||
for _, p := range pth {
|
for _, p := range pth {
|
||||||
var hard bool
|
s += "/"
|
||||||
if p >= 0x80000000 {
|
|
||||||
p -= 0x80000000
|
hard := p&hdHard != 0
|
||||||
}
|
p &^= hdHard // remove hdHard bit
|
||||||
|
|
||||||
s += fmt.Sprint(p)
|
s += fmt.Sprint(p)
|
||||||
if hard {
|
if hard {
|
||||||
s += "'"
|
s += "'"
|
||||||
}
|
}
|
||||||
s += "/"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.TrimRight(s, "/")
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
var ledgerKeyInfoCmd = &cli.Command{
|
var ledgerKeyInfoCmd = &cli.Command{
|
||||||
@ -164,6 +170,7 @@ var ledgerKeyInfoCmd = &cli.Command{
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if cctx.Bool("verbose") {
|
if cctx.Bool("verbose") {
|
||||||
fmt.Println(addr)
|
fmt.Println(addr)
|
||||||
fmt.Println(pubk)
|
fmt.Println(pubk)
|
||||||
|
Loading…
Reference in New Issue
Block a user