Multiple fixes for genimportscript

pull/17/head
Oliver Gugger 4 years ago
parent 32df6112e8
commit 2521b8d3bd
No known key found for this signature in database
GPG Key ID: 8E4256593F177720

@ -2,11 +2,10 @@ package main
import ( import (
"fmt" "fmt"
"strconv"
"strings"
"time" "time"
"github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg"
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/btcsuite/btcutil/hdkeychain" "github.com/btcsuite/btcutil/hdkeychain"
"github.com/guggero/chantools/lnd" "github.com/guggero/chantools/lnd"
@ -64,28 +63,9 @@ func (c *genImportScriptCommand) Execute(_ []string) error {
c.DerivationPath = defaultDerivationPath c.DerivationPath = defaultDerivationPath
} }
// Process derivation path derivationPath, err := lnd.ParsePath(c.DerivationPath)
levels := strings.Split(c.DerivationPath, "/") if err != nil {
if len(levels) == 0 || levels[0] != "m" { return fmt.Errorf("error parsing path: %v", err)
return fmt.Errorf("error reading derivationpath: path \"%s\" not in "+
"correct format, e.g. \"m/purpose'/coin_type'/account'\"", c.DerivationPath)
}
levels = levels[1:] // removes masterseed purposed "m"
derivationPath := make([]uint32, len(levels))
for i := range levels {
unHardened := strings.TrimSuffix(levels[i], "'")
d, err := strconv.Atoi(unHardened)
if err != nil {
return fmt.Errorf("error reading derivationpath: <%s> is not a valid "+
"derivation", unHardened)
}
if levels[i] == unHardened {
derivationPath[i] = uint32(d)
} else {
derivationPath[i] = lnd.HardenedKeyStart + uint32(d)
}
} }
fmt.Printf("# Wallet dump created by chantools on %s\n", fmt.Printf("# Wallet dump created by chantools on %s\n",
@ -115,7 +95,7 @@ func (c *genImportScriptCommand) Execute(_ []string) error {
// External branch first (<DerivationPath>/0/i). // External branch first (<DerivationPath>/0/i).
for i := uint32(0); i < c.RecoveryWindow; i++ { for i := uint32(0); i < c.RecoveryWindow; i++ {
path := append(derivationPath, []uint32{0, i}...) path := append(derivationPath, 0, i)
derivedKey, err := lnd.DeriveChildren(extendedKey, path) derivedKey, err := lnd.DeriveChildren(extendedKey, path)
if err != nil { if err != nil {
return err return err
@ -128,7 +108,7 @@ func (c *genImportScriptCommand) Execute(_ []string) error {
// Now the internal branch (<DerivationPath>/1/i). // Now the internal branch (<DerivationPath>/1/i).
for i := uint32(0); i < c.RecoveryWindow; i++ { for i := uint32(0); i < c.RecoveryWindow; i++ {
path := append(derivationPath, []uint32{1, i}...) path := append(derivationPath, 1, i)
derivedKey, err := lnd.DeriveChildren(extendedKey, path) derivedKey, err := lnd.DeriveChildren(extendedKey, path)
if err != nil { if err != nil {
return err return err
@ -192,17 +172,30 @@ func printBitcoinImportWallet(hdKey *hdkeychain.ExtendedKey, path string,
return fmt.Errorf("could not derive private key: %v", return fmt.Errorf("could not derive private key: %v",
err) err)
} }
addrPubkey, err := btcutil.NewAddressPubKey( hash160 := btcutil.Hash160(pubKey.SerializeCompressed())
pubKey.SerializeCompressed(), chainParams, addrP2PKH, err := btcutil.NewAddressPubKeyHash(hash160, chainParams)
if err != nil {
return fmt.Errorf("could not create address: %v", err)
}
addrP2WKH, err := btcutil.NewAddressWitnessPubKeyHash(
hash160, chainParams,
) )
if err != nil { if err != nil {
return fmt.Errorf("could not create address: %v", err) return fmt.Errorf("could not create address: %v", err)
} }
addr := addrPubkey.AddressPubKeyHash() script, err := txscript.PayToAddrScript(addrP2WKH)
if err != nil {
return fmt.Errorf("could not create script: %v", err)
}
addrNP2WKH, err := btcutil.NewAddressScriptHash(script, chainParams)
if err != nil {
return fmt.Errorf("could not create address: %v", err)
}
fmt.Printf("%s 1970-01-01T00:00:01Z label=%s/%d/%d/ "+ fmt.Printf("%s 1970-01-01T00:00:01Z label=%s/%d/%d/ "+
"# addr=%s\n", wif.String(), path, branch, index, "# addr=%s,%s,%s\n", wif.String(), path, branch, index,
addr.EncodeAddress(), addrP2PKH.EncodeAddress(), addrNP2WKH.EncodeAddress(),
addrP2WKH.EncodeAddress(),
) )
return nil return nil
} }
@ -214,10 +207,13 @@ func seedBirthdayToBlock(birthdayTimestamp time.Time) uint32 {
genesisTimestamp = genesisTimestamp =
chaincfg.MainNetParams.GenesisBlock.Header.Timestamp chaincfg.MainNetParams.GenesisBlock.Header.Timestamp
case "testnet": case "testnet3":
genesisTimestamp = genesisTimestamp =
chaincfg.TestNet3Params.GenesisBlock.Header.Timestamp chaincfg.TestNet3Params.GenesisBlock.Header.Timestamp
case "regtest", "simnet":
return 0
default: default:
panic(fmt.Errorf("unimplemented network %v", chainParams.Name)) panic(fmt.Errorf("unimplemented network %v", chainParams.Name))
} }

Loading…
Cancel
Save