Почему регистр хэшируется с временем закрытия родительского регистра? - PullRequest
0 голосов
/ 13 марта 2020

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

1 Ответ

1 голос
/ 13 марта 2020

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

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

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

Программное обеспечение запускает каждую транзакцию, когда она получена, чтобы убедиться, что транзакция сможет выполнить и требовать плату. Это необходимо для предотвращения ретрансляции транзакции, которая не требует комиссии, и предоставления возможности бесплатной ретрансляции, которая может привести к атакам типа «отказ в обслуживании». Чем больше аналогично выполняется транзакция, когда она выполняется по-настоящему, тем меньше дискового ввода-вывода и требуются дополнительные вычисления. Таким образом, вы хотите вводить в транзакцию те же входные данные, когда вы запускаете ее по-настоящему, так и при тестировании. Это означает использование времени закрытия родительской книги, а не фактического времени закрытия книги, которое неизвестно намного позже.

Итак, учитывая, что нам нужно время закрытия родительской книги, почему мы помещаем его в заголовок книги? Там действительно нет особенно веской причины. На практике вам нужно иметь в памяти заголовок предыдущей книги, чтобы в любом случае создать следующую книгу. Однако отсутствие указания времени закрытия предыдущей книги в заголовке означало бы, что если бы у вас была только одна книга, вы бы не знали, каково было эффективное время транзакций, если бы вы не посмотрели на предыдущую книгу. Это затруднило бы понимание того, какие правила применялись во время выполнения заказов или других операций, требующих времени.

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

...