作者:Adam Boudjemaa
編譯:懷老師,武漢大學Web3 俱樂部投研部部長
導論
在廣泛分析諸如Solidity Github 倉庫、 Solidity 發展路線圖、 Twitter 上的社群對話、活躍的Pull Requests 和Issues 等資訊後,本文深入探討了Solidity 的未來將會走向何方。
這門領先的智慧合約程式語言即將發布0.9.0 和1.0.0 升級,其中將推出幾項備受期待的增強功能。
本文旨在向讀者介紹Solidity 的最新發展和改進,這些發展和改進基於社區的投入和正在進行的辯論。雖然提供的相關資訊尚無定論,但它揭示了潛在的技術進步方向。
1. 革命性地將require() 與Custom Error 進行集成
當前方法(0.8.x):
預期將在0.9.0 或1.0.0 出現:
相較於使用大量的if 條件用字串資訊或custom error 拋出錯誤,將require() 和custom error 結合起來使用將使程式更加清晰並節省gas。
2. 內部表示(IR)最優化:釋放效率
Solidity 中的內部表示(IR)流程在將智慧合約原始碼轉換為以太坊虛擬機器(EVM)的可執行指令方面發揮關鍵作用。
內部表示令複雜的程式碼簡潔化與標準化,使得將程式碼轉換為機器語言的過程更有效率。 Solidity 即將推出的改進0.9.0 旨在使這種編譯過程更快、更有效率,最終降低成本並提高開發人員的生產力。
3. 增強錯誤處理:澄清和簡化程式碼
預計未來的更新將增強Solidity 中的錯誤處理,從而導致更直接的錯誤訊息和更輕鬆的偵錯。
這種增強對於處理複雜合約的開發人員特別有用,可以節省時間並最大限度地減少潛在錯誤。
4. 定點數算數:高精度與高效能
【譯者註:定點數是與浮點數相對應的計算機用來表示小數的資料類型,其整數位與小數位長度均為定值, 因此比浮點數更安全。目前的Solidity 並沒有內建任何表示小數的資料類型,開發人員常常需要將原始資料乘以一個很大的數來手動預留小數位,並在之後的運算中時刻留意小數點問題,相當麻煩。 】
現階段,諸如ABDKMath64x64 和DSMath 的外部函式庫都以Solidity 實現了定點數。
0.9.0 版本的更新預計將整合原生的定點數運算,不再需要外部函式庫。這將使小數計算更加簡化。
5. EVM 物件格式(EOF):建構智慧合約字節碼
Solidity 即將到來的EOF 升級準備為智慧合約引入結構化的和版本控制的字節碼。
這項改進有望使未來的合約更新升級更加容易實現,保持向後相容性,並在編譯階段實現更有效的分析。
雖然這不會改變智能合約開發人員的直接編碼體驗,但編譯器的輸出將會更省gas。
6. 瞬態儲存:暫時且有效率的資料處理
Solidity 的新功能,瞬態存儲,提出了一種在合約執行期間臨時保存數據而不將其永久記錄在區塊鏈上的方法。這種方法預計在gas 消耗方面更有效率。
類似以下程式碼的瞬態儲存很有可能出現在Solidity 0.9.0 或Solidity 1.0.0。
7. 原生整合重入保護
在版本0.8.0 之前,SafeMath 函式庫是開發人員用於算術運算以避免溢位和下限溢位問題的常用工具。隨著Solidity 0.8.0 的發布,這些安全檢查直接嵌入語言中。
類似地,Solidity 版本0.9.0 或1.0.0 預計將原生整合重入保護。此功能旨在簡化實施安全協定以防止重入攻擊的過程。
你將會看到類似這樣的東西:
8. 重構繼承與儲存(Storage)佈局
在Solidity 中,繼承可以創建一個新合約,該合約採用現有合約的屬性和功能。計劃中的更新旨在改善繼承和儲存佈局的線性化,從而增強合約架構的可預測性和組織性。這可以提高儲存使用效率,減少多繼承場景中的混亂。
例如,一個繼承自ParentA 和ParentB 的合約Child 將會有最優化的存儲佈局和連續的變數存儲,降低存儲操作的花費。
9. 增強的編譯標誌和設定選項
Solidity 的開發包括擴展編譯標誌和配置設定的範圍,為開發人員提供對編譯過程的高度控制。這些增強可能會導致更客製化的合約部署,對gas optimization、安全檢查和調試功能等方面進行精細控制。
新的編譯標誌可以允許開發人員切換特定的最佳化或安全性檢查:
例如,一個新的編譯標誌–enable-loop-optimization 將會專注於最佳化循環來提高gas efficiency ,另一個新的編譯標誌–strict-security-checks 將會在編譯過程中引入嚴苛的安全分析
10. 改進的調試工具和錯誤訊息
強化後的調試工具具有更翔實的錯誤訊息,可以顯著簡化開發過程,尤其是對於複雜的合約結構。改進的錯誤訊息可以更促進開發人員深入理解程式碼中的問題,而高階偵錯工具可以幫助開發人員更有效地發現和修復問題。
11. 支援進階資料型別和結構
在Solidity 中引入複雜的資料類型和結構可以啟發新的合約設計和功能可能性。這可能包括支援更複雜的數字類型、增強的資料結構或改進處理合約中大型資料集的方法。
Solidity 可能會引入一種新的資料結構,如TreeMap,它以排序的方式組織數據,從而實現高效檢索。這可能在需要對資料進行排序或排序的合約中很有用,例如在投票系統中。 【譯者註:類似紅黑樹。 】另一個進步可能是支援更複雜的數字類型,如定點數,可以直接在合約中進行精確的數學運算。
12. 引入泛型和模板
Solidity 中的泛型和範本將使得更具適應性和可重複使用性的程式碼成為可能。例如,可以建立一個泛型函數來以標準化的方式處理不同類型的資產(如ERC20 代幣、 NFT 等),而無需為每種特定的資產類型重寫函數。這將改進合約設計方式和開發效率,因為單一函數可以應用於各種場景。
未來展望:Solidity 1.0.0 之路
在諸如Github 、 Twitter 、 Ethresearch 和Reddit 的各種平台上,Solidity 社群內部關於0.9.0 版本發展規劃的討論如火如荼。
一個焦點性的爭論正在揭曉:
是直接謹慎地過渡到Solidity 1.0.0 以宣告這門語言的完全成熟,還是首先透過0.9.0 版本逐漸地進步到更高級的版本?
受社群回饋和創意想法影響,Solidity 1.0.0 的預期首次亮相可能與以太坊的重大更新保持一致,反映了整個生態系統的成長和穩定。
1. 類型系統的演進:提高靈活性和安全性。預計會有一個升級類型的系統,從Haskell 或Scala 等函數式程式語言中汲取靈感。這種演進旨在增合約開發的安全性和靈活性。
2. 整合原生預言機支援:簡化外部資料互動。計劃包括在Solidity 中整合對去中心化預言機的內建支持, 促進與外部資料來源的更安全和直接的互動。
3. 改進狀態管理:完善區塊鏈互動。狀態管理能力的增強正在討論中,可能會引入狀態通道或側鏈等元素作為內建結構,旨在優化區塊鏈上的交互並降低gas 費用。
4. 合約設計中的模組化方法:提高重用性。人們正在設想向模組化合約架構的轉變,允許使用可替換的組件。這可以顯著簡化開發過程並提高程式碼的可運維性。
5. 整合形式化驗證工具:確保合約可靠性。人們期望將形式化驗證工具直接整合到Solidity 中,這項措施旨在確保合約符合特定的標準和行為,從而降低錯誤和漏洞的可能性。
6. 建立跨鏈能力:實現跨區塊鏈的互通性。未來的更新可能會引入原生的跨鏈相容性功能,從而允許Solidity 合約在各種區塊鏈協議中順利運行。
7. 實施進階隱私措施:增強資料安全。人們正計劃將高階隱私工具(如零知識證明或同態加密)直接整合到語言中,旨在加強資料安全和使用者隱私。
8. 抗量子密碼學:為未來的挑戰做準備。鑑於新興的量子運算能力,人們正在考慮實施抗量子加密方法以保護以太坊合約免受未來潛在的威脅。
結論
在探索Solidity 的潛在路徑時,本文將社群見解和當前發展與社群預測結合,讓您對主題有一個全面的理解。雖然我們已經深入研究了0.9.0 和1.0.0 版本的可能性,但隨著Solidity 繼續其開發之旅,實際的軌跡和功能集可能會發生變化。請關注這些對話和概念如何在不斷發展的智能合約程式設計世界中實現。