Смарт-контракты. Что такое смарт-контракт и как его создать в Solidity. С подробным разбором кода. Артем Демиденко
создавать пользовательские типы данных, объединяя различные поля. Это удобно, когда нужно хранить связанные данные в одной переменной.
Пример использования структуры:
struct Person {
....string name;
....uint256 age;
}
Person public alice;
alice = Person("Alice", 30); // Инициализация структуры
Основные типы данных Solidity позволяют эффективно хранить и обрабатывать информацию в смарт-контрактах. При создании смарт-контрактов важно правильно выбирать тип данных в зависимости от характера данных и требований к работе контракта.
3.4.2 Хранилище данных
В смарт-контрактах управление данными является фундаментальной задачей. Данные могут быть различных типов – от чисел и строк до более сложных структур. Понимание того, как работает хранилище данных, поможет вам создавать эффективные и безопасные смарт-контракты.
Переменные состояния и локальные переменные
Один из ключевых аспектов управления данными – это различие между переменными состояния (state variables) и локальными переменными (local variables).
Переменные состояния хранят данные на блокчейне и сохраняют свои значения между вызовами функций. Они могут быть доступны для всех, кто читает состояние контракта. Эти переменные широко используются для хранения постоянных данных, таких как балансы пользователей, настройки контракта и другие глобальные параметры.
Локальные переменные, с другой стороны, существуют только внутри функции и исчезают после её выполнения. Они используются для временных вычислений и обработки данных внутри функций. Локальные переменные полезны, когда вам нужно временно хранить промежуточные результаты вычислений или выполнять действия внутри функции, не оставляя следов в состоянии контракта.
Пример использования переменных состояния и локальных переменных
Давайте представим, что у нас есть смарт-контракт для управления простым токеном. Мы хотим хранить общее количество выпущенных токенов и балансы каждого адреса.
contract SimpleToken {
....uint256 public totalSupply;
....mapping(address => uint256) public balances;
....constructor(uint256 initialSupply) {
........totalSupply = initialSupply;
........balances[msg.sender] = initialSupply;
....}
....function transfer(address to, uint256 amount) public {
........require(balances[msg.sender] >= amount, "Not enough balance");
........balances[msg.sender] -= amount;
........balances[to] += amount;
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.