学习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个月课程有效期内可无限重复观看。

最后将课程大纲附上,供你参考:

学习Substrate的路上,你原本可以少走很多弯路!_第1张图片

最后,我想说:给自己未来一个可能,可以先报名试试,如果你不满意,也请放心,开课3天内,无条件退款!如你所见,在诚意上,我们已经做到极致了,剩下的,就看你了,我们等你。

报名添加vx: connie136789

你可能感兴趣的:(Substrate,线上课)