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

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

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

Σε αυτήν την ενότητα, θα δείτε δύο βασικά παραδείγματα:

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

Αυτά τα παραδείγματα δείχνουν πώς να δημιουργείτε και να στέλνετε συναλλαγές για να καλέσετε προγράμματα Solana. Για περισσότερες λεπτομέρειες, ανατρέξτε στις σελίδες Συναλλαγές και Οδηγίες και Χρεώσεις στο Solana.

Μεταφορά SOL

Σε αυτό το παράδειγμα, θα μάθετε πώς να μεταφέρετε SOL μεταξύ δύο λογαριασμών.

Στο Solana, κάθε λογαριασμός έχει ένα συγκεκριμένο πρόγραμμα ως ιδιοκτήτη του. Μόνο ο ιδιοκτήτης του προγράμματος μπορεί να αφαιρέσει το υπόλοιπο SOL (lamport) ενός λογαριασμού.

Το 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}`);
Click to execute the code.

Αυτά είναι τα βήματα για τη δημιουργία συναλλαγών για αλληλεπίδραση με οποιοδήποτε πρόγραμμα στο Solana.

Δημιουργήστε την εντολή που θέλετε να καλέσετε.

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

Προσθέστε την εντολή σε μια συναλλαγή:

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

Υπογράψτε και στείλτε τη συναλλαγή:

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[sender] // signer keypair
);

Δημιουργία ενός 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
} 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("Mint Account:", `${mint.publicKey}`);
console.log("Transaction Signature:", `${transactionSignature}`);
Click to execute the code.

Εδώ είναι μια ανάλυση βήμα προς βήμα του τι κάνει το παράδειγμα:

Δημιουργήστε μια σύνδεση και χρηματοδοτήστε το πορτοφόλι

Connection and Wallet
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 account

Mint Keypair
const mint = new Keypair();

Υπολογίστε τα ελάχιστα lamports για εξαίρεση από το rent

Rent Exemption
const rentExemptionLamports =
await getMinimumBalanceForRentExemptMint(connection);

Δημιουργήστε μια εντολή για τη δημιουργία νέου λογαριασμού

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

Δημιουργήστε μια εντολή για την αρχικοποίηση του Mint account

Initialize Mint Instruction
const initializeMintInstruction = createInitializeMint2Instruction(
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
TOKEN_2022_PROGRAM_ID
);

Προσθέστε και τις δύο εντολές σε μια συναλλαγή

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

Στείλτε και επιβεβαιώστε τη συναλλαγή με τους δύο απαιτούμενους υπογράφοντες

Send Transaction
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[wallet, mint]
);

Εκτυπώστε το Mint account και την υπογραφή της συναλλαγής

Output
console.log("Mint Account:", `${mint.publicKey}`);
console.log("Transaction Signature:", `${transactionSignature}`);

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

Is this page helpful?

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

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