vByte, zkráceně vB, je jednotka virtuální velikosti bitcoinové transakce. Různé části jejích dat se do této velikosti započítávají rozdílně. Peněženka ji používá při výpočtu poplatku: čím větší transakce a vyšší zvolená sazba, tím vyšší výsledný poplatek.
Anna chce poslat Bitcoin a peněženka jí nabídne sazbu 2 sat/vB. Sat je satoshi, nejmenší jednotka bitcoinu; vB popisuje virtuální velikost transakce. Pokud má hotová transakce 127 vB, při této sazbě vychází poplatek na 254 sat. Sazba, označovaná také Fee Rate, tedy není celá cena převodu. Náš příklad ukazuje výpočet, nikoli doporučenou sazbu pro dnešní síť. Ani zaplacený poplatek sám nezaručuje konkrétní čas potvrzení. [3] [5] [7]
Peněženka neutrácí zůstatek jako jedno číslo. Používá dříve přijaté, dosud neutracené výstupy transakcí, zvané UTXO. Každý použitý výstup přidá nový vstup; často vznikne také výstup vracející zbytek do vaší peněženky. Proto může sloučení mnoha drobných příjmů vyžadovat více dat než odeslání větší částky z jediného příjmu. Poplatek je rozdíl součtu hodnot vstupů a výstupů. Digitálním podpisem peněženka dokládá oprávnění utratit vybrané prostředky. Před vytvořením podpisu velikost odhaduje; skutečnou sazbu určí až konečný poplatek a konečná velikost. [6] [7]
Bajt je běžná jednotka množství dat. U bitcoinové transakce ale pro výpočet poplatku nestačí jen spočítat všechny bajty stejně. S úpravou SegWit se oddělila část údajů pro prokázání oprávnění utrácet, například podpisy. Této části se říká witness. K váze transakce přispívá bajt základních dat 4 WU, zatímco bajt přidaný zápisem ve formátu s witness přispívá 1 WU. WU je jednotka váhy. Zvýhodněna jsou i pomocná pole marker a flag tohoto zápisu. Podpisy přitom zůstávají předmětem ověření; menší váha není povolení kontroly vynechat. [1] [2]
Serializace znamená zapsání transakce do přesného sledu bajtů, aby ji počítače mohly přenášet a číst. Označme B velikost zápisu bez witness a T velikost úplného zápisu. BIP 141 stanoví váhu jako W = 3 × B + T. Základní data jsou už zahrnuta také v T; proto se tímto vzorcem započítají čtyřikrát, zatímco přidaná witness data jednou. Nejde o měření peněžní hodnoty ani času procesoru. [1]
Virtuální velikost je váha dělená 4, zaokrouhlená nahoru na celé číslo: vsize = ceil(W / 4). Zápis ceil znamená právě zaokrouhlení nahoru. Transakce s váhou 401 WU proto zabere 101 vB. Zaokrouhluje se výsledek za celou transakci. Kdybyste nejprve zaokrouhlili každý vstup zvlášť a výsledky sečetli, nemuseli byste dostat stejnou velikost. [1]
Vezměme ilustrační velikosti B = 100 a T = 208 bajtů. Ze vzorce vyjde W = 508 WU a vsize = 127 vB. To je velikost použitá v našem úvodním příkladu poplatku. Neznamená to ale, že se úplná transakce zázračně zmenšila: při úplném zápisu se stále přenáší 208 bajtů. Virtuální velikost je vážené měřítko pro práci s kapacitou a poplatky, nikoli komprese souboru. [1] [5]
Průzkumník bloků je aplikace, ve které lze vyhledat transakce a bloky dané sítě. Pokud transakce nemá witness data, platí B = T, a tedy W = 4 × T. Její základní virtuální velikost pak odpovídá počtu bajtů úplného zápisu. Právě proto mohou dvě kolonky v průzkumníku někdy ukazovat stejné číslo a jindy ne. U transakce se SegWit nelze prostě vydělit čtyřmi všechny přenesené bajty: odlišné vážení se týká konkrétních částí dat. [1] [2]
Uzel je program, který ověřuje transakce a bloky a komunikuje s dalšími účastníky sítě. Bitcoin Core v29.0 pro některá provozní pravidla používá upravenou velikost ceil(max(W, sigop_cost × bytes_per_sigop) / 4). sigop_cost vyjadřuje vážené náklady podpisových operací; bytes_per_sigop je parametr pravidel uzlu. max vybírá větší z porovnávaných hodnot. Neobvykle náročné ověřování tak může zvýšit velikost použitou pro tato pravidla. Nemění to samotnou váhu podle BIP 141 ani pravidla platnosti bloků. Jde o detail uvedené verze, ne o další povinný výpočet při běžné platbě. [1] [4]
Některá platba utrácí výstup jiné, dosud nepotvrzené transakce. Při posuzování takového balíčku lze porovnávat součet relevantních poplatků se součtem příslušných virtuálních velikostí. Prostý průměr jednotlivých sazeb by zanedbal rozdílné velikosti. Bitcoin Core v29.0 zohledňuje také případné místní úpravy priority a nezapočítává znovu transakce, které už má ve své čekárně. Vysoká společná sazba nepřekonává všechna ostatní pravidla a nezaručuje přijetí ani potvrzení. [4] [8]
Při odesílání si spojte sazbu s celkovým poplatkem a odhadem velikosti. Po vytvoření transakce může příkaz decoderawtransaction ukázat skutečná pole size, vsize a weight: bajty, virtuální velikost a váhu. Pro běžnou platbu nemusíte vzorce počítat ručně. A ještě pozor na podobný název CompactSize: ten označuje způsob zápisu celého čísla s proměnlivou délkou. Není to jiné označení pro vByte ani metoda zmenšování transakce. [5] [6]
Pro nejúplnější obraz čtěte toto heslo společně s Block Weight, Compact Blocks, Block Propagation, Initial Block Download, Bitcoin, SegWit. Opačným směrem na něj odkazují také Compact Blocks, Pruned Node, Block Weight, Package Relay.