Чтение и запись в переменную состояния - demonoved/A-trial-run-in-solidity GitHub Wiki
// SPDX-License-Identifier: MIT
// compiler version must be greater than or equal to 0.8.20 and less than 0.9.0
pragma solidity ^0.8.23;
contract SimpeStorage {
// переменная состояния для хранениня числа
uint public num;
//отправляем транзакцию для записи в переменную состояния
function set(uint _num) public {
num = _num;
}
//считывать данные из переменной состояния можно без транзакций
function get () public view returns (uint) {
return num;
}
}
Данный код представляет собой смарт-контракт на языке программирования Solidity, который используется для создания смарт-контрактов в экосистеме Ethereum. Этот определенный смарт-контракт называется SimpleStorage, и его основное назначение - простой пример, демонстрирующий запись и чтение значения целочисленной переменной. Давайте пошагово разберем каждую часть кода:
-
// SPDX-License-Identifier: MITЭто комментарий для указания лицензии контракта. В данном случае используется MIT License, что дает право любому лицу свободно копировать, изменять, публиковать, использовать, компилировать, продавать или распространять этот код.
-
pragma solidity ^0.8.23;Эта строка говорит компилятору, что код должен быть скомпилирован с версией Solidity 0.8.23 или выше, но ниже 0.9.0. Такое указание версий необходимо для обеспечения совместимости кода с определенной версией компилятора Solidity.
-
contract SimpeStorage {Определение контракта с именем
SimpeStorage(Похоже, это опечатка, и имелось в видуSimpleStorage). -
uint public num;Определение публичной переменной состояния
numтипаuint(беззнаковое целое число). Так как она объявлена какpublic, компилятор автоматически создает функцию доступа (getter), позволяющую любому участнику сети получить её значение. -
function set(uint _num) public {Определение функции
set, которая принимает один параметр_numтипаuint. Это публичная функция, которая позволяет записать новое значение в переменнуюnum. Это требует выполнения транзакции, поскольку изменяет состояние контракта. -
num = _num;Внутри функции
setпроисходит присвоение значения аргумента_numпеременной состоянияnum. Эта строка именно и изменяет состояние контракта. -
}Конец определения функции
set. -
function get() public view returns (uint) {Определение функции
get, которая не принимает никаких входных параметров. Ключевое словоviewговорит о том, что при вызове функции состояние контракта не будет изменено. Функция возвращает значение типаuint. -
return num;Возвращает текущее значение переменной состояния
num. -
}Конец определения функции
get. -
}
Конец определения контракта SimpleStorage.
Общий смысл этого контракта довольно прост - он дает возможность любому участнику сети сохранять целое число в блокчейне Ethereum, а затем получать его значение.