作者: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消息來傳送資產。