Bitcoin Forum

Local => Español (Spanish) => Topic started by: fernarios on January 18, 2013, 02:01:20 AM



Title: Dudas acerca del funcionamiento de confirmación de transacción
Post by: fernarios on January 18, 2013, 02:01:20 AM
Buenas, aún tengo algunas dudas de cómo funciona el sistema de confirmación de transacciones, espero que alguien me pueda ayudar... sé que los mineros son los encargados de confirmarlas, pero tengo algunas preguntas:

He observado (en blockchain.info por ejemplo) que cuando una nueva transacción queda en espera, ésta no tiene la primera confirmación hasta que el próximo bloque es resuelto por alguna pool, y obtiene la segunda confirmación cuando el segundo bloque es resuelto, es decir, ¿habrá una confirmación cada vez que resuelvan un bloque?

¿Hasta cuántas veces se confirma una transacción?

Aún no estoy muy seguro del funcionamiento del minado... ¿encontrar el hash de un bloque y confirmar la transacción son procesos distintos?, es decir, ¿primero el minero encuentra el hash y luego procesa la confirmación de transacciones? ¿o el minero confirma transacciones en el proceso de hallar el hash?.

Si las confirma luego de hallar el hash, ¿quién garantiza que el minero procese todas las confirmaciones antes de estar offline? (supongo que por esto, las transacciones deben confirmarse en el mismo proceso de encontrar el hash).

Si las confirma en el proceso de hallar el hash, ¿por qué hay que esperar a resolver todo el bloque para que el sistema acepte la confirmación?.

Se dice que una transacción aumenta la prioridad de ser procesada si se aumenta el fee para los mineros, pero si las transacciones sólo se confirman cuando el bloque fue resuelto, en realidad daría lo mismo (en tiempo de confirmación) si doy 0.01 a si doy 100 BTC de fees para mineros, pues ambas fees son grandes y entonces irán al mismo bloque, por lo tanto estarán confirmadas al mismo tiempo (cuando se resuelva todo el próximo bloque), ¿esta afirmación es correcta?.

Además del doble gasto (el cual creo entender), ¿qué otras formas hay de intentar falsificar una transacción?.

Si una transacción es fraudulenta, ¿el sistema sólo confirmará su rechazo hasta que el próximo bloque sea resuelto?.

He observado que por ejemplo satoshidice paga inmediatamente a un ganador sin que la transacción de la apuesta sea confirmada, ¿cómo hacen esto sin quebrarse?, he visto que cuando se apuesta algunas veces satoshidice sí espera a que se resuelva el bloque, ¿ésta es la única forma como se protegen? (pagar algunas ganancias posiblemente fraudulentas, pero deteniéndose a que esté confirmado un grupo de apuestas antes de resolver las siguientes), si esa es la única forma como se protegen, ¿qué evita que alguien haga apuestas fraudulentas hasta que satoshidice espere a confirmación, y luego esa misma persona tenga otra dirección apostando de nuevo con transacciones fraudulentas generando pagos instantáneos así sucesivamente?. En concreto, ¿cuál es la razón de que satoshidice confíe en algunas transacciones sin confirmar?.

Eso por ahora :P perdón si les parece que estoy muy confundido... un día leeré el paper de satoshi completo xD un día de estos, pues quiero entender todo el sistema alguna vez...


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: dserrano5 on January 18, 2013, 09:11:57 AM
¿habrá una confirmación cada vez que resuelvan un bloque?

¿Hasta cuántas veces se confirma una transacción?

Sí. Con cada bloque una confirmación más, sin límite.


Quote
¿o el minero confirma transacciones en el proceso de hallar el hash?

Esto. Sólo se confirman las transacciones que el minero haya decidido incluir en ese bloque (por ejemplo yo puedo ser un minero avaricioso y sólo minar transacciones que incluyan 1 BTC o más en comisiones).


Quote
Si las confirma en el proceso de hallar el hash, ¿por qué hay que esperar a resolver todo el bloque para que el sistema acepte la confirmación?

"esperar a resolver todo el bloque" no tiene sentido. O bien encuentras un hash lo suficientemente bajo como para ser menor que el target (con lo cual resuelves el bloque), o bien no lo encuentras (con lo cual no lo resuelves). No es un proceso según el cual vas resolviendo el bloque poco a poco.


Quote
Se dice que una transacción aumenta la prioridad de ser procesada si se aumenta el fee para los mineros, pero si las transacciones sólo se confirman cuando el bloque fue resuelto, en realidad daría lo mismo (en tiempo de confirmación) si doy 0.01 a si doy 100 BTC de fees para mineros, pues ambas fees son grandes y entonces irán al mismo bloque, por lo tanto estarán confirmadas al mismo tiempo (cuando se resuelva todo el próximo bloque), ¿esta afirmación es correcta?.

No tienes garantía de que ambas transacciones acaben en el mismo bloque. Depende de cómo cada minero decida incluir transacciones en los bloques en los que trabaja. Pero si es el caso, entonces es correcto que se confirman al mismo tiempo.


Quote
Si una transacción es fraudulenta, ¿el sistema sólo confirmará su rechazo hasta que el próximo bloque sea resuelto?.

No entiendo bien a qué te refieres con transacción fraudulenta. En cualquier caso, las transacciones no se rechazan. Como mucho pueden desaparecer, como si no hubieran existido, en caso de una reorganización de bloques.


Quote
He observado que por ejemplo satoshidice paga inmediatamente a un ganador sin que la transacción de la apuesta sea confirmada, ¿cómo hacen esto sin quebrarse?

La transacción envía las mismas bitcoins que el usuario apostó en primer lugar. Si por cualquier razón la primera tx deja de existir, lo mismo pasa con la segunda.


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: LuisCar on January 18, 2013, 07:10:33 PM
Ya te ha explicado an0therlr3 con bastante detalle un poco todo, aunque si algo no te queda claro no dudes en seguir preguntando aquí hasta que lo resolvamos, que de estos hilos siempre se aprende algo. Pero voy a matizar un par de detalles. Básicamente:

Confirmación = Inclusión de una transacción en un bloque
Nº de confirmaciones = Nº de bloque actual - Nº del bloque de la transacción + 1

Es decir el número de bloques que cuelgan del bloque que contiene la transacción más uno (el bloque que la contiene).

No confirmación = La transacción aún no ha sido incluida en un bloque (aún no forma parte de la cadena de bloques)

Una transacción que involucre un doble gasto no será incluida nunca en un bloque por ningún minero honrado. Un estafador tendría que ser el primero en resolver un bloque para incluir la transacción fraudulenta, o bien intentar publicar un bloque mal resuelto para ser el primero, pero como su verificación es trivial inmediatamente será rechazado por el resto de nodos de la red. Sobre la siguiente parte no he leído nada aún por lo que este caso es una suposición mía: si un minero modifica el software de minería de modo que cuando resuelva un bloque correctamente, incluya transacciones fraudulentas, el resto de nodos de la red, al comprobar que dicho bloque contiene algún doble gasto, acabará siendo rechazado también (en esta ocasión, sin embargo, el bloque ha llegado a ser publicado y ha formado parte de la cadena de bloques durante un determinado intervalo de tiempo).

Una hipotética situación implica que se "filtrase" un doble gasto en la cadena de bloques, ésta estaría corrupta a partir de dicho bloque, resultando inválidas también todas las operaciones contenidas en los bloques subsiguientes (aunque éstos sean formalmente válidos), es por lo que el cliente oficial te pide 6 confirmaciones ―6 nuevos bloques en la cadena― antes de poder gastar los bitcoin recibidos en una determinada operación. Hoy se considera totalmente improbable que tras seis confirmaciones subsista algún bloque corrupto.

Es por esto que se dice que cualquier presunto atacante a la red Bitcoin necesitará controlar el 51 % de la potencia de cómputo de la red para que de esta forma sus pagos falsos sean aceptados por la mayoría que controla. Ahora bien, con semejante capacidad, le resultaría más rentable trabajar de forma honrada para la red debido a los incentivos a la minería con los que prima el protocolo de Satoshi a los mineros honestos (aunque podría interesarle solamente socavar la confianza en la misma). Es por esto que la minería tiene una importancia fundamental en el sistema ideado por Nakamoto.

Se dice que una transacción aumenta la prioridad de ser procesada si se aumenta el fee para los mineros, pero si las transacciones sólo se confirman cuando el bloque fue resuelto, en realidad daría lo mismo (en tiempo de confirmación) si doy 0.01 a si doy 100 BTC de fees para mineros, pues ambas fees son grandes y entonces irán al mismo bloque, por lo tanto estarán confirmadas al mismo tiempo (cuando se resuelva todo el próximo bloque), ¿esta afirmación es correcta?.

Es correcto, a mayor comisión aumenta la probabilidad de que tu transacción sea incluida en el próximo bloque resuelto. ¿Por qué? Porque los mineros no tienen la obligación de incluir transacciones en los bloques que resuelven (la única ineludible es la transacción que contiene la creación de las monedas que le corresponden al bloque), por lo que, cuanto más pagues más mineros aceptarán publicar tu transferencia, y como no tienes forma de conocer previamente qué minero resolverá el bloque, una mayor base de mineros dispuestos a publicar tu transacción aumentará la probabilidad de que el próximo bloque sea resuelto por este grupo y tu operación se publique en él.

No soy ningún experto en el tema, por lo que si he metido algún gazapo, sería de agradecer que alguien me corrija.


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: fernarios on January 18, 2013, 10:07:17 PM
Muchas gracias a ambos, me han despejado muchas dudas...

¿habrá una confirmación cada vez que resuelvan un bloque?
He observado que por ejemplo satoshidice paga inmediatamente a un ganador sin que la transacción de la apuesta sea confirmada, ¿cómo hacen esto sin quebrarse?

La transacción envía las mismas bitcoins que el usuario apostó en primer lugar. Si por cualquier razón la primera tx deja de existir, lo mismo pasa con la segunda.


Interesante... ahora entiendo, el protocolo exige listar las transacciones anteriores (de entradas) que le permiten a satoshidice hacer el gasto, si una de ellas (la apuesta) no se confirma, entonces la el gasto (la ganancia) tampoco, así evitan el fraude... interesante.

Confirmación = Inclusión de una transacción en un bloque
Nº de confirmaciones = Nº de bloque actual - Nº del bloque de la transacción + 1

Es decir el número de bloques que cuelgan del bloque que contiene la transacción más uno (el bloque que la contiene).

Entiendo... me surge una pregunta, ¿es obligatorio confirmar por segunda vez las transacciones ya confirmadas?, es decir, ¿no se puede dar el caso en que un minero decida no confirmar por segunda vez las transacciones, dejando que transacción se confirme por segunda vez en otro bloque en el futuro?, o ¿la transacción  confirmada (una vez) queda obligatoria de procesar de alguna manera en el siguiente bloque? (debido a que ahora forma parte de la cadena de bloques)... sé que suena a pregunta rebuscada, pero me sirve para resolver alguna línea de mis pensamientos xD en donde tengo dudas...

Me surge otra duda, la fee de la transacción, si no es obligatorio confirmarla por segunda vez, ¿el sistema se la otorga completa al minero que confirma la transacción la primera vez?, o ¿la reparte entre cierto número de confirmaciones? (para estimular a que la sigan confirmando).

los mineros no tienen la obligación de incluir transacciones en los bloques que resuelven (la única ineludible es la transacción que contiene la creación de las monedas que le corresponden al bloque), por lo que, cuanto más pagues más mineros aceptarán publicar tu transferencia, y como no tienes forma de conocer previamente qué minero resolverá el bloque, una mayor base de mineros dispuestos a publicar tu transacción aumentará la probabilidad de que el próximo bloque sea resuelto por este grupo y tu operación se publique en él.

Interesante, justo ésta mañana me percaté de un bloque resuelto que constaba de sólo una transacción, de valor 25 BTC, me imaginé algo parecido a lo que explicaste, pero ya me lo confirmaste. Me surge una duda, resolver sólo la recompensa, ¿por qué hacer esto? ¿tiene alguna ventaja considerable en términos de facilidad de resolver el bloque o de menor carga de trabajo de cómputo para los mineros?.

Una última duda por ahora, con la entrada de los ASICs, ¿se esperaría que los bloques sean resueltos a una tasa más rápida? supongo que los ajustes en la dificultad precisamente moderan eso, pero quiero estar seguro, ¿esperaríamos el mismo promedio de tiempo en que se confirme una transacción? o ¿todas las transacciones se podrían confirmarán mas rápido?.

Muchas gracias por leerme y tenerme paciencia  :P.


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: Polvos on January 19, 2013, 12:08:20 AM
Entiendo... me surge una pregunta, ¿es obligatorio confirmar por segunda vez las transacciones ya confirmadas?, es decir, ¿no se puede dar el caso en que un minero decida no confirmar por segunda vez las transacciones, dejando que transacción se confirme por segunda vez en otro bloque en el futuro?, o ¿la transacción  confirmada (una vez) queda obligatoria de procesar de alguna manera en el siguiente bloque? (debido a que ahora forma parte de la cadena de bloques)... sé que suena a pregunta rebuscada, pero me sirve para resolver alguna línea de mis pensamientos xD en donde tengo dudas...
A ver cómo te explico esto para que no suene complicado.

Un minero no puede modificar la composición de los bloques anteriores porque entonces la nueva cadena sería rechazada por el resto de los nodos. Y tienes que tener en cuenta que las transacciones forman parte indisoluble e inalterable de cada bloque en el que han sido incluidas. Si un minero intentase eliminar una transacción de un bloque, la cadena sería rechazada. El diseño de Bitcoin es tan ingenioso que ni siquiera se puede alterar el orden de las transacciones validadas en un bloque de la cadena. Por eso son transacciones "confirmadas", porque es matemáticamente muy improbable el poder alterar el orden de los bloques validados o las transacciones que contienen.

La forma que tiene el protocolo para garantizar que se respeta el orden adecuado de los bloques que forman la cadena es obligando al minero a incorporar el hash del bloque anterior en la generación del nuevo bloque que está intentando minar ahora. De esta forma, aquel minero que consigue minar el bloque actual está indicando que el bloque actual va justo después del aquel a cuyo hash hace referencia.

Así que puedes imaginar lo que pasa si cambias alguna cosa de algún bloque de la cadena. Si cambias aunque sea una coma, eliminas una transacción o la alteras, entonces el hash del bloque modificado no coincidiría con su "contenido". Y así es como el protocolo se protege frente al intento de fraude en las transacciones.

Si el minero estafador intentase cambiar el orden de los bloques, o directamente, intentase eliminar un bloque de la cadena, no podría porque en la formación de cada bloque participa el hash del bloque precedente. Si no coincidiese el hash con su bloque significaría de nuevo el rechazo. Así es como el protocolo se protege frente al intento de manipulación de los bloques o de su eliminación de la cadena.

Me surge otra duda, la fee de la transacción, si no es obligatorio confirmarla por segunda vez, ¿el sistema se la otorga completa al minero que confirma la transacción la primera vez?, o ¿la reparte entre cierto número de confirmaciones? (para estimular a que la sigan confirmando).

Las comisiones se las lleva el minero que incorpora la transacción al bloque que acaba de minar. No se reparte. El minero que mine el siguiente bloque tendrá la estimulación de quedarse con las transacciones que incorpore él.

Interesante, justo ésta mañana me percaté de un bloque resuelto que constaba de sólo una transacción, de valor 25 BTC, me imaginé algo parecido a lo que explicaste, pero ya me lo confirmaste. Me surge una duda, resolver sólo la recompensa, ¿por qué hacer esto? ¿tiene alguna ventaja considerable en términos de facilidad de resolver el bloque o de menor carga de trabajo de cómputo para los mineros?.

Tiene una ventaja. Muchas veces dos mineros minan el bloque actual prácticamente al mismo tiempo, aunque en dos lugares diferentes del mundo. En teoría el primero que "publica" el nuevo bloque minado tiene ventaja sobre el otro, ya que los nodos recibirán antes la actualización de la cadena y éstos a su vez la irán publicando en la red. Sin embargo, si dos mineros minan el mismo bloque a la vez, o con una pequeña diferencia de tiempo, la versión de la cadena de bloques que se extenderá más rápido entre los nodos será la que tenga un menor tamaño de bloque, porque el tiempo de transmisión de los datos será menor. Así que esa versión será la aceptada por la mayoría.

Todo esto ocurre porque los usuarios aportan pocas comisiones en relación con la recompensa de bloque. Y algunos mineros, los muy competitivos, deciden que no les merece la pena arriesgar la velocidad de propagación del bloque minado frente al peso que puede suponer incorporar transacciones en él.

Una última duda por ahora, con la entrada de los ASICs, ¿se esperaría que los bloques sean resueltos a una tasa más rápida? supongo que los ajustes en la dificultad precisamente moderan eso, pero quiero estar seguro, ¿esperaríamos el mismo promedio de tiempo en que se confirme una transacción? o ¿todas las transacciones se podrían confirmarán mas rápido?.

Puedes estar seguro. Con los ASICs la dificultad aumentará en órdenes de magnitud respecto a la actual, pero los bloques seguirán generándose a un promedio de 10 minutos.


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: majamalu on January 19, 2013, 01:28:40 AM
La cátedra de LuisCar y Polvos ya es un clásico de este foro.  ;)  En serio, muy recomendable para todos los que desean profundizar en los distintos aspectos de la bitcoinología.


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: fernarios on January 19, 2013, 01:42:00 AM
Muchísimas gracias Polvos... todo claro. Interesante lo de la tomar en cuenta la velocidad de propagación de la solución (limitando el tamaño del bloque).


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: Polvos on January 19, 2013, 08:17:08 AM
Gracias a vosotros por escucharme. Siempre que explico algo relacionado con Bitcoin intento transmitir la misma sensación de asombro y respeto que me despierta el ingenio humano que desborda su diseño. Es imposible no enamorarse de una obra de arte cuando la tienes justo delante de ti.

Y lo más curioso de todo es que, cuanto más indagas en la forma en que Bitcoin fue concebido y construído, más asombrado te quedas de lo que somos capaces de crear.

Yo creo sinceramente que Satoshi Nakamoto es al Salvador Dalí del sistema monetario. Y por eso me esfuerzo en que la gente pueda entender cómo funciona su creación. Sería una pena que alguien rechazase su trabajo porque no consiguiese comprender ni siquiera una mínima parte de él.


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: Polvos on January 19, 2013, 08:39:42 AM
Aquí os pongo un par de links de la wiki con los que aprendí cómo funcionaba la creación de los bloques y la inclusión de las transacciones en ellos:

https://en.bitcoin.it/wiki/Block_hashing_algorithm
https://en.bitcoin.it/wiki/Protocol_rules
https://en.bitcoin.it/wiki/Block


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: hackl3r on July 29, 2016, 10:45:53 PM
Este post me sirvio, la verdad yo tampoco entendia como era que se confirmaba una transaccion. Entiendo que mientras mas transacciones es mejor, pero nunca entendi que es exactamente mejor, hasta cuantas transacciones es posible revertir una transaccion?


Title: Re: Dudas acerca del funcionamiento de confirmación de transacción
Post by: Anillos2 on July 31, 2016, 02:32:56 AM
Este post me sirvio, la verdad yo tampoco entendia como era que se confirmaba una transaccion. Entiendo que mientras mas transacciones es mejor, pero nunca entendi que es exactamente mejor, hasta cuantas transacciones es posible revertir una transaccion?
Teóricamente, siempre sería posible revertir una transacción, pero en la práctica es casi imposible.

No sólo necesitas tener un 50% de la capacidad de minado, sino que debes tener algo más para que puedas "adelantar" a la cadena real. No sólo debes invertir mucho en mineros, sino también en energía para poder procesar tu sólo tanto como el resto de la red. Además, incluso te juegas que el resto de la red note que tu cadena cuando es más larga, es "sospechosa" y te la marquen como no válida y el esfuerzo sea en valde, porque Bitcoin está descentralizado, pero eso no significa que no haya control de nada, si el resto de la gente no acepta esa cadena, no la acepta y punto.