Get-метод
Read-only функция смарт-контракта в TON, вызываемая без транзакции и комиссии. Используется для чтения состояния — балансов, владельца, метаданных.
Синонимы: get method, гет-метод, read-only метод ton
Get-метод — это специальная функция смарт-контракта в TON, которая выполняется off-chain, без отправки транзакции и без оплаты газа. Это аналог view-функций в Solidity, но реализованный совсем иначе.
Как работает
Когда внешний клиент (кошелёк, индексер, dApp) хочет узнать состояние контракта:
- Клиент подключается к liteserver — узлу сети, который умеет выдавать данные блокчейна.
- Запрашивает выполнение get-метода: имя метода и аргументы.
- Liteserver загружает текущее состояние контракта (code + data), запускает метод в локальной TVM, возвращает результат.
- Никаких изменений в блокчейне не происходит — это чистое чтение.
В отличие от обычной транзакции, get-метод может работать с большими объёмами данных и сложной логикой без риска для пользователя — все вычисления локальные.
Стандартные get-методы
В TEP-стандартах прописаны обязательные get-методы для разных типов контрактов:
- Wallet contract:
seqno— текущий счётчик подписей (для защиты от replay).get_public_key— публичный ключ владельца.
- Jetton master:
get_jetton_data— общее предложение, владелец, метаданные.get_wallet_address— адрес jetton wallet для конкретного пользователя.
- Jetton wallet:
get_wallet_data— баланс, владелец, мастер-контракт.
- NFT collection:
get_collection_data— общее число элементов, владелец, метаданные.get_nft_address_by_index— адрес NFT по его номеру.royalty_params— настройки royalty.
Соблюдение стандартных get-методов критично для интеграции — без них кошельки не смогут отображать баланс, индексеры не смогут построить историю.
Технически
Каждый get-метод имеет уникальный 64-битный идентификатор — хеш CRC от имени. TVM при вызове получает этот ID, находит соответствующий код в контракте, исполняет его. Возвращаемые значения уходят на стек, откуда их забирает клиент.
В FunC объявление get-метода выглядит как:
(int) seqno() method_id {
return get_data().begin_parse().preload_uint(32);
}
Атрибут method_id помечает функцию как get-метод. В Tact используется аннотация get fun seqno(): Int.
Где это видит пользователь
Прямо нигде — get-методы это инфраструктурный слой. Но:
- Когда Tonkeeper показывает ваш баланс jetton-а, он вызывает
get_wallet_dataна jetton wallet. - Когда TonScan отображает страницу контракта, он сначала делает несколько get-методов для определения типа.
- Когда DEX-агрегатор считает курс свапа, он опрашивает get-методы пулов с резервами.
Все эти запросы бесплатные и быстрые — типичный get-метод выполняется за десятки миллисекунд, что позволяет dApp работать почти как обычные веб-приложения, несмотря на асинхронную природу TON.