前兩篇講了SPL Token與Account Model,現在要正式介紹token extension。
Token Extension Program(以下簡稱TEP) 原名 Token 2022,是一個基於原本Token Prgram(以下簡稱TP)的擴充版本。TEP被部署到的地址跟TP是不同的,所以不能單純將他當作是一個更新版。TEP不能完全取代TP的存在。
Solana doc的例子很好的舉例為什麼需要用到TEP:
假設一所大學想要將畢業證書用 NFT 的方式發行,要如何確保這個畢業證書永遠不會被轉移給其他人(學位不可轉讓)?在當前的 TP 中是不可能的,開發者需要在transfer指令中加入檢查並拒絕所有的transfer。此問題的一個解法fork一個大學專屬的 TP,並添加這個檢查。但如此一來這個 TP 就會是完全獨立的。大學需要為錢包和用於進行學位檢查的 dApp 提供維護。而如果不同的大學有各自的客製化需求,那麼就會有更多個fork。在 TEP 上線後可以直接使用其中的 non-transferable token extension。
依Account分成兩類Extension,Account Extensions & Mint(Account) Extensions。這些extension的資訊會被加在 Account
的尾端。
如上面敘述,TPE 是擴充版本,所以大致上的架構仍沿用原版TP。
參考這兩段程式碼,Mint Account的格式,可以觀察到前面的byte結構都一樣:
Token Program code @ line 1200 & Token Extension Program code @ line 1566
擴展部分新增的資料欄位有:
// Extension program code line 1025
pub enum AccountType {
/// Marker for 0 data
Uninitialized,
/// Mint account with additional extensions
Mint,
/// Token holding account with additional extensions
Account,
}
以下將對兩種裡面的幾個extension進行介紹。
接下幾章將介紹Token Extension Program的使用。