Seguramente hayas oído hablar de Bitcoin, la moneda
criptográfica de moda, y quieras profundizar un poco en el tema. Pues bien, el
objetivo de esta serie de post es precisamente ese, profundizar en Bitcoin,
viendo primero los fundamentos de esta tecnología, para posteriormente ir
avanzando en su uso y configuración.
Bitcoin es una criptomoneda
que empezó a funcionar en 2009. Una criptomoneda es, por así decirlo, un método
de intercambio de información, pero que en este caso representa una moneda
digital.
Esta divisa está completamente descentralizada, y no está gestionada por ningún organismo
central (esta es una de las mayores
confusiones para las personas no iniciadas en Bitcoin). Entonces, ¿Quién la
controla? Pues la respuesta es que nadie, pero todos los que la usan la
sustentan, aunque no se puede decir que la controlen.
Para entender este concepto hay que conocer el concepto de blockchain, también muy de moda
últimamente. Una blockchain, o cadena de
bloques, es una base de datos distribuida que permite almacenar información
en diferentes nodos repartidos en diferentes partes del mundo. Una de las
características de blockchain es que, una vez se publica una información, no
puede ser modificada. En la blockchain de Bitcoin se almacenan las
transacciones, que son públicas e irreversibles. Por definición de protocolo,
no puede existir más de 21 millones de bitcoins (la minería se basa en una
serie matemática telescópica).
Gracias a todo esto, Bitcoin ofrece las siguientes
características:
- Moneda descentralizada
- Pagos irreversibles
- Transparencia en las transacciones (son públicas)
- Cantidad finita de moneda
- Posibilidad de pagos anónimos. ¡ojo con esto, que no es tan simple!
El protocolo Bitcoin
El protocolo de Bitcoin se compone de tres elementos principales:- Las carteras, o wallets
- Las direcciones
- Las transacciones
Una cartera de Bitcoin se puede generar de forma
completamente offline, y contiene un conjunto de claves criptográficas que se
utilizarán, entre otras cosas, para generar direcciones, que son las
emisoras/receptoras de las transacciones.
Una dirección de Bitcoin es una secuencia alfanumérica
de 33 caracteres, codificada en base 58, para evitar errores de lectura de
algunos caracteres, en determinados tipos de letra.
Una cartera, o wallet, puede generar varias direcciones
Bitcoin. De hecho, es recomendable utilizar una dirección para una transacción
únicamente, y no repetirla más. El saldo pertenece a la cartera, y no a una
dirección.
Una transacción
es una operación de cambio de propiedad. Es lógico en pensar en una
transferencia que envíe una cantidad de algo, en este caso bitcoins, a otra
persona. En realidad el concepto de transacción, aunque a alto nivel sí que es
un envío, sería el equivalente a decirle a todo el mundo (los nodos), que
cierta cantidad de bitcoins, ya no son tuyos y que se los “transfieres” a otra persona. Cuando este mensaje llegue a todo
los nodos, y lo hayan validado, esos bitcoins ya no te pertenecen, porque todo
el mundo sabe que son de la persona a
las que se lo transferiste.
Por lo que si Alice quiere transferir 1 Bitcoin (BTC) de su
cartera a Bob, lo que hará es generar un paquete que contenga la dirección de
Bob y la cantidad de BTC a transferir, añadiendo la clave pública de Bob, y
firmando con su clave privada (de Alice). De esta forma, se garantiza que la
operación ha sido realizada por Alice.
Este paquete se envía a los nodos de la red, que tras
realizar las operaciones matemáticas para comprobar la autenticidad de la
transacción, lo retrasmiten a otros nodos, de forma indefinida, hasta llegar a
toda la red.
Es posible que te preguntes que clase de operaciones
matemáticas son esas, o simplemente quieras conocer el protocolo a más bajo
nivel. En el siguiente apartado se muestra el formato de los bloques, y qué
significa cada campo dentro de los mismos.
La Blockchain
En este punto se tiene una idea más aproximada de qué es
Bitcoin y cómo funciona el protocolo, pero todo el tema de la cadena de bloques
aún debe sonar algo extraño. Para explicar cómo funciona la cadena de bloques,
parece lógico explicar primero qué es un bloque.
Un bloque es un
conjunto de datos estructurado que contiene una determinada cantidad de
transacciones. Estos bloques se pueden extraer, transmitir y confirmar. La blockchain es una cadena de todos estos
bloques. Se puede pensar en la blockchain como en un gran libro de
contabilidad, en la que aparecen todas las transacciones, y se puede dar
seguimiento a cada una de ellas.
Ya se conoce el concepto de bloque, pero aún queda por
conocer cómo se estructura la información dentro del bloque. En la
representación en disco, un bloque es un fichero binario que utiliza el
software de Bitcoin. Dicho fichero tiene una cabecera, como es habitual en los
ficheros binarios, con el siguiente formato:
Cabe mencionar que la información se representa en LittleEndian dentro del fichero. Los
campos que contiene la cabecera son:
- Magic Number: Contiene el valor 0xD9B4BEF9
- Tamaño del bloque: Su propio nombre lo indica
- Versión: version de Bitcoin utilizada
- Hash anterior: Se trata del hash de la cabecera del bloque anterior.
- Hash del contenido: Se trata del hash del contenido del bloque actual. (No puede contener el hash de la cabecera porque se incluiría a si mismo)
- Timestamp: Fecha y hora, en formato timestamp
- Límite (dificultad): Este campo ya es más complejo. Contiene una representación del límite del hash, que modela la dificultad. No debe confundirse con el propio límite. (se explica a continuación)
- Nonce: Una serie de bytes modificables para hacer cumplir los criterios de dificultad.
La dificultad
El campo dificultad, por ponerle un nombre, es una
representación de 4 bytes de un número de 32 bytes. ¿Cómo se hace eso? Pues a
través de una mantisa y un exponente. El funcionamiento, que se puede ver en la
siguiente imagen, es el siguiente:
El byte más significativo representa el exponente (de una
base 256), y el resto la mantisa. Realizando la operación de la imagen, se
obtendrá el verdadero límite del hash. Otra forma sencilla de calcular este
valor es restar 3 al valor del exponente, y añadir esa cantidad de ceros a la
derecha de la mantisa.
Esto proporciona como resultado el valor numérico límite del
hash del bloque. Es decir, modificando el campo Nonce de la cabecera, y realizando el hash SHA-256 del bloque, su
representación numérica tiene que ser inferior al límite obtenido en esta
operación. Obviamente esto no se consigue a la
primera, y hay que ir probando diferentes combinaciones del nonce y realizar hashes del bloque. Este
es la dificultad, computacionalmente hablando.
El cuerpo del bloque
Justo después de la cabecera del bloque, se almacena el
número de transacciones que contiene y seguidamente, todas las transacciones,
una detrás de otra.
El contador de transacciones no tiene una longitud fija. En
realidad es de un tipo entero “compacto”, que es un tipo de dato utilizado por
Bitcoin, y que tiene una longitud de bytes variable. Para poder obtenerlo se
lee el primer byte, si es 0xFD, entonces tendrá 3 bytes de longitud; si es 0xFE
tendrá 5 bytes de longitud; si es 0xFF tendrá 9 bytes de longitud, y si no es
ninguno de esos valores, ocupará un solo byte, con el valor correspondiente.
Después de este valor se almacenan las transacciones, una
después de otra. El formato de transacción es el siguiente:
- Versión: Entero de 4 bytes
- Total de inputs de esta transacción: Entero compacto, tal y como se ha visto anteriormente
- Lista de inputs: Cada input tiene el formato TxIn, explicado más adelante
- Total de outputs: Entero compacto, tal y como se ha visto anteriormente
- Lista de outputs: Cada output tiene el formato TxOut, explicado más adelante.
El formato TxIn,
tiene el siguiente formato:
- Outpoint anterior: Ocupa 36 bytes (32 del identificador de transacción TxID, y 4 del índice del output)
- Bytes del script: Entero compacto que representa el número de bytes del siguiente campo (signature script)
- Signature script: Firma de la transacción. Se utiliza para comprobar la autenticidad de la misma
- Número de secuencia: Entero de 4 bytes
El formato TxOut,
tiene el siguiente formato:
- Número de Satoshis: Entero de 8 bytes. Representa el número de Satoshis de la transacción. Un Satoshi es 0,00000001 BTC.
- Bytes del script: Entero compacto que representa el número de bytes del siguiente campo (pk_script)
- Pk_script: Datos que contienen las condiciones que deben ser satisfechas para poder gastar esos satoshis. Se utiliza para verificar la autenticidad.
Después de este rollazo técnico ya tenemos una visión global
de Bitcoin y conocemos con el suficiente nivel de detalle el protocolo de
Bitcoin; Además, ya sabemos qué significa cada byte de un fichero de bloques.
¿Quién establece el precio del Bitcoin?
Llegados a este punto, es probable que te hayas preguntado cómo
se establece el precio del Bitcoin. En este post voy a intentar de explicar muy brevemente
cómo se establece el precio del Bitcoin.
El precio de Bitcoin no lo establece ninguna entidad, sino
que son sus usuarios los que hacen que su valor fluctúe; en base al uso que le
dan, condicionado, entre otras cosas, por la confianza que se tiene en la
moneda. En resumen, se basa en la ley de oferta y demanda.
No se puede comprar un Bitcoin si no hay nadie dispuesto a
vender, y viceversa. Gracias a las plataforma de compra-venta de Bitcoins, este
hecho es transparente para el usuario. Simplemente uno elige cuantos BTC quiere
comprar o vender, y automáticamente da la orden. Sin embargo, internamente
tiene que haber una solicitud de
transacción que encaje con la del usuario para que se pueda realizar. Debido a
que no hay una plataforma única de compra-venta, el precio del Bitcoin no es
único, y puede haber discrepancias entre plataformas. No obstante, se van
equiparando.
Por otro lado, existen las plataformas de trading de Bitcoins, que permiten
comerciar con Bitcoins directamente entre interesados, sin que el precio lo
establezca un intermediario.
Cabe mencionar que una plataforma de trading no es una
plataforma de compra-venta. Mientras que en una aplicación de compra-venta hay
un precio establecido (el de mercado en este caso), en una plataforma de
trading hay ofertas para comprar-vender Bitcoins, o lo que sea, con un precio
específico por operación. Son estas operaciones en las plataformas de trading
las que influyen en el precio de mercado de Bitcoin.
Bueno, con esto doy por concluido el primer post de fundamentos de Bitcoins. Próximamente
más post de esta serie:
- Bitcoin 101: Fundamentos técnicos
- Bitcoin 102: Operando con Bitcoin
- Bitcoin 103: Be anonymous