Substrate技術月報| 2021.06 - Substrate 技術更新速遞

Substrate技術月報2021年6月更新摘要:

  • 重要提交和發布

    • GRANDPA gossip機制優化,提升公平性並減少網絡消息
    • 存儲API新增刪除元素數量限制,分批處理大數據集
    • WASM內存限制提升至32MB,解決staking模塊內存問題
    • 新增try-runtime的execute-block子命令,便於區塊執行測試
    • 引入Fast Sync模式,大幅提升區塊同步速度
    • 新增NFT標準接口,unique pallet實現相關功能
  • 設計方案討論

    • 討論存儲單元前綴處理方案,最終採用自定義存儲別名
    • 考慮集成Wasmer到Substrate沙盒環境,未來可能提供更多WASM執行選項
  • 文檔和資料

    • 新增Transaction Pool技術文檔,解析設計原理
    • 發布多個教學視頻,包括存儲遷移測試和WASM智能合約介紹
  • 技術生態和社區

    • Polkadot Buildathon India活動介紹
    • Web3基金會贊助開發零知識證明plonk模塊
    • 第二屆Polkadot黑客松即將開始
  • 跨鏈協議

    • 發布Polkadot鏈選擇指南文檔
    • 實現爭議處理子系統,處理平行鏈區塊驗證爭議
    • Westend網絡添加Westmint為受信任Teleport平行鏈

這些更新涵蓋了Substrate核心技術改進、生態發展和跨鏈協議進展,為開發者提供了更強大的工具和更豐富的資源。

總結

作者:Kaichao


Hi,所有關注Substrate 技術的開發者們~


Substrate 技術與生態的6月最新動態來啦,本篇為Substrate 第九次技術月報(2021年06月),enjoy!




01. 重要提交和發布

GRANDPA: 加強了grandpa gossip的限制-可以減少當前網絡中的相關消息,並且讓gossip的機制更加的公平。

將SelectChain從同步變成異步接口- 從而在接口實現中可以異步地讀取一些子系統的信息。

存儲項的remove_all等API 添加了刪除元素數量的限制- 當集合類元素數量很多時,可以通過給定這一限制,分批次刪除數據,影響的API 有remove_all, remove_prefix, clear_prefix, kill_prefix。
增大wasm字節碼可獲取的內存大小限制至32MB - Substrate實現了freeing-bump 內存分配器,可以動態的在一定範圍分配內存,最新修改為32MB,用以解決staking模塊佔用內存過大的問題。
強制FRAME v2中可調用函數需要聲明為pub - 從而更加符合rust語法。
為編譯後二進制包提供的try-runtime 命令添加了execute-block子命令- 用戶可以使用此命令在上一個區塊的runtime 狀態的基礎上執行提供的區塊。
允許#[pallet::constant]宏作用於有多個接口約束的關聯類型- 即支持以下語法,
#[pallet::constant]
type U: Get<u32> + From<u16>;

內置的balances模塊新增transfer_all 可調用函數- 用來將所有的可用餘額轉出至另外一個賬戶。

允許對存儲項的前綴即prefix 重命名- 默認使用的存儲項定義時的字符串字面量,新標籤#[pallet::storage_prefix = "CustomName"]可以將prefix自定義。

抽象了NFT所需的一系列接口,unique pallet實現了這些接口- 包括Inspect 接口可以讀取NFT的屬性信息,Mutate接口提供了鑄造、銷毀、設置NFT屬性等的寫操作。

wasm的執行引擎wasmtime升級至0.27 -新版的wasmtime使用了新一代代碼生成後端,效率有很大的提升,也修復了一些bug。

在chain spec 中引入一個新的字段code_substitute - 可以此字段的值替換鏈上的wasm,通常是鏈上wasm運行出現問題之後的臨時解決方案。

同步區塊時引入了Fast Sync 模式-可以極大加快區塊同步的速度,之前需要下載和驗證每一個區塊,使用Fast Sync之後,不再需要執行每個區塊的驗證,只需要額外下載最新鏈上狀態的證明。

將pallet::hooks和pallet::call宏所對應的部分變為可選的。

定義了NamedReservableCurrency接口,並在balances模塊實現了此接口- 可以在對資產進行reserve時給定名字,更好的區分是哪個模塊對資產進行的reserve操作。

為支持Storage Chain添加了Runtime的模塊transaction-storage - 每個交易會被轉換成trie包含了256個字節,transaction-storage模塊保存了這些trie的root,並且隨機選擇上一個區塊的一筆交易對應的字節進行驗證。


02. 設計方案討論

實現了新的存儲API CountedStorageMap - 它在存儲鍵值對的同時,可以記錄當前map中元素的個數。

討論:使用索引序列處理存儲單元的前綴- 存儲項的命名位於代碼中,但是和數據庫所存儲的鍵密切相關,目前在代碼重構時很難去改變存儲項名稱,因為會影響數據庫的存儲,使用索引可以減輕這一問題,不過維護索引也很麻煩,目前的結果是引入自定義存儲別名,而不是使用索引。

將Wasmer集成到Substrate沙盒環境- 目前Substrate的runtime執行支持wasmi和wasmtime,wasmtime執行速度更快,但是只支持可信代碼即runtime,鑑於安全,Substrate的ink智能合約還是使用解釋執行的wasmi,引入wasmer這種更適合區塊鏈執行環境的編譯和執行工具,可以在未來有更多的選項,並通過實際的測試選擇更高效的wasm執行方式。



  03. 文檔和資料

Transaction Pool 技術文檔- 涵蓋了Substrate交易池的作用、設計原理和數據結構的解析。

視頻:使用try-runtime測試存儲遷移和runtime升級。

視頻:Substrate for Solidity Developers - An Introduction。

視頻:WASM Smart Contracts 介紹。

刪除Polkadot runtime裡的randomness collective flip模塊- 此PR詳細的列出瞭如何在刪除模塊的同時進行存儲的清理。


04. 技術生態和社區

Polkadot Buildathon India介紹。

Web3 Open Grands 贊助開發Zeroknowledge plonk 模塊。

Polkadot Hackathon 第二屆(夏季)黑客鬆比賽報名倒計時1天!



05. 跨鏈協議

Polkadot開髮指南文檔:Chain Selection - 總結了fork-choice和chain selection的設計原理、實現描述。

實現了Polkadot協議中的爭議處理子系統- 在爭議出現時,允許驗證人恢復平行鏈候選區塊數據,驗證候選區塊,並對爭議給出投票。

向Westend添加Westmint為受信任的Teleport平行鏈- 當兩條鏈彼此信任對方的runtime邏輯時,可以添加對方為允許Teleport的源,進而可以通過xcm的TeleportAssets消息來傳送資產。


分享至:

作者:Web3 Explorer 

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:Web3 Explorer 如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
2021-11-09 11:50
2021-11-09 11:36
2021-11-09 11:13
2021-11-09 09:54
2021-11-09 09:35
2021-11-09 09:09

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读