131 / 736PKG

Package Relay

Společný přenos navazujících transakcí

Proč někdy nestačí připlatit za zaseknutou platbu? Package Relay pomáhá uzlům posoudit i navazující transakci, která jí může zaplatit cestu do bloku.

Package Relay umožňuje bitcoinovým uzlům přenášet a posuzovat související nepotvrzené transakce společně. Smysl má například tehdy, když první transakce nabízí příliš nízký poplatek, ale další transakce, která na ni navazuje, přidá dost na obě. Stále se musí ověřit jejich platnost a splnit místní pravidla uzlu; společné posouzení není zárukou potvrzení.

Anna čeká na bitcoinovou platbu. Odesílatel nastavil nízký poplatek a mezitím vzrostl zájem o místo v blocích. Blok sdružuje transakce do dávky, která se připojuje ke společné historii. Uzel je program, který ověřuje transakce a bloky a komunikuje s dalšími účastníky sítě. Některé uzly proto transakci nepřijmou do svého mempoolu, místního seznamu nepotvrzených transakcí. Anna by ráda přidala poplatek pomocí navazující transakce. Ta ale utrácí mince, o jejichž příchodu odmítající uzel dosud neví. Právě tuto mezeru pomáhá Package Relay překlenout: umožňuje dostat k uzlu potřebné souvislosti, aby nemusel posuzovat jen první, levnou transakci samotnou. [1] [6]

První transakci se v tomto vztahu říká rodič, navazující transakci potomek. Anna může vytvořit potomka, pokud umí splnit podmínky utracení některého rodičova výstupu, tedy konkrétní částky určené k dalšímu utracení. Může například převést přijaté mince na jinou vlastní adresu a část z nich nabídnout jako poplatek. Jde o CPFP (Child Pays for Parent): vyšší poplatek potomka může podpořit potvrzení obou transakcí. Package Relay pomáhá s jejich doručením a posouzením; samo poplatek nezaplatí, nic nepodepíše a nevytvoří přístup k cizím mincím. [1] [5]

Představme si rodiče o velikosti 200 vB s poplatkem 200 sat a potomka o velikosti 100 vB s poplatkem 1300 sat. vByte (vB) je jednotka virtuální velikosti transakce, podle které se běžně počítá poplatek; sat je malá jednotka bitcoinu. Celkem zaplatí 1500 sat za 300 vB, tedy 5 sat/vB. Nejde o prostý průměr sazeb 1 a 13 sat/vB. Počítáme jen tyto dvě dosud nepřijaté transakce bez dalších nepotvrzených předků a místních úprav poplatků. Ve skutečném uzlu se již přijaté transakce znovu nezapočítávají; důležitý je přesný soubor posuzovaných závislostí. [5] [3]

Potomek svým vstupem odkazuje na výstup rodiče. Může proto dávat smysl přijmout je společně, nelze však vynechat chybějící historii jejich mincí. Seznam se řadí tak, aby každý obsažený rodič předcházel potomkovi; technicky jde o topologické pořadí. Podpisy i ostatní pravidla platnosti se kontrolují dál. Digitální podpis dokládá oprávnění k platbě pomocí soukromého klíče, tajného číselného údaje, aniž by jej odhalil. Dvě transakce utrácející stejné mince se nestanou slučitelnými přidáním poplatku. Počet, velikost a tvar povoleného balíku navíc omezují práci uzlu: nejsou oprávněním poslat libovolně dlouhý řetězec. [5] [3] [7]

Peněženka je aplikace nebo zařízení pro přijímání a odesílání bitcoinů. Doručení znamená, že uzel získal data. Přijetí znamená, že je podle svých pravidel zařadil do mempoolu. Potvrzení nastává až zařazením transakce do bloku. Každý uzel má vlastní mempool; úspěch u jednoho neříká, co udělal soused. V Bitcoin Core 28.0 pomáhá společná sazba překonat pohyblivé minimum zaplněného mempoolu, obecně však neruší samostatné minimum pro přenos. Pro TRUC Transactions, zvláštní omezený typ transakcí, existuje v této verzi výjimka. Neplatí proto jednoduché pravidlo, že dost drahý potomek zachrání jakéhokoli rodiče. [2] [5] [8]

BIP 331 od Glorie Zhao popisuje vyjednání podpory a zprávy, kterými si uzly vyžádají informace o předcích a samotné transakce. To je širší návrh. Bitcoin Core 28.0 doložil omezené párování jednoho rodiče s jedním potomkem přes již existující síťový protokol. Místní programové rozhraní RPC umělo přijmout i potomka s více nezávislými rodiči, ale z toho neplynula stejná schopnost přenosu mezi uzly. Tyto údaje se vztahují k uvedené verzi; u jiné je třeba ověřit její dokumentaci i podporu protistrany. [1] [2]

Příkaz submitpackage v Bitcoin Core 28.0 předá připravený balík místnímu uzlu. Očekává potomka a jeho nepotvrzené rodiče, kteří na sobě vzájemně nezávisí, s potomkem na konci. Výsledek package_msg je nutné číst spolu s jednotlivými tx-results. Uzel může přijmout část balíku: chyba automaticky nevezme zpět vše, co už přijal. Ani celkový úspěch nedokazuje rozšíření po síti nebo potvrzení. Příkaz není obecná služba na urychlení platby a vyžaduje správně sestavené transakce, nikoli jen jejich adresy. [3]

V odděleném testovacím prostředí lze pomocí testmempoolaccept prověřit přijetí bez vysílání. Při chybě jiné transakce může výsledek allowed chybět, protože daná transakce nebyla plně ověřena. Zkušební volání a submitpackage navíc nemají zcela shodné podmínky. Zaznamenejte verzi, nastavení, závislosti, velikosti i poplatky a zvlášť sledujte přijetí na dalším uzlu. U časově citlivých plateb v Lightning Network zůstává potřeba včas reagovat: Package Relay samo neodstraní zahlcení, nepravidelné bloky ani pinning, tedy záměrné ztěžování navýšení poplatku pomocí pravidel mempoolu. [4] [2] [1]

Pro nejúplnější obraz čtěte toto heslo společně s Mempool, CPFP (Child Pays for Parent), Fee Rate, Replace-by-Fee (RBF), Lightning Network, vByte. Opačným směrem na něj odkazují také CPFP (Child Pays for Parent), Gloria Zhao, Cluster Mempool, TRUC Transactions.

DOC · 001BIP 331 — Ancestor Package RelaySpecifikace DOC · 002Bitcoin Core 28.0 — release notesDokumentace DOC · 003Bitcoin Core 28.0 — submitpackageDokumentace DOC · 004Bitcoin Core 28.0 — testmempoolacceptDokumentace DOC · 005Bitcoin Core v28.0 — Package mempool acceptanceDokumentace DOC · 006Bitcoin Developer Guide — Block ChainDokumentace DOC · 007Bitcoin Developer Reference — TransactionsDokumentace DOC · 008Bitcoin Developer Guide — WalletsDokumentace
Revidováno: Primární zdroje · Nejde o investiční doporučení