Tests publics d'une solution de confidentialité et d'évolutivité sur Ethereum sur des plateformes cloud

La tendance de la blockchain continue de gagner en momentum. De plus en plus d'experts prévoient une adoption universelle de cette technologie dans un avenir proche. Actuellement, plusieurs problèmes restent non résolus, entravant cette adoption.

Tout d'abord, les systèmes blockchain modernes peinent à se scalabiliser. Par exemple, la capacité de traitement d'Ethereum n'est que de 20 transactions par seconde, et malgré de nombreux avantages, il n'est pas adapté aux grandes entreprises.

En même temps, Ethereum est apprécié pour sa puissante protection contre le piratage et les pannes réseau. Il ne faut donc pas le sous-estimer. Il serait plus judicieux de corriger les défauts d'Ethereum et de les transformer en atouts.

Tests publics d'une solution de confidentialité et d'évolutivité sur Ethereum sur des plateformes cloud

Plasma Cash comme solution pour la confidentialité et la scalabilité sur Ethereum

Plasma est une technologie présentée par Vitalik Buterin, cofondateur du projet Ethereum, lors de la conférence EthCC à Paris en 2018. Elle a été développée en collaboration avec Joseph Poon, cofondateur de Lightning Network, et est annoncée comme une solution augmentant la puissance de calcul de la blockchain Ethereum. Les premières nouvelles sur Plasma ont fuité dans les médias en 2017.

Cette plateforme représente un niveau externe de contrats intelligents pouvant interagir avec la blockchain principale, allégeant ainsi la chaîne racine, réduisant les frais de transaction pour les contrats intelligents et les applications décentralisées (DApps).

Des informations détaillées sur le développement ont été exposées dans le document «Plasma : Smart Contracts Autonomes Scalables», daté d'août 2017.

Buterin a reconnu que Plasma souffrait de problèmes de scalabilité : chaque utilisateur doit télécharger et vérifier l'authenticité de chaque bloc Plasma, ce qui empêche un scalabilité exponentielle.

Pour remédier à ce défaut, Plasma Cash a été développé — une chaîne enfant composée d'un contrat intelligent et d'un réseau privé basé sur Node.js, transmettant périodiquement son état à la chaîne racine (Ethereum). Cela assure décentralisation, sécurité et scalabilité de la blockchain, résolvant ainsi le problème de la Triade de la Scalabilité.

Un avantage important de Plasma Cash par rapport à Plasma est qu'il ne focalise l'attention des utilisateurs que sur les blocs contenant les pièces qui les intéressent :

«Les utilisateurs doivent maintenant vérifier la disponibilité et l'exactitude de la chaîne Plasma uniquement pour l'index spécial associé aux pièces qu'ils souhaitent dépenser, qu'ils possèdent et qui les intéressent», a déclaré Buterin.

Selon les développeurs, Plasma Cash est un remède efficace contre les piratages dans Ethereum. Chaque pièce Plasma a un propriétaire et est unique. Personne ne peut s'emparer des pièces d'un autre utilisateur sans son consentement. Le titulaire de la pièce peut empêcher un retrait frauduleux potentiel grâce à un système de «plaintes», en soumettant ses «données de preuve» dans l'historique de sa pièce.

Test de Plasma Cash sur Mongo Atlas

En raison de sa nouveauté, Plasma Cash reste pour l'instant peu étudié. Les spécialistes en blockchain testent activement son interaction avec divers services cloud et bases de données, identifiant les défauts et trouvant des solutions. En particulier, les tests sur Mongo Atlas ont révélé les avantages suivants lors de l'utilisation de Plasma :

  1. Protection fiable contre la perte de données, car plusieurs répliques se synchronisent entre elles dans le cluster.
  2. Accès rapide, car le cluster peut être créé sur trois des plateformes cloud les plus populaires : Amazon, Google, Azure. En conséquence, un nœud Plasma Cash peut être déployé dans de nombreux centres de données situés près de Mongo Atlas. Nous avons prouvé que la vitesse ne diminue pas beaucoup, même si les nœuds Plasma sont déployés dans des centres de données plus éloignés.
  3. Les nœuds Plasma utilisés uniquement en mode lecture peuvent être connectés à un même cluster Mongo et situés aux quatre coins du monde, ce qui améliore la géo-scalabilité (les nœuds se rapprochent des utilisateurs).
  4. Déployer un nouveau nœud est facile, car il n'est pas nécessaire de tout synchroniser à nouveau. On peut simplement se connecter à un cluster Mongo existant ou rapidement faire une copie et configurer la connexion à celui-ci.
  5. Il est facile d'évoluer la base de données. Au fil du temps, les données augmentent et il est possible d'augmenter la taille des nœuds dans le cluster selon les besoins.

Tests publics d'une solution de confidentialité et d'évolutivité sur Ethereum sur des plateformes cloud

Nous avons utilisé les serveurs suivants pour les tests :

  • 3 serveurs virtuels Azure Standard E4s v3 (4 vcpus, 32 GiB de mémoire). Sur chaque serveur, 3 nœuds sont lancés. L'un d'eux peut soumettre des blocs à la chaîne racine.
  • Chaque nœud est connecté à son propre cluster Mongo Atlas M50, contenant 3 nœuds en mode réplique.

Test 1

3 nœuds traitent chacun 100k transactions. Au total, les 9 nœuds contiennent 300k transactions et jetons.

Lire la vidéo

État initial: dernier bloc #213; aucune transaction et aucun jeton enregistré dans la base.

00:00 — 3 scripts lancés, générant et envoyant chacun 100k transactions
00:29 — Début de l'envoi de 100k transactions aux nœuds #1 et #2
00:32 — Début de l'envoi de 100k transactions au nœud #3
00:32 — Le nœud #1 a pris 11703 transactions du pool et forme le bloc #214 (9fb)
00:34 — Le nœud #2 a pris 27088 transactions du pool et forme le bloc #214 (ef4)
00:34 — Le bloc #214 (9fb) est signé et envoyé aux autres nœuds pour validation
00:36 — Le nœud #3 a pris 11900 transactions du pool et forme le bloc #214 (983)
00:37 — Le bloc #214 (9fb) a été validé et envoyé à la chaîne racine
00:38 — Le bloc #214 (983) est signé et envoyé aux autres nœuds pour validation
00:38 — Le bloc #214 (ef4) est signé et envoyé aux autres nœuds pour validation
00:40 — Le bloc #214 (983) a été validé et envoyé à la chaîne racine
00:41 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #214 (9fb) a été ajouté et commencent à appliquer 11703 transactions
00:45 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #215 (983) a été ajouté et commencent à appliquer 11900 transactions
00:51 — Le bloc #214 (ef4) a été validé et envoyé à la chaîne racine
00:52 — Le nœud #1 a pris 51469 transactions du pool et forme le bloc #216 (ea0)
00:56 — Le nœud #3 a pris 55102 transactions du pool et forme le bloc #216 (f75)
00:58 — Le script de démonstration a terminé son travail pour le nœud #2
00:58 — Le bloc #216 (ea0) est signé et envoyé aux autres nœuds pour validation
00:58 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #216 (ef4) a été ajouté et commencent à appliquer 27088 transactions
01:04 — Le bloc #216 (f75) est signé et envoyé aux autres nœuds pour validation
01:14 — Le nœud #2 a pris 72912 transactions du pool et forme le bloc #217 (f85)
01:15 — Le script de démonstration a terminé son travail pour les nœuds #1 et #2
01:17 — Les blocs #216 (f75) et #216 (ea0) ont été validés et envoyés à la chaîne racine
01:21 — Le bloc #217 (f85) est signé et envoyé aux autres nœuds pour validation
01:26 — Les blocs #217 (f75) et #218 (ea0) ont été ajoutés à la chaîne racine et les nœuds commencent à appliquer respectivement 51469 et 55102 transactions
01:27 — Le bloc #217 (a85) a été validé et envoyé à la chaîne racine
01:41 — Le nœud #1 a pris 36828 transactions du pool et forme le bloc #219 (46f)
01:41 — Le nœud #3 a pris 32998 transactions du pool et forme le bloc #219 (bb3)
01:43 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #219 (a85) a été ajouté et commencent à appliquer 72912 transactions
01:46 — Le bloc #219 (46f) a été signé et est envoyé aux autres nœuds pour validation
01:46 — Le bloc #219 (bb3) a été signé et est envoyé aux autres nœuds pour validation
01:53 — Le nœud #2 a traité toutes les 100k transactions qui étaient dans le pool
02:37 — Le bloc #219 (bb3) a été validé et envoyé à la chaîne racine
02:41 — Le bloc #219 (46f) a été validé et envoyé à la chaîne racine
02:48 — Les blocs #220 (bb3) et #221 (46f) ont été ajoutés à la chaîne racine et les nœuds commencent à appliquer respectivement 32998 et 36828 transactions
02:54 — Le nœud #1 a traité toutes les 100k transactions qui étaient dans le pool
02:55 — Le nœud #3 a traité toutes les 100k transactions qui étaient dans le pool
04:12 — Tous les nœuds contiennent chacun 300k transactions et le dernier bloc #221

Test 2

3 nœuds reçoivent 1kk transactions chacun. Au total, il y a 3kk transactions et tokens dans les 9 nœuds.

Lire la vidéo

État initial: dernier bloc #213; aucune transaction et aucun jeton enregistré dans la base.

00:00 — 3 scripts ont été lancés, générant et envoyant chacun 1kk transactions
02:29 — L'envoi de 1kk transactions aux nœuds #1 et #2 a commencé
02:33 — Le nœud #1 a pris 11668 transactions du pool et forme le bloc #222 (510)
02:35 — Le bloc #222 (510) a été signé et envoyé aux autres nœuds pour validation
02:37 — Le bloc #222 (510) a été validé et envoyé à la chaîne racine
02:38 — Le nœud #2 a pris 46378 transactions du pool et forme le bloc #222 (a9d)
02:38 — L'envoi de 1kk transactions au nœud #3 a commencé
02:41 — Le nœud #3 a pris 5504 transactions du pool et forme le bloc #222 (387)
02:42 — Le bloc #222 (387) a été signé et envoyé aux autres nœuds pour validation
02:44 — Le bloc #222 (a9d) a été signé et envoyé aux autres nœuds pour validation
02:44 — Le bloc #222 (387) a été validé et envoyé à la chaîne racine
02:49 — Le bloc #222 (a9d) a été validé et envoyé à la chaîne racine
02:56 — Les blocs #222 (510), #223 (387) et #224 (a9d) ont été ajoutés à la chaîne racine et les nœuds commencent à appliquer respectivement 11668, 5504 et 46378 transactions
03:09 — Le nœud #1 a pris 177170 transactions du pool et forme le bloc #225 (e50)
03:09 — Le nœud #3 a pris 119327 transactions du pool et forme le bloc #225 (ccc)
03:10 — Le nœud #2 a pris 149772 transactions du pool et forme le bloc #225 (404)
03:26 — Le bloc #225 (ccc) a été signé et envoyé aux autres nœuds pour validation
03:32 — Le bloc #225 (404) a été signé et envoyé aux autres nœuds pour validation
03:33 — Le bloc #225 (e50) a été signé et envoyé aux autres nœuds pour validation
03:53 — Le bloc #225 (ccc) a été validé et envoyé à la chaîne racine
04:03 — Bloc #225 (e50) validé et envoyé dans la chaîne principale
04:04 — Bloc #225 (404) validé et envoyé dans la chaîne principale
04:06 — Tous les nœuds ont reçu de la chaîne principale des informations indiquant que le bloc #225 (ccc) a été ajouté et commencent à appliquer 119327 transactions
04:14 — Tous les nœuds ont reçu de la chaîne principale des informations indiquant que le bloc #226 (404) a été ajouté et commencent à appliquer 149772 transactions
04:16 — Tous les nœuds ont reçu de la chaîne principale des informations indiquant que le bloc #227 (e50) a été ajouté et commencent à appliquer 177170 transactions
04:32 — Nœud #3 a pris 209436 transactions depuis le pool et forme le bloc #228 (1e9)
04:40 — Nœud #2 a pris 212669 transactions depuis le pool et forme le bloc #228 (e38)
04:40 — Nœud #1 a pris 190144 transactions depuis le pool et forme le bloc #228 (861)
05:02 — Bloc #228 (1e9) signé et envoyé aux autres nœuds pour validation
05:08 — Bloc #228 (861) signé et envoyé aux autres nœuds pour validation
05:10 — Bloc #228 (e38) signé et envoyé aux autres nœuds pour validation
06:13 — Bloc #228 (1e9) validé et envoyé dans la chaîne principale
06:13 — Bloc #228 (861) validé et envoyé dans la chaîne principale
06:13 — Bloc #228 (e38) validé et envoyé dans la chaîne principale
06:39 — Les blocs #228 (861), #229 (1e9) et #230 (e38) ont été ajoutés à la chaîne principale et les nœuds commencent à appliquer 190144, 209436 et 212669 transactions respectivement
07:07 — Nœud #1 a pris 199770 transactions depuis le pool et forme le bloc #231 (e04)
07:09 — Nœud #2 a pris 190473 transactions depuis le pool et forme le bloc #231 (36e)
07:09 — Nœud #3 a pris 178807 transactions depuis le pool et forme le bloc #231 (f43)
07:34 — Bloc #231 (e04) signé et envoyé aux autres nœuds pour validation
07:37 — Bloc #231 (36e) signé et envoyé aux autres nœuds pour validation
07:37 — Bloc #231 (f43) signé et envoyé aux autres nœuds pour validation
08:49 — Bloc #231 (e04) validé et envoyé dans la chaîne principale
08:51 — Bloc #231 (f43) validé et envoyé dans la chaîne principale
08:52 — Bloc #231 (36e) validé et envoyé dans la chaîne principale
09:47 — Les blocs #231 (e04), #232 (f43) et #233 (36e) ont été ajoutés à la chaîne principale et les nœuds commencent à appliquer 199770, 178807 et 190473 transactions respectivement
10:16 — Nœud #1 a pris 153075 transactions depuis le pool et forme le bloc #234 (e04)
10:16 — Nœud #2 a pris 168035 transactions depuis le pool et forme le bloc #234 (36e)
10:16 — Nœud #3 a pris 166685 transactions depuis le pool et forme le bloc #234 (f43)
10:42 — Bloc #234 (56d) signé et envoyé aux autres nœuds pour validation
11:59 — Le bloc #234 (1bb) a été validé et envoyé dans la chaîne principale
12:02 — Le bloc #234 (58a) a été validé et envoyé dans la chaîne principale
12:02 — Le bloc #234 (56d) a été validé et envoyé dans la chaîne principale
12:48 — Les blocs #234 (1bb), #235 (58a) et #236 (56d) ont été ajoutés à la chaîne principale et les nœuds commencent à appliquer respectivement 153075, 168035 et 166685 transactions
13:14 — Le nœud #1 a pris du pool 112226 transactions et forme le bloc #237 (5c0)
13:16 — Le nœud #2 a pris du pool 87550 transactions et forme le bloc #234 (58a)
13:16 — Le nœud #3 a pris du pool 99594 transactions et forme le bloc #234 (56d)
13:30 — Le bloc #237 (5c0) a été signé et envoyé à d'autres nœuds pour validation
13:32 — Le bloc #237 (58a) a été signé et envoyé à d'autres nœuds pour validation
13:34 — Le bloc #237 (56d) a été signé et envoyé à d'autres nœuds pour validation
14:47 — Le bloc #237 (58a) a été validé et envoyé dans la chaîne principale
14:53 — Le bloc #237 (5c0) n'a pas été validé dans le temps imparti
14:53 — Tous les nœuds ont reçu de la chaîne principale l'information que le bloc #237 (58a) a été ajouté et commencent à appliquer 87550 transactions
14:54 — Le bloc #237 (56d) a été validé et envoyé dans la chaîne principale
15:02 — Le nœud #1 a pris du pool 181206 transactions et forme le bloc #238 (c5f)
15:06 — Tous les nœuds ont reçu de la chaîne principale l'information que le bloc #238 (56d) a été ajouté et commencent à appliquer 99594 transactions
15:12 — Le nœud #2 a pris du pool 51990 transactions et forme le bloc #239 (ad8)
15:20 — Le bloc #239 (ad8) a été signé et envoyé à d'autres nœuds pour validation
15:25 — Le nœud #3 a pris du pool 46685 transactions et forme le bloc #239 (857)
15:30 — Le bloc #238 (c5f) a été signé et envoyé à d'autres nœuds pour validation
15:34 — Le bloc #239 (857) a été signé et envoyé à d'autres nœuds pour validation
16:32 — Le bloc #239 (857) a été validé et envoyé dans la chaîne principale
16:42 — Tous les nœuds ont reçu de la chaîne principale l'information que le bloc #239 (857) a été ajouté et commencent à appliquer 46685 transactions
16:42 — Le bloc #238 (c5f) a été validé et envoyé dans la chaîne principale
16:42 — Le bloc #239 (ad8) n'a pas été validé dans le temps imparti
16:54 — Le nœud #2 a pris du pool 96882 transactions et forme le bloc #240 (e6e)
16:56 — Le nœud #3 a pris du pool 39704 transactions et forme le bloc #240 (a47)
17:02 — Le bloc #240 (a47) a été signé et envoyé à d'autres nœuds pour validation
17:02 — Le bloc #240 (e6e) a été signé et envoyé à d'autres nœuds pour validation
17:18 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #240 (c5f) a été ajouté et commencent à appliquer 181206 transactions
17:45 — Le bloc #240 (a47) a été validé et envoyé à la chaîne racine
17:47 — Le nœud #1 a pris 54956 transactions du pool et forme le bloc #241 (170)
17:59 — Le bloc #241 (170) a été signé et envoyé à d'autres nœuds pour validation
18:09 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #241 (a47) a été ajouté et commencent à appliquer 181206 transactions
18:20 — Le nœud #3 a pris 39104 transactions du pool et forme le bloc #242 (955)
18:24 — Le bloc #240 (e6e) a été validé et envoyé à la chaîne racine
18:28 — Le bloc #242 (955) a été signé et envoyé à d'autres nœuds pour validation
18:09 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #242 (e6e) a été ajouté et commencent à appliquer 96882 transactions
19:06 — Le script de démonstration a terminé son travail pour le nœud #1
19:08 — Le script de démonstration a terminé son travail pour le nœud #2
19:08 — Le nœud #2 a pris 48241 transactions du pool et forme le bloc #243 (fde)
19:14 — Le bloc #243 (fde) a été signé et envoyé à d'autres nœuds pour validation
19:18 — Le bloc #241 (170) n'a pas été validé dans le temps imparti
19:28 — Le nœud #1 a pris 86967 transactions du pool et forme le bloc #243 (37c)
19:35 — Le bloc #242 (955) a été validé et envoyé à la chaîne racine
19:40 — Le bloc #243 (37c) a été signé et envoyé à d'autres nœuds pour validation
20:05 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #243 (955) a été ajouté et commencent à appliquer 39104 transactions
20:15 — Le bloc #243 (fde) a été validé et envoyé à la chaîne racine
20:19 — Le nœud #3 a pris 42981 transactions du pool et forme le bloc #244 (9b5)
20:26 — Le bloc #244 (9b5) a été signé et envoyé à d'autres nœuds pour validation
20:28 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #244 (fde) a été ajouté et commencent à appliquer 48241 transactions
20:32 — Le nœud #2 a traité toutes les 1k transactions qui étaient dans le pool
21:05 — Le bloc #243 (37c) n'a pas été validé dans le temps imparti
21:15 — Le nœud #1 a pris 86967 transactions du pool et forme le bloc #245 (37c)
21:32 — Le bloc #245 (37c) a été signé et envoyé à d'autres nœuds pour validation
21:42 — Le bloc #244 (9b5) a été validé et envoyé à la chaîne racine
21:50 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #245 (9b5) a été ajouté et commencent à appliquer 42981 transactions
22:04 — Le nœud #3 a pris 45361 transactions du pool et forme le bloc #246 (3f9)
22:11 — Le bloc #246 (3f9) a été signé et est envoyé aux autres nœuds pour validation
22:51 — Le bloc #245 (37c) n'a pas été validé dans le temps imparti
23:01 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #246 (37c)
23:08 — Le script de démonstration a terminé son travail pour le nœud #3
23:15 — Le bloc #246 (37c) a été signé et est envoyé aux autres nœuds pour validation
23:32 — Le bloc #246 (3f9) n'a pas été validé dans le temps imparti
23:42 — Le nœud #3 a récupéré 52173 transactions du pool et forme le bloc #246 (71d)
23:51 — Le bloc #246 (71d) a été signé et est envoyé aux autres nœuds pour validation
24:38 — Le bloc #246 (37c) n'a pas été validé dans le temps imparti
25:01 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #246 (37c)
25:06 — Le bloc #246 (71d) a été validé et envoyé à la chaîne racine
25:12 — Le bloc #246 (37c) a été signé et est envoyé aux autres nœuds pour validation
25:14 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #246 (71d) a été ajouté et commencent à appliquer 52173 transactions
25:29 — Le nœud #3 a traité toutes les 1 million de transactions qui étaient dans le pool
26:40 — Le bloc #247 (37c) n'a pas été validé dans le temps imparti
26:47 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #247 (37c)
27:03 — Le bloc #247 (37c) a été signé et est envoyé aux autres nœuds pour validation
28:29 — Le bloc #247 (37c) n'a pas été validé dans le temps imparti
28:35 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #247 (37c)
28:49 — Le bloc #247 (37c) a été signé et est envoyé aux autres nœuds pour validation
30:13 — Le bloc #247 (37c) n'a pas été validé dans le temps imparti
30:23 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #247 (37c)
30:38 — Le bloc #247 (37c) a été signé et est envoyé aux autres nœuds pour validation
32:00 — Le bloc #247 (37c) n'a pas été validé dans le temps imparti
32:11 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #247 (37c)
32:26 — Le bloc #247 (37c) a été signé et est envoyé aux autres nœuds pour validation
33:49 — Le bloc #247 (37c) n'a pas été validé dans le temps imparti
33:59 — Le nœud #1 a récupéré 86967 transactions du pool et forme le bloc #247 (37c)
34:12 — Le bloc #247 (37c) a été signé et est envoyé aux autres nœuds pour validation
35:34 — Le bloc #247 (37c) a été validé et envoyé à la chaîne racine
35:54 — Tous les nœuds ont reçu de la chaîne racine l'information que le bloc #247 (37c) a été ajouté et commencent à appliquer 86967 transactions
36:11 — Le nœud #1 a traité toutes les 1 million de transactions qui étaient dans le pool
55:12 — Le premier nœud a traité toutes les 3 millions de transactions

Tests publics d'une solution de confidentialité et d'évolutivité sur Ethereum sur des plateformes cloud

Résultats

Il a été constaté que les serveurs virtuels Azure manquent de puissance processeur pour gérer un si grand nombre de transactions. Cependant, concernant l’objectif principal des tests, à savoir démontrer le fonctionnement de Plasma Cash avec MongoDB, le système a bien fonctionné.

Nous vous invitons à visiter GitHub le projet : https://github.com/opporty-com/Plasma-Cash/tree/new-version

Cet article a été coécrit avec Alexandre Nashivan, développeur senior Clever Solution Inc.

Auparavant, l'équipe de développement Opporty avait déjà testé la vitesse de Plasma Cash. Les résultats sont présentés dans cet article.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster