Betaling met memo

Het memo-programma van Solana stelt je in staat om factuurnummers, order-ID's of aangepaste referenties aan elke betaling toe te voegen. Deze memo's worden permanent on-chain vastgelegd en zijn zichtbaar in transactielogs, waardoor het eenvoudig is om betalingen te koppelen aan je interne systemen.

Hoe het werkt

Het memo-programma schrijft tekst naar de logs van de transactie. Deze logs worden geïndexeerd door explorers en RPC-providers, waardoor memo's doorzoekbaar zijn voor betalingsreconciliatie.

Zie Hoe betalingen werken op Solana voor kernconcepten over betalingen.

Het toevoegen van een memo vereist het direct bouwen van instructies, wat je controle geeft over wat er in de transactie wordt opgenomen.

De onderstaande stappen tonen de kernflow. Zie de Demo voor complete uitvoerbare code.

Importeer memo-programma

Importeer getAddMemoInstruction uit @solana-program/memo om memo-instructies te maken.

Maak transfer-instructie

Maak de token-transfer-instructie waarbij je de bron-ATA, bestemmings-ATA, autoriteit (ondertekenaar) en bedrag in basiseenheden specificeert.

Maak memo-instructie

Maak een memo-instructie met een bericht. Dit bericht zal zichtbaar zijn in de programmalogs van de transactie.

Verstuur transactie met memo

Combineer de transfer- en memo-instructies in één enkele transactie.

Bekijk memo in transactielogboeken

Nadat de transactie is bevestigd, haal je deze op om de memo in de logboeken te bekijken. De memo verschijnt als een logbericht van het Memo-programma.

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"

Importeer memo-programma

Importeer getAddMemoInstruction uit @solana-program/memo om memo-instructies te maken.

Maak transfer-instructie

Maak de token-transfer-instructie waarbij je de bron-ATA, bestemmings-ATA, autoriteit (ondertekenaar) en bedrag in basiseenheden specificeert.

Maak memo-instructie

Maak een memo-instructie met een bericht. Dit bericht zal zichtbaar zijn in de programmalogs van de transactie.

Verstuur transactie met memo

Combineer de transfer- en memo-instructies in één enkele transactie.

Bekijk memo in transactielogboeken

Nadat de transactie is bevestigd, haal je deze op om de memo in de logboeken te bekijken. De memo verschijnt als een logbericht van het Memo-programma.

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?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden