Gap Limit říká peněžence, po kolika po sobě jdoucích nepoužitých adresách má přestat hledat další. Peněženka totiž při obnově ze zálohy znovu vypočítá adresy a zjišťuje, zda na nich proběhly transakce. Aby neprohledávala obrovské množství možností bez konce, používá hranici pro prázdnou mezeru. Platba za touto hranicí může zůstat skrytá v přehledu, přestože k ní má majitel správné klíče. Samotné překročení limitu peníze nemaže ani neomezuje počet klíčů, které lze odvodit.
Anna používá peněženku, aplikaci nebo zařízení pro příjem a odesílání bitcoinů. Předem si v ní vytvořila mnoho přijímacích adres, tedy údajů pro zaslání platby, ale některé nikdy nepoužila. Po obnově peněženky část plateb chybí. Představme si hledání s limitem 20: adresa s indexem 0 má historii, následující adresy s indexy 1–20 ji nemají a na index 21 přišla platba. Index je jen pořadové číslo adresy; číslování začíná nulou. Skenování se zastaví po prázdné řadě ještě před indexem 21, takže tuto platbu nenajde. Kdyby se v prohledávané řadě objevila použitá adresa, počítání mezery by začalo znovu. Limit tedy neznamená, že celá peněženka smí mít nejvýše dvacet adres. [1] [6]
Co v tomto případě znamená nepoužitá? Nejde o adresu, na které právě nejsou peníze. Anna mohla platbu přijmout a později ji celou utratit. Zůstatek je potom nulový, ale transakční historie nezmizela a adresa je pro hledání stále použitá. Pravidlo BIP 44 proto pracuje s historií, nikoli pouze s aktuálním zůstatkem. Kdyby obnova všechny prázdné adresy považovala za nikdy nepoužité, mohla by se zastavit příliš brzy. Proto má při kontrole obnovené peněženky význam i starší příjem, který už jste utratili. [1]
BIP 44 popisuje uspořádání účtů a adres v hierarchické peněžence. Ta klíče a adresy řadí do stromu s různými větvemi. Pravidlo nazvané Address gap limit stanovuje hranici 20 pro hledání na vnější přijímací větvi, tedy v řadě adres určených k přijímání plateb. Při vytváření adresy za touto hranicí má program uživatele varovat. Je to dohoda o způsobu obnovy, nikoli pravidlo konsenzu, podle kterého síť přijímá nebo odmítá transakce. Jiné peněženky mohou mít jiná nastavení či jiný postup hledání. Nevyplývá z toho ani doporučení používat stále tutéž přijímací adresu. [1]
Původní peněženka může znát i adresy vytvořené daleko dopředu. Při obnově z pouhé zálohy klíčů nový program nemusí vědět, jak daleko jste dříve došli. Electrum na to výslovně upozorňuje v dokumentaci: adresy za Gap Limit se při běžné obnově nemusí automaticky najít. Popsaným řešením je zvýšit limit nebo odvozovat další adresy až k použitému místu. Nastavení je ale potřeba řešit podle konkrétního programu a typu peněženky. Údaj o výchozích 20 v této FAQ se vztahuje k Electrum 2.0; není to univerzální hodnota všech dnešních peněženek. [2]
Peněženku si lze představit jako uspořádaný strom. Účty oddělují skupiny peněz; uvnitř účtu bývají různé větve adres. Podle BIP 44 označuje change=0 přijímací větev a change=1 větev pro vlastní vratku, tedy částku, která po platbě zůstává odesílateli. Objevování účtů začíná účtem 0 a kontrolou jeho vnější větve. Najde-li historii, pokračuje na další účet; první účet bez historie hledání účtů zastaví. Proto standard požaduje nevytvářet nový účet, pokud předchozí nemá historii. Adresní mezera jedné větve a přeskočený prázdný účet jsou různé problémy. Zvýšení jednoho limitu samo neurčuje, které další účty program prohledá. [1]
BIP 32 popisuje deterministické odvozování klíčů: ze stejných vstupních údajů a stejné cesty vzniknou stejné klíče. Derivation Path je cesta tímto stromem; spolu s typem skriptu, tedy způsobem zápisu podmínek utracení, určuje, které adresy peněženka sleduje. Správná Seed Phrase, záložní slova, je proto jen část informace potřebné pro správnou obnovu. U BIP 39 do výpočtu seedu, výchozího tajemství pro odvozování klíčů, vstupuje také případná passphrase, další tajný text odlišný od hesla aplikace. Jiná passphrase vede do jiné peněženky; větší Gap Limit ji neopraví. Soukromý klíč je tajný číselný údaj, kterým peněženka vytváří digitální podpis pro schválení útraty. Pro pokročilé: xpub je rozšířený veřejný klíč pro odvozování dalších veřejných klíčů. Pomáhá sledovat adresy a platby, ale sám neopravňuje k utrácení. Sám ale neumí překročit krok hardened, který vyžaduje soukromý klíč rodiče. Širší hledání tuto chybějící možnost nenahradí. [4] [5] [6]
Bitcoin Core 29.0 nabízí přes RPC, programové rozhraní uzlu, příkaz importdescriptors. Descriptor je popis způsobu, jak z klíčů sestavit podmínky utracení a sledované adresy. Parametr range určuje rozsah indexů pro odvozování; není to pravidlo zastavení po prázdné mezeře. next_index u aktivního descriptoru určuje příští index pro generování adres. timestamp zase určuje, odkdy hledat transakce v historii. Hodnota now je určená pro výstupy, o nichž víme, že dosud nebyly použity; nenahrazuje obnovení starších plateb. Dokumentace zahrnuje i bloky až dvě hodiny před nejstarším timestamp mezi importovanými descriptory a Mempool, místní zásobu dosud nepotvrzených transakcí. I správně odvozená adresa proto může v přehledu chybět, pokud nebylo prohledáno potřebné období. [3]
Vraťme se k Anně. Má-li z původní peněženky známou přijímací adresu nebo záznam platby, může ověřit, zda je nová peněženka skutečně našla. Porovnávat je vhodné i již utracené příjmy, nejen výsledný zůstatek. Delší sken může odhalit přehlédnutou historii, ale stojí čas a více dotazů; při použití vzdáleného serveru mu může ukázat další související adresy. Samotné hledání nic nepřevádí a nemění blockchain. Pokud se historie stále neshoduje, je potřeba ověřit údaje zálohy, účet, cestu, typ adres i dostupnost historických dat, ne pouze dál zvětšovat limit. Úspěšné nalezení jedné adresy ještě nedokazuje úplnost celé obnovy. [1] [2] [4]
Pro nejúplnější obraz čtěte toto heslo společně s HD Wallet, Derivation Path, Extended Public Key (xpub), Output Descriptor, Change Address, Seed Phrase. Opačným směrem na něj odkazují také HD Wallet, Derivation Path.