官网
github
DOC
面向未来的区块链框架
Substrate 使开发人员能够快速、轻松地构建适合任何用例的未来 证明区块链(future proof blockchains)。
Substrate 文档包括区块链构建器(blockchain builders)和parachain 项目团队的概念、过程和参考信息。
Tutorials
如果你是一个喜欢边做边学的人,Substrate
教程是开始你的旅程的好地方。教程不会提供关于为什么要执行某些步骤或解释编码细节的太多背景信息。相反,这些教程为您提供实践经验,执行构建自己的区块链所必需的任务,并专注于确保成功的结果。
如果您更喜欢在较少指导的情况下自己进行实验,您可能想要探索Substrate游乐场。如果你更喜欢直接深入代码的细节,你可能想从Rust API文档开始。但如果你想在导游的带领下开始你的旅程,试试下面的教程。
入门教程(Get started)
入门教程演示了使用区块链节点的基础知识,包括如何使节点在对等网络中相互通信,以及如何收集关于节点操作的指标。你将学习如何:
- 在开发环境中构建一个本地节点。
- 使用预定义帐户模拟双节点网络。
- 启动一个小型可信验证器节点网络。
- 通过收集指标监视节点操作。
- 升级节点运行时。
使用pallets
使用 pallets 教程重点介绍如何使用 pallets 定制运行时,包括如何向运行时添加简单和复杂的pallets ,以及如何将pallets 与智能合约结合使用。你将学习如何:
- 向运行时添加简单的预定义pallets 。
- 使用宏创建自定义 pallets 。
- 指定要用作函数调用发起者的帐户。
- 发布自定义 pallets 供其他人使用。
为了更深入地了解如何从头到尾创建一个自定义托盘,您可能想要探索Collectibles workshop的第一部分。未来的迭代将包括对前端开发的介绍,以及如何将应用程序从单链项目转换为副链项目。
开发智能合约
开发智能合约教程指导您如何使用ink编程语言构建运行在基于Substrate的区块链上的智能合约。你将学习如何:
- 打造智能合约项目的墨水!编程语言。
- 使用智能合约存储、递增和检索简单值。
- 在智能合约中使用映射存储和检索值。
- 构建用于转移
ERC-20
tokens的智能合约。
连接中继器 和 parachains
连接中继器 和 parachains 教程深入研究了更高级的主题,以超越单独的链开发,包括如何将您的链连接到其他链。你将学习如何:
- 把 solo 链变成 parachain。
- 部署一个本地测试网络,并与多个连接的 parachain 交互。
- 将 parachain连接到公共测试网络。
- 使用跨共识的消息格式( cross-consensus messaging format )。
与工具集成
与工具集成教程重点介绍了其他工具和节点扩展,使您能够以独特的方式与Substrate节点或区块链中的信息交互。你将学习如何:
- 集成一个轻客户端节点以连接到基于
Substrate
的链。 - 使用
sidecar
RESTful API和端点与基于Substrate
的链交互。 - 访问
EVM
帐户并使用与EVM
兼容的应用程序。
一、环境安装
在开始开发基于 Substrate 的区块链之前,您需要用所需的编译器和工具准备好开发环境。因为Substrate (以及大多数使用Substrate 的开发人员工具)是用 Rust 编程语言编写的,所以准备计算机的第一步是安装Rust。安装Rust的步骤取决于用于Substrate开发的计算机的操作系统。有关安装说明,请参阅适用于您的操作系统的主题。
- Linux
- Windows
如果已经安装了Rust,可以跳过安装说明。有关安装和升级Rust编译器和工具链或解决安装问题的其他信息,请参阅以下主题:
- Rust toolchain
- 开发人员工具
- 排除Rust问题
Linux开发环境
Rust支持大多数Linux发行版。根据所使用的特定发行版和操作系统版本,您可能需要向环境中添加一些软件依赖项。通常,您的开发环境应该包括一个链接器或c兼容的编译器(如clang
)和一个适当的集成开发环境(IDE)。
1.1 开始之前
查看您的操作系统的文档,以获得有关已安装的包以及如何下载和安装您可能需要的任何其他包的信息。例如,如果你使用Ubuntu
,你可以使用Ubuntu高级打包工具(Advanced Packaging Tool,apt)来安装build-essential
包:
sudo apt install build-essential
在安装Rust之前,你至少需要以下包:
clang curl git make
因为区块链需要标准密码学来支持公钥/私钥对(public/private key pairs
)的生成和交易签名的验证,所以还必须有一个提供密码学的包,比如libssl-dev
或openssl-devel
。
1.2 安装所需的包和Rust
1.2.1 在Linux上安装Rust工具链:
例如,在Ubuntu桌面或Ubuntu服务器上,你可能会运行类似如下的命令:
sudo apt install --assume-yes git clang curl libssl-dev protobuf-compiler
Fedora
sudo dnf update
sudo dnf install clang curl git openssl-devel make protobuf-compiler
1.2.2 下载rustup安装程序,执行如下命令安装Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
1.2.3 通过运行以下命令更新当前shell以包含Cargo:
source $HOME/.cargo/env
1.2.4 执行以下命令验证安装正确性:
rustc --version
1.2.5 通过运行以下命令配置Rust工具链为最新的稳定版本:
rustup default stable
rustup update
1.2.6 通过运行以下命令将nightly
版本和nightly
WebAssembly (wasm)目标添加到您的开发环境中:
rustup update nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
1.2.7 运行以下命令验证开发环境的配置:
rustup show
rustup +nightly show
1.3 编译一个Substrate节点
现在已经安装了Rust,并为Substrate
开发配置了Rust工具链,现在可以通过克隆Substrate
节点模板(node template)文件并编译一个Substrate
节点来完成开发环境的设置。
节点模板提供了一个工作环境,其中包括构建区块链所需的所有最常见的特性,无需任何多余的模块或工具。为了确保节点模板为您提供一个相对稳定的工作环境,推荐的最佳实践是从Substrate Developer Hub存储库克隆Substrate
节点模板,而不是从核心的Substrate
存储库克隆。
编译Substrate
节点模板:
1.3.1 使用实例克隆节点模板存储库。
git clone https://github.com/substrate-developer-hub/substrate-node-template
在大多数情况下,您可以克隆main
分支以获得最新的代码。但是,如果希望使用与特定Polkadot版本兼容的Substrate分支,则可以使用--branch
命令行选项。单击Tags查看与特定Polkadot版本兼容的分支列表。
1.3.2 执行如下命令,进入节点模板目录的根目录。
cd substrate-node-template
如果你想保存你的更改并使这个分支易于识别,你可以通过运行类似于下面的命令来创建一个新的分支:
git switch -c my-wip-branch
1.3.3 执行如下命令编译节点模板。
cargo build --release
构建成功完成后,您的本地计算机就可以进行Substrate开发活动了。
1.4 下一步做什么
Substrate
开发人员中心充当访问社区可用的许多资源的中央门户。根据你的兴趣和学习风格,你可能更喜欢某一种途径。例如,如果您更喜欢阅读源代码,并且熟悉Rust
,那么您可能希望从深入研究Rust API开始。
二、入门教程 Get started
入门教程演示了使用基于Substrate
的区块链节点的基础知识,包括如何使节点在对等网络中相互通信,以及如何收集关于节点操作的度量。通常,您应该按照列出的顺序完成教程,因为它们为尝试后面的教程或执行更复杂的任务奠定了基础。后面的教程将加强或扩展在入门教程中学习的基本主题。
- 构建本地区块链向您展示如何在开发环境中设置本地节点并与之交互。
- 模拟网络帮助您使用预定义帐户模拟双节点网络。
- “添加可信节点”演示如何生成密钥和分发链规范,以创建一个小型可信验证器节点网络。
- 授权特定节点说明如何配置具有授权节点和访问受限节点的网络。
- 监视节点指标强调如何利用Substrate公开的节点指标。
- 升级正在运行的网络通过修改正在运行的Substrate节点的运行时来说明无分叉升级。
2.1 建立一个本地区块链
正如您在区块链基础知识中所学到的,区块链由分散的计算机(称为节点, nodes)组成,以形成一个网络。
Substrate提供了一个灵活、开放和可扩展的开发环境,允许您设计和构建完全自定义的区块链节点,以满足您的应用程序或业务模型需求。
2.1.1 开始
成为区块链开发人员的第一步是学习如何编译和启动单个本地区块链节点。在本教程中,您将使用节点模板构建并启动单个节点区块链。
Substrate节点模板提供了一个工作的单节点区块链,您可以在开发环境中本地运行它。节点模板包括几个预定义的组件(例如用户帐户和帐户余额),以便您可以尝试执行常见任务。无需对模板进行任何更改,就可以运行生成块并允许事务处理的功能节点。
启动本地区块链节点后,本教程将说明如何使用Substrate前端模板查看有关区块链活动的信息并提交事务。
2.1.2 这篇教程是给谁看的?
本教程提供了对Substrate的基本介绍,并准备了一个最小的工作开发环境,您可以使用它在其他教程中进一步探索。它适用于任何对学习Substrate和区块链开发感兴趣的人。本教程假设您之前没有基材的经验或知识。你不需要任何编程或区块链经验来完成本教程。这只是第一步,但希望它能激励你继续你的旅程。
2.1.3 你需要多少时间来完成这个教程?
本教程需要编译Rust代码,大约需要一到两个小时才能完成。
2.2 开始之前
在本教程中,您将下载并使用工作代码。在开始之前,请验证以下内容:
- 您有良好的互联网连接,并可以访问本地计算机上的shell终端。
- 您通常熟悉软件开发和使用命令行接口。
- 你一般都熟悉区块链和智能合约平台。
- 您已经安装了Rust,并按照安装中所述设置了开发环境。
2.3 教程的目标
通过完成本教程,您将实现以下目标:
- 编译节点模板,启动本地基于Substrate的区块链。
- 安装前端模板与本地区块链节点交互。
- 使用前端模板提交事务并查看结果。
2.4 编译一个Substrate节点
Substrate节点模板提供了一个工作的开发环境,以便您可以立即开始在Substrate
上进行构建。
如果已在本地编译节点模板,可跳过本节,继续执行“启动本地节点”。
编译Substrate节点模板:见上节 环境安装
2.5 启动本地节点
在编译节点之后,就可以开始使用前端模板研究它的功能了。
启动本地Substrate
节点:
- 打开终端shell。
- 切换到编译
Substrate
节点模板的根目录。 - 以开发模式启动节点。
./target/release/node-template --dev --ws-external
node-template
命令行选项指定您希望运行的节点如何操作。在本例中,--dev
选项指定节点使用预定义的development
链规范以开发模式运行。默认情况下,该选项还会在按Control-c停止节点时删除所有活动数据——例如键、区块链数据库和网络信息。使用--dev
选项可以确保在停止并重新启动节点时保持干净的工作状态。
- 通过检查终端中显示的输出,验证节点已启动并成功运行。
如果finalized
后的数量在增加,您的区块链正在产生新的区块,并就它们所描述的状态达成共识。
我们将在后面的教程中探讨日志输出的细节。现在,重要的是知道节点正在运行并生成块。
- 保持显示节点输出的终端打开以继续。
2.6 安装前端模板
前端模板使用ReactJS渲染web浏览器界面,使您能够与基于Substrate的区块链节点进行交互。您可以使用此前端模板作为将来为自己的项目创建用户界面的起点。
前端模板需要Yarn和Node.js。如果您没有这些工具,请先安装它们。
安装前端模板。
- 在计算机上打开一个新的终端窗口。
- 执行以下命令检查本地是否已安装node。
node --version
如果命令不返回一个版本号,下载并安装节点按照说明使用Node.js网站上的操作系统。节点版本至少应该发掘运行前端模板。
执行以下命令检查本地计算机是否安装了yarn
。
yarn --version
yarn
版本至少为v3才能运行前端模板。如果您安装了较旧的版本,则可以使用yarn version
并指定版本号来更新yarn
。如果该命令没有返回版本号,请执行以下命令下载并安装yarn:
npm install --global yarn
- 克隆前端模板存储库。
git clone https://github.com/substrate-developer-hub/substrate-front-end-template
- 执行如下命令,进入前端模板目录根目录。
cd substrate-front-end-template
- 执行以下命令安装前端模板的依赖项:
yarn install
2.7 启动前端模板
Substrate
前端模板由用户界面组件组成,使您能够与Substrate
节点交互并执行一些常见任务。
使用前端模板:
- 验证当前工作目录是否是安装前端模板的根目录。
- 执行如下命令启动前端模板。
yarn start
- 在浏览器中打开
http://localhost:8000
,查看前端模板。
顶部部分有一个帐户选择列表,用于在想要执行链上操作时选择要使用的帐户。模板的顶部部分还显示有关您所连接的链的信息。
您可能还注意到,前端模板显示了一个带有一些预定义帐户的余额表,其中一些帐户预先配置了资金。您可以使用此示例数据来尝试诸如转移资金之类的操作。
2.8 从帐户转移资金
现在,您已经在本地计算机上运行了区块链节点,并且有了可用于执行链上操作的前端模板,您已经准备好探索与区块链交互的不同方式了。
默认情况下,前端模板包含几个组件,允许您尝试不同的常见任务。对于本教程,您可以执行一个简单的转账操作,将资金从一个帐户转移到另一个帐户。
把钱转到一个帐户:
- 在余额表中,请注意预定义的帐户(例如
dave
),这些帐户没有与之关联的资金。
在Balances 表下,前端模板还显示了一个Transfer
组件。您可以使用此组件将资金从一个帐户转移到另一个帐户。
- 从可用帐户列表中选择
dave
以填充要向其转移资金的地址。 - 指定至少
1000000000000
作为要传输的金额,然后单击Submit
。
- 注意,余额表中的值随着转账而更新。
- 检查
Events
组件以查看与刚刚完成的传输相关的事件。
Substrate
区块链将异步操作的结果报告为事件,因此您可以使用Events组件查看作为传输一部分执行的每个操作的详细信息。例如:
# 此处从 alice 帐户转到 dave
system:ExtrinsicSuccess
[{"weight":{"refTime":"272,785,000","proofSize":"0"},"class":"Normal","paysFee":"Yes"}]
transactionPayment:TransactionFeePaid
["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY","272,785,147","0"]
balances:Transfer
["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY","5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy","3,000,000,000,000"]
balances:Endowed
["5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy","3,000,000,000,000"]
system:NewAccount
["5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy"]
balances:Withdraw
["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY","272,785,147"]
- 当事务完成并包含在一个块中时,您将看到类似以下的确认消息:
2.9 停止本地节点
在成功传输之后,您可以继续探索前端模板组件或停止本地Substrate节点以删除所做的任何状态更改。由于您在启动节点时指定了--dev
选项,因此停止本地节点将停止区块链并清除所有持久块数据,以便下次启动节点时可以以干净的状态启动。
停止本地Substrate节点。
- 返回到显示节点输出的终端shell。
- 按Control-c终止正在运行的进程。
- 验证您的终端返回到
substrate-node-template
目录中的终端提示符。
前端模板包括几个额外的组件,供您在连接到本地开发节点时进行试验。您可以自己探索这些组件或在以下主题中了解更多信息:
- 架构
- 网络和区块链
- 模拟网络
- Submit an issue
- Substrate Stack Exchange