В этом разделе мы обсудим процесс написания базового смарт-контракта с использованием Solidity. Мы рассмотрим основные компоненты, такие как переменные, функции и модификаторы. Затем мы рассмотрим пример реализации простого токенного контракта.
Переменные, функции и модификаторы
Пример 1: Внедрение простого токенного контракта
Давайте создадим простой токенный контракт, используя Solidity. Этот контракт позволит пользователям передавать токены между учетными записями и проверять баланс токенов любой учетной записи.
TypeScriptpragma версия ^0.8.0;контракт SimpleToken { // Объявление переменных состояния адрес владельца публичный; картографирование(адрес => uint256) балансы общественности; // Инициализация токен контракта конструктор(uint256 начальныйЗапас) { владелец = msg.sender; балансы[владелец] = начальныйЗапас; } // Функция для передачи токенов функция передачи(адрес to, uint256 количество) общественный { требовать(balances[msg.sender] >= количество, "Недостаточный баланс"); балансы[msg.sender] -= количество; балансы[to] += количество; } // Функция для проверки баланса токена учетной записи функция баланса(адрес учетной записи) общественный вид возращений (uint256) { вернуть балансы[учетной записи]; }}В этом контракте у нас есть:
владелецибалансыдля хранения адреса владельца контракта и балансов токенов всех адресов соответственно.конструкторфункция, которая устанавливает начальное количество токенов и назначает их владельцу контракта.перевод функция, позволяющая пользователям переводить токены на другие аккаунты. Он использует метод требоватьутверждение, чтобы убедиться, что отправителю достаточно токенов для передачи.балансфункция, которая возвращает баланс токена указанного аккаунта.Пример2: Реализация простой системы голосования
TypeScriptpragma solidity ^0.8.0; контракт VotingSystem { отображение (байт32 => uint256) общедоступные votesReceived; байт32[] общедоступные candidateList; конструктор (байт32[] память candidateNames) { candidateList = candidateNames; } функция voteForCandidate (байт32 кандидат) общедоступная { требуется действительный кандидат (кандидат), "Недопустимый кандидат."); votesReceived [кандидат] + = 1; } функция totalVotesFor (байт32 кандидат) общедоступная представление возвращает (uint256) { требуется действительный кандидат (кандидат), "Недопустимый кандидат."); возврат votesReceived [кандидат]; } функция validCandidate (байт32 кандидат) общедоступная представление возвращает (логическое) { для (uint256 i = 0; i < candidateList.length; i++) { если (candidateList [i] == кандидат) { вернуть true; } } вернуть false; }}В этом примере, Система голосованияконтракт позволяет пользователям голосовать за одного из нескольких кандидатов, позвонив по voteForCandidateфункция. Контракт отслеживает количество полученных голосов за каждого кандидата с помощью полученные голосасопоставление, где ключом является имя кандидата, а значением - количество голосов. candidateListпеременная хранит список допустимых кандидатов. totalVotesForФункцию можно вызвать, чтобы проверить количество голосов, полученных определенным кандидатом, и действительный кандидатФункция проверяет, действителен ли кандидат. Это простой пример того, как на языке Solidity можно создавать децентрализованные приложения с сложной логикой.
Особенности
Переменные, функции и модификаторы являются важными компонентами в умных контрактах Solidity.
Solidity имеет два типа переменных: глобальные переменные и локальные переменные.
Функции используются для выполнения задач и могут иметь входные параметры и возвращаемые значения.
Модификаторы используются для изменения поведения функции и улучшения читаемости и управляемости кода.
Контракт SimpleToken позволяет пользователям передавать токены и проверять балансы токенов.
Контракт SimpleToken демонстрирует использование переменных состояния, конструктора и функций, таких как transfer и balanceOf.
Контракт VotingSystem позволяет пользователям голосовать за кандидатов и отслеживает количество голосов.
Контракт VotingSystem демонстрирует использование отображений, массивов и функций, таких как voteForCandidate, totalVotesFor и validCandidate.