對智能合約進行形式化驗證可避免它們出現錯誤、漏洞和其他不利的情況。在這個過程中,人類專家會將智能合約的邏輯轉換為數學語句,然后通過自動化流程對照合約預期行為的模型檢查實際邏輯。將形式化驗證和人工審計相結合,我們就可以對智能合約的安全性進行全面評估。
簡介
智能合約是部署在區塊鏈上的計算機程序,在滿足某些條件時會自動運行。智能合約可能非常簡單,也可能極其復雜,可以持有價值數百萬甚至數十億美元的資產。
智能合約代碼如果有安全漏洞,就可能造成毀滅性后果,比如被不法分子盜竊其持有的所有資產。2021年,由于智能合約中的一個拼寫錯誤,自動做市商(AMM)Uranium Finance被盜取了5,000萬美元。
同樣在2021年,由于單個代碼錯誤,Compound Finance錯誤發放了8000萬美元的獎勵。2022年,因智能合約出現一個錯誤,Wormhole Bridge被盜走3.2億美元。
因此,一開始就把智能合約程序弄對很重要。智能合約采用開源模式,這意味著一旦合約部署后,代碼就會公開。如果黑客發現其中的錯誤,就可以立即加以利用。此外,隨著時間的推移修補安全漏洞的常規操作派不上用場,因為智能合約的代碼在部署后通常無法修改。
智能合約驗證是如何運作的?
智能合約的形式化驗證是通過將智能合約的邏輯和預期行為呈現為數學語句來實現的。隨后,審計師會使用自動化工具檢查這些語句是否正確。
該過程涉及:
用正式語言定義合約的規范和預期的特性。
將合約的代碼轉換為形式化陳述,例如數學模型或邏輯。
使用自動化定理證明或模型檢測來驗證合約的規范和特性。
重復驗證過程,以發現并修復任何錯誤或與預期特性的偏差。
為什么智能合約驗證很重要
通過運用數學推理,有助于確保經過形式化驗證的智能合約避免出現錯誤、漏洞和其他不利的情況。驗證也有助于增加對合約的信賴和信心,因為其特性已經過了嚴格檢驗,正確可靠。
以下這些示例大致說明了智能合約驗證如何幫助防止重大財務損失和其他災難性后果。
Uniswap
Uniswap是一家著名的AMM。Uniswap V1智能合約在開發過程中,進行了形式化驗證。在發布前,這項形式化驗證發現并修復了一些舍入誤差,避免了Uniswap V1的資金被吸干殆盡。
Balancer
Balancer V2也是一個經過驗證的AMM。形式化驗證發現并修復了智能合約中閃電貸款功能的費用計算錯誤,該錯誤會使交易平臺很容易遭受盜竊。
SafeMoon
SafeMoon V1在部署后,通過形式化驗證發現了一個極其微小的錯誤,如果該錯誤沒被發現,合約所有人如果在放棄所有權之前進行了某些操作,那合約所有人在放棄之后有可能重新獲得該合約。
大多數對SafeMoon V1分叉的人工審計都遺漏了這個錯誤,因為需要分析程序變量值的特定組合才能發現這個錯誤。人類很容易錯過這個問題,但機器卻能及時地捕捉到它。
形式化驗證和人工審計如何配合發揮作用
形式化驗證提供了一種系統化、自動化的辦法,來根據合約的預期特性檢查合約的邏輯和行為。這樣可以更輕松地識別和修復任何潛在的錯誤或漏洞。這對于人工檢查難以發現的復雜、細微的問題特別有用。
人工審計則包括專家對合約的代碼、設計和部署進行審查。審計師會利用自己的經驗和專業知識,來識別安全風險并評估合約的整體安全狀況。他們還可以確認形式化驗證過程是否正確執行,并檢查是否存在自動化工具可能無法檢測到的任何問題。
將形式化驗證和人工審計相結合,我們就可以對智能合約的安全性進行全面評估。這可以提高發現和修復任何漏洞的幾率。這樣一來,我們就相當于采用了一種結合人類和機器各自專長的深度防御安全措施。
結語
為了確保智能合約的安全性,必須將形式化驗證和人工審計相結合,從而確保對智能合約的安全態勢進行全面而徹底的評估。
雖然形式化驗證對資源消耗較高,但對于具有高價值或高風險因素的合約來說,這是一項值得的投資。畢竟歸根結底,安全重于泰山,一定要優先考慮安全性并確保智能合約遠離錯誤、漏洞和不利的意外行為。