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

Глоссарий / Майнинг и консенсус

Лимит sigop в блоке

Что такое лимит sigop в блоке?
Лимит sigop в блоке ограничивает каждый блок биткоина значением 80 000 единиц стоимости операций подписи, представляющим собой бюджет проверки, который считается отдельно от бюджета размера в 4 000 000 единиц веса.

Определено в BIP-141.

Проверка подписей требует от узла времени, поэтому консенсус учитывает эту работу в отдельном бюджете, а не относит ее на место в блоке. BIP141 установил счетчик на 80 000 единиц и оценил каждую устаревшую операцию подписи в четыре из них, увеличив вчетверо прежний потолок в 20 000. Обычный вывод с одним ключом или через Taproot тратит несколько единиц, поэтому потолок незаметен почти для всех, кто перемещает биткоины.

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

Лимит sigop в блоке представляет собой накопительный итог, который складывается транзакция за транзакцией, когда узел подключает блок, и блок, итог которого превышает 80 000, недействителен.

Ничего не выполняется, чтобы его получить: узел просматривает байты скриптов и подсчитывает опкоды, поэтому проверка подписи в ветви, которую расходование так и не выбирает, начисляется полностью. Такой пессимизм намеренный: узел должен знать, что блок ему по средствам, прежде чем что-либо проверит.

Суммируются три подсчета, и они не всегда приходятся на одну и ту же транзакцию. Устаревший подсчет читает собственные скрипты входов транзакции и ее собственные скрипты выходов, умноженные на четыре, поэтому операция, записанная в scriptPubKey, начисляется тому, кто создает выход, а не тому, кто потратит его позже. Подсчет pay to script hash читает скрипт погашения, который раскрывает расходующий вход, тоже умноженный на четыре. Подсчет свидетеля считает по номиналу: одна единица за вход P2WPKH, а скрипт P2WSH начисляется ровно так, как он был бы начислен при P2SH.

Одно различие между этими просмотрами стоит реальных денег. Чтения P2SH и свидетеля применяют скидку BIP141, по которой OP_CHECKMULTISIG, перед которым стоит OP_1 до OP_16, считается как от одной до шестнадцати операций вместо фиксированных двадцати; устаревший просмотр ее никогда не применяет. За простой выход мультиподписи два из трех начисляются все двадцать операций, восемьдесят единиц бюджета, и начисляются при создании.

Tapscript вообще вышел из этого бюджета. BIP342 вывел операции подписи tapscript из общих 80 000 блока и дал каждому скрипту собственный лимит: 50 единиц плюс сериализованный размер свидетеля этого входа, уменьшаемый на 50 каждый раз, когда опкод подписи выполняется с приложенной реальной подписью. Пятьдесят получается делением четырех миллионов единиц веса на восемьдесят тысяч sigop, то есть отношение между двумя потолками.

Где это видно

Политика ретрансляции сталкивается с лимитом sigop в блоке намного раньше консенсуса, через три константы Bitcoin Core, более строгие, чем правило сети.

Одна транзакция может затребовать не более пятой части бюджета блока, 16 000 единиц. Стандартный вход pay to script hash может раскрыть скрипт погашения, содержащий не более 15 операций подписи. Третий подсчет читает операции, не относящиеся к свидетелю, там, где они действительно могут выполниться, а не там, где они находятся, и останавливает ретрансляцию выше 2500 на транзакцию; он читает расходуемый scriptPubKey, который подсчет по всему блоку уже начислил при создании.

Лимит также влияет на вашу комиссию. Параметр bytespersigop в Bitcoin Core, по умолчанию равный 20, заменяет вес транзакции большим из двух значений: ее реальным весом или ее стоимостью в sigop, умноженной на двадцать, поэтому транзакция, тяжелая по операциям подписи для своего размера, оценивается как более крупная, чем есть. Создание простого выхода мультиподписи является обычным способом на него натолкнуться.

Майнеры встречают этот бюджет как второе ограничение наряду с весом, и BIP342 приводит это как причину вывести tapscript: два потолка усложняют построение блока по сравнению с одним. Core резервирует 400 единиц для выходов coinbase, прежде чем заполнить шаблон.

Лимит sigop в блоке vs вес блока

Вес блока считает данные, а лимит sigop в блоке считает работу по проверке, и блок полон в тот момент, когда достигает любого из двух потолков. Вес является потолком, который обычный блок достигает первым, потому что вход P2WPKH стоит одну единицу, а расходование Taproot не добавляет вообще ничего, поэтому бюджет sigop решает исход только для блока, нагруженного скриптами старого стиля. Разделите один потолок на другой, и получите 50 единиц веса на операцию подписи, это отношение BIP342 повторно использовал для оценки бюджета tapscript, и это самое близкое к обменному курсу между байтами и проверками подписей, что есть в протоколе.

Не путать с

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

Почему лимит sigop в блоке равен 80 000?

Потому что BIP141 изменил масштаб прежнего правила, а не заменил его. Потолок до SegWit составлял 20 000 операций подписи на блок, и BIP141 умножил на четыре и подсчет, и потолок, что оставляет блок устаревших скриптов перед ровно тем же ограничением, перед которым он был раньше, и это часть причины, по которой изменение удалось выпустить как мягкий форк.

Считаются ли расходования Taproot в лимите sigop в блоке?

Нет. BIP342 вывел операции подписи tapscript из общих 80 000 блока и вместо этого дал каждому скрипту собственный бюджет: 50 плюс сериализованный размер свидетеля этого входа, уменьшаемый на 50 каждый раз, когда опкод подписи выполняется с непустой подписью.

Может ли лимит sigop в блоке повлиять на то, сколько вы платите за перемещение биткоина?

Только если ваша транзакция необычно насыщена подписями для своего размера, что для большинства людей означает создание выхода с простой мультиподписью, а не его расходование. Значение bytespersigop, равное 20 в Bitcoin Core, оценивает транзакцию по большему из двух: ее реального веса и стоимости sigop, умноженной на 20, поэтому обычная трата с одним ключом или Taproot не затронута.

Расходует ли бюджет sigop блока трата старого выхода с мультиподписью?

Только когда выход был обернут в хеш скрипта. Sigop внутри скрипта погашения pay-to-script-hash или скрипта свидетеля P2WSH относятся на транзакцию, которая их расходует, тогда как sigop, находящиеся непосредственно в scriptPubKey простой мультиподписи, уже были отнесены на транзакцию, создавшую выход, поэтому трата такого выхода ничего не добавляет.

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

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

Еще в разделе «Майнинг и консенсус»

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