測試 (Testing)
Move 的設計初衷是預設安全 —— 它的型別系統和內建的保護機制防止了困擾其他智能合約語言的整類錯誤,例如重入攻擊 (reentrancy)、算術溢位 (arithmetic overflow) 和未經授權的資產存取。但語言的安全性並不等同於程式的正確性。型別系統可以確保你的程式碼不違反 Move 的規則,但它無法驗證你的轉帳邏輯是否將資金發送給了正確的接收者,你的拍賣是否在正確的時間結束,或者你的存取控制是否符合預期的策略。這些是你設計上的屬性,而非語言本身 —— 它們只能透過測試來驗證。
在鏈上程式設計中,出錯的代價特別高昂:
- 財務風險:處理資產的程式碼中的錯誤可能導致資金永久遺失。轉帳邏輯或存取控制中一個被忽略的邊緣案例即可能被利用,造成不可逆轉的損失。
- 不可變性:一旦部署,智能合約程式碼通常不容易修改,即使具備升級能力,舊版本的程式碼也永遠存在。部署前的徹底測試是你防禦漏洞的主要手段。
- 對抗性環境:已發布的 Move 套件實際上是開源的 —— 任何人都可以閱讀和反編譯鏈上的字節碼 (bytecode)。這意味著惡意行為者可以詳細研究你的程式碼,尋找可利用的缺陷。你的程式碼不僅必須處理預期的輸入,還必須應對蓄意破壞它的嘗試。
- 可組合性風險:Move 模組與其他鏈上程式碼互動。測試必須驗證你的程式碼不僅在隔離環境下行為正確,而且在與其他套件組合時也能正常運作。
鑑於這些風險,全面的測試不是可選項 —— 對於任何處理資產或實作業務邏輯的 Move 應用程式來說,它是必不可少的。