
本来我是打算介绍Substrate项目结构的,猛地一看,Substrate整个项目结构实在有点复杂,不适合我们初学者。我们还是从substrate-node-template开始介绍吧。
有朋友要说了,我们凭本事学substrate,还看个山寨版代码,看substrate项目源代码它不香吗?香香香……香菜要在这里澄清一个事情,substrate-node-template它不是山寨代码,而是substrate的亲儿子,波卡polkadot的亲孙子呀。从代码复杂程度看,Polkadot > Substrate > substrate-node-template。Substrate是将核心框架从Polkadot里边抽出来,让通用功能打包出来独立运行。而substrate-node-template则是将Subtrate的底层实现细节剥离出来,让开发者可以集中精力关注自己开发的应用程序及相关的配置。
听不懂?更简单地说,substrate-node-template只留下了开发者开发需要用到的文件,其它的,都通过依赖清单和调用一笔带过了。举个例子,Substrate源代码项目里有很多实现好的功能,比如资产管理、智能合约等,如果你用substarte-node-template编写自己的应用程序时要用到的话,只需轻松地在cargo.toml里引入依赖,在runtime运行配置清单里告诉下大家你要使用它,然后就可以调用这些功能了。项目结构精简了很多,目的也很明确:开发者只管知道怎么用就行了,其它不需要操心。就好比用电脑的人,不需要关心操作系统底层是怎么运行的,他只需要知道我做什么事情用什么软件就可以了。
看到这里,你是不是在想,这个substrate-node-template使用体验设计得这么好,肯定简单好用,忍不住摩拳擦掌想要用用看呢?安排!
我们先来看看如何安装substrate-node-template。
在命令行终端里输入下面语句,这是安装substrate-node-template及其运行环境所需依赖的命令。大约需要30分钟左右,一键搞定不用烦。
curl https://getsubstrate.io -sSf | bash -s -- --fast
如果你已经在substrate-node-template模版基础上编写好了自己的应用程序,或者压根就没改动过代码,只想空跑一下这条链看看。那么,就按照下面程序,先编译,再运行。
编辑命令如下:
cargo build –release
启动区块链节点。编译好之后,输入下面语句,执行二进制可执行文件,以开发者模式配置清单来启动节点:
./target/release/node-template --dev
完成上面两步之后,你就可以成功地看到终端开始显示区块链开始出块的信息了!是不是很激动!香菜第一次看到这个画面的时候,真的是特别地激动,这是人生发布的第一条区块链,具有非凡的意义!

直观地看完区块链出块后,我们来认识一下substrate-node-template的项目结构吧。对了,先在命令行终端里ctrl+c终止掉运行的程序先,不然它会一直不停地空跑着哦。
首先打开下载了substrate-node-template的文件夹(如果还没下载的朋友,请参见本文前面的安装substrate-node-template部分)。香菜用的是vscode编辑器,目录结构看起来如下图:

当中我用红色方框把比较重要的文件夹圈了起来。下面对这几个文件夹做一下简单说明,想要了解细节的话,可以往下看思维导图。
每一套substrate-node-template包含下面几大块,我会同时以面包店作为比喻,以便大家理解。
- node——提供基本节点功能,里边包含底层网络怎么通信、共识怎么达成的细节。Node好比面包店,在区块链上启动了很多不同的节点,可以看作是开了很多面包连锁店。只有面包实体店开了起来,才能在店里提供服务。相类似,只有node跑了起来,才能在此基础上运行应用程序,提供不同的服务。
- pallets——各种应用服务。开发人员自己开发的应用,就是放在这个文件夹里。我们先来了解下什么叫pallet。Pallet是substrate自己叫的一个名字,就相当于我们平常说的模块包(package)。一个pallet(也即一个package),定义了一组功能代码。比如资产管理功能、智能合约功能。开发人员编好的源代码就放在这个文件夹下,需要使用时,就在runtime里边配置调用即可。当然,我们前面也说过,Substrate官方提供的一些pallets,它的源代码没有放在substrate-node-template下面的pallets文件夹里,但如果我们区块链项目想要用,可以直接在runtime里配置使用就可以了。pallet可以类比成面包店里的面包、蛋糕、咖啡、奶茶等,面包店可以提供的服务。
- runtime——运行时的配置清单。它是连接pallet服务和node节点的中间人及协调人,使区块链能正常运作关键部分。runtime可以比作面包店店员,他不仅了解面包店里可以提供什么服务,还对每种服务什么价格,面包、咖啡放在哪里非常清楚,有了他,面包店才有可能正常运作。
- target——编译好的可执行文件存放目录。
下面,我用一个思维导图来给大家解释substrate-node-template整个目录结构里每一个文件的用处。

简单了解了substrate-node-template目录结构之后,下一篇开始,香菜要带你开始深入了解Substrate的组成部分。