Pagamento con memo

Il programma memo di Solana ti consente di allegare numeri di fattura, ID ordine o riferimenti personalizzati a qualsiasi pagamento. Questi memo vengono registrati permanentemente on-chain e sono visibili nei log delle transazioni, rendendo facile abbinare i pagamenti ai tuoi sistemi interni.

Come funziona

Il programma Memo scrive testo nei log della transazione. Questi log sono indicizzati da explorer e provider RPC, rendendo i memo ricercabili per la riconciliazione dei pagamenti.

Vedi Come funzionano i pagamenti su Solana per i concetti fondamentali sui pagamenti.

Aggiungere un memo richiede la costruzione diretta delle istruzioni, il che ti dà il controllo su ciò che viene incluso nella transazione.

I passaggi seguenti mostrano il flusso principale. Vedi la Demo per il codice completo eseguibile.

Importa il programma Memo

Importa getAddMemoInstruction da @solana-program/memo per creare istruzioni memo.

Crea l'istruzione di trasferimento

Crea l'istruzione di trasferimento token specificando l'ATA di origine, l'ATA di destinazione, l'autorità (firmatario) e l'importo in unità base.

Crea l'istruzione Memo

Crea un'istruzione memo con un messaggio. Questo messaggio sarà visibile nei log del programma della transazione.

Invia la transazione con memo

Combina le istruzioni di trasferimento e memo in un'unica transazione.

Visualizza il memo nei log delle transazioni

Dopo la conferma della transazione, recuperala per visualizzare il memo nei log. Il memo appare come messaggio di log dal programma 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"

Importa il programma Memo

Importa getAddMemoInstruction da @solana-program/memo per creare istruzioni memo.

Crea l'istruzione di trasferimento

Crea l'istruzione di trasferimento token specificando l'ATA di origine, l'ATA di destinazione, l'autorità (firmatario) e l'importo in unità base.

Crea l'istruzione Memo

Crea un'istruzione memo con un messaggio. Questo messaggio sarà visibile nei log del programma della transazione.

Invia la transazione con memo

Combina le istruzioni di trasferimento e memo in un'unica transazione.

Visualizza il memo nei log delle transazioni

Dopo la conferma della transazione, recuperala per visualizzare il memo nei log. Il memo appare come messaggio di log dal programma 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";

Demo

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?

Indice

Modifica Pagina

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Rimani Connesso