Uwaga: Ta strona jest poważnie przestarzała i w dużej mierze nie jest utrzymywana; ze względu na przeszłe incydenty z edit-warringiem nie była poddawana wielu recenzjom.
Pełny węzeł Bitcoin mógłby zostać zmodyfikowany tak, aby skalować się do znacznie wyższych stawek transakcyjnych niż te, które obserwujemy obecnie, zakładając, że wspomniany węzeł działa na wysokiej klasy serwerach, a nie na komputerach stacjonarnych. Bitcoin został zaprojektowany do obsługi lekkich klientów, którzy przetwarzają tylko małe części łańcucha bloków (zobacz uproszczoną weryfikację płatności poniżej, aby uzyskać więcej szczegółów na ten temat).
Proszę zauważyć, że ta strona istnieje, aby dać obliczenia dotyczące skalowalności pełnego węzła Bitcoin i transakcji na łańcuchu bloków bez względu na bezpieczeństwo sieci i decentralizacji. Nie jest ona przeznaczona do omawiania skalowalności alternatywnych protokołów lub próbowania i podsumowywania debat filozoficznych. Stwórz alternatywne strony, jeśli chcesz to zrobić.
Uwaga dla czytelników
Kiedy technicy słyszą o tym, jak działa bitcoin, często zatrzymują się na słowie „zalewanie” i mówią „Oh-my-god! to nie może się skalować!”. Celem tego artykułu jest wzięcie ekstremalnego przykładu, szczytowego tempa transakcji Visy, i pokazanie, że bitcoin mógłby technicznie osiągnąć takie tempo bez żadnego rodzaju wątpliwego rozumowania, zmian w rdzeniu projektu lub nieistniejących nakładek. Jako taki, jest to tylko ekstremalny przykład – nie jest to plan, jak bitcoin będzie się rozwijał, aby zaspokoić szersze potrzeby (jako zdecentralizowany system, to społeczeństwo używające bitcoina zdecyduje, jak bitcoin będzie się rozwijał) – jest to tylko argument, który pokazuje, że rdzeń projektu bitcoina może skalować się znacznie lepiej niż inteligentna osoba może zgadywać na początku.
Dan słusznie krytykuje analizę przedstawioną tutaj – wskazując, że działanie w tej skali znacznie zmniejszyłoby zdecentralizowaną naturę bitcoina: Jeśli musisz mieć wiele terabajtów przestrzeni dyskowej, aby uruchomić „w pełni walidujący” węzeł, wtedy mniej ludzi to zrobi, a każdy, kto tego nie zrobi, będzie musiał zaufać tym, którzy to zrobią, że są uczciwi. Dan wydaje się (z jego slajdów), że poszedł za daleko z tym argumentem: wydaje się sugerować, że oznacza to, że bitcoiny będą kontrolowane przez rodzaj banków centralnych, które są powszechne dzisiaj. Jego analiza zawodzi z dwóch powodów (a drugi to wina tego, że ta strona jest nieco myląca):
Po pierwsze, nawet przy astronomicznej skali przedstawionej tutaj wymagana zdolność jest dobrze w zasięgu (bogatych) osób prywatnych, i z pewnością byłaby w jakimś przyszłym czasie, kiedy ten rodzaj zdolności byłby wymagany. System, który stawia osoby prywatne lub przynajmniej małe grupy osób prywatnych na równi z bankami centralnymi, trudno nazwać scentralizowanym, choć byłby on mniej zdecentralizowany niż bitcoin, który mamy obecnie. System nie mógłby również dostać się do tego rodzaju skali bez użytkowników bitcoina zgadzających się kolektywnie na zwiększenie maksymalnego rozmiaru bloku, więc nie jest to wynik, który może się zdarzyć bez zgody użytkowników bitcoina.
Po drugie, i najważniejsze, zakładane skalowanie opisane tutaj dotyczy Bitcoina zastępującego wizę. Jest to złe porównanie, ponieważ sam bitcoin nie jest idealnym zamiennikiem wizy z powodów zupełnie niezwiązanych ze skalowaniem: Bitcoin nie oferuje natychmiastowych transakcji, kredytów, ani różnych mechanizmów antyfraudowych (których niektórzy ludzie chcą, nawet jeśli nie wszyscy), na przykład. Bitcoin jest bardziej kompletnym zamiennikiem dla czeków, przelewów bankowych, przekazów pieniężnych, złotych monet, CD, kont oszczędnościowych, itp. i jeśli zostanie szeroko przyjęty, prawdopodobnie zastąpi zastosowania kart kredytowych, które byłyby lepiej obsługiwane przez te inne rzeczy, gdyby działały lepiej online.
Użytkownicy Bitcoin czasami zbyt szybko przechodzą nad tym faktem do porządku dziennego, ponieważ ludzie są zbyt szybcy, aby nazwać to wadą, ale to jest nieuczciwe. Żaden system nie jest idealny dla wszystkich zastosowań, a Bitcoin ma szersze spektrum cech niż większość instrumentów monetarnych. Jeśli społeczność Bitcoina nie jest skłonna wskazać, że niektóre rzeczy mogłyby być lepiej zrobione przez inne systemy, wtedy łatwo o słomiane argumenty: Jeśli przyznamy, że bitcoin może być używany jako wosk do podłóg i polewa na pustynię, ktoś zawsze wskaże, że nie jest to najlepszy wosk do podłóg lub najlepsza polewa na pustynię.
Trywialne jest zbudowanie systemów przetwarzania płatności i kredytów _na wierzchu_ bitcoina, zarówno klasycznych (jak sama Visa!), jak i „zdecentralizowanych” jak Lightning. Systemy te mogłyby obsługiwać wyższe wolumeny transakcji przy niższych kosztach, i rozliczać się często do bitcoina, który je wspiera. Mogłyby one używać innych technik z innymi kompromisami niż bitcoin, ale nadal byłyby wspierane i denominowane przez bitcoin, więc nadal cieszyłyby się brakiem centralnej kontroli. Widzimy początki tego dzisiaj z wymianą bitcoin i usługami portfela pozwalającymi na natychmiastowe płatności między członkami.
Te usługi zyskałyby korzyści ze stabilnej waluty bitcoin odpornej na inflację, użytkownicy zyskaliby korzyści z natychmiastowych transakcji, kredytów i przeciwdziałania oszustwom, bitcoin ogólnie cieszyłby się lepszym skalowaniem z odciążonego wolumenu transakcji bez naruszania jego zdecentralizowanej natury. W świecie, w którym bitcoin był szeroko stosowany, systemy przetwarzania płatności prawdopodobnie miałyby niższe ceny, ponieważ musiałyby konkurować z transakcjami raw-bitcoin, mogłyby również pozwolić sobie na niższą cenę, ponieważ częste rozliczanie bitcoinów (i zerowe zaufanie transakcji escrow bitcoin) zmniejszyłoby ich ryzyko. Jest to podwójnie prawdziwe, ponieważ bitcoin mógłby wyobrażalnie skalować się, aby zastąpić je całkowicie, nawet jeśli nie byłby to najlepszy pomysł ze względu na wynikające z tego zmniejszenie decentralizacji.
Cele skalowalności
VISA obsługuje średnio około 2000 transakcji na sekundę (tps), więc nazwij to dziennym szczytowym tempem 4000 tps. Jej szczytowa przepustowość wynosi około 56 000 transakcji na sekundę, jednak w rzeczywistości nigdy nie wykorzystują więcej niż około jednej trzeciej tej liczby, nawet w okresach największego natężenia zakupów.
PayPal, w przeciwieństwie do tego, obsługiwał około 10 milionów transakcji dziennie dla średnio 115 tps pod koniec 2014 roku.
Przyjmijmy 4 000 tps jako cel startowy. Oczywiście, jeśli chcemy, aby Bitcoin skalował się do wszystkich transakcji gospodarczych na całym świecie, w tym gotówki, byłoby to o wiele wyższe niż to, być może bardziej w regionie kilkuset tysięcy tps. A potrzeba odporności na ataki DoS (z którymi VISA nie musi sobie radzić) sugeruje, że chcielibyśmy skalować się daleko poza standardowe stawki szczytowe. Mimo to, wybranie celu pozwala nam wykonać podstawowe obliczenia, nawet jeśli jest to trochę arbitralne.
Dzisiaj sieć Bitcoin jest ograniczona do stałej prędkości 7 tps z powodu protokołu Bitcoin ograniczającego rozmiary bloków do 1MB.
CPU
Protokół składa się z dwóch części. Węzły wysyłają wiadomości „inv” do innych węzłów informując je, że mają nową transakcję. Jeśli węzeł odbierający nie ma tej transakcji, żąda jej za pomocą getdata.
Dużym kosztem jest kryptowaluta i wyszukiwanie w łańcuchu bloków związane z weryfikacją transakcji. Weryfikacja transakcji oznacza trochę haszowania i trochę weryfikacji podpisu ECDSA. RIPEMD-160 działa z prędkością 106 megabajtów/sek (dla uproszczenia nazwijmy to 100), a SHA256 jest mniej więcej taki sam. Tak więc haszowanie 1 megabajta powinno zająć około 10 milisekund, a haszowanie 1 kilobajta zajęłoby 0,01 milisekundy – na tyle szybko, że możemy to zignorować.
Bitcoin jest obecnie w stanie (z kilkoma prostymi optymalizacjami, które są prototypowane, ale jeszcze nie połączone) wykonać około 8000 weryfikacji podpisu na sekundę na czterordzeniowym procesorze Intel Core i7-2670QM 2.2Ghz. Średnia liczba wejść na transakcję wynosi około 2, więc musimy zmniejszyć tempo o połowę. Oznacza to, że 4000 tps jest łatwo osiągalne CPU-wise z jednym dość mainstream CPU.
Jak widzimy, oznacza to, że tak długo, jak węzły Bitcoin są dozwolone do maksimum co najmniej 4 rdzenie maszyn, na których działają, nie zabraknie nam wydajności procesora do sprawdzania podpisów, chyba że Bitcoin obsługuje 100 razy więcej ruchu niż PayPal. Pod koniec 2015 roku sieć obsługuje 1,5 transakcji/sekundę, więc nawet zakładając ogromny wzrost popularności nie osiągniemy tego poziomu przez długi czas.
Oczywiście Bitcoin robi inne rzeczy poza sprawdzaniem podpisów, najbardziej oczywiste jest zarządzanie bazą danych. Używamy LevelDB, który wykonuje większość ciężkich zadań w oddzielnym wątku i jest w stanie obsługiwać bardzo duże obciążenia odczytu/zapisu. Ogólnie rzecz biorąc, wykorzystanie CPU Bitcoina jest zdominowane przez ECDSA.
Sieć
Załóżmy średnią prędkość 2000tps, więc tylko VISA. Transakcje mają wielkość od około 0,2 kilobajta do ponad 1 kilobajta, ale obecnie jest to średnio pół kilobajta.
To oznacza, że musisz nadążyć z około 8 megabitami/sekundę danych transakcji (2000tps * 512 bajtów) / 1024 bajty w kilobajcie / 1024 kilobajty w megabajcie = 0,97 megabajta na sekundę * 8 = 7,8 megabitów/sekundę.
Tego rodzaju przepustowość jest już dziś powszechna nawet dla połączeń domowych, i z pewnością jest na niskim poziomie tego, co dostawcy kolokacji oczekiwaliby od Ciebie.
Gdy bloki są rozwiązywane, obecny protokół wysyła transakcje ponownie, nawet jeśli rówieśnik już je widział w czasie nadawania. Naprawiając to, aby bloki były tylko listą hashy, rozwiązałoby to problem i sprawiłoby, że przepustowość potrzebna do transmisji bloków byłaby pomijalna. Tak więc, chociaż ta optymalizacja nie jest w pełni zaimplementowana dzisiaj, nie bierzemy tutaj pod uwagę przepustowości transmisji bloków.
Przechowywanie
Przy bardzo wysokich prędkościach transakcji każdy blok może mieć rozmiar ponad pół gigabajta.
W przypadku większości w pełni walidujących węzłów nie jest wymagane przechowywanie całego łańcucha. W artykule Satoshi opisuje „przycinanie”, sposób na usuwanie niepotrzebnych danych o transakcjach, które są w pełni wydane. Zmniejsza to ilość danych potrzebnych dla w pełni walidującego węzła do rozmiaru bieżącego niewydanego rozmiaru wyjściowego, plus kilka dodatkowych danych, które są potrzebne do obsługi re-orgs. Od października 2012 (blok 203258) było 7 979 231 transakcji, jednak rozmiar niewydanego zestawu wyjściowego jest mniejszy niż 100MiB, co jest wystarczająco małe, aby łatwo zmieścić się w pamięci RAM nawet dość starych komputerów.
Tylko niewielka liczba węzłów archiwalnych musi przechowywać pełny łańcuch sięgający wstecz do bloku genezy. Węzły te mogą być używane do uruchamiania nowych, w pełni walidujących węzłów od zera, ale poza tym są niepotrzebne.
Głównym czynnikiem ograniczającym wydajność Bitcoina są poszukiwania na dyskach, gdy zestaw danych wyjściowych z niewydanych transakcji przestanie mieścić się w pamięci. Gdy dyski twarde zostaną wycofane na rzecz dysków SSD, jest całkiem możliwe, że dostęp do zbioru UTXO nigdy nie stanie się poważnym wąskim gardłem.
Optymalizacje
Powyższy opis dotyczy obecnego oprogramowania z założonymi tylko drobnymi optymalizacjami (typu, które mogą być i były wykonane przez jednego człowieka w kilka tygodni).
Jednakże istnieje potencjał do jeszcze większych optymalizacji w przyszłości, kosztem pewnej dodatkowej złożoności.
CPU
Istnieją algorytmy przyspieszające weryfikację wsadową podpisów na krzywych eliptycznych. Możliwe jest sprawdzenie ich podpisów jednocześnie dla 2x szybszego działania. Jest to nieco bardziej złożona implementacja.
Uproszczona weryfikacja płatności
Możliwe jest zbudowanie implementacji Bitcoin, która nie weryfikuje wszystkiego, ale zamiast tego polega na połączeniu się z zaufanym węzłem, lub pokłada wiarę w wysoką trudność jako proxy dla dowodu ważności. bitcoinj jest implementacją tego trybu.
W trybie uproszczonej weryfikacji płatności (Simplified Payment Verification, SPV), nazwanym tak od sekcji dokumentu Satoshiego, która go opisuje, klienci łączą się z dowolnym, pełnym węzłem i pobierają tylko nagłówki bloków. Sprawdzają, czy nagłówki łańcucha łączą się ze sobą poprawnie i czy poziom trudności jest wystarczająco wysoki. Następnie żądają od zdalnego węzła transakcji pasujących do określonych wzorców (np. płatności na wasze adresy), który dostarcza kopie tych transakcji wraz z gałęzią Merkle’a łączącą je z blokiem, w którym się pojawiły. Wykorzystuje to strukturę drzewa Merkle, aby umożliwić dowód włączenia bez konieczności posiadania pełnej zawartości bloku.
Jako dalsza optymalizacja, nagłówki bloków, które są zakopane wystarczająco głęboko, mogą zostać wyrzucone po pewnym czasie (np. naprawdę potrzebujesz przechowywać tylko tak niskie nagłówki jak 2016).
Poziom trudności wymagany do uzyskania pewności, że zdalny węzeł nie karmi cię fikcyjnymi transakcjami, zależy od twojego modelu zagrożenia. Jeśli łączysz się z węzłem, o którym wiadomo, że jest niezawodny, trudność nie ma znaczenia. Jeśli chcesz wybrać losowy węzeł, koszt wydobycia przez atakującego sekwencji bloków zawierającej fałszywą transakcję powinien być wyższy niż wartość, jaką można uzyskać, oszukując Cię. Zmieniając to, jak głęboko musi być zakopany blok, możesz przehandlować czas potwierdzenia vs koszt ataku.
Programy implementujące to podejście mogą mieć stały narzut pamięci/sieci w zerowym przypadku braku użycia, oraz wykorzystanie zasobów proporcjonalne do otrzymanych/wysłanych transakcji.
Zobacz także: Thin Client Security.
Powiązane prace
Istnieje kilka propozycji optymalizacji skalowalności Bitcoina. Niektóre z nich wymagają alt-chain / hard fork.
- Ultimate blockchain compression – pomysł, że blockchain może być skompresowany, aby osiągnąć „trust-free lite nodes”
- The Finite Blockchain paper, który opisuje podział blockchain na trzy struktury danych, z których każda lepiej nadaje się do swojego celu. Te trzy struktury danych to skończony blockchain (przechowujący N bloków w przeszłości), „drzewo kont”, które przechowuje stan konta dla każdego adresu z niezerowym saldem, oraz „łańcuch dowodów”, który jest (stale rosnącą) odchudzoną wersją blockchaina.
- Lightning Network, alternatywny protokół rozliczania transakcji, w którym węzły tworzą między sobą kanały mikropłatności i od czasu do czasu rozliczają się na łańcuchu bloków. Zwykli użytkownicy wchodzą w interakcje przede wszystkim lub tylko z kanałami płatności i używają blockchaina tylko do dużych transferów i zimnego przechowywania.
.