From fa046ab80fed73c3ec25079fbecabf152cdd8516 Mon Sep 17 00:00:00 2001 From: Greg Sanders Date: Tue, 11 Jul 2023 01:55:43 +0930 Subject: [PATCH] encode_scriptpubkey_to_addr: support p2tr --- common/addr.c | 10 +++++++++- common/addr.h | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/common/addr.c b/common/addr.c index 97b19b896..4fa783714 100644 --- a/common/addr.c +++ b/common/addr.c @@ -13,6 +13,7 @@ char *encode_scriptpubkey_to_addr(const tal_t *ctx, size_t scriptLen = tal_bytelen(scriptPubkey); struct bitcoin_address pkh; struct ripemd160 sh; + int witver; if (is_p2pkh(scriptPubkey, &pkh)) return bitcoin_to_base58(ctx, chainparams, &pkh); @@ -21,7 +22,14 @@ char *encode_scriptpubkey_to_addr(const tal_t *ctx, return p2sh_to_base58(ctx, chainparams, &sh); out = tal_arr(ctx, char, 73 + strlen(chainparams->onchain_hrp)); - if (!segwit_addr_encode(out, chainparams->onchain_hrp, 0, + if (is_p2tr(scriptPubkey, NULL)) + witver = 1; + else if (is_p2wpkh(scriptPubkey, NULL) || is_p2wsh(scriptPubkey, NULL)) + witver = 0; + else { + return tal_free(out); + } + if (!segwit_addr_encode(out, chainparams->onchain_hrp, witver, scriptPubkey + 2, scriptLen - 2)) return tal_free(out); diff --git a/common/addr.h b/common/addr.h index bc58ae0d2..897fbc986 100644 --- a/common/addr.h +++ b/common/addr.h @@ -3,7 +3,7 @@ #include "config.h" #include -/* Given a scriptPubkey, return an encoded address */ +/* Given a scriptPubkey, return an encoded address for p2pkh/p2w{pkh,sh}/p2tr */ char *encode_scriptpubkey_to_addr(const tal_t *ctx, const struct chainparams *chainparams, const u8 *scriptPubkey);