Я прочитал, что трудность BTC поколения меняется каждые две недели, основанные на статистических данных, собранных в течение двух недель. Это, кажется, ввести чрезмерное количество лаг в систему. Мы все читали о парне, который предположительно имеет 1000 ядер, работающих на клиента - если он уходит, внезапно BTC поколение занимает гораздо больше времени. Кроме того, если трудности низка, и мы вдруг массовый приток энергии, а затем монеты генерируются слишком быстро.
Что было оправдание за две недели блоки времени между корректировками сложности. Почему бы не сделать что-то вроде следующего? (В этом примере величины изменения являются фиктивными, а время генерации целевого блока принимается равным десяти минут.)
после каждого блока:
Трудность + =. 001 * 600-block.genTimeInSeconds
Таким образом, трудность будет регулировать динамически вверх или вниз каждый блок, величина корректировок, находящихся в пропорции к притоку или оттоку вычислительной мощности в течение этого последнего блока. Да, вы получите ситуации, когда кто-то случайно решить блок через десять секунд и, таким образом, следующая трудность будет сползать чрезвычайно высокой, но высокий (или низкий, в обратной ситуации) трудность будет длиться только один блок, и эти случайные вариации шума даже в долгосрочной перспективе.