一文读懂如何使用Parity Substrate构建你的区块链?

头等仓
个人专栏
热度: 11524

利用Substrate构建区块链教程。

利用Substrate构建区块链教程。

如何用Parity Substrate构建自己的区块链

Polkadot

Parity Substrate是一个区块链开发框架,它具有许多非常棒的特性,比如可升级的区块链、模块化的架构、可定制的区块执行逻辑和可热转换的共识。有关Substrate框架的概述,请观看Gavin Wood博士在2018年10月Web3峰会的演讲

 Polkadot

本文将介绍如何从Substrate框架构建自己的区块链。

安装

开始使用Substrate时,第一步是设置开发环境。Substrate团队创建了一个bash脚本,该脚本可以安装所有附件并编译一些安装包,组进Substrate框架中。

在端点运行以下命令,它将设置好计算机,准备接通Substrate。

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

该命令需要几分钟才能执行(取决于您的硬件性能),因为它还编译了Substrate框架所需的所有Rust包。

也有一种更快的方法,但它只安装附件,不编译Substrate包。如果要用这种方法,请运行以下命令。

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

注意:选用更快选项后,您将不会在系统中完整地安装Substrate CLI。

Substrate节点模板

一旦脚本和附件安装完毕,请继续在您的计算机上安装几个命令。

一个是substrat-node-new命令,帮助您设置节点模板。你可以将其视为项目的支架模板。该命令会下载并编译一个Rust代码库,这个代码库打包了设定Substrate运行时需要的所有引导代码。

请在端点中运行以下命令,创建节点模板实例。

substrate-node-new

第一个参数是你的区块链项目名称,第二个(可选)参数是这条链的作者名称。

例如:

substrate-node-new substrate-demo demoauthor

一旦完成该命令,将在substrate-demo(或使用您的项目名称)中创建以下目录结构。还将在这个栏目中初始化git存储库。

 Polkadot

substrate-node-template目录结构

运行时(runtime)的子目录包含与区块链运行时相关的逻辑。运行时可以称为区块链的业务逻辑。它可以进一步划分为各大运行时模块,每个模块将打包自己的状态(存储)和行为(逻辑)。而运行时目录中包含运行时模块的文件。

src目录中包含底层代码,这个目录组合了所有底层框架的组件,以便执行运行时。

scripts目录包含build.sh脚本,这个脚本帮助我们为Wasm (Web Assembly)环境构建底层运行时。

运行Substrate节点

一旦成功执行substrat-node-new命令,它还会编译节点模板的源代码(需要几分钟)。此时,您可以启动节点了,它会开始生成区块。

请在node-template目录环境中运行以下命令启动Substrate节点。该命令将使用dev配置启动基于节点模板的Substrate节点。本质上,dev配置运行由编译节点模板代码库生成的可执行文件。

Polkadot

该命令会生成如下输出:

Polkadot

从中可以看出,节点已经在开始生成区块。

构建Substrate运行时模块

现在Substrate设置好了,并且节点模板按照预期工作,现在来为我们的区块链构建一些定制化逻辑。

区块链的业务逻辑部署在运行时模块当中,而所有的运行时模块构成运行时。

假设我们构建一个简单的区块链运行时,用于代币转移。我们需要实现以下几个方面:

状态:

· 代币的总供应量

· 账户及余额映射

行为:

· 代币初始化(分配给帐户所有者的总供应量)

· 在帐户间转移代币

如前所述,Substrate运行时模块会将自己的状态和行为打包在一起。我们创建一个带有存储项和函数的自定义运行时模块。

在node-template目录中的runtime/src条目下,有两个文件——lib.rs和temaplate.rs。
Polkadot

 lib.rs是运行时的Rust crate root。用于导入所有必要的附件和范式。它还使用Substrate框架的一些Rust宏命令初始化运行时模块。

Template.rs是Substate运行时模块的模板(属于节点模板的一部分),它包含一些虚拟状态和行为(在代码注释中有描述),这是一个功能完备的运行时模块。

要实现代币转移功能,需要对template.rs文件做一些修改。

声明存储

首先,需要声明代币转移功能需要的存储项。在decl_storage中使用宏调用,为代币添加总供应和余额映射两个存储项。

Polkadot

在第一行中,我们添加了一个存储项TotalSupply来保存代币的总数量。我们还为这个存储项设置了一个值(21000000)。

在第二行中,我们创建另一个存储项作为一个StorageMap,用于AccountId和与其关联的代币余额之间的映射。我们将此存储项称为BalanceOf。

此模块的完整存储声明代码如下所示(注:我们删除了模板模块中附带的虚拟存储项。)

Polkadot

实现运行时逻辑

我们已经定义Substrate模块的存储项,现在需要编写一些代码来执行这些存储项。

在Substrate模块中,用decl_module定义公共可调度函数——宏(macro)。Substrate模板中有两个函数实现简单的代币转移功能,分别是代币初始化和转移函数。

在以下的代码片段中,有两个可调度函数——decl_module宏中定义的init和transfer。

PolkadotPolkadot

请注意,我们是如何使用Self::total_supply()和访问模块的存储的,从而获取存储项,并设定这些存储项数值。

注:从安全性的角度来看,确实需要多多检查和验证这些函数。但为了简化展示,我们略过了这一环节。

现在,我们已经定义了小型区块链运行时的状态和行为。

模块的所有代码可以在以下GitHub gist中找到。我们删除了template.rs自带的大部分代码。只留下代币传输所需的存储和函数。

Polkadot

Polkadot

GitHub ❤托管的substrate-demo-module

构建和运行Substrate节点

现在运行我们刚刚用template.rs文件中代币传输函数创建的Substrate运行时。

编译

第一,为Wasm环境编译运行时,请在Wasm目录的环境中运行以下命令。

./scripts/build.sh

输入上述命令后,运行以下命令在本机中构建Substrate节点。

cargo build --release

运行节点

运行节点与我们上述做法相同,只是要在创建节点模板之后。

./target/release/substrate-demo –dev

这个命令也应该产生相同的输出,并且启动和运行节点,生成区块。

通过用户界面连接Substrate节点

现在有了Substrate节点来运行代币传输运行时,我们将代币传输运行时连接用户界面,查看它的工作情况。

最简单的方法是使用Polkadot Apps门户网站。这是一个托管web应用程序,主要用于连接Polkadot网络节点,以及连接本地Substrate节点。

要在Polkadot Apps的用户界面中试用代币传输运行时工作情况,请遵循以下步骤,

· 一旦本地节点运行起来,在浏览器中打开以下命令,

https://polkadot.js.org/apps/

· 转到设置页面,并选择远程节点/端点中的本地节点来连接输入,单击Save&Reload。

Apps门户网站将连接到本地的Substrate节点,如果您转到资源管理器(explorer)页面,它会显示生成的区块。下方的截图显示了连接本地节点的Polkadot Apps门户网站的资源管理器视图。

 Polkadot

从用户界面调用可调度函数

要初始化代币,请在找到Apps门户网站的Extrinsics页面中的template部分,调用init()函数。请参考下方截图。

Polkadot 

如您所见,截图中预选了一个账户Alice,当你点击“提交交易”按钮时,就会签署 init() 函数调用。

当这笔交易提交到区块完成终结性时,Alice的账户将有21000000个代币。

在用户界面上查询存储值

从用户界面调用init()函数后,Alice账户余额应当更新为21000000。现在我们来检查用户界面中的存储值是否是这个数?

回顾上一节,我们用了存储项BalanceOf来针对性地存储余额。让我们检查一下Alice的账户里还有多少余额。

我们可以从门户的Chain state页面查询存储项。导航到此页面,从第一个下拉菜单(模块列表)中选择template,然后在template菜单中选择 balanceOf(AccountId): u64。然后在AccountId菜单中选择Alice。现在单击+键。它将显示Alice的最新代币余额(如下方的屏幕截图所示)。

 Polkadot

就这样,我们构建了一个简单的区块链运行时,并在不到20分钟的时间内将运行时连接到用户界面。

是的,从Substrate框架开始构建区块链非常容易。

这只是一个类似“hello world”的小型演示教程。你可以进一步扩展运行时模块,实现更多的功能,比如approval、transfer_from等(根据ERC20接口)。

原文:https://www.parity.io/how-to-build-your-own-blockchain-using-parity-substrate/
稿源(译):https://first.vip/shareNews?id=1819&uid=1
声明:本文为入驻“火星财经 专栏”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
本内容旨在传递行业动态,不构成投资建议或承诺。