智能合約
蓋蒂
智能合約是一種使用區塊鏈並充當由一組規則支持的數字合約的應用程序。在大多數司法管轄區,智能合約不被視為法律意義上的合約。它只是一個滿足形式化要求並運行在分佈式區塊鏈系統上的應用程序。智能合約的執行結果可能是雙方之間的資產交易所。智能合約確保交易透明、可追溯且不可更改。
智能合約不僅在金融領域而且在其他行業都有廣泛的用例。智能合約允許創建不需要各方之間先驗信任的通信協議。參與者可以放心,只有滿足其中規定的所有條件,合約才會被執行。此外,智能合約消除了對中介機構的要求,大大降低了進行交易的費用。
每個區塊鏈都可以使用自己的方式來實現智能合約。例如,Solidity 編程語言用於在以太坊網絡上創建智能合約。除了代碼,智能合約還包含兩個公鑰,一個由合約創建者提供,另一個是每個智能合約唯一的數字標識符。
智能合約不變性
由於智能合約在不可變的去中心化區塊鍊網絡框架內工作,因此不能為了非法獲利而偽造其結果。但不變性不僅是優勢,也是劣勢。例如,2016 年,網絡犯罪分子利用智能合約代碼中的漏洞攻擊了去中心化自治組織The DAO,並竊取了價值數百萬美元的以太坊。因為DAO 智能合約是不可變的,所以開發人員無法修補代碼。
結果,以太坊網絡決定將情況回滾到黑客攻擊的那一刻,並將資金返還給所有者。相應的分叉是當前以太坊區塊鏈的一部分。最初的區塊鏈被命名為Ethereum Classic,它沒有以任何方式對黑客做出反應,因為區塊鏈中的事件進程絕不能改變。
高度依賴程序員技能和錯誤傾向
據信,破解編寫良好的智能合約幾乎是不可能的,它們代表了數字世界中存儲文檔的最可靠方式。儘管如此,任何代碼都是由可能會犯錯誤的人類程序員編寫的。由於智能合約對所有區塊鏈用戶都是可見的,因此其可能存在的漏洞在整個網絡中也是可見的,並且由於不可變性,並不總是能夠消除它們。
在理想情況下,智能合約的開發應該只由經驗豐富的程序員進行,尤其是涉及敏感信息、個人數據或大筆資金時。實際上,相當一部分錯誤是由人為因素造成的。
引發漏洞的原因之一在於設計、開發和測試智能合約的複雜性。與簡單的智能合約相比,複雜的智能合約由於其複雜性往往更容易出錯。漏洞和錯誤可能導致資金被盜、資金被凍結,甚至智能合約被破壞。
長期已知的錯誤會導致許多漏洞:
1. 遞歸調用:智能合約在確認變化之前調用另一個外部合約。然而,在此之後,外部合約可能會以未經授權的方式遞歸地與初始智能合約進行交易,因為其餘額尚未更新。
2.溢出:智能合約執行算術計算,但結果超出了存儲限制。這可能導致金額計算不正確。
3. 搶占:設計不當的代碼包含有關即將進行的交易的信息,外部各方可以利用這些信息為自己謀取利益。
智能合約的效率
優化智能合約的性能是開發人員技能的一個指標。一些合約為了履行其功能,會產生一系列複雜的交易,而這些操作的佣金會變得很高。有效的合約可以顯著降低交易費用。
佣金問題與安全密切相關,因為從實際角度來看,資金永遠卡在合約中的情況與被盜的情況幾乎沒有區別。在這裡,金錢損失和脆弱性是由同一因素造成的——開發商的疏忽。
以太坊虛擬機
以太坊虛擬機(EVM) 充當中心化256 位“計算機”,其中所有事務均由每個網絡節點以同步方式在本地處理和存儲。由於EVM 能夠執行各種任意命令,因此很容易被利用。此漏洞有可能破壞智能合約的功能。此外,智能合約的代碼可能會使虛擬機過載並降低其性能,這與執行這些操作所收取的佣金不成比例。儘管正在進行研究以解決這個問題,但它仍然是一個重大問題。
智能合約安全審計
為了降低潛在風險,對智能合約進行安全審計已成為普遍現象。沒有單一的審計方法,每個審計公司都自行決定執行它。智能合約代碼執行的確定性使得安全測試可以在任何地方進行,支持起來極其簡單,也使得事件調查可靠且無可爭議。
審核員研究智能合約代碼,編寫報告並提交給項目經理。該報告包含有關錯誤的信息以及為解決性能和安全問題所做的工作。此外,報告通常包含建議、冗餘代碼示例以及對編碼錯誤的完整分析。
審計的很大一部分包括檢查合約是否存在漏洞。儘管有些問題只是表面上的,但許多錯誤只能藉助複雜的工具和策略來消除。例如,有缺陷的智能合約可能會與市場操縱一起受到攻擊。為了檢測這些問題,審計員進行滲透測試。在去中心化金融(DeFi) 生態系統和加密貨幣滑冰者中廣泛存在的智能合約的安全審計。正如質押平台RSTAKING 的加密貨幣專家所說,投資區塊鏈項目的決定可以部分基於檢查智能合約代碼的結果。
結論
毫無疑問,智能合約極大地影響了加密貨幣世界並徹底改變了區塊鏈技術。由於區塊鏈交易的永久性,智能合約代碼的安全性至關重要。區塊鏈技術使得事後返還資金和解決問題變得困難重重,因此最好提前識別潛在的漏洞。
資訊來源:由0x資訊編譯自FORBES。版權歸作者所有,未經許可,不得轉載
0X簡體中文版:應對智能合約的安全挑戰