mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
test: add helpers for creating P2TR scripts/addresses from output key
This commit is contained in:
parent
9e4fbebcc8
commit
1999dcfa40
3 changed files with 12 additions and 8 deletions
|
@ -47,8 +47,7 @@ def create_deterministic_address_bcrt1_p2tr_op_true():
|
|||
Returns a tuple with the generated address and the internal key.
|
||||
"""
|
||||
internal_key = (1).to_bytes(32, 'big')
|
||||
scriptPubKey = taproot_construct(internal_key, [(None, CScript([OP_TRUE]))]).scriptPubKey
|
||||
address = encode_segwit_address("bcrt", 1, scriptPubKey[2:])
|
||||
address = output_key_to_p2tr(taproot_construct(internal_key, [(None, CScript([OP_TRUE]))]).output_pubkey)
|
||||
assert_equal(address, 'bcrt1p9yfmy5h72durp7zrhlw9lf7jpwjgvwdg0jr0lqmmjtgg83266lqsekaqka')
|
||||
return (address, internal_key)
|
||||
|
||||
|
@ -141,6 +140,10 @@ def script_to_p2sh_p2wsh(script, main=False):
|
|||
p2shscript = CScript([OP_0, sha256(script)])
|
||||
return script_to_p2sh(p2shscript, main)
|
||||
|
||||
def output_key_to_p2tr(key, main=False):
|
||||
assert len(key) == 32
|
||||
return program_to_witness(1, key, main)
|
||||
|
||||
def check_key(key):
|
||||
if (type(key) is str):
|
||||
key = bytes.fromhex(key) # Assuming this is hex string
|
||||
|
|
|
@ -105,6 +105,11 @@ def script_to_p2sh_p2wsh_script(script):
|
|||
return script_to_p2sh_script(p2shscript)
|
||||
|
||||
|
||||
def output_key_to_p2tr_script(key):
|
||||
assert len(key) == 32
|
||||
return program_to_witness_script(1, key)
|
||||
|
||||
|
||||
def check_key(key):
|
||||
if isinstance(key, str):
|
||||
key = bytes.fromhex(key) # Assuming this is hex string
|
||||
|
|
|
@ -7,19 +7,18 @@
|
|||
import random
|
||||
|
||||
from decimal import Decimal
|
||||
from test_framework.address import output_key_to_p2tr
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import assert_equal
|
||||
from test_framework.descriptors import descsum_create
|
||||
from test_framework.script import (
|
||||
CScript,
|
||||
MAX_PUBKEYS_PER_MULTI_A,
|
||||
OP_1,
|
||||
OP_CHECKSIG,
|
||||
OP_CHECKSIGADD,
|
||||
OP_NUMEQUAL,
|
||||
taproot_construct,
|
||||
)
|
||||
from test_framework.segwit_addr import encode_segwit_address
|
||||
|
||||
# xprvs/xpubs, and m/* derived x-only pubkeys (created using independent implementation)
|
||||
KEYS = [
|
||||
|
@ -183,10 +182,7 @@ def multi_a(k, hex_keys, sort=False):
|
|||
|
||||
def compute_taproot_address(pubkey, scripts):
|
||||
"""Compute the address for a taproot output with given inner key and scripts."""
|
||||
tap = taproot_construct(pubkey, scripts)
|
||||
assert tap.scriptPubKey[0] == OP_1
|
||||
assert tap.scriptPubKey[1] == 0x20
|
||||
return encode_segwit_address("bcrt", 1, tap.scriptPubKey[2:])
|
||||
return output_key_to_p2tr(taproot_construct(pubkey, scripts).output_pubkey)
|
||||
|
||||
class WalletTaprootTest(BitcoinTestFramework):
|
||||
"""Test generation and spending of P2TR address outputs."""
|
||||
|
|
Loading…
Add table
Reference in a new issue