Substrate 基础 -- 教程(Tutorials)

article/2025/8/26 11:27:44

官网

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-devopenssl-devel

1.2 安装所需的包和Rust

1.2.1 在Linux上安装Rust工具链:

例如,在Ubuntu桌面或Ubuntu服务器上,你可能会运行类似如下的命令:

sudo apt install --assume-yes git clang curl libssl-dev llvm libudev-dev make 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节点:

  1. 打开终端shell。
  2. 切换到编译Substrate节点模板的根目录。
  3. 以开发模式启动节点。
./target/release/node-template --dev --ws-external

node-template 命令行选项指定您希望运行的节点如何操作。在本例中,--dev选项指定节点使用预定义的development 链规范以开发模式运行。默认情况下,该选项还会在按Control-c停止节点时删除所有活动数据——例如键、区块链数据库和网络信息。使用--dev选项可以确保在停止并重新启动节点时保持干净的工作状态。

  1. 通过检查终端中显示的输出,验证节点已启动并成功运行。
    在这里插入图片描述

如果finalized 后的数量在增加,您的区块链正在产生新的区块,并就它们所描述的状态达成共识。
我们将在后面的教程中探讨日志输出的细节。现在,重要的是知道节点正在运行并生成块。

  1. 保持显示节点输出的终端打开以继续。

2.6 安装前端模板

前端模板使用ReactJS渲染web浏览器界面,使您能够与基于Substrate的区块链节点进行交互。您可以使用此前端模板作为将来为自己的项目创建用户界面的起点。

前端模板需要Yarn和Node.js。如果您没有这些工具,请先安装它们。

安装前端模板。

  1. 在计算机上打开一个新的终端窗口。
  2. 执行以下命令检查本地是否已安装node。
node --version

如果命令不返回一个版本号,下载并安装节点按照说明使用Node.js网站上的操作系统。节点版本至少应该发掘运行前端模板。

执行以下命令检查本地计算机是否安装了yarn

yarn --version

yarn版本至少为v3才能运行前端模板。如果您安装了较旧的版本,则可以使用yarn version并指定版本号来更新yarn。如果该命令没有返回版本号,请执行以下命令下载并安装yarn:

npm install --global yarn
  1. 克隆前端模板存储库。
git clone https://github.com/substrate-developer-hub/substrate-front-end-template
  1. 执行如下命令,进入前端模板目录根目录。
cd substrate-front-end-template
  1. 执行以下命令安装前端模板的依赖项:
yarn install

2.7 启动前端模板

Substrate前端模板由用户界面组件组成,使您能够与Substrate节点交互并执行一些常见任务。

使用前端模板:

  • 验证当前工作目录是否是安装前端模板的根目录。
  • 执行如下命令启动前端模板。
yarn start
  1. 在浏览器中打开http://localhost:8000,查看前端模板。
    在这里插入图片描述
    顶部部分有一个帐户选择列表,用于在想要执行链上操作时选择要使用的帐户。模板的顶部部分还显示有关您所连接的链的信息。

在这里插入图片描述

您可能还注意到,前端模板显示了一个带有一些预定义帐户的余额表,其中一些帐户预先配置了资金。您可以使用此示例数据来尝试诸如转移资金之类的操作。

2.8 从帐户转移资金

现在,您已经在本地计算机上运行了区块链节点,并且有了可用于执行链上操作的前端模板,您已经准备好探索与区块链交互的不同方式了。

默认情况下,前端模板包含几个组件,允许您尝试不同的常见任务。对于本教程,您可以执行一个简单的转账操作,将资金从一个帐户转移到另一个帐户。

把钱转到一个帐户:

  1. 在余额表中,请注意预定义的帐户(例如dave),这些帐户没有与之关联的资金。

在这里插入图片描述
在Balances 表下,前端模板还显示了一个Transfer组件。您可以使用此组件将资金从一个帐户转移到另一个帐户。

  1. 从可用帐户列表中选择dave以填充要向其转移资金的地址。
  2. 指定至少1000000000000作为要传输的金额,然后单击Submit
    在这里插入图片描述
  3. 注意,余额表中的值随着转账而更新。
    在这里插入图片描述
  4. 检查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"]
  1. 当事务完成并包含在一个块中时,您将看到类似以下的确认消息:
    在这里插入图片描述

2.9 停止本地节点

在成功传输之后,您可以继续探索前端模板组件或停止本地Substrate节点以删除所做的任何状态更改。由于您在启动节点时指定了--dev 选项,因此停止本地节点将停止区块链并清除所有持久块数据,以便下次启动节点时可以以干净的状态启动。

停止本地Substrate节点。

  1. 返回到显示节点输出的终端shell。
  2. 按Control-c终止正在运行的进程。
  3. 验证您的终端返回到substrate-node-template目录中的终端提示符。

前端模板包括几个额外的组件,供您在连接到本地开发节点时进行试验。您可以自己探索这些组件或在以下主题中了解更多信息:

  • 架构
  • 网络和区块链
  • 模拟网络
  • Submit an issue
  • Substrate Stack Exchange

http://chatgpt.dhexx.cn/article/ksdtPI5w.shtml

相关文章

【Android 逆向】substrate 框架 ( substrate 简介 | substrate 相关文档资料 )

文章目录 一、substrate 简介二、substrate 相关文档资料 一、substrate 简介 substrate 官网 : http://www.cydiasubstrate.com substrate 框架 是 Cydia 下的逆向工具 , 该框架是开源的 ; substrate 配合对应的 so 动态库 和 头文件 , 可以在 Android / iOS 平台中独立运行 …

ios tableView那些事(三)给tableView添加些图片

感觉光有数据的tableView很丑&#xff0c;那么我们就来美化下吧&#xff0c;加一些图片 #import <UIKit/UIKit.h> /*tableview 一定要用到这两个delegate UITableViewDataSource,UITableViewDelegate */ interface ViewController :UIViewController <UITableViewDa…

QT的TableView实现多级表头

QT的TableView实现多级表头 最近项目需要支持多级表头&#xff0c;QT本身不支持。可重写QHeaderView表头实现。 demo如下&#xff1a; FSItemDelegate.h #pragma once/* 自定义委托类 */ #include <QItemDelegate> #include <QSpinBox> #include <QDoubleSpin…

QML类型:TableView

一、描述 TableView 显示从内置 QML 类型&#xff08;如 ListModel 和 XmlListModel&#xff09;创建的模型中的数据&#xff0c;这些模型仅填充 TableView 中的第一列。要创建具有多列的模型&#xff0c;请使用 TableModel 或继承 QAbstractItemModel 的 C 模型。 TableView…

QML TableView表格使用示例

前言 QML中实现表格可以使用多种方式&#xff0c;比如直接使用ListView&#xff0c;定义每一行delegate&#xff0c;或者自定义Rectangle&#xff0c;放到Flipable中组合使用。Qt Quick Control1中 从5.1版本开始就提供了表格控件&#xff0c;但是感觉不怎么好用&#xff0c;在…

Qt TableView的简单使用

软件环境&#xff1a; ubuntu -------------------------------------------------------------------------------------------------------- 最终效果图&#xff1a; --------------------------------------------------------------------------------------------------…

PyQt5 TableView组件

一、话不多说&#xff0c;先看图 本次要实现的是主窗口内添加widget组件&#xff0c;widget内设置成垂直盒布局&#xff0c;然后在布局中添加tableView、PushButton组件 二、看main函数 if __name__ __main__:app QApplication(sys.argv)# 现在这创建 主窗口 &#xff08;不然…

优雅的开发TableView

前言 UITableView&#xff08;UITableViewController&#xff09;是iOS开发使用频率最高的一个组件。 不管是使用UITableView还是还是UITableViewController&#xff0c;在开发的时候&#xff0c;我们都需要实现两个协议&#xff1a; UITableViewControllerDataSourceUITabl…

JavaFX控件——TableView

在JavaFX 应用中对创建表格最重要的是TableView, TableColumn和TableCell这三个类。 你可以通过实现数据模型&#xff08;data model&#xff09; 和 实现 单元格工厂(cell factory) 来填充表格。 表格类提供了表格列嵌入式的排序能力和必要时调整列宽度的功能。 下面开始学…

ios开发:多个Section的TableView

开发多个Section的tableView。 首先应该考虑到数据源该如何得到 我们这里可以通过两种方式:第一种是读取plist文件。第二种是通过代码进行数据存储以及读取。 多个Section需要的数据源是一个字典&#xff0c;字典里的内容是一个数组。在plist文件中可以这样去创建 在.h文件中…

tableview概述

转自&#xff1a;http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html                 下面分9个方面进行介绍&#xff1a; 一、UITableView概述 UITableView继承自UIScrollView&#xff0c;可以表现为Plain和Grouped两种风格&#xff0c;分…

ios tableView那些事(一)创建一个简单的tableView

工作也有半年多了&#xff01;几乎每个项目中的会用到tableview这个神奇而好用的控件&#xff0c;在学习和工作中都会看别人的博客&#xff01;对我有很大的帮助&#xff0c;就如同站在巨人的肩膀上的感觉吧 哈哈&#xff01;于是决定重新开始写博客&#xff0c;希望能帮助像我…

JavaFX TableView和ListView的点击事件

项目场景&#xff1a; 最近在用JavaFX做一个简易的商城界面&#xff0c;大概想实现这样的功能&#xff1a; 左边显示用户的最近五个购买的产品 使用ListView 点击ListView的项目会定位到相应的tablerow位置 方便用户快速查找中间显示所有可用产品 使用TableView 双击tablerow…

JavaFX【TableView使用详解】

目录 概述 组件 Student ObservableList TableView setCellValueFactory() TableColumn 1. Callback 2. PropertyValueFactory 增加到末行 1、tableView.getItems().add(Student s) 2、list.add(Student s) 删除指定行 1、tableView.getItems().remove(int i) 2、…

QT中TableView数据展示

QT中TableView数据展示 最近在学习QT,大量数据从数据库取出放入QT界面中展示&#xff0c;这时用到了tableView&#xff0c;一些简单的使用分享给大家。 创建数据模型 QStandardItemModel *modelnew QStandardItemModel(); QStandardItemModel是Qt库中的一个类&#xff0c;它…

JAVAFX的TableView基本用法

JAVAFX中的表格显示主要使用TableView 与TableView相关的类: TableColumn TableRow TableCell TablePosition TableViewFocusModel TableViewSelectionModel JavaFX TableView例子: import javafx.application.Application; import javafx.scene.Scene; import javafx.scene…

QT之Tableview

想要了解更多的tableview可以看这位博客Qt深入浅出&#xff08;十五&#xff09;QTableView​ 这里做了一个简单的学生系统查询功能显示Tableview&#xff1a; 表格视图控件QTableView&#xff0c;需要和QStandardItemModel, 配套使用&#xff0c;这套框架是基于MVC设计模式设…

QML TableView 使用详解

目录 一、—个简单的TableView实例 二、TableViewColumn 属性讲解 三、定制表格外观 3.1 itemDelegate3.2 rowDelegate3.3 headerDelegate3.4 定制表格外观后的示例 四、动态增删改查 TabelView TableView 就是 Qt Quick 为表格式呈现数据提供的组件。想必兄台用过 Excel…

QT控件之(TableView)的居中效果

T将tableView中的表头以及文本内容都进行居中处理 1、需要在构造函数中增加一句&#xff1a; //以下增加的是表头的效果 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//布局排版是全部伸展开的效果2、就是直接对tableView的文本内…

QML学习十七:TableView的简单使用

若该文为原创文章&#xff0c;转载请注明原文出处 一、TableView TableView是Qt Quick为表格式呈现数据提供的组件。 TableView与ListView类似&#xff0c;相比之下多了滚动条、挑选、可调整尺寸的表头等特性&#xff0c;数据也是通过Model来提供&#xff0c;此篇使用的是内建…