Можем ли мы в частной блокчейн-сети удалить первые N блоков и переназначить N+1-й блок в качестве генезисного блока?

Я знаю о потере данных, вызванной удалением первых N блоков. Но мне любопытно узнать, возможна ли такая задача или нет. Если да, то как это практически реализовать?

При согласованном изменении системы все возможно, если все участники согласны - вы просто все переключаетесь на другое программное обеспечение. Так что ответ, очевидно, да, но, возможно, это не то, что вы хотите знать. Не могли бы вы пояснить, почему вы хотите это сделать или чего вы надеетесь достичь, делая это?

Ответы (1)

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

Генезисный блок жестко запрограммирован в программном обеспечении. Чтобы переназначить более поздний блок новым блоком генезиса, вам нужно будет жестко закодировать этот блок в более новой версии программного обеспечения. Это будет признано действительным только узлами, на которых установлена ​​более новая версия программного обеспечения. Предполагая, что достижение консенсуса не является проблемой, это возможно.

Еще одна вещь, на которую следует обратить внимание, — это высота блока и все расчеты, основанные на ней. Клиент легко модифицируется так, чтобы он начинал подсчет с N+1, но это также может потребоваться учитывать при выполнении расчетов. Это повлияет на такие вещи, как цели сложности и деление пополам. Если вы измените весь соответствующий код, чтобы принять это во внимание, вы сможете поддерживать правильную работу.

Можете ли вы указать еще некоторые вещи о том, как сделать реализацию?
Не совсем. Это всего лишь обзор того, что нужно сделать, и я, вероятно, пропустил несколько вещей. Лично мне кажется, что это странный способ решения проблемы. Я предполагаю, что любая проблема, которая у вас есть, может быть лучше решена другим способом.
Вам также необходимо учитывать, существует ли связанная структура данных, такая как набор UTXO, которая необходима для проверки новых блоков. Если есть, эта структура данных должна будет каким-то образом добраться до новых узлов, желательно, загрузив ее с существующих узлов и сверив данные с хэшем, распространяемым с клиентом обновления.