Анкоринг

В приватном блокчейне транзакции обрабатываются определенным списком участников, каждый из которых заранее известен. Малое, по сравнению с публичной сетью, количество участников блоков и транзакций в приватном блокчейне несёт угрозу подмены информации. Перезапись цепочки блоков и транзакций, особенно в случае использования PoS консенсуса, становится реальной.

Для повышения доверия участников приватного блокчейна к размещенным в нём данным разработан механизм анкоринга. Анкоринг позволяет проверить данные на неизменность. Гарантия неизменности достигается публикацией данных из приватного блокчейна в более крупную сеть, где подмена данных маловероятна из-за большего количества участников и блоков. Публикуемые данные — подпись и высота блоков приватной сети. Взаимная связность двух и более сетей повышает их стойкость, т.к. для подлога или изменнения данных в результате long-range атаки необходимо атаковать все связанные сети.

Как работает анкоринг в блокчейне Waves Enterprise

Схема анкоринга в Targetnet

Анкоринг работает следующим образом:

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

  2. Через каждый заданный диапазон блоков height-range нода фиксирует информацию о блоке на высоте current-height - threshold в виде транзакции в Targetnet. В качестве такой транзакции используется Data Transaction со списком пар полей key-value, описание которых приведено ниже. После отправки транзакции нода получает её высоту в Targetnet.

  3. Нода выполняет проверку высоты блокчейна в Targetnet каждые 30 секунд, пока высота не достигнет значения высота созданной транзакции + height-above.

  4. При достижении высоты блокчейна Targetnet, определённой в пункте 3, и положительной проверке наличия первой транзакции в блокчейне Targetnet нода создаёт вторую транзакцию с данными для анкоринга уже в приватном блокчейне.

Структура транзакции для анкоринга

Транзакция для отправки в Targetnet содержит следующие поля:

  • height - высота сохраняемого блока из приватного блокчейна.

  • signature - подпись сохраняемого блока из приватного блокчейна.

Транзакция, создаваемая в приватном блокчейне, содержит следующие поля:

  • height - высота сохраняемого блока из приватного блокчейна.

  • signature - подпись сохраняемого блока из приватного блокчейна.

  • targetnet-tx-id - идентификатор транзакции для анкоринга в Targetnet.

  • targetnet-tx-timestamp - дата и время создания транзакции для анкоринга в Targetnet.

Ошибки, возникающие в процессе анкоринга

Ошибки в анкоринге могут возникать на любом этапе. В случае возникновения ошибок в приватном блокчейне всегда публикуется Data Transaction с кодом и описанием ошибки. Транзакция об ошибке содержит следующие данные:

  • height - высота сохраняемого блока из приватного блокчейна.

  • signature - подпись сохраняемого блока из приватного блокчейна.

  • error-code - код ошибки.

  • error-message - описание ошибки.

Типы ошибок при анкоринге

Код

Сообщение об ошибке

Возможная причина

0

Unknown error

При отправке транзакции в Targetnet произошла неизвестная ошибка

1

Fail to create data transaction for Targetnet

Создание транзакции для отправки в Targetnet завершилась ошибкой

2

Fail send transaction to Targetnet

Публикация транзакции в Targetnet завершилась ошибкой (это может
быть ошибка JSON-запроса)

3

Invalid http status of response from Targetnet
transaction broadcast

В результате публикации транзакции в Targetnet вернулся отличный
от 200 код

4

Fail to parse http body of response from Targetnet
transaction broadcast

В результате отправки транзакции в Targetnet вернулся
нераспознаваемый JSON-запрос

5

Targetnet return transaction with id='$TargetnetTxId'
but it differ from transaction that we sent
id='$sentTxId

В результате отправки транзакции в Targetnet вернулся отличный от первой
транзакции идентификатор

6

Targetnet didn't respond on transaction info request

Targetnet не ответил на запрос об информации о транзакции

7

Fail to get current height in Targetnet

Не удалось получить текущую высоту в Targetnet

8

Anchoring transaction in Targetnet disappeared after
height rise enough

Анкоринг транзакция пропала из Targetnet после увеличения высоты
на значение height-above

9

Fail to create sidechain anchoring transaction

Не удалось опубликовать анкоринг транзакцию в приватном блокчейне

10

Anchored transaction in sidechain was changed during
Targetnet height arise await, looks like
a rollback has happened

Ожидалось подтверждение транзакции в Targetnet произошел откат
приватного блокчейна, идентификатор анкоринг транзакции был изменен