Концепция криптопрограммирования
Вкратце, криптопрограммирование — это разработка программного обеспечения с использованием технологий блокчейна, а также их комбинации с более знакомыми фреймворками и языками, такими как React и C++.
Разработка криптовалют и блокчейна становится все более востребованной. Это работа с огромными зарплатами, бесконечным количеством вакансий и неограниченным потенциалом на будущее. Это большая основа для будущего, которая продвигает эти технологии далеко вперед.
Дело в том, что криптовалюты и блокчейн лягут в основу экономики будущего, где балом будут править децентрализованные финансовые системы. А сама технология блокчейн оказалась достаточно универсальной, чтобы быть полезной не только в строго финансовых вопросах (инвестиции, аукционы, коммерческие отношения и т.д.), но и в других сферах человеческой деятельности.
Выбрав криптопрограммирование, вы будете создавать программы, как и другие разработчики, но под колпаком ваших проектов всегда будет код, непосредственно связанный с самыми передовыми существующими технологиями.
Кто такой разработчик криптовалюты?
Разработчик криптовалюты — это человек, который не просто близок к компьютерам и знает, как создать страницу или код, но и тот, кто хорошо знаком с технологиями децентрализованных финансов. В лучшем случае — наличие опыта работы с серверной составляющей программ, а в худшем — хотя бы понимание того, как писать программный код в принципе.
Такой разработчик занимается созданием серверного кода для децентрализованных приложений, которые называются приложениями. Обычно они существуют в сети Эфириум (Ethereum) и представляют собой не что иное, как смарт-контракты.
Что такое «Эфириум»?
Эфириум — это целая блокчейн-среда, которая позволяет каждому запускать программы в надежной среде, поддерживаемой смарт-контрактами.
В отличие от биткоина, платформа Эфириум позволяет вам взаимодействовать не только с криптовалютами, но и с другими данными.
Соответствующие программы выполняются в среде, называемой EVM (виртуальная машина Эфириум). Она позволяет преобразовывать код, написанный людьми, в набор символов для блокчейна, и поддерживает смарт-контракты, созданные для выполнения определенных задач внутри блокчейна. Он также использует свою собственную валюту, называемую Эфиром.
Это самая крупная система в своем роде и в то же время самая популярная. В большинстве случаев работодатели ищут криптопрограммистов для создания программного обеспечения, которое будет реализовано в интерфейсе проекта Эфириум.
Смарт-контракты
Это код, который выполняется в среде EVM и способен обрабатывать передаваемые в него данные. Для смарт-контрактов написаны функции, позволяющие манипулировать передаваемой им информацией. Вы можете обмениваться данными с другими смарт-контрактами или, на основе полученной информации, передавать их между пользователями смарт-контрактов.
Смарт-контракт позволяет вам исключить третью сторону из любой транзакции. Программный код будет отвечать за справедливость: открытый, неподкупный и работающий корректно.
Криптопрограммисты занимаются созданием смарт-контактов, позволяющих обитателям блокчейн-сети совершать транзакции, связанные с Эфиром.
Какие языки и библиотеки используются в криптопрограммировании?
Для создания смарт-контрактов и других компонентов криптовалютой сети, используются как традиционные языки общего назначения, так и новые, созданные специально для работы с Эфириумом или его аналогами.
К четырем наиболее популярным из них относятся:
- Solidity. Это лидер в своей области. Первый язык, который стоит выучить для того чтобы начать создавать приложения и смарт-контракты. Язык основан на JavaScript и C++. У него строгая типизация и довольно минимальные требования для новичков. Мы поговорим о языке разработки Solidity Ethereum позже в этой статье.
- Java. Мощная платформа, зарекомендовавшая себя в десятках областей разработки, включая создание программного обеспечения для мобильных операционных систем. Java востребован в блокчейн-среде благодаря строгому соблюдению принципов ООП и обилию библиотек, необходимых при работе с криптовалютами.
- Vyper. Безопасный и функциональный язык программирования с синтаксисом, заимствованным из Python. Он ориентирован на работу с EVM и создание смарт-контрактов.
- Python. Сам Python тоже не смог преодолеть эту вершину. Один из самых универсальных и вездесущих языков также нашел свое место в реальном мире блокчейна.
Как начать карьеру в криптопрограммировании?
Чтобы начать работу в этой сфере, нет каких-то особых требований. Из-за высокого спроса, требования не особенно строги, но одного энтузиазма недостаточно. Необходимо приобрести базовые знания и углубиться в изучение языков программирования блокчейна.
Чему мне нужно научиться и что мне нужно знать?
Для начала стоит почитать о блокчейне в целом. Нам нужно понять, как работает вся система в общих чертах. Знакомство с техническими особенностями реализации необязательно, по крайней мере, на ранних стадиях.
После этого вам нужно определиться с языком. Для начинающих рекомендуется использовать Solidity, так как его легче понять. Следующим этапом должно быть либо углубленное изучение документации с постоянной самостоятельной практикой, либо посещение соответствующих курсов.
Что касается оборудования, то вам ничего не нужно. Достаточно открыть веб-среду IDE под названием Remix и написать свой первый смарт-контракт в соответствии с инструкциями на официальном сайте Solidity.
Какую среду в Remix IDE можно использовать для подключения частной тестовой сети?
Вы можете получить доступ к Remix IDE различными способами: через Интернет, через веб-браузер, такой как Chrome, из локальной копии или из Mist (браузер Ethereum Dapp).
Использование встроенной в браузер среды разработки Remix IDE
Вы можете получить доступ к Remix IDE из своего веб-браузера без какой-либо специальной установки. Посетите сайт https://remix.ethereum.org , и вам будет представлена полная среда разработки с редактором кода и различными панелями для компиляции, запуска и отладки ваших смарт-контрактов. У вас будет пример контракта с рассылкой новостей по умолчанию, с которым вы можете играть.
Remix IDE
После Solidity вам нужно будет изучить используемые фреймворки: Truffle для упрощения создания смарт-контрактов, Ganache для тестирования программного обеспечения в виртуальной блокчейн-сети, Web3.js для соединения серверного компонента вашего детища с фронтальной частью (это может быть React или Vue).
На онлайн-курсах вы получите образование сразу по всем аспектам. Многие активные разработчики Solidity получили профессию сразу после курсов. Среднее время обучения занимает менее шести месяцев.
Перспективы и будущее
Криптопрограммирование — это новый этап профессии разработчика, который постоянно набирает популярность. Если вы заинтересованы в перспективной и прибыльной работе, вам следует обратить внимание на разработку блокчейна.
Практическое руководство по разработке Эфириума. Программирование смарт-контрактов Solidity.
Если вы создаете DApp на базе Ethereum или токен ERC20, вам необходимо изучить язык Solidity. Хотя блокчейны не зависят от языка и многие из существующих языков используются блокчейн-инженерами, существуют некоторые задачи, которые не могут быть удобно реализованы существующими языками. Это открыло спрос на новые, специфичные для криптовалют варианты. Одним из таких языков является Solidity.
Независимо от того, являетесь ли вы опытным разработчиком или только начинаете заниматься криптографией, было бы неплохо начать изучать Solidity, потому что смарт-контракты стали важной частью экосистемы блокчейна. В дополнение к активному внедрению dApps, они активно интегрируются в блокчейны на уровне инфраструктуры и даже в биткоины через таких провайдеров, как RSK. Зная, как создавать смарт-контракты, вы сможете отслеживать, как работают блокчейн-программисты, и сможете находить лучшие решения.
Документация Solidity
Основы смарт-контрактов
В рамках разработки смарт-контракт состоит из трех разделов: баланс, хранилище и коды. Баланс показывает, сколько Эфириума есть в смарт-контракте. Хранилище содержит такие данные, как строки и массивы, которые специфичны для каждого приложения. Раздел кода содержит необработанный машинный код, который компилируется из того, что мы пишем в Solidity.
В отличие от учетных записей пользователей, учетные записи смарт-контрактов не являются внешними по отношению к соответствующим сетям. Другими словами, вы можете использовать свой кошелек в различных сетях, таких как Kovan и Ropsten, но вы не можете сделать это с помощью смарт-контракта. Смарт-контракты являются внутренними.
Каждый смарт-контракт имеет источник, который хранится на устройстве автора, и экземпляры, которые хранятся в блокчейне. Чтобы создать экземпляр (учетную запись) смарт-контракта, нам необходимо развернуть его в сети. Это очень похоже на отношения между классами и экземплярами в традиционном объектно-ориентированном программировании (ООП) и языках, представляющих его (JS, Ruby). Чтобы дать вам более наглядное представление, давайте создадим класс Bike и добавим его экземпляр.
Bike class & instance
Мы напишем определение контракта, которое затем будет запущено через компилятор, который создаст два файла: байт-код и двоичный интерфейс приложения (ABI). Байт-код — это то, что на самом деле будет передано в EVM, а ABI — это слой между байт-кодом и обычным кодом JavaScript, который позволяет создавать пользовательский интерфейс (UI).
Выбор версии IDE и Solidity
Прежде чем мы начнем, нам нужна надлежащая интегрированная среда разработки (IDE). Другими словами, нам нужен удобный терминал с необходимыми инструментами для написания нашего кода. Для целей этого руководства мы выберем Remix, IDE, созданную Ethereum Foundation, которая позволяет вам писать, тестировать, отлаживать, запускать смарт-контракты и многое другое. Вы можете использовать его либо непосредственно в браузере, либо загрузить локально, если хотите.
После запуска Remix, вы увидите редактор кода в центре, файловый менеджер слева и компилятор справа.
Окно Initial Remix
Там будет какой-то заранее написанный код — он нам не понадобится. Чтобы создать первый уникальный смарт-контракт, давайте нажмем на значок плюса в левом верхнем углу терминала и дадим ему имя.
Создание нового проекта в Remix
Итак, мы должны указать версию Solidity, которую будет запускать компилятор. На момент написания этого руководства последней версией была 0.5.7. Если вы не уверены, какую версию использовать, вы можете указать диапазон версий.
Версия или диапазон версий Solidity
Давайте дадим нашему смарт-контракту имя, за которым последуют круглые скобки.
Название контракта
Пишем ваш первый смарт-контракт
Как только у нас будет готов холст, настало время определить основные строительные блоки — переменные. Хотя у опытных разработчиков программного обеспечения не возникнет проблем с пониманием этой концепции, мы кратко познакомим с ней новичков. Переменные являются заполнителями для частей информации, на которые впоследствии ссылается программа, которая их запускает.
Давайте создадим пару переменных: строку (последовательность символов) и целое число. В случае Эфириумом, переменные хранятся в блокчейне вместе с остальными контрактами и, следовательно, могут быть доступны и обновлены из любого места. Еще одной ключевой характеристикой переменных Solidity является то, что вы можете сделать их закрытыми, написав “private” рядом с переменными. Наконец, для целых чисел Solidity имеет два типа: со знаком (может быть положительным и отрицательным) и без знака (может быть только положительным). Чтобы указать переменную без знака, мы должны просто поставить перед ней букву «u».
Скрытая строка и целое число
Когда у нас есть переменная name, нам нужно написать методы установки и получения. Это похоже на функцию JS. Помните, что Solidity имеет статическую типизацию, поэтому мы должны определить типы переменных. Теперь любое значение, которое мы вводим в ‘setName’, будет определять строку ‘name’. Чтобы получить его, мы будем использовать getName и укажем, какую переменную мы ожидаем увидеть. Теперь пришло время сделать то же самое для переменной age. Метод построен аналогично getName.
Устанавливаем имя и возраст
Давайте проверим наш маленький фрагмент кода. Перейдите на вкладку “Выполнить” компилятора и нажмите “Развернуть” под названием вашего контракта. В самом низу компилятора вы увидите раздел “Развернутые контракты”, где доступны наши методы. Чтобы передать имя в значение “Newname”, нам нужно убедиться, что наша строка записана в формате JSON. В противном случае “getName” ничего не вернет. Для “setAge” просто укажите свой возраст без кавычек. Как вы можете видеть, теперь мы можем устанавливать и получать переменные имени и возраста с помощью нашего смарт-контракта.
Компилятор
Что такое Wei и газ?
Одной из самых замечательных особенностей смарт-контрактов является то, что для их развертывания в сети Эфириума вам нужно будет инициировать транзакцию, которая стоит определенной суммы денег, которая выплачивается в Эфире. Чрезвычайно важно понимать, как используются сборы в системе, поскольку они будут вычитаться каждый раз, когда вы взаимодействуете с EVM.
Что такое Wei?
Давайте предположим, что, читая наш урок, вы хотя бы раз использовали биткойн. Вероятно, вы совершили небольшую транзакцию стоимостью менее 1 BTC. В данном случае вы использовали сатоши, что-то вроде центов на доллар. Wei похож на Satoshi — это наименьшая часть 1 Эфира. Если мы подумаем об этом с точки зрения программирования, то это самое низкое целое число без знака в сети. Взаимодействуя с сетью, вы чаще всего сталкиваетесь с Gwei, который принадлежит Gigawee и равен 1 миллиарду Wei.
Что такое газ?
Газ является неотъемлемой частью механизма исполнения смарт-контрактов. Он имеет два значения для каждой транзакции: потребляемый газ и его цена. Стоит отметить, что пользователь, инициирующий транзакцию, сам определяет эти значения. Однако, если заданного значения газа недостаточно для выполнения определенной операции, то газ будет израсходован, но транзакция не будет выполнена. Более того, если цена на газ установлена слишком низкой для сети в данный момент времени, транзакция не будет обработана узлами, что в конечном итоге сделает ее неудачной. Существует несколько сервисов для проверки оптимальных значений для ваших транзакций, одним из которых является ethgasstation.info. Чтобы лучше понять газ и почему он стоит определенных денег, давайте начнем кодировать некоторые из них сами.
Вернитесь к окну Remix и создайте новый файл. В нашем примере мы назовем его “Gas” и создадим контракт с тем же именем. Имейте в виду, что чем больше данных нам нужно хранить в блокчейне, тем больше газа нам понадобится. В то же время, для целей этого урока, мы создадим дешевый контракт. Чем больше вы добавите к нему, тем выше будет плата.
Существует функция, которая возвращает целое число, представляющее собой сумму двух входных данных. Чтобы сделать это как можно проще, мы укажем, что наш контракт ничего не будет хранить в блокчейне, и для этого мы добавим “pure” рядом с функцией.
Дешевый контракт
Теперь вы можете развернуть его в компиляторе и ввести любые два числа, чтобы получить целое число “c”. Чтобы проверить цену нашей транзакции, мы должны посмотреть на терминал, расположенный под разделом кода. Существует стоимость транзакции и стоимость исполнения. Первый относится к тому, сколько данных содержится в транзакции. Второй относится к тому, сколько энергии EVM потребовалось для транзакции.
Это очень простая транзакция, которая практически ничего не стоит сети. При написании содержательных смарт-контрактов, вы добавите больше деталей, что увеличивает их вес и, следовательно, комиссионные за транзакции.
Создание и развертывание вашего собственного токена ERC20. Выпуск токенов и создание ICO
Давайте посмотрим правде в глаза, большинство разработчиков блокчейнов, которые только начинают свою деятельность, склонны играть по-крупному и создавать свои собственные блокчейны и токены. Хотя это чрезвычайно сложная тема, которая привлекла некоторых из лучших разработчиков программного обеспечения из других областей, создание базового токена ERC20 не является сложной задачей.
Во-первых, нам нужно создать еще один файл в Remix и загрузить интерфейс ERC20, а именно:
Стандарт ERC20
Функция totalSupply позволяет нам увидеть, сколько всего у нас токенов. Функция баланса используется для получения количества токенов по определенным адресам. Функция передачи позволяет пользователям совершать транзакции между собой. Функции “transferFrom”, “allow” и “approve”позволяют пользователям разрешать другим пользователям инициировать транзакции от их имени. События — это инструменты регистрации для главной книги.
В дополнение к самому интерфейсу нам понадобится отдельный файл. Здесь мы импортируем интерфейс ERC20 и указываем символ, имя и десятичные числа нашего токена.
Токен uToday
Прежде чем мы скомпилируем его, нам нужно указать ограничения:
- Давайте начнем с общего предложения — это постоянная целочисленная переменная, которую мы сделаем частной. Общий запас наших токенов составит 1 миллион. Мы также напишем функцию для возврата этого значения.
- Во-вторых, нам нужно где-то хранить наши токены. Чтобы сделать это, нам нужно будет указать сопоставление, которое вернет баланс для любого указанного адреса.
- В-третьих, должна быть функция передачи токенов, которая, по сути, будет содержать адрес получателя и количество переданных токенов. Эта функция также должна иметь возможность проверять, достаточно ли у отправителя токенов на его балансе, что может быть реализовано с помощью простого оператора if/then. Кроме того, мы установим условия для ‘_value’, чтобы пользователи не могли отправлять транзакции с токенами “0”, так как это приведет к засорению сети различным мусором.
- В-четвертых, нам нужно создать отображение для остальных функций, которое представляет собой целочисленное отображение.
- Затем мы зададим несколько проверок в функциях “утвердить” и “разрешить” и установим условия для «Переноса».
- В конце концов, не все токены будут доступны на рынке. Некоторые из токенов обычно зарезервированы для команд, фондов, консультантов и других целей. Поэтому важно, чтобы мы четко указали, сколько токенов будет циркулировать в системе. Когда мы создаем токены, оборотное предложение равно нашему балансу.
Ограничения токена UToday
Код готов, так что давайте проверим его. Перейдите на вкладку “Выполнить” компилятора и разверните наш контракт. Вы увидите, что у нас есть данные токена, а также общее предложение, остатки средств и доплаты. Поздравляем, вы создали свой первый токен.
Для того, чтобы наш токен действительно работал в сети, нам необходимо развернуть смарт-контракт (обратите внимание, что это отличается от его развертывания для тестирования в Remix). В этом уроке мы будем использовать Remix и MetaMask, но есть и другие способы сделать это. MetaMask — это простая, но эффективная программа для кошелька Ethereum с приятным пользовательским интерфейсом, которая интегрируется в качестве расширения в некоторые из самых популярных браузеров. В нашем случае мы будем использовать Opera. Во-первых, перейдите к metamask.io и загрузите расширение. Как только это будет сделано, вы увидите иконку лисы в правом верхнем углу вашего браузера.
Нажмите на значок и следуйте предложенным инструкциям, чтобы создать кошелек. Не забудьте сохранить секретную фразу! Когда у вас есть кошелек, нажмите на значок MetamMask и измените сеть на “Ropsten”, потому что мы не хотим связываться с основной сетью Эфириума.
Последний шаг — создать немного Эфира (к сожалению, вы не сможете использовать его для каких-либо реальных покупок, но они необходимы для тестирования). Перейдите к faucet.metamask.io и запросите 1 эфир.
Теперь у вас все готово. Вернитесь к окну Remix и измените среду в компиляторе на “Injected Web3”. Кроме того, взгляните на вкладку учетной записи — ваш адрес должен совпадать с адресом, который вы создали в MetaMask. Выберите смарт-контракт, который вы хотите развернуть, который является вашим токен-контрактом, но не интерфейсом ERC20, и нажмите соответствующую кнопку. Появится окно MetaMask с транзакцией, ее деталями и вариантами взаимодействия с ней. Отправьте транзакцию, и наш токен оживет.
Теперь вы можете поиграть со всеми функциями, о которых мы упоминали ранее. Давайте посмотрим на наш контракт с другой стороны, чтобы убедиться, что он работает правильно. Как и в любом другом блокчейне, в Эфириуме есть несколько исследователей блоков, которые служат основной цели мониторинга того, что происходит в сети. В нашем случае мы будем использовать Еtherscan, хотя есть несколько других отличных альтернатив. Обратите внимание, что если вы просто войдете в Etherscan, вы увидите основную сеть. Поскольку нам нужно увидеть сеть Ropsten, вам нужно будет поставить “ropsten” перед адресом сайта. Найдите свой адрес, и вы увидите две транзакции — одну для бесплатного Эфира, который вы получили, а другую для развертывания контракта.
Чтобы найти адрес вашего контракта, нажмите на TxHash и перейдите в поле «Кому». Здесь вы можете проверить транзакции, код и события вашего смарт-контракта. На данный момент нам нужно проверить и опубликовать наш контракт. Перейдите в раздел «Код» и нажмите на ссылку «Проверить и опубликовать». Здесь вам нужно будет снова указать имя вашего токена, версию компилятора (в нашем случае последней версией Solidity, которую мы использовали, была 0.5.7, поэтому мы будем придерживаться соответствующей версии компилятора). Теперь вам нужно скопировать код смарт-контракта токена вместе с кодом интерфейса ERC20 из окна Remix в Etherscan и нажать «Подтвердить и опубликовать» («Confirm and Publish» ‘Verify and Publish’) в нижней части экрана.
Проверка смарт-контракта
Пришло время вернуться к адресу вашего контракта. Код на вкладке «Код» теперь будет подлежать проверке. Кроме того, теперь у вас будут еще две вкладки: «Прочитать контракт» и «Написать контракт». В разделе «Чтение» мы можем проверить функциональность нашего токена. Введите свой адрес (не адрес контракта) в поле «balanceOf», чтобы узнать, сколько у вас токенов; он должен показать 1 миллион, который мы жестко запрограммировали как общий запас и перевели на наш кошелек. Это означает, что наш токен теперь корректно работает в тестовой сети.
Если вы хотите начать карьеру разработчика в криптоиндустрии, вы должны понимать, что, несмотря на свою относительную простоту в основе, блокчейн обладает невероятной гибкостью и функциональностью. С 2017 года блокчейны значительно эволюционировали, и варианты их использования вышли за рамки просто финансовых транзакций. С появлением Эфириума возник совершенно новый уровень сетей, в которых размещаются различные приложения dApps и решения на основе блокчейна. Инструментом этой эволюции стал смарт-контракт, и если вы хотите расширить свой опыт, сделать его более ценным и ориентированным на будущее, вам нужно знать, как он работает.
Если вы можете кодировать смарт-контракты с использованием других языков, Solidity все равно лучше всего подходит для этих целей. Более того, если вы хотите стать разработчиком Эфириума или создать токены ICO/ERC20 для своего проекта, это определенно ваш выбор. Если у вас есть какой-то опыт работы с C++ или JavaScript, кодирование в Solidity должно быть относительно легким для вас. Однако вам придется понять некоторые различия между клиент-серверной и децентрализованной моделями запуска программного обеспечения. Благодаря Ethereum Foundation и некоторым сторонним организациям, разработчикам предоставляется набор удобных инструментов, таких как Remix и Etherscan, для кодирования и развертывания смарт-контрактов.
Мы надеемся, что наша статья помогла вам понять большинство концепций Solidity, чтобы начать увлекательное путешествие по изучению технологии блокчейн. Помните, что вы всегда можете ознакомиться с последней документацией Solidity.