Блокчейн. Принципы и основы

Александр Цихилов
100
10
(1 голос)
0 0

Аннотация: Большая часть информации, представленная на сегодняшний день по блокчейн, страдает отрывочностью, однобокостью или сложностью терминологии. Перед вами– первое систематизированное изложение темы блокчейн на русском языке, в котором автор технологически сложные концепции объясняет понятным языком. Помимо истории возникновения и описания технологии, в книге рассмотрены наиболее популярные проекты, реализованные на блокчейн, уже существующее и потенциальное применение в различных отраслях, а также проблематика взаимоотношений блокчейн-проектов и государств. Наконец, автор подробно разбирает самые востребованные и популярные темы– инвестиции в криптоактивы, связанные с ними риски и перспективы развития блокчейн. Книга адресована широкому кругу читателей и будет интересна как техническим специалистам, так и аудитории, далекой от финансовых и IT-технологий.

Книга добавлена:
18-11-2022, 00:46
0
557
65
Блокчейн. Принципы и основы

Читать книгу "Блокчейн. Принципы и основы"



Смарт-контракты

В процессе внедрения новых технологий разработчики систем, использующих биткоины в качестве платежного средства, постоянно сталкивались с проблемой создания более сложных моделей проведения транзакций. Особенно в тех, где могли бы присутствовать какие-то условия, отличные от стандартных. Сатоши Накамото пытался предусмотреть подобную ситуацию и, начиная с первой же версии программной реализации клиента сети Биткоин, поместил в него так называемую систему скриптов для обработки транзакций. Фактически это была упрощенная форма языка программирования стекового типа, когда все его команды обрабатываются в порядке очереди «слева направо от того, как они были указаны в самом скрипте».

Скрипт-язык Биткоина содержит около восьми десятков различных команд, каждая из которых выполняет определенную алгоритмическую операцию. От элементарной, вроде сравнения двух числовых значений, до более сложных – хеширования данных или алгоритма проверки цифровой электронной подписи. В подавляющем большинстве случаев в параметрах выхода каждой транзакции помещается стандартный скрипт под названием P2PKH, или Pay to Public Key Hash. Этот скрипт реализует процедуру оплаты на хеш публичного ключа, которым, собственно, и является биткоин-адрес получателя транзакции.

Для обработки нестандартных платежных ситуаций отправитель может составить собственный скрипт, содержащий дополнительные условия для обработки транзакции. Хотя, надо сказать, выбор у него небогатый. Например, имеется возможность реализовать функционал мультиподписи или сделать так, чтобы отправляемые средства нельзя было потратить ранее указанного в скрипте времени. Однако по-настоящему замысловатых алгоритмических конструкций для обработки транзакций с дополнительным набором условий подобными средствами создать практически невозможно. И дело не только в ограниченном наборе команд биткоин-скрипта, а в первую очередь в том, что данный язык является «неполным по Тьюрингу». Что это означает?

В 1936 году Алан Тьюринг, будущий герой криптографической войны с германским шифровальным устройством «Энигма», предложил модель вычислительной машины в форме математической абстракции. Полученную модель впоследствии стали называть «Машиной Тьюринга». Эта логическая вычислительная конструкция послужила инструментом для доказательства наличия или отсутствия алгоритмического решения для различных задач. Что же касается «полноты по Тьюрингу», то одним из ее критериев является наличие в языке программирования команд, на базе которых можно построить алгоритмические циклы. Скрипт-язык сети Биткоин не предоставляет операторов обработки циклов, а значит, и возможности реализации на нем сложных вычислительных алгоритмов весьма ограничены. В отличие от Биткоина, в проекте Ethereum подобная возможность предусмотрена, а реализована она как раз с использованием функционала смарт-контрактов. Попробуем разобраться, что же они собой представляют.

Как уже неоднократно упоминалось, автором концепции является Ник Сабо, который еще в 1994 году впервые представил форму исполняемых электронных контрактов в децентрализованной среде. Сабо определил этот вид виртуального соглашения как «протокол передачи информации, обеспечивающий автоматическое исполнение сторонами условий сделок». Преимуществами такой формы заключения контрактов автор считал конфиденциальность, низкие затраты на проведение операций и отсутствие необходимости привлечения посредников для обеспечения доверия для сторон по сделкам. Если сравнивать электронные контракты с обычными, то очевидным отличием будет возможность смарт-контракта контролировать лишь математически доказуемые условия сделки, в то время как в обычном контракте изложенные в нем условия могут носить и нечеткий, то есть описательный характер. В конечном итоге Ник Сабо ограничился лишь теоретическим представлением своей модели, а непосредственная реализация данного концепта увидела свет только спустя два десятка лет в проекте Ethereum.

В целом процесс формирования смарт-контракта похож на обычную транзакцию, которая содержит ряд дополнительных элементов, придающих ей уникальные свойства. В первую очередь речь идет о программном коде, который подлежит децентрализованному исполнению при помощи так называемой виртуальной машины Ethereum (EVM) непосредственно на узлах сети, создающих блоки. В коде смарт-контракта описана алгоритмическая логика обработки сделок между пользователями сети и владельцем смарт-контракта, поместившим его в блокчейн, введя его, таким образом, в действие. С этого момента смарт-контракт присутствует в одном из блоков цепочки, и любой желающий участник сети может активировать его работу путем отправки транзакции на адрес контракта в системе. То есть смарт-контракт является полноправным субъектом сети, который может принимать и формировать транзакции. Но делает он это не самостоятельно, а только когда код контракта запускается на исполнение виртуальной машиной Ethereum на узле майнера при создании нового блока. Как происходит этот процесс?

Для простоты смарт-контракт можно сравнить с торговым автоматом, который продает, например, напитки. Покупатель помещает в автомат определенную денежную сумму наличными или при помощи банковской карты, а аппарат выдает выбранный товар сообразно внесенным средствам. Если данную ситуацию спроецировать на блокчейн-сеть, то активация смарт-контракта происходит в момент, когда в блок помещается транзакция, отправляющая в адрес контракта какие-то криптовалютные активы. Обрабатывая подобную транзакцию, майнер находит блок, где содержится смарт-контракт, и при помощи виртуальной машины запускает его код на обработку, подавая ему «на вход» данные транзакции. Результат действия смарт-контракта может быть разным, что обусловлено логикой алгоритма, заложенной в сам код контракта. Это может быть просто внесение изменений в состояние системы либо формирование контрактом ответных транзакций – одной или даже нескольких. Не следует также забывать, что смарт-контракты запускаются не только майнерами, но и обычными узлами. Это происходит в моменты, когда они обрабатывают транзакции, связанные со смарт-контрактами, в том числе и при проверке получаемых от майнеров блоков на валидность. Подобный протокол предполагает, с одной стороны, некоторую вычислительную избыточность, а с другой – обеспечивает дополнительную гарантию стабильности работы системы в целом.

В отличие от скрипт-языка Биткоин, код смарт-контрактов пишется на языках программирования, удовлетворяющих критериям полноты по Тьюрингу. Наиболее распространенным языком смарт-контрактов Ethereum является объектно-ориентированный язык Solidity, семантически схожий с популярным языком программирования JavaScript. Однако непосредственно в тело смарт-контракта помещают не исходный текст, написанный, например, на том же Solidity, а прошедший через процедуру компиляции – так называемый «байт-код». Данный код представляет собой компактный набор команд низкого уровня, предназначенный для исполнения виртуальной машиной Ethereum.

В силу того, что любая блокчейн-система является децентрализованной средой, где каждый блок и каждая транзакция доступны для изучения любым участником сети, то и смарт-контракты Ethereum не являются исключением. Но поскольку контракт хранится в блокчейн-базе в формате байт-кода, для того, чтобы разобраться с принципом его действия, используются специальные декомпиляторы. Это программы, приводящие код в относительно «читаемый» вид, хотя и далекий от исходного – того, в котором он был изначально создан программистом смарт-контракта. Декомпилятор не может восстановить исходные названия переменных, а также все комментарии, сделанные программистом к своему коду. Таким образом, воспроизведение изначальной логики алгоритма после процесса декомпиляции кода смарт-контракта становится непростым делом. Бывают, правда, и обратные ситуации, когда создатели смарт-контрактов публикуют исходный текст своего кода для обеспечения большей прозрачности и доверия к своим алгоритмам. Для публикации используются внешние интернет-ресурсы, где можно ознакомиться с текстами кодов в легко читаемой форме, содержащей необходимые комментарии.

Как и любая обычная компьютерная программа, смарт-контракт обладает различными функциональными возможностями. То есть для одних смарт-контрактов достаточно нескольких строк кода, а другие могут представлять собой сложные алгоритмы, состоящие из сотен и даже тысяч строк. Это говорит в первую очередь о том, что с точки зрения приложения вычислительных усилий смарт-контракты отнюдь не равноправны – для обработки каждого из них требуется различное процессорное время. Из этого обстоятельства вытекает логичный вопрос: каким же образом формировать мотивацию майнера при обработке подобных контрактов? А что, если код смарт-контракта будет содержать, например, бесконечный цикл, который введет компьютер обработчика в состояние «зависания», когда он будет бесконечно пытаться выполнять один и тот же набор операций по кругу? Чтобы защитить систему от подобных ситуаций, в Ethereum предусмотрена модель оплаты вычислительной мощности при помощи специального «топлива» для обработки смарт-контрактов. Такой вид «топлива» в Ethereum обычно называют «газ», поскольку этот термин созвучен его английскому написанию (gas), хотя есть и другие варианты перевода этого слова.

Как ни странно, главная расчетная криптовалюта сети Ethereum – эфир – была создана в первую очередь для важнейшей утилитарной цели – оплачивать газ для обработки смарт-контрактов. Сам газ является счетной, но немонетарной величиной и напрямую отражает объем затрачиваемого вычислительного ресурса на запуск кода смарт-контракта майнером. Для каждого оператора байт-кода сети Ethereum существует его фиксированная «стоимость», номинированная в единицах газа. Простые операторы вроде арифметических действий «стоят» дешевле. Тогда как сложные, например, процедуры хеширования – дороже. То есть в систему изначально было заложено подобие «прайс-листа», на основе которого всегда можно рассчитать, сколько газа уйдет на обработку конкретного смарт-контракта. Поскольку обычные транзакции на перевод криптовалюты от одного адресата к другому тоже требуют вычислительной обработки, то и у них имеется свой эквивалент «газовой стоимости». Обычно стандартная транзакция обходится в 21 000 газа, вопрос только в том, сколько стоит сам газ.

Ценообразование на газ всегда зависит от текущей нагрузки на сеть Ethereum. Если в очереди на обработку и включение в блок стоит много транзакций, майнеры начинают отдавать приоритет тем, чьи отправители указали более высокую стоимость газа. Перед стартом первой версии клиента сети Ethereum было установлено, что единица газа будет стоить 10 000 Gwei, или одну стотысячную долю эфира. Сейчас эта цена считалась бы исключительно высокой, поскольку цена монет эфира с момента запуска проекта очень сильно выросла, хотя и далека от своего исторического максимума. Тем не менее если покупать газ по такой цене, то стоимость отправки обычной транзакции сегодня обошлась бы в сумму около $30.


Скачать книгу "Блокчейн. Принципы и основы" - Александр Цихилов бесплатно


100
10
Оцени книгу:
0 0
Комментарии
Минимальная длина комментария - 7 знаков.
Книжка.орг » Бизнес » Блокчейн. Принципы и основы
Внимание