Bitget App
Торгуйте разумнее
Купить криптоРынкиТорговляФьючерсыКопитрейдингБотыEarn

Как читать смарт-контракты: инструкция

Beincrypto2024/05/22 12:53
Автор:Beincrypto

Технология смарт-контрактов появилась в начале 90-х годов. Ее придумал известный криптограф Ник Сабо, которого многие считают создателем биткоина . Смарт-контракты стали массовым явлением только после запуска криптовалюты Ethereum в 2015 году. Сегодня они лежат в основе почти всех проектов, связанных с блокчейном . Базовая информация о том, как именно работает технология — здесь .

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

Хотите обсудить возможности смарт-контрактов с участниками криптосообщества? Приходите в Телеграм-канал BeInCrypto . У нас не только новости и обзоры, но и живое общение с трейдерами, инвесторами и просто фанатами криптовалюты. Задавайте вопросы экспертам, участвуйте в промоакциях, будьте в курсе вместе с BeInCrypto.

В этой статье:
  • Что такое смарт-контракты
    • Характеристики смарт-контрактов
    • Как читать смарт-контракты
      • Блокчейны для смарт-контрактов
      • Пара слов об аудите

      Что такое смарт-контракты

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

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

      Интересно! На рынке есть программы, которые могут автоматически проверять смарт-контракты. Например, такой функционал есть в чат-боте для Телеграм ChainGPT . Программа может не только аудировать смарт-контракты, но и генерировать NFT, автоматизировать торговлю активами и даже проводить блокчейн-исследования. Чтобы познакомиться с функционалом бесплатного чат-бота ChainGPT, переходите по ссылке>>>

      Предназначение смарт-контрактов

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

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

      Схема взаимодействия смарт-контракта с блокчейном: BeInCrypto

      Смарт-контракты могут работать с токенами различных блокчейнов. В том числе, они способны взаимодействовать с монетами популярного стандарта ERC-20 Ethereum.

      Некоторые смарт-контракты могут выполнять несколько задач параллельно. Такой вид цифровых контрактов называют ассинхронным.

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

      Характеристики смарт-контрактов

      Программируемость. Условия смарт-контракта могут быть гибкими — сформулированными под требования определенного проекта.

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

      Автономность. Смарт-контракты автоматически исполняют заложенные в них требования. Особенность гарантирует автономность работы таких систем.

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

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

      Как читать смарт-контракты

      Вот простой смарт-контракт, представляющий счет условного депонирования. Пользователи вносят свои средства на условное депонирование. Затем предства, по истечении определенного периода времени, передают получателю.

      // SPDX-License-Identifier: MIT

      pragma solidity ^0.8.0;

      // Basic Smart Contract Boilerplate

      contract SimpleTrustlessEscrow {

      // State variables

      address public depositor; // Account depositing ether

      address payable public beneficiary; // Account receiving ether

      uint256 public releaseTime; // Timestamp to release ether

      // Events for verifying contract activity

      event Deposited(address indexed _from, uint256 _value);

      event Released(address indexed _to, uint256 _value);

      // The contract constructor initializes the smart contract

      constructor(address payable _beneficiary, uint256 _releaseTime) {

      require(_releaseTime > block.timestamp, “Release time must be in the future”);

      // Secure and Trustless: Contract binds depositor and beneficiary

      depositor = msg.sender;

      beneficiary = _beneficiary;

      releaseTime = _releaseTime;

      }

      // Deposit function – autonomous execution (fallback function)

      receive() external payable {

      emit Deposited(msg.sender, msg.value);

      }

      // Release the ether to the beneficiary

      function release() public {

      // Programmable: Can only be executed after releaseTime

      require(block.timestamp >= releaseTime, “Too early to release”);

      // Autonomous: Automatically executes based on condition

      uint256 amount = address(this).balance;

      beneficiary.transfer(amount);

      emit Released(beneficiary, amount);

      }

      }

      Приступим к расшифровке и подробному чтению этого смарт-контракта. Давайте сначала проверим, соответствует ли он упомянутым характеристикам.

      Программируемость

      Посмотрите на эту часть кода:

      require(block.timestamp >= releaseTime, “Too early to release”);

      uint256 amount = address(this).balance;

      beneficiary.transfer(amount);

      В ней указаны особые условия перевода средств. Смарт-контракт соответствует характеристике.

      Не требует доверия

      Обратите внимание на фрагмент кода:

      depositor = msg.sender;

      beneficiary = _beneficiary;

      releaseTime = _releaseTime;

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

      Автономность

      Теперь обратим внимание на эту часть кода:

      function release() public {

      require(block.timestamp >= releaseTime, “Too early to release”);

      uint256 amount = address(this).balance;

      beneficiary.transfer(amount);

      emit Released(beneficiary, amount);

      }

      Весь процесс автономен. Средства высвобождаются только тогда, когда запросы соответствует заданным критериям. Обратите внимание на то, что код полностью автономен.

      Другие элементы кода смарт-контракта, включая функцию депозита, также можно сделать полностью автономными, если это потребуется (еще одно доказательство программируемости контракта). Например, можно прописать код таким образом, чтобы система переводила получателю средства каждый раз, когда объем средств на кошельке превышает $100.

      Безопасность

      За безопасность средств и гарантию исполнения договора отвечает вот эта часть кода:

      constructor(address payable _beneficiary, uint256 _releaseTime) {

      require(_releaseTime > block.timestamp, “Release time must be in the future”);

      depositor = msg.sender;

      beneficiary = _beneficiary;

      releaseTime = _releaseTime;

      }

      В нем, в том числе, прописаны приоритеты, которые исключают рандомность исполнения смарт-контракта.

      Поддающийся проверке

      Каждая транзакция, связанная со смарт-контрактом, регистрируется в блокчейне. За действие отвечает вот эта часть кода:

      event Deposited(address indexed _from, uint256 _value);

      event Released(address indexed _to, uint256 _value);

      emit Deposited(msg.sender, msg.value);

      emit Released(beneficiary, amount);

      К другим частям смарт-контракта

      Pragma solidity ^0.8.0; Версия языка программирования Solidity, необходимая для написания этого смарт-контракта.

      // SPDX-License-Identifier: MIT – Идентификатор обмена данными о пакетах программного обеспечения. Дает представление о наличии лицензии на выпуск кода. Его включают, чтобы люди знали, является ли интересующий их исходный код открытым.

      Contract TimeLock { – Элемент, который присваивает смарт-контракту имя (лейбл).

      Address public depositor; – Поскольку в договоре участвуют вкладчик и бенефициар, в этом пункте упомянут его публичный адрес. Эта переменная представляет собой адрес кошелька Ethereum.

      Address payable public beneficiary; – Это публичный адрес бенефициара, куда с эскроу переводят средства. Он нужено, чтобы придать смарт-контракту прозрачность исполнения функций.

      Uint256 public releaseTime; – Поскольку контракт работает с привязкой ко времени, нужен элемент, который бы присваивал контракту временную переменную. В нашем случае, эту роль выполняет uint256. Элемент задает временные рамки, в соответствии с которыми будут осуществляться операции с активами.

      Прочие элементы

      constructor(address payable _beneficiary, uint256 _releaseTime) { – «Конструктор» представляет собой одноразовую специальную функцию, которая начинает работать при развертывании смарт-контракта. Она приводит контракт в действие. С ее помощью система забирает в работу все адресные переменные.

      Receive() external payable { – Это специальная функция, которая становится активной при движении средств на адрес контракта извне. External указывает на движение активов извне, а «Payable» определяет характер перемещения. В нашем случае, указывает на получение токенов ERC-20.

      Function release() public { – Эта функция констатирует движение токенов ERC-20 от адреса контракта к бенефициару. Она привязана ко времени проведения операции.

      Блокчейны для смарт-контрактов

      Самым популярным блокчейном для развертывания смарт-контрактов оказался Ethereum. Выше мы разобрали пример смарт-контракта, написанного для работы на его основе. При этом Ethereum — не единственный блокчейн, который можно рассмотреть для работы. Популярные альтернативы — Solana , с языком программирования Rust и Cardano , с языком программирования Plutus.

      Вот, например, как выглядит код смарт-контракта на Rust для Solana:

      Note: It is a simple contract where a counter gets incremented.

      use anchor_lang::prelude::*;

      declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);

      #[program]

      pub mod hello_world {

      use super::*;

      pub fn initialize(ctx: Context <initialize> ) -> ProgramResult { </initialize>

      let greeting_account = mut ctx.accounts.greeting_account;

      greeting_account.counter = 0;

      Ok(())

      }

      pub fn increment(ctx: Context <increment> ) -> ProgramResult { </increment>

      let greeting_account = mut ctx.accounts.greeting_account;

      greeting_account.counter += 1;

      Ok(())

      }

      }

      Расшифровку деталей смарт-контракта можно получить на официальном сайте Solana .

      Пара слов об аудите

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

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

      0

      Дисклеймер: содержание этой статьи отражает исключительно мнение автора и не представляет платформу в каком-либо качестве. Данная статья не должна являться ориентиром при принятии инвестиционных решений.

      Вам также может понравиться

      Палата представителей США проголосует на следующей неделе за преодоление вето президента Байдена на SAB 121

      Краткий обзор Резолюция об отмене Бюллетеня бухгалтерского учета сотрудников 121, также известного как SAB 121, была отклонена президентом Байденом в мае. Голосование является конституционной обязанностью, и политические эксперты расходятся во мнениях относительно того, хватит ли у законодателей голосов, чтобы преодолеть вето президента Байдена.

      The Block2024/07/05 21:13

      Гиганты прямых инвестиций окружают Bitcoin майнеров с помощью AI Allure

      CryptoNews2024/07/05 19:37

      EBA: С декабря в Евросоюзе меняются правила работы криптобирж

      BIT2024/07/05 19:37

      SkyQuest Technology: Объем рынка блокчейн-устройств достигнет $16 млрд

      BIT2024/07/05 19:37

      Копитрейдинг на споте

      Далее
      AIOnline
      AIOnline
      insight1000/1000
      9940.54%
      ROI
      Общая прибыль $50696.75
      WhaleGo_YouTube
      WhaleGo_YouTube
      insight500/500
      1324.99%
      ROI
      Общая прибыль $3847.28

      Копитрейдинг с использованием бота

      Далее
      $11718.02
      Общая прибыль
      Суммарная прибыль от подписчиков $35.91
      GoldenEgg
      GoldenEgg
      insight145/150
      $5644.26
      Общая прибыль
      Суммарная прибыль от подписчиков $-284.87