Биткойн-скрипт

Определение

Bitcoin Script — это стековый, неполный по Тьюрингу язык программирования, используемый для определения условий, при которых Биткойн транзакции Можно потратить. Это простая, но мощная система скриптов, встроенная в каждый выходной (скрипт блокировки или scriptPubKey) и входной (скрипт разблокировки или scriptSig) биткоин-транзакции, позволяющая программировать условия расходования средств без риска для сети биткоина, присущего платформам смарт-контрактов с полной архитектурой Тьюринга. Bitcoin Script позволяет кошельки с мультиподписьютранзакции с привязкой ко времени, контракты с хеш-блокировкой, Платежные каналы и атомарные свопы — и все это без необходимости использования универсального блокчейна.

 Происхождение и история

ВремяСобытия
2008Сатоши Накамото разработал Bitcoin Script в рамках создания технического документа по Bitcoin.
2009Биткоин-скрипт развернут в генезисном блоке Биткоина; Pay-to-Public-Key (P2PK) — первый тип скрипта.
2012BIP 16: Введена технология Pay-to-Script-Hash (P2SH), позволяющая использовать сложные скрипты погашения.
2015Добавлена ​​функция CHECKLOCKTIMEVERIFY (CLTV), позволяющая устанавливать абсолютные временные блокировки для транзакций.
2016Добавлена ​​функция CHECKSEQUENCEVERIFY (CSV), позволяющая устанавливать относительные временные блокировки для платежных каналов.
2017SegWit представляет технологии Pay-to-Witness-Public-Key-Hash (P2WPKH) и P2WSH.
2021Обновление Taproot (BIP 340/341/342) добавляет сигнатуры Шнорра и MAST через Tapscript.
2023Биткоин-ординалы используют скрипты для записи данных в данные свидетеля.
2023Дискуссия о возобновлении действия BIP 347 (OP_CAT) в связи с возможным расширением функционала скрипта набирает обороты.

 «Bitcoin Script намеренно имеет ограничения — и это преимущество, а не недостаток. Простота — залог безопасности». — Грег Максвелл, разработчик Bitcoin Core.

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

 ВЫПОЛНЕНИЕ СКРИПТА ДЛЯ ТРАНЗАКЦИИ В БИТКОИНАХ ═ ... OP_EQUALVERIFY OP_CHECKSIG (Стандартный P2PKH — Оплата хешу открытого ключа)

РАЗБЛОКИРОВКА СКРИПТА (scriptSig) — предоставлено потребителем:

ВЫПОЛНЕНИЕ (на основе стека): Стек изначально пуст

  1. Толкать → Стек: [sig]
  2. Толкать → Стек: [sig, pubKey]
  3. OP_DUP: дублировать верхнюю часть → Стек: [sig, pubKey, pubKey]
  4. OP_HASH160: вершина хеша → Стек: [sig, pubKey, pubKeyHash]
  5. Толкать → Стек: [sig, pubKey, pubKeyHash, expected]
  6. OP_EQUALVERIFY: сравнение → Стек: [sig, pubKey] (если равно)
  7. OP_CHECKSIG: проверка подписи → Стек: [TRUE]

Результат: TRUE = транзакция действительна и UTXO потрачено

ТИПЫ СКРИПТОВ: P2PK → Оплата по открытому ключу (устаревший способ) P2PKH → Оплата по хешу открытого ключа (наиболее распространенный способ) P2SH → Оплата по хешу скрипта (мультиподпись, сложная) P2WPKH → Нативный SegWit (bech32) P2TR → Оплата по Taproot (наиболее эффективный/приватный способ) ══════════════════════════════════════════════════ 

Тип сценарияФормат адресаКейсыконфиденциальность
П2ПК(стандартный адрес отсутствует)Оригинальный биткойн, монеты СатошиНизкий
П2ПКХ1… (Base58)Стандартные платежи с одной подписьюНизкий
П2Ш3… (Base58)Многоподписные, сложные скриптыСредний
P2WPKHbc1q… (bech32)Встроенная технология SegWit, более низкие комиссииСредний
P2WSHbc1q… (bech32)Нативные скрипты SegWitСредний
П2ТРbc1p… (bech32m)Taproot, Tapscript, порядковые номераВысокий

 Простыми словами

  1. Замок и ключКаждый биткоин-транзакция имеет блокировку (скрипт блокировки) — чтобы потратить её, необходимо предоставить правильный ключ (скрипт разблокировки), удовлетворяющий условиям.
  2. Складирование машиныСкрипт выполняется путем помещения значений в стек и выполнения операций — он прост, предсказуем и намеренно не является полным по Тьюрингу, чтобы предотвратить бесконечные циклы.
  3. Пример мультиподписи: Для разблокировки средств с помощью скрипта с мультиподписью 2 из 3 требуется 2 из 3 указанных подписей закрытого ключа — используется для командных казначейств и защищенных кошельков.
  4. конфиденциальность TaprootTaproot создает сложные многосигнатурные и скрипты смарт-контрактов Они выглядят идентично простым транзакциям с одиночной подписью в блокчейне, что повышает конфиденциальность.
  5. Преднамеренные ограниченияВ отличие от Solidity в Ethereum, Bitcoin Script не может получать доступ к внешним данным, зацикливаться или вызывать другие контракты, что делает его предсказуемым и безопасным.

 Примеры из реального мира

СценарийТип сценарияПольза
Обмен горячего кошелькаP2SH 2-из-3 мультисигДля активации требуется 2 из 3 ключей — защищает от кражи одного ключа.
канал Lightning NetworkHTLC (контракт с временной блокировкой на основе хеширования)Обеспечивает мгновенные платежи в BTC вне блокчейна.
Атомарный своп BTC↔LTCHTLC на обеих цепяхДецентрализованный межцепочечный обмен без посредников
Наследование с привязкой ко времениCHECKLOCKTIMEVERIFYСредства могут быть израсходованы только после указанной даты.
Порядковая надписьданные свидетелей P2TRNFT/запись данных в свидетеле Taproot

 Преимущества

ПреимуществаXNUMX
Безопасность.Неполная по Тьюрингу архитектура предотвращает сложные векторы атак, возможные в смарт-контрактах.
ПредсказуемостьКаждый скрипт выполняется детерминированно с ограниченными вычислительными ресурсами.
ВыразительностьОбеспечивает поддержку нескольких подписей, временных блокировок и протоколов HTLC, достаточных для сети Lightning.
ЭффективностьСкрипты компактны, что минимизирует объем данных о транзакциях и комиссионные сборы.
Конфиденциальность (Taproot)Сложные условия расходования средств, неотличимые от простых платежей.

 Недостатки и риски

СнижениеXNUMX
Ограниченная функциональностьНевозможно реализовать сложный Defi, оракулы или произвольные смарт-контракты
Сложность сценарияВнедрение сложных скриптов с множественными подписями — сложная задача, требующая правильной реализации.
Проблемы устаревшего форматаБолее старые типы скриптов (P2PK, P2PKH) обеспечивают более низкий уровень конфиденциальности, чем современные альтернативы.
Отключенные коды операцийВ целях безопасности были отключены несколько важных кодов операций (OP_CAT, OP_CHECKSIGFROMSTACK).
Риски, связанные с ошибками в скрипте.Ошибки в пользовательских скриптах могут привести к безвозвратной блокировке средств.

Советы по управлению рисками:

  • Всегда тестируйте пользовательские реализации скриптов в тестовой сети перед тестированием в основной сети.
  • Используйте адреса P2TR (Taproot) для обеспечения максимальной конфиденциальности и совместимости в будущем.
  • Для кошельков с мультиподписью используйте проверенные реализации (Bitcoin Core, Sparrow Wallet), а не пользовательские скрипты.
  • Храните скрипты погашения (P2SH) в безопасном месте — они необходимы для использования средств.

 FAQ

В: Почему Bitcoin Script не является полным по Тьюрингу?

А: Полнота по Тьюрингу допускает бесконечные циклы — это опасно в блокчейне, где все узлы должны выполнять каждый скрипт. Преднамеренная неполнота Bitcoin Script гарантирует предсказуемое завершение скриптов, предотвращая атаки типа «отказ в обслуживании» и делая возможной формальную проверку скриптов.

В: Что такое HTLC в Bitcoin Script?

A: Контракт с временной блокировкой хеширования (HTLC) — это скрипт, позволяющий получить платеж, раскрыв секретный ключ (прообраз), хеш которого равен заранее определенному значению, или получить возврат средств отправителю по истечении времени ожидания. HTLC являются фундаментальным строительным блоком сети Lightning Network.

В: Как Taproot улучшает Bitcoin Script?

A: Taproot (BIP 340/341/342) внедряет подписи Шнорра, позволяющие агрегировать ключи, MAST (абстрактные синтаксические деревья Мерклизма) через Tapscript, позволяющие создавать сложные скрипты, отображая при этом только выполненные ветви, и обеспечивающие идентичность всех выходных данных Taproot во внешнем виде — что значительно повышает конфиденциальность и эффективность.

Совет от UPay: При настройке биткоин-кошелька используйте адреса Taproot (bc1p…) для оптимального сочетания конфиденциальности, эффективности и совместимости с будущими версиями. Большинство современных кошельков, таких как Sparrow и Phoenix, поддерживают Taproot изначально.

Предупреждение: Данный контент предназначен исключительно для образовательных целей и не является финансовой или технической консультацией.

UPay — Создание криптоэнциклопедии

Медиа