Output Descriptor je textový popis, ze kterých klíčů a podle jakých pravidel má peněženka vytvářet bitcoinové výstupy, tedy záznamy částek s podmínkami pro pozdější utracení peněz. Pomáhá znovu vytvořit správné adresy a rozpoznat příslušné platby. Sám není transakcí ani úplnou zálohou a podle obsahu může být veřejný, nebo obsahovat tajné klíče.
Anna mění aplikaci, ve které sleduje svou hardwarovou peněženku. Chce své platby dál sledovat v nové aplikaci, aniž by do počítače zadávala obnovovací slova. Obnovovací slova, nazývaná Seed Phrase, slouží jako záloha, ze které lze znovu získat klíče peněženky. Veřejný descriptor nové aplikaci řekne, které veřejné klíče použít a jak z nich vytvořit stejné adresy. Představ si ho jako přesný návod k sestavení adres, nikoli jako další heslo. U běžné peněženky program často pozná standardní nastavení sám; u méně obvyklé konfigurace nebo Multisig (uspořádání peněženky s více podpisovými klíči) se však na hádání spoléhat nedá. Descriptor nic nepřevádí a nemění již přijaté platby. Popisuje pravidla, která musí obnova zachovat. [1] [8]
Soukromý klíč umožňuje vytvořit digitální podpis, který schvaluje utracení. Veřejný klíč umožňuje takový podpis ověřit, nikoli ho vytvořit. Veřejný descriptor může obsahovat xpub, tedy údaje pro odvozování dalších veřejných klíčů bez možnosti podepisovat. Hodí se pro Watch-only Wallet, která platby sleduje, ale sama je neodesílá. Takový export přesto chráníš kvůli soukromí: může propojit mnoho tvých adres a jejich historii. Jiný descriptor může obsahovat xprv, rozšířený privátní klíč, nebo WIF, zápis jednotlivého privátního klíče. Pak jde o tajný materiál, který může umožnit utrácení podle příslušných podmínek. Neposílej ho do webového ověřovače ani ho neukládej jako neškodnou poznámku. Veřejná konfigurace nenahrazuje zálohy potřebné k podpisu. [1] [8]
Anna po importu porovná několik přijímacích adres s původní peněženkou. U hardwarové peněženky ověřuje adresy na důvěryhodném displeji podle postupu výrobce; zkontroluje také konfiguraci větve pro vratky, tedy zbytek peněz vracený při platbě. Shodný název účtu nestačí. Než se na novou zálohu spolehne, ověří celý postup obnovy způsobem určeným pro její peněženku, aniž by zbytečně vystavovala tajné klíče. Pokud aplikace nezná použitý descriptor nebo ukazuje jiné adresy, nejdřív řeší kompatibilitu, síť a nastavení. Přepsání složitého výrazu podle odhadu není bezpečná oprava. [5] [8]
U peněženky vyžadující dva podpisy ze tří nestačí mít jen dvě sady obnovovacích slov a vědět, že „to bylo dva ze tří“. K sestavení správných podmínek jsou potřeba veřejné údaje všech tří klíčů, pravidla jejich odvozování a přesný typ skriptu. Skript je zápis podmínek, za kterých se peníze smějí utratit. Technický zápis multi(k,...) používá uvedené pořadí klíčů; k je potřebný počet podpisů. Varianta sortedmulti(k,...) při vytváření každého skriptu seřadí odvozené veřejné klíče podle jejich bajtů. Jsou to odlišná pravidla, ne dva zaměnitelné názvy. Uchovej proto úplný export konfigurace spolu s odděleně chráněnými zálohami klíčů potřebných k podpisu. Seznam jmen zařízení nestačí. [2] [8]
Za znakem # může být osm znaků nazývaných checksum, kontrolní součet podle BIP380. Program díky němu rozpozná mnoho chyb při kopírování. Není to však podpis autora, šifrování ani potvrzení, že descriptor patří tobě. Kdo úmyslně dosadí vlastní klíče, dokáže vypočítat i nový správný checksum. Proto má kontrola zápisu smysl společně s ověřením adres a původu konfigurace. Pokud aplikace hlásí chybu součtu, nejdřív znovu získáš původní export; pouhé vygenerování nového součtu by mohlo jen potvrdit už poškozený text. [1]
Před klíčem může být údaj [fingerprint/path], označovaný key origin. Fingerprint je krátký identifikátor výchozího klíče; path je cesta, podle níž vznikl klíč uvedený dál. Pomáhá podepisujícímu zařízení vyhledat správný klíč. Za xpub může následovat další cesta k jednotlivým adresám. Tyto dvě části mají různou úlohu a nejsou jen ozdobný popisek účtu. Samotný fingerprint může u různých klíčů shodou okolností souhlasit, takže nedokazuje totožnost zařízení. Veřejný export také nemůže libovolně pokračovat přes Hardened Derivation, krok vyžadující privátní údaje; exportující aplikace musí zvolit odpovídající úroveň klíče. [1]
Hvězdička v /* označuje postupné dosazování čísel, například 0, 1 a 2. Takový ranged descriptor nepopisuje jen jedinou adresu; program při konkrétní operaci určí rozsah indexů, který má zpracovat. Zápis <0;1> podle BIP389 může zahrnout dvě větve, běžně příjem a vratky, pokud jej aplikace podporuje. Descriptor ale sám nevede seznam použitých adres ani nezaznamenává další volné číslo. Ani gap limit, počet po sobě jdoucích dosud nepoužitých adres, po kterém hledání končí, není automaticky součástí výrazu. Nepoužitá zde znamená bez historie transakcí: adresa, na kterou peníze přišly a později byly utraceny, se mezi nepoužité nepočítá. Při obnově proto může být třeba přenést také stav peněženky a prohledat dostatečný rozsah. [5] [6] [9]
Výstup transakce obsahuje scriptPubKey, skript stanovující podmínky jeho pozdějšího utracení. Descriptor říká, jak jej sestavit. Zápis wpkh(KEY) popisuje Native SegWit s jedním klíčem; KEY je zde zástupný název, ne skutečný klíč. Obalení do sh(wpkh(KEY)) změní formát výstupu a adresu, přestože klíč zůstává stejný. Další výrazy zahrnují pk(), pkh(), wsh(), addr() nebo raw(). Není to seznam zaměnitelných voleb: například addr() popíše známou adresu, ale samo nedodá chybějící informace potřebné k jejímu utracení. Tato část slouží jako technická příručka k nastavení, nikoli požadavek, aby nováček psal descriptor ručně. [1] [8]
Taproot umí utratit výstup podpisem klíče nebo podle připojených skriptových podmínek, pokud je výstup obsahuje. Zápis tr(KEY) určuje vnitřní klíč bez utratitelné skriptové větve; tr(KEY,TREE) přidává strom skriptů. Nejde tedy jen o seznam klíčů. U stromu záleží i na seskupení skriptů: jeho změna může změnit společný otisk Merkle root a výslednou adresu, přestože jednotlivé podmínky zůstaly stejné. Ne každé prohození větví ji však mění. Miniscript pomáhá podmínky zapisovat a analyzovat a multi_a vyjadřuje více podpisů v Tapscriptu, skriptovém jazyce Taprootu. Ani jedno samo nenahrazuje úplný export konfigurace. [3] [8]
RPC je rozhraní, přes které můžeš programu zadávat příkazy z jiného programu nebo příkazové řádky. V Bitcoin Core 29 RPC příkaz getdescriptorinfo rozebere zápis. Vrací veřejnou podobu bez privátních klíčů a údaje checksum, isrange, issolvable a hasprivatekeys. Poslední říká, zda vstup obsahoval privátní klíč; issolvable neznamená, že máš tajné klíče potřebné k podpisu. Příkaz deriveaddresses umožní porovnat odvozené adresy. Při importu příkaz importdescriptors přebírá navíc timestamp, active, internal, range a next_index: odkdy hledat historii, zda má být konfigurace aktivní, zda jde o interní vratky, rozsah a další číslo adresy. Rescan je opětovné hledání transakcí v řetězci. Příliš pozdní timestamp může starší platby vynechat; samotná změna descriptoru je nepřesune ani nesmaže. Po importu je potřeba nová záloha peněženky. Tyto příkazy patří do vlastní důvěryhodné instalace, ne do cizího webového formuláře. [5] [7] [8]
Pro nejúplnější obraz čtěte toto heslo společně s Peněženka, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. Opačným směrem na něj odkazují také Watch-only Wallet, Extended Public Key (xpub), PSBT, Vlastní úschova.