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