Глоссарий / Транзакции и комиссии
Стандартная транзакция
- Что такое стандартная транзакция?
- Стандартная транзакция представляет собой транзакцию, которую обычные узлы соглашаются передавать и держать в своих пулах памяти; это более строгое требование, чем просто быть действительной по правилам консенсуса.
Сеть охраняют два отдельных барьера. Консенсус решает, что может содержать блок, и может измениться только через форк; стандартность решает, что ваш узел передаст своим пирам, и меняется с каждым новым выпуском. Транзакция, не прошедшая второй барьер, не является недействительной, она является нежелательной, и ей приходится добираться до майнера каким-то другим путем.
Как это работает
Стандартность представляет собой контрольный список, который каждый узел применяет самостоятельно, и версия этого списка в Bitcoin Core находится в одном файле исходного кода, src/policy/policy.cpp.
Основные условия таковы. Каждый скрипт выхода должен соответствовать распознаваемому шаблону: pay to public key hash, pay to script hash, три типа свидетеля (witness), простая мультиподпись не более чем с тремя ключами или единственный выход, несущий данные. Транзакция не может превышать 400 000 единиц веса, что составляет 100 000 виртуальных байт, четверть полного блока. Ее версия должна входить в допустимый диапазон. Ее комиссия должна достигать минимальной ставки передачи, по умолчанию 1 сатоши за виртуальный байт. Ни один выход не может быть меньше порога пыли: 546 сатоши для выхода старого формата (legacy) и 294 для нативного SegWit. Скрипты разблокировки могут содержать только вставки данных, без опкодов.
Невыполнение любого из этих условий дает конкретную ошибку от sendrawtransaction, обычно начинающуюся со слова "non-mandatory-script-verify-flag" или "scriptpubkey", и транзакция так и не распространяется дальше узла, которому вы ее отправили.
Слой политики существует потому, что передача бесплатна, а блоки нет. Любой может наводнить сеть транзакциями, которые никогда не будут добыты, поэтому узлы отказываются пересылать формы, похожие на злоупотребление, дорогие в проверке или не способные реально оплатить свое место. Политика также служит тем местом, где эксперименты держатся вне общего оборота, пока экосистема не согласится, что они безопасны, и поэтому ослабление правила политики может быть таким же спорным, как мягкий форк, хотя координация для этого вообще не требуется.
Где это встречается
Большинство людей сталкиваются со стандартностью в виде сообщения об ошибке, и кошельки, которые его выдают, обычно намеренно делают что-то необычное.
Попытка отправить выход размером 300 сатоши сработает против правила пыли. Создание крупной мультиподписи в виде простого скрипта, а не внутри pay to script hash, сработает против правила шаблонов. Присоединение большего объема данных, чем позволяет настройка несущего данные выхода узла, сработает против этого предела. Все три случая возвращаются отказом от вашего собственного узла, прежде чем что-либо достигнет сети.
Нестандартность не означает невозможность, и сегодня существует рынок обхода этого правила. 2 февраля 2023 года майнинг-пул Luxor добыл блок 774 628, содержащий единственную транзакцию размером 3,94 мегабайта, которую ни один узел не передал бы, отправленную напрямую пулу. Позже Marathon превратил ту же идею в продукт под названием Slipstream в 2024 году, принимая нестандартные и слишком крупные транзакции для прямого включения. Если вы обычный покупатель, вам это никогда не понадобится, а просьба воспользоваться таким сервисом является явным сигналом, что происходит что-то странное.
Стандартная транзакция vs транзакция, действительная по консенсусу
Действительность по консенсусу является тем, о чем должна договориться вся сеть; стандартность является тем, с чем отдельный узел решает помогать. Транзакция может быть действительной по консенсусу и при этом нестандартной, и тогда майнер может включить ее, и каждый узел примет получившийся блок без возражений. Обратное невозможно: ничто нарушающее консенсус никогда не передается, поскольку это все равно никогда не могло бы быть добыто. Говоря просто, стандартность является фильтром на пути к майнеру, а консенсус является правилом, которое решает, была ли история продолжена правильно.