---
title: "Развертывание вашего первого смарт-контракта"
description: "Введение в развертывание вашего первого смарт-контракта в тестовой сети Эфириума"
author: "jdourlens"
tags: ["смарт-контракты", "Remix", "Solidity", "развертывание"]
skill: beginner
breadcrumb: "Развертывание первого контракта"
lang: ru
published: 2020-04-03
source: EthereumDev
sourceUrl: https://ethereumdev.io/deploying-your-first-smart-contract/
address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"
---

Полагаю, вы так же, как и мы, рады [развернуть](/developers/docs/smart-contracts/deploying/) свой первый [смарт-контракт](/developers/docs/smart-contracts/) в блокчейне Эфириума и взаимодействовать с ним.

Не волнуйтесь, поскольку это наш первый смарт-контракт, мы развернем его в [локальной тестовой сети](/developers/docs/networks/), поэтому его развертывание ничего не будет вам стоить, и вы сможете экспериментировать с ним сколько угодно.

## Написание нашего контракта {#writing-our-contract}

Первый шаг — [перейти в Remix](https://remix.ethereum.org/) и создать новый файл. В левой верхней части интерфейса Remix добавьте новый файл и введите желаемое имя файла.

![Adding a new file in the Remix interface](./remix.png)

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

```solidity
// 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++. Теперь пришло время поэкспериментировать с нашим контрактом.

## Развертывание нашего контракта {#deploying-our-contract}

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

[Развертывание смарт-контракта в блокчейне](/developers/docs/smart-contracts/deploying/) — это, по сути, просто отправка транзакции, содержащей код скомпилированного смарт-контракта, без указания каких-либо получателей.

Сначала мы [скомпилируем контракт](/developers/docs/smart-contracts/compiling/), нажав на значок компиляции с левой стороны:

![The compile icon in the Remix toolbar](./remix-compile-button.png)

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

![The compile button in the Remix solidity compiler](./remix-compile.png)

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

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

![The deploy icon in the Remix toolbar](./remix-deploy.png)

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

![The deploy button in the Remix solidity compiler](./remix-deploy-button.png)

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

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

![The function button in the Remix solidity compiler](./remix-function-button.png)

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

![A log of transactions](./transaction-log.png)

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

![Newly updated state of the smart contract](./updated-state.png)

В следующем руководстве мы рассмотрим, [как можно добавлять события в ваши смарт-контракты](/developers/tutorials/logging-events-smart-contracts/). Логирование событий — это удобный способ отладки вашего смарт-контракта и понимания того, что происходит во время вызова функции.