长安链智能合约命令解析(全集)

article/2025/8/22 21:33:04

创建命令解析

./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 {})。

关键点说明

  1. 多组织签名

    • 需要 3 个组织(org1、org2、org3) 的管理员私钥和证书共同签名(ChainMaker 的共识策略要求)。

    • 私钥(.key)和证书(.crt)文件必须匹配。

  2. WASM 合约

    • 合约字节码为 Rust 编译的 rust-fact-2.0.0.wasm,需提前准备好。

    • 支持其他语言(如 C++),但需编译为 WASM 格式。

  3. SDK 配置

    • sdk_config.yml 需配置正确的节点 RPC 地址和证书路径,例如:

      chain_client:org_id: "wx-org1.chainmaker.org"nodes:- host: "127.0.0.1"port: 12301

  4. 权限控制

    • 只有指定的管理员(admin1)可以部署合约,确保安全性。


常见问题

  1. 权限不足

    • 确保私钥和证书文件路径正确,且文件未被损坏。

    • 检查 sdk_config.yml 中的 org_id 是否与证书匹配。

  2. WASM 加载失败

    • 确认 rust-fact-2.0.0.wasm 文件存在且可读。

    • 验证 WASM 字节码是否完整(可通过 wasm-validate 工具检查)。

  3. ./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同步等待交易执行结果(阻塞直到链上确认)。

关键点说明

  1. 合约方法 save

    • 该方法是合约开发者预先定义的,功能可能是将文件信息存储到链上。

    • 需确保合约 fact 已部署,且包含 save 方法。

  2. 参数格式

    • 参数为 JSON 字符串,需严格转义(如 \")。

    • 参数名(如 file_name)必须与合约代码中的输入参数一致。

  3. 同步调用

    • --sync-result=true 会等待交易上链并返回结果,适合需要即时确认的场景。

    • 若设为 false,则异步调用(仅返回交易 ID)。

  4. 权限要求

    • 默认使用 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(())}
}

常见问题

  1. 参数错误

    • 若 JSON 格式错误(如缺少引号),会直接报错。

    • 若参数名或类型与合约不匹配,合约执行时会失败。

  2. 合约未部署

    • 错误信息类似:contract not found: fact。需先部署合约。

  3. 权限不足

    • 确保 sdk_config.yml 中的身份有权限调用该合约方法。


验证调用结果

  1. 直接输出
    命令执行成功后,会返回交易回执(包含交易哈希、区块高度等)。

  2. 查询链上数据
    可通过以下命令查询存储结果:

    ./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: 要查询的文件哈希值。

关键点说明

  1. 查询方法特性

    • find_by_file_hash 是合约开发者定义的只读方法,通常用于检索链上数据(不会修改状态)。

    • 与 invoke 不同,get 操作无需共识,直接返回节点本地存储的结果。

  2. 参数要求

    • 参数 file_hash 必须与合约代码中的输入参数名一致。

    • 哈希值需完全匹配(区分大小写)。

  3. 返回结果

    • 返回格式取决于合约实现,通常为 JSON 字符串,例如:

      {"file_name": "name007","time": "6543234","owner": "org1"
      }
  4. 权限要求

    • 查询操作一般不需要管理员权限,但需确保 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))}
}

常见问题

  1. 合约方法未定义

    • 若报错 method not found: find_by_file_hash,需检查合约是否部署了该方法。

  2. 参数格式错误

    • 确保 JSON 中的引号转义正确(如 \")。

  3. 无查询结果

    • 若返回空,可能是文件哈希不存在或未调用过 save 方法存储数据。


扩展用法

  1. 查询其他字段
    如果合约支持,可通过不同参数查询:

    --params="{\"file_name\":\"name007\"}"
  2. 批量查询
    需合约提供批量查询方法(如 find_all),并调整参数格式。

  3. 结合 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'


http://www.hkcw.cn/article/NTJbNLYeRP.shtml

相关文章

wails3学习-打包(wails3 package)

nsis不太会用&#xff0c;先记录基础&#xff0c;后面再补充吧~ 检查NSIS 在cmd/powershell中运行 wails3 doctor如果你已经安装nsis但运行wails3 doctor仍然提示未安装&#xff0c;需要配置环境变量&#xff0c;根据自己的实际情况配置&#xff0c;配置完成&#xff0c;重启…

Next.js 布局(Layout)与模板(Template)深度解析:从原理到实战

在 Next.js 应用开发中&#xff0c;页面结构的组织方式直接影响用户体验和开发效率。Layout 和 Template 作为 Next.js 提供的两种页面结构组织方案&#xff0c;它们的正确使用能够显著提升应用的性能表现和开发体验。本文将深入剖析两者的区别、工作原理以及最佳实践&#xff…

吴艳妮获亚锦赛100米栏季军 微弱差距摘铜

5月29日,在韩国龟尾市举行的第26届亚洲田径锦标赛女子100米跨栏决赛中,中国选手吴艳妮以13秒068的成绩获得季军,仅比日本选手田中佑美慢了千分之七秒。印度选手亚拉吉以12秒96的成绩卫冕,并刷新了赛会纪录,田中佑美以13秒061摘得银牌,另一名中国选手刘景扬以13秒32的成绩…

RV1126-OPENCV 交叉编译

一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包&#xff0c;并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…

Swift 解锁 LeetCode 热门难题:不改数组也能找出重复数字?

文章目录 摘要描述题解答案题解代码分析解读&#xff1a; 示例测试及结果时间复杂度空间复杂度总结实际场景类比可运行 Demo&#xff08;Swift Playground&#xff09;未来展望 摘要 在数组中找出唯一的重复数字&#xff0c;听起来像一道简单的题目&#xff0c;但如果你不能修…

防范DDoS攻击,服务器稳定性崩溃的根源与高效防御对策

DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;已成为危害服务器稳定性和业务连续性的主要因素之一。本文将深入探讨为什么服务器一遇到DDoS攻击就崩溃&#xff0c;以及如何从根本上实现有效防御和应对这一威胁&#xff0c;帮助企业提升网络安全水平。 具体内容如下&…

女农机手再度为困难农户收麦 跨省公益收割500亩

姜晓娜曾是一名美甲师,如今她已成为一名熟练的农机手,驾驶着3米高的收割机在麦田劳作。她的态度认真,不敷衍、不马虎,赢得了“干得好、割得快、不撒粮、长得俊”的评价。这些夸奖和赞美是她前进的动力。河南省是我国粮食大省,5月24日至28日,姜晓娜和弟弟在河南平顶山、驻…

iVX 如何用 VL 中间语言构建程范式闭环?

一、技术定位&#xff1a;VL 中间语言的「三位一体」技术闭环 在数字化转型浪潮中&#xff0c;iVX 自主研发的 VL&#xff08;Visual Language&#xff09;中间语言体系&#xff0c;正通过 "可视化建模→VL 编译→多语言生成" 的技术闭环&#xff0c;重新定义图形化…

今日行情明日机会——20250529

上证指数放量收阳线&#xff0c;个股涨多跌少&#xff0c;汽车主线方向凸显。 深证指数放量收阳线&#xff0c;可以围绕主线方向做。 2025年5月29日涨停股主要行业方向分析 1. 智能驾驶&#xff08;政策场景商业化突破&#xff09; 涨停家数&#xff1a;24家。 代表标…

Arduino门禁系统:RFID-RC522卡验证与LED、0.96OLED(IIC)的门禁场景

引言 在物联网和智能家居日益普及的今天&#xff0c;门禁系统作为安全防护的第一道关卡&#xff0c;有着广泛的应用需求。本文将介绍如何利用 Arduino Uno 开发板&#xff0c;结合 0.96 寸 OLED 显示屏、RC522 RFID 模块以及红绿 LED 灯&#xff0c;搭建一个简易的门禁系统&am…

各地狂建学职业本科成香饽饽,职业本科怎么就成了香饽饽?

各地狂建学职业本科成香饽饽。毕业季,当许多高校学生还在忙着找工作时,西安汽车职业大学2023届智能制造工程学院的毕业生乔延哲,在6月离校前就拿到了10余个Offer,被多家企业争抢,而类似的例子还有许多。大众在不解的同时也感叹,职业本科怎么就成了香饽饽?2025年了,各地…

【电路笔记 TMS320F28335DSP】McBSP 从源时钟得到 生成时钟 CLKG 帧同步信号 FSG

对应于原文 Multichannel Buffered Serial Port (McBSP)的 2.5.3 Data Clock Generation。 CLKG Figure 2-4. Sample Rate Generator Block Diagram CLKG 是采样率发生器输出的数据位时钟&#xff08;Data Bit Clock&#xff09;&#xff0c;它被用来控制&#xff1a; 数据发…

校园演出该不该“外包”,节目竞演变花钱比拼?

校园演出该不该“外包”。学校艺术汇演、节目表演本是展示学生风采、锻炼孩子能力的重要契机。然而当下,节目编排“外包”现象却开始冒头,有的班级“高价请老师”“花钱买节目”,引发家长质疑。半月谈记者调查了解到,当前部分校园艺术节目排练评比压力大、艺术教育依赖外包…

寄存器模型2

6.MCDF寄存器设计代码 &#xff08;1&#xff09;示意图 &#xff08;2&#xff09;代码 verilog中数组操作&#xff1a;regs[SLV0_RW_REG][0:5]指的是32bit数据下的0:5位。 7.adapter &#xff08;1&#xff09;adapter的位置 &#xff08;2&#xff09;adapter实现 &#…

胡塞武装称过去一周对以色列多地目标实施打击

当地时间5月29日晚,也门胡塞武装领导人阿卜杜勒马利克胡塞在其每周讲话中表示,在本周内,该组织对以色列多地目标实施了军事打击。在打击过程中,该组织使用了14枚高超音速导弹、弹道导弹以及无人机,打击目标包括以色列特拉维夫以北的雅法、海法、南部城市阿什凯隆以及红海沿…

女子向丈夫要5元遭拒轻生?假 网传信息不实

近日,网上流传一则消息称山东一名女子因向丈夫索要5元钱买煎饼果子当早餐被拒后选择喝药轻生。经省内各地和有关部门核实,该信息并不属实。希望广大网友保持理性和冷静,不轻易相信和传播未经证实的信息,共同维护健康有序的网络环境。责任编辑:zx0176

【C++】“多态”特性

文章目录 一、多态的概念二、多态的定义实现1. 多态的构成条件1.1 虚函数1.2 虚函数的重写 2. 多态的调用3. 虚函数重写的其他问题3.1 协变3.2 析构函数的重写 三、override和final关键字四、重载/重写/隐藏的对比五、纯虚函数和抽象类六、多态的原理 C的三大主要特性&#xff…

SmolDocling-256M:极小参数量的视觉语言模型|端到端文档解析方案的另一种思路

背景问题 传统的一站式文档解析工具&#xff0c;包含布局分析、OCR和表格识别等&#xff0c;往往需要结合多个独立的模型&#xff0c;同时根据处理任务的不同调用不同的模型&#xff0c;增加了处理流程的复杂度&#xff0c;并且难以泛化到不同的文档类型。大型视觉语言模型&am…

SUV行驶中被巨石砸下路面,目击者:SUV司机自己爬上来,没受伤!

SUV行驶中被巨石砸下路面。5月28日贵州毕节,SUV行驶中被巨石砸下路面,摩托车司机弃车避险后又赶来查看,目击者:SUV司机自己爬上来,没受伤!SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面责任编辑…

一文了解半导体封装测试

1.半导体后端工艺 制作半导体产品的第一步&#xff0c;就是根据所需功能设计芯片&#xff08;Chip&#xff09;。然后&#xff0c;再将芯片制作成晶圆&#xff08;Wafer&#xff09;。由于晶圆由芯片反复排列而成&#xff0c;当我们细看已完成的晶圆时&#xff0c;可以看到上面…