Почему в реестре хешируется время закрытия родительского реестра?
В этом нет необходимости, потому что реестр хешируется с учетом своего собственного времени закрытия и дайджеста своего родительского (который, таким образом, включает время закрытия родителя).
1 ответ
Есть транзакции, которым необходимо знать текущее время для правильного выполнения. Например, транзакция, которая обменивает один актив на другой, должна гарантировать, что она не выполняет предложения, срок действия которых истек.
На самом деле есть только два места, где вы могли бы попасть в этот раз. Вы можете получить его из времени закрытия предыдущего реестра или из времени закрытия этого реестра. Я выбрал вариант использовать время закрытия предыдущей бухгалтерской книги.
Причина этого выбора в том, что вы должны знать все, что может повлиять на результат транзакции, прежде чем вы сможете начать ее выполнение. Необходимость знать время закрытия реестра, прежде чем вы сможете выполнить любую из транзакций в нем, приведет к значительным дополнительным вычислительным затратам.
Программное обеспечение запускает каждую транзакцию, когда она получена, чтобы убедиться, что транзакция может быть выполнена, и потребовать комиссию. Это необходимо, чтобы предотвратить ретрансляцию транзакции, которая не требует комиссии, и разрешить бесплатную ретрансляцию, которая может привести к атакам отказа в обслуживании. Чем более схоже выполнение транзакции при реальном исполнении, тем меньше требуется дискового ввода-вывода и дополнительных вычислений. Таким образом, при реальном запуске транзакции необходимо вводить те же входные данные, что и при ее тестировании. Это означает использование времени закрытия родительского реестра, а не фактического времени закрытия реестра, которое станет известно намного позже.
Итак, учитывая, что нам нужно время закрытия родителя, почему мы помещаем его в заголовок книги? На самом деле нет особо веской причины. На практике вам необходимо иметь в памяти заголовок предыдущего реестра, чтобы в любом случае создать следующий реестр. Однако, если не указывать время закрытия предыдущей книги в заголовке, это означало бы, что если бы у вас была только одна книга, вы не знали бы, каково эффективное время транзакций, если не посмотрите предыдущую книгу. Из-за этого будет сложнее понять, какие правила применялись во время исполнения ордеров или других операций, требующих времени.
Таким образом, решение об использовании времени закрытия предыдущего реестра было принято по разумным инженерным причинам, в первую очередь ориентированным на производительность на критическом пути, где транзакции выполняются "по-настоящему". Но решение поместить время закрытия в заголовок бухгалтерской книги на самом деле является простым удобством для человека, чтобы было легче узнать, какое эффективное время стены было применено для транзакций в бухгалтерской книге, без необходимости смотреть за пределами реестра, чтобы узнать.