Исходные данные

BIP 340 описывает подписи Шнорра для кривой secp256k1 в Bitcoin. Открытый ключ в этом формате содержит только координату X. Спецификация определяет, какую из возможных точек брать при восстановлении по X. Выбирается точка с чётной координатой Y. Это делает 32-байтовое представление однозначным внутри выбранной схемы. Bitcoin BIP 340 ↗

Что меняется для интеграции

У обычного сжатого представления открытого ключа secp256k1 есть 33 байта. Начальный байт различает чётность Y, а следующие 32 содержат X. Ключ BIP 340 использует другой формат и другую договорённость о выборе точки. Например, код, который копирует 33-байтовую строку в поле проверки Schnorr, должен явно обработать преобразование и передать 32-байтовый ключ. В общем случае преобразование формата нельзя подменять перестановкой строкового префикса между разными протоколами.

Что проверяет подпись

Подпись BIP 340 имеет 64 байта. Её проверяют относительно конкретных сообщения и ключа. Когда подпись относится к расходованию Taproot-выхода, сообщение формируется по правилам расходования, а не просто из адреса получателя. Поэтому совместимость библиотеки на уровне BIP 340 и совместимость кошелька на уровне транзакций требуют разных тестов.

Для проверки миграции полезны официальные тестовые векторы, включая некорректные координаты и подписи. Они позволяют воспроизвести ошибку без отправки транзакции. Если библиотека проходит векторы, а кошелёк всё равно не может подписать расходование, следующим предметом проверки становится подготовка ключа и сообщения для конкретного пути Taproot.