Test public du cloud Ethereum et des solutions de confidentialité et d'évolutivité du cloud

La tendance de la blockchain continue de s'accélérer. De plus en plus d'experts prédisent l'adaptation universelle de cette technologie dans un avenir proche. À l'heure actuelle, plusieurs problèmes non résolus ne le sont toujours pas.

Tout d'abord, les systèmes de blockchain modernes ne évoluent pas bien. Par exemple, la bande passante d'Ethereum n'est que de 20 transactions par seconde, et malgré ses nombreux avantages, elle ne convient pas aux grandes entreprises.

Dans le même temps, Ethereum est apprécié pour sa puissante protection contre le piratage et les pannes de réseau. Vous ne devez donc pas le radier. Il est beaucoup plus judicieux de corriger les défauts d'Ethereum et de les transformer en avantages.



Plasma Cash comme solution de confidentialité et d'évolutivité dans Ethereum


Le plasma est une technologie introduite par Vitalik Buterin, co-fondateur du projet Ethereum, lors de la conférence EthCC à Paris en 2018. Il a été développé en collaboration avec Joseph Pune, co-fondateur du Lightning Network, et annoncé comme une solution qui augmente la puissance de calcul de la blockchain Ethereum. Les premières nouvelles de Plasma ont été divulguées aux médias en 2017.

Cette plate-forme est un niveau externe de contrats intelligents qui peuvent interagir avec la blockchain principale, déchargeant 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é présentées dans le document « Plasma: Scalable Autonomous Smart Contracts », daté d'août 2017.

Buterin a reconnu que Plasma avait des problèmes d'évolutivité: chaque utilisateur doit télécharger et authentifier chaque bloc Plasma, ce qui empêche la mise à l'échelle exponentielle.

Pour corriger cet inconvénient, Plasma Cash a été développé - une chaîne subsidiaire composée d'un contrat intelligent et d'un réseau privé basé sur Node.js, transférant périodiquement son état à la chaîne racine (Ethereum). Il fournit la décentralisation, la sécurité et l'évolutivité sur la blockchain, résolvant ainsi le trilemme d'évolutivité.

Un avantage important de Plasma Cash par rapport à Plasma est qu'il n'attire l'attention des utilisateurs que sur les blocs qui contiennent les pièces qui les intéressent:
"Désormais, les utilisateurs doivent vérifier la disponibilité et l'exactitude de la chaîne Plasma uniquement pour un indice spécial lié aux pièces qu'ils souhaitent dépenser, posséder et qui les intéressent", a déclaré Buterin.

Selon les développeurs, Plasma Cash est un remède efficace contre le piratage dans Ethereum. Chaque pièce Plasma a un propriétaire et est unique. Personne ne peut prendre possession des pièces d'un autre utilisateur à son insu. Le détenteur de la pièce peut prévenir un éventuel retrait frauduleux de fonds grâce au système de «réclamations» en présentant ses «preuves» dans l'historique de sa pièce.

Tester Plasma Cash chez Mongo Atlas


En raison de sa nouveauté, Plasma Cash est encore peu étudié. Les experts de la blockchain testent activement son interaction avec divers services et bases de données cloud, corrigent les lacunes et trouvent des moyens de les corriger. En particulier, les tests dans 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 sont synchronisées entre elles dans un cluster.
  2. Accès rapide , car le cluster peut être créé sur les trois plateformes cloud les plus populaires: Amazon, Google, Azure. En conséquence, le nœud Plasma Cash peut être déployé dans de nombreux centres de données situés à proximité de Mongo Atlas. Nous avons prouvé que la vitesse ne chute 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 de plasma utilisés uniquement en mode lecture peuvent être connectés à un cluster Mongo et situés dans différentes parties du monde, ce qui améliore la géo-évolutivité (les nœuds sont plus proches des utilisateurs).
  4. Le déploiement d'un nouveau nœud est facile , car vous n'avez pas besoin de tout resynchroniser. Vous pouvez simplement vous connecter à un cluster Mongo existant ou effectuer rapidement une copie et configurer une connexion à celui-ci.
  5. La mise à l'échelle d'une base de données est facile . Au fil du temps, les données deviennent plus volumineuses et vous pouvez augmenter la taille des nœuds du cluster selon vos besoins.



Nous avons utilisé les serveurs suivants pour les tests:

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

Test 1


3 nœuds reçoivent chacun 100 000 transactions. Au total, les 9 nœuds contiennent 300 000 transactions et jetons.


État initial: dernier bloc # 213; 0 transactions et jetons sont stockés dans la base de données.

00:00 - 3 scripts sont lancés qui génèrent et envoient 100 000 transactions
00:29 - L'envoi de 100 000 transactions aux nœuds # 1 et # 2 a commencé
00:32 - L'envoi de 100 000 transactions au nœud # 3 a commencé
00:32 - Le noeud # 1 a pris 11703 transactions du pool et le bloc de formulaires # 214 (9fb)
00:34 - Noda # 2 a pris 27088 transactions du pool et forme le bloc # 214 (ef4)
00:34 - Le bloc # 214 (9fb) est signé et envoyé à d'autres nœuds pour validation
00:36 - Noda # 3 a pris 11900 transactions du pool et forme le bloc # 214 (983)
00:37 - Le bloc # 214 (9fb) est validé et envoyé à la chaîne racine
00:38 - Le bloc # 214 (983) est signé et envoyé à d'autres nœuds pour validation
00:38 - Le bloc # 214 (ef4) est signé et envoyé à d'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 des informations de la chaîne racine que le bloc # 214 (9fb) a été ajouté et 11703 transactions commencent à être appliquées
00:45 - Tous les nœuds ont reçu des informations de la chaîne racine que le bloc # 215 (983) a été ajouté et 11900 transactions commencent à s'appliquer
00:51 - Le bloc # 214 (ef4) est validé et envoyé à la chaîne racine
00:52 - Le noeud n ° 1 a pris 51 469 transactions du pool et forme le bloc n ° 216 (ea0)
00:56 - Noda # 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é à d'autres nœuds pour validation
00:58 - Tous les nœuds ont reçu des informations de la chaîne racine que le bloc # 216 (ef4) a été ajouté et 27088 transactions commencent à s'appliquer
01:04 - Le bloc # 216 (f75) est signé et envoyé à d'autres nœuds pour validation
01:14 - Noda # 2 a pris 72912 transactions dans le 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) sont validés et envoyés à la chaîne racine
01:21 - Le bloc # 217 (f85) est signé et envoyé à d'autres nœuds pour validation
01:26 - Les blocs # 217 (f75) et # 218 (ea0) sont ajoutés à la chaîne racine et les nœuds commencent à appliquer respectivement les transactions 51469 et 55102
01:27 - Le bloc # 217 (a85) a été validé et envoyé à la chaîne racine
01:41 - Noda # 1 a pris 36828 transactions du pool et forme le bloc # 219 (46f)
01:41 - Noda # 3 a pris 32998 transactions du pool et forme le bloc # 219 (bb3)
01:43 - Tous les nœuds ont reçu des informations de la chaîne racine que le bloc # 219 (a85) a été ajouté et 72912 transactions commencent à être appliquées
01:46 - Le bloc # 219 (46f) est signé et envoyé à d'autres nœuds pour validation
01:46 - Le bloc # 219 (bb3) est signé et envoyé à d'autres nœuds pour validation
01:53 - Noda # 2 a traité toutes les transactions de 100 000 qui étaient dans le pool
02:37 - Le bloc # 219 (bb3) est validé et envoyé à la chaîne racine
02:41 - Le bloc # 219 (46f) est validé et envoyé à la chaîne racine
02:48 - Les blocs # 220 (bb3) et # 221 (46f) sont ajoutés à la chaîne racine et les nœuds commencent à appliquer respectivement 32998 et 36828 transactions
02:54 - Le noeud n ° 1 a traité toutes les transactions de 100 000 qui étaient dans le pool
02:55 - Noda # 3 a traité toutes les transactions de 100 000 qui étaient dans le pool
04:12 - Tous les nœuds contiennent 300k transactions et jetons le dernier bloc # 221

Test 2


3 nœuds reçoivent 1kk de transactions. Le total dans les 9 nœuds contient 3kk transactions et jetons.



État initial: dernier bloc # 213; 0 transactions et jetons sont stockés dans la base de données.

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



Résumé


, Azure . , Plasma Cash MongoDB, .

GitHub : https://github.com/opporty-com/Plasma-Cash/tree/new-version

, Clever Solution Inc .

Opporty Plasma Cash. .

Source: https://habr.com/ru/post/fr475000/


All Articles