Ремикс + Solidity + Смарт-контракты

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

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

  1. getBalance
  2. purchase
  3. restock

Ремикс

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

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

Во-первых, мы начинаем с создания файла с именем, скажем, vending_machine.sol на вкладке File Explorers.

Код

Solidity 0.6.8 вводит идентификаторы лицензий SPDX, чтобы разработчики могли указать лицензию, которую использует контракт. Идентификаторы лицензий SPDX должны быть добавлены в начало файлов контрактов. Следующий идентификатор должен быть добавлен в начало вашего контракта:

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

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

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

  1. address public owner;
  2. mapping(address => uint) public donutBalances;

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

Итак, donutBalances — это сопоставление, в котором количество пончиков будет связано с адресом. Далее мы переходим к созданию конструктора, который будет автоматически выполняться при развертывании в блокчейне Ethereum.

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

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

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

donutBalances обновляется, когда владелец вводит сумму для увеличения.

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

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

Также в Торговом автомате должно быть указано количество пончиков, введенное покупателем. Когда оба эти требования выполнены, то donutBalances этого адреса вычитается на сумму.

Кроме того, donutBalances msg.sender будут обновляться в зависимости от количества купленных пончиков.

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

Убедитесь, что мы находимся на вкладке Deploy and Run Transactions. Затем выбирается среда Javascript VM. Контракт должен быть нашим контрактом с торговым автоматом.

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

Теперь, когда мы вызываем функцию пополнения запасов из учетной записи владельца, getBalance снова обновляется до 100!

Торговый автомат готов, как и наш смарт-контракт.

Если у вас есть какие-либо проблемы, вы можете обратиться к ссылке GitHub: