Разработка смарт-контрактов для торговых автоматов


ВВЕДЕНИЕ В ТОРГОВЫЙ АВТОМАТ

Торговый автомат — это интересная вещь для начала знакомства с основами Solidity. Итак, мы собираемся написать код на Solidity, который поможет нам создать смарт-контракт для торгового автомата Lizy!

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

— Введение в торговый автомат
— Переменная
— Функции и типы видимости функций (Private) и т.д.
— Функция получения баланса
— Функция покупки
— Функция пополнения запасов
— Компиляция нашего смарт-контракта
— Развертывание нашего смарт-контракта
— Заключение

Торговый автомат — это автоматизированная машина, которая предоставляет потребителям такие товары, как закуски, напитки, сигареты и лотерейные билеты, после того как в автомат будут вставлены наличные, кредитная карта или другие формы оплаты.

Для начала давайте перейдем к Remix, который представляет собой IDE для языка Solidity. Он используется для написания смарт-контрактов для блокчейна. С точки зрения реализации кодирования для токенов ERC-20, шесть основных функций кодирования следующие: получить баланс
купить
пополнить запасы

Remix(IDE)

Remix — это мощный инструмент с открытым исходным кодом, который помогает вам писать контракты Solidity прямо из браузера. Написанный на JavaScript, Remix поддерживает использование как в браузере, так и локально. Remix также поддерживает тестирование, отладку и развертывание смарт-контрактов и многое другое. Введите url ниже, чтобы получить доступ к обзорной среде remix:

https://remix.ethereum.org/

Идентификатор лицензии

Solidity 0.8.11 вводит идентификаторы лицензий SPDX, чтобы разработчики могли указать лицензию, которую использует контракт. (Например, контракты OpenZeppelin используют лицензию MIT).

Идентификаторы лицензий SPDX должны быть добавлены в верхнюю часть файлов контрактов. (см. пример в OpenZeppelin Contracts ERC20.sol)

Следующий идентификатор должен быть добавлен в верхнюю часть вашего контракта (пример использует лицензию MIT):

//SPDX-License-Identifier: MIT
Войти в полноэкранный режим Выйти из полноэкранного режима

Лицензия должна быть одной из следующих: https://spdx.org/licenses/

⚠️ Если идентификатор лицензии не включен в файл контракта, компилятор выдаст предупреждение.

❗ Если в файле контракта имеется несколько идентификаторов лицензии, компилятор выдаст ошибку.

Теперь нам нужно написать версию solidity, которую мы будем использовать:

pragma solidity ^0.8.15;
Войти в полноэкранный режим Выйти из полноэкранного режима

Следующим шагом будет создание контракта. В Solidity мы пишем смарт-контракт, набирая ключевое слово contract, за которым следует название контракта. Давайте назовем наш контракт Vending Machine. Итак, напишите:

contract VendingMachine{

        }
Войти в полноэкранный режим Выйти из полноэкранного режима

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

1: адрес публичного владельца;
2: mapping(address => uint) public lizyBalances;

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

Таким образом, lizyBalances — это отображение, в котором количество lizy будет связано с адресом. Далее мы создадим конструктор, который будет автоматически выполняться при развертывании на блокчейне Ethereum.

 constructor(){
            owner = msg.sender;
            lizyBalances[address(this)] = 1000;
            }
Вход в полноэкранный режим Выход из полноэкранного режима

Создаем первую функцию — getBalance(). Она используется для получения баланса lizy, оставшихся в торговом автомате.

lizyBalances[address(this)] представляет собой баланс лизи, связанных с текущим счетом Ethereum.


            function getBalance() public view returns (uint) {

                return lizyBalances[address(this)];

                }
Вход в полноэкранный режим Выход из полноэкранного режима

Следующая функция называется restock(). Она ограничена только владельцем, поэтому ключевое слово используется как require.
Баланс lizyBalances обновляется, когда владелец вводит сумму, которая должна быть увеличена.


        function restock(uint amount) public {

            require(msg.sender == owner, "Only owner can restock the lizy!");
            lizyBalances[address(this)]+= amount;

            }

Вход в полноэкранный режим Выход из полноэкранного режима

Последняя функция — это функция покупки, которая фактически помогает человеку или клиенту приобрести lizy’s.

Цена одного lizy’s, которую мы ввели, составляет 0,5 ETH. Таким образом, значение msg.value должно быть равно сумме, умноженной на 0,5 ETH.

Кроме того, торговый автомат должен иметь количество lizy’s, введенное клиентом. Если оба эти требования выполнены, то lizyBalances этого адреса уменьшается на сумму.

Кроме того, баланс lizyBalances отправителя msg.sender будет обновлен на количество купленных lizy’s.


            function purchase(uint amount) public payable{

                require(msg.value >= amount * 0.5 ether, "You must pay at least 0.5 ether per lizy");

                require(lizyBalances[address(this)] >= amount, "OOPS! Not enough lizy");

                lizyBalances[address(this)] -= amount;

                lizyBalances[address(msg.sender)] += amount;

                }
Вход в полноэкранный режим Выход из полноэкранного режима

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

Для развертывания нашего смарт-контракта мы будем использовать среду Injected Provider-Metamask.

Убедитесь, что мы находимся на вкладке Deploy and Run Transactions. Затем необходимо выбрать среду Injected Provider-Metamask. Контракт должен быть нашим контрактом Vending Machine.

Разверните его сейчас, и вы получите развернутый контракт следующим образом. Кроме того, теперь каждый раз, когда клиент покупает lizy’s, lizyBalances обновляется при вызове функции.

Estimated gas fee 0.00138873 RopstenETH
Вход в полноэкранный режим Выход из полноэкранного режима

Ниже в контракте указан адрес торгового автомата lizy

0x18855a8cd0dda8d56a7cd82211b1be7c7433da09
Вход в полноэкранный режим Выход из полноэкранного режима

Результат: ropsten.etherscan.io

Другая информация включает

Transaction Hash:
0x19adcb673ca2e8fcb60649f354a6a24c330ba4538c6d0cf41b758e0925ca6fc8

Block: 12621525 

Transaction Fee: 0.00138872500388843 Ether ($0.0
Войти в полноэкранный режим Выход из полноэкранного режима

Заключение.

Вы только что создали свой собственный смарт-контракт торгового автомата, содержащий три функции (getBalance, purchase и restock). Надеюсь, это было краткое руководство, которое поможет вам войти в курс дела.

Надеюсь, вам понравилась статья! Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь оставлять их ниже или свяжитесь со мной по адресу

Оцените статью
devanswers.ru
Добавить комментарий