19 abril, 2017

Bitcoin 101: Fundamentos técnicos

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:


 
 

 
 

0 comentarios:

Publicar un comentario