К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Get-метод

Read-only функция смарт-контракта в TON, вызываемая без транзакции и комиссии. Используется для чтения состояния — балансов, владельца, метаданных.

Синонимы: get method, гет-метод, read-only метод ton

Get-метод — это специальная функция смарт-контракта в TON, которая выполняется off-chain, без отправки транзакции и без оплаты газа. Это аналог view-функций в Solidity, но реализованный совсем иначе.

Как работает

Когда внешний клиент (кошелёк, индексер, dApp) хочет узнать состояние контракта:

  1. Клиент подключается к liteserver — узлу сети, который умеет выдавать данные блокчейна.
  2. Запрашивает выполнение get-метода: имя метода и аргументы.
  3. Liteserver загружает текущее состояние контракта (code + data), запускает метод в локальной TVM, возвращает результат.
  4. Никаких изменений в блокчейне не происходит — это чистое чтение.

В отличие от обычной транзакции, 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.

См. также