Transacciones en Bitcoin
En este post exploraremos qué es una transacción de bitcoin y cómo funciona.
Nota: Este post es una traduccion al espanol de mi post original en ingles: Bitcoin transactions
Que es una transaccion dentro de Bitcoin
Una transacción es uno de los conceptos fundamentales del Blockchain de Bitcoin. Es la operación en la que transferimos valor de una parte hacia otra de forma segura. Aquí podemos ver una transacción aleatoria con una confirmación en el blockchain:
Esta imagen muestra parte de la información que tiene una transacción, pero no refleja cómo funciona realmente. Es solo una forma de reunir la información de una manera fácil de leer.
Repasaremos algunos conceptos de este cuadro y veremos el hecho de que los bitcoins, al nivel del protocolo, no son “monedas” en absoluto. Tampoco existe un balance o almacenamiento de bitcoin, la definición de bitcoin como “un gran libro contable compartido y distribuido” es muy importante, porque es exactamente eso, ¡un libro contable que registra las transacciones con debitos y creditos!
Nota: Un bitcoin se puede dividir hasta en ocho decimales, y cada uno de los decimales individuales se llama “satoshis”. Entonces, en una transacción donde envío 0.00000045 bitcoins puedo decir que gasté 45 statoshis.
UTXO
Una transacción está compuesta por entradas (inputs) y salidas (outputs). A partir de ahora, vamos a llamar a las salidas de la manera correcta: “salidas de transacciones no gastadas” o UTXO (unspent transaction outputs). En el protocolo de Bitcoin, las entradas de transacciones (inputs) también son UTXOs de una transacción anterior, por lo tanto, una UTXO es el componente fundamental de una transacción de bitcoin.
Una nota al margen, para mayor claridad, decimos que las entradas son UTXO de transacciones anteriores, lo cual es cierto, pero más adelante en este artículo, veremos que también existe otro componente que reside en una UTXO llamado “secuencia de comandos de desbloqueo”.
¿Ya tienes una idea básica de cómo funciona la cadena de bloques de bitcoin? Recuerda, es un libro de contable distribuido que tiene un registro de cada UTXO hecho. Ahora está más claro por qué no hay bitcoins o almacenamiento, ¡todo está en el historial de transacciones!
Por ejemplo, para que una billetera criptográfica muestre su “saldo”, debe buscar en la cadena de bloques los UTXO que controla su clave privada. Luego, suma los valores de los UTXO y muestra el saldo final. De manera similar, cuando desea gastar un bitcoin, su billetera comprobará si tiene suficientes UTXO que sumen un bitcoin. Si tiene suficiente, la billetera creará otra transacción con estos UTXO como entradas.
La UTXO es una unidad de valor discreta e indivisible denominada en satoshis. La primera pregunta que nos viene a la mente cuando decimos que las UTXO son indivisibles: ¿qué sucede cuando intentamos gastar menos que las UTXO que poseemos? Veamos un ejemplo:
Quiero enviar a Sarah, 0.5 Bitcoins, y en mi balance tengo 1 bitcoin que proviene de solo una UTXO, así que no puedo dividir la UTXO de un bitcoin, debo enviar el bitcoin completo en la transacción y crear otra salida como mi cambio. Al igual que cuando pagamos con un billete de cinco dólares, algo que solo cuesta dos dólares, no podemos dividir el billete de cinco dólares, así que pagamos con el billete de cinco dólares completo y recibimos tres dólares de cambio. Este es un aspecto importante sobre las transacciones de bitcoin.
Si volvemos a ver el gráfico de transacciones de bitcoin, veremos que hay una entrada total de 4.32123876 BTC de una UTXO anterior, en el bitcoin estimado de transacción vemos 0.1 BTC, y en las salidas podemos ver 4 direcciones diferentes, probablemente la que tiene 0.1 BTC es la receptora de la transacción, y las otras tres son direcciones generadas al azar para devolver el cambio. Por razones de seguridad y de anonimato, algunas carteras generarán direcciones de bitcoin aleatorias y dividirán los pagos de cambio para dificultar el seguimiento de los fondos gastados, por eso también vemos una transacción de bitcoin “estimada”.
264/5000
Hay una excepción para las transacciones que no consumen una UTXO generada anteriormente, y se denominan transacciones “coinbase”. Esta es la primera transacción en un bloque y se genera a partir de las comisiones de las transacciones en ese bloque que se pagarán al minero que mino ese bloque.
Comisiones de Transaccion
¿Han notado la diferencia entre la entrada total y la salida total? Si observan el valor de las comisiones (“fees”) de la transacción, verán que la comision es la diferencia entre la entrada total y la salida total. Así que la fórmula para calcular las comisiones es:
Entrada total — Salida total = Comisiones
Y esto es importante, porque es algo que debe calcularse “sobre la marcha”, no hay ningún espacio en la estructura de la transacción donde se guardan las tarifas. Cuando se está construyendo la transacción, debemos crear una salida que sea un poco menor que la entrada para que los mineros conozcan las tarifas que conlleva la transacción.
La mayoría de las transacciones incluyen una tarifa que está destinada a compensar a los mineros por proteger la red. También es beneficioso para imposibilitar a los “spammers” que envíen transacciones constantes. Las comisiones son cobradas por el minero que arma un bloque incluyendo las transacciones, resolviendo los algoritmos de “prueba de trabajo” y agregando el bloque en el blockchain. Otro aspecto importante es que las tarifas no son obligatorias, sin embargo, las transacciones con tarifas cero rara vez se minan y, en ocasiones, ni siquiera se propagan a través de la red.
¿Cómo se calcula el tamaño de la comision?
Para elegir la diferencia entre la entrada total y la salida total, tenemos que ver qué tan compleja es la transacción. El tamaño de la tarifa se calcula a partir del tamaño de la transacción en kilobytes, no por la cantidad de bitcoin que se está tramitando. Una transacción de 10 BTC podría tener menos comisiones que una con 2 BTC.
Hoy en día, hay ciertos servicios que calculan dinámicamente el tamaño de la comision según la opcion del usuario. El usuario puede elegir entre tarifas altas, medias y bajas. El tamaño de la tarifa afecta la prioridad de procesamiento de la transacción, esto significa que los mineros buscarán transacciones que tengan comisiones más altas para ser extraídas primero porque recaudarán más dinero, por lo tanto, tarifas más bajas darán como resultado un procesamiento más prolongado.
¿Cómo se pueden gastar las UTXO o cómo se crean las entradas de transacciones?
En esta sección, exploramos el mecanismo que tiene Bitcoin para validar que el propietario de una UTXO cuando la gasta, el receptor tiene la propiedad de la UTXO creada como salida. Para esto, cada transacción tiene, en un nivel muy básico, un rompecabezas criptográfico o un script de bloqueo que sirve como validador de la transacción. Para resolver el script de bloqueo, también hay un script de desbloqueo. Vamos a verlos con más detalle:
Los scripts de bloqueo y desbloqueo
El script de bloqueo especifica una condición colocada en una UTXO. Esta condición es la que se debe cumplir para gastar esta salida en el futuro. La secuencia de comandos de desbloqueo, por otra parte, satisface las condiciones puestas en una salida por un script de bloqueo y permite que la salida se gaste. El script de desbloqueo existe en la entrada de transacción.
Al crear una entrada, tenemos que proporcionar un script de desbloqueo que satisfaga el script de bloqueo de una determinada UTXO. Luego, los nodos que validan las transacciones tendrán la entrada con el script de desbloqueo, por lo que tienen que buscar la UTXO que se necesita y tomar el script de bloqueo. Después de eso, el nodo ejecuta los scripts de bloqueo y desbloqueo juntos. La entrada es válida si el script de desbloqueo cumple las condiciones del script de bloqueo.
El lenguaje Scrypt
El lenguaje de transacción de Bitcoin se llama Scrypt. Este es el lenguaje que se usa para los scripts de bloqueo y desbloqueo. Es un lenguaje de programación incompleto, o “Turing incomplete”, lo que significa que carece de ciertos flujos de control que otros lenguajes “Turing complete”. Específicamente, el lenguaje de programacion Scrypt no tiene bucles o capacidades de control de flujo complejas (while o for loops). Esto garantiza que el lenguaje tenga una complejidad limitada y tiempos de ejecución predecibles, lo que deja menos posibilidades de piratear o introducir errores de los programadores.
Es importante comprender que los scripts de bloqueo y desbloqueo se basan en un lenguaje de programación, por lo que están vinculados a la lógica dentro del código, por lo que podría ser lo que el programador quiera que sea, lo que permite expresar una variedad infinita de condiciones . En otras palabras, las validaciones de transacciones no se basan en patrones estáticos.
Dicho esto, la mayoría de las transacciones en la red de bitcoin se bloquean con un script de pago a clave pública o “P2PKH”. Estas salidas contienen una secuencia de comandos de bloqueo que bloquea la salida a una dirección de bitcoin. Una salida bloqueada con un script “P2PKH” solo se puede gastar presentando la clave pública y la firma digital creada por la clave privada correspondiente.
Para resumir, en bitcoin casi todas las transacciones usan un script de bloqueo P2PKH para bloquear las transacciones no utilizadas. Esto significa que tenemos que proporcionar una firma digital y la clave pública correspondiente como el script de desbloqueo en la entrada de la transacción. Luego, los nodos de validación tomarán la UTXO correspondiente y ejecutarán el script de bloqueo asociado con nuestro script de desbloqueo y verificarán si es válido. Si es así, la transacción se valida y se agrega a un bloque para propagarse a la red.
Así es como funcionan las transacciones en Bitcoin, muchas gracias por haber llegado a este punto, y espero que hayan aprendido algo nuevo sobre esta increíble tecnología.
¡Nos vemos la próxima vez!