长安链智能合约命令解析(全集)
创建命令解析
./cmc client contract user create \
--contract-name=fact \
--runtime-type=WASMER \
--byte-code-path=./testdata/claim-wasm-demo/rust-fact-2.0.0.wasm \
--version=1.0 \
--sdk-conf-path=./testdata/sdk_config.yml \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt \
--sync-result=true \
--params="{}"
这个命令是使用 ChainMaker 的客户端工具 cmc
来部署一个名为 fact
的智能合约。以下是各参数的详细解析:
命令功能
部署一个 WASM 格式的智能合约(fact
),并指定相关配置和权限。
参数解析
参数 | 说明 |
---|---|
./cmc client contract user create | 使用 cmc 工具创建用户合约。 |
--contract-name=fact | 设置合约名称为 fact 。 |
--runtime-type=WASMER | 合约运行环境为 WASMER(支持 WASM 字节码)。 |
--byte-code-path=./testdata/claim-wasm-demo/rust-fact-2.0.0.wasm | 指定 WASM 字节码文件路径(Rust 编译的智能合约)。 |
--version=1.0 | 合约版本号为 1.0 。 |
--sdk-conf-path=./testdata/sdk_config.yml | 指定 SDK 配置文件路径(包含节点连接信息)。 |
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,... | 管理员私钥文件路径(需多个组织的管理员签名)。 |
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,... | 管理员证书文件路径(与私钥对应,用于验证身份)。 |
--sync-result=true | 同步等待交易执行结果(阻塞直到合约部署完成)。 |
--params="{}" | 合约初始化参数(本例为空 JSON {} )。 |
关键点说明
-
多组织签名
-
需要 3 个组织(org1、org2、org3) 的管理员私钥和证书共同签名(ChainMaker 的共识策略要求)。
-
私钥(
.key
)和证书(.crt
)文件必须匹配。
-
-
WASM 合约
-
合约字节码为 Rust 编译的
rust-fact-2.0.0.wasm
,需提前准备好。 -
支持其他语言(如 C++),但需编译为 WASM 格式。
-
-
SDK 配置
-
sdk_config.yml
需配置正确的节点 RPC 地址和证书路径,例如:chain_client:org_id: "wx-org1.chainmaker.org"nodes:- host: "127.0.0.1"port: 12301
-
-
权限控制
-
只有指定的管理员(
admin1
)可以部署合约,确保安全性。
-
常见问题
-
权限不足
-
确保私钥和证书文件路径正确,且文件未被损坏。
-
检查
sdk_config.yml
中的org_id
是否与证书匹配。
-
-
WASM 加载失败
-
确认
rust-fact-2.0.0.wasm
文件存在且可读。 -
验证 WASM 字节码是否完整(可通过
wasm-validate
工具检查)。
-
-
./cmc client contract user create ... --verbose
交易超时
-
如果
--sync-result=true
时卡住,可能是网络问题或节点未启动。检查节点日志:tail -f ./log/system.log
-
等效的链上操作
此命令实际会向链上发送一笔 部署合约的交易,经过共识后,合约被写入区块链。成功后可通过以下命令查询合约:
./cmc client contract user get \
--contract-name=fact \
--sdk-conf-path=./testdata/sdk_config.yml
如果需要进一步调试,可以添加 --verbose
参数查看详细日志:
调用命令解析
./cmc client contract user invoke \
--contract-name=fact \
--method=save \
--sdk-conf-path=./testdata/sdk_config.yml \
--params="{\"file_name\":\"name007\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"6543234\"}" \
--sync-result=true
这个命令使用 ChainMaker 的客户端工具 cmc
调用已部署的智能合约 fact
的 save
方法,并传入参数。以下是详细解析:
命令功能
调用合约 fact
的 save
方法,保存文件信息(文件名、哈希、时间戳),并同步等待执行结果。
参数解析
参数 | 说明 |
---|---|
./cmc client contract user invoke | 使用 cmc 调用用户合约方法。 |
--contract-name=fact | 指定目标合约名称为 fact (需已部署)。 |
--method=save | 调用合约中的 save 方法(由合约开发者定义)。 |
--sdk-conf-path=./testdata/sdk_config.yml | 指定 SDK 配置文件路径(包含节点连接信息)。 |
--params="{\"file_name\":\"name007\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"6543234\"}" | 传入 JSON 格式参数: - file_name : 文件名(name007 )- file_hash : 文件哈希值(ab3456df... )- time : 时间戳(6543234 ) |
--sync-result=true | 同步等待交易执行结果(阻塞直到链上确认)。 |
关键点说明
-
合约方法
save
-
该方法是合约开发者预先定义的,功能可能是将文件信息存储到链上。
-
需确保合约
fact
已部署,且包含save
方法。
-
-
参数格式
-
参数为 JSON 字符串,需严格转义(如
\"
)。 -
参数名(如
file_name
)必须与合约代码中的输入参数一致。
-
-
同步调用
-
--sync-result=true
会等待交易上链并返回结果,适合需要即时确认的场景。 -
若设为
false
,则异步调用(仅返回交易 ID)。
-
-
权限要求
-
默认使用
sdk_config.yml
中配置的身份发起交易(需有合约写权限)。
-
示例合约代码(Rust 参考)
假设 fact
合约的 save
方法如下(WASM 合约):
#[chainmaker_contract::contract] pub trait Fact {fn save(&self, file_name: String, file_hash: String, time: String) -> Result<(), ContractError> {// 存储逻辑(如写入链上状态)self.ctx.put_state("file_name", &file_name)?;self.ctx.put_state("file_hash", &file_hash)?;self.ctx.put_state("time", &time)?;Ok(())} }
常见问题
-
参数错误
-
若 JSON 格式错误(如缺少引号),会直接报错。
-
若参数名或类型与合约不匹配,合约执行时会失败。
-
-
合约未部署
-
错误信息类似:
contract not found: fact
。需先部署合约。
-
-
权限不足
-
确保
sdk_config.yml
中的身份有权限调用该合约方法。
-
验证调用结果
-
直接输出
命令执行成功后,会返回交易回执(包含交易哈希、区块高度等)。 -
查询链上数据
可通过以下命令查询存储结果:./cmc client contract user get \ --contract-name=fact \ --method=get_file \ # 假设合约有查询方法 --sdk-conf-path=./testdata/sdk_config.yml \ --params="{\"file_name\":\"name007\"}"
异步调用示例
如果不需要即时确认,可改为异步:
./cmc client contract user invoke \ --contract-name=fact \ --method=save \ --sdk-conf-path=./testdata/sdk_config.yml \ --params="{\"file_name\":\"name007\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"6543234\"}" \ --sync-result=false
此时返回的是 tx_id
,可通过交易哈希后续查询状态。
查询命令解析
这个命令使用 ChainMaker 的 cmc
客户端工具查询智能合约 fact
的 find_by_file_hash
方法,通过文件哈希值检索链上存储的数据。以下是详细解析:
命令功能
调用合约 fact
的 查询方法 find_by_file_hash
,根据文件哈希值 ab3456df5799b87c77e7f88
获取链上存储的对应文件信息。
参数解析
参数 | 说明 |
---|---|
./cmc client contract user get | 使用 cmc 查询合约状态(只读操作,不上链)。 |
--contract-name=fact | 指定目标合约名称为 fact (需已部署)。 |
--method=find_by_file_hash | 调用合约中的查询方法 find_by_file_hash 。 |
--sdk-conf-path=./testdata/sdk_config.yml | 指定 SDK 配置文件路径(包含节点连接信息)。 |
--params="{\"file_hash\":\"ab3456df5799b87c77e7f88\"}" | 传入 JSON 格式参数: - file_hash : 要查询的文件哈希值。 |
关键点说明
-
查询方法特性
-
find_by_file_hash
是合约开发者定义的只读方法,通常用于检索链上数据(不会修改状态)。 -
与
invoke
不同,get
操作无需共识,直接返回节点本地存储的结果。
-
-
参数要求
-
参数
file_hash
必须与合约代码中的输入参数名一致。 -
哈希值需完全匹配(区分大小写)。
-
-
返回结果
-
返回格式取决于合约实现,通常为 JSON 字符串,例如:
{"file_name": "name007","time": "6543234","owner": "org1" }
-
-
权限要求
-
查询操作一般不需要管理员权限,但需确保
sdk_config.yml
中的身份有合约读权限。
-
示例合约代码(Rust 参考)
假设 fact
合约的 find_by_file_hash
方法如下:
#[chainmaker_contract::contract] pub trait Fact {fn find_by_file_hash(&self, file_hash: String) -> Result<String, ContractError> {// 从链上状态读取数据let file_name: String = self.ctx.get_state("file_name", &file_hash)?;let time: String = self.ctx.get_state("time", &file_hash)?;// 返回 JSON 格式结果Ok(format!(r#"{{"file_name":"{}","time":"{}"}}"#,file_name, time))} }
常见问题
-
合约方法未定义
-
若报错
method not found: find_by_file_hash
,需检查合约是否部署了该方法。
-
-
参数格式错误
-
确保 JSON 中的引号转义正确(如
\"
)。
-
-
无查询结果
-
若返回空,可能是文件哈希不存在或未调用过
save
方法存储数据。
-
扩展用法
-
查询其他字段
如果合约支持,可通过不同参数查询:--params="{\"file_name\":\"name007\"}"
-
批量查询
需合约提供批量查询方法(如find_all
),并调整参数格式。 -
结合 SDK 使用
在 Go/Python 应用中集成 SDK,以编程方式调用查询接口。
输出示例
成功执行后,终端可能返回如下结果:
{"code": 0,"message": "success","contract_result": {"result": "{\"file_name\":\"name007\",\"time\":\"6543234\"}"} }
如果需要进一步处理返回数据,可以使用 jq
工具解析 JSON:
./cmc client contract user get ... | jq -r '.contract_result.result'
相关文章:

长安链智能合约命令解析(全集)
创建命令解析 ./cmc client contract user create \ --contract-namefact \ --runtime-typeWASMER \ --byte-code-path./testdata/claim-wasm-demo/rust-fact-2.0.0.wasm \ --version1.0 \ --sdk-conf-path./testdata/sdk_config.yml \ --admin-key-file-paths./testdata/cryp…...

一、OpenCV的基本操作
目录 1、OpenCV的模块 2、OpenCV的基础操作 2.1图像的IO操作 2.2绘制几何图形 2.3获取并修改图像中的像素点 2.4 获取图像的属性 2.5图像通道的拆分与合并 2.6色彩空间的改变 3、OpenCV的算数操作 3.1图像的加法 3.2图像的混合 3.3总结 1、OpenCV的模块 2、OpenCV的基…...

裂缝仪在线监测装置:工程安全领域的“实时守卫者”
在基础设施运维领域,裂缝扩展是威胁建筑结构安全的核心隐患之一。传统人工巡检方式存在效率低、时效性差、数据主观性强等局限,而裂缝仪在线监测装置通过技术迭代,实现了对结构裂缝的自动化、持续性追踪,为工程安全评估提供科学依…...

【论文精读】2024 ECCV--MGLD-VSR现实世界视频超分辨率(RealWorld VSR)
文章目录 一、摘要二、问题三、Method3.1 Latent Diffusion Model3.2 Motion-guided Diffusion Sampling3.3 Temporal-aware Decoder Fine-tuning 四、实验设置4.1 训练阶段4.2 训练数据 贡献总结 论文全称: Motion-Guided Latent Diffusion for Temporally Consis…...

SpringBoot简单体验
1 Helloworld 打开:https://start.spring.io/ 选择maven配置。增加SpringWeb的依赖。 Generate之后解压,代码大致如下: hpDESKTOP-430500P:~/springboot2/demo$ tree ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── s…...
【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2025年上半年 试题3)解题思路论文素材参考1、静态负载均衡策略2、动态负载均衡策略3、基于场景的负载均衡真题题目(2025年上半年 试题3) 请围绕 “论系统负载均衡设计方法” 论题,依次从以下三个方面…...

2025年通用 Linux 服务器操作系统该如何选择?
2025年通用 Linux 服务器操作系统该如何选择? 服务器操作系统的选择对一个企业IT和云服务影响很大,主推的操作系统在后期更换的成本很高,而且也有很大的迁移风险,所以企业在选择服务器操作系统时要尤为重视。 之前最流行的服务器…...

Azure devops 系统之五-部署ASP.NET web app
今天介绍如何通过vscode 来创建一个asp.net web app,并部署到azure 上。 创建 ASP.NET Web 应用 在您的计算机上打开一个终端窗口并进入工作目录。使用 dotnet new webapp 命令创建一个新的 .NET Web 应用,然后将目录切换到新创建的应用。 dotnet new webapp -n MyFirstAzu…...
Hadoop是什么
注:本人不懂Hadoop是什么,问的大模型,让它用生动浅显的语言向我解释。为了防止忘记,我把它说的记录下来。接下来的解释都是大模型生成的,如果有错误的地方欢迎指正 。 Hadoop 是什么?(一句…...

学习路之PHP--easyswoole_panel安装使用
学习路之PHP--easyswoole_panel安装使用 一、新建文件夹二、安装三、改配置地址四、访问 IP:Port 自动进入index.html页面 一、新建文件夹 /www/wwwroot/easyswoole_panel 及配置ftp 解压easyswoole_panel源码 https://github.com/easyswoole-panel/easyswoole_panel 二、安…...
结合 AI 编程,让前端开发更简单:趋势、方法与实践
在 AI 迅猛发展的浪潮中,前端开发正在迎来范式转变。本文将深入探讨如何将 AI 编程能力嵌入前端工程体系中,重塑前端生产力工具链与开发方式。 一、前端开发的核心痛点 尽管前端框架(如 Vue、React)已经大大简化了 UI 构建&#…...

【拓扑排序】P6560 [SBCOI2020] 时光的流逝|普及+
本文涉及知识点 C图论 拓扑排序 P6560 [SBCOI2020] 时光的流逝 题目背景 时间一分一秒的过着,伴随着雪一同消融在了这个冬天, 或许,要是时光能停留在这一刻,该有多好啊。 … “这是…我在这个小镇的最后一个冬天了吧。” “嗯…...

SSRF 接收器
接收请求 IP.php <?php // 定义日志文件路径 $logFile hackip.txt;// 处理删除请求 if (isset($_POST[delete])) {$ipToDelete $_POST[ip];$lines file($logFile, FILE_IGNORE_NEW_LINES);$newLines array();foreach ($lines as $line) {$parts explode( | , $line);…...
【设计模式】责任链
【设计模式】责任链 在实际开发中,我们经常遇到这样的需求:某个请求需要经过多个处理者,但处理的顺序、方式可能会变化或扩展。这时候,责任链模式就能派上用场。 责任链模式(Chain of Responsibility) 是…...
unix/linux source 命令,其高级使用
就像在物理学中,掌握了基本定律后,我们可以开始研究更复杂的系统和现象,source 的高级用法也是建立在对其基本行为深刻理解之上的。 让我们一起探索 source 的高级应用领域: 1. 条件化加载 (Conditional Sourcing) 根据某些条件来决定是否 source 一个文件,或者 source…...
邮件验证码存储推荐方式
邮件验证码的存储方案需要兼顾 安全性、性能 和 可维护性,以下是详细分析和推荐方案: 1. 推荐方案:Redis(首选) 为什么选择 Redis? 优势说明高性能内存读写,毫秒级响应,适合高频验…...
Allegro 输出生产数据详解
说明 用于PCB裸板的生产可以分别单独创建文件 光绘数据(Gerber)、钻孔(NC Drill)、IPC网表;或者通过ODB++或IPC2581文件(这是一个新格式),它包含生产裸板所需要的所有信息 光绘数据 Artwork Gerber 光绘数据一般包含设计中各个层面的蚀刻线路、阻焊、铅锡、字符等信…...

FastAPI MCP 快速入门教程
目录 什么是 FastAPI MCP?项目设置1. 初始化项目2. 安装依赖3. 项目结构 编写代码创建主应用文件 运行和测试1. 启动服务器2. 使用 MCP Inspector 测试 什么是 FastAPI MCP? FastAPI MCP 是一个将 FastAPI 应用程序转换为 Model Context Protocol (MCP)…...

uni-app学习笔记二十一--pages.json中tabBar设置底部菜单项和图标
如果应用是一个多 tab 应用,可以通过 tabBar 配置项指定一级导航栏,以及 tab 切换时显示的对应页。 在 pages.json 中提供 tabBar 配置,不仅仅是为了方便快速开发导航,更重要的是在App和小程序端提升性能。在这两个平台ÿ…...

【Redis】基本命令
Redis命令行客户端 现在我们已经启动了Redis服务,下面将介绍如何使用redis - cli连接、操作Redis服务。客户端和服务端的交互过程如图1 - 3所示。 redis - cli可以使用两种方式连接Redis服务器。 第一种是交互式方式:通过redis - cli -h {host} -p {p…...
爬虫工具链的详细分类解析
以下是针对爬虫工具链的详细分类解析,涵盖静态页面、动态渲染和框架开发三大场景的技术选型与核心特性: 🧩 一、静态页面抓取(HTML结构固定) 工具组合:Requests BeautifulSoup 适用场景:目标数…...
鸿蒙编译ffmpeg库
下载 ffmpeg 项目 基于如下项目编译的 ffmpeg git clone https://gitcode.com/openharmony-sig/tpc_c_cplusplus.git 配置编译环境 下载 command line tools https://developer.huawei.com/consumer/cn/download/ 导出 OHOS_SDK 环境变量 export OHOS_SDK~/command-line-…...

哈希:闭散列的开放定址法
我还是曾经的那个少年 1.概念 通过其要存储的值与存储的位置建立映射关系。 如:基数排序也是运用了哈希开放定址法的的思想。 弊端:仅适用于数据集中的情况 2.开放定址法 问题:按照上述哈希的方式,向集合插入数据为44ÿ…...

Unity-QFramework框架学习-MVC、Command、Event、Utility、System、BindableProperty
QFramework QFramework简介 QFramework是一套渐进式、快速开发框架,适用于任何类型的游戏及应用项目,它包含一套开发架构和大量的工具集 QFramework的特性 简洁性:QFramework 强调代码的简洁性和易用性,让开发者能够快速上手&a…...

FPGA实现CNN卷积层:高效窗口生成模块设计与验证
我最近在从事一项很有意思的项目,我想在PFGA上部署CNN并实现手写图片的识别。而本篇文章,是我迈出的第一步。具体代码已发布在github上 模块介绍 卷积神经网络(CNN)可以分为卷积层、池化层、激活层、全链接层结构,本篇要实现的&…...

LeetCode 3068.最大节点价值之和:脑筋急转弯+动态规划(O(1)空间)
【LetMeFly】3068.最大节点价值之和:脑筋急转弯动态规划(O(1)空间) 力扣题目链接:https://leetcode.cn/problems/find-the-maximum-sum-of-node-values/ 给你一棵 n 个节点的 无向 树,节点从 0 到 n - 1 编号。树以长…...
2.2HarmonyOS NEXT高性能开发技术:编译优化、内存管理与并发编程实践
HarmonyOS NEXT高性能开发技术:编译优化、内存管理与并发编程实践 在HarmonyOS NEXT全场景设备开发中,高性能是跨端应用体验的核心保障。本章节聚焦ArkCompiler编译优化、内存管理工具及多线程并发编程三大技术模块,结合实战案例解析底层实现…...

BLIP-2
目录 摘要 Abstract BLIP-2 模型框架 预训练策略 模型优势 应用场景 实验 代码 总结 摘要 BLIP-2 是一种基于冻结的图像编码器和大型语言模型的高效视觉语言预训练模型,由 Salesforce 研究团队提出。它在 BLIP 的基础上进一步优化,通过轻量级…...
【Go-6】数据结构与集合
6. 数据结构与集合 数据结构是编程中用于组织和存储数据的方式,直接影响程序的效率和性能。Go语言提供了多种内置的数据结构,如数组、切片、Map和结构体,支持不同类型的数据管理和操作。本章将详细介绍Go语言中的主要数据结构与集合…...

支持向量机(SVM)例题
对于图中所示的线性可分的20个样本数据,利用支持向量机进行预测分类,有三个支持向量 A ( 0 , 2 ) A\left(0, 2\right) A(0,2)、 B ( 2 , 0 ) B\left(2, 0\right) B(2,0) 和 C ( − 1 , − 1 ) C\left(-1, -1\right) C(−1,−1)。 求支持向量机分类器的线…...