В этом видео мы поговорим о скриптовом языке биткоина - как создаются транзакции,
как создаются условия для траты транзакций.
В первую очередь мы поговорим непосредственно о том, как транзакции строятся.
Напоминаю, что транзакции состоят из входов и выходов,
результатом каждой транзакции являются новые выходы.
Выходы мы можем рассматривать как какие-то купюры,
каждая с уникальным идентификатором, которые можно потратить.
Когда мы тратим выходы, они становятся входами других транзакций.
Как можно видеть на примере на этом слайде, есть какая-то первая транзакция,
у которой есть один вход,
два выхода и первый из выходов является входом во второй транзакции.
То есть, он тратится среди других биткоинов именно эти пол-биткоина.
Таким образом, получается такая цепочка: вход-выход,
вход-выход, вход-выход и так целиком получается.
Каждый выход содержит в себе следующее: первое - это сумма выхода,
то есть какое-то число биткоинов и специальный скрипт,
который в обычном стандартном случае говорит: "Разрешаю потратить эти биткоины тому,
кто предоставит валидную цифровую подпись для адреса А".
Вход, то есть трата выхода, содержит в себе информацию о том,
какой выход тратится - его идентификатор и скрипт,
который для того же стандартного случая говорит: "Для этого
выхода я предоставляю валидную цифровую подпись".
Что получается: скрипт позволяет задавать условия траты выхода.
Описанный в предыдущем слайде и он
же наиболее часто используемый тип выхода в биткоине на сегодняшний день это Pay
to public key hash - оплата в пользу xэша открытого ключа.
Мы говорили, что там скрипт, который позволяет тратить биткоины тому,
кто предоставляет валидную цифровую подпись для адреса А.
Адрес А и хэш открытого ключа в терминологии биткоина это одно и то же - то,
что у нас адресами являются хэши открытых ключей, идентификаторы.
Вообще в принципе скрипты, скриптовой язык биткоина позволяет создавать другие условия.
Скриптовой язык биткоина является стековым - стековые
языки позволяют загружать какие-то переменные операторы и
проводить над ними самые простейшие операции.
Работает слева направо: он что-то проводит,
стек уменьшается и так до тех пор пока он не закончится.
Операции называются оп-кодами. В качестве самого простого примера можно привести оп-код
op_equal - он сравнивает два последних элемента стека и возвращает true если они равны.
Например, если у нас есть такой простейший скрипт 3 3 op_equal,
мы говорим что он возвращает нам true,
потому что 3 3 мы загружаем в стек,
потом op_equal сравнивает два последних элемента стека и мы видим то,
что они равны, вернули true.
Для проверки валидности траты, то есть валидна ли транзакция,
скрипт входа объединяется со скрипом выхода и все это вместе должно вернуть true.
В качестве такого простого математического примера попробуем решить некоторые уравнение,
чтобы получить биткоин.
Мы создаем транзакцию, один из выходов которой несет в себе
такой скрипт: op_add4 op_equall.
op_add это оперант сложения, op_equall, как мы уже раньше говорили, сравнения.
В принципе, любой может создать такую транзакцию в биткоин сети и можно
ее послать и кто разгадает такую загадку небольшую сможет потратить биткоины,
которые ушли вместе с этим скриптом.
Чтобы потратить биткоины, которые привязаны к такому скрипту,
нам нужно создать такой скрипт, чтобы скрипт входа мы сложили
в единый какой-то большой скрипт со скрипом выхода,
чтобы это все вместе вернуло true.
Решением будет либо 1 3 либо 2 2. Например, если мы в
качестве скрипта - причем в скрипте могут быть просто какие-то операнты,
необязательно там должны быть оп-коды, операции - что мы получаем 2 2 сложить 4 равно.
Мы загружаем две двойки в стек, выполняем над ними операцию сложения.
У нас в стеке остается 4 4 equal, все вместе,
как мы уже чуть пораньше обсудили, выдает нам true.
Стандартный скрипт pay to public key hash естественно более сложный,
он использует криптографию, разные операнды и оп-коды, но, в принципе,
на выходе мы предоставляем хэш публичного ключа (хэш открытого ключа,
которому мы даём возможность траты),
а для входа мы используем просто нашу подпись и наш открытый ключ.
В целом, как это все работает и как стек
исполняется можно видеть на примере на этом слайде.
В принципе, как мы уже сказали, скриптовой язык биткоина простой,
потому что он является стековым,
нет возможности создания каких-то сложных нагроможденных алгоритмов.
В частности, в скриптовом языке биткоина нет циклов,
нет возможности даже умножения двух чисел.
Сначала она была, но потом по соображениям безопасности ее в 2010 году отключили.
Таким образом, на сегодняшний
день все операции с использовании скриптового языка биткоина в транзакции сводятся к
какой-либо проверке подписей - может
быть это мульти-подпись - они имеют монетарное применение.
Но зато в целом такая система является устойчивой и безопасной.
На этом мы заканчиваем наше знакомство с основами блочейкна и с биткоином,
в следующей части курса вы узнаете больше про экосистему etherium.