zpay32: add support for P2TR fallback addresses
This commit is contained in:
2 files changed
+24
-5
No files matched your search
+20
-3
@@ -15,10 +15,18 @@ import (
|
||||
"github.com/btcsuite/btcd/btcutil/bech32"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/lightningnetwork/lnd/fn/v2"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
)
|
||||
|
||||
const (
|
||||
fallbackVersionWitness = txscript.BaseSegwitWitnessVersion
|
||||
fallbackVersionTaproot = txscript.TaprootWitnessVersion
|
||||
fallbackVersionPubkeyHash = 17
|
||||
fallbackVersionScriptHash = 18
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrInvalidUTF8Description is returned if the invoice description is
|
||||
// not valid UTF-8.
|
||||
@@ -529,7 +537,7 @@ func parseFallbackAddr(data []byte, net *chaincfg.Params) (btcutil.Address, erro
|
||||
|
||||
version := data[0]
|
||||
switch version {
|
||||
case 0:
|
||||
case fallbackVersionWitness:
|
||||
witness, err := bech32.ConvertBits(data[1:], 5, 8, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -548,7 +556,16 @@ func parseFallbackAddr(data []byte, net *chaincfg.Params) (btcutil.Address, erro
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
case 17:
|
||||
case fallbackVersionTaproot:
|
||||
witness, err := bech32.ConvertBits(data[1:], 5, 8, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
addr, err = btcutil.NewAddressTaproot(witness, net)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
case fallbackVersionPubkeyHash:
|
||||
pubKeyHash, err := bech32.ConvertBits(data[1:], 5, 8, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -558,7 +575,7 @@ func parseFallbackAddr(data []byte, net *chaincfg.Params) (btcutil.Address, erro
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
case 18:
|
||||
case fallbackVersionScriptHash:
|
||||
scriptHash, err := bech32.ConvertBits(data[1:], 5, 8, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
+4
-2
@@ -202,13 +202,15 @@ func writeTaggedFields(bufferBase32 *bytes.Buffer, invoice *Invoice) error {
|
||||
var version byte
|
||||
switch addr := invoice.FallbackAddr.(type) {
|
||||
case *btcutil.AddressPubKeyHash:
|
||||
version = 17
|
||||
version = fallbackVersionPubkeyHash
|
||||
case *btcutil.AddressScriptHash:
|
||||
version = 18
|
||||
version = fallbackVersionScriptHash
|
||||
case *btcutil.AddressWitnessPubKeyHash:
|
||||
version = addr.WitnessVersion()
|
||||
case *btcutil.AddressWitnessScriptHash:
|
||||
version = addr.WitnessVersion()
|
||||
case *btcutil.AddressTaproot:
|
||||
version = addr.WitnessVersion()
|
||||
default:
|
||||
return fmt.Errorf("unknown fallback address type")
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user