Как проверить отправителя уведомления о переводе жетонов TON
Магазин получил сообщение с ожидаемым кодом операции и суммой. Такое тело может составить и посторонний контракт. Для зачисления важно, какой контракт действительно прислал сообщение.
Заранее вычислите ожидаемый кошелёк
Для каждого принимаемого мастер-контракта вызовите get_wallet_address с адресом владельца, на который магазин получает оплату. Сохраните связь между мастером, владельцем и полученным адресом. В примере условные имена заменяют разобранные TON-адреса. Проверка кода операции проходит, проверка адреса отправившего контракта — нет.
const notice = { opcode: 0x7362d09c, envelopeSource: "wallet-B", sender: "buyer" };
const walletsForMerchant = new Map([["wallet-A", "accepted-master"]]);
console.log(notice.opcode === 0x7362d09c);
console.log(walletsForMerchant.has(notice.envelopeSource));
Различайте участников перевода
Поле отправителя в теле уведомления обозначает прежнего владельца жетонов. Источник входящего внутреннего сообщения должен совпасть с жетон-кошельком магазина для разрешённого мастера. Перед зачислением сравните нормализованные адреса и сверьте получателя. При нулевом forward_ton_amount перевод может обойтись без уведомления. Сервису, который обрабатывает оплаты по уведомлениям, стоит явно указать это условие плательщику.