Введение 0:00 Илья начинает серию уроков по написанию смарт-контрактов для Ethereum на языке Solidity. Призывает подписаться на канал и вступить в чат Telegram. Упоминает о возможности спонсорства и проблемах с доступом в некоторых странах.
Централизованные и децентрализованные приложения 0:58 Централизованные приложения контролируются одной организацией или группой лиц. Примеры централизованных приложений: социальные сети, почта, онлайн-банкинг. Децентрализованные приложения используют технологию блокчейна и распределённую логику.
Принцип работы блокчейна 2:55 Блокчейн хранит данные в виде связанных блоков, каждый из которых ссылается на предыдущий. Изменение данных на одном узле не остаётся незамеченным другими узлами сети. Для взлома требуется контроль более 50% узлов сети.
Применение децентрализованных приложений 4:54 Децентрализованные приложения удобны для электронных голосований и бронирования билетов. Ethereum позволяет записывать информацию о транзакциях и хранить смарт-контракты в блокчейне. Смарт-контракты — это блоки кода, которые могут быть исполнены в блокчейне.
Пример смарт-контракта 5:52 Пример смарт-контракта: приём денежных средств от клиентов и вывод их владельцем. Взаимодействие со смарт-контрактами возможно через библиотеки, например, Web3.
Язык Solidity 7:42 Solidity — язык для написания смарт-контрактов с особенностями, вытекающими из работы Ethereum и блокчейна. Статическая типизация и компиляция в байт-код. Виртуальная машина Ethereum Virtual Machine EVM обрабатывает байт-код.
Среда разработки Remix 9:36 Remix — интегрированная среда разработки для работы с Solidity. Доступна онлайн и локально на GitHub. Включает компилятор и возможность тестирования смарт-контрактов.
Интерфейс Remix 10:34 Первая вкладка: список файлов в выбранной директории. Вторая вкладка: Solidity Compiler, встроенный компилятор. Возможность выбора версии компилятора из выпадающего списка.
Введение в Solidity 11:33 Solidity — молодой и активно развивающийся язык. Между версиями могут быть значительные изменения. В видео используется версия 0.8, но возможны корректировки при выходе новых версий.
Настройка среды разработки 12:31 Выбор версии виртуальной машины и языка Solidity. Возможность включения автокомпиляции и других опций. Платформа Prochort Hat не обязательна для начала работы.
Выбор среды для тестирования 13:30 Использование JavaScript-виртуальной машины для тестирования контрактов. Аккаунты в виртуальной среде не имеют реальной ценности.
Создание аккаунтов и ключей 14:28 Аккаунт идентифицируется адресом, который начинается с «0x». Открытый ключ виден всем, закрытый ключ известен только владельцу. В реальном блокчейне закрытый ключ должен быть защищён.
Газ и транзакции 15:26 Газ оценивает вычислительные мощности, потреблённые транзакцией. Каждая транзакция стоит денег, которые зависят от газа. Стоимость газа варьируется и зависит от множества факторов.
Стоимость газа 17:16 Единица газа неизменяемая, но его стоимость может меняться. Пример: создание смарт-контракта стоит 32 тысячи газа. Стоимость газа можно узнать на сайте Ethereum Price.
Работа с контрактами 19:13 Развёртывание контракта в выбранном блокчейне. Редактор Remix удобен для работы со смарт-контрактами.
Создание нового контракта 20:10 Создание нового файла с расширением .sol. Добавление лицензии для опенсорс проектов. Указание версии языка Solidity.
Объявление контракта 21:09 Объявление контракта с именем в формате CamelCase. Объявление тела контракта в фигурных скобках.
Вложенность и переменные в контракте 22:07 Для вложенности используются четыре пробела. Внутри контракта можно создавать переменные, константы и функции. Переменная «оунер» типа «адрес» используется для хранения информации о владельце контракта.
Область видимости переменных 23:02 Переменная «оунер» по умолчанию закрыта и недоступна извне. Для доступа к переменной извне используется ключевое слово «паблик». Конструктор автоматически вызывается при размещении контракта в блокчейне.
Установка владельца в конструкторе 23:56 В конструкторе устанавливается владелец контракта на основе адреса отправителя транзакции. Адрес отправителя можно получить через свойство «сендер» объекта «месседж». Данные сохраняются в блокчейне и остаются там до его уничтожения.
Функция для приёма денежных средств 24:54 Создаётся функция «пэй форм» для приёма платежей. Функция помечается как «пойбл», чтобы она могла принимать деньги. Зачисление и списание средств происходит автоматически.
Хранение информации о плательщиках 26:52 Используется хранилище «мэпинг» для учёта информации о плательщиках. Ключи «мэпинга» — адреса отправителей, значения — целые числа без знака. Информация о сумме платежа хранится в транзакции.
Функция для списания средств 29:42 Создаётся функция для списания средств с контракта. Для перевода средств используется метод «трансфер». Создаётся временная переменная для адреса владельца, помеченная как «пойбл».
Получение баланса контракта 31:35 Используется ключевое слово «в» для обращения к текущему контракту. Полученный адрес контракта используется для получения его баланса. Баланс контракта можно получить через атрибут адреса.
Работа с контрактом и безопасность 33:30 Перевод средств с контракта на указанный адрес. Баланс контракта после перевода становится равным нулю. Необходимость проверки доступа только для владельца контракта.
Компиляция и развёртывание контракта 34:28 Проверка выбранной среды и аккаунта для развёртывания. Развёртывание контракта в демонстрационный блокчейн. Просмотр журнала событий и количества потраченного газа.
Стоимость развёртывания 35:27 Развёртывание контракта требует оплаты. При внесении изменений в код контракта его нужно переразворачивать.
Вызов функций извне 36:23 Разноцветные кнопки для вызова функций. Синие кнопки обозначают считывание информации без оплаты. Красные кнопки указывают на функции, которые могут принимать деньги.
Отправка денег через контракт 38:24 Ввод значения и выбор валюты для отправки денег. Отправка одного эфира и оплата комиссии за транзакцию. Проверка поступления денег на контракт.
Получение денег 40:20 Вызов функции для получения денег. Оплата комиссии за списывание средств. Фиксация факта перевода денег в блокчейне.
Заключение 42:17 Подведение итогов урока. Анонс будущих уроков о переменных, типах данных и модификаторах. Призыв к комментариям и подписке на канал.