Může mi někdo v jednoduché angličtině vysvětlit, jak se počítá obtížnost. Mám velmi přibližné pochopení, že se počítá na základě množství hashovací síly ve všech bitcoinových komunitách za určité časové období. Ale je to velmi vágní.
Také chápu, že se to může velmi rychle změnit. Může se jen zvýšit? Existuje nějaký vzorec, jak to vypočítat nebo předpovědět?
Děkujeme za podrobnou odpověď, Meni Rosenfeld. Jen abych se ujistil, že mám všechno v pořádku. Shrnuji to pořád, trvalo to vygenerování posledních 2016 bloků. A pak použijte vzorec.
Komentáře
- Myslím, že následné otázky jsou lepší než komentáře k odpovědi. V zásadě ano, ale žádné sčítání vlastně není potřeba – stačí si vzít časová razítka posledního bloku a jednoho bloku z roku 2016 dříve a odečíst.
Odpovědět
Bitcoinová obtížnost začala na 1 (a pod ni nemůže nikdy jít). Potom u každých nalezených bloků 2016 se porovnávají časová razítka bloků, aby se zjistilo, kolik času trvalo nalezení bloků 2016, říkejte tomu T. Chceme, aby bloky 2016 trvaly 2 týdny, takže pokud je T jiné, vynásobíme obtížnost o (2 týdny / T) – tímto způsobem, pokud hashrate pokračuje tak, jak to bylo, bude nyní trvat 2 týdny, než najdete bloky z roku 2016.
Například pokud to trvalo jen 10 dní znamená, že obtížnost je příliš nízká, a proto se zvýší o 40%.
Obtížnost se může zvyšovat nebo snižovat v závislosti na tom, zda nalezení bloků v roce 2016 trvalo méně nebo více než 2 týdny. Obecně se obtížnost sníží poté, co poklesne hashrate sítě.
Pokud je korekční faktor větší než 4 (nebo menší než 1/4), použije se místo toho 4 nebo 1/4, aby se zabránilo změně být příliš náhlý.
V implementaci došlo k chybě, kvůli které je výpočet založen na čase najít poslední bloky roku 2015, nikoli na rok 2016. Oprava by vyžadovala tvrdou vidličku a je tedy zatím odloženo.
Je možné poskytnout hrubý odhad pro další změnu obtížnosti na základě času do nalezení posledních bloků. Nikdo nemůže spolehlivě vytvářet dlouhodobější předpovědi pro budoucí potíže, ale kdokoli může spekulovat na základě trendů směnných kurzů, Moorova zákona a dalších hardwarových pokroků.
Komentáře
- @StevenRoose: AFAIK to je, ale ponechám to na lidi, kteří jsou více zapojeni do základního kódu, aby se vyjádřili … To je dostačující pro samostatnou SE otázku.
- Dobrá odpověď, ale jeden malý, ale hlavní bod se vyhne: jak se uzly v síti shodnou na tom, v čem spočívá obtížnost?
- @deadalnix: Obtížnost bloku je deterministický výpočet založený na datech z předchozích bloků. Všechny uzly nezávisle provádějí stejný výpočet a získávají stejný výsledek.
- @deadalnix: Časové razítko je součástí bloku, což znamená, že kdokoli blok najde, rozhodne, co do něj vloží. . Časové razítko nesmí být dříve než medián posledních 11 bloků. Pokud uzel v budoucnu obdrží blok s časovým razítkem více než 2 hodiny, bude znovu ject a nerozmnožovat to.
- @tobi: No dobře. Předchozí komentáře se týkaly chyby a “ chyby “ naznačovaly, že ‚ je chyba, takže jsem předpokládal, že o tom ‚ mluvíme. Takže ano. Pokud předpokládáme, že kolem roku 2140 bude hashrate kolem * 1 B, jaké je nyní, plán bude dopředu o 96 týdnů, tedy téměř o dva roky. Existuje ale ještě další efekt – zpoždění způsobené skutečností, že na začátku byla obtížnost 1, přestože hashrate nebyl ‚ natolik ospravedlnitelný.
Odpověď
Odpověď Meni je dobrá. Chci jen uvést praktickou podrobnou metodu výpočtu obtížnosti, snad užitečnou pro budoucnost pohledy na odpověď na tuto otázku.
Pojďme se podívat na záhlaví bloku Genesis bloku Satoshi (část souvisejících informací):
$ bitcoin-cli getblockhash 0 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f $ bitcoin-cli getblockheader 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f { ... "height": 0, ... "bits": "1d00ffff", "difficulty": 1, ... }
Jak vidíme výše, blok genesis má obtížnost „1“ a bity „1d00ffff“. bitcoinové bity znamená „cílovou“ hashovací hodnotu, nově vygenerovaný blok musí splňovat podmínku: dvojnásobná hash hodnota SHA-256 záhlaví bloku musí být menší než tato hodnota „target“.
Hodnota bitů „1d00ffff“ v bloku genesis znamená hodnotu „target“:
[0x00000000,0xffff,{0x00..0x00}] {0x00..0x00} at above has 26 bytes 0x00.
Poté najít nový blok, musíte hledat, že 32 bitů nNonce hodnota (a nTimes a hashMerkleRoot také), dokud hodnota hash bloku nemá nulové vedení 4 bajty.Mimochodem, nNonce je jedno z polí ve struktuře záhlaví bloku:
struct header_structure{ // BYTES NAME uint32_t nVersion; // 4 version uint8_t hashPrevBlock[32]; // 32 previous block header hash uint8_t hashMerkleRoot[32]; // 32 merkle root hash uint32_t nTime; // 4 time uint32_t nBits; // 4 target uint32_t nNonce; // 4 nonce };
Protože algoritmus SHA-256 (stejně jako jakýkoli kryptograficky bezpečný hash algoritmus) produkuje výstup, který se bude zobrazovat jako rovnoměrně náhodná sekvence , praktická metoda pokusů a omylů je jediným způsobem, jak najít nový blok, který splní podmínku. Pravděpodobnost nalezení bloku s nulovou počáteční hodnotou hash 4 bajty je 1 / (2 ^ 32), což znamená, že průměrné počty pokusů a omylů jsou přesně 2 ^ 32 (tj. 4G).
Pro lidské snadné pochopení této „cílové“ hodnoty hash definujeme pojem „obtížnost“, což znamená průměrná čísla „pokusů a omylů“ k nalezení bloku, který splňuje podmínku „cíle“. A definujeme jednotku „obtížnosti“: 1 „obtížnost“ = hash 4G
Potom až do dnešního dne dosahuje výška blockchainu bitcoinu 501509, podívejme se na její záhlaví:
$ bitcoin-cli getblockheader 0000000000000000006c5532f4fd9ee03e07f94df165c556b89c495e97680147 { ... "height": 501509, ... "bits": "18009645", "difficulty": 1873105475221.611, ... }
Blok 501509 s bits = 0x18009645, jedná se o kompaktní formát 256 bitů celé číslo, jeho 256 bitový formát je:
[0x00000000,0x00000000,0x009645,{0x00..0x00}] {0x00..0x00} at above has 21 bytes 0x00. that is 0x009645 * (256 ^ 21) The genesis block"s target is ( 0x00ffff * 256 ^ 26 )which is the difficulty unit "1.0". So, the difficulty = (0x00ffff * 256 ^ 26)/ (0x009645 * 256 ^ 21) = 65535/38469 * (256^5) = 1.703579505575918 * 2^40 = 1873105475221.611
Zatím máte všechny podrobnosti o výpočtu„ obtížnosti “. V některých případech používáme také jednoduchý formát 1.7T řečeno o obtížnosti, ve výše uvedeném příkladu :
(1.703579505575918 * 2^40) = 1.703579505575918T 1T = 2^40 = 1024^4
Komentáře
- 1d je 29 v prosinci (ne 26). SHS je SHA
- díky @BorisIvanov, chyba překlepu
SHS
byla opravena.1d
ve skutečnosti znamená 26 bajtů s nulovým ocasem místo 29, přečtěte si prosím výše uvedený příklad. - aha jo. Význam
Odpověď
Chtěl bych dát své 2 centů zde, vysvětlením vztahu mezi pravděpodobností těžby bloku vzhledem k aktuálnímu cíli t
a odpovídající obtížností d
jak se počítá v jádru bitcoinu.
Kryptografické hashovací funkce jsou tedy idealizovány náhodnou věšteckou abstrakcí [ https://en.wikipedia.org/wiki/Random_oracle] . Můžeme tedy modelovat výstup doubleSHA256
hash funkce používané v PoW jako jednotnou proměnnou v prostoru {0,1}^256
, tj. Pole 256 bitů . Pravděpodobnost, že jeden hash h
bude platný hash, je:
p = P(h < t) = t /( 2^{256} - 1 )
Na druhou stranu d
se počítá následovně, stejně jako @gary vysvětlil dříve, pouze transformován na desetinná místa:
d = ( (2^{16} - 1) * 2^{8*26} ) / t = ( (2^{16} -1) * 2^{208} ) / t
Implementace je v [ https://github.com/bitcoin/bitcoin/blob/master/src/rpc/blockchain.cpp] , řádek 60, funkce GetDifficulty
. Ve skutečnosti, pokud někdo může vysvětlit, jak přesně se kód mapuje na výše uvedený vzorec, bylo by to užitečné. Kombinací těchto dvou vzorců získáme:
d = ( (2^{16} -1) * 2^{208} ) / ( p * (2^{256} - 1) ) ~ 2^{-32} / p
Při analýze tohoto posledního výrazu je obtížnost poměr mezi pravděpodobností získání hodnoty hash nižší než 2^{224}
(což je nejnižší desítkové číslo, které má binární vyjádření s použitím 256 bitů počínaje 32 nulovými bity) a pravděpodobnost získání platného hash na základě aktuálního cíle t
. Toto je přímá implikace definování v bloku geneze jako obtížnosti 1 problému přidruženého k hexadecimálnímu cíli 0x1d00ffff vyjádřený v tom, co se podle mého názoru nazývá 32bitová kompaktní forma pro 256bitová čísla.
A pěkná otázka, o které si myslím, že byla zvolena tato konkrétní kompaktní forma pro reprezentaci cíle.
Komentáře
- Hlasováno! Kompaktní forma poskytuje cíli 3 nejvýznamnější bajty, v minimální obtížnosti jsou 3 nejvýznamnější bajty 00ffff.