Offentlig testing av Ethereums personvern- og skalerbarhetsløsning på skyplattformer

Blockchain-trenden fortsetter å ta fart. Flere og flere eksperter spår universell tilpasning av denne teknologien i nær fremtid. For øyeblikket er flere problemer som forhindrer dette uløst.

For det første skalerer ikke moderne blokkjedesystemer godt. For eksempel har Ethereum en gjennomstrømning på kun 20 transaksjoner per sekund, og til tross for sine mange fordeler er det ikke egnet for store bedrifter.

Samtidig er Ethereum verdsatt for sin kraftige beskyttelse mot hacking og nettverksfeil. Så du bør ikke avskrive ham. Det er mer fornuftig å rette opp Ethereums mangler og gjøre dem til fordeler.

Offentlig testing av Ethereums personvern- og skalerbarhetsløsning på skyplattformer

Plasma Cash som en personvern- og skalerbarhetsløsning på Ethereum

Plasma er en teknologi introdusert av Vitalik Buterin, medgründer av Ethereum-prosjektet, på EthCC-konferansen i Paris i 2018. Den ble utviklet sammen med Joseph Poon, medgründer av Lightning Network, og regnes som en løsning for å øke datakraften til Ethereum-blokkjeden. Den første nyheten om Plasma lekket til media i 2017.

Denne plattformen gir et eksternt lag av smarte kontrakter som kan samhandle med hovedblokkkjeden, og dermed avlaste rotkjeden, redusere transaksjonsgebyrer for smarte kontrakter og desentraliserte applikasjoner (DApps).

Detaljert informasjon om utviklingen ble presentert i dokumentet "Plasma: Skalerbare autonome smarte kontrakter", datert august 2017.

Buterin erkjente at Plasma har iboende skalerbarhetsproblemer: Hver bruker må laste ned og autentisere hver Plasma-blokk, noe som forhindrer eksponentiell skalering.

For å rette opp denne mangelen ble Plasma Cash utviklet - en barnekjede bestående av en smart kontrakt og et privat nettverk basert på Node.js, som med jevne mellomrom overfører sin tilstand til rotkjeden (Ethereum). Det gir desentralisering, sikkerhet og skalerbarhet i blokkjeden, og løser dermed skalerbarhetstrilemmaet.

En viktig fordel med Plasma Cash sammenlignet med Plasma er at den tiltrekker brukernes oppmerksomhet kun til de blokkene som inneholder myntene de er interessert i:

"Brukere trenger nå bare å sjekke tilgjengeligheten og gyldigheten til plasmakjeden for den spesifikke indeksen knyttet til myntene de ønsker å bruke, eie og er interessert i," sa Buterin.

Ifølge utviklerne er Plasma Cash en effektiv kur mot hacks i Ethereum. Hver plasmamynt har en eier og er unik. Ingen kan ta en annen brukers mynter i besittelse uten hans viten. En myntholder kan forhindre potensielle uredelige uttak gjennom "klage"-systemet ved å presentere sine "bevisdata" i historien til mynten.

Tester Plasma Cash i Mongo Atlas

På grunn av nyheten er Plasma Cash fortsatt lite studert. Blockchain-eksperter tester aktivt samspillet med ulike skytjenester og databaser, identifiserer mangler og finner måter å rette dem på. Spesielt tester i Mongo Atlas avslørte følgende fordeler ved arbeid med plasma:

  1. Pålitelig beskyttelse mot tap av data, siden det er flere replikaer som synkroniserer med hverandre i klyngen.
  2. Rask tilgang, siden en klynge kan opprettes på de tre mest populære skyplattformene: Amazon, Google, Azure. Som et resultat kan Plasma Cash-noden distribueres i mange datasentre som ligger nær Mongo Atlas. Vi har bevist at hastigheten ikke synker mye, selv om plasmanoder er utplassert i mer fjerntliggende datasentre.
  3. Plasmanoder, brukt i skrivebeskyttet modus, kan kobles til en Mongo-klynge og lokaliseres i forskjellige deler av verden, som forbedrer geo-skalerbarhet (noder er nærmere brukere).
  4. Det er enkelt å distribuere en ny node, siden du ikke trenger å synkronisere alt på nytt. Du kan ganske enkelt koble til en eksisterende Mongo-klynge eller raskt lage en kopi og konfigurere en tilkobling til den.
  5. Det er enkelt å skalere databasen. Over tid blir mer data tilgjengelig, og du kan øke størrelsen på nodene i klyngen etter behov.

Offentlig testing av Ethereums personvern- og skalerbarhetsløsning på skyplattformer

Vi brukte følgende servere til å utføre tester:

  • 3 virtuelle Azure-servere Standard E4s v3 (4 vcpus, 32 GiB minne). Hver server har 3 noder. En av dem kan sende blokker til rotkjeden.
  • Hver node er koblet til sin egen Mongo Atlas M50-klynge som inneholder 3 noder i replikamodus.

Test 1

3 noder mottar 100 9 transaksjoner hver. Totalt inneholder alle 300 noder XNUMX XNUMX transaksjoner og tokens.


Den opprinnelige tilstanden: siste blokk #213; 0 transaksjoner og tokens lagres i databasen.

00:00 — 3 skript lanseres som genererer og sender 100 XNUMX transaksjoner hver
00:29 — Sending av 100 1 transaksjoner til node #2 og #XNUMX har begynt
00:32 — Sending av 100 3 transaksjoner til node #XNUMX har begynt
00:32 — Node #1 tok 11703 transaksjoner fra bassenget og skjemablokk #214 (9fb)
00:34 — Node #2 tok 27088 transaksjoner fra bassenget og skjemablokk #214 (ef4)
00:34 — Blokk #214 (9fb) er signert og sendt til andre noder for validering
00:36 — Node #3 tok 11900 transaksjoner fra bassenget og skjemablokk #214 (983)
00:37 — Blokk #214 (9fb) er validert og sendt til rotkjeden
00:38 — Blokk #214 (983) er signert og sendt til andre noder for validering
00:38 — Blokk #214 (ef4) er signert og sendt til andre noder for validering
00:40 — Blokk #214 (983) er validert og sendt til rotkjeden
00:41 — Alle noder mottok informasjon fra rotkjeden om at blokk #214 (9fb) ble lagt til og begynte å bruke 11703 transaksjoner
00:45 — Alle noder mottok informasjon fra rotkjeden om at blokk #215 (983) ble lagt til og begynte å bruke 11900 transaksjoner
00:51 — Blokk #214 (ef4) er validert og sendt til rotkjeden
00:52 — Node #1 tok 51469 transaksjoner fra bassenget og skjemablokk #216 (ea0)
00:56 — Node #3 tok 55102 transaksjoner fra bassenget og skjemablokk #216 (f75)
00:58 — Demoskriptet har fullført arbeidet for node #2
00:58 — Blokk #216 (ea0) er signert og sendt til andre noder for validering
00:58 — Alle noder mottok informasjon fra rotkjeden om at blokk #216 (ef4) er lagt til og begynner å bruke 27088 transaksjoner
01:04 — Blokk #216 (f75) er signert og sendt til andre noder for validering
01:14 — Node #2 tok 72912 transaksjoner fra bassenget og skjemablokk #217 (f85)
01:15 — Demoskriptet har fullført arbeidet for nodene #1 og #2
01:17 — Blokk #216 (f75) og #216 (ea0) blir validert og sendt til rotkjeden
01:21 — Blokk #217 (f85) er signert og sendt til andre noder for validering
01:26 - Blokk #217 (f75) og #218 (ea0) legges til rotkjeden og noder begynner å bruke henholdsvis 51469 og 55102 transaksjoner
01:27 — Blokk #217 (a85) er validert og sendt til rotkjeden
01:41 — Node #1 tok 36828 transaksjoner fra bassenget og skjemablokk #219 (46f)
01:41 — Node #3 tok 32998 transaksjoner fra bassenget og skjemablokk #219 (bb3)
01:43 — Alle noder mottok informasjon fra rotkjeden om at blokk #219 (a85) er lagt til og begynner å bruke 72912 transaksjoner
01:46 — Blokk #219 (46f) er signert og sendt til andre noder for validering
01:46 — Blokk #219 (bb3) er signert og sendt til andre noder for validering
01:53 — Node #2 behandlet alle 100 XNUMX transaksjoner som var i bassenget
02:37 — Blokk #219 (bb3) er validert og sendt til rotkjeden
02:41 — Blokk#219 (46f) er validert og sendt til rotkjeden
02:48 — Blokk #220 (bb3) og #221 (46f) legges til rotkjeden og noder begynner å bruke henholdsvis 32998 og 36828 transaksjoner
02:54 — Node #1 behandlet alle 100 XNUMX transaksjoner som var i bassenget
02:55 — Node #3 behandlet alle 100 XNUMX transaksjoner som var i bassenget
04:12 — Alle noder inneholder 300 221 transaksjoner og tokens, siste blokk #XNUMX

Test 2

3 noder mottar 1kk transaksjoner hver. Totalt inneholder alle 9 noder 3k transaksjoner og tokens.

Den opprinnelige tilstanden: siste blokk #213; 0 transaksjoner og tokens lagres i databasen.

00:00 — 3 skript lanseres som genererer og sender 1kk transaksjoner hver
02:29 — Sending av 1kk-transaksjoner til node #1 og #2 har begynt
02:33 — Node #1 tok 11668 transaksjoner fra bassenget og skjemablokk #222 (510)
02:35 — Blokk #222 (510) er signert og sendt til andre noder for validering
02:37 — Blokk #222 (510) er validert og sendt til rotkjeden
02:38 — Node #2 tok 46378 transaksjoner fra bassenget og skjemablokk #222 (a9d)
02:38 — Sending av 1kk-transaksjoner til node #3 har begynt
02:41 — Node #3 tok 5504 transaksjoner fra bassenget og skjemablokk #222 (387)
02:42 — Blokk #222 (387) er signert og sendt til andre noder for validering
02:44 — Blokk #222 (a9d) er signert og sendt til andre noder for validering
02:44 — Blokk #222 (387) er validert og sendt til rotkjeden
02:49 — Blokk #222 (a9d) validert og sendt til rotkjeden
02:56 - Blokk #222 (510) #223 (387) og #224 (a9d) legges til rotkjeden og noder begynner å bruke henholdsvis 11668, 5504 og 46378 transaksjoner
03:09 — Node #1 tok 177170 transaksjoner fra bassenget og skjemablokk #225 (e50)
03:09 — Node #3 tok 119327 transaksjoner fra bassenget og skjemablokk #225 (ccc)
03:10 — Node #2 tok 149772 transaksjoner fra bassenget og skjemablokk #225 (404)
03:26 — Blokk #225 (ccc) er signert og sendt til andre noder for validering
03:32 — Blokk #225 (404) er signert og sendt til andre noder for validering
03:33 — Blokk #225 (e50) er signert og sendt til andre noder for validering
03:53 — Blokk #225 (ccc) validert og sendt til rotkjeden
04:03 — Blokk #225 (e50) validert og sendt til rotkjeden
04:04 — Blokk #225 (404) er validert og sendt til rotkjeden
04:06 — Alle noder mottok informasjon fra rotkjeden om at blokk #225 (ccc) ble lagt til og begynte å bruke 119327 transaksjoner
04:14 — Alle noder mottok informasjon fra rotkjeden om at blokk #226 (404) ble lagt til og begynte å bruke 149772 transaksjoner
04:16 — Alle noder mottok informasjon fra rotkjeden om at blokk #227 (e50) er lagt til og begynner å bruke 177170 transaksjoner
04:32 — Node #3 tok 209436 transaksjoner fra bassenget og skjemablokk #228 (1e9)
04:40 — Node #2 tok 212669 transaksjoner fra bassenget og skjemablokk #228 (e38)
04:40 — Node #1 tok 190144 transaksjoner fra bassenget og skjemablokk #228 (861)
05:02 — Blokk #228 (1e9) er signert og sendt til andre noder for validering
05:08 — Blokk #228 (861) er signert og sendt til andre noder for validering
05:10 — Blokk #228 (e38) er signert og sendt til andre noder for validering
06:13 — Blokk #228 (1e9) validert og sendt til rotkjeden
06:13 — Blokk #228 (861) er validert og sendt til rotkjeden
06:13 — Blokk #228 (e38) validert og sendt til rotkjeden
06:39 - Blokk #228 (861) #229 (1e9) og #230 (e38) legges til rotkjeden og noder begynner å bruke henholdsvis 190144, 209436 og 212669 transaksjoner
07:07 — Node #1 tok 199770 transaksjoner fra bassenget og skjemablokk #231 (e04)
07:09 — Node #2 tok 190473 transaksjoner fra bassenget og skjemablokk #231 (36e)
07:09 — Node #3 tok 178807 transaksjoner fra bassenget og skjemablokk #231 (f43)
07:34 — Blokk #231 (e04) er signert og sendt til andre noder for validering
07:37 — Blokk #231 (36e) er signert og sendt til andre noder for validering
07:37 — Blokk #231 (f43) er signert og sendt til andre noder for validering
08:49 — Blokk #231 (e04) validert og sendt til rotkjeden
08:51 — Blokk #231 (f43) validert og sendt til rotkjeden
08:52 — Blokk #231 (36e) validert og sendt til rotkjeden
09:47 - Blokk #231 (e04) #232 (f43) og #233 (36e) legges til rotkjeden og noder begynner å bruke henholdsvis 199770, 178807 og 190473 transaksjoner
10:16 — Node #1 tok 153075 transaksjoner fra bassenget og skjemablokk #234 (e04)
10:16 — Node #2 tok 168035 transaksjoner fra bassenget og skjemablokk #234 (36e)
10:16 — Node #3 tok 166685 transaksjoner fra bassenget og skjemablokk #234 (f43)
10:42 — Blokk #234 (56d) er signert og sendt til andre noder for validering
11:59 — Blokk #234 (1bb) er validert og sendt til rotkjeden
12:02 — Blokk #234 (58a) validert og sendt til rotkjeden
12:02 — Blokk #234 (56d) validert og sendt til rotkjeden
12:48 - Blokker #234 (1bb) #235 (58a) og #236 (56d) legges til rotkjeden og noder begynner å bruke henholdsvis 153075, 168035 og 166685 transaksjoner
13:14 — Node #1 tok 112226 transaksjoner fra bassenget og skjemablokk #237 (5c0)
13:16 — Node #2 tok 87550 transaksjoner fra bassenget og skjemablokk #234 (58a)
13:16 — Node #3 tok 99594 transaksjoner fra bassenget og skjemablokk #234 (56d)
13:30 — Blokk #237 (5c0) er signert og sendt til andre noder for validering
13:32 — Blokk #237 (58a) er signert og sendt til andre noder for validering
13:34 — Blokk #237 (56d) er signert og sendt til andre noder for validering
14:47 — Blokk #237 (58a) validert og sendt til rotkjeden
14:53 — Blokk #237 (5c0) ble ikke validert innen den angitte tiden
14:53 — Alle noder mottok informasjon fra rotkjeden om at blokk #237 (58a) ble lagt til og begynte å bruke 87550 transaksjoner
14:54 — Blokk #237 (56d) validert og sendt til rotkjeden
15:02 — Node #1 tok 181206 transaksjoner fra bassenget og skjemablokk #238 (c5f)
15:06 — Alle noder mottok informasjon fra rotkjeden om at blokk #238 (56d) ble lagt til og begynner å bruke 99594 transaksjoner
15:12 — Node #2 tok 51990 transaksjoner fra bassenget og skjemablokk #239 (ad8)
15:20 — Blokk #239 (ad8) er signert og sendt til andre noder for validering
15:25 — Node #3 tok 46685 transaksjoner fra bassenget og skjemablokk #239 (857)
15:30 — Blokk #238 (c5f) er signert og sendt til andre noder for validering
15:34 — Blokk #239 (857) er signert og sendt til andre noder for validering
16:32 — Blokk #239 (857) er validert og sendt til rotkjeden
16:42 — Alle noder mottok informasjon fra rotkjeden om at blokk #239 (857) ble lagt til og begynte å bruke 46685 transaksjoner
16:42 — Blokk #238 (c5f) er validert og sendt til rotkjeden
16:42 — Blokk #239 (ad8) ble ikke validert innen den angitte tiden
16:54 — Node #2 tok 96882 transaksjoner fra bassenget og skjemablokk #240 (e6e)
16:56 — Node #3 tok 39704 240 transaksjoner fra bassenget og skjemablokk #47 (aXNUMX)
17:02 — Blokk #240 (a47) er signert og sendt til andre noder for validering
17:02 — Blokk #240 (e6e) er signert og sendt til andre noder for validering
17:18 — Alle noder mottok informasjon fra rotkjeden om at blokk #240 (c5f) ble lagt til og begynte å bruke 181206 transaksjoner
17:45 — Blokk #240 (a47) er validert og sendt til rotkjeden
17:47 — Node #1 tok 54956 transaksjoner fra bassenget og skjemablokk #241 (170)
17:59 — Blokk #241 (170) er signert og sendt til andre noder for validering
18:09 — Alle noder mottok informasjon fra rotkjeden om at blokk #241 (a47) er lagt til og begynner å bruke 181206 transaksjoner
18:20 — Node #3 tok 39104 transaksjoner fra bassenget og skjemablokk #242 (955)
18:24 — Blokk #240 (e6e) er validert og sendt til rotkjeden
18:28 — Blokk #242 (955) er signert og sendt til andre noder for validering
18:09 — Alle noder mottok informasjon fra rotkjeden om at blokk #242 (e6e) er lagt til og begynner å bruke 96882 transaksjoner
19:06 — Demoskriptet har fullført arbeidet for node #1
19:08 — Demoskriptet har fullført arbeidet for node #2
19:08 — Node #2 tok 48241 transaksjoner fra bassenget og skjemablokk #243 (fde)
19:14 — Blokk #243 (fde) er signert og sendt til andre noder for validering
19:18 — Blokk #241 (170) ble ikke validert innen den angitte tiden
19:28 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #243 (37c)
19:35 — Blokk #242 (955) er validert og sendt til rotkjeden
19:40 — Blokk #243 (37c) er signert og sendt til andre noder for validering
20:05 — Alle noder mottok informasjon fra rotkjeden om at blokk #243 (955) ble lagt til og begynte å bruke 39104 transaksjoner
20:15 — Blokk #243 (fde) er validert og sendt til rotkjeden
20:19 — Node #3 tok 42981 transaksjoner fra bassenget og skjemablokk #244 (9b5)
20:26 — Blokk #244 (9b5) er signert og sendt til andre noder for validering
20:28 - alle noder mottok informasjon fra rotkjeden om at blokk #244 (fde) ble lagt til og begynte å bruke 48241 transaksjoner
20:32 — Node #2 behandlet alle 1k transaksjoner som var i bassenget
21:05 — Blokk #243 (37c) ble ikke validert innen den angitte tiden
21:15 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #245 (37c)
21:32 — Blokk #245 (37c) er signert og sendt til andre noder for validering
21:42 — Blokk #244 (9b5) er validert og sendt til rotkjeden
21:50 — Alle noder mottok informasjon fra rotkjeden om at blokk #245 (9b5) er lagt til og begynner å bruke 42981 transaksjoner
22:04 — Node #3 tok 45361 transaksjoner fra bassenget og skjemablokk #246 (3f9)
22:11 — Blokk #246 (3f9) er signert og sendt til andre noder for validering
22:51 — Blokk #245 (37c) ble ikke validert innen den angitte tiden
23:01 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #246 (37c)
23:08 — Demoskriptet har fullført arbeidet for node #3
23:15 — Blokk #246 (37c) er signert og sendt til andre noder for validering
23:32 — Blokk #246 (3f9) ble ikke validert innen den angitte tiden
23:42 — Node #3 tok 52173 transaksjoner fra bassenget og skjemablokk #246 (71d)
23:51 — Blokk #246 (71d) er signert og sendt til andre noder for validering
24:38 — Blokk #246 (37c) ble ikke validert innen den angitte tiden
25:01 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #246 (37c)
25:06 — Blokk #246 (71d) validert og sendt til rotkjeden
25:12 — Blokk #246 (37c) er signert og sendt til andre noder for validering
25:14 — Alle noder mottok informasjon fra rotkjeden om at blokk #246 (71d) ble lagt til og begynner å bruke 52173 transaksjoner
25:29 — Node #3 behandlet alle 1k transaksjoner som var i bassenget
26:40 — Blokk #247 (37c) ble ikke validert innen den angitte tiden
26:47 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #247 (37c)
27:03 — Blokk #247 (37c) er signert og sendt til andre noder for validering
28:29 — Blokk #247 (37c) ble ikke validert innen den angitte tiden
28:35 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #247 (37c)
28:49 — Blokk #247 (37c) er signert og sendt til andre noder for validering
30:13 — Blokk #247 (37c) ble ikke validert innen den angitte tiden
30:23 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #247 (37c)
30:38 — Blokk #247 (37c) er signert og sendt til andre noder for validering
32:00 — Blokk #247 (37c) ble ikke validert innen den angitte tiden
32:11 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #247 (37c)
32:26 — Blokk #247 (37c) er signert og sendt til andre noder for validering
33:49 — Blokk #247 (37c) ble ikke validert innen den angitte tiden
33:59 — Node #1 tok 86967 transaksjoner fra bassenget og skjemablokk #247 (37c)
34:12 — Blokk #247 (37c) er signert og sendt til andre noder for validering
35:34 — Blokk #247 (37c) validert og sendt til rotkjeden
35:54 — Alle noder mottok informasjon fra rotkjeden om at blokk #247 (37c) ble lagt til og begynte å bruke 86967 transaksjoner
36:11 — Node #1 behandlet alle 1k transaksjoner som var i bassenget
55:12 - den første noden behandlet alle 3k transaksjoner

Offentlig testing av Ethereums personvern- og skalerbarhetsløsning på skyplattformer

Resultater av

Det ble oppdaget at virtuelle Azure-servere ikke hadde nok prosessorkraft til å behandle et så stort antall transaksjoner. Men systemet taklet hovedoppgaven til testene godt, nemlig å demonstrere driften av Plasma Cash med MongoDB.

Vi inviterer deg på besøk GitHub prosjekt: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Artikkelen er skrevet i samarbeid med Alexander Nashivan, seniorutvikler Clever Solution Inc.

Tidligere utviklingsteam Mulighet Jeg har allerede testet hastigheten til Plasma Cash. Resultatene presenteres i denne artikkelen.

Kilde: www.habr.com

Legg til en kommentar