Testando publicamente as soluções Ethereum Cloud e Cloud Privacy and Scalability

A tendência blockchain continua a ganhar impulso. Mais e mais especialistas prevêem a adaptação universal dessa tecnologia em um futuro próximo. No momento, vários problemas não resolvidos permanecem sem solução.

Primeiro de tudo, os sistemas modernos de blockchain não escalam bem. Por exemplo, a largura de banda do Ethereum é de apenas 20 transações por segundo e, apesar de suas muitas vantagens, não é adequada para grandes empresas.

Ao mesmo tempo, o Ethereum é valorizado por sua poderosa proteção contra hackers e interrupções na rede. Portanto, você não deve descartá-lo. É muito mais aconselhável corrigir as deficiências do Ethereum e transformá-las em vantagens.



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


O plasma é uma tecnologia introduzida por Vitalik Buterin, co-fundador do projeto Ethereum, na conferência EthCC em Paris em 2018. Foi desenvolvido em conjunto com Joseph Pune, co-fundador da Lightning Network, e anunciado como uma solução que aumenta o poder de computação da blockchain Ethereum. As primeiras notícias de plasma vazaram para a mídia em 2017.

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

Informações detalhadas sobre o desenvolvimento foram apresentadas no documento “ Plasma: Contratos inteligentes autônomos escaláveis ”, de agosto de 2017.

Buterin reconheceu que o plasma tem problemas de escalabilidade: todo usuário deve fazer o download e autenticar cada bloco de plasma, o que impede o dimensionamento exponencial.

Para corrigir essa desvantagem, o Plasma Cash foi desenvolvido - uma cadeia subsidiária que consiste em um contrato inteligente e uma rede privada baseada no Node.js, transferindo periodicamente seu estado para a cadeia raiz (Ethereum). Ele fornece descentralização, segurança e escalabilidade no blockchain, resolvendo o Trilemma de Escalabilidade.

Uma vantagem importante do Plasma Cash em comparação ao Plasma é que ele atrai a atenção dos usuários apenas para os blocos que contêm as moedas de seu interesse:
"Agora, os usuários precisam verificar a disponibilidade e a correção da cadeia de plasma apenas para obter um índice especial relacionado às moedas que desejam gastar, possuir e que lhes interessam", disse Buterin.

Segundo os desenvolvedores, o Plasma Cash é uma cura eficaz para hackers no Ethereum. Cada moeda de plasma tem um proprietário e é única. Ninguém pode se apossar das moedas de outro usuário sem o seu conhecimento. O detentor da moeda pode impedir uma potencial retirada fraudulenta de fundos através do sistema de "reclamações" apresentando sua "evidência" no histórico de sua moeda.

Testando dinheiro de plasma no Mongo Atlas


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

  1. Proteção confiável contra perda de dados , pois várias réplicas são sincronizadas entre si em um cluster.
  2. Acesso rápido , pois o cluster pode ser criado nas três plataformas em nuvem mais populares: Amazon, Google, Azure. Como resultado, o nó Plasma Cash pode ser implantado em muitos data centers localizados perto do Mongo Atlas. Provamos que a velocidade não diminui muito, mesmo que os nós de plasma sejam implantados em mais data centers remotos.
  3. Os nós somente leitura de plasma podem ser conectados a um cluster Mongo e localizados em diferentes partes do mundo, o que melhora a escalabilidade geográfica (os nós estão mais próximos dos usuários).
  4. A implantação de um novo nó é fácil , pois você não precisa sincronizar novamente tudo. Você pode simplesmente se conectar a um cluster Mongo existente ou fazer uma cópia rápida e configurar uma conexão a ele.
  5. Escalar um banco de dados é fácil . Com o tempo, os dados ficam maiores e você pode aumentar o tamanho dos nós no cluster, conforme necessário.



Usamos os seguintes servidores para teste:

  • 3 servidores virtuais do Azure Standard E4s v3 (4 vcpus, 32 GiB de memória). Em cada servidor, 3 nós são levantados. Um deles pode enviar blocos para a cadeia raiz.
  • Cada nó está conectado ao cluster M50 do Mongo Atlas, que contém 3 nós no 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.


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

00:00 - 3 scripts são lançados que geram e enviam 100k transações
00:29 - Início do envio de 100 mil transações para os nós 1 e 2
00:32 - O envio de 100 mil transações para o nó nº 3 foi iniciado
00:32 - O nó 1 tirou 11703 transações do pool e forma o bloco 214 (9fb)
00:34 - Noda # 2 pegou 27088 transações do pool e forma o bloco # 214 (ef4)
00:34 - O bloco 214 (9fb) é assinado e enviado para outros nós para validação
00:36 - Noda # 3 pegou 11900 transações do pool e forma o bloco # 214 (983)
00:37 - O bloco 214 (9fb) é validado e enviado para a cadeia raiz
00:38 - O bloco 214 (983) é assinado e enviado para outros nós para validação
00:38 - O bloco 214 (ef4) é assinado e enviado para 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 informações da cadeia raiz que o bloco # 214 (9fb) foi adicionado e 11703 transações estão começando a ser aplicadas
00:45 - Todos os nós receberam informações da cadeia raiz que bloquearam o número 215 (983) e foram adicionadas 11900 transações.
00:51 - O bloco 214 (ef4) é validado e enviado para a cadeia raiz
00:52 - O nó 1 tomou 51.469 transações do pool e forma o bloco 216 (ea0)
00:56 - Noda # 3 pegou 55102 transações do pool e forma o bloco # 216 (f75)
00:58 - O script demo terminou seu trabalho para o nó # 2
00:58 - O bloco 216 (ea0) é assinado e enviado para outros nós para validação
00:58 - Todos os nós receberam informações da cadeia raiz que bloquearam o número 216 (ef4) e foram adicionadas 27088 transações
01:04 - O bloco 216 (f75) é assinado e enviado para outros nós para validação
01:14 - Noda # 2 pegou 72912 transações do pool e forma 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 nº 216 (f75) e nº 216 (ea0) são validados e enviados para a cadeia raiz
01:21 - O bloco 217 (f85) é assinado e enviado para outros nós para validação
01:26 - Os blocos 217 (f75) e 218 (ea0) são adicionados à cadeia raiz e os nós começam a aplicar as transações 51469 e 55102, respectivamente
01:27 - O bloco 217 (a85) foi validado e enviado para a cadeia raiz
01:41 - Noda # 1 pegou 36828 transações do pool e forma o bloco # 219 (46f)
01:41 - Noda # 3 pegou 32998 transações do pool e forma o bloco # 219 (bb3)
01:43 - Todos os nós receberam informações da cadeia raiz que o bloco # 219 (a85) foi adicionado e as transações 72912 estão começando a ser aplicadas
01:46 - O bloco 219 (46f) é assinado e enviado para outros nós para validação
01:46 - O bloco 219 (bb3) é assinado e enviado para outros nós para validação
01:53 - O Noda # 2 processou todas as 100 mil transações que estavam no pool
02:37 - O bloco 219 (bb3) é validado e enviado para a cadeia raiz
02:41 - O bloco 219 (46f) é validado e enviado para a cadeia raiz
02:48 - Os blocos 220 (bb3) e 221 (46f) são adicionados à cadeia raiz e os nós começam a aplicar as transações 32998 e 36828, respectivamente
02:54 - O nó nº 1 processou todas as 100 mil transações que estavam no pool
02:55 - O Noda nº 3 processou todas as 100 mil transações que estavam no pool
04:12 - Todos os nós contêm 300 mil transações e tokens no último bloco # 221

Teste 2


3 nós recebem 1kk de transações. O total em todos os 9 nós contém transações e tokens de 3k.



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

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



Sumário


Foi revelado que os servidores virtuais do Azure não tinham poder de processamento suficiente para lidar com um número tão grande de transações. Mas com a principal tarefa dos testes, a saber, demonstrar o trabalho do Plasma Cash com o MongoDB, o sistema lidou bem.

Nós convidamos você a visitar o GitHub projeto: https://github.com/opporty-com/Plasma-Cash/tree/new-version

artigo foi escrito em colaboração com Alexander Nashivanom , desenvolvedor sênior inteligente Solution Inc .

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

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


All Articles