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

Анкоринг

В приватном блокчейне транзакции обрабатываются определенным списком участников, каждый из которых заранее известен. Малое, по сравнению с публичной сетью, количество участников, блоков и транзакций в приватном блокчейне несёт угрозу подмены информации. Что, в свою очередь, создает риск перезаписи цепочки блоков - особенно в случае использования алгоритма консенсуса 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

failed to create a data transaction for targetnet

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

2

failed to send the transaction to targetnet

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

3

invalid http status of response from targetnet transaction broadcast: $responseStatus

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

4

failed to parse http body of response from targetnet transaction broadcast

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

5

targetnet returned transaction with id='$targetnetTxId', but it differs from the transaction that was sent(id='$sentTxId')

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

6

targetnet didn't respond to the transaction info request

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

7

failed to get current height in targetnet

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

8

anchoring transaction in targetnet disappeared after the height rose enough

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

9

failed to create sidechain anchoring transaction

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

10

anchored block in sidechain was changed while waiting for targetnet height rise, looks like a rollback has happened

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

Смотрите также