Zapowiedź nowego portfela MultiChain PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Przedstawiamy nowy portfel MultiChain

Ważny krok naprzód w zakresie wydajności i skalowalności

Po dwóch miesiącach intensywnego rozwoju i testów, z dumą udostępniamy najnowszą wersję alfa MultiChain z całkowicie przepisanym portfelem w węźle. Ten nowy portfel zmienia wydajność i skalowalność tworzenia, odbierania i przechowywania transakcji w MultiChain.

Zanim przejdziemy do szczegółów, przedstawię kontekst. Kiedy zaczynaliśmy tworzyć MultiChain, zdecydowaliśmy się na użycie Bitcoin Core, standardowy węzeł publicznej sieci bitcoin, jako punkt wyjścia. Z punktu widzenia programowania oznacza to, że MultiChain jest „rozwidleniem” oprogramowania bitcoin. Nasze podstawowe rozumowanie było takie, że bitcoin był (i nadal jest) najbardziej wartościowym i najbardziej przetestowanym w bitwach ekosystemem kryptowalut.

Z drugiej strony, ta decyzja pomogła nam szybko wejść na rynek w porównaniu do kodowania węzła blockchain od zera. Pomimo wielu różnic między publicznymi i prywatnymi łańcuchami bloków, mają one wiele wspólnych technicznych podstaw, w tym protokół peer-to-peer, struktura transakcji i bloków, tworzenie i weryfikacja podpisów cyfrowych, reguły konsensusu, zarządzanie kluczami i potrzeba API węzła. Rozwidlenie z Bitcoin Core pozwoliło nam wykorzystać jego dojrzałość i skupić się na tym, co MultiChain dodaje do łańcuchów bloków - konfigurowalności, zezwoleniach i natywnej obsłudze zasobów. W rezultacie mogliśmy wypuścić pierwszą alfę w czerwcu 2015 roku, zaledwie 6 miesięcy po rozpoczęciu rozwoju.

Jednak oprócz tych korzyści musieliśmy również zaakceptować fakt, że niektóre aspekty Bitcoin Core są źle zaprojektowane. Chociaż działają dobrze w małych skalach, ich wydajność dramatycznie spada wraz ze wzrostem użycia. Ponieważ publiczna sieć bitcoin jest nadal ograniczona do kilku transakcji na sekundę, nie będzie to problem dla większości użytkowników Bitcoin Core przez długi czas. Jednak w przypadku prywatnych łańcuchów bloków, których celem było dokonywanie setek lub tysięcy transakcji na sekundę, wiedzieliśmy, że wcześniej czy później te wąskie gardła będą musiały zostać usunięte.

Portfel Bitcoin Core

„Portfel” w ramach Bitcoin Core był zawsze najważniejszym z tych problemów. Jego zadaniem jest przechowywanie transakcji, które są szczególnie istotne dla węzła, ponieważ dotyczą adresu łańcucha bloków, którego jest właścicielem lub „tylko do oglądania”Adres, którego aktywność śledzi. Na przykład każda transakcja, która wysyła środki do lub z węzła, musi być przechowywana w portfelu tego węzła. Za każdym razem, gdy węzeł tworzy transakcję, musi szukać co najmniej jednego „niewydanego wyniku” poprzednich transakcji portfela, które wyda nowa transakcja.

Więc co jest nie tak z portfelem, który odziedziczyliśmy po Bitcoin Core? Właściwie trzy rzeczy:

  • Wszystkie transakcje w portfelu są przechowywane w pamięci. Powoduje to długi czas uruchamiania i gwałtownie zwiększające się zużycie pamięci.
  • Wiele operacji wykonuje nieefektywne „pełne skanowanie” każdej transakcji w portfelu, zarówno starej, jak i nowej.
  • Każda transakcja w portfelu jest przechowywana w całości, łącznie z dowolnymi „metadanymi”, które nie mają znaczenia z punktu widzenia węzła i są już zapisane w łańcuchu bloków na dysku. To bardzo marnotrawne.

Konsekwencją jest to, że przy około 20,000 przechowywanych transakcjach portfel Bitcoin Core znacznie zwalnia. Po mniej więcej 200,000 8 praktycznie się zatrzymuje. Co gorsza, ponieważ łańcuch bloków MultiChain pozwala na do 80 MB metadanych na transakcję (w porównaniu do XNUMX bajtów bitcoina), wymagania dotyczące pamięci portfela mogą gwałtownie wzrosnąć nawet przy niewielkiej liczbie transakcji.

Ważne jest, aby wyjaśnić, że te niedociągnięcia dotyczą tylko Bitcoin Core portfelzamiast ogólnej zdolności przetwarzania transakcji. Innymi słowy, może wygodnie przetwarzać i przechowywać miliony (lub nawet miliardy) transakcji, które nie odnoszą się do jego własnych adresów, ponieważ są one przechowywane na dysku, a nie w pamięci. Na przykład wiele popularnych giełd bitcoinów i portfeli używa Bitcoin Core w stanie takim, w jakim jest, ale przechowują własne transakcje na zewnątrz, a nie wewnątrz węzła.

Nowy portfel MultiChain

Mogliśmy postawić to samo żądanie użytkownikom MultiChain, aby przechowywać własne transakcje poza węzłem. Jednak nie wydawało się to odpowiednim rozwiązaniem, ponieważ znacznie skomplikowałoby konfigurację i konserwację dla każdego z uczestników łańcucha. Więc zamiast tego ugryzliśmy kulę i przepisaliśmy portfel od podstaw.

Czym różni się nowy portfel? Jeśli masz jakieś doświadczenie z bazami danych, odpowiedzi mogą być oczywiste:

  • Zamiast przechowywać transakcje portfela w pamięci, są one przechowywane na dysku w odpowiednim formacie, a transakcje będące przedmiotem zainteresowania są w razie potrzeby pobierane.
  • Zamiast przeprowadzać pełne skanowanie portfela, transakcje są „indeksowane” na różne sposoby, aby umożliwić szybką lokalizację tych, które spełniają określone kryteria.
  • Żadne metadane transakcji, które są większe niż 256 bajtów, nie są przechowywane w portfelu. Zamiast tego portfel zawiera wskaźnik do pozycji tych metadanych w samym łańcuchu bloków.

Innymi słowy, przebudowaliśmy portfel w węźle, aby był odpowiednio oparty na bazie danych (używając Poziom DB), zamiast polegać na naiwnej strukturze w pamięci, której nie można skutecznie przeszukiwać. Nic dziwnego, że różnica (mierzona na 3.4 GHz Intel Core i7) jest raczej dramatyczna:

Przepustowość transakcji portfela MultiChain

Użycie pamięci

Wykresy pokazują, że gdy stary portfel zawiera 250,000 3 transakcji, jego szybkość wysyłania spada do 600 tx / s i zwiększa zużycie pamięci węzła o 100 MB. Dla porównania, nowy portfel wytrzymuje ponad 90 tx / s i dodaje tylko 6 MB. W tym momencie przestaliśmy testować stary portfel, ale nawet przy 8-100 milionach zapisanych transakcji nowy portfel nadal wysyła ponad 250 tx / s, a jego pojemność wynosi około XNUMX MB pamięci RAM (z powodu buforowania bazy danych).

Testy te przeprowadzono w realistycznych warunkach, z wieloma adresami i zasobami (a zatem wieloma niewydanymi wynikami transakcji) w portfelu węzła. W wyidealizowanym scenariuszu (jeden adres, jeden zasób, kilka UTXO), trwała szybkość wysyłania wynosiła ponad 400 tx / s. Tak czy inaczej, w ramach tego przepisania, właściwie wyodrębniliśmy również wszystkie funkcje portfela za czystym wewnętrznym interfejsem. Ułatwi to obsługę innych silników baz danych w przyszłości, zapewniając jeszcze większą niezawodność i szybkość.

Powtarzam, wszystkie te liczby odnoszą się do szybkości, z jaką węzeł może tworzyć, wysyłać i przechowywać transakcje w swoim portfelu lokalnym, a nie do przepustowości w zakresie przetwarzania transakcji utworzonych przez innych. W przypadku ogólnej przepustowości sieci MultiChain może obecnie przetwarzać od 200 do 800 tx / s, w zależności od sprzętu, na którym działa. (Bądź sceptyczny wobec jakiegokolwiek oprogramowania blockchain obiecującego liczby, takie jak 100,000 XNUMX tx / s na zwykłym sprzęcie, ponieważ wąskim gardłem jest weryfikacja podpisu cyfrowego, której wykonanie zajmuje czas rzeczywisty. Jeśli węzły nie weryfikują poszczególnych podpisów transakcji, łańcuch bloków nie może być używany w ramach zaufania granice, dzięki czemu nie jest lepsze niż zwykła rozproszona baza danych).

Na koniec chciałbym wspomnieć o kolejnej ważnej funkcji pojawiającej się w MultiChain, która wymagała przepisania tego portfela. Ta funkcja, zwana strumieniami, zapewnia abstrakcję wysokiego poziomu i API do przechowywania danych ogólnego przeznaczenia w łańcuchu bloków. Możesz myśleć o strumieniu jako o szeregach czasowych lub bazach danych z kluczami-wartościami, z dodatkowymi korzyściami związanymi z łańcuchem bloków w postaci decentralizacji, podpisów cyfrowych, znaczników czasu i niezmienności. Znamy wiele przypadków użycia blockchain, które mogłyby korzystać z tej funkcji i już ciężko pracujemy nad jej zbudowaniem. Patrz na przestrzeń.

Prosimy o umieszczanie komentarzy na LinkedIn.

Dodatek techniczny

Począwszy od MultiChain alpha 22, możesz sprawdzić, która wersja portfela jest aktualnie uruchomiona, sprawdzając plik walletdbversion pole getinfo or getwalletinfo Wywołania API. Wartość 1 oznacza oryginalny portfel Bitcoin Core, a 2 oznacza nowy portfel MultiChain.

Jeśli uruchomisz nową wersję MultiChain na istniejącym łańcuchu, nie przełączy się on od razu na nowy portfel. Możesz ulepszyć portfel, zatrzymując węzeł, a następnie uruchamiając go ponownie multichaind z parametrami -walletdbversion=2 –rescan. Możesz podobnie obniżyć wersję za pomocą –walletdbversion=1 –rescan.

Domyślnie, po uruchomieniu węzła w nowym łańcuchu, automatycznie użyje on nowego portfela. Możesz to zmienić, uruchamiając multichaind po raz pierwszy za pomocą parametru –walletdbversion=1.

Z nowym portfelem wszystko Interfejsy API MultiChain działają dokładnie tak samo jak poprzednio, z wyjątkiem starych interfejsów API zapytań o transakcje getreceivedbyaddress, listreceivedbyaddress i listtransactions (posługiwać się listwallettransactions or listaddresstransactions zamiast). Ponadto nowy portfel nie obsługuje wywołań API i parametrów związanych ze słabo zaimplementowanym i wkrótce przestarzałym mechanizmem „kont” Bitcoin Core, który nigdy nie był właściwie obsługiwany przez MultiChain. Te połączenia są bezpiecznie wyłączane z komunikatem o błędzie.

Źródło: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Znak czasu:

Więcej z Multichain