Miért is fontos a ‘6-confirmation’ ?

Egy valamire való kriptopénz-tulajdonos a legszebb álmából felverve is pontosan tudja, hogy a Bitcoin láncon egy tranzakció addig nem tekinthető jóváhagyottnak, amíg nem kapja meg a 6. confirmation-t. De mi is ez pontosan és miért pont hat és miért nem elég az egy? Ez a post mindezekről fog szólni. Meg persze arról is, hogy más kriptopénzeknél (pl. ethereum, vagy akár a bitcoin cash), ez a 6 miért inkább 20?

Kezdjük talán a legegyszerűbb résszel: mi is a confirmation, azaz megerősítés? A nyilvános blockchainen futó kriptopénzekkel kapcsolatban alapvetés a decentralizált működés. Tehát, amikor egy tranzakciót készítünk, akkor azt nem egy központi szervnek küldjük el, hanem egy közeli nodeon keresztül peer-to-peer küldjük szét azt a hálózat minden nodeja felé. Ezek a megerősítésre váró tranzakciók (unconfirmed tx) egészen addig várakoznak a mempoolban (ideiglenes tárolóban) amíg valamelyik fullnode mögött működő bányász úgy nem dönt, hogy kiveszi a tranzakciót a mempoolból és blockba nem foglalja. Amikor egy tranzakció bekerül egy blockba, akkor onnantól része a blockchainnek. Ebben az esetben a tranzakció megkapja a 1st confirmation állapotot, tehát megerősítésre került.

Mivel ebben a pillanatban a tranzakció már része a blockláncnak, így azt nem lehet visszavonni, vagy nem lehet eltéríteni a rbf (replace-by-fee) kéréssel, stb. adja magát a kérdés, hogy mégis miért is kell várni további 5 újabb blockot, hogy a tranzakció elérje a 6. megerősítést? A cikk folytatása ezen érdekességgel foglalkozik.

A decentralizált, peer-to-peer rendszerek esetén el kell felejteni az abszolút értelmezhető tényezőket. Itt minden relatív, nincs olyan hogy központi mempool, minden node saját mempoolt kezel, valójában nincs olyan, hogy közös blockchain sem, a blockchain is eltérő lehet az egyes nodeokon. Amikor a bányász nodeok blockot készítenek, akkor semmi garancia nincs arra, hogy az egyes nodeoknál készülő blockok teljesen azonosak, ahogy arra sincs garancia, hogy az egyes blockokba az egyes bányászok ugyanazon tranzakciókat rakják be. Minden relatív és ezen relativitást hivatott kompenzálni a 6 blokknyi megerősítés. Talán sokan találkozhattatok már ezzel az ábrával:

Ez az ábra mutatja a blocklánc relativitását. A zöld block a rendszer egyetlen abszolút pontja, ez (Bitcoin esetén) kézzel létrehozott és az összes node kódjába belehackelt genezis block, melyet Nakamoto készített. A fekete a “leghosszabb” block, míg a szürke leágazásokat nevezik árva (orphan) blockoknak, chaineknek.

A Bitcoin hálózat eme kusza leágazásoktól sem mentes kavalkádjában egyetlen elv mondja meg, hogy melyik a VALÓDI blocklánc: amelyik a leghosszabbra tud nőni. De miért keletkeznek egyáltalán leágazások?

A peer-to-peer hálózati jelleg és a Proof-of-Work, azaz a bányászat ennek az oka. Minden node nyilvántartja a teljes blockláncot és azt is, hogy – szerinte – mi annak a legutolsó eleme. Amikor a bányászok elkezdenek létrehozni egy új blockot, akkor annak headerjébe berakják az általuk ismert legutolsó block hashét. Mivel a bányászok folyamatosan versenyeznek az új blockok elkészítéséért és ebben a versenyben a puszta számítási kapacitás mellett a szerencse (egészen pontosan a játékelmélet) is nagy szerepet játszik, ezért semmi garancia nincs arra, hogy pontosan melyik bányász fogja elkészíteni a következő blockot. Ha ma úgy döntenél, hogy az egyik kukás notebookodra felraksz egy cgminer-t, ami csak a notebookod CPU-ját használva próbál blockot készíteni, akkor van arra esélyed, hogy a hatalmas dollármilliárdból épült bányásztársaságok elől elhappolj egy blockot és ezzel behúzd a txfee mellett a block rewardot is. Igaz ez az esély, közel egyenlő a nullával, azonban nem pontosan nulla. Néhány ezer éven belül akár be is tudnád mákolni…

Szóval minden bányász egyszerre versenyez a block készítésért és amikor valamelyik bányásznak sikerül elkészítenie egy blockot, akkor azt propagálja az összes node felé. A nodeok befogadják az elkészült új blockot és ellenőrzik azt, ha az formai és tartalmi szempontból tökéletes, akkor a saját blockláncuk végére csapják és az alapján kezdik el gyártani az újabb blockot.

Azonban nagyon ritka esetben előfordul, hogy két bányász közel azonos pillanatban készít el egy-egy blockot, mely blockok tartalma egyébként egyáltalán nem biztos, hogy azonos. A bányászok teljesen saját döntésük és algoritmusuk alapján rakják össze a blockokat, alapvetés, hogy a bányászok a legnagyobb profitra törekednek, ennek megfelelően a legmagasabb txfee-vel rendelkező tranzakciókból építik fel a blockot, ám ezzel együtt arra is törekednek, hogy a fizikai blockméret határhoz legközelebbi méretet hozzák össze. Tehát ha a magas tranzakciós díjak mellett még belefér a blockba néhány nagyon pici de alacsony költségű tranzakció is, akkor bizony azt is berakják, minden pici tétel számít. Ezen az algoritmuson sokat módosított a segwit protokoll is, ahol már azon is kell ügyeskedniük a bányászoknak, hogy a normál p2sh tranzakciók mellett milyen mértékben rakjanak be segwit tranzakciókat is, amelyek bár alacsonyabb fee-vel rendelkeznek a méretük miatt, cserébe viszont a blockot nagyobbra lehet velük hizlalni.

Előfordulhat, hogy két bányász is pont egyszerre készít el egy-egy újabb blockot. Ilyenkor mindketten elkezdik a block propagálást, mely tevékenység a nodeok között különböző leosztásban kezd el terjedni. A nodeok különböző sorrendben kaphatják meg a két új (ugyanazon helyre szóló) blockot és minden bányász node alapértelmezetten azon kezdi el generálni az újabb blockot (pontosabban számolni annak a hashét), amelyiket előbb kapta meg. De biztos ami biztos, eltárolja a másik beesett blockot is, hiszen van rá esély, hogy más nodeok azt próbálják meg folytatni, mivel ők azt kapták meg előbb.

Ezek azok a pillanatok, amikor létrejönnek az orphan blockok. Azonban ebben a pillanatban még nem lehet tudni, hogy melyik lánc lesz a leghosszabb, hiszen a blockláncban elágazás képződött és mindkettő ugyanolyan hosszú.

Bár iszonyatosan kicsi rá az esély, de előfordulhat, hogy mindkét új láncon szintén újra egyszerre keletkezik egy-egy új block, ami miatt továbbra is mindkét lánc a leghosszabbnak tűnik, azonban semmi garancia nincs arra, hogy a két lánc  utolsó két blockjában ugyanazon tranzakciók vannak. Ez az a pont, ahol a játékelmélet erősen elkezd kompenzálni. A két leghosszabb lánc propagálása után annak az esélye, hogy újra mindkét láncon szintén egyszerre készüljön el egy újabb block, már szinte egyenlőre a nullával.

2014 előtt oly mértékben nem volt érdemi verseny a bányászok között, hogy gyakorlatilag egyetlen árva block sem keletkezett. Ám 2014-ben az ASIC minerek megjelenésével jelentősen megnövekedett az árva blokkok száma, éveken keresztül napi 2-4 ilyen block is keletkezett, de csúcson előfordult, hogy napi 5 orphan block is. Figyelembe véve, hogy egy nap összesen 144 blocknak kell keletkeznie, így jól látható, hogy akkoriban ádáz küzdelem folyt a “leghosszabb lánc” fenntartása érdekében, hiszen az elárvult blockokban lévő coinbase rewardot senki nem ismeri el, így orphan blockot bányászni gyakorlatilag felér az anyagi csőddel.

Az orphan blokkok napi száma 2016 második felétől jelentősen csökkent és 2017 júniusa óta teljesen el is tűntek. Ennek oka a technológiai fejlődés és a bányászat jelentős centralizálódása. Az új block propagálási ideje a peer-to-peer nodeok közötti sávszélességtől függ, minél nagyobb a sávszélesség az egyes bányász nodeok között, annál kisebb az esélye annak, hogy a fentihez hasonló versenyhelyzet alakuljon ki (tehát amikor az egyes nodeok eltérő blockokon próbálják folytatni a blockláncot.)

A Bitcoin blockláncon a leghosszabb organikus úton kialakult orphan chain 4 blockot tartalmazott, de ezt leszámítva a legtöbb ilyen chain csak egy blockot tartalmaz és nagyon ritka esetben hízik fel két block hosszra. Egy alkalommal keletkezett ennél hosszabb orphan chain a 74638 blocknál, ami összesen 53 block hosszú volt, ez azonban egy érték túlcsordulásos hiba kihasználása során keletkezett és konszenzusos döntéssel tették árvává a meghackelt blockokat.

[commercial_break]

A blocklánc ezen sajátossága miatt kezeli mindenki kvázi evidensként, hogy amíg egy tranzakció nem ér el minimum hat megerősítést, addig azt nem tekintjük véglegesnek. Az árva ágra kerülő tranzakciók az összes többi nodeon mempoolban maradnak, így azon double-spendingelhetők a rfb (replace-by-fee) protokollon keresztül. Ehhez persze egy nagyon kifinomult támadásra lenne szükség és nem ártana, ha lennének nagyobb számban árva blokkok is, de nyilván az ördög nem alszik, ezért feltehetően hosszútávon velünk marad a népi bölcselet, mely szerint a 6. confirmationt illik megvárni, mielőtt még az asztal alá isszuk magunkat a frissen jött vagyonunkból.

Mindez nem csak a Bitcoin hálózat sajátossága. Egy blockláncon minél gyorsabb a blocking time (két block kiállítása közötti idő), annál nagyobb az esélye, hogy orphan block keletkezzen és abból akár orphan lánc növekedjen. Az Ethereum hálózaton az orphan blockokat “uncle blockoknal” nevezik, melyből átlagosan PERCENKÉNT keletkezik legalább egy, de van hogy akár percenként több is. Ennek megfelelően a napi 1000-1500 uncle block sem ritka. Az Ethereum hálózat egyébként (szemben a Bitcoinnal) fizet az uncle blockokért is, egészen pontosan a győztes és érvényes blockot generáló miner fizet az uncle ágra kerülő bányászoknak a saját jutalmából.

 

Bookmark the permalink.

23 Comments

  1. Jókat írsz, nem adod ki könyvben?

  2. Köszönjük! Nekem ez így teljesen kerek. Thx!

  3. Koszonjuk. Egyik legjobb szorakozasom manapsag a postjaid olvasasa. Megjon a hirlevel es klikkelek is. Legtobbszor jobb mint az esti film 🙂
    Egyebkent ugye az elso confirmacio elott en egy wallet-bol vagy kripotozsderol kiutalasnal hogyan tudnam visszavonni? Mert olyan gombot meg nem lattam.
    Masik amin gondolkodtam, ha elcseszem az address-t, es nem is letezik olyan “cim”, akkor visszapattan a penzem, vagy elment…es sirathatom. Gondolom ha letezik a “cim” akkor ott vk nagyon fog orulni 🙂 Regebben vk toltogette az elofizus telefonom neha, en orultem, gondolom a feltolto mar kevesbe 🙂

    • ha rossz címre küldesz, akkor az bizony elveszett. Szinte nulla az esélye, hogy egy már létrehozott címre küldesz. Visszavonni pedig nem lehet, inkább csak módosítani. Egy ugyanolyan tranzakciót kell beküldeni, de más tx fee-vel. Hogy csalni hogy lehet vele, azt ne tőlem kérdezd 🙂

    • Maga az address rendelkezik egy ellenőrző összeggel, ami miatt csak úgy egyszerűen nem lehet elgépelni az address-t. Persze lehetsz annyira balszerencsés, hogy mégis úgy gépeled el, hogy abból is egy értelmes address jön ki. Ha mégis ez utóbbi történne, akkor annak az esélye, hogy az elgépelt de egyébként valid address mögött valóban egy létező tárca és létező ember áll, nos ennek az esélye elhanyagolhatóan kicsi. Sokkal valószínűbb, hogy egy olyan addressre küldöd a pénzed, amit soha az életbe senki nem fog tudni használni, mert senki nem fogja legenerálni a hozzá szükséges privát kulcsot.

      A tranzakciókat vissza tudod vonni és el is tudod téríteni amíg azok nem kerülnek be a blockba. Ennek persze vannak bizonyos előfeltételei. Egyrészt ugye fontos, hogy Bitcoinról beszélünk-e, ha igen, akkor is fontos, hogy mennyi az adott tranzakció nSequence értéke. Amennyiben az érték UNIT_MAX-ra van állítva (0xffffffff), akkor ahhoz már nem lehet hozzányúlni. A legtöbb wallet viszont ezt az értéket picikét alacsonyabbra rakja, pont azért, hogy igény esetén lehessen magasabb fee-vel boostolni a tx-het, ha berakgadna a mempoolba. Azonban ez a boostolás egyben azt is jelenti, hogy ilyenkor lehet módosítani a tx teljes output szakaszát, tehát akár vissza is tudod fordítani azt. Pont emiatt nagyon kényes a Bitcoint esetén 0-confirmationről beszélni.

      • Koszonom a kimerito valaszt!
        Ismet tanultam valamit, le is mentem magamnak 🙂

      • Tudnátok abban segíteni, hogy hogyan tudnék módosítani vagy visszafordítani egy tranzakciót? 6 napja indítottam el (Bitcoin Core Wallet-ből), sajnos alacsony fee-vel. Nem jöttem még rá, hogy hogyan tudnám utólagosan megemelni a fee-t, vagy törölni a tranzakciót.

        • A ViaBTC és a blockchain.info is tartalmaz transaction accelerator szolgáltatást, de mellettük nagyon sok másik RBF szolgáltató is létezik. Egy konkrét: https://pool.viabtc.com/tools/txaccelerator/

          • Köszi a tippet, mentettem. A probléma az, hogy a tranzakció mérete kicsi, így a fee is alacsony (226 sat). A viabtc-nél 0.00001 a minimum fee, tehát az ingyenes megoldás nem működik. Fizetős megoldás meg értelemszerűen nem érné meg, mert többe kerülne az accelerator, mint maga a tranzakció 🙂
            Létezik olyan időkorlát, ami után a tranzakció kikerül a mempoolból (sikertelenül), vagy az idők végezetéig beragad?

          • Létezik, de ez nem determinisztikus. Függ a mempool állapotától, attól, hogy az egyes nodeok milyen verziót futtatnak, azok hogyan vannak konfigolva, stb. Elvileg ha 2 héten belül nem kerül blockba, akkor szinte biztos, hogy törlődik mindenhonnan a tx és újra spendingelhető.

  4. Én is köszönöm. Ismét egy olvasmányos, jól érthető és érdekes cikk.

  5. Kis off: mintha említetted volna valamelyik bejegyzésben, hogy az iota-ról a héten tartasz valami előadást, erre az eseményre hol tudnék jelentkezni? Ha rosszul emlékszem akkor bocs.

  6. Hogy ne maradjunk ezen a héten sem premine fork nélkül 498888-nál jön a Super Bitcoin 🙂

  7. Még esetleg érdemes lett volna pár szóban jobban kifejteni az Ethereum féle uncle blokkok témakörét, miszerint a “nyertes” blokkban eltárolódnak a “nagybácsik” hashei is, tehát – részben legalábbis – ezek is bekerülnek a blokkláncba.

    Ez a jutalmazósdi nem csak valami bugyuta visszaosztás az igazságosság jegyében, hanem erősen hozzátesz a rendszerhez, részben javítja a bányászat összesített hatásfokát a hálózat hitelesítésének során (így nem teljesen elpazarolt erőforrás az árva blokkok bányászata ellenben a BTC-vel, ahol rontja a rendszer biztonságosságát), illetve többek közt az egyik fő gátja annak, hogy az Ethereum hálózat esetén nem történt meg az az ijesztő centralizáció a bányászat terén, mint ami a BTC-nél lezajlott és mérgezi a közösséget azóta is a bányász óriások befolyása okán.

    Meg lehetett volna említeni még a DAG felépítésű blockchaineket (pl. IOTA), ami kifordítja az egész problémakört és eleve az elágazásokra épít.

    Tudom, hogy ezek nagy részéről írtál már máshol, ennél jobban nem is kellett volna kifejteni őket, elég lett volna belinkelni a részletesebb posztjaidat.

    Ezt tényleg konstruktív kritikaként írom, mert amúgy nagyon fasza, korrekt cikk lett, amit nyugodtan lehet adott esetben ismerősöknek, témáról író újságíróknak linkelni. Pont ezért lehetett volna kicsit átfogóbb, hogy aki jobban érdeklődik a viszonylag egyszerű BTC-s működésen túl is a témakör iránt, az tudjon merre tovább elindulni.

    • Teljesen jogos amit írsz, de a cikk tudatosan foglalkozik a Bitcoinnal és csak érdekességképpen említettem meg azt Ethereum sokkal igazságosabb rendszerét (orphan <-> uncle). Ezt volt hivatott megcélozni a cikk címe is.
      A DAGot, hashgraphot én nem nagyon kevertem volna ide, de tény, hogy magának az alap problémának eléggé hatékony megoldását nyújtja az aciklikus gráf elmélet. Kár, hogy a jelenlegi interpretációk (Swirlds, IOTA) inkább csak rontják a technológia megítélését, mintsem méltó helyére raknák azt.

      Egyébként annyiból megvettem az ötleted, hogy lehet időszerű lenne lassan összerakni egy olyan esszét, ami azt mutatja be, hogy a különböző public ledger impementációk (kezdve a Bitcointól egészen az IOTA-ig), milyen módon valósítják meg eme funkciót és milyen módon felelnek meg a tényleges specifikációknak. (Gondolok itt arra, hogy pl az IOTA egy eléggé csúf és buta implementációja a Tanglenek, pont úgy, ahogy a NEO esetén is csak a kirakati marketing része a dBFT, míg a valóságban “hivatalokban” validálnak.)

      • Persze, jobb több cikkbe szétszedni ennyi információt, hogy ne feküdje meg az ember gyomrát, én csak arra akartam célozni, hogy ha már ilyen fasza tudásbázis jellegű írásaid vannak, lehetne valamiféle “íve” a dolognak.

        Egy blog nem teljesen alkalmatlan erre a célra, de azért kellenek kapaszkodók az olvasónak a – legyünk őszinték – rendezetlenül egymásra hányt posztok között, hogy ne vesszen el. Főleg az új olvasókra gondolok, akikből ha tippelnem kéne, az elmúlt hetekben szabadult be ide annyi, mint előtte évek alatt. 😉

        A tagek, kategóriák mindenképp szükségesek, de önmagában nem elégségesek. A szövegbe elrejtett kereszthivatkozások a legjobbak erre, írsz egy jól körülhatárolható, még emészthető témáról (mint ez) és a végén röviden összefoglalod a közvetlenül kapcsolódó területeket esetleg, főleg ha már írtál is róla, linkkel. Az IOTA-s posztodban pl. teljesen jól elmagyaráztad a tangle működésének alapjait, 1-2 mondat + link elfért volna ide is, erre gondoltam.

        Tudom hogy szoktad magad hivatkozni, de teheted ezt bátran többször is, még egyszer írom, nagyon jó írásaid gyűltek össze az idők során, amik most jelenleg az n+1. oldalon hevernek “parlagon”, gugliból talál be rájuk esetleg ember, pl. ha éppen pumpálnak valami coint, amit senki se tud pontosan, hogy mi. 😛

        Még annyit, hogy a “szemantikus”, rendes szövegbeli linkeket a google is meghálálja, jobban szereti, mint a generált kategória listákat meg tagcloudot.

    • A banyasz centralizaltsag nem az arva blokkok miatt jott letre, hanem azert mert a kinaiak olcson (es valszeg elobb, mint mindenki mas) jutott asic minerekhez, azt olcson (par ember elvalalja napi 2 tal rizsert) tudtak uzemeltetni, es az aramot is olcsobban (talan meg 0) koltseggel tudtak szerezni. ez akkor gazdasagi elonyt jelentett nekik, hogy oriasi farmokat tudtak csinalni

  8. Sziasztok!
    Egy valami nem hagy nyugodni engem a bitcoin private key-el kapcsolatban. Ugyebár generáltam magamnak addresst és keyt, majd arra az addressre átraktam egy kisebb összeget, amit természetesen le is tudok ellenőrizni, hogy valóban ott is van. De abban hogy lehetek biztos, hogy a private key működni fog hozzá, amikor majd el akarom költeni? Ha beírom egy alkalmazásba hogy leellenőrizzem, akkor egyúttal megteremtem a veszélyét hogy ellopják a kulcsot?

    • Sehova nem adsz meg priv. kulcsot. Ha mégis, max. kliens oldalon futó offline felületen letiltott hálózati adapterrel és engedélyezés előtt uninstall. Pl. egy paper wallet generátort hasonlóképp használtam. De lehet, hogy csak én állok túl paranoid módon ehhez a kérdéshez. 🙂

    • Én is voltam ilyen paranoiás a kezdeti időkben 🙂

      Ha nagyon meg akarod nyugtatni magad és más nem győz meg, akkor tranzakciós költség ide vagy oda, utalnod kell ki a walletből máshová, hogy lásd megtörtént.
      Elméletben felesleges, a gyakorlatban lehet megér ennyit, hogy nyugodt legyél.

  9. de az utaláshoz kell a private key amit a tanácsok szerint egyszer kellene csak használni

Leave a Reply

Your email address will not be published. Required fields are marked *