цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Что такое язык программирования смарт-контрактов Solidity

Что такое язык программирования смарт-контрактов Solidity

Автор: Mike(admin) от 18-11-2017, 13:55

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


язык программирования смарт-контрактов Solidity

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


Solidity – это инструмент, который применяется для создания кода машинного уровня, который может выполняться на EVM. По сути, это язык с компилятором, который берет высокоуровневый читаемый человеком код и разбивает его на простые инструкции, которые составляют основу любой исполняемой программы микропроцессора. Solidity позволяет создавать и выполнять интеллектуальные контракты, не требуя централизованных или доверенных сторон. Это статически типизированный язык программирования контрактов, который имеет сходство с такими языками программирования, как javascript и C. Подобно объектам в ООП, каждый контракт содержит переменные состояния, функции и общие типы данных.


Solidity является всего лишь одним из нескольких языков, которые могут компилировать написанные программы в байт-код EVM. Другой язык, который делает то же самое, называется Serpent. Каждый из них может иметь несколько инструментов компиляции, но все они делают то же самое – генерируют байт-код на машинном уровне EVM для запуска приложений на узлах сети Ethereum.


Сразу стоит отметить, что при использовании Solidity (как и другого подобного инструмента Ethereum) существует высокий риск и высокая стоимость ошибок, поэтому вы должны быть очень осторожны при тестировании своих приложений. Необходимо несколько раз просмотреть код и найти возможные ошибки и несоответствия, прежде чем начинать развертывание программы в сети.


Сам по себе Solidity – довольно простой язык и по своей структуре похож на многие другие классические языки программирования. Это свободно типизированный язык с синтаксисом, очень похожим на ECMAScript (javascript). Есть несколько ключевых моментов, которые следует помнить из документа Ethereum Design Rationale, а именно, что мы работаем в модели стека и памяти (stack-and-memory) с 32-байтным размером слова инструкции. EVM дает нам доступ к программному «стеку», который похож на пространство регистров, в котором мы также можем вводить адреса памяти, чтобы организовать циклы loop/jump (для последовательного управления программой), расширяемую временную «память» и более постоянное «хранилище», которое фактически записывается в постоянный блокчейн, поскольку EVM требует полного детерминизма в рамках интеллектуальных контрактов.


Это требование детерминизма является причиной того, что вы не увидите функцию random() в языке Solidity. Когда блок Ethereum майнится (добывается или расшифровывается), на узле, который намайнил блок, запускается развертывание смарт-контракта и вызовы функций внутри этого блока, и транзакции в рамках этого смарт-контракта фактически происходят на этом майнерском узле. Затем новый блок распространяется на все остальные узлы, и каждый узел пытается самостоятельно проверить блок, который также включает в себя те же изменения состояния, что и их локальная копия. В связи с этим и нужна детерменированность. Если другие узлы не могут прийти к консенсусу относительно состояния блока после того, как новый блок и его контракты будут выполнены, сеть может буквально остановиться.


Другим ограничением, которое вы найдете в смарт-контрактах EVM, является невозможность доступа к данным за пределами «памяти» и «хранилища» (мы не хотим, чтобы смарт-контракт мог читать или удалять данные на жестких дисках узлов, на которых он выполняется) и невозможность запросить внешние ресурсы, например, с помощью JQuery. У нас фактически нет доступа ко многим библиотечным функциям, например, для парсинга JSON-структур или выполнения арифметики с плавающей запятой, и на самом деле это невозможно для выполнения этих подпрограмм или хранения большого количества данных в самом блокчейне Ethereum.


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


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


Нет, это не так. Вот здесь и выходят на сцену «оракулы» (oracle). Мы можем сделать вызов оракулу, который сообщит нам что-то о внешнем мире и будет работать с этими данными в рамках смарт-контракта. Ключевым моментом здесь является то, что, хотя сами события реального мира не детерминированы, оракулу узлы могут доверять, и он будет отвечать на каждый запрос узла о том, что произошло детерминированным способом, так что все узлы все еще могут прийти к консенсусу.




© digitrode.ru


Теги: криптовалюты, Ethereum, Solidity, блокчейн




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий