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

news2025/6/4 8:26:06

创建命令解析

./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.coloradmin.cn/o/2396042.html

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

相关文章

一、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的基…

裂缝仪在线监测装置:工程安全领域的“实时守卫者”

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

【论文精读】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 训练数据 贡献总结 论文全称&#xff1a; Motion-Guided Latent Diffusion for Temporally Consis…

SpringBoot简单体验

1 Helloworld 打开&#xff1a;https://start.spring.io/ 选择maven配置。增加SpringWeb的依赖。 Generate之后解压&#xff0c;代码大致如下&#xff1a; hpDESKTOP-430500P:~/springboot2/demo$ tree ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── s…

2025年通用 Linux 服务器操作系统该如何选择?

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

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…

学习路之PHP--easyswoole_panel安装使用

学习路之PHP--easyswoole_panel安装使用 一、新建文件夹二、安装三、改配置地址四、访问 IP:Port 自动进入index.html页面 一、新建文件夹 /www/wwwroot/easyswoole_panel 及配置ftp 解压easyswoole_panel源码 https://github.com/easyswoole-panel/easyswoole_panel 二、安…

【拓扑排序】P6560 [SBCOI2020] 时光的流逝|普及+

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

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);…

FastAPI MCP 快速入门教程

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

uni-app学习笔记二十一--pages.json中tabBar设置底部菜单项和图标

如果应用是一个多 tab 应用&#xff0c;可以通过 tabBar 配置项指定一级导航栏&#xff0c;以及 tab 切换时显示的对应页。 在 pages.json 中提供 tabBar 配置&#xff0c;不仅仅是为了方便快速开发导航&#xff0c;更重要的是在App和小程序端提升性能。在这两个平台&#xff…

【Redis】基本命令

Redis命令行客户端 现在我们已经启动了Redis服务&#xff0c;下面将介绍如何使用redis - cli连接、操作Redis服务。客户端和服务端的交互过程如图1 - 3所示。 redis - cli可以使用两种方式连接Redis服务器。 第一种是交互式方式&#xff1a;通过redis - cli -h {host} -p {p…

哈希:闭散列的开放定址法

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

Unity-QFramework框架学习-MVC、Command、Event、Utility、System、BindableProperty

QFramework QFramework简介 QFramework是一套渐进式、快速开发框架&#xff0c;适用于任何类型的游戏及应用项目&#xff0c;它包含一套开发架构和大量的工具集 QFramework的特性 简洁性&#xff1a;QFramework 强调代码的简洁性和易用性&#xff0c;让开发者能够快速上手&a…

FPGA实现CNN卷积层:高效窗口生成模块设计与验证

我最近在从事一项很有意思的项目&#xff0c;我想在PFGA上部署CNN并实现手写图片的识别。而本篇文章&#xff0c;是我迈出的第一步。具体代码已发布在github上 模块介绍 卷积神经网络&#xff08;CNN)可以分为卷积层、池化层、激活层、全链接层结构&#xff0c;本篇要实现的&…

LeetCode 3068.最大节点价值之和:脑筋急转弯+动态规划(O(1)空间)

【LetMeFly】3068.最大节点价值之和&#xff1a;脑筋急转弯动态规划&#xff08;O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-maximum-sum-of-node-values/ 给你一棵 n 个节点的 无向 树&#xff0c;节点从 0 到 n - 1 编号。树以长…

BLIP-2

目录 摘要 Abstract BLIP-2 模型框架 预训练策略 模型优势 应用场景 实验 代码 总结 摘要 BLIP-2 是一种基于冻结的图像编码器和大型语言模型的高效视觉语言预训练模型&#xff0c;由 Salesforce 研究团队提出。它在 BLIP 的基础上进一步优化&#xff0c;通过轻量级…

支持向量机(SVM)例题

对于图中所示的线性可分的20个样本数据&#xff0c;利用支持向量机进行预测分类&#xff0c;有三个支持向量 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)。 求支持向量机分类器的线…

SQL中各个子句的执行顺序

select、from、 join、where、order by、group by、having、limit 解释 1) FROM (确定数据源) 查询的执行首先从FROM子句开始&#xff0c;确定数据的来源(表、视图、连接等)。 2) JOIN (如果有JOIN操作) 在FROM子句之后&#xff0c;SQL引擎会执行连接操作(JOIN)&#xff0c…

本地部署消息代理软件 RabbitMQ 并实现外部访问( Windows 版本 )

RabbitMQ 是由 Erlang 语言开发的 消息中间件&#xff0c;是一种应用程序之间的通信方法。支持多种编程和语言和协议发展&#xff0c;用于实现分布式系统的可靠消息传递和异步通信等方面。 本文将详细介绍如何在 Windows 系统本地部署 RabbitMQ 并结合路由侠实现外网访问本…