Анкоринг

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Код

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

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

0

Unknown error

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

1

Fail to create data transaction for Mainnet

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

2

Fail send transaction to Mainnet

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

3

Invalid http status of response from mainnet transaction broadcast

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

4

Fail to parse http body of response from mainnet transaction broadcast

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

5

Mainnet return transaction with id='$mainnetTxId' but it differ from transaction that we sent id='$sentTxId

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

6

Mainnet didn't respond on transaction info request

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

7

Fail to get current height in Mainnet

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

8

Anchoring transaction in mainnet disappeared after height rise enough

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

9

Fail to create sidechain anchoring transaction

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

10

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

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