

Parity 工程师 Hanwen 和 Nicole Zhu的 “如何使用 Substrate 建立一个私人区块链网络” Workshop
9 月 21 日 - 22 日,为期两天的 PolkaWorld Hackathon(波卡世界黑客马拉松)在杭州钱江新城的 B-LABS 圆满举办。21 号下午,Parity 和 Web3 基金会带来了三个干货满满的 Workshop。其中之一是Parity 工程师 Hanwen 和 Nicole Zhu的 “如何使用 Substrate 建立一个私人区块链网络” Workshop。以下为超节点(SSSnodes)对其演讲稿的独家中文全译。感谢PolkaWorld提供的图片资料。

Substrate: 一个波卡(Polkadot)的区块链建设者(部署和升级自定义区块链网络)(Part 2)
原作者:Nicole Zhu, Hanwen Cheng (Parity)

练习 1: 部署一个 Substrate 区块链 到私人网络
Step 1: Start as a boot node “Alice”创建初始节点

Step 2. Second node “Bob” joins in 第二个节点加入

Step 3. Check the State of your blockchain 检查出块状态

要点:
Substrate 是一个开箱即用、可运行的区块链!
Runtime 开发基础知识
Verify First, Write Last 先验证,再写入
● “bad transaction” 的处理和 Ethereum 不同
● Ethereum: 状态被回滚,存储未修改,并支出交易费用。
● Substrate: 如果返回了 `Err`,状态的改变将会持久化
● 对于某些情况需要这样做,如:
● 出现失败的交易,也会增加 Account交易随机数
● 尽管 “out of gas”,也要收取交易费用
● 编写“子函数”时,需要格外注意这种模式
Skeleton of a Module 框架

Importing and Defining Generic Types 导入和定义类型

Declaring Storage 声明状态

Declaring Events 声明事件

Declaring Dispatchable Functions 声明可调用方法

Declaring Public and Private Functions 声明外部内部函数

一旦声明作为外部函数之后,他们甚至可以从其他的Rust module来调用
Defining a Custom Struct 创建自定义struct

练习2: 创建一个简单的存在性证明区块链
证明文件是否存在的在线服务
存在性证明是一个通过在比特币网络上发送一个加入时间戳的交易,来证明电脑上文件在特定时间是否存在的线上服务。
POE最初是基于比特币网络的,但是,他的功能不能很好的被比特币网络支持,主要依托应用层用不同的hack方法来实现。
而给像比特币这样的区块链引入新的功能又很困难 ,因为这些功能太专,不适合于修改基础协议。
现在让我们开始创建自定义module!

1. Import necessary dependencies 导入必要的依赖模块
第一步可以在新建的poe文件开头加入:

2. 设置使module可以发送事件
现在我们只需要添加一个even模块。

3. Define your module’s events定义module中的事件

4. Add the storage/state items添加状态存储

5. Add your callable [public] module functions添加可调用的公共方法/函数

6. Add module into Runtime把module添加到runtime

7. Compile! 编译!
如果把以上的模块都放入poe.rs文件中,并正确的修改lib.rs,那么这个时候就可以编译成功了
cargo build --release
练习 3: 进行区块链网络无分叉升级
Hard Fork Upgrades 硬分叉升级

Forkless Runtime Upgrades 无分叉 Runtime 升级

A Need for Upgrades 升级的必要性
● 修复重要的安全漏洞
● 更改协议中的核心规则
● 添加新功能
● 修复链上状态
● 硬分叉升级需要大量的协作
● 关于升级的治理和信号不明确
Governing Runtime Upgrades Runtime 升级治理
● 可以通过链上治理 访问Runtime 代码
● Sudo 模块
● Democracy 模块
● 自定义的模块和功能
● Runtime 升级是可选的
重要说明:
如果采用wasm,一个链升级接口,则其余的都不需要升级。如果不是wasm,则如果一个链升级接口,则整个网络都需要执行升级。
要点:
Substrate 无分叉地升级你的区块链!