La tendencia de blockchain continúa ganando impulso. Cada vez más expertos predicen la adaptación universal de esta tecnología en el futuro cercano. Por el momento, varios problemas no resueltos siguen sin resolverse.
En primer lugar, los sistemas modernos de blockchain no escalan bien. Por ejemplo, el ancho de banda de Ethereum es de solo 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 informática e interrupciones de la red. Entonces no deberías descartarlo. Es mucho más recomendable corregir las deficiencias de Ethereum y convertirlas en ventajas.

Plasma Cash como una solución para la privacidad y la escalabilidad en Ethereum
El plasma es una tecnología introducida por Vitalik Buterin, cofundador del proyecto Ethereum, en la conferencia EthCC en París en 2018. Fue desarrollado conjuntamente con Joseph Pune, cofundador de Lightning Network, y se anunció como una solución que aumenta el poder de cómputo de la cadena de bloques Ethereum. Las primeras noticias de Plasma se filtraron a los medios en 2017.
Esta plataforma es un nivel externo de contratos inteligentes que puede interactuar con la cadena de bloques principal, descargando así la cadena raíz, reduciendo las tarifas de transacción para contratos inteligentes y aplicaciones descentralizadas (DApps).
Se presentó información detallada sobre el desarrollo en el documento "
Plasma: contratos inteligentes autónomos escalables ", con fecha de agosto de 2017.
Buterin reconoció que Plasma tiene problemas de escalabilidad: cada usuario debe descargar y autenticar cada bloque de Plasma, lo que evita el escalamiento exponencial.
Para corregir este inconveniente, se desarrolló Plasma Cash, una cadena subsidiaria que consiste en 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 escalabilidad.
Una ventaja importante de Plasma Cash en comparación con Plasma es que atrae la atención de los usuarios solo sobre aquellos bloques que contienen las monedas que les interesan:
"Ahora los usuarios necesitan verificar la disponibilidad y la corrección de la cadena de Plasma solo para un índice especial relacionado con las monedas que quieren gastar, poseer y que les interesan", dijo Buterin.
Según los desarrolladores, Plasma Cash es una cura efectiva para la piratería en Ethereum. Cada moneda de plasma tiene un dueño y es única. Nadie puede tomar posesión de las monedas de otro usuario sin su conocimiento. El titular de la moneda puede evitar un posible retiro fraudulento de fondos a través del sistema de "quejas" al presentar su "evidencia" en la historia de su moneda.
Prueba de Plasma Cash en Mongo Atlas
Debido a su novedad, Plasma Cash todavía está poco estudiado. Los expertos de Blockchain están probando activamente su interacción con varios servicios y bases de datos en la nube, corrigen deficiencias y encuentran formas de corregirlas. En particular, las pruebas en Mongo Atlas revelaron las siguientes ventajas cuando se trabaja con Plasma:
- Protección confiable contra la pérdida de datos , ya que varias réplicas se sincronizan entre sí en un clúster.
- 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 Plasma Cash se puede implementar en muchos centros de datos ubicados cerca de Mongo Atlas. Hemos demostrado que la velocidad no baja mucho, incluso si los nodos de plasma se implementan en centros de datos más remotos.
- Los nodos de solo lectura de plasma se pueden conectar a un clúster Mongo y ubicarse en diferentes partes del mundo, lo que mejora la escalabilidad geográfica (los nodos están más cerca de los usuarios).
- Implementar un nuevo nodo es fácil , ya que no necesita volver a sincronizar todo. Simplemente puede conectarse a un clúster Mongo existente o hacer una copia rápidamente y configurar una conexión a él.
- Escalar una base de datos es fácil . Con el tiempo, los datos se hacen más grandes y puede aumentar el tamaño de los nodos en el clúster según sea necesario.
Utilizamos los siguientes servidores para las pruebas:- 3 servidores virtuales de Azure Standard E4s v3 (4 vcpus, 32 GiB de memoria). En cada servidor se levantan 3 nodos. Uno de ellos puede enviar bloques a la cadena raíz.
- Cada nodo está conectado a su clúster Mongo Atlas M50, que contiene 3 nodos en modo réplica.
Prueba 1
3 nodos reciben 100k transacciones cada uno. En total, los 9 nodos contienen 300k transacciones y tokens.
Estado inicial: último bloque # 213; 0 transacciones y tokens se almacenan en la base de datos.
00:00 - Se lanzan 3 scripts que generan y envían 100k transacciones
00:29 - Comenzó el envío de 100k transacciones a los nodos # 1 y # 2
00:32 - El envío de 100k transacciones al nodo # 3 ha comenzado
00:32 - El nodo # 1 tomó 11703 transacciones del grupo y forma el bloque # 214 (9fb)
00:34 - Noda # 2 tomó 27088 transacciones del grupo y forma el bloque # 214 (ef4)
00:34 - El bloque # 214 (9fb) se firma y se envía a otros nodos para su validación
00:36 - Noda # 3 tomó 11900 transacciones del grupo y forma el bloque # 214 (983)
00:37 - El bloque # 214 (9fb) se valida y se envía a la cadena raíz
00:38 - El bloque # 214 (983) se firma y se envía a otros nodos para su validación
00:38 - El bloque # 214 (ef4) se firma y se envía a otros nodos para su validación
00:40 - El bloque # 214 (983) fue validado y enviado a la cadena raíz
00:41 - Todos los nodos recibieron información de la cadena raíz que se ha agregado el bloque # 214 (9fb) y comienzan a aplicarse 11703 transacciones
00:45 - Todos los nodos recibieron información de la cadena raíz que se agregó el bloque # 215 (983) y comienzan a aplicarse 11900 transacciones
00:51 - El bloque # 214 (ef4) se valida y se envía a la cadena raíz
00:52 - El nodo # 1 tomó 51,469 transacciones del grupo y forma el bloque # 216 (ea0)
00:56 - Noda # 3 tomó 55102 transacciones del grupo y forma el bloque # 216 (f75)
00:58 - El script de demostración terminó su trabajo para el nodo # 2
00:58 - El bloque # 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 que se ha agregado el bloque # 216 (ef4) y las transacciones 27088 están comenzando a aplicarse
01:04 - El bloque # 216 (f75) se firma y se envía a otros nodos para su validación
01:14 - Noda # 2 tomó 72912 transacciones del grupo y forma el bloque # 217 (f85)
01:15 - El script de demostración terminó su trabajo para los nodos # 1 y # 2
01:17 - Los bloques # 216 (f75) y # 216 (ea0) se validan y se envían a la cadena raíz
01:21 - El bloque # 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 transacciones 51469 y 55102, respectivamente
01:27 - El bloque # 217 (a85) fue validado y enviado a la cadena raíz
01:41 - Noda # 1 tomó 36828 transacciones del grupo y forma el bloque # 219 (46f)
01:41 - Noda # 3 tomó 32998 transacciones del grupo y forma el bloque # 219 (bb3)
01:43 - Todos los nodos recibieron información de la cadena raíz que el bloque # 219 (a85) ha sido agregado y las transacciones 72912 están comenzando a aplicarse
01:46 - El bloque # 219 (46f) se firma y se envía a otros nodos para su validación
01:46 - El bloque # 219 (bb3) se firma y se envía a otros nodos para su validación
01:53 - Noda # 2 procesó todas las 100k transacciones que estaban en el grupo
02:37 - El bloque # 219 (bb3) se valida y se envía a la cadena raíz
02:41 - El bloque # 219 (46f) se valida y se envía a la cadena raíz
02:48 - Los bloques # 220 (bb3) y # 221 (46f) se agregan a la cadena raíz y los nodos comienzan a aplicar transacciones 32998 y 36828, respectivamente
02:54 - El nodo # 1 procesó todas las transacciones de 100k que estaban en el grupo
02:55 - Noda # 3 procesó todas las transacciones de 100k que estaban en el grupo
04:12 - Todos los nodos contienen 300k transacciones y tokens último bloque # 221
Prueba 2
3 nodos reciben 1kk de transacciones. El total en los 9 nodos contiene 3kk transacciones y tokens.
Estado inicial: último bloque # 213; 0 transacciones y tokens se almacenan en la base de datos.
00:00 - Se lanzan 3 scripts que generan y envían transacciones de 1kk
02:29 - Comenzó a enviar transacciones de 1kk a los nodos # 1 y # 2
02:33 - Noda # 1 tomó 11668 transacciones del grupo y forma el bloque # 222 (510)
02:35 - El bloque # 222 (510) se firma y se envía a otros nodos para su validación
02:37 - El bloque # 222 (510) se valida y se envía a la cadena raíz
02:38 - Noda # 2 tomó 46378 transacciones del grupo y forma el bloque # 222 (a9d)
02:38 - Comenzó a enviar transacciones de 1kk al nodo # 3
02:41 - Noda # 3 tomó 5504 transacciones del grupo y forma el bloque # 222 (387)
02:42 - El bloque # 222 (387) se firma y se envía a otros nodos para su validación
02:44 - El bloque # 222 (a9d) se firma y se envía a otros nodos para su validación
02:44 - El bloque # 222 (387) se valida y se envía a la cadena raíz
02:49 - El bloque # 222 (a9d) se valida y se envía 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 - Noda # 1 tomó 177170 transacciones del grupo y forma el bloque # 225 (e50)
03:09 - El nodo # 3 tomó 119327 transacciones del grupo y forma el bloque # 225 (ccc)
03:10 - Noda # 2 tomó 149772 transacciones del grupo y forma el bloque # 225 (404)
03:26 - El bloque # 225 (ccc) se firma y se envía a otros nodos para su validación
03:32 - El bloque # 225 (404) se firma y se envía a otros nodos para su validación
03:33 - El bloque # 225 (e50) se firma y se envía a otros nodos para su validación
03:53 - El bloque # 225 (ccc) se valida y se envía a la cadena raíz
04:03 - El bloque # 225 (e50) se valida y se envía a la cadena raíz
04:04 - El bloque # 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 que se ha agregado el bloque # 225 (ccc) y se están comenzando a aplicar 119327 transacciones
04:14 - Todos los nodos recibieron información de la cadena raíz que se ha agregado el bloque # 226 (404) y comienzan a aplicarse 149772 transacciones
04:16 - Se agregaron todos los nodos que recibieron información de la cadena raíz que bloque # 227 (e50) y se comienzan a aplicar 177170 transacciones
04:32 - El nodo # 3 tomó 209436 transacciones del grupo y forma el bloque # 228 (1e9)
04:40 - Noda # 2 tomó 212669 transacciones del grupo y forma el bloque # 228 (e38)
04:40 - Noda # 1 tomó 190144 transacciones del grupo y forma el bloque # 228 (861)
05:02 - El bloque # 228 (1e9) se firma y se envía a otros nodos para su validación
05:08 - El bloque # 228 (861) se firma y se envía a otros nodos para su validación
05:10 - El bloque # 228 (e38) se firma y se envía a otros nodos para su validación
06:13 - El bloque # 228 (1e9) se valida y se envía a la cadena raíz
06:13 - El bloque # 228 (861) fue validado y enviado a la cadena raíz
06:13 - El bloque # 228 (e38) fue 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 las transacciones 190144, 209436 y 212669, respectivamente
07:07 - Noda # 1 tomó del grupo 199770 transacciones y formularios bloque # 231 (e04)
07:09 - Noda # 2 tomó 190473 transacciones del grupo y forma el bloque # 231 (36e)
07:09 - Noda # 3 tomó 178807 transacciones del grupo y forma el bloque # 231 (f43)
07:34 - El bloque # 231 (e04) se firma y se envía a otros nodos para su validación
07:37 - El bloque # 231 (36e) se firma y se envía a otros nodos para su validación
07:37 - El bloque # 231 (f43) se firma y se envía a otros nodos para su validación
08:49 - El bloque # 231 (e04) se valida y se envía a la cadena raíz
08:51 - El bloque # 231 (f43) se valida y se envía a la cadena raíz
08:52 - El bloque # 231 (36e) se valida y se envía 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 las transacciones 199770, 178807 y 190473, respectivamente
10:16 - Noda # 1 tomó 153075 transacciones del grupo y forma el bloque # 234 (e04)
10:16 - Noda # 2 tomó 168035 transacciones del grupo y forma el bloque # 234 (36e)
10:16 - Noda # 3 tomó 166685 transacciones del grupo y forma el bloque # 234 (f43)
10:42 - El bloque # 234 (56d) se firma y se envía a otros nodos para su validación
11:59 - El bloque # 234 (1bb) se valida y se envía a la cadena raíz
12:02 - El bloque # 234 (58a) se valida y se envía a la cadena raíz
12:02 - El bloque # 234 (56d) se valida y se envía 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 transacciones 153075, 168035 y 166685, respectivamente
13:14 - El nodo # 1 tomó 112226 transacciones del grupo y forma el bloque # 237 (5c0)
13:16 - El Nodo # 2 tomó 87550 transacciones del grupo y forma el bloque # 234 (58a)
13:16 - El nodo # 3 tomó 99594 transacciones del grupo y forma el bloque # 234 (56d)
13:30 - El bloque # 237 (5c0) se firma y se envía a otros nodos para su validación
13:32 - El bloque # 237 (58a) se firma y se envía a otros nodos para su validación
13:34 - El bloque # 237 (56d) se firma y se envía a otros nodos para su validación
14:47 - El bloque # 237 (58a) se valida y se envía a la cadena raíz
14:53 - El bloque # 237 (5c0) no fue validado por el tiempo especificado
14:53 - Se agregaron todos los nodos que recibieron información de la cadena raíz que bloque # 237 (58a) y comienzan a aplicarse 87550 transacciones
14:54 - El bloque # 237 (56d) se valida y se envía a la cadena raíz
15:02 - Noda # 1 tomó 181206 transacciones del grupo y forma el bloque # 238 (c5f)
15:06 - Se agregaron todos los nodos que recibieron información de la cadena raíz que bloque # 238 (56d) y están comenzando a aplicar 99594 transacciones
15:12 - Noda # 2 tomó 51990 transacciones del grupo y forma el bloque # 239 (ad8)
15:20 - El bloque # 239 (ad8) se firma y se envía a otros nodos para su validación
15:25 - Noda # 3 tomó 46685 transacciones del grupo y forma el bloque # 239 (857)
15:30 - El bloque # 238 (c5f) se firma y se envía a otros nodos para su validación
15:34 - El bloque # 239 (857) se firma y se envía a otros nodos para su validación
16:32 - El bloque # 239 (857) se valida y se envía a la cadena raíz
16:42 - Se agregaron todos los nodos que recibieron información de la cadena raíz que bloque # 239 (857) y 46685 transacciones están comenzando a aplicarse
16:42 - El bloque # 238 (c5f) se valida y se envía a la cadena raíz
16:42 - El bloque # 239 (ad8) no fue validado por el tiempo especificado
16:54 - Noda # 2 tomó 96882 transacciones del grupo y forma el bloque # 240 (e6e)
16:56 - Noda # 3 tomó 39704 transacciones del grupo y forma el bloque # 240 (a47)
17:02 - El bloque # 240 (a47) se firma y se envía a otros nodos para su validación
17:02 - El bloque # 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 que se ha agregado el bloque # 240 (c5f) y comienzan a aplicarse 181206 transacciones
17:45 - El bloque # 240 (a47) se valida y se envía a la cadena raíz
17:47 - Noda # 1 tomó 54956 transacciones del grupo y forma el bloque # 241 (170)
17:59 - El bloque # 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 que se ha agregado el bloque # 241 (a47) y comienzan a aplicarse 181206 transacciones
18:20 - Noda # 3 tomó 39104 transacciones del grupo y forma el bloque # 242 (955)
18:24 - El bloque # 240 (e6e) se valida y se envía a la cadena raíz
18:28 - El bloque # 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 que el bloque # 242 (e6e) se ha agregado y 96882 transacciones están comenzando a aplicarse
19:06 - El script de demostración terminó su trabajo para el nodo # 1
19:08 - El script de demostración terminó su trabajo para el nodo # 2
19:08 - Noda # 2 tomó 48241 transacciones del grupo y forma el bloque # 243 (fde)
19:14 - El bloque # 243 (fde) se firma y se envía a otros nodos para su validación
19:18 - El bloque # 241 (170) no fue válido durante el tiempo especificado
19:28 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 243 (37c)
19:35 - El bloque # 242 (955) se valida y se envía a la cadena raíz
19:40 - El bloque # 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 que el bloque # 243 (955) se ha agregado y 39104 transacciones están comenzando a aplicarse
20:15 - El bloque # 243 (fde) se valida y se envía a la cadena raíz
20:19 - Noda # 3 tomó 42981 transacciones del grupo y forma el bloque # 244 (9b5)
20:26 - El bloque # 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 que se agregó el bloque # 244 (fde) y comenzaron a aplicarse 48241 transacciones
20:32 - El nodo # 2 procesó todas las transacciones de 1kk que estaban en el grupo
21:05 - El bloque # 243 (37c) no fue validado por el tiempo especificado
21:15 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 245 (37c)
21:32 - El bloque # 245 (37c) se firma y se envía a otros nodos para su validación
21:42 - El bloque # 244 (9b5) se valida y se envía a la cadena raíz
21:50 - Se agregaron todos los nodos que recibieron información de la cadena raíz que bloque # 245 (9b5) y 42981 transacciones comienzan a aplicarse
22:04 - Noda # 3 tomó 45361 transacciones del grupo y forma el bloque # 246 (3f9)
22:11 - El bloque # 246 (3f9) se firma y se envía a otros nodos para su validación
22:51 - El bloque # 245 (37c) no fue validado por el tiempo especificado
23:01 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 246 (37c)
23:08 - El script de demostración terminó su trabajo para el nodo # 3
23:15 - El bloque # 246 (37c) se firma y se envía a otros nodos para su validación
23:32 - El bloque # 246 (3f9) no fue válido por el tiempo especificado
23:42 - Noda # 3 tomó 52173 transacciones del grupo y forma el bloque # 246 (71d)
23:51 - El bloque # 246 (71d) se firma y se envía a otros nodos para su validación
24:38 - El bloque # 246 (37c) no fue validado por el tiempo especificado
25:01 - El Nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 246 (37c)
25:06 - El bloque # 246 (71d) se valida y se envía a la cadena raíz
25:12 - El bloque # 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 que se agregó el bloque # 246 (71d) y se comienzan a aplicar 52173 transacciones25:29 - El nodo # 3 procesó todas las transacciones de 1kk que estaban en el grupo26:40 - Bloque # 247 (37c) no se validó durante el tiempo especificado26:47 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 247 (37c)27:03 - El bloque # 247 (37c) se firma y se envía a otros nodos para su validación28:29 - unidad # 247 (37C) no estaba dentro del provalidirovan tiempo especificado28:35 - Noda No. 1 tomada de una piscina de 86967 transacciones y forma una unidad # 247 (37C)28:49 - unidad # 247 (37C) está firmado y enviado a otros nodos de la alidatsiyu30:13 - Unidad # 247 (37C) no era provalidirovan por un tiempo determinado30:23 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 247 (37c)30:38 - El bloque # 247 (37c) se firma y se envía a otros nodos para su validación32:00 - El bloque # 247 (37c) no se validó por el tiempo especificado32:11 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 247 (37c)32:26 - El bloque # 247 (37c) se firma y se envía a otros nodos para su validación33:49 - Bloque # 247 (37c) no fue válido por el tiempo especificado33:59 - El nodo # 1 tomó 86967 transacciones del grupo y forma el bloque # 247 (37c)34:12 - El bloque # 247 (37c) se firma y se envía a otros nodos para su validación35:34 - Bloque # 247 (37c) validado y enviado el reivindicado en la cadena de raíz35:54 - Todos los nodos recibieron información de la cadena raíz que se agregó el bloque # 247 (37c) y comenzaron a aplicar 86967 transacciones36:11 - El nodo # 1 procesó todas las transacciones de 1kk que estaban en el grupo55:12 - el primer nodo procesado todas las transacciones de 3kk
Resumen
Se reveló que los servidores virtuales de Azure no tenían suficiente poder de procesamiento para manejar una cantidad tan grande de transacciones. Pero con la tarea principal de las pruebas, a saber, demostrar el trabajo de Plasma Cash con MongoDB, el sistema se las arregló bien.Lo invitamos a visitar la GitHub proyecto: https://github.com/opporty-com/Plasma-Cash/tree/new-versionartículo fue escrito en colaboración con Alexander Nashivanom , desarrollador senior Clever Solution Inc .Anteriormente, el equipo de desarrollo de Opporty ya había probado la velocidad de Plasma Cash. Los resultados se presentan en este artículo .