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

Глоссарий / Справочник разработчика

Скрипт PP

Что такое скрипт PP?
Скрипт PP был обязательным полем в выходе BIP70 и содержал необработанный скрипт блокировки, который плательщик должен был воспроизвести, те самые байты, которые попадают в выход транзакции.

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

Из всего, что BIP70 передавал по сети, скрипт является единственной частью, которая сохранилась в блокчейне. Сертификаты, заметки и сроки действия остались вне сети, тогда как скрипт блокировки попал в транзакцию дословно и сегодня находится в наборе неизрасходованных выходов. Эти байты, и ничто иное в запросе, определяют, кто может потратить биткоины.

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

Статус: исторический. Скрипт был полем 2 сообщения Output и единственной его частью, которую продавец не мог опустить, поскольку сумма по умолчанию равнялась нулю. Bitcoin Core перестал разбирать любую его часть в версии 0.20.0, выпущенной 3 июня 2020 года

Отправка скрипта вместо адреса была осознанным выбором. Адрес представляет собой транспортный формат для людей: base58check или bech32, с префиксом, контрольной суммой и набором символов, подобранным так, чтобы адрес можно было записать и прочитать вслух. Кошелек, получивший адрес, должен декодировать его в скрипт, прежде чем что-либо построить. BIP70 пропускал этот круговой путь и называл пункт назначения в той форме, которую сеть действительно использует.

Стандартные формы имеют фиксированный размер, и знание их сильно упрощает чтение обозревателя блоков:

  • "Pay to public key hash", 25 байт: дублировать, вычислить хеш, поместить в стек 20 байт, проверить равенство, проверить подпись.
  • "Pay to script hash", 23 байта: вычислить хеш, поместить в стек 20 байт, проверить равенство.
  • SegWit с одним ключом, 22 байта: нулевой байт версии и хеш размером 20 байт.
  • SegWit с хешем скрипта, 34 байта: нулевая версия и хеш размером 32 байта.
  • Taproot, 34 байта: версия один и ключ размером 32 байта.

Чем формат пожертвовал, так это обнаружением ошибок. Bech32 гарантирует, что любая замена четырех символов в адресе длиной до 89 символов будет обнаружена, а base58check обнаруживает искажение с помощью четырехбайтового хеша. Необработанные байты скрипта не несут ни того, ни другого. Перевернутый бит в адресе дает строку, которую ваш кошелек отклонит; перевернутый бит в скрипте дает действительный выход, который никто и никогда не сможет потратить.

Где это встречается

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

Биржа, которая позволяет вам выбрать формат адреса, выбирает скрипт за вас. Выход SegWit с одним ключом занимает 22 байта против 25 для устаревшей формы, что несущественно, но потратить его позже уже не так просто: этот вход стоит примерно 68 виртуальных байт, тогда как устаревший стоит около 148, поэтому биткоины, которые вы получаете сегодня, задают часть вашего счета за комиссии на весь остаток их жизни. При 20 sat/vB разница составляет около 1600 сатоши за каждый вход, который вы в итоге потратите.

Обозреватели блоков указывают тип каждого отображаемого выхода, и так вы можете проверить, на какой тип выхода вам фактически заплатили. Более новое программное обеспечение описывает пункты назначения с помощью дескрипторов вывода, компактной текстовой формы, охватывающей целое семейство скриптов и их вывод, а не по одному скрипту за раз.

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

Скрипт PP vs скрипт публичного ключа

Поле BIP70 было контейнером; скрипт публичного ключа является самой вещью. Скрипт публичного ключа, также называемый scriptPubKey или скриптом блокировки, присутствует в каждом выходе транзакции, когда-либо созданном, и задает условие, которое должен выполнить тратящий. Скрипт PP был одним конкретным местом, через которое путешествовала копия такого скрипта, внутри протокола, который никто не запускает. Используйте имя поля только при чтении документации BIP70, а общее имя во всех остальных случаях.

Не путать с

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

Почему BIP70 отправлял скрипт вместо биткоин-адреса?

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

Меняет ли формат адреса, на который вы выводите средства, ваши комиссии?

Да, в основном когда вы позже тратите биткоины. Вход SegWit с одним ключом стоит около 68 виртуальных байт против примерно 148 для устаревшего, поэтому при 20 sat/vB вы экономите около 1600 сатоши на каждом входе.

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

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

Еще в разделе «Справочник разработчика»

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