Хорошо, к сожалению, я думаю, что я overthinking это слишком трудно - грустно, потому что я довольно наслаждался пытаюсь собрать вместе.
Таким образом, вероятность нахождения успешного хэша равно целевое значение хеша-за общее значение хэша-функции. Целевого значения хэш рассчитывается непосредственно с трудом, я считаю.
Так сказать, р = вероятность нахождения хэш, Tg = целевое значение хеш-функции (вычисленный с трудом как-то - это было бы в коде где-то), и TOT = общая хэши возможных (2 ^ 256 для 256 битным кешем, и т.д. ... )
Так:
р = ТГ / TOT
Но также, в связи с (сильный или слабый) Закон больших чисел (
http://en.wikipedia.org/wiki/Law_of_large_numbers), Можно сказать, что относительная частота появлений событий приближается к вероятности появлений событий, когда у вас есть много событий (хэш).
Я бы сказал, что мы имеем дело с довольно большими числами (хотя на самом деле не очень большой по сравнению с общим адресным пространством, в противном случае реверсирования хэш было бы слишком легко), так что мы, вероятно, может безопасно работать в этом предположении.
Таким образом, мы можем сказать, е = частота успешных хэш, все = кол-во всех хэш в течение периода времени, и хороший = кол успешных хэш в тот же период времени
// Здравый смысл
е = хорошо / все
// Применить закон больших чисел
р = е
тг / карапуз = хорошо / все
// Только неизвестно, все
все = хорошо * карапуз / Т.Г.
Таким образом, чтобы вычислить среднее hashrate за определенный период, просто:
1) принять общее число блоков, полученных за этот период
2) Muliply его на общее число хэш-возможностей (2 ^ 256 для 256 битовой хэш)
3) Разделите его на количество хэшей, которые будут рассматриваться "действительный" для блока (целевое значение хэша)
Число действительных хэшей можно вычислить из-за трудностей, что-то, что закодировано в протокол.
Хорошее место, чтобы начать, чтобы выяснить, как трудность превращается в хэш-значение целевой будет:
https://github.com/bitcoin/bitcoin/blob/ca1913e8f64fc245157b008d6b37160306aa1d83/src/miner.cppТолько поиск "цель",