У кого-нибудь есть формула для длительности динамических блоков?

Я хочу реализовать это, так что есть ли у кого-нибудь формула для динамической длительности блока вместо фиксированной цели в 10 минут?

По сути, вам придется менять сложность каждого блока или определять сложность с точки зрения прошедшего времени. AFAIR Kimoto Gravity Well делает и то, и другое: как Kimoto Gravity Well регулирует сложность?
@Murch Я уже использую Kimoto Gravity Хорошо, но это меняет сложность, но не продолжительность блока?
Извините, прошел год с тех пор, как я читал о KGW. Если я правильно помню, был какой-то альткоин, который принимал блоки с уменьшающейся сложностью по мере того, как проходило больше времени, я думал, что это сделал KGW, но, увы, я, кажется, неправильно помню. Кроме того, теперь, когда я думаю об этом, это может привести к некоторым уникальным векторам атаки, чтобы заменить лист цепи путем добычи блока с более высокой сложностью, перенесенного в более раннее время.
Как вы хотите изменить продолжительность блока? Это сложная часть. Дальше формула по сути та же, только меняется один из входных параметров (целевое время блока).
@StephenM347StephenM347 Мне нужен более быстрый интервал, когда это необходимо, и более медленный, если сеть используется недостаточно. Я думаю, хорошим индикатором может быть количество транзакций в последних X блоках? Но, может быть, есть лучшие меры? Но например: если последние 100 блоков заполнены более чем на 50% от разрешенного максимума, поднимите скорость. если они заполнены менее чем на 50%, уменьшите скорость. что ты думаешь? Что будет проблемой, так это то, что мне также нравится иметь плавающий максимальный размер блока, поэтому предыдущий пример будет очень сложным для реализации, поскольку максимальный размер блока также может расти со временем :)
@Muis, будь осторожен с такими решениями, кажется, ими легко манипулировать, и возникающие проблемы могут быть хуже, чем те, которые он пытается решить.
@StephenM347 СтивенМ347 Я знаю, это просто для личного эксперимента, никакие нубы не пострадают :)
Кажется, что вам действительно нужна формула, которая бы сохраняла статическую продолжительность блока и динамическую сложность блока.
@NickODell Нет? Предположим, у вас есть сеть, которая почти не получает транзакций в течение 10 лет, но она должна быть готова к 1 месяцу высокой посещаемости. Если вы уменьшите продолжительность блока для подготовки, то у вас будет 10 лет пустых блоков для хранения. Если бы продолжительность была динамической, вы могли бы иметь блоки, которые охватывают 1 месяц (только 120 за 10 лет), а затем при необходимости переключаться на 1 минуту.

Ответы (2)

Продолжительность блока контролируется только сложностью (хотя и косвенно) и хешрейтом сети, поэтому вам нужно увеличить сложность, когда в последних X блоках очень мало транзакций, и наоборот, уменьшить сложность, когда блоки переполнятся, но также уменьшить сложность при низком хэшрейте и увеличение сложности при высоком хешрейте.

В то же время вам нужно будет стимулировать майнинг, поэтому вы можете захотеть получить вознаграждение, зависящее от целевого времени, а не постоянное за блок, поскольку в противном случае майнеры могли бы спамить сеть, чтобы увеличить доход.

черновик

Допустим, мы стремимся перейти от просмотра последних 100 блоков к блокам, заполненным на 50%.

findNewBlockTime():
  newTimeTarget = (avBlockInterval100)*(0.5/averageFullness); //shorter interval with many transactions, longer with less

setReward():
  newReward = newTimeTarget*totalIntervalReward/rewardInterval; //rewardInterval could be four years like Bitcoin, or some other interval, with four years totalIntervalReward would be 11.5M coins for first interval

calculateDifficulty():
  newDifficulty = sumDiffLast100/last100BlocksTime*newTimeTarget;

Возможно, вас заинтересует то, что я написал на эту тему здесь . Вы можете внести изменения в протокол, где майнерам предоставляется выбор «веса» их блока, а затем их решение может быть использовано для установки глобальных параметров частоты.