Token-2022 整合防護守衛 是做什麼的?
作者/檢查員 vs 消費者。 此工具包中關於
token-2022的素材以及廣泛的代幣擴充功能技能(solana-token-extensions、token-2022-extensions)是為代幣的 作者 設計的,用於選擇擴充功能、創建發行,以及一個唯讀的發行 檢查員。此技能則是相反的一面:說明了程式如何 安全地消費 它 無法控制 的第三方發行。一個發行是不受信任的輸入。那些技能提到 「整合者應使用淨額」,而此技能 強制執行並測試 了這一點——一個守衛金庫,用於證明份額破產的陷阱並在鏈上阻止它。它們是嚴格的互補關係;可以與它們一同安裝。
何時使用此技能
當使用者位於 Token-2022 發行的 消費端 時使用:
- 為 AMM、金庫、借貸市場、託管、質押或支付流程添加 Token-2022 支援。
- 決定是否要上市/建立流動性池/接受特定的代幣(「這個發行可以安全整合嗎?」)。
- 除錯份額/LP/託管的數學計算「對不起來」的問題(幾乎總是轉帳費錯誤)。
- 審查移動 SPL 代幣的 Anchor/原生程式,確保其 Token-2022 安全性。
- 編寫測試來證明你的整合能夠抵禦惡意發行。
如果使用者想要 創建 一個帶有擴充功能的代幣,那是發行方的工作——應參考核心的 token-2022 技能。
一段話的威脅模型
一個 Token-2022 發行可以帶有 擴充功能,這些功能會改變轉帳行為。作為整合者,你必須假設發行作者是惡意的。危險的擴充功能包括:轉帳費 會使入帳金額少於發送金額(破壞 1:1 份額數學運算);轉帳鉤子 會在每次轉帳時執行發行者控制的程式碼(重入、阻斷服務、帳戶注入);永久委託 可以隨時從 你的 金庫移動/燃燒代幣;預設帳戶狀態 = 凍結 會使你的新代幣帳戶無法使用;機密轉帳 會向你的會計系統隱藏真實餘額;可暫停 允許發行者凍結你的提款。預設為拒絕。
操作程序
- 先掃描。 識別發行上的每個擴充功能及其對整合者的影響。
→ scanning.md(可執行的
t22-scanCLI)和 extension-risk-matrix.md(每個擴充功能的意義)。 - 根據設定檔決定。 AMM、金庫、借貸和託管對不同擴充功能的容忍度不同。使用矩陣的判斷結果(
ALLOW/HANDLE/REJECT)。 - 強化程式。 根據你選擇支援的項目套用模式:
- 轉帳費 → transfer-fee-accounting.md
- 轉帳鉤子 → transfer-hook-reentrancy.md
- 永久委託/凍結 → permanent-delegate-and-freeze.md
- 在鏈上強制執行預設拒絕的白名單 → extension-allowlist-pattern.md
- 用測試證明。 編寫載入真實
spl_token_2022程式的 LiteSVM 測試,並斷言你的守衛成功阻擋了攻擊。→ testing.md - 引用來源/深入了解。 → resources.md
路由表
| 使用者面臨的狀況… | 請閱讀 |
|---|---|
| 「這個發行可以安全整合嗎?」/ 掃描一個代幣 | scanning.md、extension-risk-matrix.md |
| 份額/LP/託管數量錯誤,「費用吃掉我的存款」 | transfer-fee-accounting.md |
| 轉帳鉤子、重入攻擊、ExtraAccountMetaList、轉帳時的 CPI 呼叫 | transfer-hook-reentrancy.md |
| 永久委託、凍結權限、預設凍結、收回機制 | permanent-delegate-and-freeze.md |
| 「我該如何在程式中拒絕危險的發行?」 | extension-allowlist-pattern.md |
| 編寫/執行 Token-2022 邊界情況的測試 | testing.md |
| 有哪些擴充功能存在以及每種的風險程度 | extension-risk-matrix.md |
| 來源、審計、DEX 政策、進一步閱讀 | resources.md |
此技能包含的內容
| 成品 | 路徑 | 說明 |
|---|---|---|
| 掃描器 CLI | tools/t22-scan/ | t22-scan <mint> --profile=vault → 每個擴充功能的風險判斷結果 + 可用於 CI 的退出碼。已針對主網上的即時發行進行驗證。 |
| 守衛程式 | examples/guard/ | 一個真實的 Anchor 1.0 金庫:鏈上擴充功能白名單 + 基於增量測量的安全存款(含費用處理)+ 具重入意識的提款。 |
| 攻擊測試 | examples/guard/tests/ | 載入真實 spl_token_2022 程式的 LiteSVM 測試,證明陷阱的存在以及守衛如何阻止它。 |
指令與代理
| 觸發方式 | 功能 |
|---|---|
/scan-mint | 掃描一個發行地址並根據所選設定檔報告整合者風險。 |
/audit-t22-integration | 審查程式原始碼中與 Token-2022 整合相關的錯誤。 |
代理: token2022-integration-auditor | 產生一個專注的審查者,掃描已配置的發行並在程式中搜索 transfer 與 transfer_checked、信任金額的數學運算以及缺少擴充功能檢查等問題。 |
不可協商的規則(適用於每次整合)
- 預設拒絕。 拒絕任何你未明確處理的擴充功能。未知的 TLV = 拒絕。
- 永遠不要相信
amount參數 來計算入帳金額。測量收到的增量(reload()+ 餘額差額)或讀取費用設定;以收到的金額入帳。 - 始終使用
transfer_checked(包含發行地址和 decimals),切勿使用已棄用的transfer。 - 固定代幣程式。 設定
token::token_program/associated_token::token_program,這樣攻擊者就無法將經典代幣帳戶混入 Token-2022 的 CPI 呼叫中。 - 在使用時重新驗證,而不僅僅是在上市時——一個發行的轉帳鉤子程式和費用可能會改變。
- 用測試證明。 提供一個 LiteSVM 測試,該測試在沒有你的守衛時會失敗,在有守衛時則會通過。