Смарт-контракты на Solidity. Краткий обзор.
Концепция так называемых смарт-контрактов существует с 1994 года. Тогда Ник Сабо сравнил их с цифровыми торговыми автоматами. По сути, смарт-контракты — это просто программы — код и данные в блокчейне. Они выполняются при выполнении ранее определенных условий. Обычно они используются для автоматизации выполнения соглашения, чтобы все участники знали результат немедленно, без задержек и необходимости в посредниках. Целые процессы также можно автоматизировать с помощью смарт-контрактов. Если условия, определенные в смарт-контракте, выполнены, запускается следующее действие. Для лучшего понимания что такое смарт-контракты, рекомендуем прочитать нашу статью: Что такое смарт-контракты и почему это важно.
Смарт-контракт не контролируется людьми, но имеет собственный внутренний код. Поскольку он находится в блокчейне, его нельзя подделать и нет места для интерпретации. Это главное преимущество смарт-контрактов вытекающее из преимущества самого блокчейна, а именно его децентрализации. Поскольку нет единого сервера отвечающего за выполнение кода, это означает что подделать результат такого кода будет невозможно, иначе придётся взламывать все компьютеры в сети блокчейн.
Есть много других возможных вариантов использования, таких как децентрализованные приложения WEB 3.0, децентрализованные финансовые продукты или торговля цифровыми активами в форме так называемых невзаимозаменяемых токенов, или сокращенно NFT.
Что такое Solidity
Самым популярным инструментом для разработки смарт-контрактов был и остаётся Ethereum. Это блокчейн-первопроходец в мире смарт-контрактов. Для написания смарт-контрактов в сети Ethereum используется собственный язык программирования Solidity.
Solidity выпущен в 2014 году. Это так называемый язык программирования высокого уровня для написания смарт-контрактов с синтаксисом, аналогичным таким языкам, как C++ или TypeScript и JavaScript. Solidity компилируется, статически типизируется и заимствует структуры из объектно-ориентированного программирования. Solidity в основном упоминается в одном ряду с Ethereum, но также поддерживается другими EVM-совместимыми платформами, например Tron, Tendermint или Kin.
Solidity полон по Тьюрингу, а это значит что в отличии от смарт-контрактов в сети Bitcoin, смарт-контракты в Ethereum могут быть гораздо сложнее и эффективней. Смарт-контракты написанные на Solidity запускаются на специальной виртуальной машине Ethereum, именуемой EVM (Ethereum Virtual Machine). Эта машина представляет собой децентрализованную виртуальную машину, полную по Тьюрингу и распределяется она по всем участникам сети Ethereum.
После написания смарт-контрактов, они загружаются в виртуальную машину, после чего добавляются в общий блокчейн при обработке блока майнерами. Сами смарт-контракты обрабатываются узлами блокчейна, а узлами могут быть любые участники сети, так как Ethereum не имеет разделения на права доступа. Узлы запускают виртуальную машину EVM.
Каждый смарт-контракт в такой системе имеет собственный Ethereum адрес. Это позволяет ссылаться на него другим участникам сети и смарт-контрактам, делая их более сложными.
Первый смарт-контракт в Solidity
Если вы хотите написать свой собственный смарт-контракт, то лучше всего делать это в приватном блокчейне, иначе тестировать его будет очень сложно. Для этого рекомендуем вам установить Ganache, данный инструмент позволяет создавать приватный блокчейн работающий только на вашей машине.
Чтобы написать свой первый смарт-контракт, вы должны создать файл с расширением .sol в редакторе по вашему выбору. Проект Solidity на GitHub рекомендует для начала работу Remix, это IDE работающая прямо из браузера. Здесь вы можете писать свои первые смарт-контракты с Solidity и управлять ими без локальной установки. Remix уже содержит компилятор языка Solidity, а это значительно сэкономит ваше время при написании своего первого смарт-контракта.
При открытии Remix вы уже увидите некоторый набор файлов, эти файлы являются просто примером и их можно безболезненно удалить, чтобы потом создавать свои файлы формата .sol.
Создайте свой первый .sol файл, и добавьте в него код. Например, мы можем написать код возвращающий время выполнения блока в блокчейне, тогда код будет выглядеть так:
pragma solidity ^0.4.0;
contract BlockTime {
function getTime () public view returns(uint256 time) {
return block.timestamp - 30 days;
}
}
Здесь, ключевое слово pragma сообщает компилятору, какую версию Solidity использовать.
Контракт с ключевым словом определяет детали вашего смарт-контракта. Ключевое слово «contract» сопоставимо с классом в JavaScript, TypeScript или Python.
Solidity имеет специальный тип данных, называемый адресом, который используется для хранения адреса Ethereum. С помощью ключевого слова struct вы можете определять более сложные типы данных и, таким образом, представлять различные сущности вашего смарт-контракта. С помощью ключевого слова function вы можете определять функции, которые могут использоваться для изменения состояния смарт-контракта.
Грубо говоря, это и есть смарт-контракт. Такая программа не несёт в себе ничего полезного и просто может возвращать время блока, однако мы и не преследовали цель создать полноценный смарт-контракт, это уже зависит от того кто этим будет заниматься.
Для дальнейшей работы со своим смарт-контрактом вам необходимо установить и запустить приложение Ganache, о котором мы писали выше. Для этого достаточно скачать его и запустить index.html. Однако далее вам необходимо заменить сеть на локальную, для этого выберите в правом верхнем углу тип Custom и введите произвольное название ноды и локальный адрес (127.0.0.1).
После этого вам необходимо задеплоить (развернуть) созданный смарт-контракт. Лучшим способом будет для этого развернуть MyEtherWallet у себя на компьютере. Это довольно несложный процесс, однако если вам понадобится разъяснение, мы можем добавить это в свою статью.