Veřejné testování řešení pro soukromí a škálovatelnost na Ethereu na cloudových platformách

Trend blockchainu nadále nabírá na síle. Čím dál více expertů předpovídá univerzální přijetí této technologie v blízké budoucnosti. V současné době zůstává několik nevyřešených problémů, které tomu brání.

Především moderní blockchainové systémy špatně škálují. Například propustnost Etherea činí pouze 20 transakcí za sekundu a přestože má mnoho výhod, není vhodné pro velké podniky.

Zároveň si Ethereum cení silné ochrany proti hackování a selhání sítě. Není tedy rozumné odepisovat ho. Mnohem rozumnější je opravit nedostatky Etherea a přetvořit je v výhody.

Veřejné testování řešení pro soukromí a škálovatelnost na Ethereu na cloudových platformách

Plasma Cash jako řešení pro soukromí a škálovatelnost na Ethereu

Plasma je technologie, kterou představil Vitalik Buterin, spoluzakladatel projektu Ethereum, na konferenci EthCC v Paříži v roce 2018. Byla vyvinuta společně s Joseph Poonem, spoluzakladatelem Lightning Network, a je prohlašována za řešení, které zvyšuje výpočetní výkon blockchainu Ethereum. První zprávy o Plasma se objevily v médiích v roce 2017.

Tato platforma představuje vnější úroveň chytrých kontraktů, které mohou interagovat s hlavním blockchainem, čímž odlehčují kořenovému řetězci a snižují transakční poplatky za chytré kontrakty a decentralizované aplikace (DApps).

Podrobné informace o vývoji byly uvedeny v dokumentu „Plasma: Scalable Autonomous Smart Contracts“, datovaném srpnem 2017.

Buterin uznal, že Plasma má problémy se škálovatelností: každý uživatel musí načítat a ověřovat platnost každého bloku Plasma, což zabraňuje exponenciálnímu škálování.

Aby se tento nedostatek vyřešil, byla vyvinuta Plasma Cash — dceřiný řetězec skládající se z chytrého kontraktu a soukromé sítě založené na Node.js, která periodicky předává svůj stav do kořenového řetězce (Ethereum). Zajišťuje decentralizaci, bezpečnost a škálovatelnost v blockchainu, čímž řeší Trilemma škálovatelnosti.

Hlavní výhodou Plasma Cash oproti Plasma je to, že upoutává pozornost uživatelů pouze na ty bloky, které obsahují pro ně zajímavé mince:

„Nyní musí uživatelé kontrolovat dostupnost a správnost řetězce Plasma pouze pro speciální index spojený s mincemi, které chtějí utratit, kterými disponují a které je zajímají,“ řekl Buterin.

Podle vývojářů je Plasma Cash účinným lékem na hacky v Ethereum. Každá mince Plasma má svého majitele a je unikátní. Nikdo nemůže získat mince jiného uživatele bez jeho vědomí. Držitel mince může zamezit potenciálním podvodným výběrům prostřednictvím systému „stížností“, když předloží svá „datumová potvrzení“ v historii své mince.

Testování Plasma Cash v Mongo Atlas

Vzhledem k její novosti zůstává Plasma Cash dosud málo prozkoumaná. Specialisté na blockchain aktivně testují její interakci s různými cloudovými službami a databázemi, zaznamenávají nedostatky a hledají cesty k jejich nápravě. Konkrétně testy v Mongo Atlas odhalily následující výhody při práci s Plasma:

  1. Spolehlivá ochrana proti ztrátě dat, protože se mezi sebou synchronizuje několik replik v clusteru.
  2. Rychlý přístup, protože cluster lze vytvořit na třech nejpopulárnějších cloudových platformách: Amazon, Google, Azure. V důsledku toho lze node Plasma Cash nasadit v mnoha datových centrech umístěných blízko Mongo Atlas. Bylo prokázáno, že rychlost výrazně neklesá, i když jsou nody Plasma nasazeny v vzdálenějších datových centrech.
  3. Nody Plasma, které se používají pouze v režimu čtení, mohou být připojeny k jednomu Mongo clusteru a umístěny v různých koutech světa, což zlepšuje geoškálovatelnost (nody jsou blíže uživatelům).
  4. Deployování nové nody je snadné, protože není potřeba vše znovu synchronizovat. Můžete se jednoduše připojit k existujícímu Mongo clusteru nebo rychle vytvořit kopii a nastavit připojení k ní.
  5. Škálování databáze je snadné. V průběhu času se dat stává více a velikost nodů v clusteru lze v případě potřeby zvětšovat.

Veřejné testování řešení pro soukromí a škálovatelnost na Ethereu na cloudových platformách

Použili jsme následující servery pro provádění testů:

  • 3 virtuální servery Azure Standard E4s v3 (4 vcpus, 32 GiB paměti). Na každém serveru běží 3 uzly. Jeden z nich může podávat bloky do hlavního řetězce.
  • Každý uzel je připojen ke svému klastru Mongo Atlas M50, který obsahuje 3 uzly v replikovém režimu.

Test 1

3 uzly zpracovávají po 100k transakcích. Celkem ve všech 9 uzlech je 300k transakcí a tokenů.

Přehrát video

Počáteční stav: poslední blok #213; v databázi je uloženo 0 transakcí a tokenů.

00:00 — Spuštěny 3 skripty, které generují a odesílají po 100k transakcích.
00:29 — Začalo odesílání po 100k transakcích do uzlů #1 a #2.
00:32 — Začalo odesílání 100k transakcí do uzlu #3.
00:32 — Uzel #1 vzal z poolu 11703 transakcí a formuje blok #214 (9fb).
00:34 — Uzel #2 vzal z poolu 27088 transakcí a formuje blok #214 (ef4).
00:34 — Blok #214 (9fb) byl podepsán a odeslán ostatním uzlům k validaci.
00:36 — Uzel #3 vzal z poolu 11900 transakcí a formuje blok #214 (983).
00:37 — Blok #214 (9fb) byl validován a odeslán do hlavního řetězce.
00:38 — Blok #214 (983) byl podepsán a odeslán ostatním uzlům k validaci.
00:38 — Blok #214 (ef4) byl podepsán a odeslán ostatním uzlům k validaci.
00:40 — Blok #214 (983) byl validován a odeslán do hlavního řetězce.
00:41 — Všechny uzly získaly z hlavního řetězce informaci, že blok #214 (9fb) byl přidán a začínají aplikovat 11703 transakcí.
00:45 — Všechny uzly získaly z hlavního řetězce informaci, že blok #215 (983) byl přidán a začínají aplikovat 11900 transakcí.
00:51 — Blok #214 (ef4) byl validován a odeslán do hlavního řetězce.
00:52 — Uzel #1 vzal z poolu 51469 transakcí a formuje blok #216 (ea0).
00:56 — Uzel #3 vzal z poolu 55102 transakcí a formuje blok #216 (f75).
00:58 — Demo skript dokončil svou práci pro uzel #2.
00:58 — Blok #216 (ea0) byl podepsán a odeslán ostatním uzlům k validaci.
00:58 — Všechny uzly získaly z hlavního řetězce informaci, že blok #216 (ef4) byl přidán a začínají aplikovat 27088 transakcí.
01:04 — Blok #216 (f75) byl podepsán a odeslán ostatním uzlům k validaci.
01:14 — Uzel #2 vzal z poolu 72912 transakcí a formuje blok #217 (f85).
01:15 — Demo skript dokončil svou práci pro uzly #1 a #2.
01:17 — Bloky #216 (f75) a #216 (ea0) byly validovány a odeslány do hlavního řetězce.
01:21 — Blok #217 (f85) byl podepsán a odeslán ostatním uzlům k validaci.
01:26 — Bloky #217 (f75) a #218 (ea0) byly přidány do kořenového řetězce a uzly začínají aplikovat 51469 a 55102 transakcí.
01:27 — Blok #217 (a85) byl validován a odeslán do kořenového řetězce.
01:41 — Uzlová #1 vzala z poolu 36828 transakcí a vytváří blok #219 (46f).
01:41 — Uzlová #3 vzala z poolu 32998 transakcí a vytváří blok #219 (bb3).
01:43 — Všechny uzly obdržely z kořenového řetězce informaci, že blok #219 (a85) byl přidán, a začínají aplikovat 72912 transakcí.
01:46 — Blok #219 (46f) byl podepsán a odesílá se dalším uzlům k validaci.
01:46 — Blok #219 (bb3) byl podepsán a odesílá se dalším uzlům k validaci.
01:53 — Uzlová #2 zpracovala všech 100k transakcí, které byly v poolu.
02:37 — Blok #219 (bb3) byl validován a odeslán do kořenového řetězce.
02:41 — Blok #219 (46f) byl validován a odeslán do kořenového řetězce.
02:48 — Bloky #220 (bb3) a #221 (46f) byly přidány do kořenového řetězce a uzly začínají aplikovat 32998 a 36828 transakcí.
02:54 — Uzlová #1 zpracovala všech 100k transakcí, které byly v poolu.
02:55 — Uzlová #3 zpracovala všech 100k transakcí, které byly v poolu.
04:12 — Všechny uzly obsahují po 300k transakcích a tokenech poslední blok #221.

Test 2

3 uzly obdržely po 1kk transakcích. Celkem ve všech 9 uzlech je 3kk transakcí a tokenech.

Přehrát video

Počáteční stav: poslední blok #213; v databázi je uloženo 0 transakcí a tokenů.

00:00 — Byly spuštěny 3 skripty, které generují a odesílají po 1kk transakcích.
02:29 — Začalo odesílání po 1kk transakcích do uzlů #1 a #2.
02:33 — Uzlová #1 vzala z poolu 11668 transakcí a vytváří blok #222 (510).
02:35 — Blok #222 (510) byl podepsán a odesílá se dalším uzlům k validaci.
02:37 — Blok #222 (510) byl validován a odeslán do kořenového řetězce.
02:38 — Uzlová #2 vzala z poolu 46378 transakcí a vytváří blok #222 (a9d).
02:38 — Začalo odesílání 1kk transakcí uzlu #3.
02:41 — Uzlová #3 vzala z poolu 5504 transakcí a vytváří blok #222 (387).
02:42 — Blok #222 (387) byl podepsán a odesílá se dalším uzlům k validaci.
02:44 — Blok #222 (a9d) byl podepsán a odesílá se dalším uzlům k validaci.
02:44 — Blok #222 (387) byl validován a odeslán do kořenového řetězce.
02:49 — Blok #222 (a9d) byl validován a odeslán do kořenového řetězce.
02:56 — Bloky #222 (510), #223 (387) a #224 (a9d) byly přidány do kořenového řetězce a uzly začínají aplikovat 11668, 5504 a 46378 transakcí.
03:09 — Uzlová #1 vzala z poolu 177170 transakcí a vytváří blok #225 (e50).
03:09 — Uzlová #3 vzala z poolu 119327 transakcí a vytváří blok #225 (ccc).
03:10 — Noda #2 vzala z poolu 149772 transakcí a formuje blok #225 (404)
03:26 — Blok #225 (ccc) podepsán a odeslán ostatním nodům na validaci
03:32 — Blok #225 (404) podepsán a odeslán ostatním nodům na validaci
03:33 — Blok #225 (e50) podepsán a odeslán ostatním nodům na validaci
03:53 — Blok #225 (ccc) byl validován a odeslán do hlavního řetězce
04:03 — Blok #225 (e50) byl validován a odeslán do hlavního řetězce
04:04 — Blok #225 (404) byl validován a odeslán do hlavního řetězce
04:06 — Všechny nody obdržely z hlavního řetězce informaci, že blok #225 (ccc) byl přidán a začínají aplikovat 119327 transakcí
04:14 — Všechny nody obdržely z hlavního řetězce informaci, že blok #226 (404) byl přidán a začínají aplikovat 149772 transakcí
04:16 — Všechny nody obdržely z hlavního řetězce informaci, že blok #227 (e50) byl přidán a začínají aplikovat 177170 transakcí
04:32 — Noda #3 vzala z poolu 209436 transakcí a formuje blok #228 (1e9)
04:40 — Noda #2 vzala z poolu 212669 transakcí a formuje blok #228 (e38)
04:40 — Noda #1 vzala z poolu 190144 transakcí a formuje blok #228 (861)
05:02 — Blok #228 (1e9) podepsán a odeslán ostatním nodům na validaci
05:08 — Blok #228 (861) podepsán a odeslán ostatním nodům na validaci
05:10 — Blok #228 (e38) podepsán a odeslán ostatním nodům na validaci
06:13 — Blok #228 (1e9) byl validován a odeslán do hlavního řetězce
06:13 — Blok #228 (861) byl validován a odeslán do hlavního řetězce
06:13 — Blok #228 (e38) byl validován a odeslán do hlavního řetězce
06:39 — Bloky #228 (861), #229 (1e9) a #230 (e38) byly přidány do hlavního řetězce a nody začínají aplikovat 190144, 209436 a 212669 transakcí odpovídajícím způsobem
07:07 — Noda #1 vzala z poolu 199770 transakcí a formuje blok #231 (e04)
07:09 — Noda #2 vzala z poolu 190473 transakcí a formuje blok #231 (36e)
07:09 — Noda #3 vzala z poolu 178807 transakcí a formuje blok #231 (f43)
07:34 — Blok #231 (e04) podepsán a odeslán ostatním nodům na validaci
07:37 — Blok #231 (36e) podepsán a odeslán ostatním nodům na validaci
07:37 — Blok #231 (f43) podepsán a odeslán ostatním nodům na validaci
08:49 — Blok #231 (e04) byl validován a odeslán do hlavního řetězce
08:51 — Blok #231 (f43) byl validován a odeslán do hlavního řetězce
08:52 — Blok #231 (36e) byl validován a odeslán do hlavního řetězce
09:47 — Bloky #231 (e04) #232 (f43) a #233 (36e) byly přidány do kořenového řetězce a uzly začínají aplikovat 199770, 178807 a 190473 transakcí odpovídajícími
10:16 — Uzol #1 vzal z poolu 153075 transakcí a formuje blok #234 (e04)
10:16 — Uzol #2 vzal z poolu 168035 transakcí a formuje blok #234 (36e)
10:16 — Uzol #3 vzal z poolu 166685 transakcí a formuje blok #234 (f43)
10:42 — Blok #234 (56d) byl podepsán a odeslán jiným uzlům na validaci
11:59 — Blok #234 (1bb) byl validován a odeslán do kořenového řetězce
12:02 — Blok #234 (58a) byl validován a odeslán do kořenového řetězce
12:02 — Blok #234 (56d) byl validován a odeslán do kořenového řetězce
12:48 — Bloky #234 (1bb) #235 (58a) a #236 (56d) byly přidány do kořenového řetězce a uzly začínají aplikovat 153075, 168035 a 166685 transakcí odpovídajícími
13:14 — Uzol #1 vzal z poolu 112226 transakcí a formuje blok #237 (5c0)
13:16 — Uzol #2 vzal z poolu 87550 transakcí a formuje blok #234 (58a)
13:16 — Uzol #3 vzal z poolu 99594 transakcí a formuje blok #234 (56d)
13:30 — Blok #237 (5c0) byl podepsán a odeslán jiným uzlům na validaci
13:32 — Blok #237 (58a) byl podepsán a odeslán jiným uzlům na validaci
13:34 — Blok #237 (56d) byl podepsán a odeslán jiným uzlům na validaci
14:47 — Blok #237 (58a) byl validován a odeslán do kořenového řetězce
14:53 — Blok #237 (5c0) nebyl validován ve stanoveném čase
14:53 — Všechny uzly obdržely z kořenového řetězce informace o tom, že blok #237 (58a) byl přidán a začínají aplikovat 87550 transakcí
14:54 — Blok #237 (56d) byl validován a odeslán do kořenového řetězce
15:02 — Uzol #1 vzal z poolu 181206 transakcí a formuje blok #238 (c5f)
15:06 — Všechny uzly obdržely z kořenového řetězce informace o tom, že blok #238 (56d) byl přidán a začínají aplikovat 99594 transakcí
15:12 — Uzol #2 vzal z poolu 51990 transakcí a formuje blok #239 (ad8)
15:20 — Blok #239 (ad8) byl podepsán a odeslán jiným uzlům na validaci
15:25 — Uzol #3 vzal z poolu 46685 transakcí a formuje blok #239 (857)
15:30 — Blok #238 (c5f) byl podepsán a odeslán jiným uzlům na validaci
15:34 — Blok #239 (857) byl podepsán a odeslán jiným uzlům na validaci
16:32 — Blok #239 (857) byl validován a odeslán do kořenového řetězce
16:42 — Všechny uzly obdržely z kořenového řetězce informace o tom, že blok #239 (857) byl přidán a začínají aplikovat 46685 transakcí
16:42 — Blok #238 (c5f) byl validován a odeslán do kořenového řetězce
16:42 — Blok #239 (ad8) nebyl validován během určeného času
16:54 — Noda #2 vzala z poolu 96882 transakcí a vytváří blok #240 (e6e)
16:56 — Noda #3 vzala z poolu 39704 transakcí a vytváří blok #240 (a47)
17:02 — Blok #240 (a47) byl podepsán a odeslán jiným nodám k validaci
17:02 — Blok #240 (e6e) byl podepsán a odeslán jiným nodám k validaci
17:18 — Všechny nody obdržely z kořenového řetězce informaci, že blok #240 (c5f) byl přidán a začínají aplikovat 181206 transakcí
17:45 — Blok #240 (a47) byl validován a odeslán do kořenového řetězce
17:47 — Noda #1 vzala z poolu 54956 transakcí a vytváří blok #241 (170)
17:59 — Blok #241 (170) byl podepsán a odeslán jiným nodám k validaci
18:09 — Všechny nody obdržely z kořenového řetězce informaci, že blok #241 (a47) byl přidán a začínají aplikovat 181206 transakcí
18:20 — Noda #3 vzala z poolu 39104 transakcí a vytváří blok #242 (955)
18:24 — Blok #240 (e6e) byl validován a odeslán do kořenového řetězce
18:28 — Blok #242 (955) byl podepsán a odeslán jiným nodám k validaci
18:09 — Všechny nody obdržely z kořenového řetězce informaci, že blok #242 (e6e) byl přidán a začínají aplikovat 96882 transakcí
19:06 — Demo skript dokončil svou práci pro nodu #1
19:08 — Demo skript dokončil svou práci pro nodu #2
19:08 — Noda #2 vzala z poolu 48241 transakcí a vytváří blok #243 (fde)
19:14 — Blok #243 (fde) byl podepsán a odeslán jiným nodám k validaci
19:18 — Blok #241 (170) nebyl validován během určeného času
19:28 — Noda #1 vzala z poolu 86967 transakcí a vytváří blok #243 (37c)
19:35 — Blok #242 (955) byl validován a odeslán do kořenového řetězce
19:40 — Blok #243 (37c) byl podepsán a odeslán jiným nodám k validaci
20:05 — Všechny nody obdržely z kořenového řetězce informaci, že blok #243 (955) byl přidán a začínají aplikovat 39104 transakcí
20:15 — Blok #243 (fde) byl validován a odeslán do kořenového řetězce
20:19 — Noda #3 vzala z poolu 42981 transakcí a vytváří blok #244 (9b5)
20:26 — Blok #244 (9b5) byl podepsán a odeslán jiným nodám k validaci
20:28 — Všechny nody obdržely z kořenového řetězce informaci, že blok #244 (fde) byl přidán a začínají aplikovat 48241 transakcí
20:32 — Noda #2 zpracovala všechny 1k transakcí, které byly v poolu
21:05 — Blok #243 (37c) nebyl validován během určeného času
21:15 — Noda #1 vzala z poolu 86967 transakcí a vytváří blok #245 (37c)
21:32 — Blok #245 (37c) byl podepsán a posílán ostatním uzlům k ověření
21:42 — Blok #244 (9b5) byl ověřen a odeslán do kořenového řetězce
21:50 — Všechny uzly obdržely z kořenového řetězce informaci, že blok #245 (9b5) byl přidán a začínají aplikovat 42981 transakcí
22:04 — Uzl #3 vzal z poolu 45361 transakcí a vytváří blok #246 (3f9)
22:11 — Blok #246 (3f9) byl podepsán a posílán ostatním uzlům k ověření
22:51 — Blok #245 (37c) nebyl ověřen ve stanoveném čase
23:01 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #246 (37c)
23:08 — Demo skript dokončil svou práci pro uzl #3
23:15 — Blok #246 (37c) byl podepsán a posílán ostatním uzlům k ověření
23:32 — Blok #246 (3f9) nebyl ověřen ve stanoveném čase
23:42 — Uzl #3 vzal z poolu 52173 transakcí a vytváří blok #246 (71d)
23:51 — Blok #246 (71d) byl podepsán a posílán ostatním uzlům k ověření
24:38 — Blok #246 (37c) nebyl ověřen ve stanoveném čase
25:01 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #246 (37c)
25:06 — Blok #246 (71d) byl ověřen a odeslán do kořenového řetězce
25:12 — Blok #246 (37c) byl podepsán a posílán ostatním uzlům k ověření
25:14 — Všechny uzly obdržely z kořenového řetězce informaci, že blok #246 (71d) byl přidán a začínají aplikovat 52173 transakcí
25:29 — Uzl #3 zpracoval všech 1k transakcí, které byly v poolu
26:40 — Blok #247 (37c) nebyl ověřen ve stanoveném čase
26:47 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #247 (37c)
27:03 — Blok #247 (37c) byl podepsán a posílán ostatním uzlům k ověření
28:29 — Blok #247 (37c) nebyl ověřen ve stanoveném čase
28:35 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #247 (37c)
28:49 — Blok #247 (37c) byl podepsán a posílán ostatním uzlům k ověření
30:13 — Blok #247 (37c) nebyl ověřen ve stanoveném čase
30:23 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #247 (37c)
30:38 — Blok #247 (37c) byl podepsán a posílán ostatním uzlům k ověření
32:00 — Blok #247 (37c) nebyl ověřen ve stanoveném čase
32:11 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #247 (37c)
32:26 — Blok #247 (37c) byl podepsán a posílán ostatním uzlům k ověření
33:49 — Blok #247 (37c) nebyl ověřen ve stanoveném čase
33:59 — Uzl #1 vzal z poolu 86967 transakcí a vytváří blok #247 (37c)
34:12 — Blok #247 (37c) je podepsán a odesílán ostatním uzlům k validaci
35:34 — Blok #247 (37c) byl validován a odeslán do hlavního řetězce
35:54 — Všechny uzly obdržely z hlavního řetězce informaci, že blok #247 (37c) byl přidán a začínají aplikovat 86967 transakcí
36:11 — Uzly #1 zpracoval všechny 1 milion transakcí, které byly v poolu
55:12 — první uzel zpracoval všechny 3 miliony transakcí

Veřejné testování řešení pro soukromí a škálovatelnost na Ethereu na cloudových platformách

Závěry

Bylo zjištěno, že virtuální servery Azure nemají dostatečný výpočetní výkon pro zpracování tak velkého množství transakcí. Nicméně, systém si vedl dobře s hlavním úkolem testů, tedy předvést fungování Plasma Cash s MongoDB.

Zveme vás k návštěvě GitHub projektu: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Článek byl napsán ve spolupráci s Alexandrem Našivanem, vedoucím vývojářem Clever Solution Inc.

Dříve tým vývojářů Opporty již testoval rychlost Plasma Cash. Výsledky jsou uvedeny v tomto článku.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster