Развертывание вашего первого смарт-контракта
Полагаю, вы так же, как и мы, рады развернуть свой первый смарт-контракт в блокчейне Эфириума и взаимодействовать с ним.
Не волнуйтесь, поскольку это наш первый смарт-контракт, мы развернем его в локальной тестовой сети, поэтому его развертывание ничего не будет вам стоить, и вы сможете экспериментировать с ним сколько угодно.
Написание нашего контракта
Первый шаг — перейти в Remix (opens in a new tab) и создать новый файл. В левой верхней части интерфейса Remix добавьте новый файл и введите желаемое имя файла.
В новый файл мы вставим следующий код.
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.17;
contract Counter {
// Публичная переменная типа unsigned int для хранения количества подсчетов
uint256 public count = 0;
// Функция, которая увеличивает наш счетчик
function increment() public {
count += 1;
}
// Необязательный геттер для получения значения счетчика
function getCount() public view returns (uint256) {
return count;
}
}
Если вы знакомы с программированием, то легко догадаетесь, что делает эта программа. Вот построчное объяснение:
- Строка 4: Мы определяем контракт с именем
Counter. - Строка 7: Наш контракт хранит одно беззнаковое целое число с именем
count, начиная с 0. - Строка 10: Первая функция изменит состояние контракта и выполнит
increment()для нашей переменнойcount. - Строка 15: Вторая функция — это просто геттер (getter), позволяющий прочитать значение переменной
countза пределами смарт-контракта. Обратите внимание, что поскольку мы определили нашу переменнуюcountкак public, в этом нет необходимости, но это показано в качестве примера.
На этом всё для нашего первого простого смарт-контракта. Как вы могли заметить, он похож на класс из языков ООП (объектно-ориентированного программирования), таких как Java или C++. Теперь пришло время поэкспериментировать с нашим контрактом.
Развертывание нашего контракта
Поскольку мы написали наш самый первый смарт-контракт, теперь мы развернем его в блокчейне, чтобы иметь возможность с ним взаимодействовать.
Развертывание смарт-контракта в блокчейне — это, по сути, просто отправка транзакции, содержащей код скомпилированного смарт-контракта, без указания каких-либо получателей.
Сначала мы скомпилируем контракт, нажав на значок компиляции с левой стороны:
Затем нажмите на кнопку компиляции:
Вы можете выбрать опцию «Auto compile» (Автоматическая компиляция), чтобы контракт всегда компилировался при сохранении содержимого в текстовом редакторе.
Затем перейдите на экран «deploy and run transactions» (развертывание и запуск транзакций):
Оказавшись на экране «deploy and run transactions», дважды проверьте, что имя вашего контракта отображается, и нажмите «Deploy» (Развернуть). Как вы можете видеть в верхней части страницы, текущая среда — «JavaScript VM». Это означает, что мы развернем наш смарт-контракт и будем взаимодействовать с ним в локальном тестовом блокчейне, чтобы иметь возможность тестировать быстрее и без каких-либо комиссий.
После нажатия кнопки «Deploy» вы увидите, как ваш контракт появится внизу. Нажмите на стрелку слева, чтобы развернуть его, и мы увидим содержимое нашего контракта. Это наша переменная counter, наша функция increment() и геттер getCounter().
Если вы нажмете на кнопку count или getCount, это фактически извлечет содержимое переменной count контракта и отобразит его. Поскольку мы еще не вызывали функцию increment, должно отобразиться 0.
Давайте теперь вызовем функцию increment, нажав на кнопку. Вы увидите логи совершенных транзакций, появляющиеся в нижней части окна. Вы заметите, что логи отличаются, когда вы нажимаете кнопку для получения данных, а не кнопку increment. Это связано с тем, что чтение данных в блокчейне не требует никаких транзакций (записи) или комиссий. Потому что только изменение состояния блокчейна требует совершения транзакции:
После нажатия кнопки инкремента, которая сгенерирует транзакцию для вызова нашей функции increment(), если мы снова нажмем на кнопки count или getCount, мы прочитаем недавно обновленное состояние нашего смарт-контракта, где переменная count будет больше 0.
В следующем руководстве мы рассмотрим, как можно добавлять события в ваши смарт-контракты. Логирование событий — это удобный способ отладки вашего смарт-контракта и понимания того, что происходит во время вызова функции.







