探索 Solidity 1.0.0:智慧合約關鍵里程碑



即將發佈 0.9.0 和 1.0.0 升級,將推出幾項備受期待的增強功能。

作者:Adam Boudjemaa

導論

在廣泛分析諸如 Solidity Github 倉庫、 Solidity 發展路線圖、 Twitter 上的社群對話、活躍的 Pull Requests 和 Issues 等資訊後,本文深入探討了 Solidity 的未來將會走向何方。

這門領先的智慧合約編程語言即將發佈 0.9.0 和 1.0.0 升級,其中將推出幾項備受期待的增強功能。

本文旨在向讀者介紹 Solidity 的最新發展和改進,這些發展和改進基於社區的投入和正在進行的辯論。雖然提供的相關資訊尚無定論,但它揭示了潛在的技術進步方向。

1.革命性地將 require() 與 Custom Error 進行集成

當前方法(0.8.x):

探索 Solidity 1.0.0:智慧合約關鍵里程碑插图1

預期將在 0.9.0 或 1.0.0 出現:

探索 Solidity 1.0.0:智慧合約關鍵里程碑插图3

相比於使用大量的 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。

探索 Solidity 1.0.0:智慧合約關鍵里程碑插图5

7.原生集成重入保護

在版本 0.8.0 之前,SafeMath 庫是開發人員用於算術運算以避免溢出和下限溢位問題的常用工具。隨著 Solidity 0.8.0 的發佈,這些安全檢查被直接嵌入到語言中。

類似地,Solidity 版本 0.9.0 或 1.0.0 預計將原生集成重入保護。此功能旨在簡化實施安全協定以防止重入攻擊的過程。

你將會看到類似這樣的東西:

探索 Solidity 1.0.0:智慧合約關鍵里程碑插图7

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:智慧合約關鍵里程碑插图9

未來展望: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 繼續其開發之旅,實際的軌跡和功能集可能會發生變化。敬請關注這些對話和概念如何在不斷發展的智慧合約編程世界中實現。

聯系郵箱:0xniumao@gmail.com