LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 超节点独家:全球首届 Substrate 开发大赛-杭州黑客松WORKSHOP大放送 第二期(下)

超节点独家:全球首届 Substrate 开发大赛-杭州黑客松WORKSHOP大放送 第二期(下)

2019-10-11 超节点区块链SSS 来源:区块链网络

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

a00bdf7a9b6b0ca33c0990c4f258a96f-sz_548563.png

Substrate: 一个波卡(Polkadot)的区块链建设者(部署和升级自定义区块链网络)(Part 2)

原作者:Nicole Zhu, Hanwen Cheng (Parity)

8c9fb1ff3f808334b5eb0a902016a565-sz_112034.png

练习 1: 部署一个 Substrate 区块链 到私人网络

Step 1: Start as a boot node “Alice”创建初始节点

a594eb655d94f8397e516846a0fb565a-sz_34749.png

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

67042e741d0d4a0e9b59682e48d8e912-sz_37213.png

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

7605d07b06061e15f9d104bf3b5f0eba-sz_61044.png

要点:

Substrate 是一个开箱即用、可运行的区块链!

Runtime 开发基础知识

Verify First, Write Last 先验证,再写入

● “bad transaction” 的处理和 Ethereum 不同

● Ethereum: 状态被回滚,存储未修改,并支出交易费用。

● Substrate: 如果返回了 `Err`,状态的改变将会持久化

● 对于某些情况需要这样做,如:

● 出现失败的交易,也会增加 Account交易随机数

● 尽管 “out of gas”,也要收取交易费用

● 编写“子函数”时,需要格外注意这种模式

Skeleton of a Module 框架

4d7f261cfdd11bf4e02cf9683a9bd95b-sz_25422.png

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

6acb9b2bc43dbc33f42c49db8d9d3a0a-sz_35807.png

Declaring Storage 声明状态

0ad4aa6d5e0de731747dddf55721074e-sz_43405.png

Declaring Events 声明事件

90947ed2aa29bc14ced582852fc65294-sz_21691.png

Declaring Dispatchable Functions 声明可调用方法

5d13086b857c5e6df1f4422f5e31f495-sz_58090.png

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

97455db22200284c608d580c4afab8b7-sz_16218.png

一旦声明作为外部函数之后,他们甚至可以从其他的Rust module来调用

Defining a Custom Struct 创建自定义struct

d4894871c0e37aa21cfac084534a11d2-sz_31223.png

练习2: 创建一个简单的存在性证明区块链

证明文件是否存在的在线服务

存在性证明是一个通过在比特币网络上发送一个加入时间戳的交易,来证明电脑上文件在特定时间是否存在的线上服务。

POE最初是基于比特币网络的,但是,他的功能不能很好的被比特币网络支持,主要依托应用层用不同的hack方法来实现。

而给像比特币这样的区块链引入新的功能又很困难 ,因为这些功能太专,不适合于修改基础协议。

现在让我们开始创建自定义module!

f28e96a7442ed01bdd9b67df5bc4fdb8-sz_30644.png

1. Import necessary dependencies 导入必要的依赖模块

第一步可以在新建的poe文件开头加入:

439da587ee56f639564757ef7810a05c-sz_20521.png

2. 设置使module可以发送事件

现在我们只需要添加一个even模块。

3b3ae4055b6c31b63dfb026d28b77f50-sz_28382.png

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

d7dafc407816136dbf16ee24fa95794a-sz_49138.png

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

6b4bf3a3eeeb2add195135eae6991c78-sz_48862.png

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

b27fa333016a4c46a69acaa52f4e08aa-sz_56441.png

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

9e5e60198a9e88e2d5bc93d61690610c-sz_29061.png

7. Compile! 编译!

如果把以上的模块都放入poe.rs文件中,并正确的修改lib.rs,那么这个时候就可以编译成功了

cargo build --release

练习 3: 进行区块链网络无分叉升级

Hard Fork Upgrades 硬分叉升级

f00f6877864659ff8d60e73379391c34-sz_27827.png

Forkless Runtime Upgrades 无分叉 Runtime 升级

1f4194442b1aecffdafbd04d0087ae9a-sz_64007.png

A Need for Upgrades 升级的必要性

● 修复重要的安全漏洞

● 更改协议中的核心规则

● 添加新功能

● 修复链上状态

● 硬分叉升级需要大量的协作

● 关于升级的治理和信号不明确

Governing Runtime Upgrades Runtime 升级治理

● 可以通过链上治理 访问Runtime 代码

● Sudo 模块

● Democracy 模块

● 自定义的模块和功能

● Runtime 升级是可选的

重要说明:

如果采用wasm,一个链升级接口,则其余的都不需要升级。如果不是wasm,则如果一个链升级接口,则整个网络都需要执行升级。

要点:

Substrate 无分叉地升级你的区块链!

—-

编译者/作者:超节点区块链SSS

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...