Глоссарий / Транзакции и комиссии
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 без модификатора является обычным платежом, который ваш собственный кошелек создает каждый раз, когда вы тратите.