Signet служит для совместного тестирования программ Bitcoin. У него своя цепочка и тестовые монеты. Помимо обычных правил и Proof of Work, новые блоки должны выполнить особое условие сети, основанное на подписи в Signet по умолчанию. Это упрощает испытания, но означает другую модель доверия, чем в основной сети.
Анна хочет увидеть, что новый кошелёк покажет после отправки платежа и после его подтверждения в блоке. Кошелёк — приложение или устройство для получения и отправки биткоинов. Блок объединяет транзакции в пакет, добавляемый в общую историю. В Signet она может использовать тестовые монеты, например из faucet — сервиса, который раздаёт их для опытов. Это не BTC mainnet, основной сети, и протокол не обменивает их на настоящие биткоины. Внимания требуют и адреса: некоторые тестовые форматы у Signet общие с Testnet. По одному виду адреса нельзя определить нужную сеть. [1] [2] [8]
BIP 325 (технический документ с описанием Signet) написали Karl-Johan Alm и Anthony Towns; поддержка Signet появилась в Bitcoin Core v0.21.0. Программа предлагает публичную сеть по умолчанию, но команда может задать собственное условие создания блоков и своих участников. Поэтому слов «мы используем Signet» недостаточно: обе стороны должны использовать одну сеть. Идентификатор сетевых сообщений выводится из этого условия, а не из названия проекта. [1] [3] [4]
Full Node, узел, который самостоятельно проверяет правила, по-прежнему проверяет транзакции и Proof of Work — результат вычислительной работы, необходимой для создания блока. Дополнительно проверяется особое условие Signet. В сети по умолчанию одного майнинга недостаточно: нужна соответствующая подпись. Заголовок, краткое описание блока, не заменяет эту проверку, поскольку нужные данные находятся внутри блока. [1] [9]
Цифровая подпись позволяет проверить, что сообщение одобрил обладатель соответствующего приватного ключа — секретного числового значения, не раскрывая сам ключ. Тот, кто может выполнить условие подписи, влияет на появление блоков. Он может задержать подписание или ограничить включаемые транзакции. Но это не даёт ему приватных ключей Анны и права заставить её узел принять любую недействительную транзакцию. Остальные правила продолжают действовать. Такое управляемое участие удобно для тестов и одновременно объясняет, почему Signet не копирует модель безопасности mainnet. [1] [9]
При разработке недостаточно одного успешного платежа. Команда должна знать, как приложение поведёт себя при остановке блоков или реорганизации, когда узел заменяет недавние блоки другой действительной ветвью. Согласованное испытание позволяет создать такую ситуацию и проверить, правильно ли кошелёк обновляет подтверждения. Signet не обещает бесперебойной работы. Он помогает более предсказуемо испытывать и неудачные ситуации. [1] [5] [6]
В Testnet создание блоков открыто, а его колебания могут осложнять совместный опыт. Regtest позволяет легко создавать блоки по запросу, что удобно для собственных автоматических тестов. Он может связывать несколько компьютеров; это необязательно изолированная программа. Signet решает другую задачу: длительное сотрудничество независимых участников с согласованными условиями создания блоков. Ни один режим не заменяет все остальные проверки. [1] [2]
Challenge — это скрипт, небольшая программа, определяющая, что блок должен доказать. Она может требовать одну подпись или Multisig, то есть согласованное число подписей нескольких ключей. Собственный Signet может использовать и OP_TRUE — условие, выполняемое без подписи. Тогда достаточно пустого решения. Поэтому точнее говорить о дополнительном условии скрипта, а не утверждать, что любому Signet всегда нужен подписывающий. [1] [9]
BIP 325 помещает непустое решение в особые данные Coinbase Transaction, первой транзакции блока. Здесь название не связано с одноимённой биржей. Данные расширяют криптографическое обязательство (commitment) по BIP 141, связывающее блок с его witness-данными, в том числе подписями, и имеют метку 0xecc7daa2. Это не ещё один обычный платёж подписывающему. Тривиально выполняемое условие позволяет опустить дополнительное решение, но не отменяет автоматически остальные правила блока. [1] [9] [10]
Если бы подписываемое сообщение содержало ту же подпись, возникла бы циклическая зависимость. Поэтому проверка использует изменённый отпечаток транзакций с очищенным решением и две виртуальные транзакции. Они служат для вычисления, а не отправляются как дополнительные платежи. Подпись также не охватывает nonce заголовка — число, меняемое при поиске Proof of Work. Его изменение не требует новой подписи, но это не означает свободы менять остальную часть блока. [1] [9]
Анна сначала убеждается, что кошелёк, узел и обозреватель блоков используют одну тестовую сеть. Обозреватель блоков — приложение для поиска транзакций и блоков определённой сети. В Bitcoin Core помогут getblockchaininfo и поле signet_challenge, показывающее заданное условие. Затем она следит за настоящим подтверждением, а не только надписью об отправке, и пользуется отдельным тестовым кошельком. Успех показывает поведение приложения в этих условиях; он не гарантирует безопасности средств или устойчивости к атакующему в mainnet. [7] [8]
Для полной картины прочитайте эту статью вместе с Nakamoto Consensus, Block Propagation, Initial Block Download, Block Weight, Bitcoin, Bitcoin Core. На эту статью также ссылаются Testnet, Miniscript, Dead Man’s Switch.