Cómo probar aplicaciones del tipo bitcoins considerando Bitcoinj

  • Autor de la entrada:
  • Categoría de la entrada:Noticias

Cómo probar aplicaciones del tipo bitcoins considerando Bitcoinj

Las pruebas son obviamente un paso importante para cualquier software que gestione transacciones monetarias. Este artículo explica algunas técnicas comunes usadas para probar aplicaciones de Bitcoin.

En este artículo (extraído de https://bitcoinj.github.io/) se refiere al Testnet, razón por lo cual me parece lógico antes saber qué es y su alcance.

Testnet, es la red de pruebas para los Bitcoins

Bitcoin es un software abierto y en constante mejora.

http://blog.bit2me.com/es/wp-content/uploads/sites/2/2016/12/testnet-bitcoin-768×469.png

“Testnet” tiene una relación muy directa con Bitcoin, porque es una red idéntica a la real pero usada para pruebas.

Hay monederos que a la hora de crear una nueva dirección te dan la opción de marcar “Testnet” como red.

A Bitcoin se le asocian dos redes, aunque son redes totalmente separadas:

Mainnet: Red principal
Testnet (o Testnet3): Red de pruebas

Mientras que en la red Mainnet viven los bitcoins, en la red Testnet “vive” una criptomoneda idéntica al bitcoin pero con su propio tipo de direcciones y su propio registro de contabilidad, blockchain.

[Nota interna: aquí es recomendable saber qué es «blockchain» y su alcance]

Ahora bien, habiendo reconocido de qué se trata el concepto «Testnet», el siguiente contenido es más técnico.

[Nota interna: Si hay algún concepto que entiendas merece ser corregido o expresado de otra manera, por favor envíame un correo a: gustavo@testingbaires.com, y dejame tus comentarios]

 

Bitcoins y el testnet

La comunidad Bitcoin ejecuta una instancia paralela separada de la red Bitcoin que presenta un conjunto de reglas ligeramente diferentes, llamadas testnet. Lo más útil es que las monedas en el testnet no tienen ningún valor y se pueden obtener de forma gratuita en los sitios de «testnet faucet» como se muestra a continuación:

[http://faucet.xeno-genesis.com/ or http://tpfaucet.appspot.com/]

Accediendo a TP’s TestNet Faucet

Este sitio web es solo para fines de prueba, y hay que recordar que las cuentas se pueden borrar periódicamente sin previo aviso.

Este servicio se proporciona de forma gratuita a su costo, incluyen una url donde reciben donaciones de Bitcoins
1DRnurMWfTWXL9oG8iVED8r6qubqPKw7Vj
si desea apoyarlos.

El Faucet tiene actualmente 8.86917966 TestNet Bitcoins.

Están regalando 0.089 BTC por solicitud, así que si queres obtener algo para poder probar, deberás ingresar tu dirección de TestNet para recibir algunas monedas gratis:

Recordar de no acumular las monedas de TestNet ni intente venderlas. Las monedas de TestNet son inútiles, pero útiles para realizar pruebas.

Nota al lector: No seguí investigando más, pero sin lugar a dudas este tema dá para hacerlo ya que necesitamos de datos para poder realizar el testing.

—————-

Puede hacer que su aplicación use el testnet instanciando sus objetos con [TestNetParams.get()] en lugar de [MainNetParams.get()]

La aplicación wallet-tool también acepta una bandera [–net=TEST]

Vale la pena señalar que, si bien el testnet puede ser conveniente, a veces las personas lo arruinan explotando con ASIC. Tales problemas no ocurren en la red principal, por lo que si observa grandes cantidades de bloques encontrados con unos segundos de diferencia, bloques que fallan la validación, etc., vale la pena cambiar a una red de prueba de regresión local: el entorno es mucho más controlado y previsible.

 

Modo: pruebas de regresión

El testnet es bueno hasta donde llega, pero todavía tiene el problema de que los bloques se extraen cada diez minutos.

A menudo no desea esperar un nuevo bloque, y no desea tener que usar los sitios de faucet para obtener monedas de prueba.

Para simplificar las cosas, a partir de Bitcoin Core 0.9 hay un nuevo modo llamado modo de prueba.

Puede ejecutar un bitcoind local en el modo regtest de esta manera:

[./bitcoind -regtest] y una vez que se está ejecutando, en otra ventana puedes hacer algo como [./bitcoin-cli -regtest setgenerate true 101]

para crear un nuevo bloque a pedido.

El modo Regtest requiere el uso de otro conjunto de parámetros de red, [RegTestParams.get()] y está diseñado para ejecutarse solo localmente. No hay una red de regtest pública. Puede usar [PeerGroup.connectToLocalHost()] para que hable con el bitcoind local.

Tener en cuenta que las monedas recién extraídas tienen que madurar (esta es una regla general de Bitcoin). Esto significa que no se pueden gastar en 100 bloques. El número 101 en el comando de arriba selecciona cuántos bloques se van a minar. Por lo tanto, esto debería darte monedas gastables. Entonces puedes enviar algunas monedas de prueba a tu aplicación de esta manera:
[./bitcoin-cli -regtest sendtoaddress <address of your app goes here> 10.0
./bitcoin-cli -regtest setgenerate true 1]

La cadena de bloque y demás se almacena en ~ / .bitcoin / regtest, por lo que puede eliminarla para empezar de nuevo, o usar -datadir para guardar los archivos en una ubicación diferente.

Puede hacer que wallet-tool use este modo usando [–net=REGTEST –peers=localhost]

Actualmente, bitcoinj no tiene una clase que envuelva la interfaz Bitcoin Core RPC y maneja el modo de regtest, pero sería una buena característica en el futuro.

Modo: Pruebas unitarias

Bitcoinj proporciona una clase [TestUtils] que puede hacer cosas como fabricar objetos [Transaction] falsos, etc. Eche un vistazo a la suite de pruebas de bitcoinj para ver cómo usar las utilidades. Las pruebas unitarias son una gran manera de aumentar la solidez de su software, aunque debido a las muchas complejidades sutiles del protocolo Bitcoin, no siempre son suficientes para garantizar que todo funcione correctamente.

 

Fuentes:
https://bitcoinj.github.io/
http://blog.bit2me.com/es/testnet-red-pruebas-bitcoin/

 

Gus Terrera

Apasionado por el agile testing y la ia.