Me gustaría entender realmente la minería de energía mediante la implementación de uno simple, pero aún tengo problemas.
supongamos que tenemos cinco mineros, m1,...,m5. Cada minero tiene una tasa de hash, m1=30%, m=20%,m3=15,m4,25, m5=10%, en total 100%
Cómo simular (por ejemplo, en código python simple) la competencia de minería entre estos mineros de tal manera que cada 15 segundos uno de ellos encuentre un nuevo bloque teniendo en cuenta su tasa de hash. por ejemplo, podría ser posible que dos o tres mineros obtuvieran un bloque al mismo tiempo. por lo tanto, cada bloque se distribuye (digamos tiempo de acuerdo) y otros lo confirman. ¿Cómo modelar esto? decidir el número de bloques obsoletos/tíos, etc.
¿Alguien podría ayudar y aconsejar en esto?
Editar : pasé algunas horas escribiendo un código que simula el tiempo de propagación del bloque y los tíos. Puede encontrarlo en mi repositorio de GitHub aquí: https://github.com/lungj/ethtools . El programa en cuestión es mine_sim.py
. Pensé que sería un poco extraño publicar un programa tan largo en StackExchange.
La madriguera del conejo puede volverse bastante profunda, dependiendo de qué tan profundo quieras modelar las cosas. En el mundo real de la minería, los mineros calculan hashes de valores particulares. Cuando los hash cumplen algunas condiciones, los datos que se codifican se pueden propagar a la cadena de bloques. Cuando la cadena de bloques está en equilibrio para la dificultad y la tasa de hash y el tiempo de bloque es b , para cada paso de tiempo ts en su simulación, existe una ( tasa de hash / tasa de hash total ) * b / ts ) posibilidad de que un minero en particular extraiga un bloque.
Aquí hay una simulación que ignora los tiempos de propagación de bloques. Por supuesto, puedes agregar eso. Cómo lo hace depende de las propiedades de la red que desea simular. Puede crear un cálculo de tío crudo cambiando TIMESTEP al tiempo de propagación de su bloque y, cada vez que más de un minero encuentra un bloque en el mismo paso de tiempo de simulación, puede contarlo como un tío. Si desea un modelo más complejo, para cada nodo, puede almacenar el estado de la cadena desde la perspectiva de ese nodo (suponiendo que algunos nodos también son mineros). Puede modelar los retrasos de propagación entre nodos individuales para simular las propagaciones de bloques de forma más realista. A continuación, querrá elegir un número realista de fan-in/fan-out para cada nodo (o simular conexiones que se forman y se interrumpen) y tal vez modelar la distribución geográfica de varios nodos. Y por supuesto,
#!/usr/bin/env python3
import random
class Miner(object):
def __init__(self, name, hashrate):
'''Initialize a new miner named name with hashrate measured in hashes per second.'''
self.name = name
self.hashrate = hashrate
MINERS = [
Miner('Alice', 30e6),
Miner('Bob', 20e6),
]
TIMESTEP = 0.01 # Timestep of simulation
BLOCKTIME = 15 # Average number of seconds per block
TOTAL_HASHPOWER = sum([miner.hashrate for miner in MINERS])
time = 0
while True:
for miner in MINERS:
if (random.random() * (TOTAL_HASHPOWER / miner.hashrate)) < (TIMESTEP / BLOCKTIME):
print("t=%0.3f: %s mined a block" % (time, miner.name))
time += TIMESTEP
MWH
pulmónj
MWH
pulmónj
BLOCKTIME = 15
.pulmónj
MWH
pulmónj
pulmónj