主页 > 如何退出imtoken > 人人都是区块链开发者 | 使用 Substrate 轻松构建您的第一个区块链?

人人都是区块链开发者 | 使用 Substrate 轻松构建您的第一个区块链?

如何退出imtoken 2023-02-25 07:41:17

接下来进入我们今天的主要任务,使用Substrate搭建本地测试区块链网络。

构建区块链

通过本节,您将学习:

● 如何创建和编译节点程序

● 如何启动节点程序和配置各种参数

● 不同节点网络有什么区别

● 如何修改chainspec文件

准备环境

●Mac OS或Linux电脑

● 混帐

创建和编译节点程序

方法一

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

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

如果你对上述脚本的具体执行内容感兴趣,可以参考这里。 由于国内网络原因,上述脚本可能下载失败或速度太慢。 参考以下方法配置国内Rust仓库镜像供下载。

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

cd getsubstrate-cn

cp config ~/.cargo/config

./getsubstrate

2、新建一个node程序,使用命令行导航到你要放置node程序的目录,执行:

substrate-node-new substrate-demo-node someone

也可以把substrate-demo-node替换成你想要的node程序名,把someone替换成你自己的名字。 等待命令执行完成后,一个自己的node程序就完成了。

比特币源码是什么语言_比特币矿池源码_从源码编译构建比特币核心

注意:substrate-node-new命令会帮助你复制substrate模板节点程序,初始化WASM构建环境,将Rust代码编译成WASM等,具体见链接。

如果代码发生变化,则需要重新编译。

首先,将 Rust 代码编译为 WASM:

./build.sh

之后,编译生成可执行程序:

cargo build --release

可执行文件放在 target/release/template-node 中。

方法二

另一种创建节点的方法是通过复制 substrate 的 Git 源代码来编译节点模板:

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 build --release

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

地方发展网络

首先清空节点数据库:

./target/release/template-node purge-chain --dev

然后启动节点程序:

./target/release/template-node --dev

--dev 表示我们要启动一个本地开发链,它会自动初始化开发环境所需的数据和配置。

比特币源码是什么语言_比特币矿池源码_从源码编译构建比特币核心

如果出现如下图,恭喜你已经成功创建本地开发链。

比特币源码是什么语言_比特币矿池源码_从源码编译构建比特币核心

现在可以访问,选择设置,将远程节点设置为本地节点(127.0.0.1:9944),如下图:

比特币矿池源码_从源码编译构建比特币核心_比特币源码是什么语言

选择Explorer,可以看到不断有最新的区块产生。

接下来我们发送一笔交易,选择Extrinsics,提交如下extrinsic为balancestransfer(dest, value),dest:Address为BOB从源码编译构建比特币核心,value:Compact为你要转账的金额,然后点击Submit Transaction,几秒后分钟,会弹出交易成功的通知。 这时候可以看到Alice的金额减少了。 切换为使用所选账户作为 Bob 后,您可以看到他的金额增加了。

接下来,请独立尝试本页面的不同功能,不要担心会破坏好不容易建立的链接。 这也是Substrate的一个好处,可以快速清理垃圾数据。

本地多节点测试网络

这里我们使用本地测试网内置的账号来启动Alice节点:

./target/release/template-node \
 --base-path /tmp/alice \
 --chain=local \
 --key //Alice \
 --port 30333 \
 --telemetry-url ws://telemetry.polkadot.io:1024 \
 --validator \
 --name AlicesNode

命令行参数含义如下:

--base-path /tmp/alice:存放节点数据的地方

--chain=local:指定节点的网络类型,其中local表示本地测试网络,dev表示本地开发,staging表示公共测试网络

--key //Alice:模块节点程序启动时需要私钥,这里我们使用预设的Alice用户私钥

--port 30333:指定p2p协议的TCP端口

--telemetry-url ws://telemetry.polkadot.io:1024:将节点的监控数据发送到指定的监控服务器

--validator: 开启验证者模式并参与出块

比特币矿池源码_比特币源码是什么语言_从源码编译构建比特币核心

--name AlicesNode: 指定节点名称

命令执行后,应该会看到如下启动信息:

从源码编译构建比特币核心_比特币矿池源码_比特币源码是什么语言

打开一个新的命令行窗口并启动 Bob 节点:

./target/release/template-node \
 --base-path /tmp/bob \
 --chain=local \
 --key //Bob \
 --port 30334 \
 --telemetry-url ws://telemetry.polkadot.io:1024 \
 --validator \
 --name BobsNode \
 --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/QmRhEhiX8QHVW87wKCTp3qKyY1X21ycKXKdDBrqSR74NWx

这里,我们为Bob节点指定了不同的数据存储路径、p2p端口等。 --bootnodes 指定依赖的启动节点信息。 这里Alice节点作为启动节点,30333是Alice节点的端口,QmRhEhiX8QHVW87wKCTp3qKyY1X21ycKXKdDBrqSR74NWx是Alice的节点ID。

如果一切正常从源码编译构建比特币核心,您应该能够看到:

Idle (1 peers), best: #2 (0x5155…5b72), finalized #0 (0x146f…317f), ⬇ 24 B/s ⬆ 0.1kiB/s

这意味着 Bob 节点连接到 Alice 节点(1 个对等体),并且新生成的块未最终确定 #0 (0x146f...317f)。 这是因为模块节点程序不具备finality的功能。 想了解更多请查看官方文档或关注我的后续文章。

然后和之前一样,在浏览器中访问区块的信息。

使用新帐户启用本地测试网络

生成新帐户

如果我们不想使用预设的 Alice 和 Bob 账户启动网络,我们需要执行 subkey -e generate 命令来生成一个新的账户。 生成的内容包括私钥种子、公钥公钥和交易地址Address:

账户 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。

构建 chainspec 文件

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

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

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

"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

此时你已经拥有了自己的第一个区块链!

更多内容

比特币矿池源码_从源码编译构建比特币核心_比特币源码是什么语言

官方文档:

奇偶校验介绍:

Substrate 源代码:GitHub - paritytech/substrate: Substrate: The platform for blockchain innovators

Polkadot 源代码:GitHub - paritytech/polkadot:Polkadot 节点实现

总结

恭喜,您已经完成了使用 Substrate 构建区块链的第一课。 回顾一下我们所学的内容,包括安装Substrate的依赖环境、创建编译节点程序、启动测试网络、修改chainspec等。 社区提供了很多资料供参考,也可以关注知乎专栏《Substrate区块链开发》

课程预览

OneBlock+与Parity独家合作的《Substrate区块链开发介绍》第八期内容全面更新至4.0.0-dev! 你将在一个月内掌握最新的区块链技术Substrate,并开发一款承载独特业务的区块链应用!

3月18日正式开课,名额仅剩10个!

报名链接:

从源码编译构建比特币核心_比特币源码是什么语言_比特币矿池源码

关于我们

One Block+是中国最大的Substrate技术开发者社区,也是Parity在亚洲唯一的运营合作伙伴。 波卡早期项目的创始人、CTO、核心开发人员大多来自One Block+社区。

推特:

媒介:@OneBlockplus

电报:

不和谐:

哔哩哔哩:

YouTube: