Как устроена платформа

Анкоринг

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

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

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

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

  2. Через каждый заданный диапазон блоков height-range нода фиксирует информацию о блоке на высоте current-height - threshold в виде транзакции в Targetnet. В качестве такой транзакции используется транзакция с данными 12 со списком пар полей «ключ - значение», описание которых приведено в разделе ниже;

  3. После отправки транзакции нода получает её высоту в Targetnet;

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 завершилась ошибкой (это может |br| быть ошибка JSON-запроса)

3

Invalid http status of response from Targetnet |br| transaction broadcast

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

4

Fail to parse http body of response from Targetnet |br| transaction broadcast

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

5

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

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

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 |br| height rise enough

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

9

Fail to create sidechain anchoring transaction

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

10

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

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