0Pricing
Cryptology Academy · Урок

Скрипт Bitcoin и проверка подписей UTXO

Проследите работу скриптов pay-to-public-key-hash (P2PKH) и подписания ECDSA

«Скрипт Bitcoin и проверка подписей UTXO» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Модель UTXO

Bitcoin использует непотраченные выходы транзакций (UTXO). Каждый UTXO — это монета со скриптом блокировки (scriptPubKey). Чтобы потратить её, отправитель предоставляет скрипт разблокировки (scriptSig), удовлетворяющий скрипту блокировки. UTXO неделимы: они либо потрачены, либо не потрачены, но не могут быть потрачены частично.

Скрипт Bitcoin

Скрипт Bitcoin — это язык на основе стека, неполный по Тьюрингу. Скрипты выполняются путём помещения данных в стек и запуска опкодов. Ни циклов, ни рекурсии: выполнение скриптов всегда завершается. Это намеренное ограничение предотвращает отказ в обслуживании и делает проверку скрипта линейной — O(n) относительно его длины.

P2PKH: оплата хешем открытого ключа

Самый распространённый тип выхода. scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG. scriptSig: . Выполнение: поместить подпись и открытый ключ в стек, скопировать открытый ключ, вычислить его hash160, сравнить результат со встроенным хешем и проверить подпись ECDSA. Если все проверки пройдены, монету можно потратить.

Трассировка выполнения P2PKH

Трассировка стека для P2PKH: поместить ; поместить ; OP_DUP → поместить копию; OP_HASH160 → вычислить hash160 для верхнего элемента; поместить ; OP_EQUALVERIFY → извлечь два элемента, завершить с ошибкой, если они не равны; OP_CHECKSIG → извлечь подпись и открытый ключ, проверить ECDSA и поместить TRUE/FALSE. Скрипт успешно выполнен, если результатом стало TRUE.

ECDSA в Bitcoin

Bitcoin использует ECDSA над secp256k1 (кривой Коблица, y^2 = x^3 + 7 mod p). Закрытый ключ d ∈ [1, n-1]. Открытый ключ Q = d*G. Sign(m): случайное k; r = (k*G).x mod n; s = k^{-1}(H(m)+r*d) mod n. Подпись = (r, s). В scriptSig она кодируется в формате DER.

Типы SIGHASH

Подписи Bitcoin фиксируют определённые части транзакции: SIGHASH_ALL (по умолчанию): подписать все входы+выходы. SIGHASH_SINGLE: подписать только соответствующий выход. SIGHASH_NONE: не подписывать выходы (опасно). SIGHASH_ANYONECANPAY: подписать только собственный вход — это позволяет создавать совместные транзакции.

P2SH: оплата хешем скрипта

P2SH позволяет скрыть сложные условия траты за хешем. scriptPubKey: OP_HASH160 OP_EQUAL. scriptSig: . Выполнение: проверить, что hash(redeemScript) == scriptHash, а затем выполнить redeemScript. Это позволяет использовать мультиподпись, не раскрывая условия до момента траты.

Мультиподпись (2 из 3)

redeemScript: OP_2 OP_3 OP_CHECKMULTISIG. scriptSig: OP_0 . OP_0 обходит ошибку в OP_CHECKMULTISIG, из-за которой из стека извлекается один лишний элемент. Для мультиподписи 2 из 3 требуются любые 2 из 3 подписей.

SegWit и P2WPKH

Segregated Witness (SegWit, BIP-141) перемещает подписи из scriptSig в отдельное поле witness. Это устраняет пластичность транзакций: её ID меняется при изменении scriptSig. scriptPubKey для P2WPKH: OP_0 <20-byte pubKeyHash>. Witness: [ ].

Taproot (P2TR)

Taproot (BIP-340/341/342) использует подписи Шнорра и мерклизованные абстрактные синтаксические деревья (MAST). Вариант траты по умолчанию — одна подпись Шнорра, неотличимая от траты по ключевому пути. Сложные условия скрыты в дереве Меркла и раскрываются только при использовании. Это повышает конфиденциальность и эффективность.

Проверка скриптов в коде

Bitcoin Core проверяет скрипты с помощью интерпретатора стекового типа. CheckSig вызывает VerifyScript, который выполняет объединённые scriptSig+scriptPubKey. Для каждого опкода CHECKSIG он вызывает CheckECDSASignature, проверяющий закодированные в DER значения (r,s) по хешу транзакции с использованием secp256k1.

Быстрая проверка

Что проверяет OP_CHECKSIG в скрипте P2PKH?

Итоги

UTXO используют скрипт Bitcoin на основе стека. P2PKH — самый распространённый шаблон траты: сначала проверяется хеш открытого ключа, затем подпись ECDSA. SegWit устраняет пластичность, а Taproot добавляет подписи Шнорра и MAST. Далее: дифференциальный криптоанализ.

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

Урок «Скрипт Bitcoin и проверка подписей UTXO» бесплатный?

Да — полный текст урока «Скрипт Bitcoin и проверка подписей UTXO» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Скрипт Bitcoin и проверка подписей UTXO»?

Проследите работу скриптов pay-to-public-key-hash (P2PKH) и подписания ECDSA Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Скрипт Bitcoin и проверка подписей UTXO»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Цепочки хешей и связывание блоков
  2. Деревья Меркла: целостность транзакций в большом масштабе
  3. Доказательство работы: майнинг и настройка сложности
  4. Скрипт Bitcoin и проверка подписей UTXO
← Назад к Cryptology Academy