Язык Solidity для Ethereum: в чем его специфика и как его учить

1214
Просмотры
Язык Solidity для Ethereum: в чем его специфика и как его учить

Когда мы вспоминаем Ethereum, вероятно, на ум приходит его мощная система смарт-контрактов, которая как раз и использует Solidity как основной инструмент разработки.

Для тех, кто не знает, умные контракты — это, что-то типа программ, которые существуют в блокчейне Ethereum. Они выполняют различные задачи, например, отправка или получение токенов Ether или других ERC-20.

Как и все компьютерные программы, контракты Ethereum написаны на языке программирования. Язык для блокчейна Эфириум называется Solidity. Но также есть и другие языки, совместимые со смарт-контрактами Ethereum.

Мы рассмотрим основы Solidity и расскажем, где найти ресурсы для более глубокого знакомства с языком смарт-контрактов.

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

Большинство профессиональных программистов сегодня используют один или несколько популярных современных языков программирования. Это C (си) (и C ++, C # и т. д.), Python, Java (и JavaScript), Perl или другие. Solidity был разработан так, чтобы ему могли легко учиться программисты, которые уже знакомы с одним или несколькими современными языками.

Если вы владеете только чем-то вроде Visual Basic, то при освоении Solidity могут возникнуть трудности. Но если вы знакомы с Python или C, язык смарт-контрактов Ethereum покажется относительно знакомым.

Solidity не изобретает ничего нового: также содержит переменные, функции, классы, арифметические операции и прочее. Solidity работает с «контрактом», который создается из этих конструкций.

Наиболее всего синтаксис похож на JavaScript.

Попробовать язык можно прямо из браузера, например на remix.ethereum.org, который представляет собой онлайн редактор с возможностью отладки и запуска вашего кода. Также вы можете использовать реализацию протокола на других языках например Go https://geth.ethereum.org/.

Вот несколько рандомных примеров кода:

Solidity трудно учить?

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

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

Рекомендуем также нашу статью — что нужно знать начинающему блокчейн разработчику

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

Вот некоторые образовательные ресурсы:

  • Для тех, у кого есть базовый опыт программирования, интересный Crypto Zombies. Это бесплатный сайт, где дается короткая задача по написанию кода. Криптозомби тематически крутится вокруг создания игры с использованием Solidity, поэтому круг задач будет соответствующий. Прохождение первой главы занимает около 1,5-2 часов. Пока курс не завершен. Разработчики заявили, что новые уроки будут выходить каждые несколько недель. И результатом должна стать полная игра, сделанная на Solidity. С этим ресурсом вы не станете лид-разработчиком, но Crypto Zombies действительно дает отличное введение во многие основные концепции программирования смарт-контрактов и синтаксиса Solidity.cryptozombies
  • Для более продвинутого уровня рекомендуем ресурс Block Geeks с бесплатным письменным курсом. Эту статью оценил Дмитрий Бутерин, отец Виталика.
  • Дальше переходит к платным. Те же Block Geeks предлагают видео-курсы по единому плану: 7 дней бесплатно, затем $29 в месяц или $299 в год.
  • BitDegree создает образование на блокчейне и учит блокчейну. Сайт предлагает онлайн-курсы, по завершении ученик получат онлайн-степень, которая зарегистрирована в блокчейне Ethereum. Пока BitDegree в ранней стадии, курсы стоят по $9, некоторые бесплатно. Видимо, затем будет рост цены. По смарт-контрактам на Solidity цена также 9 долларов вместо $189.99. Курсы доступны и для мобильного. В токенах BDG еще дополнительная скидка 20%.
  • На udemy.com предлагается большой курс по Solidity за $200, но часто скидки до 90 долларов.
  • Самые серьезные курсы от B9LAB.com, с соответствующей стоимостью. Академия предлагает обучение на 9 недель с сертификацией.
  • Русскоязычные ресурсы мы исследовали недостаточно, но то, что встречалось из бесплатных вариантов, больше охватывало теорию блокчейна без практики и не сильно отличалось от наших статей в разделе «База знаний» =)
  • Реальные разработчики могут поделиться с начинающими своими знаниями: на ресурсах https://dev.to/t/ethereum и в ветке на Реддит, имиджбордах или в чатах разработчиков в ТГ.

Стоит ли учиться Solidity?

Если вы думаете об изучении Solidity для работы, вы можете подумать о том, какие другие навыки вам понадобятся. Вакансии требуют, обычно, знать один из дополнительных языков NodeJS, GoLang или Phyton, которые будут для вас базой. Изучать связанные с блокчейном навыки может быть очень ценным, потому что конкуренция пока низкая, серьезных экспертов не хватает.

Дальше вопрос веры в Ethereum и будущее блокчейна. Нужно понимать, что если вы освоите работу со смарт-контрактами на одной платформе, другие для вас будут гораздо проще и как специалист вы будете очень ценны, так как кадров с опытом сейчас найти очень сложно, а это отличная прибавка к вашей зарплате. Тем более, что платформ со смарт-контрактми уже очень много (EOS, ETC, NEO и т.д), так что без работы вы точно не останетесь.

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


Основы Solidity и разработки смарт-контрактов

Переведем начало курса от Block Geeks, общие моменты про Solidity, а примеры кода, этапы написания и тестирование вы можете посмотреть в оригинале.

Сам язык Solidity — это инструмент, который мы используется для создания кода машинного уровня, чтобы он мог выполняться на EVM. Это язык с компилятором, который берет наш высокоуровневый читаемый код и разбивает его на простые инструкции, типа «перейти к инструкции в точке памяти xxxxx» и прочее.

Данный язык является одним из нескольких языков, которые могут быть скомпилированы в байт-код EVM. Другой язык, который делает то же самое, называется Serpent, только он основан на Pyton.

Solidity свободно типизированный язык с синтаксисом, очень похожим на ECMAScript (Javascript). Есть несколько ключевых моментов — работаем по модели stack-and-memory с 32-байтным размером инструкции. EVM дает:

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

EVM требует полного детерминизма в рамках смарт-контрактов.

Детерминизм является причиной того, что вы не увидите функцию «random()» в языке Solidity. Когда блок «ethereum» «майнится», развертывается смарт-контракт и вызываются функции внутри этого блока. И новое состояние меняет пространство хранилища или транзакции, так что смарт-контракт фактически выполняется в майнинг-ноде.

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

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

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

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

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

В остальном, сам код использует традиционные типы данных, операторы и команды.

Дальше примеры кода и тестирование можно посмотреть в The Ultimate Ethereum Coding Guide (ссылка не спонсирована).

Также на русском языке есть серия статей на Хабре, листайте к первой части в серии «Погружение в разработку на Ethereum».