Εγγραφή στο Δίκτυο

Στην προηγούμενη ενότητα, μάθατε πώς να διαβάζετε δεδομένα από το δίκτυο Solana. Τώρα θα μάθετε πώς να γράφετε δεδομένα σε αυτό. Η εγγραφή στο δίκτυο Solana περιλαμβάνει την αποστολή συναλλαγών που περιέχουν μία ή περισσότερες εντολές.

Τα προγράμματα καθορίζουν την επιχειρησιακή λογική για το τι κάνει κάθε εντολή. Όταν υποβάλλετε μια συναλλαγή, το περιβάλλον εκτέλεσης του Solana εκτελεί κάθε εντολή σε ακολουθία και ατομικά. Τα παραδείγματα σε αυτή την ενότητα δείχνουν πώς να δημιουργήσετε και να στείλετε συναλλαγές για να καλέσετε προγράμματα Solana, περιλαμβάνουν:

  1. Μεταφορά SOL μεταξύ λογαριασμών
  2. Δημιουργία ενός νέου token

Μεταφορά SOL

Το παρακάτω παράδειγμα μεταφέρει SOL μεταξύ δύο λογαριασμών. Κάθε λογαριασμός έχει ένα πρόγραμμα ιδιοκτήτη, το οποίο είναι το μόνο πρόγραμμα που μπορεί να αφαιρέσει από το υπόλοιπο SOL του λογαριασμού.

Όλοι οι λογαριασμοί πορτοφολιού ανήκουν στο System Program. Για να μεταφέρετε SOL, πρέπει να καλέσετε την εντολή transfer του System Program.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");
const sender = new Keypair();
const receiver = new Keypair();
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});
const transaction = new Transaction().add(transferInstruction);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);
console.log("Transaction Signature:", `${transactionSignature}`);
const senderBalance = await connection.getBalance(sender.publicKey);
const receiverBalance = await connection.getBalance(receiver.publicKey);
console.log("Sender Balance:", `${senderBalance}`);
console.log("Receiver Balance:", `${receiverBalance}`);
Console
Click to execute the code.

Δημιουργήστε ένα Connection για τη διαχείριση της αποστολής συναλλαγών και της ανάκτησης δεδομένων λογαριασμού.

Σε αυτό το παράδειγμα, συνδεόμαστε στον τοπικό validator δοκιμών που εκτελείται στη διεύθυνση localhost:8899.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

Δημιουργήστε νέα ζεύγη κλειδιών για χρήση ως λογαριασμοί αποστολέα και παραλήπτη.

Generate keypairs
const sender = new Keypair();
const receiver = new Keypair();

Προσθέστε SOL στο λογαριασμό του αποστολέα. Σε δίκτυα εκτός του mainnet, μπορείτε να χρησιμοποιήσετε τη μέθοδο requestAirdrop για να λάβετε SOL για δοκιμές.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Η μέθοδος SystemProgram.transfer() δημιουργεί μια εντολή που μεταφέρει SOL από το λογαριασμό fromPubkey στο λογαριασμό toPubkey για τον καθορισμένο αριθμό lamports.

Transfer instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Δημιουργήστε μια συναλλαγή και προσθέστε την εντολή στη συναλλαγή. Σε αυτό το παράδειγμα, δημιουργούμε μια συναλλαγή με μία μόνο εντολή. Ωστόσο, μπορείτε να προσθέσετε πολλαπλές εντολές σε μια συναλλαγή.

Transaction
const transaction = new Transaction().add(transferInstruction);

Υπογράψτε και στείλτε τη συναλλαγή στο δίκτυο. Το keypair του αποστολέα απαιτείται στον πίνακα υπογραφόντων για να εξουσιοδοτήσει τη μεταφορά SOL από τον λογαριασμό του.

Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

Η υπογραφή της συναλλαγής είναι ένα μοναδικό αναγνωριστικό που μπορεί να χρησιμοποιηθεί για την αναζήτηση της συναλλαγής στο Solana Explorer.

Δημιουργήστε ένα Connection για τη διαχείριση της αποστολής συναλλαγών και της ανάκτησης δεδομένων λογαριασμού.

Σε αυτό το παράδειγμα, συνδεόμαστε στον τοπικό validator δοκιμών που εκτελείται στη διεύθυνση localhost:8899.

Connection
const connection = new Connection("http://localhost:8899", "confirmed");

Δημιουργήστε νέα ζεύγη κλειδιών για χρήση ως λογαριασμοί αποστολέα και παραλήπτη.

Generate keypairs
const sender = new Keypair();
const receiver = new Keypair();

Προσθέστε SOL στο λογαριασμό του αποστολέα. Σε δίκτυα εκτός του mainnet, μπορείτε να χρησιμοποιήσετε τη μέθοδο requestAirdrop για να λάβετε SOL για δοκιμές.

Airdrop
const signature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Η μέθοδος SystemProgram.transfer() δημιουργεί μια εντολή που μεταφέρει SOL από το λογαριασμό fromPubkey στο λογαριασμό toPubkey για τον καθορισμένο αριθμό lamports.

Transfer instruction
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: receiver.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});

Δημιουργήστε μια συναλλαγή και προσθέστε την εντολή στη συναλλαγή. Σε αυτό το παράδειγμα, δημιουργούμε μια συναλλαγή με μία μόνο εντολή. Ωστόσο, μπορείτε να προσθέσετε πολλαπλές εντολές σε μια συναλλαγή.

Transaction
const transaction = new Transaction().add(transferInstruction);

Υπογράψτε και στείλτε τη συναλλαγή στο δίκτυο. Το keypair του αποστολέα απαιτείται στον πίνακα υπογραφόντων για να εξουσιοδοτήσει τη μεταφορά SOL από τον λογαριασμό του.

Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender]
);

Η υπογραφή της συναλλαγής είναι ένα μοναδικό αναγνωριστικό που μπορεί να χρησιμοποιηθεί για την αναζήτηση της συναλλαγής στο Solana Explorer.

Transfer SOL
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
Keypair,
Connection
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");

Δημιουργία ενός token

Το παρακάτω παράδειγμα δημιουργεί ένα νέο token στο Solana χρησιμοποιώντας το Token Extensions Program. Αυτό απαιτεί δύο οδηγίες:

  1. Επίκληση του System Program για τη δημιουργία ενός νέου λογαριασμού.
  2. Επίκληση του Token Extensions Program για την αρχικοποίηση αυτού του λογαριασμού ως Mint.
Create mint account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
// Fund the wallet with SOL
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");
// Generate keypair to use as address of mint account
const mint = new Keypair();
// Calculate lamports required for rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);
// Instruction to create new account with space for new mint account
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});
// Instruction to initialize mint account
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);
// Build transaction with instructions to create new account and initialize mint account
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet, // payer
mint // mint address keypair
]
);
console.log("Transaction Signature:", `${transactionSignature}`);
const mintData = await getMint(
connection,
mint.publicKey,
"confirmed",
TOKEN_2022_PROGRAM_ID
);
);
Console
Click to execute the code.

Η δημιουργία ενός token απαιτεί τη χρήση των βιβλιοθηκών @solana/web3.js και @solana/spl-token. Ο κώδικας στο παρακάτω παράδειγμα θα:

  • Δημιουργήσει μια σύνδεση
  • Δημιουργήσει ένα keypair για την πληρωμή της συναλλαγής
  • Ζητήσει ένα airdrop για τη χρηματοδότηση του keypair
Connection & wallet setup
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Δημιουργήστε ένα keypair για τον λογαριασμό mint. Το δημόσιο κλειδί θα χρησιμοποιηθεί ως η διεύθυνση του λογαριασμού mint.

Mint keypair
const mint = new Keypair();

Υπολογίστε τα ελάχιστα lamports που απαιτούνται για έναν λογαριασμό mint. Η συνάρτηση getMinimumBalanceForRentExemptMint υπολογίζει πόσα lamport πρέπει να διατεθούν για τα δεδομένα σε έναν λογαριασμό mint.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Η πρώτη εντολή καλεί την εντολή createAccount του System Program για να:

  1. Δεσμεύστε τον αριθμό των bytes που απαιτούνται για την αποθήκευση των δεδομένων του mint.
  2. Μεταφέρετε lamports από το πορτοφόλι για τη χρηματοδότηση του νέου λογαριασμού.
  3. Αναθέστε την κυριότητα του λογαριασμού στο Token Extensions program.
Create account instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

Η δεύτερη εντολή καλεί την οδηγία createInitializeMint2Instruction του Token Extensions Program για να αρχικοποιήσει τον λογαριασμό mint με τα ακόλουθα δεδομένα:

  • 2 δεκαδικά ψηφία
  • Πορτοφόλι ως αρχή έκδοσης και αρχή παγώματος
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Προσθέστε και τις δύο εντολές σε μία συναλλαγή. Αυτό διασφαλίζει ότι η δημιουργία και η αρχικοποίηση του λογαριασμού συμβαίνουν ατομικά. (Είτε επιτυγχάνουν και οι δύο εντολές, είτε καμία.)

Αυτή η προσέγγιση είναι συνηθισμένη κατά τη δημιουργία σύνθετων συναλλαγών στο Solana, καθώς εγγυάται ότι όλες οι εντολές εκτελούνται μαζί.

Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Υπογράψτε και στείλτε τη συναλλαγή. Απαιτούνται δύο υπογραφές:

  • Ο λογαριασμός πορτοφολιού υπογράφει ως πληρωτής για τέλη συναλλαγής και δημιουργία λογαριασμού
  • Ο λογαριασμός mint υπογράφει για να εξουσιοδοτήσει τη χρήση της διεύθυνσής του για τον νέο λογαριασμό
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

Η υπογραφή συναλλαγής που επιστρέφεται μπορεί να χρησιμοποιηθεί για την επιθεώρηση της συναλλαγής στον Solana Explorer.

Η δημιουργία ενός token απαιτεί τη χρήση των βιβλιοθηκών @solana/web3.js και @solana/spl-token. Ο κώδικας στο παρακάτω παράδειγμα θα:

  • Δημιουργήσει μια σύνδεση
  • Δημιουργήσει ένα keypair για την πληρωμή της συναλλαγής
  • Ζητήσει ένα airdrop για τη χρηματοδότηση του keypair
Connection & wallet setup
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Δημιουργήστε ένα keypair για τον λογαριασμό mint. Το δημόσιο κλειδί θα χρησιμοποιηθεί ως η διεύθυνση του λογαριασμού mint.

Mint keypair
const mint = new Keypair();

Υπολογίστε τα ελάχιστα lamports που απαιτούνται για έναν λογαριασμό mint. Η συνάρτηση getMinimumBalanceForRentExemptMint υπολογίζει πόσα lamport πρέπει να διατεθούν για τα δεδομένα σε έναν λογαριασμό mint.

Rent exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Η πρώτη εντολή καλεί την εντολή createAccount του System Program για να:

  1. Δεσμεύστε τον αριθμό των bytes που απαιτούνται για την αποθήκευση των δεδομένων του mint.
  2. Μεταφέρετε lamports από το πορτοφόλι για τη χρηματοδότηση του νέου λογαριασμού.
  3. Αναθέστε την κυριότητα του λογαριασμού στο Token Extensions program.
Create account instruction
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: MINT_SIZE,
lamports: rentExemptionLamports,
programId: TOKEN_2022_PROGRAM_ID
});

Η δεύτερη εντολή καλεί την οδηγία createInitializeMint2Instruction του Token Extensions Program για να αρχικοποιήσει τον λογαριασμό mint με τα ακόλουθα δεδομένα:

  • 2 δεκαδικά ψηφία
  • Πορτοφόλι ως αρχή έκδοσης και αρχή παγώματος
Initialize mint instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2,
wallet.publicKey,
wallet.publicKey,
TOKEN_2022_PROGRAM_ID
);

Προσθέστε και τις δύο εντολές σε μία συναλλαγή. Αυτό διασφαλίζει ότι η δημιουργία και η αρχικοποίηση του λογαριασμού συμβαίνουν ατομικά. (Είτε επιτυγχάνουν και οι δύο εντολές, είτε καμία.)

Αυτή η προσέγγιση είναι συνηθισμένη κατά τη δημιουργία σύνθετων συναλλαγών στο Solana, καθώς εγγυάται ότι όλες οι εντολές εκτελούνται μαζί.

Transaction
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);

Υπογράψτε και στείλτε τη συναλλαγή. Απαιτούνται δύο υπογραφές:

  • Ο λογαριασμός πορτοφολιού υπογράφει ως πληρωτής για τέλη συναλλαγής και δημιουργία λογαριασμού
  • Ο λογαριασμός mint υπογράφει για να εξουσιοδοτήσει τη χρήση της διεύθυνσής του για τον νέο λογαριασμό
Send transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet,
mint
]
);

Η υπογραφή συναλλαγής που επιστρέφεται μπορεί να χρησιμοποιηθεί για την επιθεώρηση της συναλλαγής στον Solana Explorer.

Create mint account
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
const signature = await connection.requestAirdrop(
wallet.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(signature, "confirmed");

Is this page helpful?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας

Διαχειρίζεται από

© 2025 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.