Tokenit Solanassa

Tokenit ovat digitaalisia omaisuuseriä, jotka edustavat omistajuutta erilaisissa omaisuusluokissa. Tokenisaatio mahdollistaa omistusoikeuksien digitalisoinnin. Solanan tokeneita kutsutaan SPL (Solana Program Library) -tokeneiksi.

Tämä osio kattaa peruskäsitteet siitä, miten tokenit esitetään Solanassa. Katso koodiesimerkkejä SPL Token -perusteet -osiosta.

Avainasiat

  • Token Program sisältää kaikki ohjekäskyt tokenien käsittelyyn verkossa (sekä vaihdettavat että ei-vaihdettavat).

  • Mint Account edustaa tiettyä tokenia ja tallentaa globaalia metatietoa tokenista, kuten kokonaistarjontaa ja mint-auktoriteettia (osoite, jolla on valtuudet luoda uusia tokenin yksiköitä).

  • Token Account seuraa yksittäistä tokenien omistusta tietylle mint-tilille tietyn omistajan osalta.

  • Associated Token Account on Token Account, joka on luotu osoitteella, joka on johdettu omistajan ja mint-tilin osoitteista.

Token Programs

Solana-ekosysteemissä on kaksi pääasiallista Token Program -ohjelmaa. Molempien ohjelmien lähdekoodi alla.

Token Program sisältää kaikki ohjekäskyt tokenien käsittelyyn verkossa (sekä vaihdettavat että ei-vaihdettavat). Kaikki Solanan tokenit ovat käytännössä data-tilejä, jotka omistaa Token Program.

Token ProgramToken Program

Mint Account

Tokenit Solanassa tunnistetaan yksilöllisesti Token Program -ohjelman omistaman Mint Account -tilin osoitteella. Tämä tili toimii globaalina laskurina tietylle tokenille ja tallentaa tietoja kuten:

  • Supply: Token-rahan kokonaismäärä
  • Decimals: Token-rahan desimaalitarkkuus
  • Mint authority: Tili, jolla on valtuudet luoda uusia token-yksiköitä, kasvattaen kokonaismäärää
  • Freeze authority: Tili, jolla on valtuudet jäädyttää token-rahoja Token Account -tilillä, estäen niiden siirtämisen tai polttamisen

Mint AccountMint Account

Mint Account -tilille tallennetut täydelliset tiedot sisältävät seuraavat:

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

Viitteeksi, tässä on Solana Explorer -linkki USDC Mint Account -tiliin.

Token Account

Token Program luo Token Accounts -tilejä seuratakseen yksittäisten token-yksiköiden omistusta. Token Account tallentaa tietoja kuten:

  • Mint: Token, jonka yksiköitä Token Account sisältää
  • Owner: Tili, jolla on valtuudet siirtää token-rahoja Token Account -tililtä
  • Amount: Token-rahojen määrä, jonka Token Account tällä hetkellä sisältää

Token AccountToken Account

Jokaiseen Token Account -tiliin tallennetut täydelliset tiedot sisältävät seuraavat:

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

Lompakko tarvitsee token account -tilin jokaiselle tokenille (mint), jota se haluaa säilyttää, ja lompakon osoite asetetaan token account -tilin omistajaksi. Jokainen lompakko voi omistaa useita token account -tilejä samalle tokenille (mint), mutta token account -tilillä voi olla vain yksi omistaja ja se voi sisältää vain yhden tokenin (mint) yksiköitä.

Account RelationshipAccount Relationship

Huomaa, että jokaisen Token Account -tilin tiedot sisältävät owner -kentän, joka määrittää, kenellä on valtuudet Token Account -tiliin. Tämä eroaa perus Account -tyypin määrittämästä ohjelman omistajasta, joka on Token Program kaikille Token Account -tileille.

Associated Token Account

Associated Token Account -tilit yksinkertaistavat token account -tilin osoitteen löytämisprosessia tietylle mintille ja omistajalle. Ajattele Associated Token Account -tiliä "oletusarvoisena" token account -tilinä tietylle mintille ja omistajalle.

Associated Token Account luodaan osoitteella, joka johdetaan omistajan osoitteesta ja mint-tilin osoitteesta. On tärkeää ymmärtää, että Associated Token Account on vain token account, jolla on tietty osoite.

Tämä esittelee keskeisen käsitteen Solana-kehityksessä: Program Derived Address (PDA). PDA johtaa osoitteen deterministisesti käyttäen ennalta määritettyjä syötteitä, mikä helpottaa tilin osoitteen löytämistä.

Associated Token AccountAssociated Token Account

Huomaa, että jokainen lompakko tarvitsee oman token accountin säilyttääkseen tokeneita samasta mintistä.

Tilien suhteet laajennettunaTilien suhteet laajennettuna

Token CLI -esimerkit

spl-token CLI auttaa sinua kokeilemaan SPL-tokeneita. Alla olevat esimerkit käyttävät Solana Playground -päätettä suorittaakseen CLI-komentoja suoraan selaimessa ilman paikallista asennusta.

Tokenien ja tilien luominen vaatii SOLia tilien vuokratalletuksiin ja tapahtumamaksuihin. Ensimmäistä kertaa Solana Playgroundia käyttäville, luo Playground- lompakko ja suorita solana airdrop -komento Playground-päätteessä. Voit myös hankkia devnet SOLia julkisesta web-faucetista.

Terminal
$
solana airdrop 2

Suorita spl-token --help nähdäksesi kaikki saatavilla olevat komennot.

Terminal
$
spl-token --help

Asentaaksesi spl-token CLI:n paikallisesti, suorita:

Terminal
$
cargo install spl-token-cli

Löydät lisää esimerkkejä spl-token dokumentaatiosta.

Päätteessäsi näkyvät tiliosoitteet eroavat alla olevista esimerkeistä. Käytä Playground-päätteestäsi saatuja osoitteita, kun seuraat ohjeita. Esimerkiksi create-token -komento tulostaa mint-tilin osoitteen, jossa Playground-lompakkosi on mint-auktoriteettina.

Uuden tokenin luominen

Luodaksesi uuden tokenin (mint-tilin), suorita:

Terminal
$
spl-token create-token

Tuloste näyttää tältä:

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

Uusi mint account alkaa nollasaldolla. Tarkista nykyinen saldo komennolla:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

Komento supply uudelle tokenille palauttaa 0:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Uuden Mint Accountin luominen vaatii transaktion, jossa on kaksi ohjetta. Tässä on Javascript-esimerkki Solana Playgroundissa.

  1. System Program luo uuden tilin, jossa on tilaa Mint Account -tiedoille ja siirtää omistajuuden Token Programille.

  2. Token Program alustaa uuden tilin tiedot Mint Accountiksi

Token Accountin luominen

Luodaksesi token accountin tietyn mintin tokeneita varten:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

Esimerkkikomento:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Tuloste:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1

Komento create-account luo associated token accountin, jonka omistaja on lompakkosi osoite.

Luodaksesi token accountin eri omistajalla:

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

Huomaa: <TOKEN_ADDRESS> määrittää mint accountin token accountille.

Esimerkkikomento:

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

Tuloste:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt

Associated Token Accountin luominen vaatii yhden ohjeen, joka kutsuu Associated Token Programia. Tässä on Javascript-esimerkki Solana Playgroundissa.

Associated Token Program käyttää Cross Program Invocations -kutsuja:

Uuden Token Accountin luomiseksi uudella keypairilla Associated Token Accountin osoitteen sijaan, lähetä transaktio kahdella ohjeella. Tässä on Javascript- esimerkki Solana Playgroundissa.

  1. System Program luo uuden tilin, jossa on tilaa Token Account -tiedoille ja siirtää omistajuuden Token Programille.

  2. Token Program alustaa tiedot Token Accountiksi

Tokenien luominen (Mint)

Luodaksesi uusia tokenin yksiköitä, mintaa tokeneita Token Accountiin:

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

Esimerkkikomento:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

Tuloste:

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

Tokenien mintaaminen toiseen token accountiin:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Tuloste:

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

Token Programin MintTo -ohje luo uusia tokeneita. Mint authorityn on allekirjoitettava transaktio. Ohje mintaa tokeneita Token Accountiin ja kasvattaa kokonaistarjontaa Mint Accountissa. Tässä on Javascript- esimerkki Solana Playgroundissa.

Tokenien siirtäminen

Tokenien siirtäminen token accountien välillä:

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

Esimerkkikomento:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Tuloste:

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

Token Programin Transfer -ohje käsittelee tokenien siirtoja. Lähettäjän Token Accountin omistajan on allekirjoitettava transaktio. Ohje siirtää tokeneita Token Accountien välillä. Tässä on Javascript-esimerkki Solana Playgroundissa.

Sekä lähettäjä että vastaanottaja tarvitsevat token accountit kyseiselle tokenille (mint). Lähettäjä voi sisällyttää ohjeet vastaanottajan token accountin luomiseksi samaan transaktioon.

Token-metadatan luominen

Token Extensions -ohjelma mahdollistaa metadatan (nimi, symboli, kuvalinkki) tallentamisen suoraan Mint Account -tilille.

Luodaksesi tokenin metadata-laajennuksella:

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

Tuloste:

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

Metadatan alustamiseksi:

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

Token URI linkittää ketjun ulkopuoliseen metadataan. Katso esimerkki JSON-muodosta täältä.

Esimerkkikomento:

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

Tarkastele metadataa Solana Explorerissa.

Lue lisää Metadata Extension -oppaasta. Lisätietoja Token Extensions -ohjelmasta löydät Aloitusoppaasta ja SPL-dokumentaatiosta.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua