Einen Token-Mint erstellen

Was ist ein Mint-Konto

Ein Mint-Konto definiert und identifiziert einen Token auf Solana eindeutig und speichert den gemeinsamen Zustand, der für alle Token-Konten dieses Mints gilt.

Das Token Program definiert den Kontotyp Mint wie folgt:

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>,
}

Jeder Token hat ein Mint-Konto, und die Mint-Adresse ist die eindeutige Kennung des Tokens über Wallets, Anwendungen und Explorer hinweg.

USD Coin (USDC) hat beispielsweise die Mint-Adresse EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v. Die Mint-Adresse identifiziert USDC eindeutig im gesamten Solana-Ökosystem. Sie können diesen Mint im Solana Explorer einsehen.

So erstellen Sie ein Mint-Konto

Das Erstellen eines Mints erfordert zwei Anweisungen:

  1. Die CreateAccount- Anweisungen des System Program erstellt ein neues mietbefreites Konto und weist das Token Program als Programmbesitzer des neuen Kontos zu.
  2. Die InitializeMint- oder InitializeMint2- Anweisungen des Token Program initialisiert das neue Konto als Mint.

Fügen Sie die CreateAccount- Anweisungen und die Mint-Initialisierungs- Anweisungen in dieselbe Transaktion ein.

Während der Mint-Initialisierung prüft das Token Program, ob das Mint-Konto noch nicht initialisiert ist und mietbefreit ist. Das Token Program schreibt dann die Mint-Authority, Freeze-Authority, Dezimalstellen und das is_initialized-Flag in die Mint-Kontodaten.

Quellreferenz

ElementBeschreibungToken ProgramToken Extensions Program
MintDer Basis-Mint-Zustand, der in jedem Mint-Konto gespeichert ist.QuelleQuelle
InitializeMintEine Mint-Initialisierungs- Anweisungen, die das Rent-Sysvar-Konto in ihrer Kontoliste erwartet.QuelleQuelle
InitializeMint2Eine Mint-Initialisierungs- Anweisungen, die das Rent-Sysvar-Konto nicht in ihrer Kontoliste erfordert.QuelleQuelle
_process_initialize_mintGemeinsame Prozessorlogik für die Mint-Initialisierung.QuelleQuelle
process_initialize_mintÖffentlicher Handler für InitializeMint.QuelleQuelle
process_initialize_mint2Öffentlicher Handler für InitializeMint2.QuelleQuelle

Typescript

Die Kit-Beispiele unten zeigen den empfohlenen Ansatz unter Verwendung von @solana/kit. Legacy-Beispiele mit @solana/web3.js sind als Referenz enthalten.

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.

So fügen Sie Metadaten hinzu

Ein Mint-Account speichert nur grundlegende Token-Informationen (Umlauf, Dezimalstellen, Autoritäten). Um menschenlesbare Metadaten wie Name, Symbol und Bild zu Ihrem Token hinzuzufügen, haben Sie zwei Optionen:

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

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