Desarrollar una aplicación Bitcoin es muy sencillo, incluso si se tiene que meter código a mano, siempre que se tengan unas mínimas nociones de programación. Si algo tiene de complicado es el entender qué piezas entran en juego y cómo. El resto no cambia en exceso en comparación a otro tipo de aplicaciones, donde en cuestión de unas horas se puede tener algo totalmente funcional.
Este artículo no trata paso a paso cómo hacer una APP, sino que presenta un esquema mental de las piezas que forman una APP básica y cómo interactúan.
Por supuesto, es recomendable entender lo básico de Bitcoin.
Empecemos. Debemos pensar de forma modular. Por un lado está nuestra aplicación y por otro, Bitcoin.
Para interactuar con Bitcoin, se puede hacer de dos formas: instalando un nodo propio de Bitcoin o usar el nodo de otros. En ambos casos se interactúa luego a través de una API. Algunas veces se usarán unas API más sencillas, cómo son las RESTful, y otras un poco más engorrosas en cuanto a JSON-RPC. No obstante, y por suerte, los programadores ya tenemos librerías reutilizables open source para simplificar ambos casos si se desea.
En este caso, imaginemos que usamos la versión un poco más compleja, la que se basa en usar tu propio nodo Bitcoin, que da más autonomía y da pie a entender mejor el funcionamiento de Bitcoin.
Nodo Bitcoin
Un nodo Bitcoin está compuesto por 3 piezas notables:
- El «demonio»: está conectado a otros nodos, lo que permite crear esa red P2P donde se intercambian todos los eventos que ocurran en la red por sockets.
- Blockchain: la base de datos que registra los eventos de forma local en cada nodo. Realmente tu aplicación no usará esa base de datos, sino otra propia si lo requiere.
- API: los eventos son convertidos a una respuesta JSON y transmitidos por un puerto, puede o no ponerse protegido para escuchas externas.
El nodo puede instalarse en un ordenador Unix o Windows y puede llamarse o escucharse cuando se desee a través del puerto que tiene para ello, con o sin autenticación (al gusto), siendo un canal para una comunicación bidireccional: puedes recibir en tiempo real lo que sucede en el nodo y puedes enviarle información para que haga cosas o te informe de cosas. Cómo montar tu nodo Bitcoin en menos de 10 minutos.
La aplicación
Por supuesto se puede desarrollar la aplicación en el lenguaje que se desee y esta no debe conocer necesariamente en exceso el funcionamiento del nodo Bitcoin.
Una aplicación sencilla está compuesta por un backend, una base de datos y un frontend. Hasta ahí nada nuevo. Se puede poner una API o no… lo de siempre. El backend siempre que desee interactuar con la red Bitcoin puede llamar a la API RPC del nodo o escucharlo para tomar decisiones.
Unimos piezas: Aplicación + Nodo Bitcoin
Imaginemos que queremos hacer un explorador blockchain. Simplemente deberemos poner nuestro backend a escuchar todos los eventos que ocurran en nuestro nodo (el cual nos informa de lo que ocurre en la red) y guardar la información que nos pase el nodo en nuestra base de datos para posteriores consultas desde el frontal donde mostremos lo pedido.
Cabe destacar que tener una APP similar a blockchain.info, un explorador blockchain, con su propia API RESTful a modo privado o público para interactuar desde tu aplicación es cuestión de un par de minutos con el desarrollo open source llamado Insight de BitPay.
Otros detalles
Enviar un pago a la red también es muy sencillo, ya que una vez se prepara la transacción en el backend, lo que se hace es enviarla al nodo a través de la API JSON-RPC para que la retransmita al resto de nodos, y esos a otros y así sucesivamente hasta que se propague por toda la red. Es por ello por lo que es importante tener bien pareado el nodo, y a pares de calidad, porque esto asegura que una transacción se retransmita por toda la red muy rápido y hará que las transacciones se confirmen antes.
Las direcciones y las transacciones se preparan offline. Es decir, no se necesita el nodo para ello, solo para obtener la información. Luego se prepara la transacción y se manda a la red ya codificada.
Lógicamente para casi todos los lenguajes ya existen librerías que simplifican todo donde, una vez importadas, sus métodos permiten hacer lo mismo pero con menos código.
En el backend normalmente se usan dos librerías (aunque ambas podrían estar en una, dependiendo la librería). La primera se comunica con el nodo Bitcoin y la segunda se encarga de generar direcciones o de preparar las transacciones.
Este es un ejemplo sencillo y una aproximación a vista de pájaro de una organización típica simple, pero su uso, y aquí entra en juego la creatividad, es lo que permite crear casos nuevos de uso.
En casi todas las criptomonedas, su nodo y cómo se interactúa con ellas a escala de esquema es muy similar. Montar un exchange de criptomonedas (tipo Coinbase u OKCoin) no dista de los principios que aquí se han expuesto, eso sí, replicando todo: backends balanceados, múltiples nodos de cada criptomoneda por si uno cae o se desfasa…
Un consejo: si es tu primera vez desarrollando sobre Bitcoin, lo mejor es alquilar un servidor (por ejemplo uno de OVH por 5€/mes), es una inversión pequeña y te dan una máquina dedicada lista para «romperla» tantas veces como necesites. Además, descargarse ahí la blockchain será muchísimo más rápido y cómodo. Después podrás desarrollar tu APP en local y que use la API del nodo Bitcoin de la máquina alquilada.
Con esto tienes lo necesario para hacerte un boceto mental de por dónde empezar a crear tu aplicación. Dependiendo del lenguaje que quieras usar, únicamente deberás buscar las librerías necesarias. Por ejemplo, para NodeJS puedes usar Bitcore, que tiene todo lo necesario en una misma librería. También BitcoinJS, aunque esta solo se centra en la parte de trabajo offline de Bitcoin (crear direcciones, preparar transacciones…).