Перейти к содержимому
buybitcoinsmart

Глоссарий / Транзакции и комиссии

SIGHASH_ANYONECANPAY

Что такое SIGHASH_ANYONECANPAY?
SIGHASH_ANYONECANPAY представляет собой модификатор, который исключает из хеша все остальные входы, так что подпись покрывает только ту монету, которую тратит, а другие могут свободно присоединяться к транзакции.

Это не отдельный режим. Флаг имеет значение 128 и добавляется к одному из трех базовых режимов, давая 129, 130 или 131, и каждая комбинация отвечает на свой вопрос о том, что подписывающий готов позволить менять посторонним. Краудфандинг и торговые площадки ординалов являются двумя областями, где он приносит пользу.

Как это работает

Установка модификатора сокращает сторону входов в хеше до одной записи: расходуемый outpoint, его номер последовательности и скрипт, который он разблокирует.

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

Базовый режим по-прежнему определяет сторону выходов, и три комбинации ведут себя совершенно по-разному.

  • 129, модификатор с правилом всех выходов, означает «моя монета входит, и выплаты должны быть ровно этим списком». Входы можно добавлять, выходы нельзя.
  • 130, модификатор с правилом без выходов, представляет собой самую слабую подпись, которую допускает протокол: одна монета на входе и никакого указания на то, куда что в итоге попадет.
  • 131, модификатор с правилом одного выхода, означает «моя монета входит, и я должен получить выход по своему индексу». Все остальное остается открытым.

Где это встречается

Две конструкции используют его всерьез, и обе зависят от того, что посторонние могут добавлять средства, не ломая уже подписанное.

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

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

К этому прилагается предупреждение. Значение 130, ожидающее в публичном пуле памяти, представляет собой бесплатные деньги для того, кто подберет его первым, и от безопасных комбинаций его отделяет всего один бит. Если вы проверяете код подписи, убедитесь, что базовый режим является жестко заданной константой, а модификатор единственной частью, которую разрешено менять.

Чтение байта флага

Разделите байт флага sighash на две половины, и он перестанет быть загадочным. Младшие биты задают базовый режим: 1 для всех выходов, 2 ни для одного, 3 для одного совпадающего выхода. Старший бит со значением 128 является модификатором. Так, подпись, оканчивающаяся на 81, покрывает все, кроме остальных входов, 83 представляет собой правило торговой площадки, а обычный 01 без модификатора является обычным платежом, который ваш собственный кошелек создает каждый раз, когда вы тратите.

Не путать с

Часто задаваемые вопросы

Позволяет ли SIGHASH_ANYONECANPAY кому угодно тратить мою монету?

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

Где я на самом деле встречу этот флаг?

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

Читайте далее

Связанные термины

Еще в разделе «Транзакции и комиссии»

Читать эту страницу на английском