Анкоринг¶
В приватном блокчейне транзакции обрабатываются определенным списком участников, каждый из которых заранее известен. Малое, по сравнению с публичной сетью, количество участников блоков и транзакций в приватном блокчейне несёт угрозу подмены информации. Перезапись цепочки блоков и транзакций, особенно в случае использования PoS консенсуса, становится реальной.
Для повышения доверия участников приватного блокчейна к размещенным в нём данным разработан механизм анкоринга. Анкоринг позволяет проверить данные на неизменность. Гарантия неизменности достигается публикацией данных из приватного блокчейна в более крупную сеть, где подмена данных маловероятна из-за большего количества участников и блоков. Публикуемые данные — подпись и высота блоков приватной сети. Взаимная связность двух и более сетей повышает их стойкость, т.к. для подлога или изменнения данных в результате long-range атаки необходимо атаковать все связанные сети.
Как работает анкоринг в блокчейне Waves Enterprise¶
Анкоринг работает следующим образом:
Выполняются настройки анкоринга в конфигурационном файле ноды приватного блокчейна. При указании параметров, ответственных за работу анкоринга, устанавливайте рекомендованные значения, чтобы избежать сложностей в работе приватного блокчейна.
Через каждый заданный диапазон блоков
height-range
нода фиксирует информацию о блоке на высотеcurrent-height - threshold
в виде транзакции в Targetnet. В качестве такой транзакции используется Data Transaction со списком пар полейkey-value
, описание которых приведено ниже. После отправки транзакции нода получает её высоту в Targetnet.Нода выполняет проверку высоты блокчейна в Targetnet каждые 30 секунд, пока высота не достигнет значения высота созданной транзакции +
height-above
.При достижении высоты блокчейна 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 |
|
При отправке транзакции в Targetnet произошла неизвестная ошибка |
1 |
|
Создание транзакции для отправки в Targetnet завершилась ошибкой |
2 |
|
Публикация транзакции в Targetnet завершилась ошибкой (это может |
3 |
|
В результате публикации транзакции в Targetnet вернулся отличный |
4 |
|
В результате отправки транзакции в Targetnet вернулся |
5 |
|
В результате отправки транзакции в Targetnet вернулся отличный от первой |
6 |
|
Targetnet не ответил на запрос об информации о транзакции |
7 |
|
Не удалось получить текущую высоту в Targetnet |
8 |
|
Анкоринг транзакция пропала из Targetnet после увеличения высоты |
9 |
|
Не удалось опубликовать анкоринг транзакцию в приватном блокчейне |
10 |
|
Ожидалось подтверждение транзакции в Targetnet произошел откат |