Как закодировать свой первый смарт-контракт с помощью Solidity
16 апреля 2022 г.Вступление
Я понимаю, вы слышали много флюидов из мира web3.0, все говорят об этом. Ваши друзья планируют изучить эту технологию, и вы не знаете, как это сделать. Вы зашли в интернет, чтобы посмотреть, как начать, а все ребята на YouTube слишком разбираются в этой теме. Вы просто хотите что-то простое, с чем вы можете ладить. Что ж, если это похоже на вас, вам больше не о чем беспокоиться. В этом уроке и последующих я проведу вас через мир разработки Web3.0, начиная с того, как создать свой первый смарт-контракт с Solidity.
Почему смарт-контракты трудно изучить
Изучение технологии смарт-контрактов может разочаровать, особенно если вы новичок в этой области. Даже опытный разработчик может удивиться тому, как его или ее может смутить сложность разработки смарт-контрактов. Ниже приведены некоторые причины, по которым разработка смарт-контрактов может быть сложной…
Он содержит множество новых терминов программирования
Один из первых ударов, с которым часто сталкиваются новички в этой области, — это каталог слов, которые им необходимо понимать, чтобы продуктивно работать с технологией. Начиная с блокчейна, базовой технологии, на которой основан смарт-контракт. Объяснение этого новичкам может быть чрезвычайно запутанным.
Подумайте об этом, вам нужно будет понять, что такое блокчейн, солидность и смарт-контракты. Что такое плата за газ, блоки, неизменность, виртуальная машина Ethereum и так далее.
Посмотрим правде в глаза, Lingua Franca разработки блокчейнов огромен, и каждый день появляется все больше слов из-за экспоненциального прогресса в этой области.
Недостаточно учебных материалов
Независимо от того, БЕСПЛАТНО или Премиум, количество материалов, необходимых для компенсации растущего спроса на эту технологию, не хватает.
Бесплатные материалы в этом пространстве, которые сделают вас профессиональным разработчиком блокчейна, ограничены. Да, это правильно, что эти ребята, производящие этот учебный контент, зарабатывают на этом деньги. Вот почему вы увидите довольно много профессиональных курсов онлайн, которые могут вам помочь.
Кроме того, если вы решите перейти на БЕСПЛАТНУЮ материальную полосу, чтобы изучить блокчейн и разработку смарт-контрактов, вам придется много рубить деревья, чтобы найти удобное место в пространстве.
Массовый скептицизм в отношении блокчейн-решений
Существует густое облако сомнений и скептицизма в отношении этой технологии блокчейна. Несмотря на то, что в последнее время ей уделяется довольно много внимания, образ мышления людей и даже стран во всем мире ограничивает полное принятие этой технологии.
Однако мы не можем винить мир из-за злоупотребления цифровыми валютами блокчейна.
Что такое смарт-контракт
Проще говоря, смарт-контракт — это часть программы, которая работает на блокчейне. Давайте воспользуемся этой аналогией: блокчейн можно рассматривать как океан, а смарт-контракты — как рыб. На данный момент смарт-контракт может работать только в сети блокчейна, такой как виртуальная машина Ethereum (EVM). Смарт-контракт бесполезен, если он не развернут в сети.
Как работают смарт-контракты
Как бы интуитивно ни звучало его название, смарт-контракт работает как настоящий контрактный документ между двумя или более сторонами. У смарт-контракта есть спецификации того, что он будет делать и как он будет это делать.
Смарт-контракт содержит фрагмент кода, написанный на языке программирования блокчейна, таком как Solidity, который после развертывания в сети блокчейна уже нельзя извлечь или изменить.
После написания или кодирования смарт-контракта для размещения контракта в сети требуется небольшая сумма денег, называемая платой за газ. Каждая транзакция, которая происходит в сети блокчейн, требует механизма проверки, чтобы доказать, что такие транзакции произошли. В блокчейне механизм валидации называется моделью консенсуса.
Существует несколько таких моделей, таких как доказательство работы и доказательство доли, и каждая модель консенсуса влияет на масштабируемость, безопасность и скорость такой цепочки блоков.
Мы не хотим вдаваться в технические подробности, давайте сохраним простоту ради этой темы.
Что умеют смарт-контракты
Блокчейн, поддерживающий интеграцию смарт-контрактов, — это золотая жила. Смарт-контракты меняют правила игры и позволяют вам писать программы, которые всегда будут работать в блокчейне. В мире блокчейнов существует множество вариантов использования смарт-контрактов, некоторые из них перечислены ниже.
- Создание цифровых валют (токенов).
- Содействие финансовым транзакциям (DeFi).
- Управление идентификацией и конфиденциальность в Интернете (цифровые кошельки).
- Цифровые активы и предметы коллекционирования (NFT и Metaverse).
- Создание децентрализованных приложений (Web 3.0).
- Запуск правительственных структур (DAO).
- и т.д.
Пример использования смарт-контракта
Теперь давайте перейдем к сути этого урока, мы создадим простую систему, которая будет принимать пожертвования от людей вместе с механизмом вывода средств. Вот полная версия смарт-контракта.
```javascript
//SPDX-идентификатор лицензии: MIT
прочность прагмы >=0,7,0 <0,9,0;
контракт Доноры {
сопоставление (адрес => uint256) публичных платежей;
сопоставление (адрес => uint256) public donationsBy;
адрес, подлежащий уплате публичным собственником;
uint256 публичный баланс;
uint256 публично отозван;
uint256 общее количество пожертвований = 0;
uint256 public totalWithdrawal = 0;
событие Пожертвование(
идентификатор uint256,
адрес проиндексирован,
адрес проиндексирован из,
сумма uint256,
uint256 метка времени
событие Снятие(
идентификатор uint256,
адрес проиндексирован,
адрес проиндексирован из,
сумма uint256,
uint256 метка времени
конструктор () {
владелец = подлежащий оплате (msg.sender);
функция пожертвовать () оплачиваемая общественность {
require(msg.value > 0, "Пожертвование не может быть равно нулю!");
платежи[msg.sender] += msg.value;
donationsBy[msg.sender] += 1;
баланс += msg.value;
Всего пожертвований++;
выдать пожертвование(
всего пожертвований,
адрес (этот),
сообщение.отправитель,
сообщение.значение,
block.timestamp
функция снятия (сумма uint256) внешняя возвращает (bool) {
требуют(msg.sender == владелец, "Неавторизованный!");
require(баланс >= сумма, "Недостаточно баланса");
баланс -= сумма;
снято += сумма;
владелец.перевод(сумма);
общий вывод++;
выпустить вывод(
общий вывод,
сообщение.отправитель,
адрес (этот),
количество,
block.timestamp
вернуть истину;
Теперь давайте объясним, что происходит в этом смарт-контракте…
```javascript
//SPDX-идентификатор лицензии: MIT
прочность прагмы >=0,7,0 <0,9,0;
Вверху у нас есть приведенный выше фрагмент кода, который указывает идентификатор лицензии и диапазон версий компилятора, которые можно использовать для нашего смарт-контракта.
Идентификатор лицензии сообщает нам, является ли исходный код смарт-контракта открытым или нет, и в какой степени вы можете его использовать. Вы можете найти все доступные для использования лицензии здесь.
```javascript
контракт Доноры {
// здесь идут коды...
Приведенный выше блок кода определяет структуру смарт-контракта. Если вы немного занимались объектно-ориентированным программированием, вам не потребуется много времени, чтобы распознать аналогичные шаблоны в разработке смарт-контрактов. Это связано с тем, что язык программирования Solidity позаимствовал много синтаксиса из популярных языков программирования, таких как JavaScript, C++ и Python.
```javascript
// Хранилище значения ключа
сопоставление (адрес => uint256) публичных платежей;
сопоставление (адрес => uint256) public donationsBy;
Это тип переменной в языке программирования Solidity, который представляет ключи со связанными с ними значениями. Это почти похоже на ассоциативный массив в PHP или объект в JavaScript.
В приведенном выше коде мы просто указываем нашему смарт-контракту связать каждый адрес с пожертвованной суммой.
```javascript
// Объявление переменных смарт-контракта
адрес, подлежащий уплате публичным собственником;
uint256 публичный баланс;
uint256 публично отозван;
uint256 общее количество пожертвований = 0;
uint256 public totalWithdrawal = 0;
Приведенный выше фрагмент кода объявляет переменные, которые будут использоваться в ходе смарт-контракта.
Адрес — это тип данных, который содержит адрес кошелька человека или самого смарт-контракта. Uint256 просто содержит беззнаковые, положительные или неотрицательные целые числа, то есть от 0 до 2²⁵⁶–1.
Payable подразумевает, что на этот счет или адрес могут поступать деньги, в данном случае это эфиры.
Публичный просто означает, что к этой переменной можно получить доступ за пределами этого смарт-контракта, опять же, этот принцип похож на ООП.
```javascript
// Информация журнала
событие Пожертвование(
идентификатор uint256,
адрес проиндексирован,
адрес проиндексирован из,
сумма uint256,
uint256 метка времени
событие Снятие(
идентификатор uint256,
адрес проиндексирован,
адрес проиндексирован из,
сумма uint256,
uint256 метка времени
Что такое события? События — это конструкции на языке программирования Solidity, которые регистрируют или выдают данные о конкретной транзакции и хранятся в блокчейне вместе с адресом смарт-контракта.
В приведенном выше блоке кода мы хотим, чтобы каждое пожертвование или снятие средств, такая информация, как количество снятий или пожертвований, сумма и отметка времени, записывались и регистрировались в EVM (виртуальная машина Ethereum) для дальнейшего использования.
```javascript
конструктор () {
владелец = подлежащий оплате (msg.sender);
Это первая функция, которая запускается после создания или развертывания этого смарт-контракта. В этом примере развертыватель становится владельцем смарт-контракта или, по крайней мере, учетной записи, используемой для развертывания смарт-контракта.
```javascript
функция пожертвовать () оплачиваемая общественность {
require(msg.value > 0, "Пожертвование не может быть равно нулю!");
// Назначение платежных записей...
платежи[msg.sender] += msg.value;
donationsBy[msg.sender] += 1;
баланс += msg.value;
Всего пожертвований++;
выдать пожертвование(
всего пожертвований,
адрес (этот),
сообщение.отправитель,
сообщение.значение,
block.timestamp
Вышеупомянутая функция является платной и общедоступной, то есть она может получать деньги и общедоступна для доноров.
Требуется необходимая проверка, чтобы убедиться, что люди отправляют деньги. Отправка нулевых эфиров приведет к исключению, и транзакция будет отменена.
Как только функция пожертвования подтвердит наличие денег, она затем назначит некоторые платежные записи объявленным переменным. Оттуда мы можем вести учет того, кто пожертвовал нам деньги, сколько, сколько раз этот человек пожертвовал нам деньги и доступный баланс для снятия.
Событие Donation генерируется в последнюю очередь перед тем, как функция завершает свою работу.
```javascript
функция снятия (сумма uint256) внешняя возвращает (bool) {
требуют(msg.sender == владелец, "Неавторизованный!");
require(баланс >= сумма, "Недостаточно баланса");
// Назначение платежных записей...
баланс -= сумма;
снято += сумма;
владелец.перевод(сумма);
общий вывод++;
выпустить вывод(
общий вывод,
сообщение.отправитель,
адрес (этот),
количество,
block.timestamp
вернуть истину;
Эта функция отвечает за выплату владельцу или исполнителю смарт-контракта оговоренной суммы денег.
Мы добавили несколько проверок для проверки того, что деньги снимает именно владелец, а не какой-то случайный незнакомец. Мы также проверили, чтобы сумма, подлежащая выводу, не превышала доступный баланс.
Наконец, событие «Пожертвование» выполняется до завершения функции.
Затем вы можете перейти в редактор ремиксов и запустить смарт-контракт, как показано на изображении ниже…
Поздравляем, вы только что расторгли свой первый смарт-контракт с Solidity.
Вывод
Было весело показать вам, как закодировать ваш первый смарт-контракт в Solidity, надеюсь, вы получили некоторое представление о том, как писать смарт-контракты.
Если вы хотите провести со мной частное репетиторство, пожалуйста все подробности на моем сайте.
Не забудьте подписаться на меня и аплодировать этому уроку, ожидая увидеть вас в следующем…
Об авторе
Госпел Дарлингтон начал свой путь в качестве инженера-программиста в 2016 году. За эти годы он приобрел полноценные навыки работы со стеками JavaScript, такими как React, ReactNative, VueJs, а теперь и с блокчейном.
В настоящее время он работает фрилансером, создает приложения для клиентов и пишет технические руководства, обучая других тому, что делает он.
Евангелие в Дарлингтоне открыто и доступно для вас. Вы можете связаться с ним на LinkedIn, Facebook, Github или на его веб-сайте.
Оригинал