Pruebas públicas de una solución de privacidad y escalabilidad en Ethereum en plataformas en la nube

La tendencia del blockchain sigue ganando impulso. Cada vez más expertos pronostican una adaptación universal de esta tecnología en un futuro cercano. Actualmente, existen varios problemas no resueltos que obstaculizan esto.

Primero que todo, los sistemas blockchain modernos tienen dificultades para escalar. Por ejemplo, la capacidad de transacción de Ethereum es de solo 20 transacciones por segundo, y a pesar de sus numerosas ventajas, no es adecuado para empresas grandes.

Al mismo tiempo, Ethereum es valorado por su potente protección contra hacks y caídas de red. Así que no debería ser descartado. Sería más sensato corregir las deficiencias de Ethereum y convertirlas en ventajas.

Pruebas públicas de una solución de privacidad y escalabilidad en Ethereum en plataformas en la nube

Plasma Cash como solución para la privacidad y escalabilidad en Ethereum

Plasma es una tecnología presentada por Vitalik Buterin, cofundador del proyecto Ethereum, en la conferencia EthCC en París en 2018. Fue desarrollada junto con Joseph Poon, cofundador de Lightning Network, y se plantea como una solución que aumenta la capacidad computacional de la blockchain Ethereum. Las primeras noticias sobre Plasma se filtraron a los medios en 2017.

Esta plataforma representa un nivel externo de contratos inteligentes que puede interactuar con la blockchain principal, aliviando así la cadena raíz, reduciendo las tarifas de transacción para contratos inteligentes y aplicaciones descentralizadas (DApps).

La información detallada sobre el desarrollo se expuso en el documento "Plasma: Contratos Inteligentes Autónomos Escalables" datado en agosto de 2017.

Buterin reconoció que Plasma tiene problemas de escalabilidad: cada usuario debe cargar y verificar la autenticidad de cada bloque de Plasma, lo que impide el escalamiento exponencial.

Para corregir esta deficiencia, se desarrolló Plasma Cash, una cadena lateral compuesta por un contrato inteligente y una red privada basada en Node.js, que periódicamente transfiere su estado a la cadena raíz (Ethereum). Proporciona descentralización, seguridad y escalabilidad en la blockchain, resolviendo así la Trilema de Escalabilidad.

Una ventaja importante de Plasma Cash en comparación con Plasma es que atrae la atención de los usuarios solo hacia los bloques que contienen las monedas que les interesan:

«Ahora los usuarios solo necesitan verificar la disponibilidad y la corrección de la cadena de Plasma para un índice especial relacionado con las monedas que desean gastar, de las cuales son propietarios y que les interesan», dijo Buterin.

Según los desarrolladores, Plasma Cash es una solución eficaz contra los hackeos en Ethereum. Cada moneda de Plasma tiene un propietario y es única. Nadie puede apoderarse de las monedas de otro usuario sin su conocimiento. El titular de la moneda puede prevenir un posible retiro fraudulento a través del sistema de 'reclamaciones', presentando sus 'datos de prueba' en el historial de su moneda.

Pruebas de Plasma Cash en Mongo Atlas

Debido a su novedad, Plasma Cash sigue siendo poco estudiada. Los especialistas en blockchain están probando activamente su interacción con varios servicios en la nube y bases de datos, documentando deficiencias y encontrando formas de corregirlas. En particular, las pruebas en Mongo Atlas han revelado las siguientes ventajas al trabajar con Plasma:

  1. Protección confiable contra la pérdida de datos, ya que varias réplicas se sincronizan entre sí en el clúster.
  2. Acceso rápido, ya que el clúster se puede crear en las tres plataformas en la nube más populares: Amazon, Google, Azure. Como resultado, el nodo de Plasma Cash se puede desplegar en muchos centros de datos cercanos a Mongo Atlas. Hemos demostrado que la velocidad no disminuye mucho, incluso si los nodos de Plasma se despliegan en centros de datos más lejanos.
  3. Los nodos de Plasma, utilizados solo en modo de lectura, pueden conectarse a un único clúster de Mongo y estar ubicados en diferentes partes del mundo, lo que mejora la geo-escalabilidad (los nodos están más cerca de los usuarios).
  4. Desplegar un nuevo nodo es fácil, ya que no es necesario sincronizar todo de nuevo. Se puede conectar simplemente a un clúster de Mongo existente o hacer una copia rápida y configurar la conexión a él.
  5. Escalar la base de datos es sencillo. Con el tiempo, la cantidad de datos aumenta, y se puede ampliar el tamaño de los nodos en el clúster según sea necesario.

Pruebas públicas de una solución de privacidad y escalabilidad en Ethereum en plataformas en la nube

Hemos utilizado los siguientes servidores para realizar las pruebas:

  • 3 servidores virtuales de Azure Standard E4s v3 (4 vcpus, 32 GiB de memoria). Cada servidor tiene 3 nodos levantados. Uno de ellos puede enviar bloques a la cadena raíz.
  • Cada nodo está conectado a su propio clúster Mongo Atlas M50, que contiene 3 nodos en modo de réplica.

Prueba 1

3 nodos reciben 100k transacciones cada uno. En total, hay 300k transacciones y tokens en los 9 nodos.

Reproducir video

Estado inicial: último bloque #213; la base de datos ha guardado 0 transacciones y tokens.

00:00 — Se han iniciado 3 scripts que generan y envían 100k transacciones cada uno.
00:29 — Comenzó el envío de 100k transacciones a los nodos #1 y #2.
00:32 — Comenzó el envío de 100k transacciones al nodo #3.
00:32 — El nodo #1 tomó 11703 transacciones del pool y está formando el bloque #214 (9fb).
00:34 — El nodo #2 tomó 27088 transacciones del pool y está formando el bloque #214 (ef4).
00:34 — El bloque #214 (9fb) ha sido firmado y se envía a otros nodos para su validación.
00:36 — El nodo #3 tomó 11900 transacciones del pool y está formando el bloque #214 (983).
00:37 — El bloque #214 (9fb) ha sido validado y enviado a la cadena raíz.
00:38 — El bloque #214 (983) ha sido firmado y se envía a otros nodos para su validación.
00:38 — El bloque #214 (ef4) ha sido firmado y se envía a otros nodos para su validación.
00:40 — El bloque #214 (983) ha sido validado y enviado a la cadena raíz.
00:41 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #214 (9fb) ha sido agregado y comienzan a aplicar 11703 transacciones.
00:45 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #215 (983) ha sido agregado y comienzan a aplicar 11900 transacciones.
00:51 — El bloque #214 (ef4) ha sido validado y enviado a la cadena raíz.
00:52 — El nodo #1 tomó 51469 transacciones del pool y está formando el bloque #216 (ea0).
00:56 — El nodo #3 tomó 55102 transacciones del pool y está formando el bloque #216 (f75).
00:58 — El script de demostración ha terminado su trabajo para el nodo #2.
00:58 — El bloque #216 (ea0) ha sido firmado y se envía a otros nodos para su validación.
00:58 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #216 (ef4) ha sido agregado y comienzan a aplicar 27088 transacciones.
01:04 — El bloque #216 (f75) ha sido firmado y se envía a otros nodos para su validación.
01:14 — El nodo #2 tomó 72912 transacciones del pool y está formando el bloque #217 (f85).
01:15 — El script de demostración ha terminado su trabajo para los nodos #1 y #2.
01:17 — Los bloques #216 (f75) y #216 (ea0) han sido validados y enviados a la cadena raíz.
01:21 — El bloque #217 (f85) ha sido firmado y se envía a otros nodos para su validación.
01:26 — Los bloques #217 (f75) y #218 (ea0) han sido añadidos a la cadena raíz y los nodos comienzan a aplicar 51469 y 55102 transacciones respectivamente.
01:27 — El bloque #217 (a85) ha sido validado y enviado a la cadena raíz.
01:41 — El nodo #1 tomó 36828 transacciones del pool y está formando el bloque #219 (46f).
01:41 — El nodo #3 tomó 32998 transacciones del pool y está formando el bloque #219 (bb3).
01:43 — Todos los nodos han recibido de la cadena raíz la información de que el bloque #219 (a85) ha sido añadido y comienzan a aplicar 72912 transacciones.
01:46 — El bloque #219 (46f) está firmado y se envía a otros nodos para su validación.
01:46 — El bloque #219 (bb3) está firmado y se envía a otros nodos para su validación.
01:53 — El nodo #2 ha procesado todas las 100k transacciones que estaban en el pool.
02:37 — El bloque #219 (bb3) ha sido validado y enviado a la cadena raíz.
02:41 — El bloque #219 (46f) ha sido validado y enviado a la cadena raíz.
02:48 — Los bloques #220 (bb3) y #221 (46f) han sido añadidos a la cadena raíz y los nodos comienzan a aplicar 32998 y 36828 transacciones respectivamente.
02:54 — El nodo #1 ha procesado todas las 100k transacciones que estaban en el pool.
02:55 — El nodo #3 ha procesado todas las 100k transacciones que estaban en el pool.
04:12 — Todos los nodos contienen 300k transacciones y tokens del último bloque #221.

Test 2

3 nodos reciben 1M de transacciones cada uno. En total, hay 3M de transacciones y tokens en los 9 nodos.

Reproducir video

Estado inicial: último bloque #213; la base de datos ha guardado 0 transacciones y tokens.

00:00 — Se han iniciado 3 scripts que generan y envían 1M de transacciones cada uno.
02:29 — Se ha comenzado a enviar 1M de transacciones a los nodos #1 y #2.
02:33 — El nodo #1 tomó 11668 transacciones del pool y está formando el bloque #222 (510).
02:35 — El bloque #222 (510) está firmado y se envía a otros nodos para su validación.
02:37 — El bloque #222 (510) ha sido validado y enviado a la cadena raíz.
02:38 — El nodo #2 tomó 46378 transacciones del pool y está formando el bloque #222 (a9d).
02:38 — Se ha iniciado el envío de 1M de transacciones al nodo #3.
02:41 — El nodo #3 tomó 5504 transacciones del pool y está formando el bloque #222 (387).
02:42 — El bloque #222 (387) está firmado y se envía a otros nodos para su validación.
02:44 — El bloque #222 (a9d) está firmado y se envía a otros nodos para su validación.
02:44 — El bloque #222 (387) ha sido validado y enviado a la cadena raíz.
02:49 — El bloque #222 (a9d) ha sido validado y enviado a la cadena raíz.
02:56 — Los bloques #222 (510), #223 (387) y #224 (a9d) han sido añadidos a la cadena raíz y los nodos comienzan a aplicar 11668, 5504 y 46378 transacciones respectivamente.
03:09 — El nodo #1 tomó 177170 transacciones del pool y está formando el bloque #225 (e50).
03:09 — El nodo #3 tomó 119327 transacciones del pool y está formando el bloque #225 (ccc).
03:10 — El nodo #2 tomó del pool 149772 transacciones y está formando el bloque #225 (404)
03:26 — El bloque #225 (ccc) ha sido firmado y enviado a otros nodos para validación
03:32 — El bloque #225 (404) ha sido firmado y enviado a otros nodos para validación
03:33 — El bloque #225 (e50) ha sido firmado y enviado a otros nodos para validación
03:53 — El bloque #225 (ccc) ha sido validado y enviado a la cadena raíz
04:03 — El bloque #225 (e50) ha sido validado y enviado a la cadena raíz
04:04 — El bloque #225 (404) ha sido validado y enviado a la cadena raíz
04:06 — Todos los nodos han recibido de la cadena raíz información de que el bloque #225 (ccc) ha sido agregado y comienzan a aplicar 119327 transacciones
04:14 — Todos los nodos han recibido de la cadena raíz información de que el bloque #226 (404) ha sido agregado y comienzan a aplicar 149772 transacciones
04:16 — Todos los nodos han recibido de la cadena raíz información de que el bloque #227 (e50) ha sido agregado y comienzan a aplicar 177170 transacciones
04:32 — El nodo #3 tomó del pool 209436 transacciones y está formando el bloque #228 (1e9)
04:40 — El nodo #2 tomó del pool 212669 transacciones y está formando el bloque #228 (e38)
04:40 — El nodo #1 tomó del pool 190144 transacciones y está formando el bloque #228 (861)
05:02 — El bloque #228 (1e9) ha sido firmado y enviado a otros nodos para validación
05:08 — El bloque #228 (861) ha sido firmado y enviado a otros nodos para validación
05:10 — El bloque #228 (e38) ha sido firmado y enviado a otros nodos para validación
06:13 — El bloque #228 (1e9) ha sido validado y enviado a la cadena raíz
06:13 — El bloque #228 (861) ha sido validado y enviado a la cadena raíz
06:13 — El bloque #228 (e38) ha sido validado y enviado a la cadena raíz
06:39 — Los bloques #228 (861), #229 (1e9) y #230 (e38) han sido añadidos a la cadena raíz y los nodos comienzan a aplicar 190144, 209436 y 212669 transacciones respectivamente
07:07 — El nodo #1 tomó del pool 199770 transacciones y está formando el bloque #231 (e04)
07:09 — El nodo #2 tomó del pool 190473 transacciones y está formando el bloque #231 (36e)
07:09 — El nodo #3 tomó del pool 178807 transacciones y está formando el bloque #231 (f43)
07:34 — El bloque #231 (e04) ha sido firmado y enviado a otros nodos para validación
07:37 — El bloque #231 (36e) ha sido firmado y enviado a otros nodos para validación
07:37 — El bloque #231 (f43) ha sido firmado y enviado a otros nodos para validación
08:49 — El bloque #231 (e04) ha sido validado y enviado a la cadena raíz
08:51 — El bloque #231 (f43) ha sido validado y enviado a la cadena raíz
08:52 — El bloque #231 (36e) ha sido validado y enviado a la cadena raíz
09:47 — Los bloques #231 (e04), #232 (f43) y #233 (36e) han sido añadidos a la cadena raíz y los nodos comienzan a aplicar 199770, 178807 y 190473 transacciones respectivamente.
10:16 — El nodo #1 tomó del pool 153075 transacciones y está formando el bloque #234 (e04).
10:16 — El nodo #2 tomó del pool 168035 transacciones y está formando el bloque #234 (36e).
10:16 — El nodo #3 tomó del pool 166685 transacciones y está formando el bloque #234 (f43).
10:42 — El bloque #234 (56d) ha sido firmado y se envía a otros nodos para su validación.
11:59 — El bloque #234 (1bb) ha sido validado y enviado a la cadena raíz.
12:02 — El bloque #234 (58a) ha sido validado y enviado a la cadena raíz.
12:02 — El bloque #234 (56d) ha sido validado y enviado a la cadena raíz.
12:48 — Los bloques #234 (1bb), #235 (58a) y #236 (56d) han sido añadidos a la cadena raíz y los nodos comienzan a aplicar 153075, 168035 y 166685 transacciones respectivamente.
13:14 — El nodo #1 tomó del pool 112226 transacciones y está formando el bloque #237 (5c0).
13:16 — El nodo #2 tomó del pool 87550 transacciones y está formando el bloque #234 (58a).
13:16 — El nodo #3 tomó del pool 99594 transacciones y está formando el bloque #234 (56d).
13:30 — El bloque #237 (5c0) ha sido firmado y se envía a otros nodos para su validación.
13:32 — El bloque #237 (58a) ha sido firmado y se envía a otros nodos para su validación.
13:34 — El bloque #237 (56d) ha sido firmado y se envía a otros nodos para su validación.
14:47 — El bloque #237 (58a) ha sido validado y enviado a la cadena raíz.
14:53 — El bloque #237 (5c0) no fue validado dentro del tiempo especificado.
14:53 — Todos los nodos han recibido de la cadena raíz la información de que el bloque #237 (58a) ha sido añadido y comienzan a aplicar 87550 transacciones.
14:54 — El bloque #237 (56d) ha sido validado y enviado a la cadena raíz.
15:02 — El nodo #1 tomó del pool 181206 transacciones y está formando el bloque #238 (c5f).
15:06 — Todos los nodos han recibido de la cadena raíz la información de que el bloque #238 (56d) ha sido añadido y comienzan a aplicar 99594 transacciones.
15:12 — El nodo #2 tomó del pool 51990 transacciones y está formando el bloque #239 (ad8).
15:20 — El bloque #239 (ad8) ha sido firmado y se envía a otros nodos para su validación.
15:25 — El nodo #3 tomó del pool 46685 transacciones y está formando el bloque #239 (857).
15:30 — El bloque #238 (c5f) ha sido firmado y se envía a otros nodos para su validación.
15:34 — El bloque #239 (857) ha sido firmado y se envía a otros nodos para su validación.
16:32 — El bloque #239 (857) ha sido validado y enviado a la cadena raíz.
16:42 — Todos los nodos han recibido de la cadena raíz la información de que el bloque #239 (857) ha sido añadido y comienzan a aplicar 46685 transacciones.
16:42 — El bloque #238 (c5f) ha sido validado y enviado a la cadena raíz.
16:42 — El bloque #239 (ad8) no fue validado en el tiempo especificado
16:54 — El nodo #2 tomó del grupo 96882 transacciones y está formando el bloque #240 (e6e)
16:56 — El nodo #3 tomó del grupo 39704 transacciones y está formando el bloque #240 (a47)
17:02 — El bloque #240 (a47) fue firmado y se envía a otros nodos para validación
17:02 — El bloque #240 (e6e) fue firmado y se envía a otros nodos para validación
17:18 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #240 (c5f) fue añadido y comienzan a aplicar 181206 transacciones
17:45 — El bloque #240 (a47) fue validado y enviado a la cadena raíz
17:47 — El nodo #1 tomó del grupo 54956 transacciones y está formando el bloque #241 (170)
17:59 — El bloque #241 (170) fue firmado y se envía a otros nodos para validación
18:09 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #241 (a47) fue añadido y comienzan a aplicar 181206 transacciones
18:20 — El nodo #3 tomó del grupo 39104 transacciones y está formando el bloque #242 (955)
18:24 — El bloque #240 (e6e) fue validado y enviado a la cadena raíz
18:28 — El bloque #242 (955) fue firmado y se envía a otros nodos para validación
18:09 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #242 (e6e) fue añadido y comienzan a aplicar 96882 transacciones
19:06 — El script de demostración ha finalizado su trabajo para el nodo #1
19:08 — El script de demostración ha finalizado su trabajo para el nodo #2
19:08 — El nodo #2 tomó del grupo 48241 transacciones y está formando el bloque #243 (fde)
19:14 — El bloque #243 (fde) fue firmado y se envía a otros nodos para validación
19:18 — El bloque #241 (170) no fue validado en el tiempo especificado
19:28 — El nodo #1 tomó del grupo 86967 transacciones y está formando el bloque #243 (37c)
19:35 — El bloque #242 (955) fue validado y enviado a la cadena raíz
19:40 — El bloque #243 (37c) fue firmado y se envía a otros nodos para validación
20:05 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #243 (955) fue añadido y comienzan a aplicar 39104 transacciones
20:15 — El bloque #243 (fde) fue validado y enviado a la cadena raíz
20:19 — El nodo #3 tomó del grupo 42981 transacciones y está formando el bloque #244 (9b5)
20:26 — El bloque #244 (9b5) fue firmado y se envía a otros nodos para validación
20:28 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #244 (fde) fue añadido y comienzan a aplicar 48241 transacciones
20:32 — El nodo #2 procesó todas las 1k transacciones que estaban en el grupo
21:05 — El bloque #243 (37c) no fue validado en el tiempo especificado
21:15 — El nodo #1 tomó del grupo 86967 transacciones y está formando el bloque #245 (37c)
21:32 — Bloque #245 (37c) firmado y enviado a otros nodos para validación
21:42 — Bloque #244 (9b5) validado y enviado a la cadena raíz
21:50 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #245 (9b5) ha sido agregado y comienzan a aplicar 42981 transacciones
22:04 — Nodo #3 tomó del pool 45361 transacciones y está formando el bloque #246 (3f9)
22:11 — Bloque #246 (3f9) firmado y enviado a otros nodos para validación
22:51 — Bloque #245 (37c) no fue validado en el tiempo indicado
23:01 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #246 (37c)
23:08 — El script de demostración ha terminado su trabajo para el nodo #3
23:15 — Bloque #246 (37c) firmado y enviado a otros nodos para validación
23:32 — Bloque #246 (3f9) no fue validado en el tiempo indicado
23:42 — Nodo #3 tomó del pool 52173 transacciones y está formando el bloque #246 (71d)
23:51 — Bloque #246 (71d) firmado y enviado a otros nodos para validación
24:38 — Bloque #246 (37c) no fue validado en el tiempo indicado
25:01 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #246 (37c)
25:06 — Bloque #246 (71d) validado y enviado a la cadena raíz
25:12 — Bloque #246 (37c) firmado y enviado a otros nodos para validación
25:14 — Todos los nodos recibieron de la cadena raíz la información de que el bloque #246 (71d) ha sido agregado y comienzan a aplicar 52173 transacciones
25:29 — Nodo #3 procesó todas las 1k transacciones que estaban en el pool
26:40 — Bloque #247 (37c) no fue validado en el tiempo indicado
26:47 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #247 (37c)
27:03 — Bloque #247 (37c) firmado y enviado a otros nodos para validación
28:29 — Bloque #247 (37c) no fue validado en el tiempo indicado
28:35 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #247 (37c)
28:49 — Bloque #247 (37c) firmado y enviado a otros nodos para validación
30:13 — Bloque #247 (37c) no fue validado en el tiempo indicado
30:23 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #247 (37c)
30:38 — Bloque #247 (37c) firmado y enviado a otros nodos para validación
32:00 — Bloque #247 (37c) no fue validado en el tiempo indicado
32:11 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #247 (37c)
32:26 — Bloque #247 (37c) firmado y enviado a otros nodos para validación
33:49 — Bloque #247 (37c) no fue validado en el tiempo indicado
33:59 — Nodo #1 tomó del pool 86967 transacciones y está formando el bloque #247 (37c)
34:12 — Bloque #247 (37c) firmado y enviado a otros nodos para validación
35:34 — Bloque #247 (37c) validado y enviado a la cadena raíz
35:54 — Todos los nodos recibieron de la cadena raíz información de que el bloque #247 (37c) ha sido añadido y comienzan a aplicar 86967 transacciones
36:11 — Nodo #1 procesó todas las 1M de transacciones que estaban en el pool
55:12 — El primer nodo procesó todas las 3M de transacciones

Pruebas públicas de una solución de privacidad y escalabilidad en Ethereum en plataformas en la nube

Resultados

Se ha encontrado que los servidores virtuales de Azure tienen insuficiente potencia de procesamiento para manejar tal cantidad de transacciones. Sin embargo, en cuanto a la tarea principal de las pruebas, que era demostrar el funcionamiento de Plasma Cash con MongoDB, el sistema funcionó bien.

Te invitamos a visitar GitHub el proyecto: https://github.com/opporty-com/Plasma-Cash/tree/new-version

El artículo fue escrito en colaboración con Alexander Nashivan, desarrollador senior de Clever Solution Inc.

Anteriormente, el equipo de desarrolladores Opporty ya había probado la velocidad de Plasma Cash. Los resultados se exponen en este artículo.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster