Bucle nonce de Bitcoin (y otras criptomonedas)

Recientemente comencé a prestar atención a lo que sucede en los criptomercados y, siendo desarrollador durante mucho tiempo, decidí echar un vistazo al software que tenemos disponible para el acceso público.

Así que tengo una pregunta para todos los cripto-gurús aquí: como parece de la especificación del protocolo Bitcoin, Bitcoin aceptará CUALQUIER nonce que satisfaga la condición de bits de destino (bloque). Cada minero que he visto hecho público está usando un bucle secuencial sobre nonce1 y nonce2. pregunta real: ¿por qué la gente implementa +1 para el nonce en cada hilo, en cambio, digamos, tener 2 hilos uno va +1 desde el principio; ¿El segundo está contando -1 desde el final del intervalo de nonces?

En mi humilde opinión, sería más rápido si está ejecutando varios subprocesos en el mismo intervalo... o, en el mundo perfecto, divida el intervalo completo en N subintervalos dejando que cada subproceso haga su propia parte. Desde el punto de vista matemático, parece que obtendremos una mayor probabilidad de alcanzar el 'nonce dorado' con este enfoque, en lugar de +1 en todo el intervalo. ¿Estoy equivocado aquí?

Dicho todo esto, descargué la cadena de bloques y realicé un par de pruebas para ver la distribución nonce en el intervalo uint32_t. los resultados no me sorprendieron... Tengo una distribución de nonce bastante uniforme como: nonce impar: 49.997 nonce par: 50.003

divida uint32_t en 1024 intervalos idénticos y vea cuántos nonces de la cadena de bloques existente se encuentran en cada intervalo. los resultados son los mismos: distribución uniforme.

de nuevo, ¿por qué es +1 en el ciclo del minero? aunque, (+3), (-2) habría dado (en teoría) mejores posibilidades (más rápido) de encontrar golden nonce frente a otros (+1).

¿Por qué sería eso más rápido que darle a cada subproceso su propio encabezado de bloque al mío?
¿Qué es más rápido para adivinar un PIN? ¿Adivinar al azar o comenzar en 0000 hasta 9999?
depende de tu suerte pero en teoría, si está utilizando uniforme aleatorio, lo más probable es que encuentre un PIN más rápido. darle una oportunidad. La aplicación de software simple se lo mostrará. Teniendo en cuenta que necesita encontrar nuevos PIN una y otra vez, aleatorio le brinda algunas ventajas
@NickODell, pruébelo usted mismo: ejecute cpuminer con 64 subprocesos. la velocidad del subproceso disminuirá, pero la cantidad de nonces aceptados aumentará durante un período de tiempo limitado.
Creo que está confundido, pensando que todos los mineros están calculando lo mismo, por lo tanto, hacer +2 podría ayudarlo. Cada minero se ejecuta en un trabajo aleatorio diferente. El siguiente punto que debe saber es que el algoritmo PoW no tiene progreso: cada número tiene la misma probabilidad, no importa si comienza al principio, al final o en el medio. No importa si haces +1 o +2 o +random. Así que cada uno elige el más simple.
@Jannes, ¡gracias por tu aporte! eso tiene sentido
PoW no es una respuesta. te está dando intervalos. el grupo, los encargados de tareas, no les importa si puedes hacerlo más rápido. si puede, ajustarán sus bits/diferencias... lo cual es, en mi opinión nuevamente, una bandera roja para el enfoque de alta velocidad de 'lógica difusa', si se me permite decir eso :)
perdón por la confusión, quise decir 'bandera verde' para la lógica difusa y roja para la fuerza bruta/arcoíris

Respuestas (2)

La distribución de nonces ganadores está sesgada hacia 0 porque se trata de un efecto de selección : la mayoría comienza a buscar nonces a partir de 0, por lo que los nonces más bajos se encuentran primero, aunque también puede haber nonces más altos que podrían producir un bloque ganador:distribución de valores nonce ganadores

Esto ilustra muy bien que la distribución de nonces es uniforme:histograma de nonces y hashes válidos

fuente: https://en.bitcoin.it/wiki/Distribution_of_nonces_and_hashes

Por lo tanto, +1 en el bucle minero es la forma más sencilla de cambiar el nonce, y funciona porque la distribución de nonce válida es uniforme. Los ASIC a menudo se ocupan de los nonces de manera muy diferente. Además, los ASIC pueden escanear todo el rango de nonce muy rápidamente, por lo que realmente no importa dónde comience a buscar un nonce válido.

Incluso en el mundo ASIC, teniendo en cuenta que pueden escanear todo el intervalo tan rápido, ¿no sería más rápido usar un algoritmo aleatorio u otro?
@AlexD No puede ser más simple que nonce ++. ☺ Cualquier cosa más que eso (p. ej., un pseudo-"[generador de números] aleatorio u otro algoritmo") simplemente ralentizaría las cosas. La gente ha explorado la resolución de SAT como una alternativa a la minería de bitcoin de fuerza bruta , pero la fuerza bruta es aún más rápida.
No mencioné nada aleatorio hasta ahora :) pseudo aleatorio es el camino a la nada en los ataques de fuerza bruta :) ¡pero estoy bastante seguro de que hay una mejor manera de forzar las cosas de una manera más eficiente! :)
@AlexD Si alguien descubre una mejor manera, Bitcoin tendrá que adoptar un método de prueba de trabajo diferente.
Solía ​​​​pensar que para un bloque determinado, eventualmente se encontraría un nonce válido con +1 hasta el éxito. ¿Es realmente el caso que a veces no se encuentra ningún nonce y el minero tiene que abandonar el bloque e intentar una colección diferente de transacciones?
@PrinceM Sí, eso podría ocurrir.
¿Por qué es finito el número de nonces posibles? ¿Por qué no puedes seguir incrementando hasta encontrar uno? ¿Es esto una "regla" o parte del protocolo? ¿O simplemente es más rápido?
@PrinceM "¿ Por qué el número de nonces posibles es finito? " El campo nonce en un bloque de Bitcoin es un número de 32 bits (4 bytes), por lo que hay 2³² ≈ 4300 millones de números posibles que puede representar. Los ASIC son tan rápidos que pueden escanear todo el rango de nonce (hacer ~4.3 mil millones de hashes) casi al instante. Es por eso que extraNonce es útil para encontrar un bloque "ganador".
@Geremia interesante, por lo que puede haber un nonce que haga que ese bloque funcione, simplemente no necesariamente "encaja" en el bloque. ¡Entiendo!

Si usa cuatro subprocesos y divide el rango entre los cuatro subprocesos, eso significa que cada subproceso termina su rango y comienza uno nuevo cuatro veces más a menudo. Esa es claramente una propuesta perdedora sobre darle a cada hilo su propio rango completo.

Desearía poder hacer '-1' contigo. su respuesta no tiene ningún sentido en términos de mi pregunta. Por favor, léalo de nuevo. cada subproceso está haciendo lo mismo como: +1 en la parte inferior; el siguiente paso sería -1 en la parte superior. ¿Eso aumentaría la entropía?
@AlexD No entiendo lo que dices, supongo. Dado que cada nonce tiene la misma oportunidad, lo único que importa es cuántos nonces por segundo puede intentar. ¿Cuál sería el beneficio de esta complejidad?