Отправка транзакции через TON Connect

Отправишь перевод Gram через sendTransaction: messages, validUntil, network и обработка отказа пользователя.

Отправка транзакции

sendTransaction просит кошелёк подписать и отправить одно или несколько исходящих сообщений с подключённого аккаунта. dApp передаёт параметры; пользователь видит детали в кошельке и подтверждает или отклоняет.

Суммы в запросе — в нанограммах (строка): 100000000 = 0.1 Gram.


Перевод 0.05 Gram

tsx
// @tonconnect/ui-react ^3.0.0
import { useTonConnectUI, useTonWallet } from "@tonconnect/ui-react";

const RECIPIENT =
  "EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N"; // mainnet-пример

export function SendGramButton() {
  const [tonConnectUI] = useTonConnectUI();
  const wallet = useTonWallet();

  async function onSend() {
    if (!wallet) {
      await tonConnectUI.openModal();
      return;
    }

    try {
      const result = await tonConnectUI.sendTransaction({
        validUntil: Math.floor(Date.now() / 1000) + 300,
        network: "-239", // mainnet; для testnet — "-3"
        messages: [
          {
            address: RECIPIENT,
            amount: "50000000", // 0.05 Gram
          },
        ],
      });
      console.log("boc", result.boc);
    } catch (e) {
      // пользователь закрыл кошелёк / нажал Reject — это нормальный исход
      console.error("sendTransaction failed", e);
    }
  }

  return (
    <button type="button" onClick={onSend}>
      Отправить 0.05 Gram
    </button>
  );
}

Для максимальной совместимости с кошельками используй raw-массив messages. Structured items (type: "gram" / "jetton") удобнее, но требуют поддержки фич конкретным кошельком.

Как это работает

validUntil — unix-время в секундах; после него кошелёк должен отклонить устаревший запрос.

network"-239" mainnet, "-3" testnet. Если сеть dApp и кошелька не совпадают, запрос отклонят.

messages[].address — user-friendly адрес (TEP-2), не raw 0:....

messages[].amount — nanotons / nanograms строкой.

result.boc — base64 BoC внешнего сообщения; по нему ищешь транзакцию в эксплорере / API.

Отказ пользователя — ожидаемый путь, не «падение приложения». Разбор кодов — в следующей статье.

Частые ошибки

Не указал network → на части кошельков запрос уйдёт «не туда» или будет отклонён. Задавай явно.

Адрес в raw-форме → кошелёк может отвергнуть request. Конвертируй в user-friendly.

Нет try/catch → Reject выглядит как необработанное исключение в UI. Всегда лови ошибку и показывай нейтральный статус.


Что дальше

Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация