Mastering Bitcoin
4. ¿Cómo funciona Bitcoin? » Construyendo una Transacción » Añadiendo la Transacción al Libro Contable
Página 19 de 98
Construyendo una Transacción
La aplicación de monedero de Alice contiene toda la lógica necesaria para seleccionar entradas y salidas al construir una transacción que cumpla los requisitos de Alice. Alice solo necesita especificar un destino y una cantidad, y el resto sucede en el monedero sin que ella tenga que ver los detalles. Es importante destacar que un monedero puede construir transacciones aun cuando esté completamente sin conexión. De la misma forma que se puede escribir un cheque en casa y luego enviarlo al banco en un sobre, la transacción no necesita ser construida y firmada mientras se está conectado a la red bitcoin. Solo tiene que ser enviada a la red para ser ejecutada.
Consiguiendo las Entradas Correctas
La aplicación de monedero de Alice tendrá primero que encontrar entradas que puedan pagar la cantidad que ella quiere enviar a Bob. La mayoría de aplicaciones de monedero mantienen una pequeña base de datos de «salidas de transacción no gastadas» que están bloqueadas (obstruidas) con las propias claves del monedero. Por tanto, el monedero de Alice puede contener una copia de la salida de la transacción de Joe, que fue creada a cambio de efectivo (ver el apartado con respecto a obtener el primer bitcoin). Un monedero que funcione como un cliente completo en realidad contiene una copia de las salidas no gastadas de todas las transacciones en la cadena de bloques. Esto permite al monedero construir nuevas entradas de transacción, así como verificar rápidamente que las transacciones entrantes tienen las entradas correctas. Sin embargo, debido a que un cliente completamente indexado requiere mucho espacio en el disco, la mayoría de usuarios utilizan clientes «ligeros» que solo llevan el control de las salidas no gastadas del propio usuario.
Si el monedero no mantiene una copia de las salidas no gastadas, puede consultar a la red bitcoin para que le proporcione esa información, usando una variedad de APIs disponibles a través de diferentes proveedores o solicitándoselo a un nodo completamente indexado mediante el API JSON RPC de bitcoin. Observa todas las salidas no gastadas de la dirección bitcoin de Alice. Abajo se muestra una petición API RESTful construida a partir de un comando HTTP GET a una URL específica. Esta URL devolverá todas las salidas de transacción no gastadas de una dirección, proporcionando a cualquier aplicación la información que necesita para construir las entradas de transacción para ser gastadas. Usamos el cliente HTTP simple de línea de comandos cURL para obtener la respuesta.
Observa todas las salidas no gastadas de la dirección bitcoin de Alice.
$ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
{
"unspent_outputs":[
{
"tx_hash":"186f9f998a5…2836dd734d2804fe65fa35779",
"tx_index":104810202,
"tx_output_n": 0,
"script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000000,
"value_hex": "00989680",
"confirmations":0
}
]
}
La respuesta a la búsqueda de arriba muestra una salida no gastada (una que aún no ha sido recuperada) bajo la propiedad de la dirección de Alice 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK. La respuesta incluye la referencia a la transacción en la que esta salida no gastada está contenida (el pago de Joe) y su valor en satoshis, a 10 millones, equivalente a 0.10 bitcoin. Con esta información, el monedero de Alice puede construir una transacción para transferir esa cantidad a la dirección del nuevo propietario.
Ver transacción de Joe a Alice.
Como se puede ver, el monedero de Alice contiene suficientes bitcoins en una sola salida no gastada para pagar la taza de café. Si no fuera el caso, el monedero de Alice tendría que haber rebuscado en otras salidas no gastadas más pequeñas, como eligiendo monedas del bolsillo hasta que se encuentren las suficientes para pagar el café. En ambos casos, puede ser necesario que devuelvan el cambio, lo que veremos en la siguiente sección, donde el monedero crea las salidas de la transacción (pagos).
Creando las Salidas
Una salida de transacción se crea en la forma de un script que crea una obstrucción en el valor y solo puede ser recuperado por la introducción de una solución al script. Simplificando, la salida de transacción de Alice contendrá un script que dice algo así como, «Esta salida es pagable a quien pueda presentar una firma desde la clave correspondiente a la dirección pública de Bob». Debido a que solo Bob tiene el monedero con las claves que corresponden a esa dirección, solo el monedero de Bob puede presentar esa firma para recuperar esa salida. Alice por tanto habrá «obstruido» el valor de la salida con una solicitud de la firma de Bob.

Figura 8. Transacción de Alice a la Cafetería de Bob
Esta transacción también incluirá una segunda salida, porque los fondos de Alice están en la forma de una salida de 0,10 BTC, demasiado dinero para los 0,015 de la taza de café. Alice necesitará 0,085 BTC como cambio. El cambio de Alice se crea por el monedero de Alice en exactamente la misma transacción que el pago a Bob. En definitiva, el monedero de Alice divide sus fondos en dos pagos: uno a Bob, y otro de vuelta a ella misma. Entonces podrá usar la salida de cambio en la siguiente transacción, y por tanto gastarla más tarde.
Finalmente, para que la transacción sea procesada por la red de manera oportuna, el monedero de Alice añadirá una pequeña comisión. Esta no está explícita en la transacción; se saca de la diferencia entre entradas y salidas. Si en vez de llevarse 0,085 de cambio, Alice crea solo 0.0845 como segunda salida, habrá perdido 0.0005 BTC (medio milibitcoin). La entrada de 0.10 BTC no estará completamente gastada con las dos salidas, porque sumarán menos que 0.10. La diferencia resultante es la comisión de transacción que es recogida por el minero como tasa por incluir la transacción en un bloque e introducirla en la cadena de bloques.
La transacción resultante puede verse usando un explorador web de la cadena de bloques, tal como se muestra en Transacción de Alice a la Cafetería de Bob.
Ver transacción de Alice a la Cafetería de Bob.
Añadiendo la Transacción al Libro Contable
La transacción creada por el monedero de Alice es de 258 bytes y contiene todo lo necesario para confirmar la propiedad de los fondos y asignar nuevos propietarios. Ahora, la transacción debe ser transmitida a la red bitcoin donde será parte del libro contable distribuido (la cadena de bloques). En la siguiente sección veremos cómo una transacción se convierte en parte de un nuevo bloque y cómo se «mina» el bloque. Finalmente, veremos cómo el nuevo bloque, una vez añadido a la cadena de bloques, es cada vez más confiable por la red cuantos más bloques se añadan.
Transmitiendo la Transacción
Debido a que la transacción contiene toda la información necesaria para ser procesada, no importa cómo o desde dónde es transmitida a la red bitcoin. La red bitcoin es una red de igual a igual (P2P), en la que cada cliente de bitcoin participa conectándose a muchos otros clientes bitcoin. El propósito de la red bitcoin es propagar las transacciones y bloques a todos los participantes.