Смарт-контракт: как самоисполняющийся код работает в блокчейне

Смарт-контракт: как самоисполняющийся код работает в блокчейне

Смарт-контракт — это программа, хранящаяся в блокчейне, которая автоматически выполняет условия, записанные в её коде, как только транзакция или другой контракт обращается к ней. Программа — это набор компьютерных инструкций. Блокчейн — это общий реестр, в который новые записи добавляются одна за другой. Транзакция — это запрос, отправляемый в блокчейн.

Где «живёт» смарт-контракт?

Смарт-контракт хранится по определённому адресу в блокчейне. Адрес — это идентификатор пользователя или смарт-контракта в блокчейне. Код контракта и данные, которые этот код хранит, находятся именно по этому адресу. Состояние (state) — это данные, которые хранит смарт-контракт, благодаря чему эти данные остаются доступны при следующем вызове контракта.

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

Как работают смарт-контракты?

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

Код смарт-контракта выполняют узлы блокчейн-сети. Узел — это компьютер, который работает по программному обеспечению блокчейн-сети и соединяется с другими компьютерами в этой сети. Когда код изменяет состояние контракта, это изменение фиксируется в блокчейне.

Аккаунт — это запись в блокчейне, у которой есть адрес и баланс. Баланс — это количество нативной монеты блокчейна, которым владеет аккаунт. Нативная монета — это собственная единица блокчейна, например BTC в сети Bitcoin.

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

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

Условный пример показывает один вызов. Реальные контракты отличаются тем, что они хранят, и тем, как написаны их функции. В примере контракт хранит количество единиц для каждого из двух адресов. Единица — это показатель, который хранит контракт. У адреса A — 100 единиц, у адреса B — 20 единиц.

  1. Пользовательский аккаунт отправляет транзакцию, вызывающую функцию transfer контракта, с запросом перевести 30 единиц с адреса A на адрес B.
  2. Узлы выполняют код контракта.
  3. Код проверяет, что на адресе A есть как минимум 30 единиц.
  4. Код уменьшает баланс адреса A до 70 единиц и увеличивает баланс адреса B до 50 единиц.
  5. Изменение фиксируется в блокчейне. Оба адреса в сумме хранят 120 единиц — как до, так и после вызова.

Что может хранить и делать смарт-контракт?

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

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

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

Что определяет поведение смарт-контракта и может ли оно измениться?

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

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

Что является аналогом смарт-контракта в Bitcoin?

У Bitcoin — криптовалютной сети, монета которой называется BTC, — есть собственный аналог в виде скриптов. Скрипт — это правило, написанное на скриптовом языке Bitcoin, которое должно быть выполнено прежде, чем можно будет переместить определённую сумму BTC. По состоянию на октябрь 2026 года в документации Bitcoin его скриптовый язык описывается как намеренно ограниченный. BTCFi, сокращение от Bitcoin-native finance («нативные финансы Bitcoin»), — это термин, которым различные стороны обозначают финансовую активность, построенную вокруг BTC, включая смарт-контракты и другие решения.

Что такое код-ревью смарт-контракта?

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

Каковы ограничения смарт-контракта?

Без оракула смарт-контракт работает только с данными того блокчейна, в котором он выполняется. Оракул — это сервис, который передаёт контракту внешние данные. Внешние данные — это данные, которые не хранятся в блокчейне контракта, например внешняя дата или внешний результат.

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

27 ноября 2025 г.

Новости GoMining

Вам может быть интересно: