Trend blockchainu nadále nabírá na síle. Stále více odborníků předpovídá v blízké budoucnosti univerzální adaptaci této technologie. V současné době zůstává nevyřešeno několik problémů, které tomu brání.
Za prvé, moderní blockchainové systémy se špatně škálují. Například Ethereum má propustnost pouze 20 transakcí za vteřinu a přes mnoho výhod není vhodné pro velké podniky.
Zároveň je Ethereum ceněno pro svou výkonnou ochranu proti hackerům a výpadkům sítě. Takže bys ho neměl odepisovat. Větší smysl má napravit nedostatky Etherea a přeměnit je na výhody.
Plasma Cash jako řešení ochrany soukromí a škálovatelnosti na Ethereu
Plazma je technologie, kterou představil Vitalik Buterin, spoluzakladatel projektu Ethereum, na konferenci EthCC v Paříži v roce 2018. Byla vyvinuta společně s Josephem Poonem, spoluzakladatelem Lightning Network, a je účtována jako řešení pro zvýšení výpočetní výkon blockchainu Ethereum. První zprávy o Plasmě unikly do médií v roce 2017.
Tato platforma poskytuje externí vrstvu chytrých smluv, které mohou interagovat s hlavním blockchainem, a tím odlehčit kořenový řetězec, snížit transakční poplatky za chytré smlouvy a decentralizované aplikace (DApps).
Podrobné informace o vývoji byly uvedeny v dokumentu „
Buterin uznal, že Plasma má inherentní problémy se škálovatelností: Každý uživatel si musí stáhnout a ověřit každý Plasma blok, což zabraňuje exponenciálnímu škálování.
K nápravě tohoto nedostatku byl vyvinut Plasma Cash – dětský řetězec skládající se z chytré smlouvy a privátní sítě založené na Node.js, která periodicky přenáší svůj stav do kořenového řetězce (Ethereum). Poskytuje decentralizaci, bezpečnost a škálovatelnost v blockchainu, čímž řeší Trilemma škálovatelnosti.
Důležitou výhodou Plasma Cash ve srovnání s Plasma je, že přitahuje pozornost uživatelů pouze k těm blokům, které obsahují coiny, o které mají zájem:
"Uživatelé nyní potřebují pouze zkontrolovat dostupnost a platnost plazmového řetězce pro konkrétní index spojený s mincemi, které chtějí utratit, vlastnit a o které mají zájem," řekl Buterin.
Podle vývojářů je Plasma Cash účinným lékem na hacky v Ethereu. Každá plazmová mince má svého majitele a je jedinečná. Nikdo se nemůže zmocnit mincí jiného uživatele bez jeho vědomí. Držitel mincí může zabránit potenciálním podvodným výběrům prostřednictvím „reklamačního“ systému tím, že poskytne své „důkazní údaje“ v historii své mince.
Testování Plasma Cash v Mongo Atlas
Vzhledem ke své novosti zůstává Plasma Cash málo prozkoumaná. Odborníci na blockchain aktivně testují jeho interakci s různými cloudovými službami a databázemi, identifikují nedostatky a hledají způsoby, jak je napravit. Zejména testy v Mongo Atlas odhalily následující výhody při práci s plazmou:
- Spolehlivá ochrana před ztrátou dat, protože v clusteru existuje několik vzájemně synchronizovaných replik.
- Rychlý přístup, protože cluster lze vytvořit na třech nejoblíbenějších cloudových platformách: Amazon, Google, Azure. Výsledkem je, že uzel Plasma Cash může být nasazen v mnoha datových centrech poblíž Mongo Atlas. Prokázali jsme, že rychlost příliš neklesá, i když jsou plazmové uzly nasazeny ve vzdálenějších datových centrech.
- Plazmové uzly, používané v režimu pouze pro čtení, mohou být připojeny k jednomu Mongo clusteru a umístěny v různých částech světa, které zlepšuje geografickou škálovatelnost (uzly jsou blíže uživatelům).
- Nasazení nového uzlu je snadné, protože nemusíte vše znovu synchronizovat. Můžete se jednoduše připojit ke stávajícímu clusteru Mongo nebo rychle vytvořit kopii a nakonfigurovat připojení k němu.
- Je snadné škálovat databázi. Postupem času bude k dispozici více dat a podle potřeby můžete zvětšit velikost uzlů v clusteru.
K testování jsme použili následující servery:
- 3 virtuální servery Azure Standard E4s v3 (4 vcpus, 32 GiB paměti). Každý server má 3 uzly. Jeden z nich může odesílat bloky do kořenového řetězce.
- Každý uzel je připojen k vlastnímu clusteru Mongo Atlas M50 obsahujícímu 3 uzly v režimu repliky.
Test 1
3 uzly obdrží každý 100 9 transakcí. Celkem všech 300 uzlů obsahuje XNUMX tisíc transakcí a tokenů.
Počáteční stav: poslední blok #213; V databázi je uloženo 0 transakcí a tokenů.
00:00 — Spustí se 3 skripty, z nichž každý vygeneruje a odešle 100 XNUMX transakcí
00:29 — Odesílání 100 1 transakcí do uzlů #2 a #XNUMX začalo
00:32 — Odesílání 100 3 transakcí do uzlu #XNUMX začalo
00:32 — Uzel #1 vzal 11703 transakcí z fondu a bloku formulářů #214 (9fb)
00:34 — Uzel #2 vzal 27088 transakcí z fondu a bloku formulářů #214 (ef4)
00:34 — Blok #214 (9fb) je podepsán a odeslán do dalších uzlů k ověření
00:36 — Uzel #3 vzal 11900 transakcí z fondu a bloku formulářů #214 (983)
00:37 — Blok #214 (9fb) je ověřen a odeslán do kořenového řetězce
00:38 — Blok #214 (983) je podepsán a odeslán do jiných uzlů k ověření
00:38 — Blok #214 (ef4) je podepsán a odeslán do jiných uzlů k ověření
00:40 — Blok #214 (983) je ověřen a odeslán do kořenového řetězce
00:41 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #214 (9fb) a začaly uplatňovat 11703 transakcí
00:45 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #215 (983) a začalo uplatňovat 11900 transakcí
00:51 — Blok #214 (ef4) je ověřen a odeslán do kořenového řetězce
00:52 — Uzel #1 vzal 51469 transakcí z fondu a bloku formulářů #216 (ea0)
00:56 — Uzel #3 vzal 55102 transakcí z fondu a bloku formulářů #216 (f75)
00:58 — Demo skript dokončil svou práci pro uzel #2
00:58 — Blok #216 (ea0) je podepsán a odeslán do jiných uzlů k ověření
00:58 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #216 (ef4) a začnou uplatňovat 27088 transakcí
01:04 — Blok #216 (f75) je podepsán a odeslán do jiných uzlů k ověření
01:14 — Uzel #2 vzal 72912 transakcí z fondu a bloku formulářů #217 (f85)
01:15 — Demo skript dokončil práci pro uzly #1 a #2
01:17 — Bloky #216 (f75) a #216 (ea0) jsou ověřeny a odeslány do kořenového řetězce
01:21 — Blok #217 (f85) je podepsán a odeslán do dalších uzlů k ověření
01:26 — Bloky #217 (f75) a #218 (ea0) jsou přidány do kořenového řetězce a uzly začnou uplatňovat 51469 a 55102 transakcí.
01:27 — Blok #217 (a85) je ověřen a odeslán do kořenového řetězce
01:41 — Uzel #1 vzal 36828 transakcí z fondu a bloku formulářů #219 (46f)
01:41 — Uzel #3 vzal 32998 219 transakcí z fondu a bloku formulářů # 3 (bbXNUMX)
01:43 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #219 (a85) a začínají uplatňovat 72912 transakcí
01:46 — Blok #219 (46f) je podepsán a odeslán do dalších uzlů k ověření
01:46 — Blok #219 (bb3) je podepsán a odeslán do jiných uzlů k ověření
01:53 — Uzel #2 zpracoval všech 100 XNUMX transakcí, které byly ve fondu
02:37 — Blok #219 (bb3) je ověřen a odeslán do kořenového řetězce
02:41 — Blok #219 (46f) je ověřen a odeslán do kořenového řetězce
02:48 — Bloky #220 (bb3) a #221 (46f) jsou přidány do kořenového řetězce a uzly začnou uplatňovat 32998 a 36828 transakcí.
02:54 — Uzel #1 zpracoval všech 100 XNUMX transakcí, které byly ve fondu
02:55 — Uzel #3 zpracoval všech 100 XNUMX transakcí, které byly ve fondu
04:12 — Všechny uzly obsahují 300 221 transakcí a tokenů, poslední blok #XNUMX
Test 2
3 uzly obdrží každý 1kk transakce. Celkem všech 9 uzlů obsahuje 3 XNUMX transakcí a tokenů.
Počáteční stav: poslední blok #213; V databázi je uloženo 0 transakcí a tokenů.
00:00 — Spustí se 3 skripty, které generují a odesílají každý 1kk transakce
02:29 — Odesílání 1kk transakcí do uzlů #1 a #2 začalo
02:33 — Uzel #1 vzal 11668 transakcí z fondu a bloku formulářů #222 (510)
02:35 — Blok #222 (510) je podepsán a odeslán do jiných uzlů k ověření
02:37 — Blok #222 (510) je ověřen a odeslán do kořenového řetězce
02:38 — Uzel #2 vzal 46378 transakcí z fondu a bloku formulářů #222 (a9d)
02:38 — Odesílání 1kk transakcí do uzlu #3 začalo
02:41 — Uzel #3 vzal 5504 transakcí z fondu a bloku formulářů #222 (387)
02:42 — Blok #222 (387) je podepsán a odeslán do jiných uzlů k ověření
02:44 — Blok #222 (a9d) je podepsán a odeslán do jiných uzlů k ověření
02:44 — Blok #222 (387) je ověřen a odeslán do kořenového řetězce
02:49 — Blok #222 (a9d) ověřen a odeslán do kořenového řetězce
02:56 - Bloky #222 (510) #223 (387) a #224 (a9d) jsou přidány do kořenového řetězce a uzly začnou uplatňovat transakce 11668, 5504 a 46378 v tomto pořadí.
03:09 — Uzel #1 vzal 177170 transakcí z fondu a bloku formulářů #225 (e50)
03:09 — Uzel #3 vzal 119327 transakcí z fondu a bloku formulářů #225 (ccc)
03:10 — Uzel #2 vzal 149772 transakcí z fondu a bloku formulářů #225 (404)
03:26 — Blok #225 (ccc) je podepsán a odeslán do jiných uzlů k ověření
03:32 — Blok #225 (404) je podepsán a odeslán do jiných uzlů k ověření
03:33 — Blok #225 (e50) je podepsán a odeslán do jiných uzlů k ověření
03:53 — Blok #225 (ccc) ověřen a odeslán do kořenového řetězce
04:03 — Blok #225 (e50) ověřen a odeslán do kořenového řetězce
04:04 — Blok #225 (404) je ověřen a odeslán do kořenového řetězce
04:06 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #225 (ccc) a začalo se uplatňovat 119327 transakcí
04:14 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #226 (404) a začalo uplatňovat 149772 transakcí
04:16 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #227 (e50) a začíná uplatňovat 177170 transakcí
04:32 — Uzel #3 vzal 209436 transakcí z fondu a bloku formulářů #228 (1e9)
04:40 — Uzel #2 vzal 212669 transakcí z fondu a bloku formulářů #228 (e38)
04:40 — Uzel #1 vzal 190144 transakcí z fondu a bloku formulářů #228 (861)
05:02 — Blok #228 (1e9) je podepsán a odeslán do jiných uzlů k ověření
05:08 — Blok #228 (861) je podepsán a odeslán do jiných uzlů k ověření
05:10 — Blok #228 (e38) je podepsán a odeslán do jiných uzlů k ověření
06:13 — Blok #228 (1e9) ověřen a odeslán do kořenového řetězce
06:13 — Blok #228 (861) je ověřen a odeslán do kořenového řetězce
06:13 — Blok #228 (e38) ověřen a odeslán do kořenového řetězce
06:39 - Bloky #228 (861) #229 (1e9) a #230 (e38) jsou přidány do kořenového řetězce a uzly začnou uplatňovat transakce 190144, 209436 a 212669 v tomto pořadí.
07:07 — Uzel #1 vzal 199770 transakcí z fondu a bloku formulářů #231 (e04)
07:09 — Uzel #2 vzal 190473 transakcí z fondu a bloku formulářů #231 (36e)
07:09 — Uzel #3 vzal 178807 transakcí z fondu a bloku formulářů #231 (f43)
07:34 — Blok #231 (e04) je podepsán a odeslán do jiných uzlů k ověření
07:37 — Blok #231 (36e) je podepsán a odeslán do dalších uzlů k ověření
07:37 — Blok #231 (f43) je podepsán a odeslán do jiných uzlů k ověření
08:49 — Blok #231 (e04) ověřen a odeslán do kořenového řetězce
08:51 — Blok #231 (f43) ověřen a odeslán do kořenového řetězce
08:52 — Blok #231 (36e) ověřen a odeslán do kořenového řetězce
09:47 - Bloky #231 (e04) #232 (f43) a #233 (36e) jsou přidány do kořenového řetězce a uzly začnou uplatňovat transakce 199770, 178807 a 190473
10:16 — Uzel #1 vzal 153075 transakcí z fondu a bloku formulářů #234 (e04)
10:16 — Uzel #2 vzal 168035 transakcí z fondu a bloku formulářů #234 (36e)
10:16 — Uzel #3 vzal 166685 transakcí z fondu a bloku formulářů #234 (f43)
10:42 — Blok #234 (56d) je podepsán a odeslán do dalších uzlů k ověření
11:59 — Blok #234 (1bb) je ověřen a odeslán do kořenového řetězce
12:02 — Blok #234 (58a) ověřen a odeslán do kořenového řetězce
12:02 — Blok #234 (56d) ověřen a odeslán do kořenového řetězce
12:48 - Bloky #234 (1bb) #235 (58a) a #236 (56d) jsou přidány do kořenového řetězce a uzly začnou uplatňovat 153075, 168035 a 166685 transakcí v tomto pořadí.
13:14 — Uzel #1 vzal 112226 transakcí z fondu a bloku formulářů #237 (5c0)
13:16 — Uzel #2 vzal 87550 transakcí z fondu a bloku formulářů #234 (58a)
13:16 — Uzel #3 vzal 99594 transakcí z fondu a bloku formulářů #234 (56d)
13:30 — Blok #237 (5c0) je podepsán a odeslán do dalších uzlů k ověření
13:32 — Blok #237 (58a) je podepsán a odeslán do dalších uzlů k ověření
13:34 — Blok #237 (56d) je podepsán a odeslán do dalších uzlů k ověření
14:47 — Blok #237 (58a) ověřen a odeslán do kořenového řetězce
14:53 — Blok #237 (5c0) nebyl v určeném čase ověřen
14:53 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #237 (58a) a začalo uplatňovat 87550 transakcí
14:54 — Blok #237 (56d) ověřen a odeslán do kořenového řetězce
15:02 — Uzel #1 vzal 181206 transakcí z fondu a bloku formulářů #238 (c5f)
15:06 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #238 (56d) a začalo uplatňovat 99594 transakcí
15:12 — Uzel #2 vzal 51990 transakcí z fondu a bloku formulářů #239 (ad8)
15:20 — Blok #239 (ad8) je podepsán a odeslán do jiných uzlů k ověření
15:25 — Uzel #3 vzal 46685 transakcí z fondu a bloku formulářů #239 (857)
15:30 — Blok #238 (c5f) je podepsán a odeslán do dalších uzlů k ověření
15:34 — Blok #239 (857) je podepsán a odeslán do jiných uzlů k ověření
16:32 — Blok #239 (857) je ověřen a odeslán do kořenového řetězce
16:42 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #239 (857) a začalo uplatňovat 46685 transakcí
16:42 — Blok #238 (c5f) je ověřen a odeslán do kořenového řetězce
16:42 — Blok #239 (ad8) nebyl v určeném čase ověřen
16:54 — Uzel #2 vzal 96882 transakcí z fondu a bloku formulářů #240 (e6e)
16:56 — Uzel #3 vzal 39704 240 transakcí z fondu a bloku formulářů #47 (aXNUMX)
17:02 — Blok #240 (a47) je podepsán a odeslán do dalších uzlů k ověření
17:02 — Blok #240 (e6e) je podepsán a odeslán do dalších uzlů k ověření
17:18 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #240 (c5f) a začalo uplatňovat 181206 transakcí
17:45 — Blok #240 (a47) je ověřen a odeslán do kořenového řetězce
17:47 — Uzel #1 vzal 54956 transakcí z fondu a bloku formulářů #241 (170)
17:59 — Blok #241 (170) je podepsán a odeslán do jiných uzlů k ověření
18:09 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #241 (a47) a začínají uplatňovat 181206 transakcí
18:20 — Uzel #3 vzal 39104 transakcí z fondu a bloku formulářů #242 (955)
18:24 — Blok #240 (e6e) je ověřen a odeslán do kořenového řetězce
18:28 — Blok #242 (955) je podepsán a odeslán do jiných uzlů k ověření
18:09 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #242 (e6e) a začínají uplatňovat 96882 transakcí
19:06 — Demo skript dokončil svou práci pro uzel #1
19:08 — Demo skript dokončil svou práci pro uzel #2
19:08 — Uzel #2 vzal 48241 transakcí z fondu a bloku formulářů #243 (fde)
19:14 — Blok #243 (fde) je podepsán a odeslán do jiných uzlů k ověření
19:18 — Blok #241 (170) nebyl ve stanoveném čase ověřen
19:28 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #243 (37c)
19:35 — Blok #242 (955) je ověřen a odeslán do kořenového řetězce
19:40 — Blok #243 (37c) je podepsán a odeslán do dalších uzlů k ověření
20:05 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #243 (955) a začalo uplatňovat 39104 transakcí
20:15 — Blok #243 (fde) je ověřen a odeslán do kořenového řetězce
20:19 — Uzel #3 vzal 42981 transakcí z bloku a bloku formulářů #244 (9b5)
20:26 — Blok #244 (9b5) je podepsán a odeslán do dalších uzlů k ověření
20:28 - všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #244 (fde) a začínají uplatňovat 48241 transakcí
20:32 — Uzel #2 zpracoval všech 1 XNUMX transakcí, které byly ve fondu
21:05 — Blok #243 (37c) nebyl v určeném čase ověřen
21:15 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #245 (37c)
21:32 — Blok #245 (37c) je podepsán a odeslán do dalších uzlů k ověření
21:42 — Blok #244 (9b5) je ověřen a odeslán do kořenového řetězce
21:50 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #245 (9b5) a začínají uplatňovat 42981 transakcí
22:04 — Uzel #3 vzal 45361 transakcí z fondu a bloku formulářů #246 (3f9)
22:11 — Blok #246 (3f9) je podepsán a odeslán do dalších uzlů k ověření
22:51 — Blok #245 (37c) nebyl v určeném čase ověřen
23:01 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #246 (37c)
23:08 — Demo skript dokončil svou práci pro uzel #3
23:15 — Blok #246 (37c) je podepsán a odeslán do dalších uzlů k ověření
23:32 — Blok #246 (3f9) nebyl v určeném čase ověřen
23:42 — Uzel #3 vzal 52173 transakcí z fondu a bloku formulářů #246 (71d)
23:51 — Blok #246 (71d) je podepsán a odeslán do dalších uzlů k ověření
24:38 — Blok #246 (37c) nebyl v určeném čase ověřen
25:01 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #246 (37c)
25:06 — Blok #246 (71d) ověřen a odeslán do kořenového řetězce
25:12 — Blok #246 (37c) je podepsán a odeslán do dalších uzlů k ověření
25:14 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #246 (71d) a začalo uplatňovat 52173 transakcí
25:29 — Uzel #3 zpracoval všech 1 XNUMX transakcí, které byly ve fondu
26:40 — Blok #247 (37c) nebyl v určeném čase ověřen
26:47 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #247 (37c)
27:03 — Blok #247 (37c) je podepsán a odeslán do dalších uzlů k ověření
28:29 — Blok #247 (37c) nebyl v určeném čase ověřen
28:35 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #247 (37c)
28:49 — Blok #247 (37c) je podepsán a odeslán do dalších uzlů k ověření
30:13 — Blok #247 (37c) nebyl v určeném čase ověřen
30:23 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #247 (37c)
30:38 — Blok #247 (37c) je podepsán a odeslán do dalších uzlů k ověření
32:00 — Blok #247 (37c) nebyl v určeném čase ověřen
32:11 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #247 (37c)
32:26 — Blok #247 (37c) je podepsán a odeslán do dalších uzlů k ověření
33:49 — Blok #247 (37c) nebyl v určeném čase ověřen
33:59 — Uzel #1 vzal 86967 transakcí z bloku a bloku formulářů #247 (37c)
34:12 — Blok #247 (37c) je podepsán a odeslán do dalších uzlů k ověření
35:34 — Blok #247 (37c) ověřen a odeslán do kořenového řetězce
35:54 — Všechny uzly obdržely informace z kořenového řetězce, že byl přidán blok #247 (37c) a začalo uplatňovat 86967 transakcí
36:11 — Uzel #1 zpracoval všech 1 XNUMX transakcí, které byly ve fondu
55:12 - první uzel zpracoval všechny 3k transakcí
Výsledky
Bylo zjištěno, že virtuální servery Azure nemají dostatečný výpočetní výkon na zpracování tak velkého počtu transakcí. Systém si ale dobře poradil s hlavním úkolem testů, totiž předvést fungování Plasma Cash s MongoDB.
Zveme vás k návštěvě GitHub projekt:
Článek byl spoluautorem Alexandr Nashivan, senior vývojář
Dříve vývojový tým
Zdroj: www.habr.com