Prueba pública de la solución de privacidad y escalabilidad de Ethereum en plataformas en la nube

La tendencia blockchain continúa ganando impulso. Cada vez más expertos predicen la adaptación universal de esta tecnología en un futuro próximo. Por el momento, siguen sin resolverse varios problemas que lo impiden.

En primer lugar, los sistemas blockchain modernos no escalan bien. Por ejemplo, Ethereum tiene un rendimiento de sólo 20 transacciones por segundo y, a pesar de sus muchas ventajas, no es adecuado para grandes empresas.

Al mismo tiempo, Ethereum es valorado por su poderosa protección contra piratería y fallas de la red. Así que no deberías descartarlo. Tiene más sentido corregir las deficiencias de Ethereum y convertirlas en ventajas.

Prueba pública de la solución de privacidad y escalabilidad de Ethereum en plataformas en la nube

Plasma Cash como solución de 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 conjuntamente con Joseph Poon, cofundador de Lightning Network, y se presenta como una solución para aumentar la potencia informática de la cadena de bloques Ethereum. Las primeras noticias sobre Plasma se filtraron a los medios en 2017.

Esta plataforma proporciona una capa externa de contratos inteligentes que pueden interactuar con la cadena de bloques principal, descargando así la cadena raíz y reduciendo las tarifas de transacción para contratos inteligentes y aplicaciones descentralizadas (DApps).

La información detallada sobre el desarrollo se presentó en el documento “Plasma: contratos inteligentes autónomos escalables", de agosto de 2017.

Buterin reconoció que Plasma tiene problemas de escalabilidad inherentes: cada usuario debe descargar y autenticar cada bloque de Plasma, lo que evita el escalado exponencial.

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

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

"Los usuarios ahora sólo necesitan verificar la disponibilidad y validez de la cadena Plasma para el índice específico asociado con las monedas que quieren gastar, poseen y que les interesan", dijo Buterin.

Según los desarrolladores, Plasma Cash es una cura eficaz para los hacks en Ethereum. Cada moneda Plasma tiene un dueño y es única. Nadie puede apoderarse de las monedas de otro usuario sin su conocimiento. Un poseedor de una moneda puede evitar posibles retiros fraudulentos a través del sistema de "quejas" presentando sus "datos de evidencia" en el historial de su moneda.

Probando Plasma Cash en Mongo Atlas

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

  1. Protección confiable contra la pérdida de datos, ya que hay varias réplicas que se sincronizan entre sí en el clúster.
  2. Acceso rápido, ya que se puede crear un clúster en las tres plataformas en la nube más populares: Amazon, Google, Azure. Como resultado, el nodo Plasma Cash se puede implementar en muchos centros de datos ubicados cerca de Mongo Atlas. Hemos demostrado que la velocidad no cae mucho, incluso si los nodos Plasma se implementan en centros de datos más remotos.
  3. Los nodos de plasma, utilizados en modo de solo lectura, pueden conectarse a un clúster Mongo y ubicarse en diferentes partes del mundo, lo que mejora la geoescalabilidad (los nodos están más cerca de los usuarios).
  4. Implementar un nuevo nodo es fácil, ya que no es necesario volver a sincronizar todo. Puede simplemente conectarse a un clúster Mongo existente o hacer una copia rápidamente y configurar una conexión a él.
  5. Es fácil escalar su base de datos. Con el tiempo, habrá más datos disponibles y podrá aumentar el tamaño de los nodos del clúster según sea necesario.

Prueba pública de la solución de privacidad y escalabilidad de Ethereum en plataformas en la nube

Utilizamos los siguientes servidores para realizar pruebas:

  • 3 servidores virtuales Azure Standard E4s v3 (4 vcpus, 32 GiB de memoria). Cada servidor tiene 3 nodos. 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 réplica.

Prueba 1

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


El estado inicial: último bloque #213; 0 transacciones y tokens se guardan en la base de datos.

00:00 - Se lanzan 3 scripts que generan y envían 100 transacciones cada uno
00:29 - Ha comenzado el envío de 100 transacciones a los nodos n.° 1 y n.° 2
00:32 - Ha comenzado el envío de 100 transacciones al nodo n.° 3
00:32 - El nodo n.° 1 tomó 11703 transacciones del grupo y formó el bloque n.° 214 (9fb)
00:34 — El nodo n.° 2 tomó 27088 transacciones del grupo y formó el bloque n.° 214 (ef4)
00:34 — El bloque n.° 214 (9fb) se firma y se envía a otros nodos para su validación
00:36 - El nodo n.° 3 tomó 11900 transacciones del grupo y formó el bloque n.° 214 (983)
00:37 — El bloque n.° 214 (9fb) se valida y se envía a la cadena raíz
00:38 — El bloque n.° 214 (983) se firma y se envía a otros nodos para su validación.
00:38 — El bloque n.° 214 (ef4) se firma y se envía a otros nodos para su validación.
00:40: el bloque n.° 214 (983) se valida y se envía a la cadena raíz
00:41 — Todos los nodos recibieron información de la cadena raíz de que se agregó el bloque n.° 214 (9fb) y comenzaron a aplicar 11703 transacciones.
00:45: todos los nodos recibieron información de la cadena raíz de que se agregó el bloque n.° 215 (983) y comenzaron a aplicar 11900 transacciones.
00:51 — El bloque n.° 214 (ef4) se valida y se envía a la cadena raíz
00:52 — El nodo n.° 1 tomó 51469 transacciones del grupo y formó el bloque n.° 216 (ea0)
00:56 — El nodo n.° 3 tomó 55102 transacciones del grupo y formó el bloque n.° 216 (f75)
00:58 — El script de demostración ha terminado su trabajo para el nodo n.° 2
00:58 — El bloque n.° 216 (ea0) se firma y se envía a otros nodos para su validación.
00:58: todos los nodos recibieron información de la cadena raíz, se agregó el bloque n.° 216 (ef4) y comenzaron a aplicar 27088 transacciones.
01:04: el bloque n.° 216 (f75) se firma y se envía a otros nodos para su validación
01:14 — El nodo n.° 2 tomó 72912 transacciones del grupo y formó el bloque n.° 217 (f85)
01:15 — El script de demostración ha terminado de funcionar para los nodos n.° 1 y n.° 2
01:17 — Los bloques n.° 216 (f75) y n.° 216 (ea0) se validan y envían a la cadena raíz
01:21 — El bloque n.° 217 (f85) se firma y se envía a otros nodos para su validación.
01:26 - Los bloques #217 (f75) y #218 (ea0) se agregan a la cadena raíz y los nodos comienzan a aplicar 51469 y 55102 transacciones respectivamente.
01:27 — El bloque n.° 217 (a85) se valida y se envía a la cadena raíz
01:41 - El nodo n.° 1 tomó 36828 transacciones del grupo y formó el bloque n.° 219 (46f)
01:41 - El nodo n.° 3 tomó 32998 transacciones del grupo y formó el bloque n.° 219 (bb3)
01:43 — Todos los nodos recibieron información de la cadena raíz de que se agregó el bloque n.° 219 (a85) y comenzaron a aplicar 72912 transacciones.
01:46 — El bloque n.° 219 (46f) se firma y se envía a otros nodos para su validación.
01:46 — El bloque n.° 219 (bb3) se firma y se envía a otros nodos para su validación.
01:53 — El nodo n.° 2 procesó todas las 100 XNUMX transacciones que estaban en el grupo
02:37 — El bloque n.° 219 (bb3) se valida y se envía a la cadena raíz
02:41 — El bloque n.° 219 (46f) se valida y se envía a la cadena raíz
02:48 — Los bloques n.° 220 (bb3) y n.° 221 (46f) se agregan a la cadena raíz y los nodos comienzan a aplicar 32998 y 36828 transacciones respectivamente.
02:54 — El nodo n.° 1 procesó todas las 100 XNUMX transacciones que estaban en el grupo
02:55 — El nodo n.° 3 procesó todas las 100 XNUMX transacciones que estaban en el grupo
04:12 - Todos los nodos contienen 300 transacciones y tokens, último bloque #221

Prueba 2

3 nodos reciben 1kk de transacciones cada uno. En total, los 9 nodos contienen 3 transacciones y tokens.

El estado inicial: último bloque #213; 0 transacciones y tokens se guardan en la base de datos.

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

Prueba pública de la solución de privacidad y escalabilidad de Ethereum en plataformas en la nube

resultados

Se descubrió que los servidores virtuales de Azure no tenían suficiente potencia de procesamiento para procesar una cantidad tan grande de transacciones. Pero el sistema hizo frente bien a la tarea principal de las pruebas, es decir, demostrar el funcionamiento de Plasma Cash con MongoDB.

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

El artículo fue coescrito por Alejandro Nashivan, desarrollador Senior Soluciones inteligentes Inc..

Anteriormente equipo de desarrollo Opporty Ya probé la velocidad de Plasma Cash. Los resultados se presentan en este articulo.

Fuente: habr.com

Añadir un comentario