Megjegyzés: Ez az oldal súlyosan elavult és nagyrészt karbantartatlan; a szerkesztési hibák miatt nem sok szakértői értékelésen esett át.
Egy teljes Bitcoin-csomópontot úgy lehet módosítani, hogy a jelenleginél sokkal nagyobb tranzakciós sebességre skálázódjon, feltéve, hogy az említett csomópont nem egy asztali számítógépen, hanem egy csúcskategóriás szerveren fut. A Bitcoint úgy tervezték, hogy támogassa a könnyű klienseket, amelyek a blokkláncnak csak kis részeit dolgozzák fel (erről bővebben lásd alább az egyszerűsített fizetési verifikációt).
Kérem, vegye figyelembe, hogy ez az oldal azért létezik, hogy számításokat adjon egy Bitcoin teljes csomópont skálázhatóságáról és a blokklánc tranzakcióiról, a hálózat biztonságára és decentralizációjára való tekintet nélkül. Nem célja, hogy megvitassa az alternatív protokollok skálázhatóságát, vagy megpróbálja összefoglalni a filozófiai vitákat. Hozzon létre alternatív oldalakat, ha ilyesmire vágyik.
Jegyzet az olvasóknak
Amikor a technikusok a Bitcoin működéséről hallanak, gyakran megállnak az “elárasztás” szó hallatán, és azt mondják: “Jaj, istenem, ez nem skálázható!”. Ennek a cikknek az a célja, hogy egy szélsőséges példát, a Visa tranzakciós csúcssebességét vegyük, és megmutassuk, hogy a bitcoin technikailag mindenféle megkérdőjelezhető érvelés, az alapkonstrukció megváltoztatása vagy nem létező overlay-ek nélkül is elérheti ezt a fajta sebességet. Mint ilyen, ez csupán egy szélsőséges példa – nem egy terv arról, hogy a bitcoin hogyan fog növekedni, hogy szélesebb körű igényeket elégítsen ki (decentralizált rendszerként a bitcoint használó közönség fogja eldönteni, hogyan fog növekedni a bitcoin) – ez csupán egy érv, amely megmutatja, hogy a bitcoin magtervezése sokkal jobban skálázható, mint azt egy intelligens ember elsőre gondolná.
Dan jogosan kritizálja az itt bemutatott elemzést – rámutatva, hogy az ilyen skálán való működés jelentősen csökkentené a bitcoin decentralizált jellegét: Ha sok terabájtnyi lemezterületet kell birtokolni egy “teljes validáló” csomópont működtetéséhez, akkor kevesebb ember fogja csinálni, és mindenkinek, aki nem teszi, meg kell bíznia abban, hogy azok, akik csinálják, őszinték. Dan (a diái alapján) úgy tűnik, túl messzire ment ezzel az érveléssel: úgy tűnik, azt sugallja, hogy ez azt jelenti, hogy a bitcoinokat a ma elterjedt központi bankok fogják ellenőrizni. Elemzése két okból is kudarcot vall (a második pedig annak a hibája, hogy ez az oldal kissé félrevezető):
Először is, még az itt bemutatott csillagászati léptékben is a szükséges kapacitás bőven a (tehetős) magánszemélyek hatókörén belül van, és minden bizonnyal az is lesz valamikor a jövőben, amikor ilyen kapacitásra lesz szükség. Egy olyan rendszer, amely magánszemélyeket, vagy legalábbis magánszemélyek kis csoportjait a központi bankokkal egyenrangúvá teszi, aligha nevezhető centralizáltnak, bár kevésbé lenne decentralizált, mint a mai bitcoin. A rendszer szintén nem juthatna el ilyen skálára anélkül, hogy a bitcoin-felhasználók ne egyeznének meg közösen a maximális blokkméret növelésében, tehát ez nem egy olyan eredmény, ami a bitcoin-felhasználók beleegyezése nélkül megtörténhet.
Második és legfontosabb, hogy az itt leírt feltételezett skálázás a vízumot helyettesítő Bitcoinról szól. Ez egy rossz összehasonlítás, mert a bitcoin önmagában a skálázódástól teljesen független okokból nem helyettesíti tökéletesen a vízumot: A Bitcoin például nem kínál azonnali tranzakciókat, hitelt, vagy különböző csalás elleni mechanizmusokat (amiket egyesek szeretnének, még ha nem is mindenki). A Bitcoin teljesebb helyettesíti a csekkeket, az átutalásokat, a fizetési megbízásokat, az aranyérméket, a CD-ket, a megtakarítási számlákat stb. és ha széles körben elfogadják, valószínűleg helyettesíti a hitelkártyák felhasználási módjait, amelyeket ezek a többi dolog jobban szolgálna, ha online jobban működnének.
A bitcoin-felhasználók néha túl gyorsan elsiklanak e tény felett, mert az emberek túl gyorsan hibának nevezik, de ez igazságtalan. Egyetlen rendszer sem ideális minden felhasználásra, és a Bitcoin a tulajdonságok szélesebb spektrumával rendelkezik, mint a legtöbb monetáris eszköz. Ha a bitcoin közösség nem hajlandó rámutatni arra, hogy bizonyos dolgokat más rendszerekkel jobban meg lehetne oldani, akkor könnyen szalmabábu érveket lehet felhozni: Ha elismerjük, hogy a bitcoint padlóviaszként és sivatagi öntetként is lehetne használni, valaki mindig rá fog mutatni, hogy nem ez a legjobb padlóviasz vagy a legjobb sivatagi öntet.
A bitcoinra triviális fizetési és hitelezési rendszereket építeni _a bitcoin tetejére_, mind a klasszikusakat (mint maga a Visa!), mind a “decentralizáltakat”, mint a Lightning. Ezek a rendszerek kisebb költségekkel nagyobb tranzakciós volumeneket tudnának kezelni, és gyakran elszámolnának a mögöttük lévő bitcoinra. Ezek más technikákat használhatnának, más kompromisszumokkal, mint a bitcoin, de továbbra is a bitcoin által támogatott és denominált rendszerek maradnának, így továbbra is élvezhetnék a központi ellenőrzés hiányát. Ennek a kezdeteit látjuk ma a bitcoin csere- és tárcaszolgáltatásokkal, amelyek lehetővé teszik az azonnali fizetéseket a tagok között.
Ezek a szolgáltatások a stabil, inflációnak ellenálló bitcoin valuta előnyeit élveznék, a felhasználók az azonnali tranzakciók, a hitel és a csalás elleni védelem előnyeit élveznék, a bitcoin összességében jobb skálázódást élvezne a tranzakciós volumen átterheléséből anélkül, hogy a decentralizált jellege sérülne. Egy olyan világban, ahol a bitcoint széles körben használják, a fizetési rendszerek valószínűleg alacsonyabb árakkal rendelkeznének, mert versenyezniük kellene a nyers bitcoin tranzakciókkal, de alacsonyabb árat is megengedhetnének maguknak, mert a gyakori bitcoin elszámolás (és a zero trust bitcoin escrow tranzakciók) csökkentené a kockázatukat. Ez duplán igaz, mert a bitcoin elképzelhetően skálázódhatna úgy, hogy teljesen kiváltsa őket, még ha ez nem is lenne a legjobb ötlet a decentralizáció ebből adódó csökkenése miatt.
Skálázhatósági célok
A VISA átlagosan körülbelül 2000 tranzakciót kezel másodpercenként (tps), tehát nevezzük napi 4000 tps-es csúcsrátának. A csúcskapacitása körülbelül 56 000 tranzakció másodpercenként, azonban ennek körülbelül egyharmadánál többet valójában soha nem használnak még a vásárlási csúcsidőszakokban sem.
A PayPal ezzel szemben 2014 végén naponta körülbelül 10 millió tranzakciót bonyolított le, átlagosan 115 tps sebességgel.
Vegyük a 4000 tps-t kiindulási célnak. Nyilvánvalóan, ha azt szeretnénk, hogy a Bitcoin a világ összes gazdasági tranzakciójára skálázódjon, beleértve a készpénzt is, akkor ennél jóval magasabbra, talán inkább néhány százezer tps környékére. És az, hogy ellen kell állni a DoS-támadásoknak (amelyekkel a VISA-nak nem kell megküzdenie), azt jelenti, hogy a szabványos csúcssebességen jóval túl akarunk skálázódni. Mégis, egy célpont kiválasztásával elvégezhetünk néhány alapvető számítást, még ha ez egy kicsit önkényes is.
A Bitcoin-hálózat ma 7 tps-os tartós sebességre van korlátozva, mivel a Bitcoin protokoll a blokkok méretét 1 MB-ra korlátozza.
CPU
A protokoll két részből áll. A csomópontok “inv” üzeneteket küldenek más csomópontoknak, amelyekben közlik velük, hogy új tranzakciójuk van. Ha a fogadó csomópont nem rendelkezik ezzel a tranzakcióval, akkor azt egy getdata segítségével kéri.
A nagy költséget a tranzakció ellenőrzésével járó kripto- és blokklánc-keresés jelenti. A tranzakció ellenőrzése némi hasheléssel és ECDSA aláírás-ellenőrzéssel jár. A RIPEMD-160 106 megabájt/sec sebességgel fut (az egyszerűség kedvéért nevezzük 100-nak), az SHA256 pedig nagyjából ugyanennyi. Tehát 1 megabájt hashelésének körülbelül 10 milliszekundumot kell igénybe vennie, 1 kilobájt hashelésének pedig 0,01 milliszekundumot – ez elég gyors ahhoz, hogy figyelmen kívül hagyjuk.
A Bitcoin jelenleg (néhány egyszerű, prototípussal rendelkező, de még nem egyesített optimalizálással) körülbelül 8000 aláírás-ellenőrzést képes elvégezni másodpercenként egy négymagos Intel Core i7-2670QM 2,2 GHz-es processzoron. A tranzakciónkénti átlagos bemenetek száma 2 körül van, tehát felére kell csökkentenünk a sebességet. Ez azt jelenti, hogy 4000 tps CPU-ügyileg könnyen elérhető egyetlen, meglehetősen mainstream CPU-val.
Amint láthatjuk, ez azt jelenti, hogy amíg a Bitcoin-csomópontok legalább 4 magot maximalizálnak a gépeken, amelyeken futnak, nem fogunk kifogyni az aláírás-ellenőrzéshez szükséges CPU-kapacitásból, hacsak a Bitcoin nem kezel 100-szor akkora forgalmat, mint a PayPal. 2015 végén a hálózat 1,5 tranzakciót kezel másodpercenként, tehát még óriási népszerűségnövekedést feltételezve sem fogjuk elérni ezt a szintet még sokáig.
A Bitcoin természetesen az aláírásellenőrzésen kívül más dolgokat is csinál, a legnyilvánvalóbb az adatbázis kezelése. Mi a LevelDB-t használjuk, ami a nehéz munkák nagy részét egy külön szálon végzi, és nagyon nagy írási/olvasási terhelésre képes. Összességében a Bitcoin CPU-használatát az ECDSA uralja.
Hálózat
Tegyük fel, hogy az átlagos sebesség 2000tps, tehát csak a VISA. A tranzakciók mérete körülbelül 0,2 kilobájt és több mint 1 kilobájt között változik, de ma átlagosan fél kilobájt.
Ez azt jelenti, hogy körülbelül 8 megabit/másodperc tranzakciós adatmennyiséggel kell lépést tartani (2000tps * 512 byte) / 1024 byte egy kilobájtban / 1024 kilobájt egy megabájtban = 0,97 megabájt másodpercenként * 8 = 7,8 megabit/másodperc.
Ez a fajta sávszélesség ma már a lakossági kapcsolatoknál is általános, és biztosan az alsó határán van annak, amit a kolokációs szolgáltatók elvárnának.
A blokkok feloldásakor a jelenlegi protokoll újra elküldi a tranzakciókat, még akkor is, ha egy peer már látta azt az adáskor. Ha ezt úgy javítanánk, hogy a blokkok csak hash-listák legyenek, az megoldaná a problémát, és elhanyagolhatóvá tenné a blokkok sugárzásához szükséges sávszélességet. Így bár ez az optimalizálás ma még nincs teljesen megvalósítva, itt nem vesszük figyelembe a blokkok átviteli sávszélességét.
Tárolás
Nagyon magas tranzakciós sebességnél minden blokk mérete meghaladhatja a fél gigabájtot.
A legtöbb teljesen validáló csomópont számára nem szükséges a teljes lánc tárolása. Satoshi tanulmányában leírja a “metszést”, egy olyan módot, amellyel törölni lehet a teljesen elköltött tranzakciókról a felesleges adatokat. Ez csökkenti a teljesen validáló csomópontok számára szükséges adatmennyiséget úgy, hogy az csak az aktuális, még el nem költött kimeneti méret legyen, plusz néhány további adat, amely az újraküldések kezeléséhez szükséges. 2012 októberéig (203258-as blokk) 7 979 231 tranzakció történt, azonban az el nem költött kimeneti készlet mérete kevesebb mint 100 MB, ami elég kicsi ahhoz, hogy még a meglehetősen régi számítógépek RAM-jában is könnyen elférjen.
Az archiváló csomópontoknak csak kis számban van szükségük a teljes lánc tárolására a genezis blokkig visszamenőleg. Ezek a csomópontok használhatók az új, teljesen hitelesítő csomópontok nulláról történő indítására, de egyébként szükségtelenek.
A Bitcoin teljesítményének elsődleges korlátozó tényezője a lemezkeresés, amint a fel nem használt tranzakciók kimeneti készlete már nem fér el a memóriában. Amint a merevlemezeket kivonják az SSD-k javára, könnyen lehet, hogy az UTXO-készlethez való hozzáférés soha nem lesz komoly szűk keresztmetszet.
Optimalizálás
A fenti leírás a jelenlegi szoftverre vonatkozik, csak kisebb optimalizálásokat feltételezve (olyanokat, amelyeket egy ember néhány hét alatt el tud és el is végzett).
A jövőben azonban még nagyobb optimalizálás is lehetséges, némi többlet bonyolultság árán.
CPU
Léteznek algoritmusok az elliptikus görbék aláírásán keresztüli kötegelt ellenőrzés felgyorsítására. Lehetőség van az aláírásaik egyidejű ellenőrzésére, ami 2x-es gyorsulást eredményez. Ez egy kissé bonyolultabb megvalósítás.
Egyszerűsített fizetési ellenőrzés
Elkészíthető olyan Bitcoin implementáció, amely nem ellenőriz mindent, hanem vagy egy megbízható csomóponthoz való csatlakozásra támaszkodik, vagy a nagy nehézségben bízik, mint az érvényesség igazolásának helyettesítőjében. A bitcoinj ennek a módnak az implementációja.
A Satoshi papírjának az ezt leíró szakaszáról elnevezett SPV (Simplified Payment Verification) módban az ügyfelek egy tetszőleges teljes csomóponthoz csatlakoznak, és csak a blokkfejléceket töltik le. Ellenőrzik, hogy a láncfejlécek helyesen kapcsolódnak-e egymáshoz, és hogy a nehézség elég magas-e. Ezután bizonyos mintáknak megfelelő tranzakciókat kérnek a távoli csomóponttól (azaz a címekre történő fizetéseket), amely másolatokat biztosít ezekről a tranzakciókról, valamint egy Merkle-ágat, amely összekapcsolja őket azzal a blokkal, amelyben megjelentek. Ez kihasználja a Merkle-fa szerkezetét, és lehetővé teszi a felvétel bizonyítását anélkül, hogy szükség lenne a blokk teljes tartalmára.
Egy további optimalizálásként a kellően mélyen eltemetett blokkfejlécek egy idő után kidobhatók (pl. tényleg csak 2016 fejlécig kell tárolni).
Az, hogy a távoli csomópont nem fiktív tranzakciókkal látja el Önt, a fenyegetettségi modelltől függ. Ha olyan csomóponthoz csatlakozik, amelyről ismert, hogy megbízható, a nehézség nem számít. Ha véletlenszerű csomópontot akarsz választani, akkor egy támadó számára a hamis tranzakciót tartalmazó blokkszekvencia bányászásának költségei magasabbak kell, hogy legyenek, mint a te becsapásoddal megszerezhető érték. Azzal, hogy megváltoztatjuk, milyen mélyen kell eltemetni a blokkot, a megerősítési idő és a támadás költsége között egyensúlyozhatunk.
Az ezt a megközelítést megvalósító programok fix tárolási/hálózati overheaddel rendelkezhetnek a használat nélküli nulladik esetben, és a beérkezett/elküldött tranzakciókkal arányos erőforrás-felhasználással.
See also: Thin Client Security.
Kapcsolódó munka
Van néhány javaslat a Bitcoin skálázhatóságának optimalizálására. Ezek közül néhányhoz egy alt-chain / hard fork szükséges.
- Ultimate blockchain compression – az ötlet, hogy a blokklánc tömöríthető a “trust-free lite nodes”
- A Finite Blockchain papír, amely leírja a blokklánc három, a célnak jobban megfelelő adatstruktúrára való felosztását. A három adatszerkezet egy véges blokklánc (N blokkot tart a múltba), egy “számlafa”, amely minden nem nulla egyenleggel rendelkező címhez számlaegyenleget tart, és egy “bizonyítási lánc”, amely a blokklánc (folyamatosan növekvő) karcsúsított változata.
- Lightning Network, egy alternatív protokoll a tranzakciók elszámolására, amelyben a csomópontok egymás között mikrofizetési csatornákat hoznak létre, és időnként elszámolnak a blokkláncon. A hétköznapi felhasználók elsősorban vagy kizárólag a fizetési csatornákkal lépnek kapcsolatba, és a blokkláncot csak a nagy átutalásokhoz és a hűtőtároláshoz használják.