Blockchain-trenden fortsætter med at vokse. Flere eksperter forudser en universel tilpasning af denne teknologi i den nærmeste fremtid. I øjeblikket er der dog flere uløste problemer, der forhindrer dette.
Først og fremmest skaleres moderne blockchain-systemer dårligt. For eksempel er Ethereum's kapacitet kun 20 transaktioner per sekund, og på trods af mange fordele er det ikke egnet til store virksomheder.
Samtidig værdsættes Ethereum for sin stærke beskyttelse mod hacking og netværksfejl. Så det bør ikke afskrives. Det ville være mere fornuftigt at rette fejlene i Ethereum og gøre dem til fordele.

Plasma Cash som en løsning til privatliv og skalerbarhed i Ethereum
Plasma er en teknologi præsenteret af Vitalik Buterin, medstifter af Ethereum-projektet, på EthCC-konferencen i Paris i 2018. Den blev udviklet i samarbejde med Joseph Poon, medstifter af Lightning Network, og hævdes at være en løsning, der øger processingkraften for Ethereum blockchain. De første nyheder om Plasma lækkede til medierne i 2017.
Denne platform repræsenterer et eksternt lag af smarte kontrakter, der kan interagere med den primære blockchain, hvilket aflaster rodkæden og reducerer transaktionsgebyrerne for smarte kontrakter og decentraliserede applikationer (DApps).
Detaljer om udviklingen blev præsenteret i dokumentet “”, dateret august 2017.
Buterin erkendte, at Plasma har problemer med skalerbarhed: hver bruger skal downloade og verificere ægtheden af hver Plasma-blok, hvilket forhindrer eksponentiel skalering.
For at løse denne ulempe blev Plasma Cash udviklet — en underkæde bestående af en smart kontrakt og et privat netværk baseret på Node.js, der periodisk overfører sin tilstand til rodkæden (Ethereum). Den sikrer decentralisering, sikkerhed og skalerbarhed i blokchainen, hvilket løser Skaleringens Tredobbeltproblem.
En vigtig fordel ved Plasma Cash sammenlignet med Plasma er, at den kun tiltrækker brugernes opmærksomhed til de blokke, der indeholder deres ønskede mønter:
«Nu skal brugerne kun kontrollere tilgængeligheden og korrektheden af Plasma-kæden for et specifikt indeks relateret til de mønter, de ønsker at bruge, som de ejer og som interesserer dem,» sagde Buterin.
Ifølge udviklerne er Plasma Cash en effektiv løsning på hackingproblemer i Ethereum. Hver Plasma-mønt har en ejer og er unik. Ingen kan overtage en anden brugers mønter uden deres viden. Ejeren af mønten kan forhindre potentielle svigagtige udbetalinger gennem et 'klagesystem' ved at fremlægge sine 'bevisdata' i historikken for sin mønt.
Test af Plasma Cash i Mongo Atlas
På grund af sin nyhed er Plasma Cash stadig lidt udforsket. Blockchain-specialister tester aktivt dens interaktion med forskellige cloud-tjenester og databaser, registrerer mangler og finder måder at rette dem på. Især testene i Mongo Atlas har afsløret følgende fordele ved brug af Plasma:
- Pålidelig beskyttelse mod datatab, da flere replikaer synkroniseres med hinanden i klyngen.
- Hurtig adgang, da en klynge kan oprettes på tre af de mest populære cloud-platforme: Amazon, Google, Azure. Som et resultat kan Plasma Cash-noder implementeres i mange datacentre, der ligger tæt på Mongo Atlas. Vi har vist, at hastigheden ikke falder markant, selvom Plasma-noder implementeres i mere fjerntliggende datacentre.
- Plasma-noder, der kun bruges i læse-tilstand, kan forbindes til en enkelt Mongo-klynge og placeres i forskellige dele af verden, hvilket forbedrer geo-skalérbarheden (noderne er tættere på brugerne).
- Det er nemt at implementere en ny node, da det ikke er nødvendigt at synkronisere alt fra bunden. Man kan blot tilslutte sig en eksisterende Mongo-klynge eller hurtigt lave en kopi og opsætte forbindelse til den.
- Det er let at skalere databasen. Med tiden bliver dataene mere, og man kan øge størrelsen på noderne i klyngen efter behov.

Vi har brugt følgende servere til at udføre testene:
- 3 virtuelle Azure-servere Standard E4s v3 (4 vcpus, 32 GiB hukommelse). På hver server er der oprettet 3 noder. En af dem kan indsende blokke til den grundlæggende kæde.
- Hver node er tilsluttet sin egen Mongo Atlas-klynge M50, der indeholder 3 noder i repliceringstilstand.
Test 1
3 noder modtager 100k transaktioner hver. I alt indeholder alle 9 noder 300k transaktioner og tokens.

Starttilstand: sidste blok #213; der er gemt 0 transaktioner og tokens i databasen.
00:00 — 3 scripts er blevet startet, som genererer og sender 100k transaktioner.
00:29 — Sendelse af 100k transaktioner til noderne #1 og #2 er startet.
00:32 — Sendelse af 100k transaktioner til node #3 er startet.
00:32 — Node #1 tog 11703 transaktioner fra puljen og danner blok #214 (9fb).
00:34 — Node #2 tog 27088 transaktioner fra puljen og danner blok #214 (ef4).
00:34 — Blok #214 (9fb) er blevet underskrevet og sendes til de andre noder til validering.
00:36 — Node #3 tog 11900 transaktioner fra puljen og danner blok #214 (983).
00:37 — Blok #214 (9fb) er blevet valideret og sendt til den rod-kæde.
00:38 — Blok #214 (983) er blevet underskrevet og sendes til de andre noder til validering.
00:38 — Blok #214 (ef4) er blevet underskrevet og sendes til de andre noder til validering.
00:40 — Blok #214 (983) er blevet valideret og sendt til den rod-kæde.
00:41 — Alle noder fik information fra rod-kæden om, at blok #214 (9fb) er tilføjet og begynder at anvende 11703 transaktioner.
00:45 — Alle noder fik information fra rod-kæden om, at blok #215 (983) er tilføjet og begynder at anvende 11900 transaktioner.
00:51 — Blok #214 (ef4) er blevet valideret og sendt til den rod-kæde.
00:52 — Node #1 tog 51469 transaktioner fra puljen og danner blok #216 (ea0).
00:56 — Node #3 tog 55102 transaktioner fra puljen og danner blok #216 (f75).
00:58 — Demokoden er afsluttet for node #2.
00:58 — Blok #216 (ea0) er blevet underskrevet og sendes til de andre noder til validering.
00:58 — Alle noder fik information fra rod-kæden om, at blok #216 (ef4) er tilføjet og begynder at anvende 27088 transaktioner.
01:04 — Blok #216 (f75) er blevet underskrevet og sendes til de andre noder til validering.
01:14 — Node #2 tog 72912 transaktioner fra puljen og danner blok #217 (f85).
01:15 — Demokoden er afsluttet for node #1 og #2.
01:17 — Blokke #216 (f75) og #216 (ea0) er blevet valideret og sendt til den rod-kæde.
01:21 — Blok #217 (f85) er blevet underskrevet og sendes til de andre noder til validering.
01:26 — Blokke #217 (f75) og #218 (ea0) er blevet tilføjet i rod-kæden, og noderne begynder at anvende henholdsvis 51469 og 55102 transaktioner.
01:27 — Blok #217 (a85) er blevet valideret og sendt til den rod-kæde.
01:41 — Node #1 tog 36828 transaktioner fra puljen og danner blok #219 (46f).
01:41 — Node #3 tog 32998 transaktioner fra puljen og danner blok #219 (bb3).
01:43 — Alle noder har fået information fra rodcirklen om, at blok #219 (a85) er blevet tilføjet, og de begynder at anvende 72912 transaktioner.
01:46 — Blok #219 (46f) er underskrevet og sendes til andre noder til validering.
01:46 — Blok #219 (bb3) er underskrevet og sendes til andre noder til validering.
01:53 — Node #2 har behandlet alle 100k transaktioner, der var i puljen.
02:37 — Blok #219 (bb3) er valideret og sendt til rodcirklen.
02:41 — Blok #219 (46f) er valideret og sendt til rodcirklen.
02:48 — Blokke #220 (bb3) og #221 (46f) er blevet tilføjet til rodcirklen, og noderne begynder at anvende henholdsvis 32998 og 36828 transaktioner.
02:54 — Node #1 har behandlet alle 100k transaktioner, der var i puljen.
02:55 — Node #3 har behandlet alle 100k transaktioner, der var i puljen.
04:12 — Alle noder indeholder 300k transaktioner og tokens fra den seneste blok #221.
Test 2
3 noder modtager 1kk transaktioner hver. I alt er der 3kk transaktioner og tokens fordelt på alle 9 noder.

Starttilstand: sidste blok #213; der er gemt 0 transaktioner og tokens i databasen.
00:00 — 3 scripts er startet, som genererer og sender 1kk transaktioner hver.
02:29 — Afsendelsen af 1kk transaktioner til noderne #1 og #2 er begyndt.
02:33 — Node #1 har taget 11668 transaktioner fra puljen og danner blok #222 (510).
02:35 — Blok #222 (510) er underskrevet og sendes til andre noder til validering.
02:37 — Blok #222 (510) er valideret og sendt til rodcirklen.
02:38 — Node #2 har taget 46378 transaktioner fra puljen og danner blok #222 (a9d).
02:38 — Afsendelsen af 1kk transaktioner til node #3 er begyndt.
02:41 — Node #3 har taget 5504 transaktioner fra puljen og danner blok #222 (387).
02:42 — Blok #222 (387) er underskrevet og sendes til andre noder til validering.
02:44 — Blok #222 (a9d) er underskrevet og sendes til andre noder til validering.
02:44 — Blok #222 (387) er valideret og sendt til rodcirklen.
02:49 — Blok #222 (a9d) er valideret og sendt til rodcirklen.
02:56 — Blokke #222 (510), #223 (387) og #224 (a9d) er blevet tilføjet til rodcirklen, og noderne begynder at anvende henholdsvis 11668, 5504 og 46378 transaktioner.
03:09 — Node #1 har taget 177170 transaktioner fra puljen og danner blok #225 (e50).
03:09 — Node #3 har taget 119327 transaktioner fra puljen og danner blok #225 (ccc).
03:10 — Node #2 har taget 149772 transaktioner fra puljen og danner blok #225 (404).
03:26 — Blok #225 (ccc) er underskrevet og sendes til andre noder til validering.
03:32 — Blok #225 (404) er underskrevet og sendes til andre noder til validering.
03:33 — Blok #225 (e50) er underskrevet og sendes til andre noder til validering.
03:53 — Blok #225 (ccc) er valideret og sendt til rodcirklen.
04:03 — Blok #225 (e50) er valideret og sendt til den centrale kæde
04:04 — Blok #225 (404) er valideret og sendt til den centrale kæde
04:06 — Alle noder har modtaget information fra den centrale kæde om, at blok #225 (ccc) er tilføjet og begynder at anvende 119327 transaktioner
04:14 — Alle noder har modtaget information fra den centrale kæde om, at blok #226 (404) er tilføjet og begynder at anvende 149772 transaktioner
04:16 — Alle noder har modtaget information fra den centrale kæde om, at blok #227 (e50) er tilføjet og begynder at anvende 177170 transaktioner
04:32 — Node #3 har taget 209436 transaktioner fra puljen og danner blok #228 (1e9)
04:40 — Node #2 har taget 212669 transaktioner fra puljen og danner blok #228 (e38)
04:40 — Node #1 har taget 190144 transaktioner fra puljen og danner blok #228 (861)
05:02 — Blok #228 (1e9) er signeret og sendes til de andre noder til validering
05:08 — Blok #228 (861) er signeret og sendes til de andre noder til validering
05:10 — Blok #228 (e38) er signeret og sendes til de andre noder til validering
06:13 — Blok #228 (1e9) er valideret og sendt til den centrale kæde
06:13 — Blok #228 (861) er valideret og sendt til den centrale kæde
06:13 — Blok #228 (e38) er valideret og sendt til den centrale kæde
06:39 — Blokke #228 (861), #229 (1e9) og #230 (e38) er tilføjet til den centrale kæde, og noderne begynder at anvende 190144, 209436 og 212669 transaktioner henholdsvis
07:07 — Node #1 har taget 199770 transaktioner fra puljen og danner blok #231 (e04)
07:09 — Node #2 har taget 190473 transaktioner fra puljen og danner blok #231 (36e)
07:09 — Node #3 har taget 178807 transaktioner fra puljen og danner blok #231 (f43)
07:34 — Blok #231 (e04) er signeret og sendes til de andre noder til validering
07:37 — Blok #231 (36e) er signeret og sendes til de andre noder til validering
07:37 — Blok #231 (f43) er signeret og sendes til de andre noder til validering
08:49 — Blok #231 (e04) er valideret og sendt til den centrale kæde
08:51 — Blok #231 (f43) er valideret og sendt til den centrale kæde
08:52 — Blok #231 (36e) er valideret og sendt til den centrale kæde
09:47 — Blokke #231 (e04), #232 (f43) og #233 (36e) er tilføjet til den centrale kæde, og noderne begynder at anvende 199770, 178807 og 190473 transaktioner henholdsvis
10:16 — Node #1 har taget 153075 transaktioner fra puljen og danner blok #234 (e04)
10:16 — Node #2 har taget 168035 transaktioner fra puljen og danner blok #234 (36e)
10:16 — Node #3 har taget 166685 transaktioner fra puljen og danner blok #234 (f43)
10:42 — Blok #234 (56d) er signeret og sendes til de andre noder til validering
11:59 — Blok #234 (1bb) er valideret og sendt til rodkæden
12:02 — Blok #234 (58a) er valideret og sendt til rodkæden
12:02 — Blok #234 (56d) er valideret og sendt til rodkæden
12:48 — Blockene #234 (1bb), #235 (58a) og #236 (56d) er tilføjet til rodkæden og noderne begynder at behandle 153075, 168035 og 166685 transaktioner henholdsvis
13:14 — Node #1 har taget 112226 transaktioner fra puljen og danner blok #237 (5c0)
13:16 — Node #2 har taget 87550 transaktioner fra puljen og danner blok #234 (58a)
13:16 — Node #3 har taget 99594 transaktioner fra puljen og danner blok #234 (56d)
13:30 — Blok #237 (5c0) er underskrevet og sendes til andre noder til validering
13:32 — Blok #237 (58a) er underskrevet og sendes til andre noder til validering
13:34 — Blok #237 (56d) er underskrevet og sendes til andre noder til validering
14:47 — Blok #237 (58a) er valideret og sendt til rodkæden
14:53 — Blok #237 (5c0) blev ikke valideret inden for den angivne tid
14:53 — Alle noder har modtaget oplysninger fra rodkæden om, at blok #237 (58a) er tilføjet og begynder at behandle 87550 transaktioner
14:54 — Blok #237 (56d) er valideret og sendt til rodkæden
15:02 — Node #1 har taget 181206 transaktioner fra puljen og danner blok #238 (c5f)
15:06 — Alle noder har modtaget oplysninger fra rodkæden om, at blok #238 (56d) er tilføjet og begynder at behandle 99594 transaktioner
15:12 — Node #2 har taget 51990 transaktioner fra puljen og danner blok #239 (ad8)
15:20 — Blok #239 (ad8) er underskrevet og sendes til andre noder til validering
15:25 — Node #3 har taget 46685 transaktioner fra puljen og danner blok #239 (857)
15:30 — Blok #238 (c5f) er underskrevet og sendes til andre noder til validering
15:34 — Blok #239 (857) er underskrevet og sendes til andre noder til validering
16:32 — Blok #239 (857) er valideret og sendt til rodkæden
16:42 — Alle noder har modtaget oplysninger fra rodkæden om, at blok #239 (857) er tilføjet og begynder at behandle 46685 transaktioner
16:42 — Blok #238 (c5f) er valideret og sendt til rodkæden
16:42 — Blok #239 (ad8) blev ikke valideret inden for den angivne tid
16:54 — Node #2 har taget 96882 transaktioner fra puljen og danner blok #240 (e6e)
16:56 — Node #3 har taget 39704 transaktioner fra puljen og danner blok #240 (a47)
17:02 — Blok #240 (a47) er underskrevet og sendes til andre noder til validering
17:02 — Blok #240 (e6e) er underskrevet og sendes til andre noder til validering
17:18 — Alle noder har modtaget information fra rodkæden om, at blok #240 (c5f) er tilføjet og begynder at anvende 181206 transaktioner
17:45 — Blok #240 (a47) er valideret og sendt til rodkæden
17:47 — Node #1 har taget 54956 transaktioner fra puljen og danner blok #241 (170)
17:59 — Blok #241 (170) er underskrevet og sendes til andre noder til validering
18:09 — Alle noder har modtaget information fra rodkæden om, at blok #241 (a47) er tilføjet og begynder at anvende 181206 transaktioner
18:20 — Node #3 har taget 39104 transaktioner fra puljen og danner blok #242 (955)
18:24 — Blok #240 (e6e) er valideret og sendt til rodkæden
18:28 — Blok #242 (955) er underskrevet og sendes til andre noder til validering
18:09 — Alle noder har modtaget information fra rodkæden om, at blok #242 (e6e) er tilføjet og begynder at anvende 96882 transaktioner
19:06 — Demoskemaet er færdigt for node #1
19:08 — Demoskemaet er færdigt for node #2
19:08 — Node #2 har taget 48241 transaktioner fra puljen og danner blok #243 (fde)
19:14 — Blok #243 (fde) er underskrevet og sendes til andre noder til validering
19:18 — Blok #241 (170) blev ikke valideret inden for den angivne tid
19:28 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #243 (37c)
19:35 — Blok #242 (955) er valideret og sendt til rodkæden
19:40 — Blok #243 (37c) er underskrevet og sendes til andre noder til validering
20:05 — Alle noder har modtaget information fra rodkæden om, at blok #243 (955) er tilføjet og begynder at anvende 39104 transaktioner
20:15 — Blok #243 (fde) er valideret og sendt til rodkæden
20:19 — Node #3 har taget 42981 transaktioner fra puljen og danner blok #244 (9b5)
20:26 — Blok #244 (9b5) er underskrevet og sendes til andre noder til validering
20:28 — Alle noder har modtaget information fra rodkæden om, at blok #244 (fde) er tilføjet og begynder at anvende 48241 transaktioner
20:32 — Node #2 har behandlet alle 1k transaktioner, der var i puljen
21:05 — Blok #243 (37c) blev ikke valideret inden for den angivne tid
21:15 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #245 (37c)
21:32 — Blok #245 (37c) er underskrevet og sendes til andre noder til validering
21:42 — Blok #244 (9b5) er valideret og sendt til rodkæden
21:50 — Alle noder har modtaget information fra rodkæden om, at blok #245 (9b5) er tilføjet og begynder at anvende 42981 transaktioner
22:04 — Node #3 har taget 45361 transaktioner fra puljen og danner blok #246 (3f9)
22:11 — Blok #246 (3f9) er blevet signeret og sendes til andre noder til validering
22:51 — Blok #245 (37c) blev ikke valideret inden for den angivne tid
23:01 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #246 (37c)
23:08 — Demoskiftet er afsluttet for node #3
23:15 — Blok #246 (37c) er blevet signeret og sendes til andre noder til validering
23:32 — Blok #246 (3f9) blev ikke valideret inden for den angivne tid
23:42 — Node #3 har taget 52173 transaktioner fra puljen og danner blok #246 (71d)
23:51 — Blok #246 (71d) er blevet signeret og sendes til andre noder til validering
24:38 — Blok #246 (37c) blev ikke valideret inden for den angivne tid
25:01 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #246 (37c)
25:06 — Blok #246 (71d) er blevet valideret og sendt til den primære kæde
25:12 — Blok #246 (37c) er blevet signeret og sendes til andre noder til validering
25:14 — Alle noder har modtaget information fra den primære kæde om, at blok #246 (71d) er tilføjet, og begynder at anvende 52173 transaktioner
25:29 — Node #3 har behandlet alle 1k transaktioner, der var i puljen
26:40 — Blok #247 (37c) blev ikke valideret inden for den angivne tid
26:47 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #247 (37c)
27:03 — Blok #247 (37c) er blevet signeret og sendes til andre noder til validering
28:29 — Blok #247 (37c) blev ikke valideret inden for den angivne tid
28:35 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #247 (37c)
28:49 — Blok #247 (37c) er blevet signeret og sendes til andre noder til validering
30:13 — Blok #247 (37c) blev ikke valideret inden for den angivne tid
30:23 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #247 (37c)
30:38 — Blok #247 (37c) er blevet signeret og sendes til andre noder til validering
32:00 — Blok #247 (37c) blev ikke valideret inden for den angivne tid
32:11 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #247 (37c)
32:26 — Blok #247 (37c) er blevet signeret og sendes til andre noder til validering
33:49 — Blok #247 (37c) blev ikke valideret inden for den angivne tid
33:59 — Node #1 har taget 86967 transaktioner fra puljen og danner blok #247 (37c)
34:12 — Blok #247 (37c) er blevet signeret og sendes til andre noder til validering
35:34 — Blok #247 (37c) er blevet valideret og sendt til den primære kæde
35:54 — Alle noder har modtaget information fra den primære kæde om, at blok #247 (37c) er tilføjet, og begynder at anvende 86967 transaktioner
36:11 — Node #1 har behandlet alle 1k transaktioner, der var i puljen
55:12 — den første node har behandlet alle 3k transaktioner

Resumé
Det blev konstateret, at Azure virtuelle servere har utilstrækkelig processorkraft til at håndtere så mange transaktioner. Men med den primære opgave for testene, nemlig at demonstrere Plasma Cashs funktion med MongoDB, klarede systemet sig godt.
Vi inviterer dig til at besøge GitHub projektet:
Artiklen blev skrevet i samarbejde med Alexander Nashivan, seniorudvikler .
Tidligere har udviklingsteamet allerede testet hastigheden af Plasma Cash. Resultaterne er præsenteret i .
Kilde: habr.com
