En este post analizaremos que son las transacciones en Bitcoin y como funcionan. Las transacciones en Bitcoin son simplemente trasferencias de valor de una dirección Bitcoin, a otra dirección también de Bitcoin, o bien podríamos decir que de un usuario que origina la transacción desde su dirección, a un destinatario que recibe en otra dirección. Normalmente, como usuarios, utilizamos una cartera Bitcoin para hacer estas transferencias de valor y la billetera se encarga de crear las transacciones como lo requiere Bitcoin.
Por lo general estamos acostumbrados al modelo de una cuenta con saldos, como en la de un Banco, en donde los créditos aumentan nuestro saldo y los débitos lo disminuyen. El sistema de transacciones de Bitcoin funciona de una forma distinta, no existe una cuenta del usuario y tampoco existe, dentro del software, una entidad que consolide un saldo como tal, y al realizar una transacción, no existe un débito a una cuenta de un usuario y un crédito a la cuenta de otro. Lo que existe son movimientos de bitcoins (BTC) de una entrada a una salida. Internamente, funciona con una estructura de datos que contiene una lista de las entradas (vIn) y otra lista con las salidas (vOut) para cada Transacción. De esta forma, las entradas de una transacción, están vinculadas a salidas específicas de transacciones anteriores UTXO (Unspent Transaction Output por sus siglas en inglés), que una vez utilizadas (gastadas), ya no estarán disponibles. Por ejemplo si un usuario mueve 2 BTC de una dirección que él controla (a01…), a otra dirección propia (b01…) en la Transacción 2 (Tx2), la transacción se vería como se muestra en el siguiente diagrama:
Transacciones Bitcoin
Aquí podemos ver, que para mover los 2 BTC, tiene que tomar los suficientes BTC de una salida específica UTXO (Tx1 vOut:0), que él controla, de una transacción anterior( Tx1 ). Del mismo modo si quiere mover 1.5 BTC a otra dirección suya (d01…)en la transacción Tx3, tiene que tomar los BTC suficientes de una salida específica UTXO (vOut: 0), que él controla, también de una transacción anterior ( Tx2 ).
La seguridad de Bitcoin se sustenta en un mecanismo de bloqueo / desbloqueo que se encuentra incorporado en las entradas y salidas de las transacciones, básicamente cada salida ( vOut ) tiene un mecanismo de bloqueo que puede desbloquearse con el mecanismo de desbloqueo que existe en cada entrada ( vIn ), en pocas palabras las salidas solo pueden ser utilizadas por aquellas entradas de transacciones que conocen el mecanismo de desbloqueo.
Seguridad Bitcoin - bloqueo/desbloqueo
Esto se lleva a cabo, a través del manejo de un lenguaje de programación que existe en Bitcoin llamado Script. Cuando nos referimos que la transacción tiene que tomar salidas que el usuario controla, nos referimos justamente a que debe conocer el mecanismo de desbloqueo para dicha salida, si quiere poder utilizarla como entrada para su transacción. En otro momento hablaremos a mas detalle de Script. Un punto muy importante a entender es que la dirección Bitcoin que se utiliza para enviar fondos a un destino específico, se construye justamente a partir de una codificación del Script del mecanismo de bloqueo. Es muy importante considerar esto, ya que si te fijas bien, NO existe una dirección Bitcoin en ningún campo dentro de la estructura de la transacción. Esto lo veremos mas detalladamente en un post específico sobre Direcciones.
Hemos visto como un usuario puede mover bitcoin de una dirección que controla a otra dirección Bitcoin también de él, sin embargo, el proceso de mover de una dirección propia a otra, de un tercero, es exactamente el mismo.
Probablemente te preguntarás que sucede, si para una transacción solo deseas utilizar, digamos 2 BTC de una salida anterior (vOut) de 5 BTC, ¿siempre tienes que utilizar el total de una entrada?. La respuesta es si, sin embargo, lo que hace cualquier software de wallet es construir una transacción con una entrada (vIn) de los 5 BTC, recuerda que vienen de un vOut de una transacción anterior, y dos salidas (vOut), una por los 2 BTC que deseas enviar a la dirección del destinatario (vOut 0) y otra salida por 3 BTC (el equivalente al cambio), a una salida (vOut 1) que apunta a una dirección que también es controlada por ti.
Del mismo modo que podemos separar salidas hacia distintas direcciones, también es posible construir una transacción tomando como entradas distintas salidas, inclusive de transacciones distintas.
Estrictamente hay un pequeño detalle que es importante aclarar, la suma de las entradas, siempre debe ser mayor o igual a las salidas, esto es porque el fee (comisión) de la transacción, que es la cuota que se entregará al Minero que procese la transacción, se calcula justamente de esa diferencia. Es importante siempre definir una comisión, es decir calcular las salidas para que sean ligeramente menores a las entradas, ya que de no hacerlo, no existirá un incentivo para que un Minero seleccione tu transacción para ser procesada. El cálculo de las comisiones se basa en el tamaño en bytes de la transacción y el detalle de cómo se calculan lo dejaremos para un futuro post, pero por lo general las carteras de Bitcoin tienen métodos definidos de estimación de comisiones para hacerle la vida mas fácil a los usuarios de dichas carteras.
El cálculo de los saldos se parece de forma intuitiva a cómo calcularías tu saldo en una billetera tradicional. Si tu quisieras saber el saldo de tu billetera tendrías que abrirla y contar la suma de los billetes de distintas denominaciones que se encuentran dentro de ella.
Bitcoin hace algo similar, en donde una dirección equivaldría a una billetera física. Una dirección tendrá uno o varios UTXOs (Unspent Transaction Ouputs por sus siglas en inglés), en español, Salidas de Transacción que aún no han sido gastadas. Y la suma de todos estos UTXOs corresponde al saldo de la dirección Bitcoin. En caso de que el usuario tenga varias direcciones que controla, que contienen UTXOs, sería equivalente a tener varias billeteras físicas y su saldo total será la suma de todos estos UTXOs.
Ejemplo de UTXOs
En la imagen anterior podemos ver un ejemplo de los UTXOs (salidas aún no gastadas), asumiendo que en estas transacciones no hemos calculado comisiones (en estos ejemplos todas las salidas son iguales a las entradas) y que las salidas ( vOut 0) de la transacción 4 ( Tx4 ) y la salida ( vOut 0) de la Transacción 5 ( Tx5 ) sean a direcciones del mismo usuario, el saldo de su billetera equivaldría a la suma de todos los UTXOs que se muestran en la imagen, su saldo sería de 11 BTC.
En la cadena de bloques de Bitcoin, en todo momento, existe un conjunto de UTXOs llamado UTXO Set
(conjunto de UTXOs), este conjunto de UTXOs se compone de todas las salidas en el sistema que aún no se han gastado, y si hacemos una sumatoria de todas las salidas en este conjunto, llegaremos al total de BTC en circulación. Es la forma de demostrar la
base monetaria total emitida hasta la fecha. A la fecha de publicación de este artículo, el tamaño del UTXO Set
es de 78,964,075 y el total de BTC en circulación es de 18,947,693.79084230 BTC emitidos.
Por último quisiera hacer mención de un tipo de transacción especial llamado Coinbase Transaction, este tipo de transacción solamente se presenta en la construcción de un nuevo bloque y es el resultado del proceso de minado, las Transacciones Coinbase tienen la misma estructura que una transacción normal, la única diferencia es que no hay una salida anterior UTXO a la que su ( TXIn ) apunte, ya que no existe, y únicamente tendrán una salida equivalente a la recompensa de minado por encontrar un bloque. En nuestras imagenes de ejemplo, las transacciones Tx1 son transacciones Coinbase. Son justamente a los Mineros a quienes se les tiene permitido crear este tipo de transacciones en cuanto encuentran un bloque, esto como parte del proceso de minado. En el post Minería Bitcoin puedes leer mas sobre ello.