Token su Solana

I token sono asset digitali che rappresentano la proprietà su diverse categorie di asset. La tokenizzazione consente la digitalizzazione dei diritti di proprietà. I token su Solana sono chiamati token SPL (Solana Program Library).

Questa sezione copre i concetti di base su come i token sono rappresentati su Solana. Consulta la sezione nozioni di base sui token SPL per esempi di codice.

Punti chiave

  • I Token Program contengono tutta la logica delle istruzioni per interagire con i token sulla rete (sia fungibili che non fungibili).

  • Un mint account rappresenta un token specifico e memorizza metadati globali sul token come l'offerta totale e l'autorità di mint (indirizzo autorizzato a creare nuove unità di un token).

  • Un token account traccia la proprietà individuale dei token per uno specifico mint account per uno specifico proprietario.

  • Un associated token account è un token account creato con un indirizzo derivato dagli indirizzi del proprietario e del mint account.

Token Program

L'ecosistema Solana ha due Token Program principali. Il codice sorgente per entrambi i programmi è disponibile qui sotto.

I Token Program contengono tutta la logica delle istruzioni per interagire con i token sulla rete (sia fungibili che non fungibili). Tutti i token su Solana sono effettivamente data account di proprietà di un Token Program.

Token ProgramToken Program

Mint account

I token su Solana sono identificati in modo univoco dall'indirizzo di un mint account di proprietà del Token Program. Questo account funge da contatore globale per un token specifico e memorizza dati come:

  • Supply: Fornitura totale del token
  • Decimals: Precisione decimale del token
  • Mint authority: L'account autorizzato a creare nuove unità del token, aumentando la fornitura
  • Freeze authority: L'account autorizzato a congelare i token in un token account, impedendone il trasferimento o la distruzione

Mint AccountMint Account

I dettagli completi memorizzati su ogni mint account includono quanto segue:

Mint Account State
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>,
}

Per riferimento, ecco un link di Solana Explorer al USDC Mint Account.

Token Account

Il Token Program crea token account per tracciare la proprietà individuale di ogni unità di token. Un token account memorizza dati come:

  • Mint: Il token di cui il token account detiene unità
  • Owner: L'account autorizzato a trasferire token dal token account
  • Amount: Numero di token che il token account detiene attualmente

Token AccountToken Account

I dettagli completi memorizzati su ogni token account includono quanto segue:

Token Account State
pub struct Account {
/// The mint associated with this account
pub mint: Pubkey,
/// The owner of this account.
pub owner: Pubkey,
/// The amount of tokens this account holds.
pub amount: u64,
/// If `delegate` is `Some` then `delegated_amount` represents
/// the amount authorized by the delegate
pub delegate: COption<Pubkey>,
/// The account's state
pub state: AccountState,
/// If is_native.is_some, this is a native token, and the value logs the
/// rent-exempt reserve. An Account is required to be rent-exempt, so
/// the value is used by the Processor to ensure that wrapped SOL
/// accounts do not drop below this threshold.
pub is_native: COption<u64>,
/// The amount delegated
pub delegated_amount: u64,
/// Optional authority to close the account.
pub close_authority: COption<Pubkey>,
}

Un wallet necessita di un token account per ogni token (mint) che desidera detenere, con l'indirizzo del wallet impostato come proprietario del token account. Ogni wallet può possedere più token account per lo stesso token (mint), ma un token account può avere un solo proprietario e detenere unità di un solo token (mint).

Account RelationshipAccount Relationship

Nota che i dati di ogni token account includono un campo owner che identifica chi ha l'autorità sul token account. Questo differisce dal proprietario del programma specificato nel tipo base Account, che è il Token Program per tutti i token account.

Associated Token Account

Gli Associated Token Account semplificano il processo di ricerca dell'indirizzo di un token account per uno specifico mint e proprietario. Considera l'Associated Token Account come il token account "predefinito" per uno specifico mint e proprietario.

Un Associated Token Account viene creato con un indirizzo derivato dall'indirizzo del proprietario e dall'indirizzo del mint account. È importante comprendere che un Associated Token Account è semplicemente un token account con un indirizzo specifico.

Questo introduce un concetto chiave nello sviluppo su Solana: Program Derived Address (PDA). Un PDA deriva un indirizzo in modo deterministico utilizzando input predefiniti, rendendo facile trovare l'indirizzo di un account.

Associated Token AccountAssociated Token Account

Nota che ogni wallet necessita del proprio token account per detenere token dallo stesso mint.

Relazione tra account espansaRelazione tra account espansa

Esempi con Token CLI

La CLI spl-token aiuta a sperimentare con i token SPL. Gli esempi seguenti utilizzano il terminale di Solana Playground per eseguire comandi CLI direttamente nel browser senza installazione locale.

La creazione di token e account richiede SOL per i depositi di rent degli account e le commissioni di transazione. Per gli utenti che utilizzano Solana Playground per la prima volta, crea un wallet Playground ed esegui il comando solana airdrop nel terminale di Playground. Puoi ottenere SOL devnet anche dal faucet web pubblico.

Terminal
$
solana airdrop 2

Esegui spl-token --help per visualizzare tutti i comandi disponibili.

Terminal
$
spl-token --help

Per installare la CLI spl-token localmente, esegui:

Terminal
$
cargo install spl-token-cli

Trova altri esempi nella documentazione di spl-token.

Gli indirizzi degli account mostrati nell'output del tuo terminale differiscono dagli esempi seguenti. Utilizza gli indirizzi dal tuo terminale Playground quando segui le istruzioni. Ad esempio, il comando create-token restituisce un indirizzo di mint account con il tuo wallet Playground come mint authority.

Creare un nuovo token

Per creare un nuovo token (mint account), esegui:

Terminal
$
spl-token create-token

L'output appare così:

Terminal Output
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Address: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Decimals: 9
Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1

Un nuovo mint account inizia con supply zero. Controlla la supply corrente con:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

Il comando supply per un nuovo token restituisce 0:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Creare un nuovo mint account richiede una transazione con due istruzioni. Ecco un esempio Javascript su Solana Playground.

  1. Il System Program crea un nuovo account con spazio per i dati del mint account e trasferisce la proprietà al Token Program.

  2. Il Token Program inizializza i dati del nuovo account come mint account

Creare un token account

Per detenere token di uno specifico mint, crea un token account:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

Esempio di comando:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Output:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1

Il comando create-account crea un associated token account con l'indirizzo del tuo wallet come proprietario.

Per creare un token account con un proprietario diverso:

Terminal
$
spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>

Nota: <TOKEN_ADDRESS> specifica il mint account per il token account.

Esempio di comando:

Example
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Output:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt

La creazione di un associated token account richiede un'istruzione che invoca l'Associated Token Program. Ecco un esempio in Javascript su Solana Playground.

L'Associated Token Program utilizza Cross Program Invocations per:

Per creare un nuovo token account con un nuovo keypair invece di un indirizzo associated token account, invia una transazione con due istruzioni. Ecco un esempio in Javascript su Solana Playground.

  1. Il System Program crea un nuovo account con spazio per i dati del token account e trasferisce la proprietà al Token Program.

  2. Il Token Program inizializza i dati come token account

Coniare token

Per creare nuove unità di un token, conia token verso un token account:

Terminal
$
spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]

Esempio di comando:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

Output:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG

Per coniare token verso un token account diverso:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Output:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7

L'istruzione MintTo sul Token Program crea nuovi token. L'autorità di conio deve firmare la transazione. L'istruzione conia token verso un token account e aumenta l'offerta totale sul mint account. Ecco un esempio in Javascript su Solana Playground.

Trasferire token

Per trasferire token tra token account:

Terminal
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>

Esempio di comando:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Output:

Terminal Output
Transfer 100 tokens
Sender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o

L'istruzione Transfer del Token Program gestisce i trasferimenti di token. Il proprietario del token account del mittente deve firmare la transazione. L'istruzione sposta i token tra token account. Ecco un esempio in Javascript su Solana Playground.

Sia il mittente che il destinatario necessitano di token account per il token specifico (mint). Il mittente può includere istruzioni per creare il token account del destinatario nella stessa transazione.

Creare metadata del token

Il Token Extensions Program consente di memorizzare i metadata (nome, simbolo, link all'immagine) direttamente sul mint account.

Per creare un token con l'estensione metadata:

Example
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata

Output:

Terminal Output
Creating token BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
To initialize metadata inside the mint, please run `spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>`, and sign with the mint authority.
Address: BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP
Decimals: 9
Signature: 5iQofFeXdYhMi9uTzZghcq8stAaa6CY6saUwcdnELST13eNSifiuLbvR5DnRt311frkCTUh5oecj8YEvZSB3wfai

Per inizializzare i metadata:

Terminal
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>

L'URI del token rimanda ai metadata off-chain. Vedi un esempio di formato JSON qui.

Esempio di comando:

Example
spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP "TokenName" "TokenSymbol" "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"

Visualizza i metadata su Solana Explorer.

Scopri di più nella guida all'estensione metadata. Per dettagli sulle Token Extensions, consulta la guida introduttiva alle Token Extensions e la documentazione SPL.

Is this page helpful?

Indice

Modifica Pagina

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Rimani Connesso