Jugando con RBF en regtest

Parte 1 – Generando nuestro entorno regtest

Con RBF (Replay By Fee) siempre he creído que sólo se pueden añadir inputs a una transacción, en el canal de telegram de Reizu realizó unas pruebas que demostraban que no es así, se puede modificar también el destinatario de una transacción marcada como reemplazable.

Las pruebas fueron concluyentes, aún y todo quedaban ciertas dudas y como no había salseado con el modo regtest (Regression Test Mode) de Bitcoin he visto la oportunidad perfecta para empezar y documentarlo para que cualquiera pueda hacerlo.

Los test los he hecho en Windows (es lo que tenía a mano en ese momento).

Voy a dividir las pruebas en 2 publicaciones en este tema, esta primera es montaje y comprobación de un entorno regtest, la segunda serán las pruebas sin y con RBF.

Para comenzar instalamos el cliente Bitcoin Core si no lo tenemos ya.

Para las pruebas vamos a montar 3 nodos para ello generamos una estructura de directorios donde alojaremos los datos de cada uno de ellos:

Dentro de cada carpeta añadiremos un fichero de configuración (bitcoin.conf) con el usuario y la contraseña para RPC:

Lanzamos los comandos de inicio desde un cmd, uno por cada nodo.

bitcoind -regtest -port=8333 -rpcport=8332 -datadir=c:\regtest\node1 -conf=c:\regtest\node1\bitcoin.conf
bitcoind -regtest -port=8335 -rpcport=8334 -datadir=c:\regtest\node2 -conf=c:\regtest\node2\bitcoin.conf
bitcoind -regtest -port=8337 -rpcport=8336 -datadir=c:\regtest\node3 -conf=c:\regtest\node3\bitcoin.conf

Lo primero que debemos hacer es conectar los nodos entre si, en este caso desde una ventana de comandos lanzamos lo siguiente:

bitcoin-cli -regtest -rpcport=8332 -rpcuser=node1 -rpcpassword=node1 addnode 127.0.0.1:8335 add
bitcoin-cli -regtest -rpcport=8332 -rpcuser=node1 -rpcpassword=node1 addnode 127.0.0.1:8337 add

Esto añadirá como peer los nodos 2 y 3 al nodo1. Podemos comprobar las conexiones del nodo1 con el siguiente comando:

bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 getconnectioncount

Generamos 101 bloques desde nodo1 con el siguiente comando:

bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 -rpcport=8332 generate 101

Comprobamos el saldo:

bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 -rpcport=8332 getbalance

Comprobamos los nodos 2 y 3 para comprobar que están conectados y sincronizados:

bitcoin-cli -regtest -rpcuser=node2 -rpcpassword=node2 -rpcport=8334 --getinfo
bitcoin-cli -regtest -rpcuser=node3 -rpcpassword=node3 -rpcport=8336 --getinfo

Para comprobar que todo funciona correctamente vamos a realizar una transacción, generamos una dirección en nuestro nodo2 con

bitcoin-cli -regtest -rpcuser=node2 -rpcpassword=node2 -rpcport=8334 getnewaddress

Enviamos 1BTC desde nuestro nodo1 con

bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 sendtoaddress 2N6FEkFMsx8MpGwAAmyyg6yeaDjQ8nPH6XS 1

Este comando nos devuelve el identificador de la transacción (TXid) que en este caso es 60b46a9f9972b7829308e7de9617c91c42518db994a1497d41e7c4527148f448

Comprobamos que la transacción se ha propagado a nuestros 3 nodos consultando su mempool con los siguientes comandos:

bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 getrawmempool
bitcoin-cli -regtest -rpcuser=node2 -rpcpassword=node2 -rpcport=8334 getrawmempool
bitcoin-cli -regtest -rpcuser=node3 -rpcpassword=node3 -rpcport=8336 getrawmempool

Todo pinta genial, tenemos la transacción en la memoria de transacciones de nuestros 3 nodos, podemos comprobar como nuestro nodo2 al que hemos enviado la transacción tiene 1 bitcoin no confirmado, para ello utilizamos

bitcoin-cli -regtest -rpcuser=node2 -rpcpassword=node2 -rpcport=8334 getunconfirmedbalance

Ok, vamos a proceder a minar un bloque para confirmar la transacción:

bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 generate 1

Una vez minado el bloque comprobamos que el bitcoin ya está confirmado en nuestro nodo2 y que la memoria de transacciones está vacía.

bitcoin-cli -regtest -rpcuser=node2 -rpcpassword=node2 -rpcport=8334 getbalance
bitcoin-cli -regtest -rpcuser=node1 -rpcpassword=node1 -rpcport=8332 getrawmempool
bitcoin-cli -regtest -rpcuser=node2 -rpcpassword=node2 -rpcport=8334 getrawmempool
bitcoin-cli -regtest -rpcuser=node3 -rpcpassword=node3 -rpcport=8336 getrawmempool

Vale, hasta aquí vamos bien tenemos 3 nodos conectados entre si y hemos comprobado que los bloques y transacciones se propagan sin problema. Vamos con las pruebas con RBF.

Parte 2 – Probando RBF

Un Comentario

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *