derivekey+genimportscript: add p2tr address support

pull/51/head v0.10.6
Oliver Gugger 2 years ago
parent fd6c67211e
commit ff4f4a2ebf
No known key found for this signature in database
GPG Key ID: 8E4256593F177720

@ -209,11 +209,15 @@ func (i *ImportWallet) Format(hdKey *hdkeychain.ExtendedKey,
if err != nil { if err != nil {
return "", fmt.Errorf("could not create address: %w", err) return "", fmt.Errorf("could not create address: %w", err)
} }
addrP2TR, err := lnd.P2TRAddr(privKey.PubKey(), params)
if err != nil {
return "", fmt.Errorf("could not create address: %w", err)
}
return fmt.Sprintf("%s 1970-01-01T00:00:01Z label=%s/%d/%d/ "+ return fmt.Sprintf("%s 1970-01-01T00:00:01Z label=%s/%d/%d/ "+
"# addr=%s,%s,%s", wif.String(), path, branch, index, "# addr=%s,%s,%s,%s", wif.String(), path, branch, index,
addrP2PKH.EncodeAddress(), addrNP2WKH.EncodeAddress(), addrP2PKH.EncodeAddress(), addrNP2WKH.EncodeAddress(),
addrP2WKH.EncodeAddress(), addrP2WKH.EncodeAddress(), addrP2TR.EncodeAddress(),
), nil ), nil
} }

@ -2,7 +2,6 @@ package main
import ( import (
"fmt" "fmt"
"github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/btcutil"
"github.com/btcsuite/btcd/btcutil/hdkeychain" "github.com/btcsuite/btcd/btcutil/hdkeychain"
"github.com/guggero/chantools/lnd" "github.com/guggero/chantools/lnd"
@ -16,6 +15,7 @@ Public key: %x
Extended public key (xpub): %v Extended public key (xpub): %v
Address: %v Address: %v
Legacy address: %v Legacy address: %v
Taproot address: %v
Private key (WIF): %s Private key (WIF): %s
Extended private key (xprv): %s Extended private key (xprv): %s
` `
@ -99,6 +99,11 @@ func deriveKey(extendedKey *hdkeychain.ExtendedKey, path string,
return fmt.Errorf("could not create address: %w", err) return fmt.Errorf("could not create address: %w", err)
} }
addrP2TR, err := lnd.P2TRAddr(pubKey, chainParams)
if err != nil {
return fmt.Errorf("could not create address: %w", err)
}
privKey, xPriv := na, na privKey, xPriv := na, na
if !neuter { if !neuter {
privKey, xPriv = wif.String(), child.String() privKey, xPriv = wif.String(), child.String()
@ -107,7 +112,7 @@ func deriveKey(extendedKey *hdkeychain.ExtendedKey, path string,
result := fmt.Sprintf( result := fmt.Sprintf(
deriveKeyFormat, path, chainParams.Name, deriveKeyFormat, path, chainParams.Name,
pubKey.SerializeCompressed(), neutered, addrP2WKH, addrP2PKH, pubKey.SerializeCompressed(), neutered, addrP2WKH, addrP2PKH,
privKey, xPriv, addrP2TR, privKey, xPriv,
) )
fmt.Println(result) fmt.Println(result)

@ -26,7 +26,7 @@ import (
const ( const (
defaultAPIURL = "https://blockstream.info/api" defaultAPIURL = "https://blockstream.info/api"
version = "0.10.5" version = "0.10.6"
na = "n/a" na = "n/a"
Commit = "" Commit = ""

@ -3,6 +3,7 @@ package lnd
import ( import (
"crypto/sha256" "crypto/sha256"
"fmt" "fmt"
"github.com/btcsuite/btcd/btcec/v2/schnorr"
"strconv" "strconv"
"strings" "strings"
@ -21,6 +22,7 @@ const (
HardenedKeyStart = uint32(hdkeychain.HardenedKeyStart) HardenedKeyStart = uint32(hdkeychain.HardenedKeyStart)
WalletDefaultDerivationPath = "m/84'/0'/0'" WalletDefaultDerivationPath = "m/84'/0'/0'"
WalletBIP49DerivationPath = "m/49'/0'/0'" WalletBIP49DerivationPath = "m/49'/0'/0'"
WalletBIP86DerivationPath = "m/86'/0'/0'"
LndDerivationPath = "m/1017'/%d'/%d'" LndDerivationPath = "m/1017'/%d'/%d'"
) )
@ -199,6 +201,7 @@ func AllDerivationPaths(params *chaincfg.Params) ([]string, [][]uint32, error) {
pathStrings := []string{ pathStrings := []string{
WalletBIP49DerivationPath, WalletBIP49DerivationPath,
WalletDefaultDerivationPath, WalletDefaultDerivationPath,
WalletBIP86DerivationPath,
mkPath(keychain.KeyFamilyPaymentBase), mkPath(keychain.KeyFamilyPaymentBase),
} }
paths := make([][]uint32, len(pathStrings)) paths := make([][]uint32, len(pathStrings))
@ -350,6 +353,15 @@ func NP2WKHAddr(pubKey *btcec.PublicKey,
return btcutil.NewAddressScriptHash(script, params) return btcutil.NewAddressScriptHash(script, params)
} }
func P2TRAddr(pubKey *btcec.PublicKey,
params *chaincfg.Params) (*btcutil.AddressTaproot, error) {
taprootKey := txscript.ComputeTaprootKeyNoScript(pubKey)
return btcutil.NewAddressTaproot(
schnorr.SerializePubKey(taprootKey), params,
)
}
func P2AnchorStaticRemote(pubKey *btcec.PublicKey, func P2AnchorStaticRemote(pubKey *btcec.PublicKey,
params *chaincfg.Params) (*btcutil.AddressWitnessScriptHash, []byte, params *chaincfg.Params) (*btcutil.AddressWitnessScriptHash, []byte,
error) { error) {

Loading…
Cancel
Save