Что произойдет, если время блокировки изменится на 5 секунд?

Относится к этому и этому .

Алгоритм регулировки сложности таков:

block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number // 100000) - 2))

где // — оператор целочисленного деления, например. 6 // 2 = 3, 7 // 2 = 3, 8 // 2 = 4.

Насколько я понимаю, порог в 10 секунд был выбран, чтобы удерживать время блока в диапазоне 10-20 секунд. Также исходный код доступен здесь . Итак, могу ли я изменить алгоритм (возможно, перейти //10на //5) и создать сеть блокчейнов, которая будет 5 secondsподтверждать блок? Это достижимо? Я надеялся получить ответ на этот вопрос через этот пост в блоге, но не смог выяснить точные недостатки этого.

PS: По сути, у меня есть приложение, работающее на частной цепочке блоков, которое требует меньше времени на подтверждение блока. Я начал блокчейн с низкой сложностью ( 0x400), но со временем она увеличивалась, чтобы поддерживать среднее время блока в 15 секунд. Итак, я ищу способ предотвратить увеличение этой трудности. Можно ли этого добиться без ущерба для безопасности?

Я использую гет-1.4.9

Ответы (1)

Одна вещь, которую следует учитывать, — это коэффициент сиротства , который упоминается в комментариях к ветке , на которую вы ссылаетесь.

Чем ниже вы устанавливаете сложность, тем короче время блока, к чему вы стремитесь.

Однако чем ниже сложность, тем выше вероятность того, что несколько майнеров решат блок одновременно, и произойдет разветвление цепи. В конечном итоге это приводит к тому, что блоки в одном из форков становятся осиротевшими, и именно поэтому Ethereum (с его 15-секундным временем блокировки) уже использует протокол GHOST (или его ограниченную версию). Вам придется поэкспериментировать, чтобы увидеть, не вызовут ли перестановки цепочек какие-либо проблемы в вашей сети.

Обратите внимание, что алгоритм, на который вы ссылаетесь, включает изменения, внесенные для бомбы сложности , что означает, что сложность будет увеличиваться с номером блока .

... int(2**((block.number // 100000) - 2)) <---- this part

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

Знаете ли вы какую-либо платформу, на которой я могу запускать симуляции и экспериментировать с сокращением времени блока?