Δημιουργία Token Mint

Τι Είναι ένας Λογαριασμός Mint

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

Το Token Program ορίζει τον τύπο λογαριασμού Mint ως:

Mint Account Type
/// Mint data.
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

Κάθε token έχει έναν λογαριασμό mint, και η διεύθυνση mint είναι το μοναδικό αναγνωριστικό του token σε πορτοφόλια, εφαρμογές και explorers.

Για παράδειγμα, το USD Coin (USDC) έχει τη διεύθυνση mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v. Η διεύθυνση mint αναγνωρίζει μοναδικά το USDC σε όλο το οικοσύστημα Solana. Μπορείτε να δείτε αυτό το mint στο Solana Explorer.

Πώς να Δημιουργήσετε έναν Λογαριασμό Mint

Η δημιουργία ενός mint απαιτεί δύο οδηγίες:

  1. Η οδηγία CreateAccount του System Program δημιουργεί έναν νέο λογαριασμό απαλλαγμένο από rent και αναθέτει το Token Program ως κάτοχο προγράμματος του νέου λογαριασμού.
  2. Η οδηγία InitializeMint ή InitializeMint2 του Token Program αρχικοποιεί τον νέο λογαριασμό ως mint.

Συμπεριλάβετε την οδηγία CreateAccount και την οδηγία αρχικοποίησης mint στην ίδια συναλλαγή.

Κατά την αρχικοποίηση του mint, το Token Program ελέγχει ότι ο λογαριασμός mint δεν έχει ήδη αρχικοποιηθεί και είναι απαλλαγμένος από rent. Στη συνέχεια, το Token Program γράφει την αρχή έκδοσης, την αρχή δέσμευσης, τα δεκαδικά ψηφία και τη σημαία is_initialized στα δεδομένα του λογαριασμού mint.

Αναφορά Πηγής

ΣτοιχείοΠεριγραφήToken ProgramToken Extensions Program
MintΗ βασική κατάσταση mint που αποθηκεύεται σε κάθε λογαριασμό mint.ΠηγήΠηγή
InitializeMintΜια οδηγία αρχικοποίησης mint που αναμένει τον λογαριασμό rent sysvar στη λίστα λογαριασμών της.ΠηγήΠηγή
InitializeMint2Μια οδηγία αρχικοποίησης mint που δεν απαιτεί τον λογαριασμό rent sysvar στη λίστα λογαριασμών της.ΠηγήΠηγή
_process_initialize_mintΚοινή λογική επεξεργαστή για την αρχικοποίηση mint.ΠηγήΠηγή
process_initialize_mintΔημόσιος χειριστής για το InitializeMint.ΠηγήΠηγή
process_initialize_mint2Δημόσιος χειριστής για το InitializeMint2.ΠηγήΠηγή

Typescript

Τα παρακάτω παραδείγματα Kit δείχνουν την προτεινόμενη προσέγγιση χρησιμοποιώντας @solana/kit. Τα παλαιότερα παραδείγματα που χρησιμοποιούν @solana/web3.js περιλαμβάνονται για αναφορά.

Kit

import { generateKeyPairSigner } from "@solana/kit";
import { createLocalClient } from "@solana/kit-client-rpc";
import { tokenProgram } from "@solana-program/token";
const client = await createLocalClient().use(tokenProgram());
const mint = await generateKeyPairSigner();
const result = await client.token.instructions
.createMint({
newMint: mint, // New mint account to create.
decimals: 9, // Decimals to define on the mint account.
mintAuthority: client.payer.address, // Authority allowed to mint new tokens.
freezeAuthority: client.payer.address // Authority allowed to freeze token accounts.
})
.sendTransaction();
const mintAccount = await client.token.accounts.mint.fetch(mint.address);
console.log("Mint Address:", mint.address);
console.log("Mint Account:", mintAccount.data);
console.log("\nTransaction Signature:", result.context.signature);
Console
Click to execute the code.

Web3.js

import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
import { createMint, getMint, TOKEN_PROGRAM_ID } from "@solana/spl-token";
const mintPubkey = await createMint(
connection,
feePayer,
feePayer.publicKey, // Authority allowed to mint new tokens.
feePayer.publicKey, // Authority allowed to freeze token accounts.
9, // Decimals to define on the mint account.
Keypair.generate(), // New mint account to create.
{
commitment: "confirmed"
},
TOKEN_PROGRAM_ID
);
const mintAccount = await getMint(
connection,
mintPubkey,
"confirmed",
TOKEN_PROGRAM_ID
);
console.log("Mint Address:", mintPubkey.toBase58());
console.log("Mint Account:", mintAccount);
Console
Click to execute the code.

Rust

Rust
use anyhow::Result;
use solana_client::nonblocking::rpc_client::RpcClient;
use solana_commitment_config::CommitmentConfig;
use solana_sdk::{
program_pack::Pack,
signature::{Keypair, Signer},
transaction::Transaction,
};
use solana_system_interface::instruction::create_account;
use spl_token_interface::{id as token_program_id, instruction::initialize_mint, state::Mint};
#[tokio::main]
async fn main() -> Result<()> {
let client = RpcClient::new_with_commitment(
String::from("http://localhost:8899"),
CommitmentConfig::confirmed(),
);
let latest_blockhash = client.get_latest_blockhash().await?;
let transaction = Transaction::new_signed_with_payer(
&[
create_account(
&fee_payer.pubkey(), // Account funding account creation.
&mint.pubkey(), // New mint account to create.
mint_rent, // Lamports funding the new account rent.
Mint::LEN as u64, // Account size in bytes.
&token_program_id(), // Program that owns the new account.
),
initialize_mint(
&token_program_id(),
&mint.pubkey(), // Mint account to initialize.
&fee_payer.pubkey(), // Authority allowed to mint new tokens.
Some(&fee_payer.pubkey()), // Authority allowed to freeze token accounts.
9, // Decimals to define on the mint account.
)?,
],
Some(&fee_payer.pubkey()),
&[&fee_payer, &mint],
latest_blockhash,
);
let transaction_signature = client.send_and_confirm_transaction(&transaction).await?;
let mint_account = client.get_account(&mint.pubkey()).await?;
let mint_data = Mint::unpack(&mint_account.data)?;
println!("Mint Address: {}", mint.pubkey());
println!("Mint Account: {:#?}", mint_data);
println!("\nTransaction Signature: {}", transaction_signature);
Ok(())
}
Console
Click to execute the code.

Python

Python
#!/usr/bin/env python3
import asyncio
import json
from solana.rpc.async_api import AsyncClient
from solders.keypair import Keypair
from solders.message import Message
from solders.system_program import create_account, CreateAccountParams
from solders.transaction import Transaction
from spl.token.async_client import AsyncToken
from spl.token.instructions import initialize_mint, InitializeMintParams
from spl.token.constants import MINT_LEN, TOKEN_PROGRAM_ID
DECIMALS = 9
async def main():
rpc = AsyncClient("http://localhost:8899")
async with rpc:
create_mint_instructions = [
create_account(
CreateAccountParams(
from_pubkey=fee_payer.pubkey(), # Account funding account creation.
to_pubkey=mint.pubkey(), # New mint account to create.
lamports=mint_rent, # Lamports funding the new account rent.
space=MINT_LEN, # Account size in bytes.
owner=TOKEN_PROGRAM_ID, # Program that owns the new account.
)
),
initialize_mint(
InitializeMintParams(
program_id=TOKEN_PROGRAM_ID, # Token program to invoke.
mint=mint.pubkey(), # Mint account to initialize.
decimals=DECIMALS, # Decimals to define on the mint account.
mint_authority=fee_payer.pubkey(), # Authority allowed to mint new tokens.
freeze_authority=fee_payer.pubkey(), # Authority allowed to freeze token accounts.
)
),
]
latest_blockhash = await rpc.get_latest_blockhash()
transaction = Transaction(
[fee_payer, mint],
Message(create_mint_instructions, fee_payer.pubkey()),
latest_blockhash.value.blockhash,
)
result = await rpc.send_transaction(transaction)
token = AsyncToken(rpc, mint.pubkey(), TOKEN_PROGRAM_ID, fee_payer)
mint_info = await token.get_mint_info()
mint_account = {
"mint_authority": None if mint_info.mint_authority is None else str(mint_info.mint_authority),
"supply": mint_info.supply,
"decimals": mint_info.decimals,
"is_initialized": mint_info.is_initialized,
"freeze_authority": None if mint_info.freeze_authority is None else str(mint_info.freeze_authority),
}
print("Mint Address:", mint.pubkey())
print("Mint Account:")
print(json.dumps(mint_account, indent=2))
print("\nTransaction Signature:", result.value)
if __name__ == "__main__":
asyncio.run(main())
Console
Click to execute the code.

Πώς να Προσθέσετε Μεταδεδομένα

Ένας λογαριασμός mint αποθηκεύει μόνο βασικές πληροφορίες token (προσφορά, δεκαδικά, αρχές). Για να προσθέσετε αναγνώσιμα από τον άνθρωπο μεταδεδομένα όπως όνομα, σύμβολο και εικόνα στο token σας, έχετε δύο επιλογές:

Is this page helpful?

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

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

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

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