Как устроена платформа
Анкоринг¶
В приватном блокчейне транзакции обрабатываются определенным списком участников, каждый из которых заранее известен. Малое, по сравнению с публичной сетью, количество участников, блоков и транзакций в приватном блокчейне несёт угрозу подмены информации. Что, в свою очередь, создает риск перезаписи цепочки блоков - особенно в случае использования алгоритма консенсуса PoS, не имеющего защиты от таких ситуаций.
Для повышения доверия участников приватного блокчейна к размещенным в нём данным разработан механизм анкоринга. Анкоринг позволяет проверить данные на неизменность. Гарантия неизменности достигается публикацией данных из приватного блокчейна в более крупную сеть, где подмена данных менее вероятна из-за большего количества участников и блоков. Из приватной сети публикуются подписи блоков и высота блокчейна. Взаимная связность двух и более сетей повышает их устойчивость, поскольку для подлога или изменения данных в результате long-range атаки необходимо атаковать все связанные сети.
Как работает анкоринг в блокчейне Waves Enterprise¶
Выполняется настройка анкоринга в конфигурационном файле ноды приватного блокчейна (установите параметры в соответствии с рекомендациями раздела, чтобы избежать сложностей при работе анкоринга);
Через каждый заданный диапазон блоков
height-range
нода фиксирует информацию о блоке на высотеcurrent-height
-threshold
в виде транзакции в Targetnet. В качестве такой транзакции используется транзакция с данными 12 со списком пар полей «ключ - значение», описание которых приведено в разделе ниже;После отправки транзакции нода получает её высоту в Targetnet;
Нода выполняет проверку высоты блокчейна в Targetnet каждые 30 секунд, пока высота не достигнет значения высота созданной транзакции +
height-above
.При достижении этой высоты блокчейна Targetnet и подтверждения наличия первой транзакции в блокчейне, Targetnet нода создаёт вторую транзакцию с данными для анкоринга уже в приватном блокчейне.
Структура транзакции для анкоринга¶
Транзакция для отправки в Targetnet содержит следующие поля:
height
– высота сохраняемого блока из приватного блокчейна;signature
– подпись сохраняемого блока из приватного блокчейна.
Транзакция, создаваемая в приватном блокчейне, содержит следующие поля:
height
– высота сохраняемого блока из приватного блокчейна;signature
– подпись сохраняемого блока из приватного блокчейна;targetnet-tx-id
– идентификатор транзакции для анкоринга в Targetnet;targetnet-tx-timestamp
– дата и время создания транзакции для анкоринга в Targetnet.
Ошибки, возникающие в процессе анкоринга¶
Ошибки в анкоринге могут возникать на любом этапе. В случае возникновения ошибок в приватном блокчейне, публикуется транзакция 12 с кодом и описанием ошибки. Транзакция об ошибке содержит следующие данные:
height
– высота сохраняемого блока из приватного блокчейна;signature
– подпись сохраняемого блока из приватного блокчейна;error-code
– код ошибки;error-message
– описание ошибки.
Код |
Сообщение об ошибке |
Возможная причина |
---|---|---|
0 |
|
При отправке транзакции в Targetnet произошла неизвестная ошибка |
1 |
|
Создание транзакции для отправки в Targetnet завершилась ошибкой |
2 |
|
Публикация транзакции в Targetnet завершилась ошибкой (это может быть ошибка JSON-запроса) |
3 |
|
В результате публикации транзакции в Targetnet вернулся отличный от 200 код |
4 |
|
В результате отправки транзакции в Targetnet вернулся нераспознаваемый JSON-запрос |
5 |
|
В результате отправки транзакции в Targetnet вернулся отличный от первой транзакции идентификатор |
6 |
|
Targetnet не ответил на запрос об информации о транзакции |
7 |
|
Не удалось получить текущую высоту в Targetnet |
8 |
|
Анкоринг транзакция пропала из Targetnet после увеличения высоты на значение |
9 |
|
Не удалось опубликовать анкоринг транзакцию в приватном блокчейне |
10 |
|
Пока ожидалось подтверждение транзакции в Targetnet, произошел откат приватного блокчейна, идентификатор анкоринг транзакции был изменен |