Author

Topic: Una duda entorno a la cadena de bloques (Read 1480 times)

hero member
Activity: 597
Merit: 500
November 12, 2012, 05:58:35 AM
#6

Lo que no consigo entender en esto, son las fucniones de la mineria:

- para verificar que las transacciones son confiables y
- para generar o ir agregando bloques a la cadena?

https://es.bitcoin.it/wiki/P%C3%A1gina_principal

Me respondo a mi mismo, desde la info en la wikipedia.

La supuesta creacion de los BTC, no es + ni menos que un simple premio al esfuerzo de comprobacion de la legitimidad de las trasacciones. No es el bloque en si, ni el trabajo que se realiza en autenticar dicho bloque, sino una funcion que crea automaticamente los BTC...

Lo que me sorprende es que el sistema sea tan exacto y genere cada cierto tiempo predeterminado un determinado bloque y la capacidad adaptativa...


Efectivamente. Los mineros están para comprobar, entre otras cosas, 1º que el usuario que realiza una transacción está legitimado para ello (la mayoría de las veces el usuario símplemente tiene que entregar la clave pública de la dirección bitcoin desde la que salen las monedas y demostrar que es el propietario firmando toda la transacción con la clave privada) y 2º que esa transacción autorizada y validada no es un intento de gastar los mismos bitcoins dos veces (esto lo hacen comprobando los imputs de la transacción en la copia de la cadena de bloques que almacenan en su disco duro).
hero member
Activity: 597
Merit: 500
November 12, 2012, 05:52:44 AM
#5
Creo que cometes el mismo error que yo cometía al principio. Yo también pensaba que la dirección bitcoin era la clave pública, pero preguntando aquí me sacaron del error. La dirección bitcoin (la que empieza por 1) no es la clave pública, sino un hash de la clave pública.

Cuando haces una transacción colocas en "output" la dirección bitcoin del destinatario, pero no en el típico formato "1xxxxxxxxxxxxxx" que todos conocemos, sino en forma de raw binary (que no tengo ni idea de lo que es) y que en el ejemplo es el código que comienza por 4043, pero que sigue siendo una forma de expresar la dirección bitcoin, no la clave pública.
hero member
Activity: 597
Merit: 500
November 12, 2012, 05:31:57 AM
#4
A ver si no me hago un lío explicándome:

Una transacción bitcoin está formada, a grandes rasgos, por dos partes diferenciadas. Una primera parte sería la parte "imput" que serían las entradas de dinero, y una parte "output" que serían las salidas.

La parte input, además de incluir las entradas de dinero de la transacción también contiene la demostración criptográfica de que el usuario que quiere realizar la transacción es el verdadero propietario de los bitcoins que van a intercambiarse. Normalmente, pero no siempre, la única condición que se exige para poder incluir los bitcoins en "input" es que el usuario que realiza la transacción demuestre que es el legítimo propietario de la dirección bitcoin desde la que los bitcoins van a salir. Esto se hace indicando la clave pública que corresponde a la dirección desde la que salen los bitcoins y firmando un hash de la transacción completa con la clave privada.

La parte output incluye las diferentes direcciones a las que se van a enviar los bitcoins que se marcan en la parte input y, algo que la gente suele pasar por alto, las condiciones que deberá cumplir el receptor de los bitcoins para poder gastarlos. Ojo, gastar bitcoins significa permitir que alguien los incluya dentro de un "input" en una transacción futura. Tiene sentido ya que, gastar dinero no es más que tener autorización para realizar una transacción monetaria.

A ver si queda un poco más claro con un ejemplo:

Code:
Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG

Aquí tenemos una transacción muy básica con sus dos partes bien diferenciadas.

En la región input lo primero que encontramos es "previous tx" que es la parte en la que indicamos el hash de la transacción previa en la que nos llegaron los bitcoins a nuestra dirección.

"Index" es, dentro de la transacción previa indicada anteriormente, la posición en la que encontraríamos la llegada de bitcoins a nuestra dirección. ¿Por qué es necesario esta variable? pues porque dentro de una misma transacción puede haber varios destinatarios u outputs y con esta variable aclaramos completamente cuál es el trazado previo de los bitcoins que vamos a gastar. El 0 del ejemplo nos dice que es la primera.

Y ahora vamos a lo más complicado. El "ScriptSig". Aunque veáis un chorizo de números está formado por dos partes. La primera es la clave pública de la dirección desde la que saldrán los bitcoins. Y la segunda parte es la firma de un hash de toda la transacción (simplificada sin firmas) con la correspondiente clave privada de la dirección bitcoin. Esta es la forma que tiene el protocolo de que alguien pueda demostrar que es el legítimo propietario de los bitcoins que van a salir en esta transacción.

Y ahora la parte "output".

Value: es la cantidad de bitcoins que van a ir a la dirección de destino en la transacción medidos en Satoshis. Ojo! porque si la suma de bitcoins en los outputs es inferior a la suma de bitcoins incluídos en los inputs, la diferencia es considerada como transaction fee (comisión) y se la quedará el minero que incorpore esta transacción en un bloque.

ScriptPubKey: Aquí viene otra de las parte importantes en una transacción. ScriptpubKey recoge las condiciones para poder emplear los bitcoins intercambiados en esta transacción  como "imput" en una hipotética transacción futura. Esto es, impone la condición que debe ser validada para poder gastar los bitcoins en el futuro. Normalmente, tal y como pone en el ejemplo, la condición más empleada suele ser la de que el futuro usuario demuestre que posee la clave privada de la dirección bitcoin a la que han sido enviados. Es la misma condición que el usuario actual ha tenido que cumplir para poder realizar la transacción del ejemplo.

No sé si me he explicado con la suficiente claridad o sencillez. Es un tema un poco complicado porque son las tripas del protocolo, pero creo que lo mejor es que, conforme vyan surgiendo preguntas, vayamos respondiéndolas entre todos y así podamos entender mejor el funcionamiento de Bitcoin.

Os lo he contado tal y como yo entiendo que funcionan las transacciones. Puedo estar equivocado, así que no dudéis en corregirme o completar lo que he escrito, ya que no soy programador ni informático.
sr. member
Activity: 266
Merit: 250
November 12, 2012, 05:11:17 AM
#3
Si no estoy equivocado, durante una transacción, A no firma la clave pública de B. De hecho, si yo te pago unos bitcoins a una dirección no tendría forma de saber cuál es la clave pública de tu dirección bitcoin. Recuerda que la dirección bitcoin es un hash de la clave pública y por eso no podría saberla.

Dentro de un rato a ver si tengo un poco de tiempo y expongo lo que yo entiendo que es una transacción. A ver si entre todos aportamos un poco de luz al tema porque es complicadillo si no le pillas el truco

Tu billetera = clave privada
Tu bitcoin ID = clave publica

Cada vez que envias BTC a una bitcoin-ID, lo que estas haciendo es firmar con tu clave privada, la clave publica del usuario destino (o contraparte o bitcoin ID).

El principio de las transacciones en la red bitcoin, es la misma de la criptografia asimetrica de GPG:

Mas detalles en la p2 de la FAQ https://es.bitcoin.it/wiki/P%C3%A1gina_principal

Si yo te doy mi GPG Key (la que esta en mi firma al final de este mensaje) y tu la firmas y le das tu confianza y yo firmo tu clave publica, podemos intercambiar mensajes y archivos de forma encriptada y/o firmadas.

Lo que no consigo entender en esto, son las fucniones de la mineria:

- para verificar que las transacciones son confiables y
- para generar o ir agregando bloques a la cadena?

https://es.bitcoin.it/wiki/P%C3%A1gina_principal

Me respondo a mi mismo, desde la info en la wikipedia.

La supuesta creacion de los BTC, no es + ni menos que un simple premio al esfuerzo de comprobacion de la legitimidad de las trasacciones. No es el bloque en si, ni el trabajo que se realiza en autenticar dicho bloque, sino una funcion que crea automaticamente los BTC...

Lo que me sorprende es que el sistema sea tan exacto y genere cada cierto tiempo predeterminado un determinado bloque y la capacidad adaptativa...
hero member
Activity: 597
Merit: 500
November 12, 2012, 03:41:37 AM
#2
Si no estoy equivocado, durante una transacción, A no firma la clave pública de B. De hecho, si yo te pago unos bitcoins a una dirección no tendría forma de saber cuál es la clave pública de tu dirección bitcoin. Recuerda que la dirección bitcoin es un hash de la clave pública y por eso no podría saberla.

Dentro de un rato a ver si tengo un poco de tiempo y expongo lo que yo entiendo que es una transacción. A ver si entre todos aportamos un poco de luz al tema porque es complicadillo si no le pillas el truco
sr. member
Activity: 266
Merit: 250
November 12, 2012, 01:16:41 AM
#1
Hasta ahora me he leido un par de articulos en las wikis, revistas y blogs, y de alguna forma no logro entender con exactitud como es el procedimiento de generacion de la cadena de bloques.

Hasta ahora he usado la imaginacion, pero no consigo conectar con precision como encajan las funciones de minero con las de comprobacion de transacciones.

Ahora dejo planteado el problema:

Cuando A envia btcs a B, esto es, A firma con su clave privada la clave publica de B, se genera una solicitud de autentificacion para toda la red de mineros.

Que es lo que deben hacer los mineros exactamente para lograr esta verificacion?

Segun logro entender, la cadena de bloques es nada mas y nada menos, el conjunto de movimientos que se han generado en la red, es decir, la contabilidad, o me equivoco?

Alguien podria explicarme de la forma + facil posible este tema?
Jump to: