Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
本項目涵蓋即將推出的 LaunchLab 程式更新。在部署前已針對本地發行分支進行驗證。在依賴預畢業預扣費用提取之前,請確認已部署的程式。
InitializeWithToken2022 建立的 Token-2022 基礎鑄幣可以攜帶 TransferFeeConfig。該擴展有兩個權限:transfer_fee_config_authority(變更費率和最高費用)和 withdraw_withheld_authority(提取 Token-2022 在代幣帳戶上預扣的費用)。 在此版本之前,程式在鑄幣建立時將啟動 authority PDA 放在兩者上,並在畢業時將兩者交給 PlatformConfig.transfer_fee_extension_auth。啟動板程式沒有預扣提取或收穫指令,因此在整個結合曲線階段,沒有人可以提取預扣餘額——唯一可以提取的金鑰是一個沒有指令可簽署的 PDA。 此版本在鑄幣建立時將 transfer_fee_extension_auth 直接寫入 withdraw_withheld_authority,因此平台可以從第一筆交易開始掃除預扣費用。MigrateToCpswap 增加了一個防護,使其僅在 PDA 仍持有該權限時才重新指派該權限,這使得來自兩代鑄幣的畢業都能正常運作。 其他一切都未改變。沒有帳戶增長或縮小,沒有指令增加或失去帳戶,沒有引數改變,也沒有錯誤代碼移動。

整合者速覽

  • 預扣轉帳費用在啟動期間可提取。 在新 Token-2022 啟動中,如果平台設定了 transfer_fee_extension_auth,該金鑰從建立時起就是鑄幣的 withdraw_withheld_authority。直接呼叫 Token-2022 自身的 WithdrawWithheldTokensFromAccounts / WithdrawWithheldTokensFromMint;LaunchLab 沒有此指令,也從未有過。
  • transfer_fee_config_authority 時序未變。 它在畢業前仍是啟動 authority PDA,在 MigrateToCpswap 中仍會移至 transfer_fee_extension_auth。費率在啟動期間無法變更。
  • 在啟動前設定 transfer_fee_extension_auth 當它在鑄幣建立時為 Pubkey::default() 時,提取權限會回退到 authority PDA——舊行為。之後設定該欄位仍會在畢業時恢復權限,但預扣餘額會被凍結直到那時。
  • 不要在啟動期間輪換該欄位。 兩個權限在兩個不同時刻讀取,因此在中間變更的值會將它們放在不同的金鑰上。詳見輪換會分割兩個權限
  • MigrateToCpswap 對呼叫者未變。 相同的帳戶、相同的引數、相同的錯誤。新防護是內部的;沒有它,新代鑄幣的遷移會在 Token-2022 內部還原,因為 PDA 不再能簽署它不持有的權限。
  • 現有啟動不受影響。 已在鏈上的鑄幣在兩個權限上保持 PDA,在畢業時仍會將兩者交出。
  • 無需刷新 IDL。 沒有佈局、帳戶、引數或錯誤代碼改變。

誰持有什麼,以及何時

兩個交接仍在它們一直以來所在的相同外部條件後面:基礎鑄幣必須攜帶 TransferFeeConfig transfer_fee_extension_auth 必須非預設值。從不設定該欄位的平台會永遠在 authority PDA 上保持兩個權限——費率永遠無法變更,預扣餘額永遠無法提取。

輪換會分割兩個權限

transfer_fee_extension_auth 在每次啟動期間讀取兩次,在可能相隔數天的兩個時刻:
  1. InitializeWithToken2022 時,用於 withdraw_withheld_authority
  2. MigrateToCpswap 時,用於 transfer_fee_config_authority——以及僅當 PDA 仍持有時的 withdraw_withheld_authority
在中間透過 UpdatePlatformConfig 輪換該欄位,兩個權限會落在不同的金鑰上:提取方保持在建立時配置的金鑰,因為 PDA 不再持有它且遷移跳過該交接,而費用配置方則轉到新金鑰。兩個呼叫都不會失敗;分割是無聲的。在啟動之間輪換,或之後透過 Token-2022 直接用舊金鑰簽署來協調金鑰。

為什麼防護是必需的,而不僅是防禦性的

Token-2022 的 SetAuthority 需要當前權限簽署。在新建立規則下,啟動 authority PDA 不是新鑄幣上的提取預扣權限,因此程式曾經進行的無條件 CPI 會失敗——而且因為它位於 MigrateToCpswap 內部,該失敗會阻止在配置了該欄位的平台上進行轉帳費用的每個 Token-2022 啟動的畢業。這兩個變更只有作為一對才能運作。

未改變的內容

  • 轉帳費用數學和會計。 MAX_TRANSFER_FEE_RATE 仍為 500(5%,分母 10_000),費用仍以相同方式計入曲線,預扣餘額仍在 Token-2022 放置它的代幣帳戶上累積。
  • MigrateToCpswap 的介面。 相同的帳戶列表、相同的 remaining_accounts 索引、相同的兩個代幣程式、無引數。
  • InitializeWithToken2022 的介面。 相同的帳戶、相同的 TransferFeeExtensionParams、相同的 NoSupportExtension 拒絕任何在 MetadataPointerTransferFeeConfig 之外的內容。
  • 報價方 Token-2022 處理。2026-08-24以來未變。
  • 錯誤代碼。 60006023 未變;此版本不新增任何代碼。
  • 帳戶佈局和 IDL。 未變。PlatformConfig.transfer_fee_extension_auth 保持其偏移和類型;僅程式讀取它的方式改變。

更新的頁面

  • products/launchlab/platform-config — 新增「Token-2022 轉帳費用權限」部分,涵蓋兩個權限、兩個交接點和輪換陷阱;佈局註解和缺陷列表已更正。
  • products/launchlab/instructionsMigrateToCpswap 增加「Token-2022 轉帳費用權限交接」區塊;Initialize 後置條件記錄新鑄幣建立權限。
  • products/launchlab/accounts — 權限 PDA 角色列表和基礎鑄幣部分註明 PDA 實際持有哪些轉帳費用權限。
  • reference/token-2022-support — LaunchLab 基礎鑄幣項目說明誰持有轉帳費用權限以及何時持有。