上一篇提到要在Solana上鑄造新的token需要使用到token program,功能較為陽春。隨著各種新需求的增加同時兼顧安全性的目的,一個新的token program - token 2022 (另名token extension)被開發出來,發佈在一個新的地址上。
Token 2022在兼顧安全性的同時新增了非常多實用且方便的功能如支援鏈上metadata,transfer hook,transfer fees等等。
這些差異的比較與實作將在接下來幾篇中提到。為了更深刻理解演化的過程並感受差異,本篇將先帶領讀者用舊版的 token program 搭配 solana cli & spl-token cli 在Solana devnet上鑄造一個新的代幣。
終端機執行:
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
視輸出提示決定是否需要更新 PATH
環境變數。(官方doc)
// 進入專案資料夾
mkdir ~/new-token
cd ~/new-token
建議讀者先對Solana Account Model有初步了解在進行後續步驟 - SPL Token & Token Extension - Part 1: 簡介Account Model
1個Mint Account, 2個 User Account(one for showcasing transfer token)
solana-keygen new -o user1.json // this user will be granted mint authority
solana-keygen new -o user2.json
我們要將user1設定為接下來用於簽章的帳戶,同時先空投SOL用於後續的交易手續費。
// 設定預設使用的帳戶
solana config set --keypair user1.json
// 空投 5 SOL
solana airdrop 5 user1.json
為了方便表示,我將用 $XD_TOKEN
代表 new token address。
spl-token create-token --mint-authority user1.json
// output
Creating account $XD_TOKEN
這樣新的token就建立成功了,
這是在solana explore上面我的Token目前的資訊:
也可以使用指令查看帳戶資訊:
solana account $XD_TOKEN
// output
Public Key: ...
Balance: ...
Owner: ...
Executable: false
Rent Epoch: ...
Length: ... ..
大家是否還記得每一個token類別都需要一個專門的帳戶來儲存他,我們需要在User1帳戶底下建立一個Asociated Token Account (ATA),我會用$ATA_ACC1來代表。
spl-token create-account $XD_TOKEN --owner $USER1
// output
Creating account $ATA_ACC1
$ spl-token mint $XD_TOKEN 10 $ATA_ACC1 --mint-authority user1.json
User1帳戶:
Token Mint Account:
以上均可看到supply變成1000了。
spl-token transfer $XD_TOKEN 100 user2.json --owner user1.json
如果直接跑這一行會發現跳出錯誤,這是因為我們也需要為user2建立一個ATA。除了這個方法以外我們也可以在指令末端加入 --fund-recipient
,這將由sender出手續費幫接收者建立一個ATA。
到這邊應該都很簡單,但是各位是否有發現我的Token名稱還是Unkown Token,也沒有好看的圖片,其他metadata也全無。這是因為在token-2022前要先在外部儲存空間中將metadata上傳,並利用如 metaplex 等第三方工具讓Token指向這些資料連結。
開發者需要額外去熟悉metaplex js庫的語法,搞定外部儲存空間等等麻煩的操作。token-2022讓metadata上鍊不僅將流程簡化,也避免過度依賴第三方系統造成速度、安全、穩定性等影響。
p.s. 網路上有一些廣告主打用他們的no-code工具來mint token,一個收你0.1~0.5 SOL :)根本搶錢