WEB3DEV Español

Cover image for Pools de Memorias de Ethereum. ¿Cómo funcionan?
Hector
Hector

Posted on

Pools de Memorias de Ethereum. ¿Cómo funcionan?

Este artículo es una traducción de Alberto Molina, hecha por Héctor Botero. Puedes encontrar el artículo original aquí.
Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_es en Twitter.

La blockchain de Ethereum es realmente un registro distribuido, justo como la blockchain de bitcoin, que ofrece funcionalidad computacional en la forma de contratos inteligentes pero, en su forma más básica, es solo un montón de bloques unidos unos a otros (1 a 1), conteniendo transacciones que cambian el estado de la blockchain.

Los nodos que forman la red de Ethereum, mantienen una copia de la blockchain y son los que están a cargo de añadir nuevas transacciones a ella y se aseguran de su consistencia y validación.

La pregunta es, ¿cómo son las transacciones añadidas a la blockchain por los nodos?

El proceso puede ser explicado fácilmente: los nodos reciben transacciones firmadas de las carteras/usuarios y si las transacciones son válidas, serán añadidas a la blockchain.

El problema es, los nodos pueden recibir miles de transacciones y los bloques son añadidos a la blockchain en un ritmo constante (cada pocos segundos), los nodos pueden que también reciban transacciones diferentes de diferentes usuarios y otros nodos a los que estén conectados. Necesitamos ser capaces de tener algún tipo de búfer para almacenar todas las transacciones entrantes, aún por validar. Aquí es donde los grupos de memoria “MemPool” entran en juego. Trataré de describir qué son y cómo trabajan desde un punto de vista genérico y algunos de los “efectos secundarios” que puedan tener.

Image description

¿Qué es y cómo trabaja?

¿Cómo alguien puede añadir una nueva transacción a la blockchain? Digamos, ¿alguien que desea enviar dinero a otra cuenta? Pues la primera cosa que esta persona debe hacer es generar la transacción.

Èl o ella tendrán que indicar, en otras cosas, lo siguiente:

  • El destinatario de la transacción.
  • La cantidad a pagar.
  • El monto de las tarifas que él o ella está dispuesto a pagar por la transacción
  • La firma de la transacción (firmada con una clave privada usando una cartera, por ejemplo)

Una vez que la transacción está lista, solo necesita incluirse en un bloque futuro para que la red la acepte.

La forma de hacerlo es transmitir las transacciones firmadas a uno (o varios) nodos que forman la red de la blockchain.

Los nodos recibirán tu transacción y verificarán su validez y autenticidad antes de reenviarla a otros nodos de la red (verificarán que el remitente tenga fondos suficientes y, lo que es más importante, que la firma sea correcta).

Después de verificar la transacción, los nodos la agregarán a su pool de memoria. Los nodos volverán a verificar todas las transacciones de su pool (grupo) de memoria, después de agregar cada bloque a la red, ya que puede contener transacciones que invaliden algunas de las transacciones que tienen en su grupo de memoria.

Un grupo de memoria es, básicamente, memoria RAM dentro de los nodos donde guardan todas las transacciones validadas que han recibido “hasta ahora” pero que aún no han podido agregar a la blockchain.

Image description

De hecho, los bloques se generan cada pocos segundos o minutos, según la blockchain y tiene un tamaño máximo, lo que significa que solo pueden albergar un número limitado de transacciones.

Si la tasa a la que los usuarios envían transacciones a la blockchain es mayor que la tasa a la que se pueden agregar bloques a las blockchains, muchas transacciones tendrán que esperar al pool de memoria de los nodos.

Es importante tener en cuenta que, debido a su naturaleza descentralizada, los pool de memoria de los nodos pueden ser distintos y, en un momento dado, pueden realizar diferentes transacciones.

Es igualmente importante tener en cuenta que su transacción también puede existir en varios nodos de pool de memoria en cualquier momento.

A veces nos referimos al pool de memoria como una sola entidad/ubicación, pero en realidad es una combinación de todos los pool de memoria que existen actualmente.

Image description
Los nodos eligirán transacciones de su grupo de memoria para construir bloques para agregar a la blockchain, pero no seguirán una estrategia de orden de llegada, sino que eligirán las transacciones que consideren más convenientes para ellos, básicamente aquellas que pagan tasas más altas, ya que serán ellos quienes lo cobren.

Image description

Una vez que un minero finalmente selecciona una transacción de su pool de memoria y la agrega a un bloque, todos los demás nodos que contenían la misma transacción en su grupo de memoria procederán a eliminarla, ya que la misma transacción no se puede agregar dos veces a la blockchain.

El pool de memorias de cada nodo es, entonces, como la sala de espera de una estación de tren, donde los pasajeros esperan la llegada del próximo tren y solo entrarán los que estén dispuestos a pagar más. Con la particularidad que un solo pasajero puede estar en varias estaciones de tren al mismo tiempo, y en el momento en que se sube a un tren, ¡desaparece de todas las demás estaciones de tren!

Efectos Secundarios Relacionados

Cancelación de transacciones

Los nodos son agentes poco confiables, en el sentido que siempre actuarán en su propio interés, como hemos descrito antes, eligirán las transacciones que más paguen primero, este es en realidad un comportamiento que podemos usar a nuestro favor, ya que nos dará la posibilidad de cancelar transacciones si es necesario (¡transacciones que aún no se han agregado a la blockchain, por su puesto!).

Para cancelar una transacción anterior, debemos enviar a la red una nueva transacción desde la misma cuenta utilizando el mismo nonce, pero con una tarifa más alta.

Los nodos recibirán su nueva transacción y, dado que paga una tarifa más alta que la anterior, la agregarán primero a la blockchain. Los nonces de transacción de Ethereum solo se pueden usar una vez para una cuenta específica, lo que significa que en el momento en que agregan la nueva transacción a la blockchain, la anterior deja de ser válida y se elimina de los pool de memoria.

Corriendo adelante

Dado que los nodos mantienen las transacciones en sus pool de memoria antes de agregarlas a las blockchain, tienen acceso a su contenido y pueden verificar la salida (cambio de estado) que provocarán en las blockchains por adelantado…
Esto puede ser un problema potencial para su dapp, digamos que está ofreciendo una cierta recompensa a la primera cuenta que envía una cierta cantidad (que cae en un valor que ha almacenado en su contrato inteligente). Si alguien envía la respuesta correcta a un nodo, el nodo tiene acceso a ese valor y puede generar muy fácilmente su propia transacción, copiar y pegar el contenido y agregarlo primero a la blockchain, “robando” efectivamente la recompensa del usuario honesto.

Este es solo un ejemplo inicial, pero hay muchas más situaciones en las que la “velocidad” o el “orden” en el que se agregan las transacciones a la blockchain pueden tener un impacto en la lógica de su dapp, siempre debe tener en cuenta que esto puede potencialmente causar una perturbación.

Ùnete al canal Telegram y al canal de Youtube de Coinmonks para obtener información sobre el comercio y la inversión en criptomonedas.

Discussion (0)