Перейти к основному контенту

Развертывание вашего первого смарт-контракта

смарт-контракты
Remix
Solidity
развертывание
Для начинающих
jdourlens
3 апреля 2020 г.
3 минут на чтение

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

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

Написание нашего контракта

Первый шаг — перейти в Remix (opens in a new tab) и создать новый файл. В левой верхней части интерфейса Remix добавьте новый файл и введите желаемое имя файла.

Adding a new file in the Remix interface

В новый файл мы вставим следующий код.

Если вы знакомы с программированием, то легко догадаетесь, что делает эта программа. Вот построчное объяснение:

  • Строка 4: Мы определяем контракт с именем Counter.
  • Строка 7: Наш контракт хранит одно беззнаковое целое число с именем count, начиная с 0.
  • Строка 10: Первая функция изменит состояние контракта и выполнит increment() для нашей переменной count.
  • Строка 15: Вторая функция — это просто геттер (getter), позволяющий прочитать значение переменной count за пределами смарт-контракта. Обратите внимание, что поскольку мы определили нашу переменную count как public, в этом нет необходимости, но это показано в качестве примера.

На этом всё для нашего первого простого смарт-контракта. Как вы могли заметить, он похож на класс из языков ООП (объектно-ориентированного программирования), таких как Java или C++. Теперь пришло время поэкспериментировать с нашим контрактом.

Развертывание нашего контракта

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

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

Сначала мы скомпилируем контракт, нажав на значок компиляции с левой стороны:

The compile icon in the Remix toolbar

Затем нажмите на кнопку компиляции:

The compile button in the Remix solidity compiler

Вы можете выбрать опцию «Auto compile» (Автоматическая компиляция), чтобы контракт всегда компилировался при сохранении содержимого в текстовом редакторе.

Затем перейдите на экран «deploy and run transactions» (развертывание и запуск транзакций):

The deploy icon in the Remix toolbar

Оказавшись на экране «deploy and run transactions», дважды проверьте, что имя вашего контракта отображается, и нажмите «Deploy» (Развернуть). Как вы можете видеть в верхней части страницы, текущая среда — «JavaScript VM». Это означает, что мы развернем наш смарт-контракт и будем взаимодействовать с ним в локальном тестовом блокчейне, чтобы иметь возможность тестировать быстрее и без каких-либо комиссий.

The deploy button in the Remix solidity compiler

После нажатия кнопки «Deploy» вы увидите, как ваш контракт появится внизу. Нажмите на стрелку слева, чтобы развернуть его, и мы увидим содержимое нашего контракта. Это наша переменная counter, наша функция increment() и геттер getCounter().

Если вы нажмете на кнопку count или getCount, это фактически извлечет содержимое переменной count контракта и отобразит его. Поскольку мы еще не вызывали функцию increment, должно отобразиться 0.

The function button in the Remix solidity compiler

Давайте теперь вызовем функцию increment, нажав на кнопку. Вы увидите логи совершенных транзакций, появляющиеся в нижней части окна. Вы заметите, что логи отличаются, когда вы нажимаете кнопку для получения данных, а не кнопку increment. Это связано с тем, что чтение данных в блокчейне не требует никаких транзакций (записи) или комиссий. Потому что только изменение состояния блокчейна требует совершения транзакции:

A log of transactions

После нажатия кнопки инкремента, которая сгенерирует транзакцию для вызова нашей функции increment(), если мы снова нажмем на кнопки count или getCount, мы прочитаем недавно обновленное состояние нашего смарт-контракта, где переменная count будет больше 0.

Newly updated state of the smart contract

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