Substrate 基础 -- 教程(Tutorials)

news2024/11/13 10:10:59

官网

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 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://www.coloradmin.cn/o/378105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx面试问题总结

1. 什么是Nginx?Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如&#xff1a…

阿里淘宝新势力造型合伙人P8、年薪百万的欧阳娜娜也躲不过的魔鬼面试,看的我心服口服

阿里淘宝新势力造型合伙人P8、年薪百万的欧阳娜娜跳槽了,这不是关键。 她参加了网易有道明星语音录音员/代言人的面试,这也不是关键。 关键是她教科书式的面试过程,狠狠地给我们上了一课。 我是无意间刷到的这个视频的时候,就一…

u盘文件夹空的但u盘内存显示满的,怎么找回文件?

最近,我朋友抱怨自己的u盘满了,但是文件夹却是空空如也。他焦急地问我,这到底是怎么回事?我给他分析了一些常见的原因。首先,可能是因为u盘感染了病毒,将文件夹里面的文件隐藏了;其次&#xff0…

9大插件,21张配图,编码路上助你起飞

大家好,我是阿Q,很高兴又跟大家见面了。 看过我以往文章的小伙伴可能会发现,我的大部分文章都偏向于实战。我的文章风格也是先理论后实战,有了落地的理论才能帮助大家更好的理解。 最近有好多小伙伴后台私信我,问我有…

你问我答|虚拟机、容器和无服务器,怎么选?

在新技术层出不穷的当下,每家企业都希望不断降低成本,并提高运营效率,一个方法就是寻找不同的技术方案来优化运营。      例如,曾经一台服务器只能运行一个应用(裸机);接着,一台服务器的资源可以划分为多个块,从而运行多个应用(虚拟化);再到后来,应用越来越多,为了方便它们…

【牛客刷题专栏】0x0E:JZ6 从尾到头打印链表(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录前言问题…

互联网衰退期,测试工程师35岁之路怎么走...

国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…

Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送

技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平台下的RTMP推流、RTMP、RTSP播放前几年已经覆盖了Windows、Linux、Android、i…

华为OD机试题,用 Java 解【内存资源分配】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

蓝蓝算法二期工程day3,一万年太久,只争朝夕

思路: 最好想的是用hashmap,当然用c的话也可以用两个数组,一个数组用于存放字符串,自动对应ACSII码,一个将对应ACSII码的数字对应其下标,当然这也是用的映射的思想。 import java.util.*;public class Cac…

【蓝桥杯选拔赛真题38】python目标值判断 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python目标值判断 一、题目要求 1、编程实现 2、输入输出 二、解题思路

47个SQL性能优化技巧,看到就是赚到

1、先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化。 (1)客户端发送一条查询语句到服务器; (2)服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的…

Linux 内核 container_of 宏详解

目录 前言 1、container_of 宏介绍 2、container_of 宏的使用示例 3、container_of 宏实现原理分析 3.1 结构体在内存中的存储 3.2 计算成员变量在结构体内的偏移 3.3 container_of 宏的原理实现 4、总结 前言 本章内容会涉及到的基础知识有 typeof关键字 和 语句表达…

django-博客(一)

一、 1、环境:pycharm,python3.6,django3,mysql8.0 2、创建项目 3、把html和css样式那些导入到文件夹中,​​​​​​然后配置这些文件夹的路径,再添加首页视图。 改成反向解析 python manage.py runserv…

ElasticSearch 学习笔记总结(三)

文章目录一、ES 相关名词 专业介绍二、ES 系统架构三、ES 创建分片副本 和 elasticsearch-head插件四、ES 故障转移五、ES 应对故障六、ES 路由计算 和 分片控制七、ES集群 数据写流程八、ES集群 数据读流程九、ES集群 更新流程 和 批量操作十、ES 相关重要 概念 和 名词十一、…

熵,线性规划,半监督自监督聚类打标签

1.熵 信息熵是消除不确定性所需信息量的度量。 信息熵就是信息的不确定程度,信息熵越小,信息越确定。 对象的信息熵是正比于它的概率的负对数的,也就是 I©−log(pc) 其中n为事件的所有可能性。 为什么使用交叉熵?在机器学习…

分析设备故障时间和次数,打破生产瓶颈?包在虹科身上

前言 生产设备的稳定性和可靠性是保证企业正常生产的重要条件之一,设备故障的频发严重影响企业的正常生产,那么如何分析设备故障时间和次数,查找设备故障原因,协助企业打破生产瓶颈,有效地实现生产目标呢?…

面试总结——react生命周期

react生命周期总结 生命周期主要分为以下几个阶段: Mounting:创建虚拟DOM,渲染UI(初始化)Updating:更新虚拟DOM,重新渲染UI;(更新)UnMounting:删除虚拟DOM,移除UI;(销毁) 生命周期…

docker-compose安装kafka和php简单测试

docker-compose.yml内容: version: 3.1 services: zookeeper: container_name: zookeeper image: zookeeper:3.6 ports: - 2181:2181 kafka: image: wurstmeister/kafka container_name: kafka depends_on: - zookeeper …

java基础系列(八) synchronized关键字

一. 认识synchronized 先看一下如下Demo public class Test {public static void main(String[] args) {Count obj new Count();//only one objectMyThread1 t1 new MyThread1(obj);MyThread2 t2 new MyThread2(obj);t1.start();t2.start();} }class MyThread2 extends Th…