Tokenit ovat digitaalisia varoja, jotka edustavat omistusta eri omaisuusluokkiin. Tokenisaatio mahdollistaa omistusoikeuksien digitalisoinnin. Solanan tokeneita kutsutaan SPL-tokeneiksi (Solana Program Library).
Tämä osio käsittelee peruskäsitteitä siitä, miten tokenit esitetään Solanassa. Katso koodiesimerkkejä osiosta SPL Token Basics.
Keskeiset kohdat
-
Token Programit sisältävät kaiken ohjelogiikan tokenien kanssa toimimiseen verkossa (sekä vaihdettavat että vaihtamattomat).
-
Mint account edustaa tiettyä tokenia ja tallentaa globaalit metatiedot tokenista, kuten kokonaistarjonnan ja mint authorityn (osoite, jolla on oikeus luoda uusia tokenin yksiköitä).
-
Token account seuraa yksittäistä tokenien omistusta tietylle mint accountille tietylle omistajalle.
-
Associated token account on token account, joka on luotu osoitteella, joka johdetaan omistajan ja mint accountin osoitteista.
Token Programit
Solana-ekosysteemissä on kaksi pääasiallista Token Programia. Molempien lähdekoodit alla.
Token Program (alkuperäinen)
- Perustokenitoiminnallisuus (mint, transfer jne.)
- Muuttumaton ja laajalti käytetty
Token Extension Program (Token 2022)
- Sisältää kaikki alkuperäisen Token Programin ominaisuudet
- Lisää ominaisuuksia "laajennusten" kautta
Token Programit sisältävät kaiken ohjelogiikan tokenien kanssa toimimiseen verkossa (sekä vaihdettavat että vaihtamattomat). Kaikki Solanan tokenit ovat käytännössä data accounteja, jotka Token Program omistaa.
Token Program
Mint account
Solanan tokenit tunnistetaan yksilöllisesti mint accountin osoitteella, jonka Token Program omistaa. Tämä tili toimii globaalina laskurina tietylle tokenille ja tallentaa tietoja kuten:
- Supply: Tokenin kokonaistarjonta
- Decimals: Tokenin desimaalitarkkuus
- Mint authority: Tili, jolla on valtuutus luoda uusia tokenin yksiköitä, kasvattaen tarjontaa
- Freeze authority: Tili, jolla on valtuutus jäädyttää tokeneita token accountissa, estäen niiden siirtämisen tai polttamisen
Mint Account
Jokaiseen mint accountiin tallennetut täydelliset tiedot sisältävät seuraavat:
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 initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
Viitteeksi, tässä on Solana Explorer -linkki USDC mint accountiin.
Token Account
Token Program luo token accounteja seuratakseen jokaisen tokenin yksikön yksittäistä omistajuutta. Token account tallentaa tietoja kuten:
- Mint: Token, jonka yksiköitä token account sisältää
- Owner: Tili, jolla on valtuutus siirtää tokeneita token accountista
- Amount: Tokenien määrä, jonka token account tällä hetkellä sisältää
Token Account
Jokaiseen token accountiin tallennetut täydelliset tiedot sisältävät seuraavat:
pub struct Account {/// The mint associated with this accountpub 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 delegatepub delegate: COption<Pubkey>,/// The account's statepub 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 delegatedpub delegated_amount: u64,/// Optional authority to close the account.pub close_authority: COption<Pubkey>,}
Lompakko tarvitsee token accountin jokaiselle tokenille (mint), jota se haluaa säilyttää, ja lompakon osoite asetetaan token accountin omistajaksi. Jokainen lompakko voi omistaa useita token accounteja samalle tokenille (mint), mutta token accountilla voi olla vain yksi omistaja ja se voi sisältää vain yhden tokenin (mint) yksiköitä.
Tilien suhteet
Huomaa, että jokaisen token accountin tiedot sisältävät owner -kentän, joka
tunnistaa kenellä on valtuutus token accountiin. Tämä eroaa perus
Account -tyypin määrittämästä ohjelman
omistajasta, joka on Token Program kaikille token accounteille.
Associated Token Account
Associated token accountit yksinkertaistavat token accountin osoitteen löytämistä tietylle mintille ja omistajalle. Ajattele associated token accountia tietyn mintin ja omistajan "oletusarvoisena" token accountina.
Associated token account luodaan osoitteella, joka johdetaan omistajan osoitteesta ja mint accountin 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 accountin osoitteen löytämistä.
Associated Token Account
Huomaa, että jokainen lompakko tarvitsee oman token accountinsa pitääkseen hallussaan tokeneita samasta mintistä.
Accounts Relationship Expanded
Token CLI -esimerkit
spl-token CLI auttaa kokeilemaan SPL-tokeneita. Alla olevat esimerkit
käyttävät Solana Playgroundin terminaalia
CLI-komentojen suorittamiseen suoraan selaimessa ilman paikallista asennusta.
Tokenien ja accountien luominen vaatii SOL:ia accountin rent-talletuksiin ja
transaktiomaksuihin. Ensikertalaisten Solana Playground -käyttäjien tulee luoda
Playground-lompakko ja suorittaa solana airdrop -komento
Playground-terminaalissa. Voit myös hankkia devnet SOL:ia julkisesta
web faucetista.
$solana airdrop 2
Suorita spl-token --help nähdäksesi kaikki käytettävissä olevat komennot.
$spl-token --help
Asenna spl-token CLI paikallisesti suorittamalla:
$cargo install spl-token-cli
Löydät lisää esimerkkejä
spl-token -dokumentaatiosta.
Terminaalin tulosteessa näkyvät account-osoitteet eroavat alla olevista
esimerkeistä. Käytä Playground-terminaalisi osoitteita seuratessasi mukana.
Esimerkiksi create-token -komento tulostaa mint account -osoitteen, jossa
Playground-lompakkosi on mint authorityna.
Luo uusi token
Luo uusi token (mint account) suorittamalla:
$spl-token create-token
Tuloste näyttää tältä:
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgAddress: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgDecimals: 9Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1
Uusi mint account alkaa nollatarjonnalla. Tarkista nykyinen tarjonta komennolla:
$spl-token supply <TOKEN_ADDRESS>
Uuden tokenin supply -komento palauttaa 0:
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Uuden mint accountin luominen vaatii transaktion, jossa on kaksi instruktiota. Tässä on Javascript-esimerkki Solana Playgroundissa.
-
System Program luo uuden tilin, jossa on tilaa mint accountin tiedoille ja siirtää omistajuuden Token Programille.
-
Token Program alustaa uuden tilin tiedot mint accountiksi
Luo token account
Pidä tietyn mintin tokeneita luomalla token account:
$spl-token create-account <TOKEN_ADDRESS>
Esimerkkikomento:
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Tuloste:
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1
create-account -komento luo associated token accountin, jossa lompakkosi
osoite on omistajana.
Luo token account eri omistajalla:
$spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>
Huomaa: <TOKEN_ADDRESS> määrittää mint accountin token accountille.
Esimerkkikomento:
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Tuloste:
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt
Associated token accountin luominen vaatii yhden instruktion, joka kutsuu Associated Token Programia. Tässä Javascript-esimerkki Solana Playgroundissa.
Associated Token Program käyttää cross program invocationeja seuraavasti:
- Kutsuu System Programia luodakseen uuden tilin käyttäen annettua PDA:ta osoitteena
- Kutsuu Token Programia alustamaan token accountin tiedot
Luodaksesi uuden token accountin uudella keypairilla associated token account -osoitteen sijaan, lähetä transaktio kahdella instruktiolla. Tässä Javascript-esimerkki Solana Playgroundissa.
-
System Program luo uuden tilin, jossa on tilaa token accountin tiedoille ja siirtää omistajuuden Token Programille.
-
Token Program alustaa tiedot token accountiksi
Tokenien mintaaminen
Luodaksesi uusia token-yksiköitä, mintaa tokeneita token accountille:
$spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]
Esimerkkikomento:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100
Tuloste:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG
Mintaamaan tokeneita eri token accountille:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Tuloste:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7
Token Programin MintTo -instruktio luo uusia tokeneita. Mint authorityn on
allekirjoitettava transaktio. Instruktio mintaa tokeneita token accountille ja
kasvattaa mint accountin kokonaistarjontaa. Tässä Javascript-esimerkki
Solana Playgroundissa.
Tokenien siirtäminen
Siirtääksesi tokeneita token accountien välillä:
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>
Esimerkkikomento:
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Tuloste:
Transfer 100 tokensSender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o
Token Programin Transfer -käsky käsittelee tokenien siirtoja. Lähettäjän
token accountin omistajan on allekirjoitettava transaktio. Käsky 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ää käskyt vastaanottajan token accountin luomiseen samaan transaktioon.
Luo tokenin metadata
Token Extensions Program mahdollistaa metadatan (nimi, symboli, kuvalinkki) tallentamisen suoraan mint accountiin.
Tokenin luominen metadata-laajennuksella:
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata
Tuloste:
Creating token BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbTo 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: BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczPDecimals: 9Signature: 5iQofFeXdYhMi9uTzZghcq8stAaa6CY6saUwcdnELST13eNSifiuLbvR5DnRt311frkCTUh5oecj8YEvZSB3wfai
Metadatan alustaminen:
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>
Token URI linkittää off-chain-metadataan. Katso esimerkki JSON-muodosta täältä.
Esimerkkikomento:
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. Token Extensions -laajennuksista löydät lisätietoja Token Extensions Getting Started -oppaasta ja SPL-dokumentaatiosta.
Is this page helpful?