Paiement avec mémo

Le programme de mémo de Solana vous permet de joindre des numéros de facture, des identifiants de commande ou des références personnalisées à n'importe quel paiement. Ces mémos sont enregistrés de manière permanente on-chain et visibles dans les journaux de transaction, ce qui facilite la correspondance des paiements avec vos systèmes internes.

Comment ça fonctionne

Le programme Memo écrit du texte dans les journaux de la transaction. Ces journaux sont indexés par les explorateurs et les fournisseurs RPC, ce qui rend les mémos consultables pour le rapprochement des paiements.

Consultez Comment fonctionnent les paiements sur Solana pour les concepts fondamentaux des paiements.

Ajouter un mémo nécessite de construire les instructions directement, ce qui vous donne le contrôle sur ce qui est inclus dans la transaction.

Les étapes ci-dessous montrent le flux principal. Consultez la Démo pour le code complet exécutable.

Importer le programme Memo

Importez getAddMemoInstruction depuis @solana-program/memo pour créer des instructions de mémo.

Créer l'instruction de transfert

Créez l'instruction de transfert de token en spécifiant l'ATA source, l'ATA de destination, l'autorité (signataire) et le montant en unités de base.

Créer l'instruction de mémo

Créez une instruction de mémo avec un message. Ce message sera visible dans les journaux du programme de la transaction.

Envoyer la transaction avec mémo

Combinez les instructions de transfert et de mémo dans une seule transaction.

Afficher le mémo dans les journaux de transaction

Une fois la transaction confirmée, récupérez-la pour afficher le mémo dans les journaux. Le mémo apparaît comme un message de journal du programme Memo.

Example Transaction Logs
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [1]",
"Program log: Instruction: Transfer",
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1682 of 200000 compute units",
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success",
"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr invoke [1]",
'Program log: Memo (len 46): "Payment for services rendered - Invoice #12345"',
"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr consumed 18097 of 198318 compute units",
"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr success",
"Program ComputeBudget111111111111111111111111111111 invoke [1]",
"Program ComputeBudget111111111111111111111111111111 success"

Importer le programme Memo

Importez getAddMemoInstruction depuis @solana-program/memo pour créer des instructions de mémo.

Créer l'instruction de transfert

Créez l'instruction de transfert de token en spécifiant l'ATA source, l'ATA de destination, l'autorité (signataire) et le montant en unités de base.

Créer l'instruction de mémo

Créez une instruction de mémo avec un message. Ce message sera visible dans les journaux du programme de la transaction.

Envoyer la transaction avec mémo

Combinez les instructions de transfert et de mémo dans une seule transaction.

Afficher le mémo dans les journaux de transaction

Une fois la transaction confirmée, récupérez-la pour afficher le mémo dans les journaux. Le mémo apparaît comme un message de journal du programme Memo.

Example Transaction Logs
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb invoke [1]",
"Program log: Instruction: Transfer",
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb consumed 1682 of 200000 compute units",
"Program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb success",
"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr invoke [1]",
'Program log: Memo (len 46): "Payment for services rendered - Invoice #12345"',
"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr consumed 18097 of 198318 compute units",
"Program MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr success",
"Program ComputeBudget111111111111111111111111111111 invoke [1]",
"Program ComputeBudget111111111111111111111111111111 success"
Payment with Memo
import { getAddMemoInstruction } from "@solana-program/memo";

Démo

Demo
// Generate keypairs for sender and recipient
const sender = (await generateKeypair()).signer;
const recipient = (await generateKeypair()).signer;
console.log("Sender Address:", sender.address);
console.log("Recipient Address:", recipient.address);
// Demo Setup: Create client, mint account, token accounts, and fund with initial tokens
const { client, mint } = await demoSetup(sender, recipient);
console.log("\nMint Address:", mint.address);
// Derive the Associated Token Accounts addresses (ATAs) for sender and recipient
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
});
console.log("Sender Token Account:", senderAta.toString());
console.log("Recipient Token Account:", recipientAta.toString());
// =============================================================================
// Token Payment with Memo Demo
// =============================================================================
// Create instruction to transfer tokens from sender to recipient
// Transferring 250,000 base units = 0.25 tokens (with 6 decimals)
const transferInstruction = getTransferInstruction({
source: senderAta,
destination: recipientAta,
authority: sender.address,
amount: 250_000n // 0.25 tokens
});
// Create instruction to add a memo to the transaction
const memoInstruction = getAddMemoInstruction({
memo: "Payment for services rendered - Invoice #12345"
});
// Prepare and send transaction with both transfer and memo using @solana/client
const signature = await client.transaction.prepareAndSend({
authority: sender,
instructions: [transferInstruction, memoInstruction],
version: 0
});
console.log("\n=== Token Payment with Memo Complete ===");
console.log("Transaction Signature:", signature.toString());
// Fetch final token account balances using @solana/client SPL token helper
const splToken = client.splToken({
mint: mint.address,
tokenProgram: "auto"
});
const senderBalance = await splToken.fetchBalance(sender.address);
const recipientBalance = await splToken.fetchBalance(recipient.address);
console.log("\nSender Token Account Balance:", senderBalance);
console.log("Recipient Token Account Balance:", recipientBalance);
// Fetch transaction details to view the memo in the logs
const transaction = await client.runtime.rpc
.getTransaction(signature, {
encoding: "jsonParsed",
maxSupportedTransactionVersion: 0
})
.send();
console.log("\nTransaction logs with Memo:");
console.log(transaction?.meta?.logMessages);
// =============================================================================
// Demo Setup Helper Function
// =============================================================================
Console
Click to execute the code.

Is this page helpful?

Table des matières

Modifier la page

Géré par

© 2026 Fondation Solana.
Tous droits réservés.
Restez connecté