2024-08-14|閱讀時間 ‧ 約 27 分鐘

Token Extension介紹 Part2


上篇我們看到了幾種常見的Token Extensions,現在我們來看看如何組織這些Token Extensions來做到更特殊的應用吧!

首先要組合各種Token Extensions,其實是有限制在的,因為有些Token Extensions是不相容的,以下是所有不能組合在一起的例子:

  • Non-transferable + (transfer hooks, transfer fees, confidential transfer) -- 既然都禁止transfer了,那再加上transfer的功能就沒意義啦!
  • Confidential transfer + fees -- 因為fees都是用百分比計算,所以如果用了confidential transfer,我們就無從得知這筆transfer總共轉了多少錢,自然就無法計算應繳多少手續費了~
  • Confidential transfer + transfer hooks -- transfer hooks會要求傳入transfer的數量,但又因為confidential transfer會讓我們不知道數量,所以不能同時使用。
  • Confidential transfer + permanent delegate -- Confidential transfer就是要用來保護隱私的,但permanent delegate卻能讓發幣者對所有錢包的幣有絕對的控制權,完全沒有隱私可言,兩者被開發出來的目的是互相違背的。

接下來讓我們看看世界上各大神都是如何融會貫通這麼多不同的Token Extensions (TEs)並創造出偉大的項目的吧!

  1. Flux beam -- Flux beam 是 Solana 上的 DEX,他上面支援了多種 Token Extension,可以在平台上交易有使用 Token Extension 的幣,同時他也有一個平台讓使用者可以快速發起帶 Token Extensions 的幣(不需要會寫程式),有興趣實驗各種 Token Extension的組合會帶來怎麼樣的市場效應的觀眾們歡迎到這裡看看!
  2. Print Protocol -- Print Protocol的 CTO Mark Hanna 在推特上表示Solana迷因幣常常剛被創立就被很多機器人瘋狂買入,吸引到大眾眼球後再一股腦地拋售給散戶,導致散戶虧損慘重。為了解決這個問題,他們想要利用transfer hook來限制每筆交易該幣的最大數量以及每個錢包能持有的該幣最大數量,進而達到減少大起大落的效果。
  3. Wen New Standard (WNS) -- WNS 是一種 NFT,他使用了Metadata、Group (pointer)、Member (pointer)、TransferHook、ImmutableOwner這些 TEs 前五者用來快速且方便的創建NFT 於鏈上,並且metadata中有ROYALTY_BASIS_POINTS 這個key來記錄每個錢包的royalty。而TransferHook則可以偵測只要錢包有transfer NFT,就會計算他的royalty變化。而royalty可以claim rewards,royalty越高可以claim的獎勵就越多!

如何實作自己的Token Extension?

如果是用cli的話,只需要使用以下這個指令mint並輸入對應tag的值就可以囉!

spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb create-token <extension flags>

其中 Tokenz...PxuEb是Token-2022的 account。舉例來說,假設我們想要替我們的幣加上最常見的TransferHook,我們要先部署一個負責管理transfer的program,並用

--transfer-hook yourTransferHookProgramId來替我們的幣加上TransferHook,其中撰寫TransferHook program的簡單例子如下,至於TransferHook這個型別該長什麼樣子就是照不同使用場景讓使用者自行定義囉~

#[error_code]
pub enum MyError {
#[msg("The amount is too big")]
AmountTooBig,
}
pub fn transfer_hook(ctx: Context<TransferHook>, amount: u64) -> Result<()> {
msg!("Hello Transfer Hook!");
if amount > 50 {
return err!(MyError::AmountTooBig);
}
Ok(())
}

更多其他Token Extension的實踐方法可以參見這個連結。希望大家在看完這兩篇文章後對Token Extension有更深的了解,並發現其背後蘊藏的巨大想像空間,如果有時間能自己也動手做幾個就更棒了!

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.