Parity 發(fā)布 ink! 3.0:基于 Rust 的 WASM 智能合約語(yǔ)言的重大更新!
加入 PolkaWorld 社區(qū),共建 Web 3.0!

ink! 是 Parity 基于 Rust 用來編寫 Web Assembly (Wasm) 智能合約的一種編程語(yǔ)言,它剛剛推出了迄今為止最大的更新。Polkadot 和 Substrate 生態(tài)中的開發(fā)者可以使用 ink! 為 Wasm 虛擬機(jī)構(gòu)建高效、高性能的智能合約和去中心化應(yīng)用程序,它們是以太坊 (EVM/Solidity) 智能合約的一種替代方案。
Substrate 是構(gòu)建自定義的 Polkadot 兼容區(qū)塊鏈以及“獨(dú)立”區(qū)塊鏈的框架,它包含構(gòu)建一個(gè)典型區(qū)塊鏈所需的模塊化的組件,使開發(fā)者能夠更輕松、更快地構(gòu)建區(qū)塊鏈。這些模塊化的組件被稱為模塊(pallets)。Substrate 的模塊庫(kù)包括“合約”模塊,它允許開發(fā)者將基于 Wasm 的智能合約功能構(gòu)建到他們的區(qū)塊鏈中。ink! 是 Rust 編程語(yǔ)言的擴(kuò)展,它允許開發(fā)者為使用合約模塊的區(qū)塊鏈編寫智能合約。
這是最新版本的 ink!,重寫了 ink! 2.0 的所有主要組件!在此期間,許多團(tuán)隊(duì)在使用 ink! 構(gòu)建 Wasm 智能合約,也感謝他們的貢獻(xiàn)和反饋,ink! 3.0 比以前的版本有了很大的發(fā)展。
除了發(fā)布了 ink 3.0 版本,我們還改進(jìn)了合約模塊(Contracts pallet)以提高平行鏈性能,并添加了一些新功能以提高跨合約調(diào)用和性能提升,使開發(fā)者更容易編寫更復(fù)雜的邏輯。最后,隨著 `cargo-contract` 1.0 的發(fā)布,開發(fā)者使用的工具也發(fā)生了一些變化。
為什么使用 Rust 和 Wasm?
在 Parity,我們是 Rust 的忠實(shí)粉絲,并用它編寫了 Polkadot 的最初實(shí)現(xiàn)。Rust 是一種進(jìn)階且高效的編程語(yǔ)言,它優(yōu)先考慮正確性并有助于防止軟件錯(cuò)誤;同時(shí)它有一個(gè)強(qiáng)大的社區(qū),并得到了 Mozilla、谷歌、微軟和亞馬遜等大公司的支持。
使用 Rust 作為 ink! 的基礎(chǔ)為我們提供了嚴(yán)格的 Rust 編譯器的正確性保證,它讓我們可以免費(fèi)利用 Rust 生態(tài)系統(tǒng)中發(fā)生的所有改進(jìn)。這些改進(jìn)包括從更好的編譯器優(yōu)化到非常有用的第三方庫(kù)。在此處了解有關(guān) Rust 非常適合智能合約的更多信息。https://paritytech.github.io/ink-docs/why-rust-for-smart-contracts
Wasm 是另一種在 Polkadot 設(shè)計(jì)中發(fā)揮關(guān)鍵作用的技術(shù),原因有幾個(gè)。Wasm 快速、安全、輕量級(jí)、高性能且執(zhí)行效率高,構(gòu)建時(shí)盡可能接近原生代碼(Machine Code)。它可以在網(wǎng)絡(luò)瀏覽器中執(zhí)行,從而促進(jìn)為用戶體驗(yàn)而設(shè)計(jì)的去中心化應(yīng)用程序的創(chuàng)新和更廣泛的使用。Wasm 已經(jīng)有非常廣泛的使用,這點(diǎn)對(duì)我們有非常大的優(yōu)勢(shì),同時(shí)還能享有大公司的高水平使用,并且擁有龐大的開發(fā)者社區(qū)。這也使我們能夠獲得編譯器改進(jìn)和整個(gè)生態(tài)工具的所有好處,而這些工具只會(huì)隨著時(shí)間的推移而增長(zhǎng)。
Wasm 擴(kuò)展了可以編寫智能合約的語(yǔ)言數(shù)量,包括 Go、C/C++,當(dāng)然還有 Rust。它提供了所有好處,我們相信 Wasm 代表了智能合約基礎(chǔ)設(shè)施和應(yīng)用程序的未來,并且代表了對(duì)上一代系統(tǒng)的改進(jìn)。
在此處了解有關(guān) Wasm 為何非常適合智能合約的更多信息。https://paritytech.github.io/ink-docs/why-webassembly-for-smart-contracts
ink! 3.0
ink! 3.0 背后的主要思想是它的外觀和感覺就像 Rust。ink! 語(yǔ)法略有變化,以更好地從 ink! 映射生成 Rust 代碼。用戶看到的也就是由 ink! 生成的內(nèi)容。現(xiàn)在,語(yǔ)法與 Rust 編程語(yǔ)言幾乎相同。這具有所有 Rust 開發(fā)者都知道和喜愛的開箱即用的工具優(yōu)勢(shì) —— 例如 rust-analyzer 和 Clippy。
除了感覺像 Rust 之外,讓我們來看看 ink! 3.0 最顯著的變化:
特征支持(Trait Support ):ink! 3.0 最令人期待的功能之一是它的 Rust trait 支持,最好的一個(gè)描述就是提供了更 Rusty 的開發(fā)體驗(yàn)。通過新的 `#[ink::trait_definition]` 程序宏,現(xiàn)在可以定義你自己的特征定義,然后可以通過 ink! 智能合約實(shí)現(xiàn)。這允許為不同的具體實(shí)現(xiàn)定義共享的智能合約接口。這對(duì)定義社區(qū)定義的合約標(biāo)準(zhǔn)很有用。注意這個(gè) ink! trait 定義可以在任何地方定義,甚至在另一個(gè) crate 中!
減少合約規(guī)模:較小的合約規(guī)模意味著更好的性能和更少的 gas 成本。以前的 ink! 生成的智能合約的 Wasm 代碼量很大,這導(dǎo)致平行鏈交易吞吐量受到帶寬而不是計(jì)算復(fù)雜度的限制。在許多考慮減少智能合約大小的解決方案中,有一個(gè)是減少編譯合約的大小。
委托調(diào)用:`delegate_call` 的添加允許合約將他們收到的調(diào)用轉(zhuǎn)發(fā)到另一個(gè)合約。一個(gè)用例是為智能合約實(shí)施代理升級(jí)模式。
鏈擴(kuò)展:此功能允許開發(fā)者從他們的合約中直接調(diào)用 Substrate 模塊,從而使他們能夠利用 Substrate 的豐富生態(tài)。
cargo-contract 1.0
與 ink! 3.0 一起發(fā)布的還有 `cargo-contract` 1.0。`cargo-contract` 是一個(gè)方便的開發(fā)者工具,用于構(gòu)建、測(cè)試和部署 ink! 合約。此版本中的一些值得注意的更新包括:
用于與鏈上合約交互的新 CLI 命令:上傳、實(shí)例化和調(diào)用!這意味著用戶不再需要點(diǎn)擊瀏覽器 UI 來與鏈上的合約進(jìn)行交互,他們現(xiàn)在也可以使用命令行。這也為編寫腳本和持續(xù)集成鋪平了道路。
ink! 智能合約的 linting 規(guī)則:通過自動(dòng)檢查源代碼中的程序和風(fēng)格錯(cuò)誤,ink! 開發(fā)者會(huì)收到有關(guān)常見錯(cuò)誤的警告。未來我們會(huì)陸續(xù)構(gòu)建 ink! 合約的 linting 規(guī)則集合!我們想做的是指導(dǎo)你降低 gas 成本、減少合約足跡、正確的 API 使用模式和指出安全漏洞的規(guī)則。
Substrate 合約模塊
合約模塊(Contracts pallet)是 Substrate 用于 Wasm 智能合約的執(zhí)行環(huán)境。只要合約模塊 API 被實(shí)施,它可以用任何編譯成 Wasm 的編程語(yǔ)言執(zhí)行智能合約。ink! 是一種為 Rust 執(zhí)行此操作的語(yǔ)言。
先前版本的模塊使用狀態(tài)租金作為應(yīng)對(duì)狀態(tài)膨脹的機(jī)制。在最新的迭代中,狀態(tài)租金被自動(dòng)收取押金所取代。以前,合約需要確保始終有足夠的余額來支付其存儲(chǔ)費(fèi)用。否則,它將處于禁用狀態(tài),直到有人將其恢復(fù)。這為合約編寫過程增加了許多額外的工作和考慮。
在“自動(dòng)收取”的機(jī)制下,該費(fèi)用由合約調(diào)用方自動(dòng)支付,而不是由合約本身支付。合約的調(diào)用者向每個(gè)合約支付一筆押金,在這些合約中,由于執(zhí)行調(diào)用而創(chuàng)建了新的存儲(chǔ)空間。同樣,調(diào)用者從調(diào)用刪除存儲(chǔ)的所有合約中獲得退款。
這個(gè)新系統(tǒng)完全消除了合約被設(shè)置為非活動(dòng)狀態(tài)的可能性。但是,合約作者仍然希望盡可能少地使用存儲(chǔ)空間,并在不再需要存儲(chǔ)空間時(shí)創(chuàng)建移除存儲(chǔ)空間的方法,以降低使用合約的成本。
感謝 ink! 社區(qū)
歷經(jīng)多年和多次的發(fā)布,ink! 已經(jīng)發(fā)展到看起來和感覺起來很像 Rust 的目標(biāo)。在這個(gè)階段,它具有 Rust 程序員認(rèn)可和需要進(jìn)一步增強(qiáng)他們編寫、更新和推理復(fù)雜智能合約的能力的所有功能。雖然 ink! 現(xiàn)在是一種綜合性語(yǔ)言,它仍然是一種正在開發(fā)的語(yǔ)言,最重要的是,它是一個(gè)以社區(qū)為中心的項(xiàng)目。
感謝 ink! 社區(qū)的貢獻(xiàn),ink! 已經(jīng)發(fā)展成為一種滿足我們共同未來需求的語(yǔ)言。
關(guān)注未來發(fā)展
你還在等什么?來看看 ink! 發(fā)生了什么和你喜歡 ink! 的什么地方!
對(duì)于有興趣了解構(gòu)建 Wasm 智能合約的更多信息的開發(fā)者,請(qǐng)查看 2022 年 5 月 31 日由社區(qū)組織的首屆 Wasm 智能合約會(huì)議。https://wasm-conference.com/
定期更新:https://github.com/paritytech/ink/blob/master/MONTHLY_UPDATE.md
ink! 存儲(chǔ)庫(kù):https://github.com/paritytech/ink
ink! 入門教程:https://docs.substrate.io/tutorials/v3/ink-workshop/pt1
ink! 進(jìn)階文檔:https://paritytech.github.io/ink-docs
ink! 視頻:https://youtu.be/wbai4Do_TVY, https://youtu.be/NrG3co6UWEg?t=7102
在 substrate.dev 了解 Substrate 生態(tài)系統(tǒng),訂閱 Substrate 開發(fā)者郵件 https://substrate.io/ecosystem/connect/newsletter/,加入 Substrate 每周的社區(qū)電話 https://substrate.io/ecosystem/resources/seminar/。
原文鏈接:https://www.parity.io/blog/ink-3-0-paritys-rust-based-language-gets-a-major-update
翻譯:PolkaWorld 社區(qū)
PolkaWorld Telegram 群:
t.me/polkaworld
PolkaWorld Youtube 頻道:
https://www.youtube.com/c/PolkaWorld
PolkaWorld Twitter:
@polkaworld_org
PolkaWorld 網(wǎng)站:
https://polkaworld.pro/

更多內(nèi)容
MOVR 上線 Karura,KAR 通過 XCM 已集成至 Moonriver
Last Call! 來 Polkadot Decoded 與所有建設(shè)者見面!
關(guān)注 PolkaWorld
發(fā)現(xiàn)?Web 3.0 時(shí)代新機(jī)遇
點(diǎn)個(gè) “在看” 再走吧!
