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

Транзакции блокчейн-платформы

Транзакция - это отдельная операция в блокчейне от имени участника, изменяющая стейт сети. Отправляя ту или иную транзакцию, участник отправляет в сеть запрос с набором данных, необходимых для соответствующего изменения стейта.

Подписание и отправка транзакций

Перед отправкой транзакции участник генерирует для нее цифровую подпись. Для этого он использует закрытый ключ своего аккаунта. Подписание транзакций может осуществляться тремя способами:

Подпись транзакции записывается в поле proofs при отправке транзакции в блокчейн. Как правило, в это поле записывается одна подпись участника, отправившего транзакцию. Однако поле поддерживает до 8 подписей: в случае подписания транзакции смарт-аккаунтом, при заполнении атомарной транзакции или при публикации смарт-контрнакта.

После подписания транзакция отправляется в блокчейн - это можно сделать как тремя способами, приведенными выше, так и при помощи gRPC-интерфейса (см. gRPC: отправка транзакций в блокчейн).

Обработка транзакций в блокчейне

Получив транзакцию, нода проверяет ее на валидность:

  1. Соответствие временной метки (timestamp): временная метка транзакции должна отклоняться от временной метки текущего блока на более, чем на 2 часа назад или 1,5 часа вперед.

  2. Тип и версия транзакции: активирована ли в блокчейне поддержка транзакций указанного типа и версии (см. Активация функциональных возможностей).

  3. Соответствие полей транзакции заданному типу данных;

  4. Проверка баланса отправителя: достаточно ли средств для оплаты комиссии;

  5. Проверка подписи транзакции.

Если транзакция не проходит валидацию, нода отклоняет ее. В случае успешного прохождения проверок транзакция добавляется в пул неподтвержденных транзакций (UTX-пул), где ожидает следующего раунда майнинга для передачи в блокчейн. Вместе с передачей транзакции в UTX-пул нода рассылает ее другим нодам в сети.

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

После добавления в блок транзакция меняет стейт блокчейна. После этого транзакция считается выполненной.

Подробная информация о транзакциях блокчейн-платформы Waves Enterprise: