Author

Topic: Bitcoin - Bloques vacíos - dudas (Read 126 times)

legendary
Activity: 2394
Merit: 6581
be constructive or S.T.F.U
February 18, 2023, 06:36:14 AM
#10
Q1) Will the miner always (in theory) abort attempting to mine the empty block as soon as he can start working properly on the new block, but now including the new TXs in it?
I presume he would, looking for a greater reward from the non-empty block, and dedicating all his hash power to it.


Since the miners are now almost all mine whiting a pool, the pool needs to generate a new block template and send new work to the miners that are already working on an empty block template, so it is likely to delay that for a while ( probably a few seconds) to allow shares coming from those miners before sending the new work.

Also since there is nothing in the protocol that governs this process, each pool is likely handling it a bit differently

Quote
Q2) Do all/most of the miners try to mine empty blocks? or are there some known big mining players that oppose the practice as far as you know?

When I made my analysis on the subject, I found that all pools mined empty blocks except for Kano.is, kano publicly stated that his pool code won't send an empty block template to miners unless his mempool is empty which is more like 'never'
legendary
Activity: 2338
Merit: 10802
There are lies, damned lies and statistics. MTwain
February 18, 2023, 04:26:33 AM
#9
<…>
Ok, thanks for the detailed explanation. Just two things that are still not clear in my mind:
Say a miner starts mining an empty block whilst the complete data from previous block is in the process of being downloaded.

Q1) Will the miner always (in theory) abort attempting to mine the empty block as soon as he can start working properly on the new block, but now including the new TXs in it?
I presume he would, looking for a greater reward from the non-empty block, and dedicating all his hash power to it.

Q2) Do all/most of the miners try to mine empty blocks? or are there some known big mining players that oppose the practice as far as you know?



Ok, gracias por la explicación detallada. Sólo dos aspectos que aún no tengo claros:
Pongamos que un minero empieza a minar un bloque vacío mientras espera la descarga completa de los datos del bloque anterior.

Q1) ¿El minero siempre (en teoría) abortará el minado del bloque vacío en cuanto pueda empezar a trabajar, ya con todos los datos de las TXs, sobre el nuevo bloque?
Supongo que es así, dado que el minero buscará una mayor recompensa en un bloque con TXs, dedicándole a éste toda su potencia de hash.

Q2) ¿Todos/la mayoría de los mineros intentan minar bloques vacíos? ¿o hay mineros de entidad que se oponen a la práctica que tú sepas?
legendary
Activity: 2394
Merit: 6581
be constructive or S.T.F.U
February 17, 2023, 02:21:45 PM
#8
Es decir, suena como si intentase resolver el bloque siguiente vacío en el ínterin hasta que arme su nuevo bloque con TXs, ambas instancias obviamente con hashes distintos. Si esto es así, no sé cómo se garantiza que el proceso de minado de un bloque vació se dé sólo en el ínterin aquí citado, y no de manera deliberada para intentar ganar tiempo sobre los demás mineros que sí arman su bloque con TXs.

LoyceV's notification bot notified me about the post by Don Pedro Dinero, so I used google translator to read the topic and found some interesting stuff, the last portion of your post which translates to the following (of course, assuming google translator is accurate)

Quote
I don't know how to guarantee that the mining process of an empty block occurs only in the interim mentioned here, and not deliberately to try to gain time over the other miners who do assemble their block with TXs.

You simply can't guarantee, it's just wild guesses unless you are the person himself, however, it's not really "deliberately to try to gain time" it's more like "trying not to waste time and hash power".

See, there is nothing in the protocol that prohibits users from mining empty blocks, it's just the fees incentives that ensure transactions are included in blocks, it makes no sense for any rational miner to leave money on the table "intentionally" unless they want to prove something (like the debate/war over block size when IMO bitmain was mining empty blocks on purpose just to prove a point), aside from that, empty blocks are just a part of the game, I don't think it's wrong or even unethical to mine empty blocks.

The only way you can avoid empty blocks (assuming there are pending transactions which is the case 99.99% of the time) is to intentionally waste money, pulling out the last block header and the details you need to start mining the next block takes less than downloading the whole block, checking the old transactions and creating a new block template that has transactions.

Kano ( a pool operator) said it takes less than 200ms to do that, you can find other sources who would claim 1 second or any other number, it actually doesn't matter because time = money, even going with the assumption that its 200ms, and as a pool, I am supposed to mine 20 blocks a day, by ensuring that I don't mine empty blocks it means I will be wasting 200ms*20 every day, there is no need to translate that to the actual BTC earnings or $, we know for certain it's >0.

so despite it being a few seconds/minutes of "otherwise wasted hash power/time" what do I gain by not mining empty blocks? this is the question that needs to be addressed while keeping in mind that just because I mined an empty block, it has no effect on the time it takes to include your transaction, if I somehow hit a block during the first 200ms of receiving the previous block header, it doesn't mean I could have waited 300ms to include your transaction, it also doesn't mean that I or any other miner can't find a block 2 seconds later and include your transactions.

When all these things are put together, it seems very irrational not to mine empty blocks, not by actually doing it intentionally, but just as a result of not wasting a single hash you have.

Of course, the counterargument is that if you don't actually check all the transactions in the block, you could very well be mining on top of an invalid block (one transaction could be invalid and that block is invalid and so is yours), that's a great argument, but we need to keep in mind that me trying to solve am empty block while downloading and checking the previous blocks at the same time, so two scenarios:

1- The previous block is valid > I started and have not wasted time.
2- The previous block is invalid> I started and have not wasted time but if I hit a block it's useless.

Notice how it makes no difference in regards to wasting time because the other option is simply wasting time checking the block whether it was valid or not, I rather risk mining on top of an invalid block than seeing my hash power wasted doing nothing, also, it does make sense to trust the previous block for 200ms since it's for their best interest not to include an invalid transaction in their block or else they lose the whole block.

Of course, some people think this is unethical and everyone must check every transaction before mining the next block, to me, the theories and explanations just don't add up, but that is just me.

legendary
Activity: 2338
Merit: 10802
There are lies, damned lies and statistics. MTwain
February 17, 2023, 06:44:48 AM
#7
<…>
Algo así, y digo algo así porque se me escapa un detalle que desconozco, y que no me he puesto a mirar todavía:
Cuando un minero se pone a minar el bloque siguiente, toma datos de la cabecera del bloque anterior, las TXs de su propio bloque, y el nonce, y los combina para obtener el valor hash que contrasta con el valor target del proceso de minado.

Si está bien conceptualizado lo anterior (aunque resumido), el que mina un bloque vacío debería ser porque está intentando minar un bloque sin TXs de entrada, y cuando llegan los datos de la TX del bloque anterior, y las combina con su mempool para seleccionar/dejar de lado TX, al incluirlas en el bloque, el hash resultante obviamente será distinto (al incluir las TXs).

Es decir, suena como si intentase resolver el bloque siguiente vacío en el ínterin hasta que arme su nuevo bloque con TXs, ambas instancias obviamente con hashes distintos. Si esto es así, no sé cómo se garantiza que el proceso de minado de un bloque vació se dé sólo en el ínterin aquí citado, y no de manera deliberada para intentar ganar tiempo sobre los demás mineros que sí arman su bloque con TXs.
legendary
Activity: 1358
Merit: 1565
The first decentralized crypto betting platform
February 17, 2023, 05:49:29 AM
#6
Creo que esta explicación es bastante liviana acerca del porqué se minan bloques vacíos. Ejemplifica mejor el motivo que la parte citada en el OP.

He estado releyendo la explicación y quisiera poner lo que he entendido aquí, porque a veces explicar te sirve para aprender, además de que nos puede quedar más claro a todos, y si me equivoco en algo despejaré dudas.

Una posibilidad es la de que sea el minero el que mine el bloque vacío y el siguiente, como se comentó antes, pero en el enlace, mikeywith argumenta que no tiene por qué ser así en todos los casos.

Lo más probable si no es el mismo minero quien mina el bloque vacío y el anterior, es que haya habido un periodo de tiempo demasiado breve entre los dos minados de bloques pues quien mina el segundo bloque tiene que borrar las transacciones que ha incluido el primero, pues si incluye alguna que se ha incluido en el anterior su bloque será inválido. Lo más sencillo para evitar esto si hay un periodo muy breve de tiempo entre el minado del bloque anterior y que tú minas tu bloque es dejar el bloque vacío y cobrar solo la coinbase.

Visto esto la explicación de seoincorporation sería correcta pero cambiando los nombres

Por ejemplo, Juan mina el bloque 105 y un segundo después Pedro mina el bloque 106... Si juan y pedro incluyen la misma transacción en cada uno de sus bloques esto representaría un conflicto en la cadena de bloques, es por esto que mejor se deja el bloque de Juan Pedro vacío mientras que el de Pedro se llena a tope de transacciones.

Juan ya ha incluído transacciones en su bloque y es Pedro quien no tiene tiempo a comprobar, por tanto deja el bloque vacío.

¿Lo he entendido bien?
legendary
Activity: 2338
Merit: 10802
There are lies, damned lies and statistics. MTwain
February 14, 2023, 04:01:58 AM
#5
Creo que esta explicación es bastante liviana acerca del porqué se minan bloques vacíos. Ejemplifica mejor el motivo que la parte citada en el OP.

Como curiosidades:

- Con esta consulta podemos ver los bloques minados sin más transacción que la coinbase de recompensa:
https://blockchair.com/bitcoin/blocks?q=transaction_count(1)#f=time,guessed_miner,transaction_count

- Hay más de 89K casos históricamente, aunque como puede verse en la estadística del hilo abajo reflejado, la mayoría se corresponden a bloques minados durante los años 2009 y 2010.

Ver:
BTC empty blocks (2009 - 5 May 2020): miners, size, daily, monthly,yearly stats

Edit:
otro bloque vacío hace escasos minutos:
https://mempool.space/es/block/0000000000000000000364bae314dc280c43f9b8d1f6a6e2b13b47c89944a866
legendary
Activity: 1358
Merit: 1565
The first decentralized crypto betting platform
February 13, 2023, 10:32:32 PM
#4
Curioso también, y a mi me genera dudas.

Pero lo que dices tiene algo de sentido, porque muchas veces he visto que en la mempool se da el caso de bloques que se minan casi al mismo tiempo (a pocos minutos de separación).

Yo recuerdo, al estar mirando a ver si se me confirmaba una transacción, ver una separación de segundos entre bloques minados.

Por ejemplo, Juan mina el bloque 105 y un segundo después Pedro mina el bloque 106... Si juan y pedro incluyen la misma transacción en cada uno de sus bloques esto representaría un conflicto en la cadena de bloques, es por esto que mejor se deja el bloque de Juan vacío mientras que el de Pedro se llena a tope de transacciones.

Esto no es exacto si lo que dice ranochigo más abajo es correcto. Lo haría el mismo minero.

He estado buscando sobre el tema en bitcointalk, y parece que uno de los motivos para minar un bloque vacío es que se mina más rápido:

A miner could simply try and solve the same block indefinitely until the solution is found and they they can stick the empty block into the chain and receive the reward.... Would this somehow provide an advantage over people trying to solve full blocks?

It is indeed faster to mine a empty block. It takes time to validate a new block and construct the next one. A  miner may choose to start mining an empty block while they are doing that.

As others have noted, a block header contains the hash of the previous block, so it must change with every new block.

Y creo que aquí estaría el quid de la cuestión, si no, no le veo sentido:

That's true. You still need to parse the transaction to compare them to your own mempool. The idea is that the miner mines an empty block while validating the new block simultaneously.

legendary
Activity: 1162
Merit: 2025
Leading Crypto Sports Betting & Casino Platform
February 13, 2023, 07:41:12 PM
#3
Los bloques vacíos es algo que ha pasado desde el principio y entender el por que pasa es algo complejo, pero desde mi punto de vista es una forma de auto-protección de la cadena de bloques para evitar que la misma transacción obtenga su primera confirmación en diferentes bloques.

Por ejemplo, Juan mina el bloque 105 y un segundo después Pedro mina el bloque 106... Si juan y pedro incluyen la misma transacción en cada uno de sus bloques esto representaría un conflicto en la cadena de bloques, es por esto que mejor se deja el bloque de Juan vacío mientras que el de Pedro se llena a tope de transacciones.

Yo sabía de la existencia de los bloques vacíos y asumía que tenía algo que ver con la actividad de los mineros al incluir solo la transacción de recompensa en uno de sus bloques encontrados.

Pero lo que dices tiene algo de sentido, porque muchas veces he visto que en la mempool se da el caso de bloques que se minan casi al mismo tiempo (a pocos minutos de separación). Creo que conflicto entre los nodos dependería de la latencia entre todos ellos para la sincronización con la red.

La explicación no me convence del todo porque al final aunque se pueden aplicar las leyes de las probabilidades a la minería (conociéndose la dificultad, el hashrate, para calcular el tiempo promedio). ¿no es la minería en si de naturaleza azarosa?

En teoría la posibilidad de un conflicto como ese siempre estaría presente, aunque fuese pequeña.
legendary
Activity: 3346
Merit: 3125
February 13, 2023, 02:38:21 PM
#2
Los bloques vacíos es algo que ha pasado desde el principio y entender el por que pasa es algo complejo, pero desde mi punto de vista es una forma de auto-protección de la cadena de bloques para evitar que la misma transacción obtenga su primera confirmación en diferentes bloques.

Por ejemplo, Juan mina el bloque 105 y un segundo después Pedro mina el bloque 106... Si juan y pedro incluyen la misma transacción en cada uno de sus bloques esto representaría un conflicto en la cadena de bloques, es por esto que mejor se deja el bloque de Juan vacío mientras que el de Pedro se llena a tope de transacciones.
legendary
Activity: 2338
Merit: 10802
There are lies, damned lies and statistics. MTwain
February 13, 2023, 01:05:20 PM
#1
Hace 6 horas, se minó un bloque sin transacciones. Concretamente, se minó el bloque 776339 a las 2023-02-13 12:56, siendo el bloque precedente un bloque lleno con 2.448 TXs, y casi con el mismo timestamp: 2023-02-13 12:55.

Lo primero que pensaba es que no habrían TXs para entrar en el bloque vacío, pero visto que el anterior estaba lleno, no parecía probable. Luego, al ver que el timestamp era casi el mismo que el del bloque precedente, esto nos da la pista para empezar a comprender el caso. Según explica la web de mempool.space:

Quote
Why are there empty blocks?
When a new block is found, mining pools send miners a block template with no transactions so they can start searching for the next block as soon as possible. They send a block template full of transactions right afterward, but a full block template is a bigger data transfer and takes slightly longer to reach miners.
In this intervening time, which is usually no more than 1-2 seconds, miners sometimes get lucky and find a new block using the empty block template.
Leyendo la explicación anterior, no me queda claro:

Q1) ¿Qué es este doble envío de plantillas en un intervalo de tiempo tan pequeño: la vacía y la lleva de TXs?

Q2) Es más, tampoco me queda claro qué información de TX contiene la segunda plantilla, dado que las TXs se irán conformando acorde a los fees y las TXs creadas con arreglo a la mempool. ¿Alguien lo sabe?

El artículo que me llevó a explorar lo anterior es el siguiente, donde no obstante no he visto una explicación acerca de lo citado arriba:
https://es.cointelegraph.com/news/you-don-t-see-that-every-day-bitcoin-empty-block-found

Nota: El suceso parece que ocurre en el 1%-2% de los bloques minados, luego no es un fenómeno extraordinario, pero si curioso.
Jump to: