Zahlung mit Memo

Das Memo-Programm von Solana ermöglicht es Ihnen, Rechnungsnummern, Bestell-IDs oder benutzerdefinierte Referenzen an jede Zahlung anzuhängen. Diese Memos werden dauerhaft on-chain gespeichert und sind in Transaktionsprotokollen sichtbar, was es einfach macht, Zahlungen mit Ihren internen Systemen abzugleichen.

Funktionsweise

Das Memo-Programm schreibt Text in die Protokolle der Transaktion. Diese Protokolle werden von Explorern und RPC-Anbietern indiziert, wodurch Memos für die Zahlungsabstimmung durchsuchbar werden.

Siehe Wie Zahlungen auf Solana funktionieren für grundlegende Zahlungskonzepte.

Das Hinzufügen eines Memos erfordert das direkte Erstellen von Anweisungen, was Ihnen Kontrolle darüber gibt, was in der Transaktion enthalten ist.

Die folgenden Schritte zeigen den grundlegenden Ablauf. Siehe die Demo für vollständigen ausführbaren Code.

Memo-Programm importieren

Importieren Sie getAddMemoInstruction aus @solana-program/memo, um Memo-Anweisungen zu erstellen.

Transfer-Anweisung erstellen

Erstellen Sie die Token-Transfer-Anweisung und geben Sie das Quell-ATA, Ziel-ATA, die Autorität (Signer) und den Betrag in Basiseinheiten an.

Memo-Anweisung erstellen

Erstellen Sie eine Memo-Anweisung mit einer Nachricht. Diese Nachricht wird in den Programmprotokollen der Transaktion sichtbar sein.

Transaktion mit Memo senden

Kombinieren Sie die Transfer- und Memo-Anweisungen in einer einzigen Transaktion.

Memo in Transaktionsprotokollen anzeigen

Nachdem die Transaktion bestätigt wurde, rufen Sie sie ab, um das Memo in den Protokollen anzuzeigen. Das Memo erscheint als Protokollnachricht vom Memo-Programm.

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"

Memo-Programm importieren

Importieren Sie getAddMemoInstruction aus @solana-program/memo, um Memo-Anweisungen zu erstellen.

Transfer-Anweisung erstellen

Erstellen Sie die Token-Transfer-Anweisung und geben Sie das Quell-ATA, Ziel-ATA, die Autorität (Signer) und den Betrag in Basiseinheiten an.

Memo-Anweisung erstellen

Erstellen Sie eine Memo-Anweisung mit einer Nachricht. Diese Nachricht wird in den Programmprotokollen der Transaktion sichtbar sein.

Transaktion mit Memo senden

Kombinieren Sie die Transfer- und Memo-Anweisungen in einer einzigen Transaktion.

Memo in Transaktionsprotokollen anzeigen

Nachdem die Transaktion bestätigt wurde, rufen Sie sie ab, um das Memo in den Protokollen anzuzeigen. Das Memo erscheint als Protokollnachricht vom Memo-Programm.

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?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2026 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich