Решено
При обсуждении платежей в TON вам следует знать о двух методах:
1. Платежные каналы
Этот метод полезен, когда у вас много мелких платежей между несколькими сторонами и стоимость газа (комиссия за транзакцию) является проблемой. Этот метод устранит блокчейн-сборы и сделает их постоянными и независимыми от количества платежей.
Метод работает с использованием стандартного смарт-контракта под названием PaymentChannel, экземпляр которого обе стороны развертывают. Затем обе стороны вносят в контракт некоторое количество монет TON. Затем они осуществляют транзакции вне сети и могут осуществлять тысячи платежей между собой без уплаты каких-либо комиссий. Только когда канал будет закрыт, контракт рассчитает, как внесенные деньги должны быть разделены между сторонами, и фактически отправит им деньги по цепочке.
Дополнительная информация: https://github.com/ton-blockchain/payment-channels
И вот клиентская библиотека в JS, которая облегчает процесс.
2. Простой платеж
Этот метод намного проще и его следует использовать, когда вы ожидаете единовременного платежа и газ не является проблемой. В этом случае вы просто создаете новый кошелек для получателя (например, магазин электронной коммерции) и внедряете небольшой серверный модуль, обычно на JavaScript или Python, который периодически запрашивает кошелек, чтобы узнать, были ли на него произведены какие-либо платежи.
Вы можете развернуть контракт кошелька, используя любой стандартный кошелек TON, такой как TonKeeper, а затем использовать его адрес в своем бэкэнде, чтобы периодически проверять, получены ли платежи.
Дополнительная информация: https://ton.org/docs/#/payment-processing/deposits-single-wallet
И если вы поклонник JavaScript, вот хороший пост в блоге, показывающий, как это можно легко сделать: https://society.ton.org/how-ton-wallets-work-and-how-to-доступ-к-ним-из-javascript
const tonMnemonic = require("tonweb-mnemonic");
const TonWeb = require("tonweb");
async function main() {
// mnemonic to key pair
const mnemonic = "rail sound peasant ... portion gossip arrow"; // 24 words
const mnemonicArray = mnemonic.split(" ");
const keyPair = await tonMnemonic.mnemonicToKeyPair(mnemonicArray);
console.log("public key:", Buffer.from(keyPair.publicKey).toString('hex'));
// list available wallet versions
const tonweb = new TonWeb(new TonWeb.HttpProvider("https://toncenter.com/api/v2/jsonRPC"));
console.log("wallet versions:", Object.keys(tonweb.wallet.all).toString());
// instance of wallet V4 r2 (from the list printed above)
const WalletClass = tonweb.wallet.all["v4R2"];
const wallet = new WalletClass(tonweb.provider, { publicKey: keyPair.publicKey });
const address = await wallet.getAddress();
console.log("address:", address.toString(true, true, true));
const seqno = await wallet.methods.seqno().call();
console.log("seqno:", seqno);
await sleep(1500); // avoid throttling by toncenter.com
const balance = await tonweb.getBalance(address);
console.log("balance:", TonWeb.utils.fromNano(balance));
}
main();
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}