學習Substrate的路上,你原本可以少走很多彎路!


Parity 科技公司研發的 Substrate 框架,讓我們擁有了一個真正意義上的完整的區塊鏈開發框架,可以幾乎不受限制的快速的開發出一個完整、高性能、安全的區塊鏈項目。

Substrate 實現了一個在功能性上可以與以太坊相比,完整的區塊鏈。所以基於 Substrate 開發,擁有着幾乎所有直接分叉以太坊項目的優點。

然而現在已經有越來越多的 Substrate 開發課程在市面上出現,卻沒有一門系統講解 Substrate 開發的課程,來幫助開發者瞭解 Substrate、Polkadot生態圈及Substrate底層代碼實現,學會如何利用Substrate開發一個可產品化的區塊鏈項目,以及掌握如何設計與完善區塊鏈項目的相關技巧。

這也無疑成爲了很多同學從入門到進階 Substrate 開發時最大的障礙。

因此,在今年6月份,一塊鏈習與 Polkadot 社區大使陳錫亮老師傾力打造了《Substrate快速入門與實戰開發》課程。直到10月底已經開班兩期,並且爲Substrate培育了100個優秀的開發者。

如果你對這門課還不太瞭解的話,#### 添加vx: connie136789

即使第 2 期課程已經結業將近一個月,同學們在工作之餘,仍繼續學習 Substrate ,出現不少優質問答。

現在將班級羣日常優質的討論內容分享給大家。具體內容如下:

01、Liusanity:老師,Substrate鏈的數據結構以及賬戶模型和以太差別大嘛?有相關文檔介紹麼?

Bryan:數據結構是哪一層的?trie db這一層是一樣,srml這一層就完全不一樣了。

Liusanity: trie db 就是mpt這種嗎?

Bryan: 是的。

Liusanity:共識算法也是一個srml了?

Bryan:共識算法有兩部分,一部分是core的,一部分是srml,有些東西需要存到狀態裏的,就放到srml,比如驗證人都是誰,這個是放在狀態裏的。

建懷:不用grandpa做確認,可以接入波卡插槽嗎?

Bryan:接入波卡主網插槽的話,其實就是把block finalziation 算法換成cumulus。就是波卡主網確認了哪個,平行鏈就認爲自己被確認了哪個。沒寫完,好幾個月沒動靜了~不急着看
https://github.com/paritytech/cumulus。

shooter:mpt 是啥 ?

Bryan:https://github.com/paritytech/trie Merkle Paricia Trie。

Liusanity: srml這一層最終不會落到trie db?

Bryan:會落的。

Liusanity:那賬戶模型也差不多了吧,賬戶下面有餘額,nonce,合約的話有代碼以及狀態root,合約也可以理解爲srml了。

Bryan:以這方面說的話是有相同之處。只是這個是波卡的實現。Substrate完全可以實現UTXO模型,那就不一樣了。

Liusanity: Substrate比較靈活主要在於srml和trie db的映射方式上嘛?

Bryan:Substrate的state就是key value pair,然後以trie db的方式編碼排序進行優化。

02、紅軍大叔:假設波卡上線一年後, 我是新進來的一個validator, 我的節點在啓動的時候是要從創始節點開始驗證每一筆交易嗎?還是直接同步?

Bryan:正常的都是從創世開始。

建懷:也就是說波卡生態裏,出塊節點也可以不需要保存所有歷史數據。

shooter: ETH 有 3 種同步方式:fast,light,full。在 full 方式中還可以設置gcmode,gcmode=full模式,只有最近的128次狀態被保存在內存中。

使用 --syncmode=full --gcmode=archive 模式,即歸檔節點,這種模式保存了最最最全的Ethereum節點數據,佔用硬盤空間也會更大。

Bryan:嗯,沒有這個必要,以太坊也是啊。

建懷:會跳躍驗證吧,不是一個接一個完整。

Bryan:狀態跳躍是不能跳的,Grandpa finalization倒是可以跳。

紅軍大叔:看到上面的以太坊的三種同步方式我想起一個問題,那就是關於內存和硬盤,波卡里當前狀態就是內存狀態,歷史狀態在硬盤裏,可以簡單這麼認爲麼?

建懷:那需要Snapshot。

紅軍大叔:還是說當前狀態也是隻存一部分在內存裏, 其他需要的再load?

Bryan:有點類似但不完全是吧,都是在rocksdb裏面,內存硬盤什麼的Substrate不管,rocksdb負責。

紅軍大叔:OK,什麼數據不在rocksdb裏呢。

Bryan:基本所有重啓後還被保留的都在裏面。例外就 libp2p節點的信息和Keystore吧。

03、Cherry:想知道作爲 Validator, 是怎麼進行驗證每一筆交易這個操作的?比如是5個block得到同樣的結果就算驗證成功嗎?

Bryan:有出快邏輯和確認邏輯。出快的話就是打包交易出快。其他人要是驗證失敗的話這個快就會被丟棄。確認finalize的話就是每個 Validator 簽名投票。有2/3以上的票就認爲這個block被finalize了。

建懷:可以改成沒有最終finalize的Pow。

Bryan:理論上可以用Pow代替babe,配合grandpa做finalize,當然實際上我不知道爲什麼要這麼做。

Cherry:

「紅軍大叔:假設波卡上線一年後, 我是新進來的一個Validator, 我的節點在啓動的時候是要從創始節點開始驗證每一筆交易嗎?還是直接同步?」

「Bryan:正常的都是從創世開始」


我的理解是,此時很多交易都已經被驗證過了,算是有驗證結果了,那麼這個Validtor的驗證結果意義在哪裏?

Bryan:trust but verify。其他人驗證過了自己也要驗證一遍保證安全性

Cherry:所以這麼做只是保證自己的Node的安全性 對歷史交易驗證結果其實不影響。

紅軍大叔:不信任別人纔有信任。

Bryan:嗯。在沒有作惡的情況下是沒區別的。可是你不驗證你怎麼知道有沒有作惡。

04、建懷:我看Polkadot也重點研究和介紹了NPoS,staking模塊跟NPoS是緊密結合的嗎?我們開發的時候,要做治理的一些功能的話,後面課程會不會介紹這一塊的案例呢?ChainX用NPoS了,感覺挺好的。

Bryan:NPoS課程裏沒講。staking模塊自己結合了,所以除非你不想用NPoS,那你要自己寫staking。這些Gavin他們這次中國行有介紹。

建懷:明白。就是說要引入staking模塊,又不想自己去寫staking模塊,就用NPoS共識,最終finality是Gradpa嗎?

Bryan:嗯。finality和staking沒有太多耦合,所以理論上可以換別的。當然現在也沒有什麼別的算法,所以也就grandpa了。

05、River:Discarding proposal for slot 786483613; block production took too long ;這個問題有人遇到過麼?

Bryan:前端和 Substrate 版本兼容性問題吧。

River: 有關於Generic Asset Module應用的例子推薦嗎?我在github上邊搜索了一下substrate-erc20,發現都是自己實現的,沒有用到Generic Asset Module這個模塊。

Bryan:https://github.com/cennznet/cennznet/blob/develop/runtime/src/lib.rs

06、Laurie:

|

281 | owner_vec.remove_item(&token_id);

|                   ^^^^^^^^^^^

|

= note: for more information, see https://github.com/rust-lang/rust/issues/40062

= help: add `#![feature(vec_remove_item)]` to the crate attributes to enable

#![feature(vec_remove_item)] 應該放在哪呢?

Bryan:文件開始,不過這樣就只支持 nightly了。

Laurie:自定義的struct 不可以作爲 decl_module中方法的參數 的類型 嗎?

Bryan:可以的,這個是沒有實現 Debug。加個 derive RuntimeDebug 就好了,Substrate 裏面很多例子。

Laurie:Struct 如果要作爲參數傳遞 不可以攜帶T:Trait 類型參數。。。? 比方說 pub struct something where T:Trait {…} 就不行。。。。?如果將那個參數T 換成 balance ,accountid ,都可以麼?

Bryan:是的,這個是Rust的問題,會要求 Runtime 實現Debug,你可能是測試要給 Runtime 或者 Test 加上個 derive Debug。

Laurie: https://crates.parity.io/sr_io/offchain/fn.local_storage_set.html

,請問offchain 如何能Sets a complex data structure in the local storage,比方說某個multi-index table,如果將整個table 作爲value local_storage_set進去會不會很昂貴?

Bryan :太大的話不能一次放進去,得拆開放。目前太複雜的數據結構支持不是很好。

07、Nrobot:請教一下,這個AccountIndex的編碼怎麼來的?

Bryan :

https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)
也可以直接找找Polkadotjs裏面的代碼看。

08、Eric: 這個json庫

https://github.com/xlc/simple-json,主要是因爲改了什麼才能在substrate用,對這塊沒什麼理解呢?或者換一個問題,想把這個庫 https://github.com/paritytech/ethabi 改成substrate能用的,大概思路是什麼呢?

Bryan:這個是我飛機上重寫的一個,支持no std的話主要就是不用 std的功能,比如Regex。

09、我是魚餌:我用Substrate生成一個節點放到服務器上別人怎麼同步我的鏈呢?

Bryan:提供 chain spec,裏面配置好節點 libp2p地址,其他節點 --chain=chain_spec.json就好了。

10、Liusanity:請問老師,Balance 、Currency,Generic-asset 這三模塊關聯關係是啥?

Bryan:Currency是一個trait,一個藉口,Balances和Generic-asset都實現了這個trait。Balances是單一資產管理模塊,Generic-asset是多資產管理模塊,同時支持用戶發行資產的功能。

文章最後,和大家說個好消息。《Substrate 快速入門與實戰開發》第3期即將於下週日(12月15日)開課啦!上線至今,已有100+人通過學習本課程,掌握了 Substrate 底層代碼的實現。

課程導師

陳錫亮老師,Laminar CTO,Polkadot 社區大使,Substrate & Polkadot 代碼貢獻者。

擁有豐富的 Substrate 使用經驗,同時也是 Substrate、Polkadot 的代碼貢獻者以及 Polkadot 的社區大使,曾負責參與其項目的設計與開發,非常理解開發者即將要面對的問題及需求。

在這門課程裏,他將結合自己多年的研究成果,深入淺出地爲你講解 Substrate 開發核心開發知識和典型應用,繼而幫你從源頭理解如何創建自定義Substrate鏈並利用 Substrate 實戰開發出一個可產品化的區塊鏈項目。

你能獲得什麼?

《Substrate快速入門與開發實戰》視頻課將基於最新的技術,一切從實踐出發。

我們首先會從 Substrate、Polkadot 生態圈講起,讓你瞭解及 Substrate 底層代碼實現,學會如何利用 Substrate 開發一個可產品化的區塊鏈項目。

之後會帶你瞭解並且掌握 Polkadot.js SDK 使用與前端項目開發的能力,掌握如何設計與完善區塊鏈項目的相關技巧,可以讓你對整個 Substrate 開發的生態有全面的瞭解。

最後,你還可以通過這門課程結識全球第一批對 Substrate 技術充滿熱情的工程師。

學完這門課程之後,你將能夠系統性的串聯起瑣碎的知識點,對面向 Substrate 的開發有一個基本的認識,快速的上手實現完整的可產品化的區塊鏈項目。同時會幫你梳理產品中的主要模塊,迅速理解在工作中實際項目的代碼結構,快速構建產品體系。

除此之外,更爲重要的是:在每一章節的課程學習之後,我們都有給到你相應的練習,幫你內化知識。如下:

學以致用,纔是最好的學習方式,對於編程來說,更是如此。

課程福利

1、課程價格 1699 元,加入第三期課程學習,並且按時完成所有作業,即可獲得一半學費返還!

2、參加結業 Hackathon,將有機會獲得 Web3 基金會提供的 KSM!(第二期學員 50% 同學獲得價值 15-30 美金不等的 KSM) 。

3、訂閱後生成海報分享給朋友,每成功邀請一位好友,可獲得 ¥169.9 返現,多邀多得,上不封頂。

這麼一算,是不是相當超值呢?

課程適合誰?

本門課程重在強實操,因此需要具備以下技能:

系統學習過一門編程語言 「必備」
以推薦度排名:Rust, C++, Swift, C, Javascript, Go, Scala, OCaml, Java
對Unix命令行基本瞭解 「必備」
基本的Web開發知識 (瞭解)
基本區塊鏈知識(瞭解)

學習形式

一個真正有效果的學習方式應該是怎樣的呢?
迴歸到本質上來講,就是:輸入+輸出+反饋。

再展開來說,它大概是這樣的——你通過某些渠道(如書、課程等)學習一些知識,接着利用所學的知識產出了一些作品,然後拿着這些作品去找一個靠譜的老師給你反饋,好的地方就繼續保持,差的地方就繼續學習加以改進。

這樣才能確保你的學習效果達到最大化。

而這,恰恰也是我們課程的核心設計理念。具體來看——

我們會以50人的小班形式進行管理:體系化在線錄播視頻教學,全程 2 名班長 6 名助教帶班強化訓練,8 次作業+1 次項目操盤,在你完成作業之後,每週我們的資深助教、老師會給予你點評反饋,並給到你迭代建議,確保你能真正的掌握 Substrate 的基礎技能。此外還有問題也可以隨時來問助教、老師哦!

####3
課程週期

12月15日-1月19日,正常學習週期在5周左右,12個月課程有效期內可無限重複觀看。

最後將課程大綱附上,供你參考:

在這裏插入圖片描述

最後,我想說:給自己未來一個可能,可以先報名試試,如果你不滿意,也請放心,開課3天內,無條件退款!如你所見,在誠意上,我們已經做到極致了,剩下的,就看你了,我們等你。

報名添加vx: connie136789

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章