В Solidity модификаторы view, pure и payable показывают, что именно может делать функция. Это важно и для безопасности контракта, и для понимания, когда пользователь платит газ, а когда — отправляет ETH.
1. `view` — функция только читает данные 👀
view означает, что функция не изменяет состояние блокчейна, а только читает данные из контракта.
function getBalance() public view returns (uint) {
return balance[msg.sender];
}
Что важно:
- можно читать
state variables - нельзя менять значения переменных
- нельзя создавать транзакционное изменение состояния
- при вызове локально через интерфейс кошелька или dApp обычно не требует газа
Подходит для:
- получения баланса
- чтения настроек контракта
- просмотра статуса пользователя
2. `pure` — функция вообще не работает с состоянием контракта 🧠
pure ещё строже, чем view. Такая функция не читает и не изменяет данные контракта, а работает только с переданными аргументами.
function add(uint a, uint b) public pure returns (uint) {
return a + b;
}
Что важно:
- нельзя читать
state variables - нельзя изменять состояние
- используется для вычислений
- удобна для внутренней логики и математических операций
Подходит для:
- расчётов
- конвертаций
- проверки формул
- служебной бизнес-логики
3. `payable` — функция может принимать ETH 💸
payable нужна, когда пользователь отправляет в контракт нативную монету сети: ETH в Ethereum, BNB в BNB Chain и т.д.
function deposit() public payable {
balance[msg.sender] += msg.value;
}
Что важно:
- без
payableконтракт отклонит перевод средств в такую функцию - внутри можно использовать
msg.value— это сумма перевода - такие функции часто участвуют в покупке токенов, депозитах, mint NFT
Подходит для:
- пополнения баланса
- покупки через смарт-контракт
- оплаты mint
- приёма донатов или комиссий
Ключевое различие 📌
view— читает, но не меняетpure— не читает и не меняет, только вычисляетpayable— может принимать криптовалюту
Важный нюанс
payable — это не альтернатива view или pure, а отдельное свойство функции. На практике функция обычно бывает либо изменяющей состояние с payable, либо просто view/pure для чтения и расчётов. Например, функция приёма депозита почти всегда не view, потому что она меняет данные в контракте.
Почему это важно для разработчика и инвестора 🔒
Понимание этих модификаторов помогает:
- быстрее читать код смарт-контрактов
- замечать рискованные функции
- отличать безопасное чтение данных от отправки средств
- лучше понимать, за что именно вы платите газ
Если видите payable, всегда проверяйте, куда уходят средства и что происходит после перевода.
📊 Подборку полезных каналов про криптовалюты можно посмотреть ниже — там новости, аналитика и практические разборы рынка.