В каком порядке транзакции появляются в блоке? Это зависит от майнера?

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

Но для хранения блоков необходимо сохранить порядок транзакций (в каком-то столбце позиций и т. д.), потому что повторное создание блока для последующего извлечения требует возврата транзакций в том же порядке. Это правильно?

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

Ответы (1)

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

Я не знаю, что вы имеете в виду под «регенерацией блока для последующего извлечения». Насколько я знаю, блоки не регенерируются. Они создаются майнером, передаются по сети и сохраняются на диске. Нет необходимости их регенерировать.

Транзакции могут зависеть от других транзакций. Например, когда вы тратите сдачу от предыдущего выхода, который еще не был подтвержден. В этом случае обе транзакции могут майниться в одни и те же блоки, но зависимая должна быть последней.
@PieterWuille Спасибо. Я обновил свой ответ соответственно.
Спасибо Крис за ваш ответ, это полезно. Чтобы прояснить регенерацию блока, я думаю о хранении блоков в реляционной базе данных. Вместо того, чтобы хранить дерево Меркла в базе данных (гигантский блок текста), я сохраняю порядок транзакций в столбце позиции в таблице транзакций. Затем я могу регенерировать дерево Меркла, и мне не нужно будет дублировать все хэши tx. Но я все еще спорю ... простое сохранение дерева Меркла в таблице блоков избавило бы от необходимости каждый раз регенерировать его и сохранять позицию tx.
Итак, вам понадобится столбец, в котором хранится порядок транзакций. Когда вы «регенерируете» блок из своей базы данных и передаете его пиру, пир захочет иметь возможность хэшировать его и убедиться, что хэш меньше требуемой цели, чего не будет, если вы переупорядочили блок. транзакции.
@BrianArmstrong: я бы не рекомендовал пытаться преобразовать блок в какой-либо другой формат и ожидать, что он сможет идеально восстановить блок. Если вы не используете протокол, специально разработанный для того, чтобы его можно было отличить, всегда существует риск того, что что-то необычное в блоке помешает вашей попытке восстановить его. Я бы посоветовал либо сохранить блок как есть, либо не пытаться его регенерировать.
Как указать эти зависимости между транзакциями? Как майнер узнает о зависимостях?