¿Cómo funciona la mempool y su importancia en la red Bitcoin?

José Maldonado
22 JUN 2020
¿Cómo funciona la mempool y su importancia en la red Bitcoin?
1.

Introducción

Generalmente, cada vez que realizamos una transacción de criptomonedas en Bitcoin, estas no son procesadas o confirmadas al momento, sino que en su lugar van siendo almacenadas de forma temporal en la mempool o pool de memoria de Bitcoin. La finalidad de esta mempool o pool de memoria, es la de hacer un buffer o sala de espera de transacciones.

Una vez allí, las transacciones son almacenadas hasta el momento en el cual los mineros comienzan a seleccionar las mismas para que sean incluidas en el bloque que están generando. Para que finalmente las transacciones de los usuarios pasen de un estado no-confirmada a confirmada. Es en este último punto, cuando la transacción realmente se hace efectiva y pasa a integrarse en la blockchain.

Pero ¿Por qué Bitcoin necesita de una mempool? ¿Cómo funciona? ¿Qué mecanismos permiten ajustar la misma? Pues bien respondamos a estas y otras preguntas sobre este interesante mecanismo.

2.

Bitcoin y la mempool ¿Por qué es necesaria?

Seguramente te preguntarás ¿Por qué Bitcoin siendo una tecnología tan avanzada y potente necesita de un concepto tan arcaico como una mempool? ¿Por qué no puede simplemente ser como PayPal y realizar las transacciones de forma instantánea? La verdad es que es una pregunta muy válida. Pero la explicación del porqué Bitcoin usa una mempool derriba muchos argumentos esgrimidos en contra del funcionamiento de esta criptomoneda y su "arcaica" mempool.

En primer lugar, debemos recordar que Bitcoin funciona como una red de nodos interconectados unos con otros en un esquema P2P completamente descentralizado. Acá no hay servidores centrales y eso ha llevado a que Bitcoin deba desarrollar mecanismos que le protejan contra distintos tipos de ataques.

Uno de esos mecanismos es la creación de un esquema predecible de generación de bloque y confirmación de transacciones. Es decir, la capacidad de Bitcoin de generar bloques cada 10 minutos en promedio, de forma regular. Este proceso de generación de bloques a intervalos de tiempo definidos, da la posibilidad de que los mineros puedan hacer de forma correcta su trabajo de minería. Pero también, permite poner un freno a distintas operaciones que pueden resultar negativas para la red. Como por ejemplo, la generación de transacciones inválidas en grandes cantidades que terminarían por bloquear la red e impidiendonos usarla de forma libre.

Ante esta situación, una forma inteligente de resolver este problema es crear una mempool. De esa forma cada transacción que se crea y envía a la red, es puesta en esta sala de espera. La transacción nunca se pierde, solo está allí a la espera de que un minero la tome y la procese. Así los usuarios de la red pueden enviar las transacciones que quieran, y la red simplemente las irá procesando a medida que pase el tiempo. A razón de unas 2100 transacciones cada 10 minutos, o cada vez que se genere un nuevo bloque. De esta forma, la mempool podrá ir acumulando grandes cantidades de transacciones, pero la red y su funcionamiento nunca cesará.

Esta situación es algo impensable en un sistema como el de PayPal, donde la centralización ciertamente hace que las operaciones sean muy rápidas, pero susceptibles a momentos de alta demanda o ataques que generen una alta demanda de sus servidores centralizados.

Relacionado: Bitcoin para principiantes

3.

¿Cómo funciona una mempool?

El funcionamiento de una mempool es bastante sencillo, básicamente se dedica es almacenar las transacciones de la red para luego procesarlas. Por supuesto, este funcionamiento está controlado y regido por una serie regulaciones que son descritas en la Propuesta de Mejora de Bitcoin BIP-35.

En dicha propuesta, queda regulada la actuación de la mempool de Bitcoin, definiendo el protocolo de actuación para los casos esperados e inesperados en la red. Pero más allá de esto el funcionamiento de la mempool puede dividirse en dos fases:

Fase #1: Recepción de la transacción

En este punto, los nodos que están en la red Bitcoin garantizan una determinada cantidad de almacenamiento donde son recibidas y almacenadas de forma temporal las transacciones que se generan en la red.

En este punto, el mempool size o tamaño de la mempool se especifica para que dichas transacciones pueden tener un espacio acorde para guardarse. Es decir, son los nodos quienes controlan el tamaño de la mempool. Existen nodos que pueden tener una mempool muy grande y otros, con mempool más pequeñas.

Pero generalmente, el tamaño recomendado es tomado por la mayoría de los nodos y de esa forma se homogeneiza la misma. Un punto importante es que este espacio de almacenamiento está ubicado en la memoria RAM de los nodos, por lo que su acceso es muy rápido. Todo esto al final garantiza que las TX no se pierdan en la red, y puedan pasar a la segunda fase.

Fase #2: Acceso a las transacciones

A las transacciones en mempool pueden acceder los mineros, los exploradores de bloques y las wallets que tengan dicha funcionalidad. En el BIP-35 se especifica que esta función es posible gracias a la instrucción RPC, "mempool". De esta manera, por ejemplo una wallet SPV puede mostrar rápidamente si una transacción ha sido realizada y se encuentra a la espera de ser procesada y confirmada.

Pero la interfaz también permite que los mineros puedan tomar las transacciones de la mempool, agregarlas a un bloque y comenzar con el proceso de minería. Con cada transacción elegida, la mempool se libera en espacio y la cantidad de transacciones disminuye. Esta situación de ocupación de la mempool también tiene un impacto directo en las comisiones de la red. Si la mempool está congestionada, los mineros comenzaran a tomar las transacciones que paguen la mayor comisión de minería. Una situación que dispara los costos de minería, una situación que ha pasado múltiples veces en el pasado. Sin embargo, si la red no está congestionada, las comisiones bajan y los mineros atienden casi sin distinción las transacciones.

Por otro lado, esta funcionalidad también permite a los exploradores de bloques, wallets y demás servicios asociados a criptomonedas, mostrar información útil a los usuarios sobre el estado de la mempool en el momento en el que lo deseen.

4.

Mempool y los peligros del doble gasto

Un punto importante a destacar para cualquier persona que llega al criptomundo, es que cuando se realiza una transacción esta no es confirmada hasta que se incluya en un bloque. Esta primera confirmación puede ser muy rápida o tardar horas. Eso depende de la congestión existente en la mempool, la comisión promedio pagada por las transacciones y la comisión que hayamos pagado en dicha transacción.

Durante ese periodo de tiempo, quienes acepten criptomonedas como forma de pago son especialmente vulnerables. La transacción se ha realizado, está en la mempool, pero el saldo no se ha gastado hasta que no se confirme. Esta situación ambivalente puede ser usada por los hackers para realizar ataques de doble gasto.

Un ataque de doble gasto, consiste en usar unas mismas monedas para hacer dos pagos distintos. Pero de esos dos pagos solo uno será el confirmado de forma correcta. Es un peligro bien conocido en el mundo cripto e incluso en el mundo bancario tradicional. Por ejemplo, un ataque de doble gasto en el sistema bancario tradicional sería que emitamos dos cheques por una misma cantidad de dinero a dos personas. Pero en nuestra cuenta de banco solo hay saldo para pagar uno de los cheques. Así la persona que cobre primero podrá retirar el dinero, pero la segunda no podrá retirar nada porque la cuenta se ha quedado sin saldo. Con ello hemos hecho un doble gasto, "pagando" con unas mismas monedas dos cuentas distintas.

Cuando las transacciones están en la mempool este tipo de ataques son posibles hasta cierto punto. Como la transacción en la mempool no está confirmada, y en realidad, el saldo de la transacción aún está en nuestro poder, podemos realizar una transacción nueva que invalide la primera. Esto es algo altamente técnico pero posible. Es decir, podemos hacer una transacción a manos usando las mismas monedas usadas en la transacción en la mempool, usando una comisión más alta para que se confirme mucho más rápido que la primera. Una vez confirmada la segunda transacción, la primera transacción que estaba en la mempool se invalida y con ello hemos realizado un ataque de doble gasto exitoso.

Por supuesto, esta debilidad es conocida por los desarrolladores de Bitcoin y otras criptomonedas. De allí, que recomienden que solo se acepten como válidas transacciones con 3 o más confirmaciones de la red. Una vez alcanzado este nivel de confirmaciones, puedes estar 99% seguro de que las mismas no podrán ser alteradas de ninguna forma.

Pero ¿Por qué esperar 3 o más confirmaciones? ¿Una sola confirmación no es suficiente? La respuesta a esto es, No. En Bitcoin y muchas otras criptomonedas basadas en su código existen formas de alterar transacciones con una confirmación. Por difícil que parezca y cueste creer que eso es posible. Un ejemplo de este tipo de ataque lo propuso el mismísimo Hal Finney, demostrando que las transacciones con una confirmación podían alterarse. Es el conocido Finney Attack, y aunque es complejo de llevar a la práctica, es posible de hacer. Otros ataques de doble gasto posible en Bitcoin son el Race Attack o el Ataque Vector76. Cada uno de ellos explota hasta cierto punto la debilidad de la mempool u otros puntos flojos de la tecnología blockchain.

Sin embargo, como hemos mencionado, si usted espera a recibir las suficientes confirmaciones puede estar tranquilo, su pago se ha realizado, y nada ni nadie podrá cambiar eso.

Relacionado: ¿Qué es y cómo funciona la minería en Bitcoin?

5.

Mempool en otras criptomonedas

La mayoría de las criptomonedas también tienen sus propias implementaciones de mempool. Esto con el fin de evitar que las transacciones no sean atendidas en algún momento. Por supuesto, cada red tiene sus propios sistemas de control sobre sus mempool y el protocolo que permite su funcionamiento. Pero, en definitiva, el funcionamiento es el mismo.

https://lh6.googleusercontent.com/9TJM0gXG7ZQEosh3ktDIIPuH7Dq2GOu7EY6ze9NtDMrVVKWobrtGBxqO0x0SmUVcma9-LAgB8qJ_ObbbgSb2UkSd997D5qSoBflmeuJwMPTgCbHRH30ebxfZWgLPgauUDNmPnHo5

Sin embargo, blockchains como Bitcoin Cash han implementado nuevas funciones sobre la mempool con el fin de "mejorar sus prestaciones". Un ejemplo de esto son las transacciones 0-conf de Bitcoin Cash. Esta no es más que una transacción en mempool que no puede se puede cambiar por otra que use las mismas monedas. 

Para ello, el mempool crea una especie de historial que sigue el movimiento de las transacciones que están dentro del mismo, y en caso de recibirse dos transacciones usando las mismas monedas, solo se tomará como cierta la primera que haya llegado al mempool. La segunda se desecha al verse como un intento de doble gasto.

En Bitcoin Cash promueven esto como algo seguro y que permite "transacciones instantáneas", pero lo cierto es que no es así. La transacción realmente está en el mempool. Pero esta solo está confirmada una vez que se incluya en un bloque y sea parte de la blockchain. Estando en el mempool es posible que un minero o nodo deshonesto pueda modificar la transacción, incluso un usuario puede modificar la transacción bajo determinadas condiciones.

Esto pone significa que la mempool ofrece un sin fin de ventajas a la tecnología. Pero también puede ser el Talón de Aquiles si no se maneja de forma correcta.