Token adalah aset digital yang mewakili kepemilikan atas berbagai kategori aset. Tokenisasi memungkinkan digitalisasi hak properti. Token di Solana disebut sebagai SPL (Solana Program Library) Token.
Bagian ini mencakup konsep dasar tentang bagaimana token direpresentasikan di Solana. Lihat bagian SPL Token Basics untuk contoh kode.
Poin-poin kunci
-
Token Programs berisi semua logika instruksi untuk berinteraksi dengan token di jaringan (baik fungible maupun non-fungible).
-
Mint Account mewakili token tertentu dan menyimpan metadata global tentang token seperti total pasokan dan mint authority (alamat yang berwenang membuat unit baru dari sebuah token).
-
Token Account melacak kepemilikan individu token untuk mint account tertentu untuk pemilik tertentu.
-
Associated Token Account adalah token account yang dibuat dengan alamat yang diturunkan dari alamat pemilik dan alamat mint account.
Token Programs
Ekosistem Solana memiliki dua Token Programs utama. Kode sumber untuk kedua program di bawah ini.
Token Program (Original)
- Kemampuan token dasar (mint, transfer, dll.)
- Immutable dan banyak digunakan
Token Extension Program (Token 2022)
- Mencakup semua fitur Token Program original
- Menambahkan fitur melalui "extensions"
Token Programs berisi semua logika instruksi untuk berinteraksi dengan token di jaringan (baik fungible maupun non-fungible). Semua token di Solana pada dasarnya adalah data accounts yang dimiliki oleh Token Program.
Token Program
Mint Account
Token di Solana diidentifikasi secara unik oleh alamat Mint Account yang dimiliki oleh Token Program. Account ini bertindak sebagai penghitung global untuk token tertentu dan menyimpan data seperti:
- Supply: Total supply token
- Decimals: Presisi desimal token
- Mint authority: Akun yang berwenang membuat unit baru dari token, meningkatkan supply
- Freeze authority: Akun yang berwenang membekukan token dalam token account, mencegahnya untuk ditransfer atau dibakar
Mint Account
Detail lengkap yang disimpan pada setiap mint account mencakup hal-hal berikut:
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>,}
Sebagai referensi, berikut adalah link Solana Explorer ke USDC Mint Account.
Token Account
Token Program membuat token account untuk melacak kepemilikan individual dari setiap unit token. Token account menyimpan data seperti:
- Mint: Token yang dipegang oleh token account dalam bentuk unit
- Owner: Akun yang berwenang mentransfer token dari token account
- Amount: Jumlah token yang saat ini dipegang oleh token account
Token Account
Detail lengkap yang disimpan pada setiap token account mencakup hal-hal berikut:
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>,}
Sebuah dompet memerlukan token account untuk setiap token (mint) yang ingin dipegangnya, dengan alamat dompet ditetapkan sebagai pemilik token account. Setiap dompet dapat memiliki beberapa token account untuk token (mint) yang sama, tetapi token account hanya dapat memiliki satu pemilik dan menyimpan unit dari satu token (mint).
Account Relationship
Perhatikan bahwa data setiap token account mencakup field owner yang
mengidentifikasi siapa yang memiliki otoritas atas token account. Ini berbeda
dari program owner yang ditentukan dalam tipe
Account dasar, yang merupakan Token Program
untuk semua token account.
Associated Token Account
Associated Token Account menyederhanakan proses pencarian alamat token account untuk mint dan pemilik tertentu. Anggap Associated Token Account sebagai token account "default" untuk mint dan pemilik tertentu.
Associated Token Account dibuat dengan alamat yang diturunkan dari alamat pemilik dan alamat mint account. Penting untuk memahami bahwa Associated Token Account hanyalah token account dengan alamat tertentu.
Ini memperkenalkan konsep kunci dalam pengembangan Solana: Program Derived Address (PDA). PDA menurunkan alamat secara deterministik menggunakan input yang telah ditentukan, sehingga memudahkan pencarian alamat akun.
Associated Token Account
Perhatikan bahwa setiap dompet memerlukan token account sendiri untuk menyimpan token dari mint yang sama.
Hubungan Akun Diperluas
Contoh Token CLI
spl-token CLI membantu Anda bereksperimen dengan token SPL. Contoh di
bawah ini menggunakan terminal Solana Playground untuk
menjalankan perintah CLI langsung di browser tanpa instalasi lokal.
Membuat token dan akun memerlukan SOL untuk deposit rent akun dan biaya
transaksi. Untuk pengguna Solana Playground pertama kali, buat dompet Playground
dan jalankan perintah solana airdrop di terminal Playground. Anda juga
bisa mendapatkan devnet SOL dari web faucet
publik.
$solana airdrop 2
Jalankan spl-token --help untuk melihat semua perintah yang tersedia.
$spl-token --help
Untuk menginstal spl-token CLI secara lokal, jalankan:
$cargo install spl-token-cli
Temukan lebih banyak contoh di
dokumentasi spl-token.
Alamat akun yang ditampilkan di output terminal Anda berbeda dari contoh di
bawah ini. Gunakan alamat dari terminal Playground Anda saat mengikuti.
Misalnya, perintah create-token menghasilkan alamat mint account dengan
dompet Playground Anda sebagai mint authority.
Membuat token baru
Untuk membuat token baru (mint account), jalankan:
$spl-token create-token
Outputnya terlihat seperti:
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgAddress: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgDecimals: 9Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1
Mint account baru dimulai dengan supply nol. Periksa supply saat ini dengan:
$spl-token supply <TOKEN_ADDRESS>
Perintah supply untuk token baru mengembalikan 0:
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Membuat Mint Account baru memerlukan transaksi dengan dua instruksi. Berikut contoh Javascript di Solana Playground.
-
System Program membuat akun baru dengan ruang untuk data Mint Account dan mentransfer kepemilikan ke Token Program.
-
Token Program menginisialisasi data akun baru sebagai Mint Account
Membuat token account
Untuk menyimpan token dari mint tertentu, buat token account:
$spl-token create-account <TOKEN_ADDRESS>
Contoh perintah:
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Output:
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1
Perintah create-account membuat associated token account dengan alamat
wallet Anda sebagai owner.
Untuk membuat token account dengan owner yang berbeda:
$spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>
Catatan: <TOKEN_ADDRESS> menentukan mint account untuk token account.
Contoh perintah:
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Output:
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt
Membuat associated token account memerlukan satu instruksi yang memanggil Associated Token Program. Berikut adalah contoh Javascript di Solana Playground.
Associated Token Program menggunakan Cross Program Invocations untuk:
- Memanggil System Program untuk membuat akun baru menggunakan PDA yang disediakan sebagai alamat
- Memanggil Token Program untuk menginisialisasi data token account
Untuk membuat token account baru dengan keypair baru alih-alih alamat associated token account, kirim transaksi dengan dua instruksi. Berikut adalah contoh Javascript di Solana Playground.
-
System Program membuat akun baru dengan ruang untuk data token account dan mentransfer kepemilikan ke Token Program.
-
Token Program menginisialisasi data sebagai token account
Mint token
Untuk membuat unit baru dari sebuah token, mint token ke token account:
$spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]
Contoh perintah:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100
Output:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG
Untuk mint token ke token account yang berbeda:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Output:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7
Instruksi MintTo pada Token Program membuat token baru. Mint authority
harus menandatangani transaksi. Instruksi ini mint token ke token account dan
meningkatkan total supply pada mint account. Berikut adalah contoh Javascript di
Solana Playground.
Transfer token
Untuk mentransfer token antar token account:
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>
Contoh perintah:
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Output:
Transfer 100 tokensSender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o
Instruksi Transfer pada Token Program menangani transfer token. Pemilik
token account pengirim harus menandatangani transaksi. Instruksi ini memindahkan
token antar token account. Berikut contoh Javascript di
Solana Playground.
Baik pengirim maupun penerima memerlukan token account untuk token (mint) tertentu. Pengirim dapat menyertakan instruksi untuk membuat token account penerima dalam transaksi yang sama.
Membuat metadata token
Token Extensions Program memungkinkan Anda menyimpan metadata (nama, simbol, tautan gambar) langsung pada mint account.
Untuk membuat token dengan ekstensi metadata:
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata
Output:
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
Untuk menginisialisasi metadata:
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>
URI token menautkan ke metadata off-chain. Lihat contoh format JSON di sini.
Contoh perintah:
spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP "TokenName" "TokenSymbol" "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"
Lihat metadata di Solana Explorer.
Pelajari lebih lanjut di Panduan Metadata Extension. Untuk detail tentang Token Extensions, lihat Panduan Memulai Token Extensions dan dokumentasi SPL.
Is this page helpful?