什麼是Token Extension?
目前所有Solana上的幣在mint, transfer, burn的時候都需要呼叫Token Program並由它負責處理。但隨著Solana鏈上幣的玩法越來越豐富,原生的Token Program已經無法滿足許多常見的使用場景,因此在2020年的時候Solana推出了一個新的token program -- 「Token-2022」。Token-2022利用Token Extension擴展了原生SPL token,使得SPL token能夠擁有更豐富的功能。這方式除了讓發幣者更方便發幣,也同時提出了一個公開且安全的標準,其餘DAPP或錢包只需要遵照這個標準,就可以無痛接軌這些幣的功能。
常用的Token Extension以及其應用場景
Token Extensions 分為 Mint-related & Account-related。Mint-related是與發幣比較相關的 extensions,而 Account-related 是讓 account 更方便管理 SPL token 用的。
Mint-related Extensions
- Confidential transfers -- 在transfer過程中保護使用者帳戶隱私(如餘額)並且隱藏本次transaction的transfer數量。應用場景:B2B transfer過程中需要保護企業的隱私權,故會採用Confidential transfer的方式。
- Transfer fees -- 每次有人transfer該幣時會向他收取手續費。應用場景:發幣者想要收取交易費時可啟用。
- Closing mint -- 發幣者可以取回為了租借鏈上空間發幣而花費的SOL。應用場景:發迷因幣時可以啟用這項功能,若迷因幣歸零,發幣者還可以提領回一些SOL補償損失。
- Interest-bearing tokens -- 設定該幣的借貸還款利率。應用場景:身為一個借貸平台,要管理借貸利率會需要另建一個合約來管理,但這邊可以直接用前端呼叫token-2022的amount_to_ui_amount即可獲取該幣最新的應還數量。且此利率是可調整的,只需要用有權限的錢包做簽名即可調整利率。
- Non-transferable tokens -- 可以使該幣無法被transfer。應用場景:若畢業證書是NFT,那該NFT應為不可轉移的,只需要在mint這個NFT的時候開啟這項限制即可。
- Permanent delegate -- 發幣者可以賦予其他account權限,讓他可以burn/transfer所有人的該幣。應用場景:穩定幣發行商若認定某帳戶中的幣是黑錢,可以直接將該帳戶的幣轉走沒收起來。
- Transfer hook -- 發幣者可以自定義函式,這些函式會在每次該幣被transfer的時候觸發。應用場景:收集每次transfer的資料可以在另一個合約中計算每個account對該幣的royalty,後續發幣者可以針對不同的royalty進行不同程度的空投獎勵。
- Metadata (pointer) -- 發幣者在mint NFT的時候就可以將metadata嵌在NFT上,讓metadata上鏈(而非存在ipfs),而pointer可以綁定一個地址,該地址中儲存著metadata的值。應用場景:發NFT前,用簡單的方式在鏈上創造一個metadata,並將該NFT的metadata pointer指向剛創的metadata即可賦予NFT metadata。
- Group (pointer) --NFT創作者可以為他創作的NFT新增group,方便管理及搜尋,而pointer可以綁定一個地址,該地址用來存放group的資料。應用場景:當NFT創作者要做一系列NFT時,可以不需要用metadata的方式歸在同一類,而是建一個group,並將該系列的NFT的group pointer都指向這個group,就能創造出NFT collection。
- Member (pointer) -- 若該NFT屬於某個group,可以用member來特別的描述這個NFT在這個group中的資訊。應用場景:將NFT歸屬到某個group後,可以創造一個member來代表該group的序號,再將目標NFT的member pointer指向這個member,就成功地賦予這個NFT在group中的序號了。
Account-related Extensions
- Memo required on incoming transfers -- account在transfer該幣時都需要加上備註。應用場景:為了轉帳的安全性,可以啟用此功能讓轉帳之間新增備註。
- Immutable ownership -- 讓該幣的Token account ownership不會被轉移。應用場景:其實在某些情況下ATA ownership被轉移是一個方便的功能,但相對的可能會有資安上的疑慮,故若確定不需要此功能可以開啟此設定避免ATA ownership被轉移。
- Default account state -- 所有account在第一次收到該幣時,ATA會被frozen,即該account無法轉移或使用收到的幣。需要發幣者給他權限後才能正常使用。應用場景:這功能可以被用在需要KYC的幣上,需經過項目方KYC通過後再幫使用者解鎖權限。
- CPI guard -- 一但啟用此功能,如果某筆交易中的其他program會用到該幣,則禁止或必須得經過使用者簽名。應用場景:有時候我們在執行交易時,該筆交易會呼叫到其他program,且其他program可能會動用到我們的幣,這時候這個功能就可以預防我們的幣被其他program在未經我們許可的情況下動用。
- Reallocate -- 可讓該幣佔用的記憶體空間變多。應用場景:當發幣者發完幣後仍想要新增Token Extension在該幣上時,就要先用reallocate先擴增該幣佔用的記憶體空間,才能再新增新的Token Extension上去。
結語
從以上的介紹可以看出Solana上的技術正在隨時間逐漸進步,身爲應用場景最多、效能最快的鏈,需求肯定也會指數增長,而我們可以看到Solana foundation也即時針對這些需求提出了便利的解決方法,讓Solana變得更強更方便!