Y ahora te respondo la pregunta más complicada de las tres que has formulado. ¿Qué pasaría si el usuario recibe un pago en su billetera mayor de 12
BTC?¿Se gastarían inmediatamente en la operación anterior?
NO SE GASTARÍAN.
Es más, ni siquiera se gastarían en la operación anterior aunque los nuevos
BTC fueran recibidos por la misma dirección desde la que se ha ordenado el pago en la operación anterior.
¿Por qué? Pues porque Bitcoin no funciona como una cuenta bancaria tal y como todos tenemos en mente. El protocolo Bitcoin no funciona tal y como el interface del cliente-qt nos hace entender. No tenemos una "cuenta" con la que hacer un balance contable y decir "las gallinas que entran por las que salen". De hecho ese balance contable no puede hacerse ni siquiera dentro de una misma dirección bitcoin.
Para poder entender lo que digo debemos, ante todo, comprender cómo es una transacción bitcoin según el protocolo.
Una transacción bitcoin es esto:
Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG
Por lo tanto, cualquier pago que hacemos con bitcoin, esto es, cualquier transacción. Consta de dos partes muy diferentes. Un input y un output.
El input de la transacción consta, por así decirlo, de la referencia a una transacción anterior (previous tx) y de la demostración fuera de toda dudas de que estás autorizado a transmitir esos bitcoins a otras direcciones bitcoins (scriptsig).
Por lo tanto, entender lo que significan los inputs no es muy difícil. Hace falta una referencia a una transacción previa porque, al igual que en la economía doméstica, uno sólamente está autorizado legalmente a gastar un dinero que previamente le ha llegado. Demuestras que los bitcoins han llegado a tu dirección bitcoin poniendo en la variable previous_tx el identificador de la transacción con la que te los hicieron llegar y con scriptsig firmas con la clave privada de la dirección bitcoin para demostrar que eres el legítimo propietario de ellos. Así que con los inputs estamos anunciando qué bitcoins vamos a transferir y demostramos que somos los propietarios legítimos de las direcciones bitcoin desde las que van a salir.
Los output dicen la cantidad de bitcoins, medidos en satoshis, que van a ser transferidos (value) y las direcciones bitcoin en base 58 a la que van destinados (scriptpuvkey).
En realidad es un poco más complicado (no me meteré a explicar los tipos de transacciones que se pueden obtener según los scriptsig/scriptpuvsig que podemos obtener). Pero a grandes rasgos esa es una transacción Bitcoin.
Hay que tener en cuenta algunas cosas más:
- Podemos incorporar múltiples inputs y outputs a una misma transacción
- El valor de los bitcoins de los inputs debe ser igual o mayor que el de la suma de los outputs. Todos los bitcoins que superen el valor de los outputs pasarán a ser comisiones de la transacción.
¿Qué quiero decir con todo este rollo sobre cómo funciona el protocolo Bitcoin?
Pues que, aunque recibas más bitcoins en la dirección de tu billetera desde la que enviaste una transacción que ha quedado "en el limbo", no serán gastados automáticamente.
Y esto es así porque, aunque los nuevos bitcoins recibidos han llegado a la misma dirección bitcoin de tu billetera, tienen una "previous_tx" diferente a la de los bitcoin que pululan en la transacción que ha quedado pendiente en el limbo.
Para terminar, intentaré explicarlo con el símil de la cuenta corriente bancaria. Y seguro que me hago entender mejor:
Un pago con el protcolo bitcoin desde una cuenta bancaria sería muy diferente a lo que estamos acostumbrados. Sería algo así para el pago del seguro del coche.
Input:
Previous tx:
Codigo Swift de la transferencia en la que mi empresa ha realizado el pago de nóminas a sus trabajadores.
Index:
Número ordinal en la que aparece el pago a mi cuenta como trabajador en la transferencia especificada en previous_tx.
scriptSig:
Mi firma del certificado digital que demuestra que soy el legítimo propietario de la cuenta que ha recibido el abono de la nómina.
Output:
Value: 467.000000 (euros, pero recuerda que en bitcoin son satoshis)
scriptPubKey: código de cuenta de la compañía de seguros
Si mi madre decidiese ingresar en mi cuenta algo de dinero por mi cumpleaños, sería imposible que ese dinero fuese gastado inmediatamente ya que el previous_tx sería diferente que el del ingreso de la nómina.
Bueno, lo mejor será ir poco a poco con las dudas porque esto es muy complicado de explicar. Digamos que, con bitcoin, no enviamos dinero "de una cuenta a otra" sino que, cogemos outputs de las direcciones bitcoin de nuestra billetera, los colocamos en una transacción como inputs, los firmamos y los enviamos a las direcciones destinatarias como nuevos outputs. Seguramente me he explicado como un libro cerrado.
P.D. He cometido un error en la transferencia bancaria mode bitcoin que acabo de escribir, a ver si alguien es capaz de darse cuenta (un error que me saldría bastante caro, por cierto)