Отправка токенов в сети 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 требуемое значение