feat(core/bitcoin): send BIP-380 descriptor in GetPublicKey response

mmilata/pubkey-descriptor-legacy
Martin Milata 3 months ago
parent d21fcfa9ee
commit 175b5fe004

@ -0,0 +1 @@
Send BIP-380 descriptor in GetPublicKey response.

@ -1,6 +1,7 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from trezor.crypto import bip32
from trezor.enums import InputScriptType
from trezor.messages import GetPublicKey, PublicKey
from trezor.protobuf import MessageType
@ -78,6 +79,9 @@ async def get_public_key(
chain_code=node.chain_code(),
public_key=pubkey,
)
descriptor = _xpub_descriptor(
node, xpub_magic, address_n, script_type, keychain.root_fingerprint()
)
if msg.show_display:
from trezor.ui.layouts import confirm_path_warning, show_pubkey
@ -98,10 +102,8 @@ async def get_public_key(
else:
account = f"{coin.coin_shortcut} {account_name}"
show_xpub = node_xpub
if script_type == InputScriptType.SPENDTAPROOT:
show_xpub = _xpub_descriptor(
node_xpub, address_n, script_type, node.fingerprint()
)
if script_type == InputScriptType.SPENDTAPROOT and descriptor is not None:
show_xpub = descriptor
await show_pubkey(
show_xpub,
"XPUB",
@ -115,24 +117,39 @@ async def get_public_key(
node=node_type,
xpub=node_xpub,
root_fingerprint=keychain.root_fingerprint(),
descriptor=descriptor,
)
def _xpub_descriptor(
node_xpub: str,
node: bip32.HDNode,
xpub_magic: int,
address_n: list[int],
script_type: InputScriptType,
fingerprint: int,
) -> str:
) -> str | None:
from trezor.enums import InputScriptType
from apps.common import paths
from .common import descriptor_checksum
if script_type != InputScriptType.SPENDTAPROOT:
raise ValueError("Unsupported script type.")
path = paths.address_n_to_str(address_n)
descriptor = f"tr([{fingerprint:08x}{path[1:]}]{node_xpub}/<0;1>/*)"
if script_type == InputScriptType.SPENDADDRESS:
fmt = "pkh({})"
elif script_type == InputScriptType.SPENDP2SHWITNESS:
fmt = "sh(wpkh({}))"
elif script_type == InputScriptType.SPENDWITNESS:
fmt = "wpkh({})"
elif script_type == InputScriptType.SPENDTAPROOT:
fmt = "tr({})"
else:
return None
# always ignore script-dependent xpub magic for descriptors
xpub = node.serialize_public(xpub_magic)
path = paths.address_n_to_str(address_n).replace("'", "h")
inner = f"[{fingerprint:08x}{path[1:]}]{xpub}/<0;1>/*"
descriptor = fmt.format(inner)
checksum = descriptor_checksum(descriptor)
return f"{descriptor}#{checksum}"

@ -294,17 +294,6 @@ def _get_descriptor(
if purpose not in SCRIPT_TYPE_TO_BIP_PURPOSES[script_type]:
raise ValueError("Invalid script type for account type")
if script_type == messages.InputScriptType.SPENDADDRESS:
fmt = "pkh({})"
elif script_type == messages.InputScriptType.SPENDP2SHWITNESS:
fmt = "sh(wpkh({}))"
elif script_type == messages.InputScriptType.SPENDWITNESS:
fmt = "wpkh({})"
elif script_type == messages.InputScriptType.SPENDTAPROOT:
fmt = "tr({})"
else:
raise ValueError("Unsupported script type")
coin = coin or DEFAULT_COIN
if coin == "Bitcoin":
coin_type = 0
@ -331,6 +320,21 @@ def _get_descriptor(
unlock_path=get_unlock_path(n),
)
# Starting with core 2.6.5 the descriptor is included in the response.
if pub.descriptor is not None:
return pub.descriptor
if script_type == messages.InputScriptType.SPENDADDRESS:
fmt = "pkh({})"
elif script_type == messages.InputScriptType.SPENDP2SHWITNESS:
fmt = "sh(wpkh({}))"
elif script_type == messages.InputScriptType.SPENDWITNESS:
fmt = "wpkh({})"
elif script_type == messages.InputScriptType.SPENDTAPROOT:
fmt = "tr({})"
else:
raise ValueError("Unsupported script type")
fingerprint = pub.root_fingerprint if pub.root_fingerprint is not None else 0
descriptor = f"[{fingerprint:08x}{path[1:]}]{pub.xpub}/<0;1>/*"
return _append_descriptor_checksum(fmt.format(descriptor))

@ -16,9 +16,10 @@
import pytest
from trezorlib import messages
from trezorlib.cli import btc
from trezorlib import btc, messages
from trezorlib.cli import btc as btc_cli
from trezorlib.debuglink import TrezorClientDebugLink as Client
from trezorlib.tools import H_
from ...input_flows import InputFlowShowXpubQRCode
@ -152,6 +153,14 @@ VECTORS_DESCRIPTORS = ( # coin, account, script_type, descriptors
)
def _address_n(purpose, coin, account, script_type):
res = [H_(purpose), H_(0) if coin == "Bitcoin" else H_(1), H_(account)]
if purpose == 10025 and script_type == messages.InputScriptType.SPENDTAPROOT:
res.append(H_(1))
return res
@pytest.mark.parametrize(
"coin, account, purpose, script_type, descriptors", VECTORS_DESCRIPTORS
)
@ -160,7 +169,22 @@ def test_descriptors(client: Client, coin, account, purpose, script_type, descri
if client.features.model != "1":
IF = InputFlowShowXpubQRCode(client)
client.set_input_flow(IF.get())
res = btc._get_descriptor(
res = btc_cli._get_descriptor(
client, coin, account, purpose, script_type, show_display=True
)
assert res == descriptors
if client.features.model != "1":
IF = InputFlowShowXpubQRCode(client)
client.set_input_flow(IF.get())
address_n = _address_n(purpose, coin, account, script_type)
res = btc.get_public_node(
client,
_address_n(purpose, coin, account, script_type),
show_display=True,
coin_name=coin,
script_type=script_type,
ignore_xpub_magic=True,
unlock_path=btc_cli.get_unlock_path(address_n),
)
assert res.descriptor == descriptors

@ -3618,24 +3618,24 @@
"TR_en_bitcoin-test_bcash.py::test_send_bch_multisig_wrongchange": "fa268b2481cce18a041c8f8bf773f16cbfed6ad372a89c7d7220a2de3aa9042e",
"TR_en_bitcoin-test_bcash.py::test_send_bch_nochange": "395635f081e0c9bdf3f6de9a1540d9211c3a1d68665d8ac13ffb8c236add0a3b",
"TR_en_bitcoin-test_bcash.py::test_send_bch_oldaddr": "3957efb1b584f974d8b32523eadb4c18596956b38dec2c85005e7e4f0bf85593",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-10025-InputScriptType.SPENDTAPROOT--301d7568": "70524243a1d093df71ce94251a1bdfe8ff82b7ee84c2b13b71c09908be89dbc4",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-44-InputScriptType.SPENDADDRESS-pkh-a1b0211f": "ad9329ebacf27f00e736d1d3d8a33a539512a23fd134806ddfe6da4e4b517d1a",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-49-InputScriptType.SPENDP2SHWITNESS-75f8d49f": "cb4cea77c61cafeece033128c8c050060cba7c64e4ef255dc59b235324bcf213",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-84-InputScriptType.SPENDWITNESS-wpk-cee65569": "0ffab62bd4c51d042e77c23f5569b9b9a46d9aae102f55edf20d7894dc75b17d",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-86-InputScriptType.SPENDTAPROOT-tr(-6b548a1a": "17a198a8b24035578345b5e85ec307ec8d800a2f343d051a1820ca3121dba696",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-44-InputScriptType.SPENDADDRESS-pkh-37215d1b": "bad6123462cf0f8c9d938ca92ac9841b53221e5152f27bc92959e870d4108f1e",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-49-InputScriptType.SPENDP2SHWITNESS-3ccd985b": "c66f3f30c1a6c809fb8c99a9773c9a9ebea29207c4383f8507db751ba59eb11f",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-84-InputScriptType.SPENDWITNESS-wpk-21c3fa4c": "ab012153490f26746ff9a1b5388f2418bf7c9d98b127217babbeab339245d8f7",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-86-InputScriptType.SPENDTAPROOT-tr(-3a85f3dd": "695853ac56e78df434995eeb457f7d4b466f66c9af560fb103f6a4fba717e0fb",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-10025-InputScriptType.SPENDTAPROOT--591134d6": "c3519859e757af09f9fed46739e484845fdee3d3aa4fb84ee89e7df63d3ccf95",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-44-InputScriptType.SPENDADDRESS-pkh-b7612f41": "482a7d3ce0d25e9b940cb3571201b35a856187ed2215f12ce05b06b32e5ebcc1",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-49-InputScriptType.SPENDP2SHWITNESS-4408e6b6": "442a787c067f35af606eb27a2a585a15272bb920af01070f408a402603572b39",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-84-InputScriptType.SPENDWITNESS-wpk-49d5549d": "d53ebc2f1c866b3d5920b13d9ac909fc81d4ca943a0625801b5dc533f2fe6ef5",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-86-InputScriptType.SPENDTAPROOT-tr(-51c6f7dc": "7798b65e874be333b51ce443ccb26713bb0a17565217f09bd89eff635ddff8a6",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-44-InputScriptType.SPENDADDRESS-pkh-671fabde": "b42ab862d2d45bb9e0509fc4ba4d68405acde83fda935c5dafd44d9e48cb29d3",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-49-InputScriptType.SPENDP2SHWITNESS-6a0c7b09": "6b7c12363fc566de9d35013be5156c970e9fba33c2ed73b4a7e9b06e0974e867",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-84-InputScriptType.SPENDWITNESS-wpk-7c651f2d": "7714578913a2a1e573193ac78cddc20c2df6c2856ad8c50d447906bfee41e4f6",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-86-InputScriptType.SPENDTAPROOT-tr(-b37d77de": "67b86cfe9f4ab3b54a829e70565061d80304a3f75ea70a4fbd92c22a643737ef",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-10025-InputScriptType.SPENDTAPROOT--301d7568": "386fa1824f7bbe2528a2c0799239ea13b1ccfee18f441b790f13b74a2101a447",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-44-InputScriptType.SPENDADDRESS-pkh-a1b0211f": "8cd7ddfe557f77fdc4e0915a90a4c03b9496590feffad6f2332a2efde108b0c6",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-49-InputScriptType.SPENDP2SHWITNESS-75f8d49f": "bf551169fc2c0d5f6ee00d3e7b310d05b67fc3849c0063d1dadd21e1c584e763",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-84-InputScriptType.SPENDWITNESS-wpk-cee65569": "7dc2f5da14ddcc77d79858d7183fe0fdaad35fb41023f766d2c0cb90198c0be2",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-86-InputScriptType.SPENDTAPROOT-tr(-6b548a1a": "a8b6b8b3a23ec5ac7b41ac2ac5699be53266a7a682607835e3f66718ab788ece",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-44-InputScriptType.SPENDADDRESS-pkh-37215d1b": "33b23d6d2fabce3d5145f00802115e58e37fb9ce4a234343a9fe14da2367c533",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-49-InputScriptType.SPENDP2SHWITNESS-3ccd985b": "1f1aa1ce5645153b3bcb8da3fcb2f37aaadbf6e6bbeffc74453de8363e53aa4f",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-84-InputScriptType.SPENDWITNESS-wpk-21c3fa4c": "b59699f9eb2477c63eac3e583d6a60d7bec30c7bbeb904fa8d7cd446c0647903",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-86-InputScriptType.SPENDTAPROOT-tr(-3a85f3dd": "2011d080d6af79b7e13ed22aaf15714d744c65a31afafdc274fcecf100a9e1a3",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-10025-InputScriptType.SPENDTAPROOT--591134d6": "40eeef4d41bd7070feb0ce872ec6837e8c832cf46e83a68198776f5bb61eb3be",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-44-InputScriptType.SPENDADDRESS-pkh-b7612f41": "92ec72a7abe2264a3506a2f9d1f58be884a8aa315d82d0117845e6f64df6fdc4",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-49-InputScriptType.SPENDP2SHWITNESS-4408e6b6": "61de4a2e151db35c6574e7c0db3c387a96541b83586589baac5911b8773939ca",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-84-InputScriptType.SPENDWITNESS-wpk-49d5549d": "e77890bb183e9a315f58018103b5a21c9cbb80b28d92a6c08b0a77868c32e064",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-86-InputScriptType.SPENDTAPROOT-tr(-51c6f7dc": "618b5beb8d6b474127ff514ad5f08b3824602518104180a374220278e0429bae",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-44-InputScriptType.SPENDADDRESS-pkh-671fabde": "7d350683e856dd731ac4235abf03e2d4782b638e0aa46c05e6b281bdaceb89fd",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-49-InputScriptType.SPENDP2SHWITNESS-6a0c7b09": "8bb354be7ced95e3194fdd58b22da211fd3dad15d6ecb9784e0cae005c8cccdb",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-84-InputScriptType.SPENDWITNESS-wpk-7c651f2d": "b83db7ed5e31e17938a6f1ffb43cf887219394ce353b01a0d9e2b5be9dad90c1",
"TR_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-86-InputScriptType.SPENDTAPROOT-tr(-b37d77de": "4db52392046f47beb0b80056b965bfef1d1c58584035941602ffa0fdf1ae8f48",
"TR_en_bitcoin-test_firo.py::test_spend_lelantus": "aff133d149549783adbdaa9563cb990af6cc5f8fafba3f50d82bbbd2765bb4ff",
"TR_en_bitcoin-test_fujicoin.py::test_send_p2tr": "6ab906b521bb73e0725c3d0f3eb5a6ecf9f582853f4cd71672f73190f15fb917",
"TR_en_bitcoin-test_getaddress.py::test_address_mac": "8c801bd0142e5c1ad4aad50b34c7debb1b8f17a2e0a87eb7f95531b9fd15e095",
@ -10630,24 +10630,24 @@
"TT_en_bitcoin-test_decred.py::test_send_decred": "7e8b1532772cf7695fbcf3460d179d08f22c410687c057ff128882e32d923c92",
"TT_en_bitcoin-test_decred.py::test_send_decred_change": "d28de2959972fb3ef29bb267fa8bf6b96ac9c7d9ef4550538db5235a5b45307d",
"TT_en_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "d4657fa66b4d9e90d99de7bf5ad3123d74fec9c528a819f691bc565b521257f3",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-10025-InputScriptType.SPENDTAPROOT--301d7568": "75cf40b6d916ab5107d5241143ba1edd408d359076edcfdfd6ebef4f6202598f",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-44-InputScriptType.SPENDADDRESS-pkh-a1b0211f": "7dd16059ade8769aca12649b7b2523ac52718fb7bb9eb416fa13a5cb747be1b2",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-49-InputScriptType.SPENDP2SHWITNESS-75f8d49f": "8b434c5de0caf71301bd6b21481bb1944d4b43dd596a7ecb9acb921c8083e955",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-84-InputScriptType.SPENDWITNESS-wpk-cee65569": "e8628d184603bceaad9c5ae5b9f51460054e7b5622ea9c1a3dc84f84034808bc",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-86-InputScriptType.SPENDTAPROOT-tr(-6b548a1a": "d9e035a4407e3fbbeaad3726c1c19c32d45a788a943187e909b0f2787aad7486",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-44-InputScriptType.SPENDADDRESS-pkh-37215d1b": "a8f46662c3d14e2defdd5aa2ff4486aeac3f566facf086916da7ddc7e0185130",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-49-InputScriptType.SPENDP2SHWITNESS-3ccd985b": "013171ff086e4565db1bc4f8a0d466a0fa7c6449ee58a3d27b27f073bfb74d63",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-84-InputScriptType.SPENDWITNESS-wpk-21c3fa4c": "3941cd14f74e1d7ea919cb32cbd7c5954c412d845305e4f0e495378c7701a53b",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-86-InputScriptType.SPENDTAPROOT-tr(-3a85f3dd": "2b38959aba5f6a57365ebee67831eaeb9fd3276f9ca0d6c6d99e6b46e97998bc",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-10025-InputScriptType.SPENDTAPROOT--591134d6": "9db02ff67c8b507a62ab3bca79b4a6d5cd3f3da7136f7bc0b237fde382b50739",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-44-InputScriptType.SPENDADDRESS-pkh-b7612f41": "d8e95f6a14ddabd6db4944802f847ccddd8161eed28559f35dc095b568461df7",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-49-InputScriptType.SPENDP2SHWITNESS-4408e6b6": "6ac0059ce935707618eefe9c23d403ff30807df3c3ec23b8615a50b648bbba75",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-84-InputScriptType.SPENDWITNESS-wpk-49d5549d": "b8e44bea2eb0d3ac672a41ebf83683adbb0e02a622cbafe2fb02283117bd4c4a",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-86-InputScriptType.SPENDTAPROOT-tr(-51c6f7dc": "eae032ac90ebf7d44b84eb6f06c43f67140de7adef88906d98c1759ffd4995cd",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-44-InputScriptType.SPENDADDRESS-pkh-671fabde": "4795ab245421deef1f7ebdb6568165a64c7066054747a84c4e30a78085c71e22",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-49-InputScriptType.SPENDP2SHWITNESS-6a0c7b09": "284b98fb9d745aae6f552999e1652300d84d4863c3b29452615ae5b691d7b266",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-84-InputScriptType.SPENDWITNESS-wpk-7c651f2d": "660130572e80e9161d733f3ebc465a5f2a9859a79eecd7201c7ebf955173df23",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-86-InputScriptType.SPENDTAPROOT-tr(-b37d77de": "35e60de9968a7c5bb296dc554970a16878165e062bb8480a5c8428f73a3cf921",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-10025-InputScriptType.SPENDTAPROOT--301d7568": "53de4908fde1e8ed2f009dc3c2fb7753c406a3ed132306afebdc1058f18acf3c",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-44-InputScriptType.SPENDADDRESS-pkh-a1b0211f": "f0896632953e96dff35a10189905f9b555d0c27842d542fb058ce3fde79572bf",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-49-InputScriptType.SPENDP2SHWITNESS-75f8d49f": "c069195b590a1fafe401049abb1ab319bea2091e1cde0a33467a7fb298d67b0a",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-84-InputScriptType.SPENDWITNESS-wpk-cee65569": "b26215a9fb87930c2c8b3d6587f61d429c8a531b0146a9ca2572e240019a73f5",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-86-InputScriptType.SPENDTAPROOT-tr(-6b548a1a": "9b33c5fb49ca138136620f59aabff46da6c87b36bf9ef104f89f831f4200c2fd",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-44-InputScriptType.SPENDADDRESS-pkh-37215d1b": "287b7d0edadb95684f8692f844407808f592ef2cf1d5319401bb0b6951efda6d",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-49-InputScriptType.SPENDP2SHWITNESS-3ccd985b": "6dfd97798bd4838e8241ccd6d6e25b82f55e07144eaa357d2747baf65e998772",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-84-InputScriptType.SPENDWITNESS-wpk-21c3fa4c": "5b675942f6d61321b10f07094e5f3c2ec25f46c415eafe8d9b30c70c6b101b9a",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-1-86-InputScriptType.SPENDTAPROOT-tr(-3a85f3dd": "644a6e773869b3c9a692e6fa41de213ce38eec02358543dd9608a10c4606ca46",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-10025-InputScriptType.SPENDTAPROOT--591134d6": "1bd8413c7d9142286273d72f95f7abab0c784d6cd61c02abc29a1639877ac16c",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-44-InputScriptType.SPENDADDRESS-pkh-b7612f41": "89942a74657026fbeaeb4521801708d8096bd01106dae602d0bbd0c797803880",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-49-InputScriptType.SPENDP2SHWITNESS-4408e6b6": "a2802681b07634e6317a63e2ba04a526ec9d22820c4892f1e4ec28a18fdd724f",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-84-InputScriptType.SPENDWITNESS-wpk-49d5549d": "9f3c623dd55b54fc41d2d6e74317dd1b23013be663bf10fb7cb86cdde1fc816f",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-0-86-InputScriptType.SPENDTAPROOT-tr(-51c6f7dc": "b508e560b3ba129ff6b4df78526a7b71089981f3d1e49f067c21eb03df9d3894",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-44-InputScriptType.SPENDADDRESS-pkh-671fabde": "88aea9929ffe183d15e666b09bcefd510b940aacaf58417f72570465dd673f86",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-49-InputScriptType.SPENDP2SHWITNESS-6a0c7b09": "a07727a4c681cae19d847c9f75120f2b1347abc4c3264c3217efe5ec870817aa",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-84-InputScriptType.SPENDWITNESS-wpk-7c651f2d": "895329052f343194c52d3fc3f0df8b36037f826f7b0396c85f9ad62912aa2a48",
"TT_en_bitcoin-test_descriptors.py::test_descriptors[Testnet-1-86-InputScriptType.SPENDTAPROOT-tr(-b37d77de": "9091f4bfc4197008f5a5d6b3c15ad714ca6a09b3b3efe6acd45de90c2ef661d7",
"TT_en_bitcoin-test_firo.py::test_spend_lelantus": "213ced04e2b337576abe1861c11ef69352eb5542f2bef720e50d54cea031f9db",
"TT_en_bitcoin-test_fujicoin.py::test_send_p2tr": "6104cd021625791fc9141ca802c3c18fb50815459acae06b2eeb05da432352f7",
"TT_en_bitcoin-test_getaddress.py::test_address_mac": "80a6e289138a604cf351a29511cf6f85e2243591317894703152787e1351a1a3",

Loading…
Cancel
Save