Trend blockchainowy nadal nabiera tempa. Coraz więcej ekspertów przewiduje powszechne wdrożenie tej technologii w niedalekiej przyszłości. Na ten moment pozostaje kilka nierozwiązanych problemów, które temu przeszkadzają.
Przede wszystkim nowoczesne systemy blockchain słabo skalują się. Na przykład przepustowość Ethereum wynosi zaledwie 20 transakcji na sekundę i mimo licznych zalet, nie nadaje się dla dużego biznesu.
Jednocześnie, Ethereum cenione jest za silną ochronę przed atakami i awariami sieci. Dlatego nie należy go skreślać. Warto raczej poprawić wady Ethereum i przekształcić je w zalety.

Plasma Cash jako rozwiązanie dla prywatności i skalowalności w Ethereum
Plasma – technologia zaprezentowana przez Vitalika Buterina, współzałożyciela projektu Ethereum, na konferencji EthCC w Paryżu w 2018 roku. Została opracowana wspólnie z Joseph'em Poonem, współzałożycielem Lightning Network, i ogłoszona jako rozwiązanie zwiększające moc obliczeniową blockchaina Ethereum. Pierwsze wiadomości o Plazmie wyciekły do mediów w 2017 roku.
Platforma ta stanowi zewnętrzny poziom inteligentnych kontraktów, które mogą współdziałać z głównym blockchainem, odciążając tym samym główny łańcuch i zmniejszając opłaty transakcyjne za inteligentne kontrakty oraz zdecentralizowane aplikacje (DApps).
Szczegółowe informacje na temat rozwijania zostały przedstawione w dokumencie „”, datowanym na sierpień 2017 roku.
Buterin przyznał, że Plasma ma własne problemy ze skalowalnością: każdy użytkownik musi ładować i weryfikować autentyczność każdego bloku Plasma, co uniemożliwia eksponencjalną skalowalność.
Aby rozwiązać ten problem, stworzono Plasma Cash — podłańcuch składający się z inteligentnego kontraktu i prywatnej sieci opartej na Node.js, która okresowo przesyła swoje stany do głównego łańcucha (Ethereum). Zapewnia ona decentralizację, bezpieczeństwo i skalowalność w blockchainie, rozwiązując w ten sposób Trójproblem Skalowalności.
Istotną zaletą Plasma Cash w porównaniu do Plazmy jest to, że przyciąga uwagę użytkowników tylko do tych bloków, które zawierają interesujące ich monety:
„Teraz użytkownicy muszą sprawdzać dostępność i poprawność łańcucha Plasma tylko dla specjalnego indeksu związane z monetami, które chcą wydać, którymi dysponują oraz które ich interesują” – powiedział Buterin.
Według deweloperów Plasma Cash jest skutecznym lekarstwem na włamania w Ethereum. Każda moneta Plasma ma swojego właściciela i jest unikalna. Nikt nie może przejąć monet innego użytkownika bez jego wiedzy. Posiadacz monety może zapobiec potencjalnemu oszustwu poprzez system „skarg”, przedstawiając swoje „dane dowodowe” w historii swojej monety.
Testowanie Plasma Cash w Mongo Atlas
Z powodu swojej nowości, Plasma Cash pozostaje do tej pory mało zbadana. Specjaliści od blockchaina aktywnie testują jej interakcje z różnymi usługami chmurowymi i bazami danych, rejestrują wady oraz znajdują metody ich naprawy. W szczególności testy w Mongo Atlas ujawniły następujące zalety w pracy z Plasma:
- Niezawodna ochrona przed utratą danych, ponieważ kilka replik synchronizujących się ze sobą w klastrze.
- Szybki dostęp, ponieważ klaster można zbudować na trzech najpopularniejszych platformach chmurowych: Amazon, Google, Azure. W rezultacie, węzeł Plasma Cash można wdrożyć w wielu centrach danych, które znajdują się blisko Mongo Atlas. Udało nam się udowodnić, że prędkość znacznie nie spada, nawet jeśli węzły Plasma wdrażane są w bardziej odległych centrach danych.
- Węzły Plasma, używane tylko w trybie odczytu, mogą być podłączone do jednego klastra Mongo i znajdować się w różnych częściach świata, co poprawia geo-skalowalność (węzły są bliżej użytkowników).
- Wdrożenie nowego węzła jest łatwe, ponieważ nie trzeba synchronizować wszystkiego od nowa. Można po prostu podłączyć się do istniejącego klastra Mongo lub szybko zrobić kopię i skonfigurować połączenie.
- Skalowanie bazy danych jest łatwe. Z biegiem czasu danych przybywa, a rozmiar węzłów w klastrze można zwiększać według potrzeb.

Użyliśmy następujących serwerów do przeprowadzenia testów:
- 3 wirtualne serwery Azure Standard E4s v3 (4 vcpus, 32 GiB pamięci). Na każdym serwerze uruchomiono 3 węzły. Jeden z nich może submitować bloki do głównego łańcucha.
- Każdy węzeł jest podłączony do swojego klastra Mongo Atlas M50, który zawiera 3 węzły w trybie replikacji.
Test 1
3 węzły otrzymują po 100k transakcji. W sumie, we wszystkich 9 węzłach znajduje się 300k transakcji i tokenów.

Stan początkowy: ostatni blok #213; w bazie zapisano 0 transakcji i tokenów.
00:00 — Uruchomiono 3 skrypty, które generują i wysyłają po 100k transakcji
00:29 — Rozpoczęto wysyłanie po 100k transakcji do węzłów #1 i #2
00:32 — Rozpoczęto wysyłanie 100k transakcji do węzła #3
00:32 — Węzeł #1 pobrał z puli 11703 transakcji i formuje blok #214 (9fb)
00:34 — Węzeł #2 pobrał z puli 27088 transakcji i formuje blok #214 (ef4)
00:34 — Blok #214 (9fb) podpisany i wysyłany do innych węzłów w celu walidacji
00:36 — Węzeł #3 pobrał z puli 11900 transakcji i formuje blok #214 (983)
00:37 — Blok #214 (9fb) zwalidowany i wysłany do głównego łańcucha
00:38 — Blok #214 (983) podpisany i wysyłany do innych węzłów w celu walidacji
00:38 — Blok #214 (ef4) podpisany i wysyłany do innych węzłów w celu walidacji
00:40 — Blok #214 (983) zwalidowany i wysłany do głównego łańcucha
00:41 — Wszystkie węzły otrzymały z głównego łańcucha informację, że blok #214 (9fb) został dodany i zaczynają stosować 11703 transakcji
00:45 — Wszystkie węzły otrzymały z głównego łańcucha informację, że blok #215 (983) został dodany i zaczynają stosować 11900 transakcji
00:51 — Blok #214 (ef4) zwalidowany i wysłany do głównego łańcucha
00:52 — Węzeł #1 pobrał z puli 51469 transakcji i formuje blok #216 (ea0)
00:56 — Węzeł #3 pobrał z puli 55102 transakcji i formuje blok #216 (f75)
00:58 — Skrypt demo zakończył swoją pracę dla węzła #2
00:58 — Blok #216 (ea0) podpisany i wysyłany do innych węzłów w celu walidacji
00:58 — Wszystkie węzły otrzymały z głównego łańcucha informację, że blok #216 (ef4) został dodany i zaczynają stosować 27088 transakcji
01:04 — Blok #216 (f75) podpisany i wysyłany do innych węzłów w celu walidacji
01:14 — Węzeł #2 pobrał z puli 72912 transakcji i formuje blok #217 (f85)
01:15 — Skrypt demo zakończył swoją pracę dla węzła #1 i #2
01:17 — Bloki #216 (f75) i #216 (ea0) zwalidowane i wysłane do głównego łańcucha
01:21 — Blok #217 (f85) podpisany i wysyłany do innych węzłów w celu walidacji
01:26 — Bloki #217 (f75) i #218 (ea0) dodane do głównego łańcucha i węzły zaczynają stosować 51469 i 55102 transakcji odpowiednio
01:27 — Blok #217 (a85) zwalidowany i wysłany do głównego łańcucha
01:41 — Węzeł #1 pobrał z puli 36828 transakcji i formuje blok #219 (46f)
01:41 — Węzeł #3 pobrał z puli 32998 transakcji i formuje blok #219 (bb3)
01:43 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #219 (a85) został dodany i zaczynają przetwarzać 72912 transakcji
01:46 — Blok #219 (46f) został podpisany i wysyłany do innych węzłów do walidacji
01:46 — Blok #219 (bb3) został podpisany i wysyłany do innych węzłów do walidacji
01:53 — Węzeł #2 przetworzył wszystkie 100k transakcji, które były w puli
02:37 — Blok #219 (bb3) został zwalidowany i wysłany do łańcucha głównego
02:41 — Blok #219 (46f) został zwalidowany i wysłany do łańcucha głównego
02:48 — Bloki #220 (bb3) i #221 (46f) zostały dodane do łańcucha głównego, a węzły zaczynają przetwarzać odpowiednio 32998 i 36828 transakcji
02:54 — Węzeł #1 przetworzył wszystkie 100k transakcji, które były w puli
02:55 — Węzeł #3 przetworzył wszystkie 100k transakcji, które były w puli
04:12 — Wszystkie węzły zawierają po 300k transakcji i tokenów ostatni blok #221
Test 2
3 węzły otrzymują po 1kk transakcji. W sumie we wszystkich 9 węzłach znajduje się 3kk transakcji i tokenów.

Stan początkowy: ostatni blok #213; w bazie zapisano 0 transakcji i tokenów.
00:00 — Uruchomiono 3 skrypty, które generują i wysyłają po 1kk transakcji
02:29 — Rozpoczęto wysyłanie po 1kk transakcji do węzłów #1 i #2
02:33 — Węzeł #1 wziął z puli 11668 transakcji i formuje blok #222 (510)
02:35 — Blok #222 (510) został podpisany i wysyłany do innych węzłów do walidacji
02:37 — Blok #222 (510) został zwalidowany i wysłany do łańcucha głównego
02:38 — Węzeł #2 wziął z puli 46378 transakcji i formuje blok #222 (a9d)
02:38 — Rozpoczęto wysyłanie 1kk transakcji do węzła #3
02:41 — Węzeł #3 wziął z puli 5504 transakcji i formuje blok #222 (387)
02:42 — Blok #222 (387) został podpisany i wysyłany do innych węzłów do walidacji
02:44 — Blok #222 (a9d) został podpisany i wysyłany do innych węzłów do walidacji
02:44 — Blok #222 (387) został zwalidowany i wysłany do łańcucha głównego
02:49 — Blok #222 (a9d) został zwalidowany i wysłany do łańcucha głównego
02:56 — Bloki #222 (510) #223 (387) i #224 (a9d) zostały dodane do łańcucha głównego, a węzły zaczynają przetwarzać odpowiednio 11668, 5504 i 46378 transakcji
03:09 — Węzeł #1 wziął z puli 177170 transakcji i formuje blok #225 (e50)
03:09 — Węzeł #3 wziął z puli 119327 transakcji i formuje blok #225 (ccc)
03:10 — Węzeł #2 wziął z puli 149772 transakcji i formuje blok #225 (404)
03:26 — Blok #225 (ccc) został podpisany i wysyłany do innych węzłów do walidacji
03:32 — Blok #225 (404) został podpisany i wysyłany do innych węzłów do walidacji
03:33 — Blok #225 (e50) został podpisany i wysyłany do innych węzłów do walidacji
03:53 — Blok #225 (ccc) został zwalidowany i wysłany do łańcucha głównego
04:03 — Blok #225 (e50) został zweryfikowany i wysłany do łańcucha głównego
04:04 — Blok #225 (404) został zweryfikowany i wysłany do łańcucha głównego
04:06 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #225 (ccc) został dodany i zaczynają stosować 119327 transakcji
04:14 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #226 (404) został dodany i zaczynają stosować 149772 transakcji
04:16 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #227 (e50) został dodany i zaczynają stosować 177170 transakcji
04:32 — Węzeł #3 pobrał z puli 209436 transakcji i formuje blok #228 (1e9)
04:40 — Węzeł #2 pobrał z puli 212669 transakcji i formuje blok #228 (e38)
04:40 — Węzeł #1 pobrał z puli 190144 transakcji i formuje blok #228 (861)
05:02 — Blok #228 (1e9) został podpisany i wysyłany do innych węzłów na weryfikację
05:08 — Blok #228 (861) został podpisany i wysyłany do innych węzłów na weryfikację
05:10 — Blok #228 (e38) został podpisany i wysyłany do innych węzłów na weryfikację
06:13 — Blok #228 (1e9) został zweryfikowany i wysłany do łańcucha głównego
06:13 — Blok #228 (861) został zweryfikowany i wysłany do łańcucha głównego
06:13 — Blok #228 (e38) został zweryfikowany i wysłany do łańcucha głównego
06:39 — Bloki #228 (861) #229 (1e9) i #230 (e38) zostały dodane do łańcucha głównego, a węzły zaczynają stosować odpowiednio 190144, 209436 i 212669 transakcji
07:07 — Węzeł #1 pobrał z puli 199770 transakcji i formuje blok #231 (e04)
07:09 — Węzeł #2 pobrał z puli 190473 transakcji i formuje blok #231 (36e)
07:09 — Węzeł #3 pobrał z puli 178807 transakcji i formuje blok #231 (f43)
07:34 — Blok #231 (e04) został podpisany i wysyłany do innych węzłów na weryfikację
07:37 — Blok #231 (36e) został podpisany i wysyłany do innych węzłów na weryfikację
07:37 — Blok #231 (f43) został podpisany i wysyłany do innych węzłów na weryfikację
08:49 — Blok #231 (e04) został zweryfikowany i wysłany do łańcucha głównego
08:51 — Blok #231 (f43) został zweryfikowany i wysłany do łańcucha głównego
08:52 — Blok #231 (36e) został zweryfikowany i wysłany do łańcucha głównego
09:47 — Bloki #231 (e04) #232 (f43) i #233 (36e) zostały dodane do łańcucha głównego, a węzły zaczynają stosować odpowiednio 199770, 178807 i 190473 transakcji
10:16 — Węzeł #1 pobrał z puli 153075 transakcji i formuje blok #234 (e04)
10:16 — Węzeł #2 pobrał z puli 168035 transakcji i formuje blok #234 (36e)
10:16 — Węzeł #3 pobrał z puli 166685 transakcji i formuje blok #234 (f43)
10:42 — Blok #234 (56d) został podpisany i wysyłany do innych węzłów na weryfikację
11:59 — Blok #234 (1bb) został zwalidowany i wysłany do głównego łańcucha
12:02 — Blok #234 (58a) został zwalidowany i wysłany do głównego łańcucha
12:02 — Blok #234 (56d) został zwalidowany i wysłany do głównego łańcucha
12:48 — Bloki #234 (1bb), #235 (58a) i #236 (56d) zostały dodane do głównego łańcucha, a węzły zaczynają przetwarzać odpowiednio 153075, 168035 i 166685 transakcji
13:14 — Węzeł #1 pobrał z puli 112226 transakcji i formuje blok #237 (5c0)
13:16 — Węzeł #2 pobrał z puli 87550 transakcji i formuje blok #234 (58a)
13:16 — Węzeł #3 pobrał z puli 99594 transakcji i formuje blok #234 (56d)
13:30 — Blok #237 (5c0) został podpisany i wysyłany do innych węzłów do walidacji
13:32 — Blok #237 (58a) został podpisany i wysyłany do innych węzłów do walidacji
13:34 — Blok #237 (56d) został podpisany i wysyłany do innych węzłów do walidacji
14:47 — Blok #237 (58a) został zwalidowany i wysłany do głównego łańcucha
14:53 — Blok #237 (5c0) nie został zwalidowany w wyznaczonym czasie
14:53 — Wszystkie węzły otrzymały z głównego łańcucha informacje, że blok #237 (58a) został dodany i zaczynają przetwarzać 87550 transakcji
14:54 — Blok #237 (56d) został zwalidowany i wysłany do głównego łańcucha
15:02 — Węzeł #1 pobrał z puli 181206 transakcji i formuje blok #238 (c5f)
15:06 — Wszystkie węzły otrzymały z głównego łańcucha informacje, że blok #238 (56d) został dodany i zaczynają przetwarzać 99594 transakcji
15:12 — Węzeł #2 pobrał z puli 51990 transakcji i formuje blok #239 (ad8)
15:20 — Blok #239 (ad8) został podpisany i wysyłany do innych węzłów do walidacji
15:25 — Węzeł #3 pobrał z puli 46685 transakcji i formuje blok #239 (857)
15:30 — Blok #238 (c5f) został podpisany i wysyłany do innych węzłów do walidacji
15:34 — Blok #239 (857) został podpisany i wysyłany do innych węzłów do walidacji
16:32 — Blok #239 (857) został zwalidowany i wysłany do głównego łańcucha
16:42 — Wszystkie węzły otrzymały z głównego łańcucha informacje, że blok #239 (857) został dodany i zaczynają przetwarzać 46685 transakcji
16:42 — Blok #238 (c5f) został zwalidowany i wysłany do głównego łańcucha
16:42 — Blok #239 (ad8) nie został zwalidowany w wyznaczonym czasie
16:54 — Węzeł #2 pobrał z puli 96882 transakcji i formuje blok #240 (e6e)
16:56 — Węzeł #3 pobrał z puli 39704 transakcji i formuje blok #240 (a47)
17:02 — Blok #240 (a47) został podpisany i wysyłany do innych węzłów do walidacji
17:02 — Blok #240 (e6e) został podpisany i wysyłany do innych węzłów do walidacji
17:18 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #240 (c5f) został dodany i zaczynają przetwarzać 181206 transakcji
17:45 — Blok #240 (a47) został zweryfikowany i wysłany do łańcucha głównego
17:47 — Węzeł #1 pobrał z puli 54956 transakcji i formuje blok #241 (170)
17:59 — Blok #241 (170) został podpisany i wysyłany do innych węzłów do weryfikacji
18:09 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #241 (a47) został dodany i zaczynają przetwarzać 181206 transakcji
18:20 — Węzeł #3 pobrał z puli 39104 transakcji i formuje blok #242 (955)
18:24 — Blok #240 (e6e) został zweryfikowany i wysłany do łańcucha głównego
18:28 — Blok #242 (955) został podpisany i wysyłany do innych węzłów do weryfikacji
18:09 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #242 (e6e) został dodany i zaczynają przetwarzać 96882 transakcji
19:06 — Skrypt demo zakończył swoją pracę dla węzła #1
19:08 — Skrypt demo zakończył swoją pracę dla węzła #2
19:08 — Węzeł #2 pobrał z puli 48241 transakcji i formuje blok #243 (fde)
19:14 — Blok #243 (fde) został podpisany i wysyłany do innych węzłów do weryfikacji
19:18 — Blok #241 (170) nie został zweryfikowany w wyznaczonym czasie
19:28 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #243 (37c)
19:35 — Blok #242 (955) został zweryfikowany i wysłany do łańcucha głównego
19:40 — Blok #243 (37c) został podpisany i wysyłany do innych węzłów do weryfikacji
20:05 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #243 (955) został dodany i zaczynają przetwarzać 39104 transakcji
20:15 — Blok #243 (fde) został zweryfikowany i wysłany do łańcucha głównego
20:19 — Węzeł #3 pobrał z puli 42981 transakcji i formuje blok #244 (9b5)
20:26 — Blok #244 (9b5) został podpisany i wysyłany do innych węzłów do weryfikacji
20:28 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #244 (fde) został dodany i zaczynają przetwarzać 48241 transakcji
20:32 — Węzeł #2 przetworzył wszystkie 1k transakcji, które były w puli
21:05 — Blok #243 (37c) nie został zweryfikowany w wyznaczonym czasie
21:15 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #245 (37c)
21:32 — Blok #245 (37c) został podpisany i wysyłany do innych węzłów do weryfikacji
21:42 — Blok #244 (9b5) został zweryfikowany i wysłany do łańcucha głównego
21:50 — Wszystkie węzły otrzymały z łańcucha głównego informację, że blok #245 (9b5) został dodany i zaczynają przetwarzać 42981 transakcji
22:04 — Węzeł #3 pobrał z puli 45361 transakcji i formuje blok #246 (3f9)
22:11 — Blok #246 (3f9) został podpisany i wysyłany do innych węzłów do walidacji
22:51 — Blok #245 (37c) nie został zwalidowany w wyznaczonym czasie
23:01 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #246 (37c)
23:08 — Skrypt demo zakończył swoją pracę dla węzła #3
23:15 — Blok #246 (37c) został podpisany i wysyłany do innych węzłów do walidacji
23:32 — Blok #246 (3f9) nie został zwalidowany w wyznaczonym czasie
23:42 — Węzeł #3 pobrał z puli 52173 transakcji i formuje blok #246 (71d)
23:51 — Blok #246 (71d) został podpisany i wysyłany do innych węzłów do walidacji
24:38 — Blok #246 (37c) nie został zwalidowany w wyznaczonym czasie
25:01 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #246 (37c)
25:06 — Blok #246 (71d) został zwalidowany i wysłany do głównego łańcucha
25:12 — Blok #246 (37c) został podpisany i wysyłany do innych węzłów do walidacji
25:14 — Wszystkie węzły otrzymały z głównego łańcucha informację, że blok #246 (71d) został dodany i zaczynają stosować 52173 transakcji
25:29 — Węzeł #3 przetworzył wszystkie 1kk transakcji, które były w puli
26:40 — Blok #247 (37c) nie został zwalidowany w wyznaczonym czasie
26:47 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #247 (37c)
27:03 — Blok #247 (37c) został podpisany i wysyłany do innych węzłów do walidacji
28:29 — Blok #247 (37c) nie został zwalidowany w wyznaczonym czasie
28:35 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #247 (37c)
28:49 — Blok #247 (37c) został podpisany i wysyłany do innych węzłów do walidacji
30:13 — Blok #247 (37c) nie został zwalidowany w wyznaczonym czasie
30:23 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #247 (37c)
30:38 — Blok #247 (37c) został podpisany i wysyłany do innych węzłów do walidacji
32:00 — Blok #247 (37c) nie został zwalidowany w wyznaczonym czasie
32:11 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #247 (37c)
32:26 — Blok #247 (37c) został podpisany i wysyłany do innych węzłów do walidacji
33:49 — Blok #247 (37c) nie został zwalidowany w wyznaczonym czasie
33:59 — Węzeł #1 pobrał z puli 86967 transakcji i formuje blok #247 (37c)
34:12 — Blok #247 (37c) został podpisany i wysyłany do innych węzłów do walidacji
35:34 — Blok #247 (37c) został zwalidowany i wysłany do głównego łańcucha
35:54 — Wszystkie węzły otrzymały z głównego łańcucha informację, że blok #247 (37c) został dodany i zaczynają stosować 86967 transakcji
36:11 — Węzeł #1 przetworzył wszystkie 1kk transakcji, które były w puli
55:12 — pierwszy węzeł przetworzył wszystkie 3kk transakcji

Podsumowanie
Stwierdzono, że wirtualne serwery Azure mają niewystarczającą moc procesora do przetwarzania tak dużej liczby transakcji. Jednak z głównym celem testów, jakim było zaprezentowanie działania Plasma Cash z MongoDB, system poradził sobie dobrze.
Zapraszamy do odwiedzenia GitHub projekcie:
Artykuł został napisany we współpracy z Aleksandrem Naszivanem, starszym programistą .
Wcześniej zespół deweloperów już testował prędkość Plasma Cash. Wyniki zostały przedstawione w .
Źródło: habr.com
