Bitcoin: проверка получателя, сдачи и комиссии перед подписью
PSBT позволяет передавать подготовленное действие, но сам формат не защищает от неправильного получателя. В уроке разберём независимое решение подписанта на возврате 10 000 сатоши. Цель — определить, какие сведения сравниваются с заявкой и какие ошибки не обнаруживает одна лишь техническая готовность пакета.
Предположим, наблюдатель библиотеки подготовил расход из выхода 30 000. Согласованный возврат читателю — 10 000, учебный бюджет комиссии — 700, собственная сдача — 19 300. Это ручной расчёт; реальный пакет и подписи не создаются.
Независимая заявка
Заявка должна поступить из канала, отдельного от необъяснимых метаданных подготовленного пакета. Она содержит идентификатор возврата, основание, сеть, сумму, новый адрес получателя и согласовавших участников. Если подготовитель сам формирует и заявку, и пакет без независимой сверки, сравнение двух его утверждений не устанавливает правильность назначения.
Для библиотеки полезна следующая модель:
{
"refundId": "refund-library-17-001",
"invoiceId": "library-17-001",
"network": "regtest",
"recipientAmountSats": "10000",
"recipientAddress": "CONFIRMED_RETURN_ADDRESS",
"maxFeeSats": "1000"
}
Адрес обозначен меткой, а предел 1 000 является условием нашего учебного согласования. Фактические 700 должны укладываться в него. Если политика требует иной предел, заявку пересматривают явно; подписант не выводит его из текущей привлекательности комиссии автоматически.
Получатель и сумма
Сначала проверяем сетевой контекст и точный скрипт получателя, сформированный из согласованного адреса. Допустимый адрес другой сети или другой человек с правильной контрольной суммой не подходит заявке. Проверяем полную сумму выхода, а не поле «отправлено» в поясняющем интерфейсе.
Если получатель должен получить 10 000, пакет с выходом 9 300 и комиссией 700 не соответствует соглашению, даже если общий расход отправителя равен 10 000. Нужно заранее определить, вычитается ли комиссия из возвращаемого значения. В этом примере она оплачивается библиотекой отдельно.
Сравнение адреса по нескольким начальным символам не обеспечивает точность. Подменённый адрес может иметь похожее начало. Интерфейс должен дать способ проверить полное назначение либо его надёжно связанное представление. Короткая визуальная метка полезна для удобства, но не заменяет строгую сверку.
Все выходы должны иметь объяснение
После главного получателя рассматриваем остальные выходы. Сдача на 19 300 должна распознаваться по собственной политике библиотеки. Незнакомый выход нельзя принимать только потому, что подготовитель назвал его сдачей.
Пусть атакующий заменил собственную сдачу на свой адрес, сохранив сумму 19 300. Арифметика остаётся правильной. Подпись может технически подходить входу. Но библиотека теряет деньги. Проверка принадлежности сдачи нужна независимо от сохранения суммы и правильного возврата читателю.
Другой вариант — дополнительный внешний выход на 5 000. Тогда изменяется распределение, но главный возврат может оставаться корректным. Процедура должна объяснить каждый внешний выход, а не останавливаться на первом совпадении. Любой необъяснённый получатель отправляет пакет на пересмотр.
Входы и комиссия
Подписант сверяет исходные выходы и их значения по достаточному контексту. Заявленная сумма входа из непроверенного поля не является основанием для расчёта. Для разных видов расходования инструменты используют предусмотренные предыдущие данные; совместимость и полноту нужно проверять по формату.
Абсолютная комиссия равна разности сумм. Её сравнивают с пределом заявки. Дополнительно рассматривают ставку относительно размера: она помогает обнаружить неожиданно дорогую структуру или ошибку единиц. При этом чрезмерная ставка и чрезмерная абсолютная сумма — разные признаки.
Смена набора входов может изменить приватность и полномочия. Если пакет внезапно объединяет выручку разных подразделений, формальная способность подписать не означает согласование организационного действия. В досье можно задать допустимую группу выходов, чтобы подготовитель не выбирал всё доступное без необходимости.
Режим подписи
Подписант должен понимать, какие данные защищает выбранный режим. Если режим допускает изменения определённых частей, решение зависит от протокола и назначения. В обычном библиотечном возврате мы не вводим специальные режимы ради удобства и ожидаем защиту согласованного содержания.
Необычный режим нельзя скрывать за надписью «безопасная подпись». Правильный инструмент показывает значимые ограничения и не принимает неизвестную комбинацию как обычный маршрут. Если он не способен отобразить нужное содержание, это ограничение выбранного подписанта, а не повод отказаться от проверки.
Особенно важно не путать подпись пакета с подписью произвольного сообщения. Возврат разрешает конкретное расходование. Текст «подтверждаю заказ» не заменяет транзакционный digest, а транзакционная подпись не служит универсальной авторизацией администратора сайта.
После согласования
Результат независимой сверки сохраняется с идентификатором пакета или согласованным отпечатком содержания, версией политики и решением. Если подготовленный объект меняется, прежнее согласование не переносится автоматически. Повторная подпись относится к новой версии операции.
После финализации сверяется соответствие извлечённой транзакции согласованному плану. Отправка и последующее наблюдение остаются отдельными этапами. Тайм-аут отправки означает неизвестный результат; нельзя сразу подготовить другой возврат из независимых входов и рисковать двойным действием.
Сохранение причины отказа
Подписант может обнаружить чужую сдачу, превышение комиссии или недостаточный контекст входа. Эти причины различаются и требуют разных исправлений. Подготовитель не должен отвечать на любой отказ общим повтором того же пакета. Возвращается конкретная диагностическая категория без раскрытия секретов, создаётся новая версия и повторяется независимая сверка.
Допустим, в заявке предел 1 000, а пакет требует 1 200. Подписант не уменьшает выход читателя до 9 800, чтобы формально уложиться в общий расход. Он сохраняет предметное требование возврата 10 000 и отправляет решение на пересмотр. Это помогает увидеть, что организационный договор управляет криптографическим действием, а не подстраивается под случайно подготовленные поля.
В журнале согласования полезно сохранить, кто проверил внешний адрес и из какого независимого канала он получен. Само поле имени читателя этого не доказывает.
Информационные поля PSBT описаны в BIP 174; возможности разбора — в decodepsbt. Теперь независимая подпись имеет предметное основание: каждый выход объяснён, комиссия ограничена, сеть известна, а право расходования применяется к конкретной заявке.