Запуск Ethereum - ваш первый смарт-контракт

Руководство для начинающих по настройке вашего первого смарт-контракта на Solidity

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

Этот блог направлен на то, чтобы помочь вам преодолеть барьер «это невозможно», который волшебным образом появляется в начале (был там) и настраивает вас на отличное начало.

Если вы хотите узнать больше об Ethereum, прежде чем приступить к программированию, я бы посоветовал вам прочитать эту статью.

Что именно мы делаем?

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

В процессе вы познакомитесь с Remix, встроенной в браузер IDE (интегрированной средой разработки) для разработки смарт-контрактов и языком программирования Solidity.

Перво-наперво: что такое смарт-контракт?

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

Они будут существовать и исполняться, пока существует вся сеть, и исчезнут только в том случае, если они были запрограммированы на самоуничтожение. Таким образом, контракты могут выполняться пользователями вашего приложения, пока существует Ethereum.

Смарт-контракты могут:

  • Функционируют как учетные записи с несколькими подписями, так что средства расходуются только тогда, когда необходимый процент людей соглашается
  • Управляйте соглашениями между пользователями, например, если один покупает страховку у другого.
  • Предоставлять полезность другим контрактам (аналогично тому, как работает программная библиотека)
  • Храните информацию о приложении, например информацию о регистрации домена или записи о членстве.

Почему именно Solidity?

Solidity статически типизирован, поддерживает наследование, библиотеки и сложные пользовательские типы среди других функций. - Документы по Solidity

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

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

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

В будущем может появиться поддержка других часто используемых языков, таких как Rust, Go или C ++, путем обновления до EVM через ewasm. Другой вариант - Vyper. Хотя в настоящее время он нестабилен и находится в разработке, однажды он может заменить Solidity.

Давайте погрузимся в код

Мы запустим наш код в онлайн-среде IDE для Solidity, Remix. После того, как вы его откроете, вы увидите пример смарт-контракта Ballot. Хотя это отличный код для анализа и понимания многих функций Solidity, мы начнем с чего-нибудь попроще.

Создайте новый файл, нажав кнопку + в верхнем левом углу. Дадим ему имя: SimpleStorage.sol. Скопируйте / вставьте приведенный ниже код во вновь созданный файл.

// This code example is obtained from Solidity docs
pragma solidity >=0.4.0 <0.6.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

Разделение кода строка за строкой

// This code example is obtained from Solidity docs - встроенные комментарии начинаются с //, как во многих языках программирования.

pragma solidity >=0.4.0 <0.6.0; - первая строка указывает версию компилятора Solidity, с помощью которой мы хотим, чтобы наш код компилировался . В этом примере мы хотим использовать последний доступный компилятор между версиями 0.4.0 и 0.60.

contract SimpleStorage {определение контракта аналогично определению класса в объектно-ориентированных языках. Как и классы, контракты могут использовать некоторую форму наследования. Из-за этого Solidity считается языком программирования, ориентированным на контракты.

uint storedData; —Solidity поддерживает различные количество типов. Вы выбираете, какой из них использовать, исходя из того, сколько памяти вам нужно выделить. Хотя он довольно похож на JavaScript, в Solidity есть много типов переменных.

Мы использовали uint, целое число без знака. Это означает, что он может представлять только положительные числа. Диапазон чисел, который он представляет, находится в пределах 256 бит. Вы также можете использовать uint256 вместо uint, чтобы сделать его более декларативным, поскольку uint - это просто псевдоним для uint256.

function set(uint x) public {
        storedData = x;
    }

Эта функция сохраняет полученное значение в ранее определенном storedData. Здесь важно отметить, что эта функция изменяет данные, что означает, что при вызове она изменяет состояние блокчейна Ethereum.

Каждое изменение состояния стоит, и человек, который вызывает эту функцию, должен будет заплатить комиссию за ее выполнение. Единица измерения, которая измеряет объем вычислительных усилий, которые потребуются для выполнения определенных операций, называется газ. Окончательная плата рассчитывается путем умножения количества газа, необходимого для выполнения функции, и эфира, который пользователь готов платить за одну единицу газа.

function get() public view returns (uint) {
        return storedData;
    }
}

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

Ключевое слово view обещает, что функция не будет изменять никакие данные. Чтобы указать, какой тип данных должна возвращать функция, есть другое ключевое слово returns, за которым следует (uint), который имеет тот же тип, что и возвращаемый storedData.

Запустить в Remix

Теперь скомпилируем и запустим контракт.

Ремикс имеет несколько вкладок в правом верхнем углу. На вкладке Компиляция нажмите «Начать компиляцию», и вы должны увидеть зеленое поле с надписью SimpleStorage внутри него.

На вкладке Выполнить в разделе Среда есть три варианта. Мы будем использовать «виртуальную машину Javascript».

Эта опция позволит вам запускать смарт-контракт в вашем браузере локально и имитировать учетные записи и транзакции.

Первое, что нам нужно сделать, это развернуть наш смарт-контракт; сделать его доступным в блокчейне, чтобы мы могли с ним взаимодействовать. Нажатие на красную кнопку «Развернуть» помогает. После развертывания контракта посмотрите на учетные записи в правом верхнем углу. Вы заметите, что была запущена смоделированная учетная запись, и с выбранной учетной записи была уплачена небольшая комиссия. Вместо 100 теперь 99,99 эфира.

Внизу справа вы можете увидеть свои Развернутые контракты. Если вы нажмете SimpleStorage, он развернется, и вы увидите две функции, которые мы определили ранее.

Давайте перейдем с прежнего аккаунта на другой, нетронутый. Просто нажмите на учетные записи и выберите тот, у которого все еще есть 100 эфиров. Теперь спуститесь и нажмите кнопку «получить». Вы увидите, что он возвращает 0, поскольку это значение переменной storedData по умолчанию.

Теперь введите число рядом с полем «set». Разместите любое положительное число, но заключите его в кавычки (например, «420»). Нажмите кнопку установить, а затем снова получить. Вы увидите вывод сохраненного номера.

Куда пойти сейчас

Мы создали простейший смарт-контракт и использовали Remix для компиляции, развертывания и взаимодействия с ним в нашем браузере. Если вам все еще интересно, следующим шагом будет попытка создать что-то более сложное.

Теперь, когда вы знаете, как использовать основные функции Remix, вы можете изучить контракт на голосование, который появляется, когда вы впервые открываете интегрированную среду разработки (IDE).

Когда вы будете готовы к игре или когда у вас появятся идеи о том, что вы хотите создать, я предлагаю вам попробовать Truffle и OpenZeppelin Фреймворки смарт-контрактов, которые предоставят вам хороший набор инструментов разработки и позволят вам легко разрабатывать в любом редакторе кода.

Все, что остается сказать на данный момент, - это удачи и удачи в путешествии по блокчейну, и если вам нужна помощь или совет, не стесняйтесь писать в разделе комментариев ниже.