Базовый платёж

Solana обеспечивает мгновенные глобальные переводы токенов с комиссиями менее $0.001. Независимо от того, строите ли вы сервис для международных переводов, выплат зарплаты или казначейских операций, базовый платёж в стейблкоинах проводится менее чем за секунду и стоит лишь доли цента.

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

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

Подробнее о ключевых концепциях платежей читайте в разделе Как работают платежи в Solana.

Плагин token2022Program() из @solana-program/token-2022 расширяет ваш клиент @solana/kit вспомогательным объектом client.token2022. Его метод transferToATA автоматически обрабатывает деривацию ATA и построение транзакций, что идеально подходит для единичных платёжных переводов.

Ниже приведены основные этапы процесса. Полный рабочий код смотрите в разделе Демо.

Создайте токен-хелпер

Добавьте плагин token2022Program() к вашему клиенту с помощью .use(token2022Program()). Это открывает доступ к client.token2022, чьи instructions предоставляют методы для стандартных операций с токенами.

Используйте token2022Program() для минтов, принадлежащих программе Token-2022, или tokenProgram() из @solana-program/token для минтов, принадлежащих оригинальному Token Program.

Отправьте платёж

Используйте transferToATA() для перевода токенов между кошельками. Метод обрабатывает:

  • Разрешение ATA: Автоматически определяет Associated Token Accounts (ATA) для отправителя и получателя. Если ATA получателя не существует, инструкция по созданию аккаунта автоматически добавляется в ту же транзакцию.
  • Проверяемые суммы: Передайте amount в базовых единицах вместе с decimals минта. Перевод проверяется относительно десятичных знаков минта on-chain (например, 250000 базовых единиц -> 0.25 токена, если минт имеет 6 десятичных знаков)
  • Построение транзакции: sendTransaction() строит, подписывает и отправляет транзакцию, возвращая результат, чьё поле context.signature содержит подпись транзакции

Проверка балансов

После завершения перевода считайте балансы токенов из RPC. Определите ATA каждого кошелька с помощью findAssociatedTokenPda(), затем вызовите getTokenAccountBalance() для получения баланса этого аккаунта.

Создайте токен-хелпер

Добавьте плагин token2022Program() к вашему клиенту с помощью .use(token2022Program()). Это открывает доступ к client.token2022, чьи instructions предоставляют методы для стандартных операций с токенами.

Используйте token2022Program() для минтов, принадлежащих программе Token-2022, или tokenProgram() из @solana-program/token для минтов, принадлежащих оригинальному Token Program.

Отправьте платёж

Используйте transferToATA() для перевода токенов между кошельками. Метод обрабатывает:

  • Разрешение ATA: Автоматически определяет Associated Token Accounts (ATA) для отправителя и получателя. Если ATA получателя не существует, инструкция по созданию аккаунта автоматически добавляется в ту же транзакцию.
  • Проверяемые суммы: Передайте amount в базовых единицах вместе с decimals минта. Перевод проверяется относительно десятичных знаков минта on-chain (например, 250000 базовых единиц -> 0.25 токена, если минт имеет 6 десятичных знаков)
  • Построение транзакции: sendTransaction() строит, подписывает и отправляет транзакцию, возвращая результат, чьё поле context.signature содержит подпись транзакции

Проверка балансов

После завершения перевода считайте балансы токенов из RPC. Определите ATA каждого кошелька с помощью findAssociatedTokenPda(), затем вызовите getTokenAccountBalance() для получения баланса этого аккаунта.

Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());

Демонстрация

Demo
// Generate signers for sender and recipient
const sender = await generateKeyPairSigner();
const recipient = await generateKeyPairSigner();
console.log("Sender Address:", sender.address);
console.log("Recipient Address:", recipient.address);
// Demo Setup: Create client, mint account, and fund the sender with initial tokens
const { client, mint } = await demoSetup(sender);
console.log("\nMint Address:", mint.address);
// =============================================================================
// Basic Token Payment Demo
// =============================================================================
// Transfer tokens from sender to recipient. The source and destination ATAs are
// derived automatically, and the recipient's ATA is created if it does not exist.
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n, // 0.25 tokens (base units for a mint with 6 decimals)
decimals: 6
})
.sendTransaction();
console.log("\n=== Token Payment Complete ===");
console.log("Transaction Signature:", result.context.signature);
// Derive the sender and recipient ATAs to read their balances
const [senderAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: sender.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const [recipientAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: recipient.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
// Fetch final token account balances via RPC
const senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();
const recipientBalance = await client.rpc
.getTokenAccountBalance(recipientAta)
.send();
console.log(
"\nSender Token Account Balance:",
senderBalance.value.uiAmountString
);
console.log(
"Recipient Token Account Balance:",
recipientBalance.value.uiAmountString
);
// =============================================================================
// Demo Setup Helper Function
// =============================================================================
Console
Click to execute the code.

Is this page helpful?

Содержание

Редактировать страницу