diff --git a/cmd/chantools/walletinfo.go b/cmd/chantools/walletinfo.go index 6be06df..279084c 100644 --- a/cmd/chantools/walletinfo.go +++ b/cmd/chantools/walletinfo.go @@ -232,18 +232,27 @@ func walletInfo(w *wallet.Wallet, dumpAddrs bool) (*btcec.PublicKey, string, if !ok { return fmt.Errorf("key is not a managed pubkey") } + + privKey, err := pka.PrivKey() + if err != nil { + return fmt.Errorf("error deriving priv key: %v", + err) + } + scope, path, _ := pka.DerivationInfo() scopeAddrs += fmt.Sprintf( "path=m/%d'/%d'/%d'/%d/%d, pubkey=%x, "+ - "addr=%s, hash160=%x\n", + "addr=%s, hash160=%x, priv=%x\n", scope.Purpose, scope.Coin, path.InternalAccount, path.Branch, path.Index, pka.PubKey().SerializeCompressed(), pka.Address().String(), a.AddrHash(), + privKey.Serialize(), ) return nil } for _, mgr := range w.Manager.ActiveScopedKeyManagers() { + var addrs []waddrmgr.ManagedAddress err = walletdb.View( w.Database(), func(tx walletdb.ReadTx) error { waddrmgrNs := tx.ReadBucket( @@ -251,13 +260,23 @@ func walletInfo(w *wallet.Wallet, dumpAddrs bool) (*btcec.PublicKey, string, ) return mgr.ForEachAccountAddress( - waddrmgrNs, 0, printAddr, + waddrmgrNs, 0, + func(a waddrmgr.ManagedAddress) error { + addrs = append(addrs, a) + return nil + }, ) }, ) if err != nil { return nil, "", err } + + for _, addr := range addrs { + if err := printAddr(addr); err != nil { + return nil, "", err + } + } } }