Testarea publică a soluției de confidențialitate și scalabilitate Ethereum pe platformele cloud

Блокчейн тренд продолжает набирать обороты. Все больше экспертов прогнозируют универсальную адаптацию данной технологии в скором будущем. На данный момент нерешенными остаются несколько проблем, препятствующих этому.

Прежде всего, современные блокчейн системы плохо масштабируются. Например, пропускная способность Эфириума составляет всего 20 транзакций в секунду, и, несмотря на многочисленные преимущества, он не подходит для крупного бизнеса.

В то же время, Эфириум ценится за мощную защиту от взлома и сбоев сети. Так что не следует списывать его со счетов. Куда целесообразнее исправить недостатки Эфириума и превратить их в преимущества.

Testarea publică a soluției de confidențialitate și scalabilitate Ethereum pe platformele cloud

Plasma Cash как решение для конфиденциальности и масштабируемости в Эфириуме

Plasma – технология, представленная Виталиком Бутериным, сооснователем проекта Ethereum, на конференции EthCC в Париже в 2018. Она была разработана совместно с Джозефом Пуном, сооснователем Lightning Network, и заявлена как решение, увеличивающее вычислительную мощность блокчейна Эфириум. Первые новости о Plasma просочились в медиа в 2017.

Această platformă oferă un strat extern de contracte inteligente care pot interacționa cu blockchain-ul principal, descarcând astfel lanțul rădăcină, reducând taxele de tranzacție pentru contractele inteligente și aplicațiile descentralizate (DApps).

Informații detaliate despre dezvoltare au fost prezentate în documentul „Plasma: contracte inteligente autonome scalabile", din august 2017.

Buterin a recunoscut că Plasma are probleme inerente de scalabilitate: fiecare utilizator trebuie să descarce și să autentifice fiecare bloc Plasma, ceea ce previne scalarea exponențială.

Pentru a corecta acest neajuns, a fost dezvoltat Plasma Cash - un lanț copil format dintr-un contract inteligent și o rețea privată bazată pe Node.js, care își transferă periodic starea la lanțul rădăcină (Ethereum). Oferă descentralizare, securitate și scalabilitate în blockchain, rezolvând astfel Trilema Scalabilității.

Un avantaj important al Plasma Cash în comparație cu Plasma este că atrage atenția utilizatorilor doar asupra acelor blocuri care conțin monedele de care sunt interesați:

„Utilizatorii trebuie acum să verifice disponibilitatea și validitatea lanțului Plasma pentru indexul specific asociat cu monedele pe care doresc să le cheltuiască, să le dețină și de care sunt interesați”, a spus Buterin.

Potrivit dezvoltatorilor, Plasma Cash este un remediu eficient pentru hack-uri în Ethereum. Fiecare monedă de plasmă are un proprietar și este unică. Nimeni nu poate intra în posesia monedelor altui utilizator fără știrea acestuia. Un deținător de monede poate preveni potențialele retrageri frauduloase prin intermediul sistemului de „reclamații” prin prezentarea „datelor de probă” în istoricul monedei sale.

Testarea numerarului cu plasmă în Mongo Atlas

Datorită noutății, Plasma Cash rămâne puțin studiat. Experții în blockchain testează în mod activ interacțiunea acestuia cu diverse servicii cloud și baze de date, identificând deficiențele și găsind modalități de a le corecta. În special, testele din Mongo Atlas au relevat următoarele avantaje atunci când lucrați cu Plasma:

  1. Protecție fiabilă împotriva pierderii datelor, deoarece există mai multe replici care se sincronizează între ele în cluster.
  2. Acces rapid, deoarece un cluster poate fi creat pe cele mai populare trei platforme cloud: Amazon, Google, Azure. Ca rezultat, nodul Plasma Cash poate fi implementat în multe centre de date situate în apropiere de Mongo Atlas. Am demonstrat că viteza nu scade mult, chiar dacă nodurile cu plasmă sunt implementate în centre de date mai îndepărtate.
  3. Nodurile de plasmă, utilizate în modul numai citire, pot fi conectate la un cluster Mongo și situate în diferite părți ale lumii, care îmbunătățește geo-scalabilitatea (nodurile sunt mai aproape de utilizatori).
  4. Implementarea unui nou nod este ușoară, deoarece nu trebuie să resincronizați totul. Vă puteți conecta pur și simplu la un cluster Mongo existent sau puteți face rapid o copie și configura o conexiune la acesta.
  5. Este ușor să vă scalați baza de date. În timp, mai multe date devin disponibile și puteți crește dimensiunea nodurilor din cluster, după cum este necesar.

Testarea publică a soluției de confidențialitate și scalabilitate Ethereum pe platformele cloud

Am folosit următoarele servere pentru a efectua teste:

  • 3 servere virtuale Azure Standard E4s v3 (4 vcpus, 32 GiB memorie). Fiecare server are 3 noduri. Unul dintre ei poate trimite blocuri la lanțul rădăcină.
  • Fiecare nod este conectat la propriul cluster Mongo Atlas M50 care conține 3 noduri în modul replica.

Testul 1

3 noduri primesc fiecare 100 de tranzacții. În total, toate cele 9 noduri conțin 300 de tranzacții și jetoane.


Starea initiala: ultimul bloc #213; 0 tranzacții și jetoane sunt salvate în baza de date.

00:00 — Sunt lansate 3 scripturi care generează și trimit 100 de tranzacții fiecare
00:29 — Trimiterea a 100 de tranzacții către nodurile #1 și #2 a început
00:32 — A început trimiterea a 100 de tranzacții către nodul #3
00:32 — Nodul #1 a preluat 11703 tranzacții din grup și formează blocul #214 (9fb)
00:34 — Nodul #2 a preluat 27088 tranzacții din grupul și blocul de formulare #214 (ef4)
00:34 — Blocul #214 (9fb) este semnat și trimis către alte noduri pentru validare
00:36 — Nodul #3 a preluat 11900 de tranzacții din grupul și blocul de formulare #214 (983)
00:37 — Blocul #214 (9fb) este validat și trimis la lanțul rădăcină
00:38 — Blocul #214 (983) este semnat și trimis către alte noduri pentru validare
00:38 — Blocul #214 (ef4) este semnat și trimis către alte noduri pentru validare
00:40 — Blocul #214 (983) este validat și trimis la lanțul rădăcină
00:41 — Toate nodurile au primit informații de la lanțul rădăcină care a fost adăugat blocul #214 (9fb) și au început să aplice 11703 tranzacții
00:45 — Toate nodurile au primit informații de la lanțul rădăcină care a fost adăugat blocul #215 (983) și au început să aplice 11900 de tranzacții
00:51 — Blocul #214 (ef4) este validat și trimis la lanțul rădăcină
00:52 — Nodul #1 a preluat 51469 de tranzacții din pool și formează blocul #216 (ea0)
00:56 — Nodul #3 a preluat 55102 tranzacții din pool și blocul de formulare #216 (f75)
00:58 — Scriptul demonstrativ și-a încheiat activitatea pentru nodul #2
00:58 — Blocul #216 (ea0) este semnat și trimis către alte noduri pentru validare
00:58 — Toate nodurile au primit informații de la lanțul rădăcină care blocul #216 (ef4) a fost adăugat și încep să aplice 27088 tranzacții
01:04 — Blocul #216 (f75) este semnat și trimis la alte noduri pentru validare
01:14 — Nodul #2 a preluat 72912 tranzacții din pool și blocul de formulare #217 (f85)
01:15 — Scriptul demonstrativ a terminat de funcționat pentru nodurile #1 și #2
01:17 — Blocurile #216 (f75) și #216 (ea0) sunt validate și trimise la lanțul rădăcină
01:21 — Blocul #217 (f85) este semnat și trimis către alte noduri pentru validare
01:26 - Blocurile #217 (f75) și #218 (ea0) sunt adăugate la lanțul rădăcină și nodurile încep să aplice tranzacțiile 51469 și respectiv 55102
01:27 — Blocul #217 (a85) este validat și trimis la lanțul rădăcină
01:41 — Nodul #1 a preluat 36828 de tranzacții din grupul și blocul de formulare #219 (46f)
01:41 — Nodul #3 a preluat 32998 tranzacții din grupul și blocul de formulare #219 (bb3)
01:43 — Toate nodurile au primit informații de la lanțul rădăcină care blocul #219 (a85) a fost adăugat și încep să aplice 72912 tranzacții
01:46 — Blocul #219 (46f) este semnat și trimis către alte noduri pentru validare
01:46 — Blocul #219 (bb3) este semnat și trimis către alte noduri pentru validare
01:53 — Nodul #2 a procesat toate cele 100 tranzacții care se aflau în pool
02:37 — Blocul #219 (bb3) este validat și trimis la lanțul rădăcină
02:41 — Blocul #219 (46f) este validat și trimis la lanțul rădăcină
02:48 — Blocurile #220 (bb3) și #221 (46f) sunt adăugate la lanțul rădăcină și nodurile încep să aplice tranzacțiile 32998 și, respectiv, 36828
02:54 — Nodul #1 a procesat toate cele 100 tranzacții care se aflau în pool
02:55 — Nodul #3 a procesat toate cele 100 tranzacții care se aflau în pool
04:12 — Toate nodurile conțin 300 de tranzacții și jetoane, ultimul bloc #221

Testul 2

3 noduri primesc 1 kk tranzacții fiecare. În total, toate cele 9 noduri conțin 3k tranzacții și jetoane.

Starea initiala: ultimul bloc #213; 0 tranzacții și jetoane sunt salvate în baza de date.

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

Testarea publică a soluției de confidențialitate și scalabilitate Ethereum pe platformele cloud

Rezultatele

S-a descoperit că serverele virtuale Azure nu aveau suficientă putere de procesare pentru a procesa un număr atât de mare de tranzacții. Dar sistemul a făcut față bine sarcinii principale a testelor, și anume de a demonstra funcționarea Plasma Cash cu MongoDB.

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

Articolul a fost co-scris de Alexandru Nashivan, dezvoltator senior Clever Solution Inc.

Anterior echipa de dezvoltare Ocazie Am testat deja viteza Plasma Cash. Rezultatele sunt prezentate în Acest articol.

Sursa: www.habr.com

Adauga un comentariu