Teste público de uma solução para privacidade e escalabilidade no Ethereum em plataformas de nuvem

A tendência do blockchain continua em alta. Cada vez mais especialistas preveem a adoção universal dessa tecnologia em um futuro próximo. No momento, algumas questões permanecem não resolvidas, impedindo isso.

Primeiramente, os sistemas de blockchain modernos têm dificuldades de escalabilidade. Por exemplo, a capacidade de transações do Ethereum é de apenas 20 por segundo e, apesar de suas numerosas vantagens, não é adequado para grandes empresas.

Ao mesmo tempo, o Ethereum é valorizado por sua sólida proteção contra invasões e falhas na rede. Portanto, não deve ser descartado. Seria muito mais sensato corrigir as desvantagens do Ethereum e transformá-las em vantagens.

Teste público de uma solução para privacidade e escalabilidade no Ethereum em plataformas de nuvem

Plasma Cash como solução para privacidade e escalabilidade no Ethereum

Plasma é uma tecnologia apresentada por Vitalik Buterin, co-fundador do projeto Ethereum, na conferência EthCC em Paris em 2018. Ela foi desenvolvida em colaboração com Joseph Poon, co-fundador da Lightning Network, e é apresentada como uma solução que aumenta a capacidade computacional do blockchain Ethereum. As primeiras notícias sobre Plasma vazaram para a mídia em 2017.

Essa plataforma representa um nível externo de contratos inteligentes que podem interagir com o blockchain principal, descarregando assim a cadeia raiz, reduzindo as taxas de transação para contratos inteligentes e aplicativos descentralizados (DApps).

Mais informações sobre o desenvolvimento foram apresentadas no documento "Plasma: Contratos Inteligentes Autônomos Escaláveis", datado de agosto de 2017.

Buterin reconheceu que a Plasma enfrenta problemas de escalabilidade: cada usuário deve carregar e verificar a autenticidade de cada bloco de Plasma, o que impede a escalabilidade exponencial.

Para corrigir essa deficiência, foi desenvolvida a Plasma Cash — uma cadeia secundária composta por um contrato inteligente e uma rede privada baseada em Node.js, que periodicamente transfere seu estado para a cadeia raiz (Ethereum). Ela garante descentralização, segurança e escalabilidade no blockchain, resolvendo assim a Trilema da Escalabilidade.

Uma vantagem importante do Plasma Cash em relação ao Plasma é que ele atrai a atenção dos usuários apenas para os blocos que contêm as moedas que lhes interessam:

“Agora os usuários precisam verificar a disponibilidade e a validade da cadeia Plasma apenas para um índice especial, relacionado às moedas que desejam gastar, que possuem e que lhes interessam”, disse Buterin.

De acordo com os desenvolvedores, o Plasma Cash é uma solução eficaz contra invasões no Ethereum. Cada moeda Plasma tem um proprietário e é única. Ninguém pode se apropriar das moedas de outro usuário sem o seu consentimento. O detentor da moeda pode evitar a retirada fraudulenta de fundos por meio de um sistema de "contestações", apresentando suas "provas de dados" no histórico de sua moeda.

Teste do Plasma Cash no Mongo Atlas

Devido à sua novidade, o Plasma Cash ainda é pouco estudado. Especialistas em blockchain estão testando ativamente sua interação com vários serviços em nuvem e bancos de dados, registrando deficiências e encontrando maneiras de corrigi-las. Em particular, os testes no Mongo Atlas revelaram as seguintes vantagens ao trabalhar com Plasma:

  1. Proteção confiável contra perda de dados, uma vez que várias réplicas se sincronizam entre si no cluster.
  2. Acesso rápido, pois o cluster pode ser criado nas três plataformas de nuvem mais populares: Amazon, Google, Azure. Como resultado, um nó do Plasma Cash pode ser implantado em vários data centers localizados próximos ao Mongo Atlas. Comprovamos que a velocidade não diminui significativamente, mesmo se os nós do Plasma forem implantados em data centers mais distantes.
  3. Os nós do Plasma, utilizados apenas em modo de leitura, podem ser conectados a um único cluster do Mongo e estar localizados em diferentes partes do mundo, o que melhora a geo-escalabilidade (os nós estão mais próximos dos usuários).
  4. Implantar um novo nó é fácil, pois não é necessário sincronizar tudo novamente. Pode-se simplesmente conectar a um cluster existente do Mongo ou fazer uma cópia rapidamente e configurar a conexão com ele.
  5. Escalonar o banco de dados é fácil. Com o tempo, os dados aumentam e é possível aumentar o tamanho dos nós no cluster conforme necessário.

Teste público de uma solução para privacidade e escalabilidade no Ethereum em plataformas de nuvem

Utilizamos os seguintes servidores para conduzir os testes:

  • 3 servidores virtuais Azure Standard E4s v3 (4 vcpus, 32 GiB de memória). Cada servidor roda 3 nós. Um deles pode submeter blocos na cadeia raiz.
  • Cada nó está conectado ao seu próprio cluster Mongo Atlas M50, contendo 3 nós em modo de réplica.

Teste 1

3 nós recebem 100 mil transações cada. No total, todos os 9 nós contêm 300 mil transações e tokens.

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?

Estado inicial: último bloco #213; no banco de dados estão armazenadas 0 transações e tokens.

00:00 — Iniciados 3 scripts, que geram e enviam 100 mil transações cada
00:29 — Começou o envio de 100 mil transações para os nós #1 e #2
00:32 — Começou o envio de 100 mil transações para o nó #3
00:32 — O nó #1 pegou do pool 11.703 transações e está formando o bloco #214 (9fb)
00:34 — O nó #2 pegou do pool 27.088 transações e está formando o bloco #214 (ef4)
00:34 — O bloco #214 (9fb) foi assinado e enviado para os outros nós para validação
00:36 — O nó #3 pegou do pool 11.900 transações e está formando o bloco #214 (983)
00:37 — O bloco #214 (9fb) foi validado e enviado para a cadeia raiz
00:38 — O bloco #214 (983) foi assinado e enviado para os outros nós para validação
00:38 — O bloco #214 (ef4) foi assinado e enviado para os outros nós para validação
00:40 — O bloco #214 (983) foi validado e enviado para a cadeia raiz
00:41 — Todos os nós receberam da cadeia raiz a informação de que o bloco #214 (9fb) foi adicionado e começam a aplicar 11.703 transações
00:45 — Todos os nós receberam da cadeia raiz a informação de que o bloco #215 (983) foi adicionado e começam a aplicar 11.900 transações
00:51 — O bloco #214 (ef4) foi validado e enviado para a cadeia raiz
00:52 — O nó #1 pegou do pool 51.469 transações e está formando o bloco #216 (ea0)
00:56 — O nó #3 pegou do pool 55.102 transações e está formando o bloco #216 (f75)
00:58 — O script de demonstração terminou seu trabalho para o nó #2
00:58 — O bloco #216 (ea0) foi assinado e enviado para os outros nós para validação
00:58 — Todos os nós receberam da cadeia raiz a informação de que o bloco #216 (ef4) foi adicionado e começam a aplicar 27.088 transações
01:04 — O bloco #216 (f75) foi assinado e enviado para os outros nós para validação
01:14 — O nó #2 pegou do pool 72.912 transações e está formando o bloco #217 (f85)
01:15 — O script de demonstração terminou seu trabalho para os nós #1 e #2
01:17 — Os blocos #216 (f75) e #216 (ea0) foram validados e enviados para a cadeia raiz
01:21 — O bloco #217 (f85) foi assinado e enviado para os outros nós para validação
01:26 — Os blocos #217 (f75) e #218 (ea0) foram adicionados à cadeia raiz e os nós começam a aplicar 51469 e 55102 transações, respectivamente
01:27 — O bloco #217 (a85) foi validado e enviado à cadeia raiz
01:41 — O nó #1 pegou 36828 transações do pool e está formando o bloco #219 (46f)
01:41 — O nó #3 pegou 32998 transações do pool e está formando o bloco #219 (bb3)
01:43 — Todos os nós receberam da cadeia raiz a informação de que o bloco #219 (a85) foi adicionado e começam a aplicar 72912 transações
01:46 — O bloco #219 (46f) foi assinado e enviado para validação a outros nós
01:46 — O bloco #219 (bb3) foi assinado e enviado para validação a outros nós
01:53 — O nó #2 processou todas as 100k transações que estavam no pool
02:37 — O bloco #219 (bb3) foi validado e enviado à cadeia raiz
02:41 — O bloco #219 (46f) foi validado e enviado à cadeia raiz
02:48 — Os blocos #220 (bb3) e #221 (46f) foram adicionados à cadeia raiz e os nós começam a aplicar 32998 e 36828 transações, respectivamente
02:54 — O nó #1 processou todas as 100k transações que estavam no pool
02:55 — O nó #3 processou todas as 100k transações que estavam no pool
04:12 — Todos os nós contêm 300k transações e tokens do último bloco #221

Teste 2

3 nós recebem 1kk de transações cada. No total, há 3kk de transações e tokens em todos os 9 nós.

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?

Estado inicial: último bloco #213; no banco de dados estão armazenadas 0 transações e tokens.

00:00 — 3 scripts foram iniciados, gerando e enviando 1kk de transações cada
02:29 — O envio de 1kk de transações para os nós #1 e #2 começou
02:33 — O nó #1 pegou 11668 transações do pool e está formando o bloco #222 (510)
02:35 — O bloco #222 (510) foi assinado e enviado para validação a outros nós
02:37 — O bloco #222 (510) foi validado e enviado à cadeia raiz
02:38 — O nó #2 pegou 46378 transações do pool e está formando o bloco #222 (a9d)
02:38 — O envio de 1kk de transações para o nó #3 começou
02:41 — O nó #3 pegou 5504 transações do pool e está formando o bloco #222 (387)
02:42 — O bloco #222 (387) foi assinado e enviado para validação a outros nós
02:44 — O bloco #222 (a9d) foi assinado e enviado para validação a outros nós
02:44 — O bloco #222 (387) foi validado e enviado à cadeia raiz
02:49 — O bloco #222 (a9d) foi validado e enviado à cadeia raiz
02:56 — Os blocos #222 (510), #223 (387) e #224 (a9d) foram adicionados à cadeia raiz e os nós começam a aplicar 11668, 5504 e 46378 transações, respectivamente
03:09 — O nó #1 pegou 177170 transações do pool e está formando o bloco #225 (e50)
03:09 — O nó #3 pegou 119327 transações do pool e está formando o bloco #225 (ccc)
03:10 — O nó #2 pegou do pool 149772 transações e está formando o bloco #225 (404)
03:26 — O bloco #225 (ccc) foi assinado e enviado para outros nós para validação
03:32 — O bloco #225 (404) foi assinado e enviado para outros nós para validação
03:33 — O bloco #225 (e50) foi assinado e enviado para outros nós para validação
03:53 — O bloco #225 (ccc) foi validado e enviado para a cadeia principal
04:03 — O bloco #225 (e50) foi validado e enviado para a cadeia principal
04:04 — O bloco #225 (404) foi validado e enviado para a cadeia principal
04:06 — Todos os nós receberam da cadeia principal a informação de que o bloco #225 (ccc) foi adicionado e começam a aplicar 119327 transações
04:14 — Todos os nós receberam da cadeia principal a informação de que o bloco #226 (404) foi adicionado e começam a aplicar 149772 transações
04:16 — Todos os nós receberam da cadeia principal a informação de que o bloco #227 (e50) foi adicionado e começam a aplicar 177170 transações
04:32 — O nó #3 pegou do pool 209436 transações e está formando o bloco #228 (1e9)
04:40 — O nó #2 pegou do pool 212669 transações e está formando o bloco #228 (e38)
04:40 — O nó #1 pegou do pool 190144 transações e está formando o bloco #228 (861)
05:02 — O bloco #228 (1e9) foi assinado e enviado para outros nós para validação
05:08 — O bloco #228 (861) foi assinado e enviado para outros nós para validação
05:10 — O bloco #228 (e38) foi assinado e enviado para outros nós para validação
06:13 — O bloco #228 (1e9) foi validado e enviado para a cadeia principal
06:13 — O bloco #228 (861) foi validado e enviado para a cadeia principal
06:13 — O bloco #228 (e38) foi validado e enviado para a cadeia principal
06:39 — Os blocos #228 (861), #229 (1e9) e #230 (e38) foram adicionados à cadeia principal e os nós começam a aplicar 190144, 209436 e 212669 transações respectivamente
07:07 — O nó #1 pegou do pool 199770 transações e está formando o bloco #231 (e04)
07:09 — O nó #2 pegou do pool 190473 transações e está formando o bloco #231 (36e)
07:09 — O nó #3 pegou do pool 178807 transações e está formando o bloco #231 (f43)
07:34 — O bloco #231 (e04) foi assinado e enviado para outros nós para validação
07:37 — O bloco #231 (36e) foi assinado e enviado para outros nós para validação
07:37 — O bloco #231 (f43) foi assinado e enviado para outros nós para validação
08:49 — O bloco #231 (e04) foi validado e enviado para a cadeia principal
08:51 — O bloco #231 (f43) foi validado e enviado para a cadeia principal
08:52 — O bloco #231 (36e) foi validado e enviado para a cadeia principal
09:47 — Blocos #231 (e04), #232 (f43) e #233 (36e) adicionados à cadeia raiz, e os nós começam a aplicar 199770, 178807 e 190473 transações, respectivamente
10:16 — O nó #1 pegou do pool 153075 transações e está formando o bloco #234 (e04)
10:16 — O nó #2 pegou do pool 168035 transações e está formando o bloco #234 (36e)
10:16 — O nó #3 pegou do pool 166685 transações e está formando o bloco #234 (f43)
10:42 — O bloco #234 (56d) foi assinado e enviado para outros nós para validação
11:59 — O bloco #234 (1bb) foi validado e enviado para a cadeia raiz
12:02 — O bloco #234 (58a) foi validado e enviado para a cadeia raiz
12:02 — O bloco #234 (56d) foi validado e enviado para a cadeia raiz
12:48 — Os blocos #234 (1bb), #235 (58a) e #236 (56d) foram adicionados à cadeia raiz, e os nós começam a aplicar 153075, 168035 e 166685 transações, respectivamente
13:14 — O nó #1 pegou do pool 112226 transações e está formando o bloco #237 (5c0)
13:16 — O nó #2 pegou do pool 87550 transações e está formando o bloco #234 (58a)
13:16 — O nó #3 pegou do pool 99594 transações e está formando o bloco #234 (56d)
13:30 — O bloco #237 (5c0) foi assinado e enviado para outros nós para validação
13:32 — O bloco #237 (58a) foi assinado e enviado para outros nós para validação
13:34 — O bloco #237 (56d) foi assinado e enviado para outros nós para validação
14:47 — O bloco #237 (58a) foi validado e enviado para a cadeia raiz
14:53 — O bloco #237 (5c0) não foi validado dentro do tempo especificado
14:53 — Todos os nós receberam da cadeia raiz a informação de que o bloco #237 (58a) foi adicionado e começam a aplicar 87550 transações
14:54 — O bloco #237 (56d) foi validado e enviado para a cadeia raiz
15:02 — O nó #1 pegou do pool 181206 transações e está formando o bloco #238 (c5f)
15:06 — Todos os nós receberam da cadeia raiz a informação de que o bloco #238 (56d) foi adicionado e começam a aplicar 99594 transações
15:12 — O nó #2 pegou do pool 51990 transações e está formando o bloco #239 (ad8)
15:20 — O bloco #239 (ad8) foi assinado e enviado para outros nós para validação
15:25 — O nó #3 pegou do pool 46685 transações e está formando o bloco #239 (857)
15:30 — O bloco #238 (c5f) foi assinado e enviado para outros nós para validação
15:34 — O bloco #239 (857) foi assinado e enviado para outros nós para validação
16:32 — O bloco #239 (857) foi validado e enviado para a cadeia raiz
16:42 — Todos os nós receberam da cadeia raiz a informação de que o bloco #239 (857) foi adicionado e começam a aplicar 46685 transações
16:42 — O bloco #238 (c5f) foi validado e enviado para a cadeia raiz
16:42 — O bloco #239 (ad8) não foi validado no tempo especificado
16:54 — O nó #2 pegou 96882 transações do pool e está formando o bloco #240 (e6e)
16:56 — O nó #3 pegou 39704 transações do pool e está formando o bloco #240 (a47)
17:02 — O bloco #240 (a47) foi assinado e enviado para outros nós para validação
17:02 — O bloco #240 (e6e) foi assinado e enviado para outros nós para validação
17:18 — Todos os nós receberam informações da cadeia raiz de que o bloco #240 (c5f) foi adicionado e começam a aplicar 181206 transações
17:45 — O bloco #240 (a47) foi validado e enviado para a cadeia raiz
17:47 — O nó #1 pegou 54956 transações do pool e está formando o bloco #241 (170)
17:59 — O bloco #241 (170) foi assinado e enviado para outros nós para validação
18:09 — Todos os nós receberam informações da cadeia raiz de que o bloco #241 (a47) foi adicionado e começam a aplicar 181206 transações
18:20 — O nó #3 pegou 39104 transações do pool e está formando o bloco #242 (955)
18:24 — O bloco #240 (e6e) foi validado e enviado para a cadeia raiz
18:28 — O bloco #242 (955) foi assinado e enviado para outros nós para validação
18:09 — Todos os nós receberam informações da cadeia raiz de que o bloco #242 (e6e) foi adicionado e começam a aplicar 96882 transações
19:06 — O script de demonstração terminou seu trabalho no nó #1
19:08 — O script de demonstração terminou seu trabalho no nó #2
19:08 — O nó #2 pegou 48241 transações do pool e está formando o bloco #243 (fde)
19:14 — O bloco #243 (fde) foi assinado e enviado para outros nós para validação
19:18 — O bloco #241 (170) não foi validado no tempo especificado
19:28 — O nó #1 pegou 86967 transações do pool e está formando o bloco #243 (37c)
19:35 — O bloco #242 (955) foi validado e enviado para a cadeia raiz
19:40 — O bloco #243 (37c) foi assinado e enviado para outros nós para validação
20:05 — Todos os nós receberam informações da cadeia raiz de que o bloco #243 (955) foi adicionado e começam a aplicar 39104 transações
20:15 — O bloco #243 (fde) foi validado e enviado para a cadeia raiz
20:19 — O nó #3 pegou 42981 transações do pool e está formando o bloco #244 (9b5)
20:26 — O bloco #244 (9b5) foi assinado e enviado para outros nós para validação
20:28 — Todos os nós receberam informações da cadeia raiz de que o bloco #244 (fde) foi adicionado e começam a aplicar 48241 transações
20:32 — O nó #2 processou todas as 1kk transações que estavam no pool
21:05 — O bloco #243 (37c) não foi validado no tempo especificado
21:15 — O nó #1 pegou 86967 transações do pool e está formando o bloco #245 (37c)
21:32 — Bloco #245 (37c) assinado e enviado para validação por outros nós
21:42 — Bloco #244 (9b5) validado e enviado para a cadeia raiz
21:50 — Todos os nós receberam da cadeia raiz a informação de que o bloco #245 (9b5) foi adicionado e começam a aplicar 42981 transações
22:04 — O nó #3 pegou do pool 45361 transações e está formando o bloco #246 (3f9)
22:11 — Bloco #246 (3f9) assinado e enviado para validação por outros nós
22:51 — Bloco #245 (37c) não foi validado no tempo especificado
23:01 — O nó #1 pegou do pool 86967 transações e está formando o bloco #246 (37c)
23:08 — O script de demonstração concluiu seu trabalho para o nó #3
23:15 — Bloco #246 (37c) assinado e enviado para validação por outros nós
23:32 — Bloco #246 (3f9) não foi validado no tempo especificado
23:42 — O nó #3 pegou do pool 52173 transações e está formando o bloco #246 (71d)
23:51 — Bloco #246 (71d) assinado e enviado para validação por outros nós
24:38 — Bloco #246 (37c) não foi validado no tempo especificado
25:01 — O nó #1 pegou do pool 86967 transações e está formando o bloco #246 (37c)
25:06 — Bloco #246 (71d) validado e enviado para a cadeia raiz
25:12 — Bloco #246 (37c) assinado e enviado para validação por outros nós
25:14 — Todos os nós receberam da cadeia raiz a informação de que o bloco #246 (71d) foi adicionado e começam a aplicar 52173 transações
25:29 — O nó #3 processou todas as 1kk transações que estavam no pool
26:40 — Bloco #247 (37c) não foi validado no tempo especificado
26:47 — O nó #1 pegou do pool 86967 transações e está formando o bloco #247 (37c)
27:03 — Bloco #247 (37c) assinado e enviado para validação por outros nós
28:29 — Bloco #247 (37c) não foi validado no tempo especificado
28:35 — O nó #1 pegou do pool 86967 transações e está formando o bloco #247 (37c)
28:49 — Bloco #247 (37c) assinado e enviado para validação por outros nós
30:13 — Bloco #247 (37c) não foi validado no tempo especificado
30:23 — O nó #1 pegou do pool 86967 transações e está formando o bloco #247 (37c)
30:38 — Bloco #247 (37c) assinado e enviado para validação por outros nós
32:00 — Bloco #247 (37c) não foi validado no tempo especificado
32:11 — O nó #1 pegou do pool 86967 transações e está formando o bloco #247 (37c)
32:26 — Bloco #247 (37c) assinado e enviado para validação por outros nós
33:49 — Bloco #247 (37c) não foi validado no tempo especificado
33:59 — O nó #1 pegou do pool 86967 transações e está formando o bloco #247 (37c)
34:12 — Bloco #247 (37c) assinado e enviado para validação por outros nós
35:34 — Bloco #247 (37c) validado e enviado para a cadeia raiz
35:54 — Todos os nós receberam da cadeia raiz a informação de que o bloco #247 (37c) foi adicionado e começaram a processar 86967 transações
36:11 — O nó #1 processou todas as 1kk transações que estavam no pool
55:12 — O primeiro nó processou todas as 3kk transações

Teste público de uma solução para privacidade e escalabilidade no Ethereum em plataformas de nuvem

Resultados

Foi identificado que os servidores virtuais Azure têm capacidade de processamento insuficiente para lidar com tantas transações. Mas a principal tarefa dos testes, que era demonstrar o funcionamento do Plasma Cash com MongoDB, foi bem-sucedida.

Convidamos você a visitar GitHub do projeto: https://github.com/opporty-com/Plasma-Cash/tree/new-version

O artigo foi escrito em coautoria com Alexander Nashivan, desenvolvedor sênior Clever Solution Inc.

Anteriormente, a equipe de desenvolvimento Opporty já havia testado a velocidade do Plasma Cash. Os resultados estão apresentados em este artigo.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster