Литмир - Электронная Библиотека
A
A

Механизм работы скриптов Биткойна подразумевает, что отправитель монет должен точно указать скрипт.

Но это иногда становится затруднительным.

Скажем, например, вы являетесь покупателем интернет-магазина, и вы собираетесь что-то заказать.

И вы говорите: «Хорошо, я готов заплатить. Скажите мне адрес, на который я должен отправить свои монеты».

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

Затем, так как вы должны указать это, продавец должен будет сказать вам: «Мы используем MULTISIG, и мы попросим вас отправить монеты с использованием сложного скрипта».

На что вы могли бы сказать: «Я не знаю, как это сделать. Это слишком сложно. Как потребитель, я просто хочу отправить монеты на простой адрес».

Для решения этой проблемы, в биткойне есть умный хак.

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

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

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

После этого произойдет второй этап проверки.

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

Итак, мы видим, что здесь выполняются два этапа.

Сначала это был традиционный скрипт, который проверял, что скрипт потребления монет имеет правильный хеш.

И после этого скрипт потребления монет де-сериализуется и запускается как скрипт.

И вот где будет происходить фактическая проверка подписи.

Создание поддержки для этого типа скриптов P2SH было довольно сложным, поскольку этот тип скриптов не был частью первоначальной спецификации Bitcoin.

Он был добавлен позже.

Это, вероятно, самая известная функция, добавленная в биткойн, которой не было в исходной спецификации.

И она решает несколько важных проблем.

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

В нашем примере, Алисе не нужно беспокоиться о том, что Боб использует multisig, она просто отправляет деньги на адрес P2SH Боба, и ответственность Боба заключается в том, чтобы указать этот сложный скрипт, когда он хочет потратить монеты.

P2SH также ускоряет обработку.

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

Вся сложность переносится на входные скрипты.

Теперь, когда мы понимаем, как работают скрипты Bitcoin, давайте взглянем на некоторые из применений, которые могут быть реализованы с помощью этого языка сценариев.

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

Рассмотрим транзакцию условного депонирования – это депонирование определенной суммы покупателем у третьего лица под определенные условия при сомнениях в добросовестности продавца.

Введение в технологию Блокчейн - _46.jpg

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

Проблема в том, что Алиса не хочет платить до тех пор, пока она не получит товар, а Боб не хочет отправлять товар до тех пор, пока он не будет оплачен.

Что мы можем с этим поделать?

Хорошим решением в биткойне, которое можно было бы использовать на практике, является введение третьей стороны и транзакция с депонированием.

Транзакция с депонированием может быть реализована достаточно просто с использованием мультиподписи MULTISIG.

Введение в технологию Блокчейн - _47.jpg

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

И эти три человека будут Алисой, Бобом, и некоторым сторонним арбитром Джуди, который вступит в игру, если возникнут какие-либо споры.

Поэтому, Алиса создает 2-из-3 транзакцию MULTISIG, которая отправляет некоторое количество монет, которыми она владеет, и указывает, что они могут быть потрачены, если будут две подписи из трех Алисы, Боба и Джуди.

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

В этот момент Боб убежден, что безопасно отправить товар Алисе, поэтому он отправит его по почте или каким-то другим способом.

Теперь, предположим, Алиса и Боб оба честны.

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

Обратите внимание, что в этом случае, когда Алиса и Боб честны, Джуди не нужно вмешиваться.

Не было никакого спора, и подписи Алисы и Боба соответствовали требованию 2-из-3 транзакции MULTISIG.

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

Но что могло бы произойти, если бы Боб не отправил товар или товар потерялся бы на почте?

Или, может быть, товар отличался бы от того, который заказывала Алиса?

Алиса теперь не хочет платить Бобу, потому что думает, что ее обманули, и она хочет вернуть свои деньги.

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

Но Боб также может отрицать любые нарушения и отказываться подписывать транзакцию, которая возвращает деньги Алисе.

Здесь необходимо принять участие Джуди.

Введение в технологию Блокчейн - _48.jpg

Джуди придется решить, кто из этих двух людей заслуживает денег.

Если Джуди решит, что Боб обманул, Джуди подпишет сделку вместе с Алисой, отправив деньги с эсквота обратно Алисе.

Подписи Алисы и Джуди отвечают требованиям 2-из-3 транзакции MULTISIG, и Алиса вернет себе деньги.

И, конечно, если Джуди думает, что здесь виновата Алиса, и Алиса просто отказывается платить, Джуди может подписать транзакцию вместе с Бобом, отправив деньги Бобу.

Поэтому в этом случае Джуди решает, какой будет результат.

Но ей не придется участвовать, если нет спора.

Еще одно интересное применение скриптов – это то, что называют зелеными адресами.

Предположим, Алиса хочет заплатить Бобу, но Боб не в сети.

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

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

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

Но для некоторых товаров, таких как еда, Боб не может ждать час, чтобы начать доставку.

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

17
{"b":"746043","o":1}