Отправка токенов в сети TON

Всем привет, пытаюсь отправить токены при помощи ton-connect (@tonconnect/ui), однако застрял на одном моменте. Методом проб и ошибок я понял, что для того что бы отправить токен, надо взаимодействовать с jetton_wallet_v1 отправителя.

Вот код который это демонстрирует

  const jettonWalletContract = ''; // Адрес именно jetton_wallet_v1 у получателя 
  const destinationAddress = Address.parse(''); // Адрес получателя
  const destination_response = Address.parse(tonConnectUI.account.address); // Адрес отправителя

  const forwardPayload = beginCell()
      .storeUint(0, 32)
      .storeStringTail(userTag)
      .endCell();

  const body = beginCell()
      .storeUint(0xf8a7ea5, 32)
      .storeUint(0, 64)
      .storeCoins(toNano(amount))
      .storeAddress(destinationAddress)
      .storeAddress(destination_response)           
      .storeBit(0)
      .storeCoins("1")
      .storeBit(1)
      .storeRef(forwardPayload)
      .endCell();  

  var payload = body.toBoc().toString("base64")
  console.log(payload);

  const tokenTransferMessage = 
  {
    address: jettonWalletContract,
    amount: toNano(0.05).toString(),
    payload: payload
  };

И на этом момент можно было и закончить, но проблема в том что эти значения я подставлял сам на тесте, а для каждого отдельного клиента понятное дело надо свое значение jetton_wallet_v1. И это решение я не могу найти.

Увидел один пример, вот такой:

      const senderAddress = wallet.account.address;
      const keyPair = ; // Тут указать ключи

      const amount = toNano('1'); // Сумма перевода
      const recipientAddress = Address.parse(''); // Адрес получателя

      const message = new CommonMessageInfo({
        body: new Cell(),
      });

      const internalMessage = new InternalMessage({
        to: recipientAddress,
        value: amount,
        bounce: false,
        body: message,
      });

      const stateInit = new StateInit();
      const cell = beginCell()
        .storeMessage(internalMessage)
        .storeStateInit(stateInit)
        .endCell();

      const signature = sign(cell.hash(), keyPair.secretKey);

      await tonConnectUI.sendTransaction({
        to: recipientAddress.toString(),
        value: amount.toString(),
        data: cell.toBoc().toString('base64'),
        signature: signature.toString('base64'),
      });

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


Ответы (1 шт):

Автор решения: Влад Гаврилюк

Я не стал сильно влазить в детали, то есть во взаимодействие на прямую с контрактами, решил использовать toncenter api.

При помощи запроса /api/v3/jetton/wallets который описан здесь https://testnet.toncenter.com/api/v3/#/default/get_jetton_wallets_api_v3_jetton_wallets_get можно получить из переменной address требуемое значение

→ Ссылка