Czym jest „mempool Bitcoina”? Jak działa? Co stanie się gdy osiągnie maksymalny rozmiar?

Sieć Bitcoina, to w jaki sposób działa oraz dochodzi do konsensusu jest prawdziwym majstersztykiem. Oczywiście, bez kilku podstawowych mechanizmów jej funkcjonowanie nie byłoby możliwe. Jednym z nich jest omawiany mempool. Jeżeli spojrzymy na tytuł artykułu, stricte od strony technicznej, znajdziemy w nim błąd. Jaki? O tym oraz o mempoolu w dalszej części tekstu.

Czym jest mempool?

Z punktu widzenia typowego posiadacza Bitcoinowego portfela, każda transakcja ma swój początek właśnie tutaj. Ale co się z nią dalej dzieje? W dalszej części tekstu postaram się, w prostych słowach opisać bardzo istotny obszar w sieci BTC, jakim jest mempool.

Każda transakcja w sieci zanim trafi do górnika jest rozgłaszana pomiędzy węzłami. Mempool to mechanizm węzła, służący do przechowywania informacji o transakcjach, na podstawie których mogą zostać przekazane do bloku lub odrzucone.

Od strony technicznej, sformułowanie „mempool Bitcoina” nie ma racji bytu, ponieważ mempool odnosi się do węzłów. Idąc tym tropem, uzasadnione jest używanie określenia: mempool węzła. Co więcej, ilość mempooli jest równoznaczna z ilością nodów w sieci Bitcoin.

Ze względu na rozproszony charakter sieci BTC, nie wszystkie węzły otrzymują te same transakcje w tym samym czasie, więc niektóre węzły przechowują więcej transakcji w mempoolu niż inne w danym momencie. Standardowa pojemność mempoola wynosi 300 MB. Ponieważ każdy może uruchomić swój własny węzeł, wszystkie węzły mają inną pojemność pamięci RAM (w zależności od sprzętu) do przechowywania niepotwierdzonych transakcji. W rezultacie każdy węzeł ma własne odwzorowanie oczekujących transakcji, co wyjaśnia różnorodność rozmiarów i liczby transakcji mempool znajdujących się w różnych źródłach.

Minimalne wymagania do uruchomienia pełnego węzła:

  • system operacyjny Windows, Mac OS X lub Linux
  • 200 gigabajtów wolnego miejsca na dysku, dostępne przy minimalnej prędkości odczytu/zapisu 100 MB/s
  • 2 GB RAM
  • szybkie łącze internetowe, najlepiej bez limitów ze względu na dużą ilość danych pobieranych/odbieranych

W jaki sposób działa mempool?

Pierwszym przystankiem każdej transakcji, zaraz po opuszczeniu portfela są węzły. Przed rejestracją Tx w mempool, każdy z nich wykonuje ściśle określoną serię kontroli poprawności:

  • sprawdza poprawność składniową;
  • upewnia się czy listy wyjściowe/wyjściowe nie są puste, rożne od 0;
  • rozmiar w bajtach <MAX_BLOCK_SIZE>;
  • upewnia się, że żadne z danych wejściowych nie mają hash=0, n=-1 (tzw. coinbase transaction, specjalny typ transakcji, tworzony tylko i wyłącznie przez górników);
  • sprawdza, czy nLockTime <= INT_MAX, rozmiar w bajtach> = 100 i sig opcount <= 2 – parametr ten, określa minimalny czas (przedstawiony w czasie unixowym lub wysokości bloku),  przed którym transakcja nie może zostać zaakceptowana w bloku;
  • odrzuca „niestandardowe transakcje”;
  • wyklucza identyczne transakcje porównując obecną pulę oraz Tx z zatwierdzonych bloków;
  • dla każdego wejścia sprawdza główną gałąź i pulę transakcji, aby znaleźć referencyjną transakcję wyjściową. Jeśli dla danych wejściowych brakuje transakcji wyjściowej, będzie to transakcja osierocona. Następnie dodaje do transakcji osieroconych, jeśli pasująca transakcja jeszcze nie istnieje;
  • dla każdego wejścia, jeśli referencyjne wyjście nie istnieje (np. nigdy nie istniało lub nie zostało już wydane), odrzuca tę transakcję;
  • korzystając z referencyjnych transakcji wyjściowych, aby uzyskać wartości wejściowe, sprawdza, czy każda wartość wejściowa, a także ich suma, znajdują się w dopuszczalnym zakresie pieniężnym;
  • odrzuca, jeśli suma wartości wejściowych < suma wartości wyjściowych;
  • odrzuca, jeśli opłata transakcyjna (zdefiniowana jako suma wartości wejściowych minus suma wartości wyjściowych) byłaby zbyt niska, aby dostać się do pustego bloku;
  • sprawdza, czy skryptPubKey akceptuje dla każdego wejścia; odrzuć, jeśli jakieś są złe;
  • dodaje do mempoola;
  • “Add to wallet if mine”;
  • przekazuje transakcji do peerów.

Jeśli transakcja spełnia powyższe kryteria, jest „wpuszczana” do mempoola i węzeł zaczyna ją rozgłaszać. Jeśli nie, transakcja nie jest ponownie rozgłaszana przez węzeł.

„Zapchany mempool” w sieci Bitcoina

Jak już wypominałem wcześniej, każdy węzeł ma prawo do ustalenia maksymalnej pojemności. Standardową wartością jest 300 MB (większość obecnych węzłów). W tym miejscu warto wspomnieć, że limit pamięci nie dotyczy danych, które są zapisane w bloku i są wyświetlane w mempoolu.

Wielkość zużycia pamięci zależy od platformy. W momencie osiągnięcia określonego limitu, transakcje z najniższą wniesioną opłatą (fee dla górników) zostaną porzucone. Kolejnym krokiem jest zwiększenie progu wejścia, poprzez podniesienie wartości parametru minMempoolFeeRate. 

Następne transakcje, które będą chciały dostać się do mempool, muszą ten warunek spełniać, czyli:

fee Twojej transakcji > minMempoolFeeRate

Po dostosowaniu parametru minMempoolFeeRate i odrzuceniu transakcji (zwolnieniu miejsca), węzeł przekazuje…

button

Leave a comment

Mój Newsletter

Zapisz się i nie przegap interesujących Cię treści