Чтение и запись в переменную состояния - 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, а затем получать его значение.