Типы данных в Solidity: uint, address, mapping, struct

Объясняем крипту простыми словами: как купить первый раз, безопасно хранить, переводить и не нарушать закон в РФ. Делаем пошаговые гайды, чек‑листы и разборы метрик CoinMarketCap/Gecko без шума и хайпа. Наша цель — ваша безопасность, понимание рисков и уверенные действия в мире цифровых активов.

solidityuintaddress

Solidity — язык смарт-контрактов в Ethereum, и понимание базовых типов данных напрямую влияет на безопасность, стоимость газа и логику контракта. Разберём 4 ключевых типа, которые встречаются почти в каждом проекте.

uint

uint — это беззнаковое целое число, то есть только 0 и больше.

uint public totalSupply = 1000;

По умолчанию uint = uint256, это стандартный размер в Solidity.

Где используется:

  • балансы токенов
  • количество голосов
  • суммы переводов
  • таймеры и лимиты

Важно:

  • отрицательные числа uint не поддерживает
  • в новых версиях Solidity переполнение проверяется автоматически
  • для экономии газа иногда используют uint8, uint32, но не всегда это реально выгодно

address

address хранит Ethereum-адрес — кошелёк пользователя или адрес контракта.

address public owner;

Что можно делать с address:

  • хранить владельца контракта
  • отправлять ETH
  • проверять, кто вызвал функцию через msg.sender
owner = msg.sender;

Полезно помнить:

  • address — один из самых важных типов для контроля доступа 🔐
  • ошибки в логике адресов могут привести к потере средств
  • часто используется вместе с mapping

mapping

mapping — это хранилище вида «ключ => значение». Аналог словаря или хеш-таблицы.

mapping(address => uint) public balances;

Здесь каждому адресу соответствует его баланс.

Плюсы:

  • быстрый доступ к данным
  • идеально подходит для балансов, прав доступа, голосов
  • экономичен для хранения больших наборов данных

Особенности:

  • нельзя перебрать все элементы mapping напрямую
  • не хранит список ключей
  • для перебора обычно добавляют массив отдельно

Это частая ошибка новичков: ожидать, что mapping можно читать как обычный список.

struct

struct позволяет объединять несколько полей в одну сущность. Это удобно для сложных данных.

struct User {
    address wallet;
    uint balance;
    bool verified;
}

User public user;

Где полезен struct:

  • профили пользователей
  • параметры сделки
  • NFT-метаданные
  • заявки, ордера, DAO-предложения 🧩

Часто struct используют вместе с mapping:

mapping(address => User) public users;

Так можно привязать структуру данных к каждому адресу.

📌 Итог

Базовая логика многих смарт-контрактов выглядит так:

  • uint — считает значения
  • address — определяет участникам
  • mapping — связывает данные
  • struct — упаковывает данные в удобный формат

Если понимать эти 4 типа, читать и писать контракты становится намного проще, а риск критических ошибок снижается 🚀

Подборку каналов про Криптовалюты — с новостями, аналитикой и разбором блокчейн-проектов — стоит посмотреть ниже 📊

🫵 Подборка каналов
🐋 Каталог ботов и приложений
🛩 Навигация

Читайте так же