查看原文
其他

Substrate技术篇 | 一步步搭建你的第一条区块链

ShawnRingLin PolkaBase 2020-11-11


本文章是PolkaBase与「Substrate开发者社区」合作宣发的技术实操文章。


「Substrate开发者社区微信公众号平台是中国最大的Substrate开发者和爱好者技术社区。


Substrate开发者社区是一个纯种的开发者社区,关注在区块链技术。我们由迷恋substrate的技术和架构人员组成,并积极参与研究,开发和分享。


Substrate开发者社区为全球提供Substrate生态最新的资讯、开发计划、技术进度:包括全球范围内的技术使用情况;Substrate的开发人员、招聘职位、就业机会;Substrate使用中的问题、解决方案、技术讨论;线上线下活动组织:meetup和hackathon等。」


阅读时间:15分钟, 内含代码




1

用Substrate实操搭建

2

关于Rust

3

搭建区块链


§ 3.1准备环境

§ 3.2创建和编译节点程序

§ 方式一

§ 方式二

§ 3.3本地开发网络

§ 3.4使用新账户启动本地测试网络

§ 3.5构造chainspec

4

构造成功



用Substrate实操搭建自命名区块链

 

你在新闻和各种媒体看到会更多的是:一个区块链高级程序工程师的应聘经历中总是需要过3万的代码贡献;一个团队筹集n亿美金开发一个大型公链项目;又如某个公链的上线又迟迟难以兑现、2个月归期又有很多bug待解决。

 

但如果你自己动手,搭建区块链其实离你并不远。 在你的电脑终端terminal上安装Substrate就能轻松实现你自己署名的本地私人区块链了。

 

Substrate是由Polkadot开发公司Parity公司推出的一个区块链构建框架。它实现了区块链开发领域中所遇到的大部分通用功能,开发者只需要关注自己的业务逻辑,无需debug底层复杂的技术,使普通的软件开发人员可以在短时间内建立一条属于自己的完整区块链,

 

使用Substrate构建的区块链,有一个额外的好处,就是可以轻易地连接到Parity的Polkadot公链网络,这一网络具有很多优势,比如跨链交易、共享安全等。



关于Rust


Substrate和运行时模块都是使用Rust开发的。

 

Rust作为一门底层静态编程语言,具有强调安全和0抽象耗能等优势。但同时作为一种程序开发语言,Rust的学习曲线确实很陡峭。

 

实际上,如果你是刚接触Rust,那么需要一点耐心,比如<Rust编程之道>写的很好同时也有背后的逻辑、思维、价值观,很适合新手学习。


在我们花时间了解这门语言的核心概念和特性、在初步掌握Rust之后,Substrate的开发也将变得令人享受。

 

长话短说,进入我们这篇文章的主要课题:使用Substrate来构建一条以你自己名字来命名的专属区块链。



搭建区块链


3.1准备环境


| Mac OS 或者Linux系统

| Github

 

3.2创建和编译节点程序


方式一:调用Parity网站的dash版本


1. 安装依赖工具,如Rust环境、openssl、cmake、 llvm库:


curl https://getsubstrate.io -sSf | bash


(由于国内网络,可能会下载失败或者过慢,也可以配置国内的Rust仓库镜像进行下载,方法如下:)


git clone https://github.com/kaichaosun/getsubstrate-cn


cd substrate-cn


cp config ~/.cargo/config


./getsubstrate

  )


2. 新建节点程序,使用命令行导航至你想要放置节点程序的目录,执行:


substrate-node-new substrate-demo-node yourname


substrate-up脚本提供的初始化节点命令是substrate-node-new,通过下载和编译Template Node来生成我们的节点程序。运行下面的命令来生成节点,替换demo-node为你自己的节点名,替换yourname为你的团队或个人名字。

 

如果在控制台看到以下内容,证明你的节点正在创建:

 


如图,我在自己电脑上创建了名为blockchainscholar - Shawn的本地节点,用来接入Substrate系统。


以后如果不打算改动,则不用装环境,直接启动节点

(注:substrate-node-new命令会帮你拷贝substrate模板节点程序、初始化WASM的构建环境、编译Rust代码为WASM等。

 

方式二:通过拷贝substrate的Git源码,编译node-template:


这种方式适合对substrate源码有一定了解的人,如果是初学者,建议使用方式一。


git clone https://github.com/paritytech/substrate


git checkout -b v1.0


cd substrate


cd node-template


# 初始化WASM构建环境

./scripts/init.sh


# 编译Rust代码为WASM

./scripts/build.sh


# 生成可执行程序cargo

cargo build --release



3.3本地开发网络

 

清空节点数据库:


cargo build --release


启动节点程序:


cargo build --release


如果出现了类似下图所示地内容,那恭喜你成功创建了一条本地的链。

 


现在你可以访问https://substrate-ui.parity.io,选择Settings,将remote node设置为Local Node (127.0.0.1:9944),



选择Explorer,查看是否有新的区块产生。

 

3.4 使用新账户启用本地测试网络

 

生成新账户:

如果我们不想用预置的Alice和Bob账户启动网络,就需要执行subkey -e generate命令生成新账户,生成的内容包含私钥seed,公钥public key和交易地址Address:


subkey -e generate


账户1:


Phrase `gas ride shoe victory oil young music trend kingdom rookie south harbor` is account:

  Seed: 0x9aaae371d50d1109fee8595398e54a86f6c79b116ba1894e8207f503708f7d0f

  Public key (hex): 0xcc706bd768a54054ac70b3f5568d0103e0f70a2f878e37949e125dd7456ee180

  Address (SS58): 5Ggm2DMCG1LRcXUjGE6toVmyHKVSNutzSbUrvQv5gbr5BC6S


账户2:


Phrase `real during evidence worry mountain plastic depth desert actress infant age pill` is account:

  Seed: 0x16208851b59f7c6a383a70342fa0893169c7c3190c543d44bd42833f61e54a56

  Public key (hex): 0xd6147f4bbb0eeb925e61b31fbed45ab1e3c45fed8d36ce4161c99956dfdf8f9b

  Address (SS58): 5GuQCAzXM5xcJfEinUgWnB7PFn2ZGhQfAKAdGRhacRHsXWE9


将生成的内容安全地保存起来,通过分享地址给其它节点,实现p2p的连接。


注:如果没有subkey命令,需要到substrate源码目录下重新编译生成cargo install --force --path subkey subkey。

 

现在进行测试的操作:例如发一笔交易,选择Extrinsics,submit the following extrinsic选择为balances transfer(dest, value),dest: Address可以填为第二个账户,value: Compact<Balance>设置为你想转账的金额,之后点击Submit Transaction,会弹出交易成功的提示,这个时候你可以看到第一个创建的账户的金额减少了,当切换using the selected account为第二个账户之后,可会看到金额增加:那就说明测试成功了。



3.5构造chainspec文件


「Chainspec」文件是用来存储和维护区块链的初始启动信息的。

Substrate区块链的初始启动信息在chainspec的json文件中维护着,首先生成一个local测试网络的chainspec:


./target/release/template-node build-spec --chain=local > localspec.json


编辑localspec.json,修改authorities为新生成用户的地址,其它不用修改:


"consensus": {

"authorities": [

"5Ggm2DMCG1LRcXUjGE6toVmyHKVSNutzSbUrvQv5gbr5BC6S",

"5GuQCAzXM5xcJfEinUgWnB7PFn2ZGhQfAKAdGRhacRHsXWE9"

],

"code": "0x0061736d01000000018b011660027..."


修改完后,转换chainspec为原始格式,区别是原始格式的chainspec中所有的字段名都用十六进制进行了编码:


./target/release/template-node build-spec --chain localspec.json --raw > customspec.json


启动节点

启动账户1的节点:


./target/release/template-node \

  --base-path /tmp/account1 \

  --chain ./customspec.json \

  --key 0x9aaae371d50d1109fee8595398e54a86f6c79b116ba1894e8207f503708f7d0f \

  --port 30333 \

  --telemetry-url ws://telemetry.polkadot.io:1024 \

  --validator \

  --name Account1Node


这里,--chain ./customspec.json是启动区块链所需的chainspec文件。


启动账户2的节点:


./target/release/template-node \

  --base-path /tmp/account2 \

  --chain ./customspec.json \

  --key 0x16208851b59f7c6a383a70342fa0893169c7c3190c543d44bd42833f61e54a56 \

  --port 30334 \

  --telemetry-url ws://telemetry.polkadot.io:1024 \

  --validator \

  --name Account2Node \

  --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/5Ggm2DMCG1LRcXUjGE6toVmyHKVSNutzSbUrvQv5gbr5BC6S


构造成功


这时候你就成功拥有了属于自己的区块链!

 

这篇文章是PolkaBase的Substrate相关文章第二篇,继上一篇「Substrate:最好的区块链搭建工具」后这就形成了Substrate系列文章了。与一系列Polkadot技术篇节点操作等文章也算丰富生态内容了。 开源技术内容更新会很快,对于英语的能力、时效性和专业度也是一大挑战,确实是一个紧迫的要求。我们PolkaBase主要能协助做的是相对系统的归纳和分析和一些精华内容。相对细节的内容在未来我们需要社区内容翻译和解读的共建组。



参考来源:

https://blog.csdn.net/weixin_43941564/article/details/102733870 

https://blog.csdn.net/shebao3333/article/details/100164348 


编译 / ShawnRingLin

编辑 / Emily Yang




关于PolkaBase


PolkaBase是以波卡技术为基础的区块链3.0生态,致力于打造一个能推动区块链技术与应用落地、产生优质内容和产品价值、并吸引区块链行业外部资源与团队的新一代社区;在技术普及、生态孵化、高校与产业联合、价值用户和国际化五大方面,弥补现有社群的不足,推动生态的深化与发展。



Modified on

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存