ink! 是Parity 基於Rust 用來編寫Web Assembly (Wasm) 智能合約的一種編程語言,它剛剛推出了迄今為止最大的更新。 Polkadot 和Substrate 生態中的開發者可以使用ink! 為Wasm 虛擬機構建高效、高性能的智能合約和去中心化應用程序,它們是以太坊(EVM/Solidity) 智能合約的一種替代方案。

Substrate 是構建自定義的Polkadot 兼容區塊鏈以及“獨立”區塊鏈的框架,它包含構建一個典型區塊鏈所需的模塊化的組件,使開發者能夠更輕鬆、更快地構建區塊鏈。這些模塊化的組件被稱為模塊(pallets)。 Substrate 的模塊庫包括“合約”模塊,它允許開發者將基於Wasm 的智能合約功能構建到他們的區塊鏈中。 ink! 是Rust 編程語言的擴展,它允許開發者為使用合約模塊的區塊鏈編寫智能合約。

這是最新版本的ink!,重寫了ink! 2.0 的所有主要組件!在此期間,許多團隊在使用ink! 構建Wasm 智能合約,也感謝他們的貢獻和反饋,ink! 3.0 比以前的版本有了很大的發展。

除了發布了ink 3.0 版本,我們還改進了合約模塊(Contracts pallet)以提高平行鏈性能,並添加了一些新功能以提高跨合約調用和性能提升,使開發者更容易編寫更複雜的邏輯。最後,隨著`cargo-contract` 1.0 的發布,開發者使用的工具也發生了一些變化。

為什麼使用Rust 和Wasm?

在Parity,我們是Rust 的忠實粉絲,並用它編寫了Polkadot 的最初實現。 Rust 是一種進階且高效的編程語言,它優先考慮正確性並有助於防止軟件錯誤;同時它有一個強大的社區,並得到了Mozilla、谷歌、微軟和亞馬遜等大公司的支持。

使用Rust 作為ink! 的基礎為我們提供了嚴格的Rust 編譯器的正確性保證,它讓我們可以免費利用Rust 生態系統中發生的所有改進。這些改進包括從更好的編譯器優化到非常有用的第三方庫。在此處了解有關Rust 非常適合智能合約的更多信息。 https://paritytech.github.io/ink-docs/why-rust-for-smart-contracts

Wasm 是另一種在Polkadot 設計中發揮關鍵作用的技術,原因有幾個。 Wasm 快速、安全、輕量級、高性能且執行效率高,構建時盡可能接近原生代碼(Machine Code)。它可以在網絡瀏覽器中執行,從而促進為用戶體驗而設計的去中心化應用程序的創新和更廣泛的使用。 Wasm 已經有非常廣泛的使用,這點對我們有非常大的優勢,同時還能享有大公司的高水平使用,並且擁有龐大的開發者社區。這也使我們能夠獲得編譯器改進和整個生態工具的所有好處,而這些工具只會隨著時間的推移而增長。

Wasm 擴展了可以編寫智能合約的語言數量,包括Go、C/C++,當然還有Rust。它提供了所有好處,我們相信Wasm 代表了智能合約基礎設施和應用程序的未來,並且代表了對上一代系統的改進。

在此處了解有關Wasm 為何非常適合智能合約的更多信息。 https://paritytech.github.io/ink-docs/why-webassembly-for-smart-contracts

ink! 3.0

ink! 3.0 背後的主要思想是它的外觀和感覺就像Rust。 ink! 語法略有變化,以更好地從ink! 映射生成Rust 代碼。用戶看到的也就是由ink! 生成的內容。現在,語法與Rust 編程語言幾乎相同。這具有所有Rust 開發者都知道和喜愛的開箱即用的工具優勢—— 例如rust-analyzer 和Clippy。

除了感覺像Rust 之外,讓我們來看看ink! 3.0 最顯著的變化:

特徵支持(Trait Support ):ink! 3.0 最令人期待的功能之一是它的Rust trait 支持,最好的一個描述就是提供了更Rusty 的開發體驗。通過新的`#[ink::trait_definition]` 程序宏,現在可以定義你自己的特徵定義,然後可以通過ink! 智能合約實現。這允許為不同的具體實現定義共享的智能合約接口。這對定義社區定義的合約標準很有用。注意這個ink! trait 定義可以在任何地方定義,甚至在另一個crate 中!減少合約規模:較小的合約規模意味著更好的性能和更少的gas 成本。以前的ink! 生成的智能合約的Wasm 代碼量很大,這導致平行鏈交易吞吐量受到帶寬而不是計算複雜度的限制。在許多考慮減少智能合約大小的解決方案中,有一個是減少編譯合約的大小。委託調用:`delegate_call` 的添加允許合約將他們收到的調用轉發到另一個合約。一個用例是為智能合約實施代理升級模式。鏈擴展:此功能允許開發者從他們的合約中直接調用Substrate 模塊,從而使他們能夠利用Substrate 的豐富生態。

cargo-contract 1.0

與ink! 3.0 一起發布的還有`cargo-contract` 1.0。 `cargo-contract` 是一個方便的開發者工具,用於構建、測試和部署ink! 合約。此版本中的一些值得注意的更新包括:

用於與鏈上合約交互的新CLI 命令:上傳、實例化和調用!這意味著用戶不再需要點擊瀏覽器UI 來與鏈上的合約進行交互,他們現在也可以使用命令行。這也為編寫腳本和持續集成鋪平了道路。 ink! 智能合約的linting 規則:通過自動檢查源代碼中的程序和風格錯誤,ink! 開發者會收到有關常見錯誤的警告。未來我們會陸續構建ink! 合約的linting 規則集合!我們想做的是指導你降低gas 成本、減少合約足跡、正確的API 使用模式和指出安全漏洞的規則。

Substrate 合約模塊

合約模塊(Contracts pallet)是Substrate 用於Wasm 智能合約的執行環境。只要合約模塊API 被實施,它可以用任何編譯成Wasm 的編程語言執行智能合約。 ink! 是一種為Rust 執行此操作的語言。

先前版本的模塊使用狀態租金作為應對狀態膨脹的機制。在最新的迭代中,狀態租金被自動收取押金所取代。以前,合約需要確保始終有足夠的餘額來支付其存儲費用。否則,它將處於禁用狀態,直到有人將其恢復。這為合約編寫過程增加了許多額外的工作和考慮。

在“自動收取”的機制下,該費用由合約調用方自動支付,而不是由合約本身支付。合約的調用者向每個合約支付一筆押金,在這些合約中,由於執行調用而創建了新的存儲空間。同樣,調用者從調用刪除存儲的所有合約中獲得退款。

這個新系統完全消除了合約被設置為非活動狀態的可能性。但是,合約作者仍然希望盡可能少地使用存儲空間,並在不再需要存儲空間時創建移除存儲空間的方法,以降低使用合約的成本。

感謝ink! 社區

歷經多年和多次的發布,ink! 已經發展到看起來和感覺起來很像Rust 的目標。在這個階段,它具有Rust 程序員認可和需要進一步增強他們編寫、更新和推理複雜智能合約的能力的所有功能。雖然ink! 現在是一種綜合性語言,它仍然是一種正在開發的語言,最重要的是,它是一個以社區為中心的項目。

感謝ink! 社區的貢獻,ink! 已經發展成為一種滿足我們共同未來需求的語言。

關注未來發展

你還在等什麼?來看看ink! 發生了什麼和你喜歡ink! 的什麼地方!

對於有興趣了解構建Wasm 智能合約的更多信息的開發者,請查看2022 年5 月31 日由社區組織的首屆Wasm 智能合約會議。 https://wasm-conference.com/

定期更新:https://github.com/paritytech/ink/blob/master/MONTHLY_UPDATE.mdink! 存儲庫:https://github.com/paritytech/inkink! 入門教程:https://docs.substrate.io /tutorials/v3/ink-workshop/pt1ink! 進階文檔:https://paritytech.github.io/ink-docsink! 視頻:https://youtu.be/wbai4Do_TVY, https://youtu.be/NrG3co6UWEg ?t=7102

在substrate.dev 了解Substrate 生態系統,訂閱Substrate 開發者郵件https://substrate.io/ecosystem/connect/newsletter/,加入Substrate 每週的社區電話https://substrate.io/ecosystem/resources/seminar/ 。

原文鏈接:https://www.parity.io/blog/ink-3-0-paritys-rust-based-language-gets-a-major-update

翻譯:PolkaWorld 社區

PolkaWorld Telegram 群:t.me/polkaworldPolkaWorld Youtube 頻道:https://www.youtube.com/c/PolkaWorldPolkaWorld Twitter:@polkaworld_orgPolkaWorld 網站:https://polkaworld.pro/