Testare publică a unei soluții pentru confidențialitate și scalabilitate în Ethereum pe platforme de tip cloud

Tendința blockchain-ului continuă să câștige teren. Din ce în ce mai mulți experți prezic o adaptare universală a acestei tehnologii în viitorul apropiat. În prezent, rămân nerezolvate câteva probleme care împiedică acest lucru.

În primul rând, sistemele blockchain moderne se scalabilizează prost. De exemplu, capacitatea de procesare a Ethereum este de doar 20 de tranzacții pe secundă și, în ciuda numeroaselor avantaje, nu este potrivit pentru afaceri mari.

În același timp, Ethereum este apreciat pentru protecția sa puternică împotriva atacurilor cibernetice și a defecțiunilor de rețea. Așadar, nu ar trebui să-l eliminăm de pe listă. Ar fi mai util să corectăm deficiențele Ethereum și să le transformăm în avantaje.

Testare publică a unei soluții pentru confidențialitate și scalabilitate în Ethereum pe platforme de tip cloud

Plasma Cash ca soluție pentru confidențialitate și scalabilitate în Ethereum

Plasma este o tehnologie prezentată de Vitalik Buterin, co-fondator al proiectului Ethereum, la conferința EthCC din Paris în 2018. A fost dezvoltată împreună cu Joseph Poon, co-fondator al Lightning Network, și a fost declarată ca o soluție care crește capacitatea de calcul a blockchain-ului Ethereum. Primele știri despre Plasma au apărut în media în 2017.

Această platformă reprezintă un strat extern de smart contracts capabile să interacționeze cu blockchain-ul de bază, descărcând astfel lanțul principal, reducând taxele de tranzacție pentru smart contracts și aplicații descentralizate (DApps).

Informații detaliate despre dezvoltare au fost prezentate în documentul „Plasma: Scalable Autonomous Smart Contracts”, datat din august 2017.

Buterin a recunoscut că Plasma prezintă probleme de scalabilitate: fiecare utilizator trebuie să descarce și să verifice autenticitatea fiecărui bloc Plasma, ceea ce împiedică scalarea exponențială.

Pentru a corecta această deficiență, a fost dezvoltat Plasma Cash — un lanț secundar format dintr-un smart contract și o rețea privată bazată pe Node.js, care își transmite periodic starea în lanțul principal (Ethereum). Aceasta asigură descentralizarea, securitatea și scalabilitatea în blockchain, rezolvând astfel Problema Scalabilității.

Un avantaj important al Plasma Cash în comparație cu Plasma este că atrage atenția utilizatorilor doar asupra blocurilor care conțin monedele de interes pentru ei:

„Acum utilizatorii trebuie să verifice disponibilitatea și corectitudinea lanțului Plasma doar pentru indicele special legat de monedele pe care doresc să le cheltuie, pe care le dețin și care îi interesează”, a spus Buterin.

Potrivit dezvoltatorilor, Plasma Cash este un remediu eficient împotriva hack-urilor în Ethereum. Fiecare monedă Plasma are un proprietar și este unică. Nimeni nu poate obține monedele altui utilizator fără ştirea acestuia. Deținătorul monedei poate preveni o posibilă retragere frauduloasă de fonduri prin sistemul „reclamațiilor”, prezentând „datele probatorii” în istoricul monedei sale.

Testarea Plasma Cash în Mongo Atlas

Din cauza noutății sale, Plasma Cash rămâne, deocamdată, puțin studiată. Specialiștii în blockchain testează activ interacțiunea sa cu diverse servicii cloud și baze de date, identificând deficiențele și găsind soluții pentru remedierea acestora. În special, testele din Mongo Atlas au evidențiat următoarele avantaje în lucrul cu Plasma:

  1. Protecție fiabilă împotriva pierderii datelor, deoarece mai multe replici se sincronizează între ele în cluster.
  2. Acces rapid, deoarece clusterul poate fi creat pe cele trei cele mai populare platforme cloud: Amazon, Google, Azure. Ca rezultat, un nod Plasma poate fi desfășurat în multe centre de date, situate aproape de Mongo Atlas. Am demonstrat că viteza nu scade semnificativ, chiar dacă nodurile Plasma sunt desfășurate în centre de date mai îndepărtate.
  3. Nodurile Plasma, utilizate doar în modul de citire, pot fi conectate la un singur cluster Mongo și situate în colțuri diferite ale lumii, ceea ce îmbunătățește geo-scalabilitatea (nodurile sunt mai aproape de utilizatori).
  4. Desfășurarea unui nou nod este ușoară, deoarece nu este nevoie să se resynchronizeze tot. Poate fi pur și simplu conectat la un cluster Mongo existent sau poate face rapid o copie și să configureze conexiunea la acesta.
  5. Scalarea bazei de date este ușoară. Pe măsură ce datele cresc, este posibil să se mărească dimensiunea nodurilor din cluster după necesitate.

Testare publică a unei soluții pentru confidențialitate și scalabilitate în Ethereum pe platforme de tip cloud

Am folosit următoarele servere pentru a efectua teste:

  • 3 servere virtuale Azure Standard E4s v3 (4 vcpus, 32 GiB memorie). Pe fiecare server sunt ridicate 3 noduri. Unul dintre ele poate trimite blocuri în lanțul principal.
  • Fiecare nod este conectat la propriul său cluster Mongo Atlas M50, care conține 3 noduri în modul replicat.

Test 1

3 noduri primesc câte 100k tranzacții. În total, în cele 9 noduri se află 300k tranzacții și token-uri.

Redați video

Stare inițială: ultimul bloc #213; în bază sunt salvate 0 tranzacții și token-uri.

00:00 — S-au lansat 3 scripturi care generează și trimit câte 100k tranzacții
00:29 — A început trimiterea câtorva 100k tranzacții în nodurile #1 și #2
00:32 — A început trimiterea a 100k tranzacții în nodul #3
00:32 — Nodul #1 a luat din pool 11703 tranzacții și formează blocul #214 (9fb)
00:34 — Nodul #2 a luat din pool 27088 tranzacții și formează blocul #214 (ef4)
00:34 — Blocul #214 (9fb) a fost semnat și este trimis altor noduri pentru validare
00:36 — Nodul #3 a luat din pool 11900 tranzacții și formează blocul #214 (983)
00:37 — Blocul #214 (9fb) a fost validat și trimis în lanțul rădăcină
00:38 — Blocul #214 (983) a fost semnat și este trimis altor noduri pentru validare
00:38 — Blocul #214 (ef4) a fost semnat și este trimis altor noduri pentru validare
00:40 — Blocul #214 (983) a fost validat și trimis în lanțul rădăcină
00:41 — Toate nodurile au primit din lanțul rădăcină informația că blocul #214 (9fb) a fost adăugat și încep să aplice 11703 tranzacții
00:45 — Toate nodurile au primit din lanțul rădăcină informația că blocul #215 (983) a fost adăugat și încep să aplice 11900 tranzacții
00:51 — Blocul #214 (ef4) a fost validat și trimis în lanțul rădăcină
00:52 — Nodul #1 a luat din pool 51469 tranzacții și formează blocul #216 (ea0)
00:56 — Nodul #3 a luat din pool 55102 tranzacții și formează blocul #216 (f75)
00:58 — Scriptul demo a terminat lucrul pentru nodul #2
00:58 — Blocul #216 (ea0) a fost semnat și este trimis altor noduri pentru validare
00:58 — Toate nodurile au primit din lanțul rădăcină informația că blocul #216 (ef4) a fost adăugat și încep să aplice 27088 tranzacții
01:04 — Blocul #216 (f75) a fost semnat și este trimis altor noduri pentru validare
01:14 — Nodul #2 a luat din pool 72912 tranzacții și formează blocul #217 (f85)
01:15 — Scriptul demo a terminat lucrul pentru nodurile #1 și #2
01:17 — Blocurile #216 (f75) și #216 (ea0) au fost validate și trimise în lanțul rădăcină
01:21 — Blocul #217 (f85) a fost semnat și este trimis altor noduri pentru validare
01:26 — Blocurile #217 (f75) și #218 (ea0) au fost adăugate în lanțul rădăcină iar nodurile încep să aplice 51469 și 55102 tranzacții respectiv
01:27 — Blocul #217 (a85) a fost validat și trimis în lanțul rădăcină
01:41 — Nodul #1 a luat din pool 36828 tranzacții și formează blocul #219 (46f)
01:41 — Nodul #3 a luat din pool 32998 tranzacții și formează blocul #219 (bb3)
01:43 — Toate nodurile au primit din lanțul rădăcină informația că blocul #219 (a85) a fost adăugat și încep să aplice 72912 tranzacții
01:46 — Blocul #219 (46f) a fost semnat și trimis altor noduri pentru validare
01:46 — Blocul #219 (bb3) a fost semnat și trimis altor noduri pentru validare
01:53 — Nodul #2 a procesat toate cele 100k tranzacții care erau în pool
02:37 — Blocul #219 (bb3) a fost validat și trimis în lanțul rădăcină
02:41 — Blocul #219 (46f) a fost validat și trimis în lanțul rădăcină
02:48 — Blocurile #220 (bb3) și #221 (46f) au fost adăugate în lanțul rădăcină, iar nodurile încep să aplice 32998 și 36828 tranzacții, respectiv
02:54 — Nodul #1 a procesat toate cele 100k tranzacții care erau în pool
02:55 — Nodul #3 a procesat toate cele 100k tranzacții care erau în pool
04:12 — Toate nodurile conțin câte 300k tranzacții și token-uri, ultimul bloc #221

Test 2

3 noduri primesc câte 1kk tranzacții. În total, în cele 9 noduri se află 3kk tranzacții și token-uri.

Redați video

Stare inițială: ultimul bloc #213; în bază sunt salvate 0 tranzacții și token-uri.

00:00 — Au fost lansate 3 scripturi care generează și trimit câte 1kk tranzacții
02:29 — A început trimiterea a câte 1kk tranzacții în nodurile #1 și #2
02:33 — Nodul #1 a preluat din pool 11668 tranzacții și formează blocul #222 (510)
02:35 — Blocul #222 (510) a fost semnat și trimis altor noduri pentru validare
02:37 — Blocul #222 (510) a fost validat și trimis în lanțul rădăcină
02:38 — Nodul #2 a preluat din pool 46378 tranzacții și formează blocul #222 (a9d)
02:38 — A început trimiterea a 1kk tranzacții nodului #3
02:41 — Nodul #3 a preluat din pool 5504 tranzacții și formează blocul #222 (387)
02:42 — Blocul #222 (387) a fost semnat și trimis altor noduri pentru validare
02:44 — Blocul #222 (a9d) a fost semnat și trimis altor noduri pentru validare
02:44 — Blocul #222 (387) a fost validat și trimis în lanțul rădăcină
02:49 — Blocul #222 (a9d) a fost validat și trimis în lanțul rădăcină
02:56 — Blocurile #222 (510), #223 (387) și #224 (a9d) au fost adăugate în lanțul rădăcină, iar nodurile încep să aplice 11668, 5504 și 46378 tranzacții, respectiv
03:09 — Nodul #1 a preluat din pool 177170 tranzacții și formează blocul #225 (e50)
03:09 — Nodul #3 a preluat din pool 119327 tranzacții și formează blocul #225 (ccc)
03:10 — Nodul #2 a preluat din pool 149772 tranzacții și formează blocul #225 (404)
03:26 — Blocul #225 (ccc) a fost semnat și trimis altor noduri pentru validare
03:32 — Blocul #225 (404) a fost semnat și trimis altor noduri pentru validare
03:33 — Blocul #225 (e50) a fost semnat și trimis altor noduri pentru validare
03:53 — Blocul #225 (ccc) a fost validat și trimis în lanțul rădăcină
04:03 — Blocul #225 (e50) a fost validat și trimis în lanțul principal
04:04 — Blocul #225 (404) a fost validat și trimis în lanțul principal
04:06 — Toate nodurile au primit din lanțul principal informații că blocul #225 (ccc) a fost adăugat și încep să aplice 119327 de tranzacții
04:14 — Toate nodurile au primit din lanțul principal informații că blocul #226 (404) a fost adăugat și încep să aplice 149772 de tranzacții
04:16 — Toate nodurile au primit din lanțul principal informații că blocul #227 (e50) a fost adăugat și încep să aplice 177170 de tranzacții
04:32 — Nodul #3 a preluat din pool 209436 de tranzacții și formează blocul #228 (1e9)
04:40 — Nodul #2 a preluat din pool 212669 de tranzacții și formează blocul #228 (e38)
04:40 — Nodul #1 a preluat din pool 190144 de tranzacții și formează blocul #228 (861)
05:02 — Blocul #228 (1e9) a fost semnat și trimis altor noduri pentru validare
05:08 — Blocul #228 (861) a fost semnat și trimis altor noduri pentru validare
05:10 — Blocul #228 (e38) a fost semnat și trimis altor noduri pentru validare
06:13 — Blocul #228 (1e9) a fost validat și trimis în lanțul principal
06:13 — Blocul #228 (861) a fost validat și trimis în lanțul principal
06:13 — Blocul #228 (e38) a fost validat și trimis în lanțul principal
06:39 — Blocurile #228 (861), #229 (1e9) și #230 (e38) au fost adăugate în lanțul principal și nodurile încep să aplice 190144, 209436 și 212669 de tranzacții, respectiv
07:07 — Nodul #1 a preluat din pool 199770 de tranzacții și formează blocul #231 (e04)
07:09 — Nodul #2 a preluat din pool 190473 de tranzacții și formează blocul #231 (36e)
07:09 — Nodul #3 a preluat din pool 178807 de tranzacții și formează blocul #231 (f43)
07:34 — Blocul #231 (e04) a fost semnat și trimis altor noduri pentru validare
07:37 — Blocul #231 (36e) a fost semnat și trimis altor noduri pentru validare
07:37 — Blocul #231 (f43) a fost semnat și trimis altor noduri pentru validare
08:49 — Blocul #231 (e04) a fost validat și trimis în lanțul principal
08:51 — Blocul #231 (f43) a fost validat și trimis în lanțul principal
08:52 — Blocul #231 (36e) a fost validat și trimis în lanțul principal
09:47 — Blocurile #231 (e04), #232 (f43) și #233 (36e) au fost adăugate în lanțul principal și nodurile încep să aplice 199770, 178807 și 190473 de tranzacții, respectiv
10:16 — Nodul #1 a preluat din pool 153075 de tranzacții și formează blocul #234 (e04)
10:16 — Nodul #2 a preluat din pool 168035 de tranzacții și formează blocul #234 (36e)
10:16 — Nodul #3 a preluat din pool 166685 de tranzacții și formează blocul #234 (f43)
10:42 — Blocul #234 (56d) a fost semnat și trimis altor noduri pentru validare
11:59 — Bloc #234 (1bb) a fost validat și trimis în lanțul rădăcină
12:02 — Bloc #234 (58a) a fost validat și trimis în lanțul rădăcină
12:02 — Bloc #234 (56d) a fost validat și trimis în lanțul rădăcină
12:48 — Blocurile #234 (1bb), #235 (58a) și #236 (56d) au fost adăugate în lanțul rădăcină și nodurile încep să aplice 153075, 168035 și 166685 de tranzacții, respectiv
13:14 — Nodul #1 a preluat din pool 112226 de tranzacții și formează blocul #237 (5c0)
13:16 — Nodul #2 a preluat din pool 87550 de tranzacții și formează blocul #234 (58a)
13:16 — Nodul #3 a preluat din pool 99594 de tranzacții și formează blocul #234 (56d)
13:30 — Blocul #237 (5c0) a fost semnat și este trimis altor noduri pentru validare
13:32 — Blocul #237 (58a) a fost semnat și este trimis altor noduri pentru validare
13:34 — Blocul #237 (56d) a fost semnat și este trimis altor noduri pentru validare
14:47 — Blocul #237 (58a) a fost validat și trimis în lanțul rădăcină
14:53 — Blocul #237 (5c0) nu a fost validat în timpul specificat
14:53 — Toate nodurile au primit din lanțul rădăcină informații că blocul #237 (58a) a fost adăugat și încep să aplice 87550 de tranzacții
14:54 — Blocul #237 (56d) a fost validat și trimis în lanțul rădăcină
15:02 — Nodul #1 a preluat din pool 181206 de tranzacții și formează blocul #238 (c5f)
15:06 — Toate nodurile au primit din lanțul rădăcină informații că blocul #238 (56d) a fost adăugat și încep să aplice 99594 de tranzacții
15:12 — Nodul #2 a preluat din pool 51990 de tranzacții și formează blocul #239 (ad8)
15:20 — Blocul #239 (ad8) a fost semnat și este trimis altor noduri pentru validare
15:25 — Nodul #3 a preluat din pool 46685 de tranzacții și formează blocul #239 (857)
15:30 — Blocul #238 (c5f) a fost semnat și este trimis altor noduri pentru validare
15:34 — Blocul #239 (857) a fost semnat și este trimis altor noduri pentru validare
16:32 — Blocul #239 (857) a fost validat și trimis în lanțul rădăcină
16:42 — Toate nodurile au primit din lanțul rădăcină informații că blocul #239 (857) a fost adăugat și încep să aplice 46685 de tranzacții
16:42 — Blocul #238 (c5f) a fost validat și trimis în lanțul rădăcină
16:42 — Blocul #239 (ad8) nu a fost validat în timpul specificat
16:54 — Nodul #2 a preluat din pool 96882 de tranzacții și formează blocul #240 (e6e)
16:56 — Nodul #3 a preluat din pool 39704 de tranzacții și formează blocul #240 (a47)
17:02 — Blocul #240 (a47) a fost semnat și este trimis altor noduri pentru validare
17:02 — Blocul #240 (e6e) a fost semnat și este trimis altor noduri pentru validare
17:18 — Toate nodurile au primit din lanțul rădăcină informația că blocul #240 (c5f) a fost adăugat și încep să aplice 181206 tranzacții
17:45 — Blocul #240 (a47) a fost validat și trimis în lanțul rădăcină
17:47 — Nodul #1 a preluat din pool 54956 tranzacții și formează blocul #241 (170)
17:59 — Blocul #241 (170) a fost semnat și trimis altor noduri pentru validare
18:09 — Toate nodurile au primit din lanțul rădăcină informația că blocul #241 (a47) a fost adăugat și încep să aplice 181206 tranzacții
18:20 — Nodul #3 a preluat din pool 39104 tranzacții și formează blocul #242 (955)
18:24 — Blocul #240 (e6e) a fost validat și trimis în lanțul rădăcină
18:28 — Blocul #242 (955) a fost semnat și trimis altor noduri pentru validare
18:09 — Toate nodurile au primit din lanțul rădăcină informația că blocul #242 (e6e) a fost adăugat și încep să aplice 96882 tranzacții
19:06 — Scriptul demo și-a finalizat activitatea pentru nodul #1
19:08 — Scriptul demo și-a finalizat activitatea pentru nodul #2
19:08 — Nodul #2 a preluat din pool 48241 tranzacții și formează blocul #243 (fde)
19:14 — Blocul #243 (fde) a fost semnat și trimis altor noduri pentru validare
19:18 — Blocul #241 (170) nu a fost validat în timpul specificat
19:28 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #243 (37c)
19:35 — Blocul #242 (955) a fost validat și trimis în lanțul rădăcină
19:40 — Blocul #243 (37c) a fost semnat și trimis altor noduri pentru validare
20:05 — Toate nodurile au primit din lanțul rădăcină informația că blocul #243 (955) a fost adăugat și încep să aplice 39104 tranzacții
20:15 — Blocul #243 (fde) a fost validat și trimis în lanțul rădăcină
20:19 — Nodul #3 a preluat din pool 42981 tranzacții și formează blocul #244 (9b5)
20:26 — Blocul #244 (9b5) a fost semnat și trimis altor noduri pentru validare
20:28 — toate nodurile au primit din lanțul rădăcină informația că blocul #244 (fde) a fost adăugat și încep să aplice 48241 tranzacții
20:32 — Nodul #2 a procesat toate cele 1kk tranzacții care erau în pool
21:05 — Blocul #243 (37c) nu a fost validat în timpul specificat
21:15 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #245 (37c)
21:32 — Blocul #245 (37c) a fost semnat și trimis altor noduri pentru validare
21:42 — Blocul #244 (9b5) a fost validat și trimis în lanțul rădăcină
21:50 — Toate nodurile au primit din lanțul rădăcină informația că blocul #245 (9b5) a fost adăugat și încep să aplice 42981 tranzacții
22:04 — Nodul #3 a preluat din pool 45361 tranzacții și formează blocul #246 (3f9)
22:11 — Blocul #246 (3f9) a fost semnat și trimis altor noduri pentru validare
22:51 — Blocul #245 (37c) nu a fost validat în timpul specificat
23:01 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #246 (37c)
23:08 — Scriptul demo și-a încheiat activitatea pentru nodul #3
23:15 — Blocul #246 (37c) a fost semnat și trimis altor noduri pentru validare
23:32 — Blocul #246 (3f9) nu a fost validat în timpul specificat
23:42 — Nodul #3 a preluat din pool 52173 tranzacții și formează blocul #246 (71d)
23:51 — Blocul #246 (71d) a fost semnat și trimis altor noduri pentru validare
24:38 — Blocul #246 (37c) nu a fost validat în timpul specificat
25:01 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #246 (37c)
25:06 — Blocul #246 (71d) a fost validat și trimis în lanțul principal
25:12 — Blocul #246 (37c) a fost semnat și trimis altor noduri pentru validare
25:14 — Toate nodurile au primit din lanțul principal informații că blocul #246 (71d) a fost adăugat și încep să aplice 52173 tranzacții
25:29 — Nodul #3 a procesat toate cele 1M de tranzacții care erau în pool
26:40 — Blocul #247 (37c) nu a fost validat în timpul specificat
26:47 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #247 (37c)
27:03 — Blocul #247 (37c) a fost semnat și trimis altor noduri pentru validare
28:29 — Blocul #247 (37c) nu a fost validat în timpul specificat
28:35 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #247 (37c)
28:49 — Blocul #247 (37c) a fost semnat și trimis altor noduri pentru validare
30:13 — Blocul #247 (37c) nu a fost validat în timpul specificat
30:23 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #247 (37c)
30:38 — Blocul #247 (37c) a fost semnat și trimis altor noduri pentru validare
32:00 — Blocul #247 (37c) nu a fost validat în timpul specificat
32:11 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #247 (37c)
32:26 — Blocul #247 (37c) a fost semnat și trimis altor noduri pentru validare
33:49 — Blocul #247 (37c) nu a fost validat în timpul specificat
33:59 — Nodul #1 a preluat din pool 86967 tranzacții și formează blocul #247 (37c)
34:12 — Blocul #247 (37c) a fost semnat și trimis altor noduri pentru validare
35:34 — Blocul #247 (37c) a fost validat și trimis în lanțul principal
35:54 — Toate nodurile au primit din lanțul principal informații că blocul #247 (37c) a fost adăugat și încep să aplice 86967 tranzacții
36:11 — Nodul #1 a procesat toate cele 1M de tranzacții care erau în pool
55:12 — primul nod a procesat toate cele 3M de tranzacții

Testare publică a unei soluții pentru confidențialitate și scalabilitate în Ethereum pe platforme de tip cloud

Concluzii

S-a constatat că serverele virtuale Azure au putere de procesare insuficientă pentru a gestiona un astfel de volum de tranzacții. Totuși, cu sarcina principală a testelor, și anume de a demonstra funcționarea Plasma Cash cu MongoDB, sistemul s-a descurcat bine.

Vă invităm să vizitați GitHub proiectul: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Articolul a fost scris în colaborare cu Alexandru Nașivan, dezvoltator senior Clever Solution Inc.

Anterior, echipa de dezvoltatori Opporty a testat deja viteza Plasma Cash. Rezultatele sunt prezentate în acest articol.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster