10M polkadot substrate : 你的第一份合约

article/2025/8/26 8:17:33

• 介绍
• 教程目标
• 更新你的 Rust 环境
• 安装 Substrate 合约节点
• 创建一个新的智能合约项目
• 测试默认合约
• 建立合同
• 启动 Substrate 智能合约节点
• 部署合约
• 在区块链上创建实例
• 调用智能合约
• Substrate Tutorials , Substrate 教程
• Contact 联系方式

• 介绍

正如您在区块链基础知识中了解到的那样,去中心化应用程序最常被编写为智能合约。尽管 Substrate 主要是用于构建自定义区块链的框架和工具包,但它也可以为智能合约提供平台。本教程演示了如何构建一个基本的智能合约以在基于 Substrate 的链上运行。在本教程中,您将探索使用墨水!作为编写基于 Rust 的智能合约的编程语言。

• 教程目标

通过完成本教程,您将实现以下目标:

了解如何创建智能合约项目。
使用墨水构建和测试智能合约!智能合约语言。
在本地 Substrate 节点上部署智能合约。
通过浏览器与智能合约交互。

• 更新你的 Rust 环境

对于本教程,您需要将一些 Rust 源代码添加到您的 Substrate 开发环境中。

要更新您的开发环境:

• 在您的计算机上打开终端外壳。
• 切换到编译 Substrate 节点模板的根目录。
• 通过运行以下命令更新您的 Rust 环境:

rustup component add rust-src --toolchain nightly

• 通过运行以下命令验证您是否安装了 WebAssembly 目标:

rustup target add wasm32-unknown-unknown --toolchain nightly

• 安装 Substrate 合约节点

为了简化本教程,您可以下载适用于 Linux 或 macOS 的预编译 Substrate 节点。默认情况下,预编译的二进制文件包括智能合约的 FRAME 托盘。或者,您可以通过在本地计算机上contracts-node运行来手动构建预配置。cargo install contracts-node

如果无法下载预编译的节点,可以使用类似如下的命令在本地编译:

cargo install contracts-node --git https://github.com/paritytech/substrate-contracts-node.git --tag <latest-tag> --force --locked

• 创建一个新的智能合约项目

您现在已准备好开始开发新的智能合约项目。

为智能合约项目生成文件:

• 在您的计算机上打开终端外壳。
• flipper通过运行以下命令创建一个名为的新项目文件夹:

cargo contract new flipper

• 通过运行以下命令切换到新的项目文件夹:

cd flipper/

• 测试默认合约

在lib.rs源代码文件的底部,有简单的测试用例来验证合约的功能。您可以使用链下测试环境测试此代码是否按预期运行。

测试合约:

• 如果需要,在您的计算机上打开终端外壳。
• 如果需要,请验证您是否位于flipper项目文件夹中。
• 通过运行以下命令,使用test子命令和nightly工具链执行合约的默认测试:flipper

cargo +nightly test

该命令应显示类似于以下内容的输出,以指示测试成功完成:

running 2 tests
test flipper::tests::it_works ... ok
test flipper::tests::default_works ... oktest result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

• 建立合同

测试默认合约后,您就可以将此项目编译为 WebAssembly。

为这个智能合约构建 WebAssembly:

• 如果需要,在您的计算机上打开终端外壳。
• 验证您是否位于flipper项目文件夹中。
• flipper通过运行以下命令编译智能合约:

cargo +nightly contract build

此命令为项目构建 WebAssembly 二进制flipper文件、包含合约应用程序二进制接口 (ABI) 的元数据文件以及.contract用于部署合约的文件。例如,您应该看到类似于以下的输出:

• 启动 Substrate 智能合约节点

如果您已成功安装substrate-contracts-node,您可以为您的智能合约启动一个本地区块链节点。

要启动预配置contracts-node:

• 如果需要,在您的计算机上打开终端外壳。
• 通过运行以下命令以本地开发模式启动contracts节点:

substrate-contracts-node --dev

• 在 Web 浏览器中导航到Contracts UI ,然后单击Yes allow this application access。
• 选择本地节点。

• 部署合约

然而,在 Substrate 上部署智能合约与在传统智能合约平台上部署有点不同。对于大多数智能合约平台,您必须在每次进行更改时部署全新的智能合约源代码块。例如,标准 ERC20 代币已被部署到以太坊数千次。即使更改很小或仅影响某些初始配置设置,每次更改都需要完全重新部署代码。每个智能合约实例消耗相当于完整合约源代码的区块链资源,即使实际上没有更改任何代码。

在 Substrate 中,合约部署过程分为两个步骤:

• 将合约代码上传到区块链。
• 创建合约实例。

上传合约代码
在本教程中,您将使用 Contracts UI 前端flipper在 Substrate 链上部署合约。

上传智能合约源代码:

• 在 Web 浏览器中打开合同 UI 。
• 确认您已连接到本地节点。
• 单击添加新合同。
• 点击上传新合同代码。
• 选择用于创建合约实例的账户。

您可以选择任何现有帐户,包括预定义帐户,例如alice.

• 输入智能合约的描述性名称,例如 Flipper Contract。
• 浏览并选择或拖放flipper.contract包含捆绑的 Wasm blob 和元数据的文件到上传部分。
image

• 在区块链上创建实例

智能合约作为 Substrate 区块链上账户系统的扩展存在。当您创建此智能合约的实例时,Substrate 会创建一个新AccountId的来存储智能合约管理的任何余额并允许您与合约进行交互。

上传智能合约并单击Next后,Contracts UI 会显示有关智能合约内容的信息。

创建实例:

• 查看并接受智能合约初始版本的默认部署构造函数选项。
• 查看并接受默认的Max Gas Allowed。200000
image

• 单击下一步。

事务现在已排队。如果您需要进行更改,您可以单击返回来修改输入。
image

• 单击上传并实例化。

根据您使用的帐户,系统可能会提示您输入帐户密码。如果您使用预定义帐户,则无需提供密码。
image

• 调用智能合约

现在您的合约已经部署在区块链上,您可以与它进行交互。默认的 Flipper 智能合约有两个功能-flip()并且get()- 您可以使用 Contracts UI 来试用它们。

获取()函数
您将合约的初始值设置为实例化合约时flipper的值。您可以使用该函数来验证当前值为。valuefalseget()false

测试get()功能:

• 从帐户列表中选择任何帐户。

• 本合同没有限制谁可以发送get()请求。

• 从Message to Send列表中选择get(): bool 。
• 点击阅读。
• 验证false调用结果中是否返回了该值。
image

测试 flip()函数
该flip()函数将值从 更改false为true。

测试flip()功能:

• 从帐户列表中选择任何预定义的帐户。

• 该flip()函数是一个改变链状态的交易,需要一个有资金的账户来执行调用。因此,您应该选择具有预定义帐户余额的帐户,例如alice帐户。

• 从要发送的消息列表中选择翻转() 。
• 单击呼叫。
• 在调用结果中验证事务是否成功。
• 验证新值是否true在调用结果中。
image

• Substrate Tutorials , Substrate 教程

CN 中文 Github Substrate 教程 : github.com/565ee/Substrate_CN
CN 中文 CSDN Substrate 教程 : blog.csdn.net/wx468116118
EN 英文 Github Substrate Tutorials : github.com/565ee/Substrate_EN
EN 英文 dev.to Substrate Tutorials : dev.to/565ee

• Contact 联系方式

Homepage : 565.ee
微信公众号 : wx468116118
微信 QQ : 468116118
GitHub : github.com/565ee
CSDN : blog.csdn.net/wx468116118
Email : 468116118@qq.com


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

相关文章

substrate轻松学2:区块链与substrate

从2008年中本聪发布《比特币&#xff1a;一种点对点的电子现金系统》开始&#xff0c;区块链技术开始进入我们的世界&#xff0c;区块链防篡改、去信任等等概念更是被炒的热火朝天。那么什么是区块链&#xff0c;它能做什么&#xff1f;到底有没有前途&#xff1f;这不是我们这…

创建第一个 Substrate 区块链

创建第一个 Substrate 区块链 区块链软件使单个计算机&#xff08;称为节点&#xff09;能够相互通信以形成分散的点对点 (P2P) 网络。为保证链上数据的安全和链上的持续进展&#xff0c;节点通过某种形式的共识&#xff0c;就每个数据块中的数据状态以及块的处理顺序达成一致…

技术干货|通过 Substrate - IBC 实现 Substrate 资产跨链

全长 2760 字&#xff0c;预计阅读 10 分钟 作者&#xff1a;DaviRain 撰文&#xff1a;MiX 微信交流&#xff1a;MixMetaverse 章鱼网络 DaviRain 受邀参加 RUST.CC 中国大会&#xff0c;分享主题为《通过 Substrate - IBC 实现 Substrate 资产跨链》的 Workshop。主要讨论了…

Substrate之旅4:基于Substrate私有链的搭建

参考&#xff1a;https://docs.substrate.io/tutorials/v3/private-network/ 实现目标 这里我们学习&#xff1a; 如何基于Substrate来构成一个两节点的链网络。如何配置使用Aura的共识机制。如何定制账户&#xff0c;并设置其为Aura的Validator。 启动两个节点的链网络 确…

cydia java_Cydia Substrate 使用

前言 我们以前介绍过Xposed&#xff0c;这个只可以Hook java层&#xff0c;如果要hook native层就要使用InlineHook了&#xff0c;以前的文章都有提到。今天介绍一个既可以Hook java层又可以Hook native层的框架&#xff0c;就是Cydia Substrate。 环境 安装Cydia Substrate ap…

10E polkadot substrate : 配置合约托盘

• 介绍 • 添加托盘依赖项 • 实现 Contracts 配置特征 • 公开合约 API • 更新外部节点 • 启动本地 Substrate 节点 • Substrate Tutorials , Substrate 教程 • Contact 联系方式 • 介绍 如果您完成了构建本地区块链教程&#xff0c;那么您已经知道 Substrate节点模板…

Substrate之旅2:Substrate开发环境搭建

我们将基于Ubuntu 18.04来安装Substrate的开发环境。 我这边Ubuntu是安装在VMWorkstation虚拟机上的。 安装依赖 安装参考&#xff1a;https://docs.substrate.io/tutorials/v3/create-your-first-substrate-chain/#install-rust-and-the-rust-toolchain 但具体的操作步骤&…

认识substrate

了解substrate 前言从互联网发展看区块链未来--跨链跨链是未来 公链和联盟链可交互的联盟链polkadot组件substrate介绍区块链的构造组件substrate开发的特性 polkadot :substrate 之上建立如何通过substrate构造自己的链一键链上升级--永不分叉为什么需要链上升级 substrate与企…

CydiaSubstrate框架

往期推荐 Frida Native层HOOK Frida hook Java层 frida环境安装 Xposed框架安装、使用及插件开发 需要相关资料的朋友&#xff0c;可以【[加入此处即可打包获取]】 Cydia Substrate是一个基于Hook的代码修改框架&#xff0c;可以在Android、iOS平台使用&#xff0c;并实现…

创建Substrate 私有网络

创建Substrate 私有网络 所有区块链都要求网络中的节点就消息集及其顺序达成一致&#xff0c;以成功创建区块并从一个区块推进到下一个区块。每个块代表特定时间点的数据状态&#xff0c;节点对状态的一致称为共识。有几种不同的算法用于达成共识&#xff0c;包括&#xff1a;…

Build the Substrate Kitties Chain(中文翻译)

欢迎来到Substrate Kitties课程。 本课程将向您介绍如何构建一个可以创建并持有非同质化代币&#xff08;NFT&#xff0c;这个NFT名称为Substrate Kitties&#xff09;的区块链。课程分为部2部分&#xff1a; Part I 描述如何构建Kitties pallet&#xff0c;以及这个pallet怎样…

oracle substrate,Substrate 2.0 带来了哪些改变?

Substrate 已到了 2.0 版本的主要里程碑处。该区块链框架现在包含链下工作机(off-chain workers)和 70 多个可组合模块&#xff0c;并为构建优化的、与 Polkadot 兼容的、可投入生产的区块链奠定了坚实的基础。数十个实时区块链已经在运行 Substrate 2.0&#xff0c;包括Polkad…

Substrate 基础教程(Tutorials) -- 授权特定节点

五、授权特定节点 在添加可信节点中&#xff0c;您看到了如何使用一组已知的验证器节点构建一个简单的网络。该教程演示了一个简化版的许可网络&#xff08;permissioned network&#xff09;。在一个被许可的网络中&#xff0c;只有被授权的节点&#xff08;authorized nodes…

Substrate常见问题

目录标题 1. Rust nightly not installed, please install it!2. Rust WASM toolchain not installed, please install it!3. use pallet::*出错4. failed to load manifest for workspace member5. error: failed to run custom build command for node-template-runtime v4.0…

什么是 Substrate

如果你关注了 Polkadot 项目&#xff0c;可能会多次看到「Substrate」这个词。 它是 Polkadot 项目的重要组成部分&#xff0c;但有关它的信息非常少。 白皮书或黄皮书里找不到&#xff0c; 至少没有专门的介绍「Substrate」。 从较高的层面来看&#xff0c;Substrate 是一个可…

Substrate之旅3:Substrate是什么

Substrate 是从Polkadot 孵化出来的项目。它是一个用来搭建区块链的通用框架&#xff0c;具有以下特点&#xff1a; 可扩展。模块化。开源。 Substrate的框架与组件 框架 其中&#xff1a; P2P: libp2p网络协议&#xff0c;Substrate基于该协议实现了一个不带任何假设的&…

Substrate 基础 -- 教程(Tutorials)

官网 github DOC 面向未来的区块链框架 Substrate 使开发人员能够快速、轻松地构建适合任何用例的未来 证明区块链(future proof blockchains)。 Substrate 文档包括区块链构建器&#xff08;blockchain builders&#xff09;和parachain 项目团队的概念、过程和参考信息。…

【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…