Чеки и удаляемая история
Parano1d не требует от каждой ноды хранить тела всех исторических блоков. Это устраняет постоянно растущую нагрузку консенсуса, но пользователю всё равно нужен долговечный способ доказать включение платежа. Чек сохраняет ровно это доказательство.
Чек содержит:
- канонический логический
PagedSpendбез капсулы авторизации; - логическую позицию и число транзакций в блоке;
- Merkle-путь фиксированной глубины в дереве транзакций блока;
- заявленный корень транзакций и высоту блока;
- публичное описание платежа, необходимое для отображения и проверки.
Дерево транзакций содержит 256 листьев, поэтому путь включения всегда имеет глубину восемь.
Два уровня проверки
Проверка чека отвечает на два разных вопроса.
Автономная проверка включения подтверждает, что данные транзакции, её позиция и Merkle-путь восстанавливают заявленный корень транзакций. Нода для этого не нужна; проверка продолжает работать после удаления тела блока.
Каноническая проверка запрашивает у работающей ноды постоянный заголовок на указанной высоте и сравнивает его корень транзакций. Так устанавливается, что чек относится к текущей канонической цепочке этой ноды.
Корректное доказательство включения для неканонического блока внутренне согласованно, но не доказывает канонический платёж. Поэтому кошелёк дожидается подтверждения и только затем сохраняет окончательный чек.
Локальное хранение
Кошелёк создаёт исходящий чек после подтверждения платежа, пока данные блока ещё доступны. Чеки хранятся локально рядом с данными кошелька. Они не выводятся из 256-битного мастер-секрета и не восстанавливаются при импорте этого секрета на другом компьютере.
Если доказательства платежей нужны надолго, сохраняйте резервную копию чеков отдельно. Экспортированный текст чека самодостаточен и может быть проверен другой нодой Parano1d.
Для каких транзакций создаётся чек
Чек создаётся для платежа получателю, отличному от владельца входов. Отличие определяется по владельцу входов конкретной транзакции, а не по всем адресам, которые теоретически способен вывести кошелёк.
Следовательно:
- отправка на адрес другого человека создаёт чек;
- отправка с активного адреса на другой, неактивный адрес того же кошелька также создаёт чек;
- консолидация выходов обратно тому же владельцу чек не создаёт.
Так консолидация не попадает в историю платежей пользователя, а ноде не приходится искать или распознавать другие возможные адреса кошелька.
Срок извлечения
Ноды хранят последние 18 полных блоков. Подтверждённый исходящий платёж должен быть перенесён в локальное хранилище чеков, пока тело его блока ещё доступно. Сканер кошелька делает это во время обычной работы и после перезапуска.
После сохранения чек больше не зависит от окна хранения тел блоков.
Использование чеков в интерфейсе описано в разделе «Чеки», а устройство дерева транзакций — в разделе «Блоки и заголовки».