长安链 您所在的位置:网站首页 ont区块浏览器 长安链

长安链

2023-09-11 03:48| 来源: 网络整理| 查看: 265

长安链部署

简介

长安链·ChainMaker具备自主可控、灵活装配、软硬一体、开源开放的突出特点,由北京微芯研究院、清华大学、北京航空航天大学、腾讯、百度和京东等知名高校、企业共同研发。取名“长安链”,喻意“长治久安、再创辉煌、链接世界”。

长安链作为区块链开源底层软件平台,包涵区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施,同时也是国内首个自主可控区块链软硬件技术体系。

长安链的应用场景,涵盖供应链金融、碳交易、食品追溯等一系列关乎国计民生的重大领域。

长安链官网地址

关键技术

长安链·ChainMaker秉承开源开放、共建共享的理念,已开放程序源码。“长安链·ChainMaker”坚持自主研发,秉承开源开放、共建共享的理念,面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案。

并行调度 在提案-验证整体框架下,支持基于DAG的块内交易并行调度提案和并行验证;调度支持确定性调度和随机调度等多种并行调度算法。

广域网络 基于PubSub机制,支持多链隔离下P2P网络的复用与数据隔离; 支持NAT穿透,复杂网络拓扑下的大规模节点组网,支持网络节点动态治理。

多链架构 支持并行多链实现不同参与方间的数据隔离; 可根据场景灵活扩展子链以支持业务和吞吐量的需求。

权限管理 为链上每个操作定义访问权限,支持细粒度权限管理策略; 结合组织、角色等提供灵活的身份权限配置方案。

技术优势

自主可控 面向世界科技前沿,秉持自主创新原则,汇聚国内顶级工程师和科学家团队,长安链·ChainMaker构建了全球独创的底层技术框架,关键技术模块全部自研,成为国际区块链技术发展的新动能,为国家“新基建”提供自主、可控、安全的区块链数字经济基础设施。独创深度模块化、可装配、高性能并行执行的区块链底层技术架构;

覆盖国产密码算法、基于国密证书的加密通讯和国产CA证书颁发认证机构。

开源开放 自诞生起,长安链践行开源、开放的理念,最大范围联合产、学、研、用各类科研力量,由顶尖高校、知名企业等优势力量共同开发,同时广泛拥抱个人和企业开发者,打造标准规范体系,共建开源开放充满活力的区块链技术生态;

采用友好的开源协议,开放软件源代码,推动多项技术体系标准化,建立标准化下的开发生态。

性能领先 长安链拥有高效并行调度算法、高性能可信安全智能合约执行引擎、流水线共识算法等国际领先的区块链底层技术,具备高并发、低延时、大规模节点组网等先进技术优势,交易吞吐能力可达10万TPS,位居全球领先水平; 支持基于内存的数据系统,提升交易处理性能。

灵活装配 长安链将区块链执行流程标准化、模块化,推进区块链技术从手工作业模式演进到自动装配生产模式,方便用户根据不同的业务需求搭建区块链系统,为技术的规模化应用提供基础;

可插拔、可分离的自主可控核心框架,可快速接入优势底层模块/单一定制化开发模块。

长安链简介-核心特色

基础术语说明

基础术语说明

功能清单说明

功能清单说明

编写语言

编写语言

版本迭代说明 1.x版本

长安链ChainMaker自v1.0.0版本发布以来经过6个版本的迭代,截止v1.2.4版本中已经支持:

四种合约引擎:支持GASM、WASMER、WXVM、EVM四种合约引擎;四种合约语言:支持Golang、Rust、C++、Solidity四种合约语言;五种共识算法:支持Solo、RAFT、TBFT、HotStuff、dPoS;三种存储引擎:支持LevelDB、RocksDB、MySQL。

在v1.2.x版本中长安链ChainMaker支持go、java、nodejs的链sdk,支持spv轻节点和跨链;支持合约内执行sql语句,合约支持基于paillier的半同态运算和bulletproofs的范围证明;支持区块链浏览器、CMC命令行工具、CA服务管理、chainmaker-cryptogen证书生成工具等。

至此长安链ChainMaker v1.2.x版本作为区块链底层技术平台,已经在政务、金融、能源及食品溯源等行业得到应用,成为数字经济、数字社会和数字政府建设的基础底座。

2.x版本

在最新发布的长安链 v2.x版本中,我们将着重在长安链的易用性、稳定性、安全性三方面做更多工作。除丰富产品工具集以外,长安链特有的可装配性将进一步体现出来。

此次更新的 v2.0.0版本中侧重对数据模型、代码结构的调整,我们进行了如下升级:

1、对区块、交易等数据结构进行了重构

章节见:v2.0.0技术文档>技术设计文档>3.数据结构

升级对数据模型主要做了以下三方面的调整:

1.1数据类型更准确,更易扩展。比如区块高度字段,在实际中从创世区块(Genesis)高度为0开始递增,不可能为负数,所以将数据类型从int64调整为uint64。再比如合约参数KeyValuePair,之前Value为string类型,传入二进制数据时需要进行hex或base64编码及解码操作,使得交易变大且合约逻辑变复杂,所以本次升级将其改为bytes类型。

交易数据模型重构。在v1.x版本中,交易请求内容分为多种并使用TxType区分,每种交易请求使用不同的数据结构,并序列化后放入交易的Payload字段。在v2.x中,将合约安装、用户合约调用、系统合约调用、链配置更改、查询链数据、订阅消息等等各种行为都统一为合约调用,只是被调用的合约名、方法名和参数不同,因此可以用统一的Payload并简化TxType。一方面统一了用户行为,另一方面减少了序列化、反序列化的次数。

为多个数据模型增加了新字段,以适应新的需求的扩展。以交易的Payload对象为例,在原有基础上增加了Limit和Sequence字段,BlockHeader增加了BlockType,SerializedMember增加了MemberType字段等,这些字段都为v2.x中可装配性提供了扩展能力。

2、身份权限、系统合约等模块代码重构

在不影响原有功能的前提下,对身份权限、系统合约等模块的代码进行重构,提升代码质量。其中,身份权限模块一方面调整整体接口框架,为之后增加公钥身份、DID身份提供扩展能力;另一方面将原有整体流程中分步鉴权的代码进行收拢,进一步理清鉴权逻辑,并支持根据系统合约的合约名加方法名进行更细粒度权限控制。系统合约模块,一方面根据合约内容对系统合约进行归类,使整体结构更加清晰;另一方面,将合约管理逻辑从原来的合约模块移入系统合约中,与系统合约定位相符。

3、拆分部分模块为独立项目,并启用go mod代替原有的git submodule

本次升级中将common、pb、pb-go、protocol、sdk-go作为chainmaker-go的依赖包,以go mod的形式引入,代替原有的git submodule模式。Go mod模式是go语言官方推荐的包管理模式,长安链各组件以go mod包的形式被引入,可以更好的做到依赖包的版本管理,从而方便长安链在可装配性和自定义模块的扩展能力。

4、增加外部证书兼容

章节见:v2.0.0技术文档>技术设计文档>9.身份权限管理>9.3权限管理>9.3.4外部证书兼容

长安链v1.x版本中,若采用数字证书作为用户标识,需要在证书O和OU字段中,附加组织和角色等信息,无法复用参与方原有的数字证书。因此在v2.0.0中,增加了对外部证书的兼容支持,用户可将已有的第三方CA颁发的数字证书作为区块链节点或用户的签名证书,从而支持更灵活易用的证书体系。

1、单节点部署(Docker)

环境依赖

环境依赖

测试机器

2C 2G 30G

软件依赖

软件依赖

注:如有操作过程问题请参考常见问题!!!

1.1 安装Git yum install -y git curl-devel expat-devel gettext-devel openssl-devel zlib-devel vim lrzsz wget bash-completion #编译安装git前,它需要依赖这些curl-devel expat-devel gettext-devel openssl-devel zlib-devel依赖包。一般直接用yum命令安装一下就行了。这里提前下载好所需依赖包,打成tar包。 # 内网服务器不连外网,直接通过另一台可以连外网的服务器,将所需的依赖通过yum命令下载下来,将所有下载下来的rpm包都上传到这台服务器上安装 # 上传准备好的git-1.8.3.1.tar.gz及依赖包到soft下解压 # 强制安装 [root@localhost git]# rpm -Uvh --force --nodeps *.rpm # 查看git [root@localhost git-1.8.3.1]# git --version git version 1.8.3.1 1.2 安装Golang # 下载地址 wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz # 上go1.16.7.linux-amd64.tar.gz到/data/soft下 # 解压到/usr/loacal下 tar xf go1.16.7.linux-amd64.tar.gz -C /usr/local/ [root@localhost soft]# ln -s /usr/local/go/bin/* /usr/bin/ # 配置环境变量 # 执行该命令打开文件,在 profile 文件最后添加如下内容 vim /etc/profile export PATH=$PATH:/usr/local/go/bin export GOPATH=/data/go # 使环境变量生效 source /etc/profile # 查看版本 go version go version go1.16.7 linux/amd64 # 外网可以打开,内网没用 # 开启Go的MODULE支持 go env -w GO111MODULE=auto # 软件源替换 go env -w GOPROXY=https://goproxy.cn,direct 1.3 安装docker # yum安装 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl start docker # 或者上传docker-19.03.9.tgz到soft下 # 下载地址https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz # 解压到data下 tar xf soft/docker-19.03.9.tgz -C /data/ # 拷贝docker下文件到/usr/bin/ cp /data/docker/* /usr/bin/ # 配置systemd管理docker vim /lib/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target # 创建加速配置文件,内网可配置harbor地址 mkdir /etc/docker vim /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://mirror.ccs.tencentyun.com","https://hub-mirror.c.163.com","https://xkhndtby.mirror.aliyuncs.com"] } #启动并设置开机启动 systemctl daemon-reload systemctl start docker systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. # 查看版本 docker --version Docker version 19.03.9, build 9d988398e7 # 命令自动补全 yum -y install bash-completion source /etc/profile.d/bash_completion.sh 1.4 安装docker-compose # 下载地址 wget https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 # 上传docker-compose到soft下 # 移动到/usr/local/bin/下并改名docker-compose mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose # 赋予权限 chmod +x /usr/local/bin/docker-compose # 查看版本 docker-compose -v Docker Compose version v2.2.2 1.5 安装Gcc # 如果可用yum就直接下载即可 yum -y install gcc net-tools tree gcc-c++ kernel-devel # 可以找一台能连接外网的虚机下载rpm包,完成之后保存上传到内网安装,后面组件同样适用 # 命令如下,下载gcc及依赖,下载不安装 yum install --downloadonly --downloaddir=/root/soft/gcc gcc* # 后边所有文件都在/data/soft下,所有提前创建好/data目录,gcc放到/data/soft/下 mkdir /data/soft -p # 把准备好的gcc.tar包上传到此目录下/data/soft下 # 解压gcc tar xf soft/gcc.tar.gz -C . cd gcc # 强制安装此目录下所有rpm,不检索依赖 [root@localhost gcc]# rpm -Uvh --force --nodeps *.rpm # 安装完成后查看gcc版本 [root@localhost gcc]# gcc –version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36) 1.6 安装Glibc 注意:GLIBC是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运 行库都会依赖于glibc,一旦安装失败系统将不可用,请谨慎操作。此处仅列举一种安装示例(在 CentOS Linux release 7.6.1810安装成功),并不一定使用您的系统,请根据您的系统及gcc环境 自行选择相应的安装方法。 # 查看GLIBC版本 ldd --version strings /lib64/libc.so.6 | grep "^GLIBC_" # 下载chainmaker-go源码后,进入chainmaker-go/script/3rd安装 cd chainmaker-go/scripts/3rd/ sh install.sh 1.7 源码下载

从长安链官网下载源码:https://git.chainmaker.org.cn/chainmaker/chainmaker-go

各版本源码下载地址

https://git.chainmaker.org.cn/chainmaker/chainmaker-go/-/tags

当前为私有仓库,需要先进行账号注册

下载chainmaker源码到本地,部署不通版本更改版本号即可v2.0.0 git clone -b v2.0.0 https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git # 输入账号 # 下载证书生成工具源码到本地 git clone -b v2.0.0 https://git.chainmaker.org.cn/chainmaker/chainmaker-cryptogen.git 1.8 源码编译 编译证书生成工具 cd chainmaker-cryptogen make # 等待编译完成 go: downloading github.com/spf13/cobra v1.1.1 go: downloading github.com/spf13/viper v1.7.0 go: downloading chainmaker.org/chainmaker/common/v2 v2.0.0 ..... chainmaker-cryptogen/ chainmaker-cryptogen/bin/ chainmaker-cryptogen/bin/chainmaker-cryptogen chainmaker-cryptogen/config/ chainmaker-cryptogen/config/crypto_config_template.yml 1.9 证书及配置文件生成 将编译好的chainmaker-cryptogen,软连接到chainmaker-go/tools目录 # 进入工具目录 cd ../chainmaker-go/tools/ # 软连接chainmaker-cryptogen到tools目录下 ln -s ../../chainmaker-cryptogen/ .

进入chainmaker-go/scripts目录,执行prepare.sh脚本生成单链4节点集群配置,存于路径chainmaker-go/build中

prepare.sh脚本支持生成solo模式节点证书和配置,以及4/7/10/13/16节点的证书和配置

# 进入脚本目录 cd ../scripts # 查看脚本帮助 ./prepare.sh -h invalid params Usage: prepare.sh node_cnt(1/4/7/10/13/16) chain_cnt(1-4) p2p_port(default:11301) rpc_port(default:12301) eg1: prepare.sh 4 1 eg2: prepare.sh 4 1 11301 12301 # 生成单链1节点集群的证书和配置 ./prepare.sh 1 1 # 生成的节点配置及证书在build文件下 cd ../build/ tree -L 3 . ├── config │ └── node1 │ ├── certs # 自己证书的信息 │ ├── chainconfig # 链的配置文件 │ ├── chainmaker.yml # 节点的配置 │ └── log.yml # 日志的配置 ├── crypto-config # 证书的配置信息 │ └── wx-org.chainmaker.org │ ├── ca │ ├── node │ └── user └── crypto_config.yml 9 directories, 3 files ------------------------------------------ tree -L 3 config/node1/ config/node1/ ├── certs │ ├── ca # 创世块的ca │ │ └── wx-org.chainmaker.org │ ├── node # 自己的证书信息 │ │ ├── common1 │ │ └── consensus1 │ └── user # 用户的证书信息 │ ├── admin1 │ ├── client1 │ └── light1 ├── chainconfig │ └── bc1.yml ├── chainmaker.yml └── log.ym ------------------------------------------- tree -L 3 crypto-config/ crypto-config/ └── wx-org.chainmaker.org ├── ca # 自己的ca证书信息 │ ├── ca.crt │ └── ca.key ├── node # 自己节点的证书信息 │ ├── common1 │ └── consensus1 └── user # 自己用户的信息证书 ├── admin1 ├── client1 └── light1 关于自动生成的端口说明

通过prepare.sh脚本生成的配置,默认是在单台服务器上部署,故自动生成的端口号,是从一个起始端口号开始依次递增,可以通过命令行参数修改起始端口号。

主要有2个端口,p2p端口(用于节点互联)和rpc端口(用于客户端与节点通信),p2p起始端口为11301,rpc起始端口为12301。

如果生成4个节点的配置,p2p端口分别为:11301、11302、11303、11304,rpc端口分别为:12301、12302、12303、12304

如果是在多机部署,希望生成固定的端口号,请参考:【多机部署】

1.10 启动节点 # 这里是一个节点 pwd /data/chainmaker-go/build/config/node1 [root@localhost node1]# ll 总用量 12 drwxr-xr-x. 5 root root 40 1月 19 15:24 certs drwxr-xr-x. 2 root root 21 1月 19 15:24 chainconfig -rw-r--r--. 1 root root 5417 1月 19 15:24 chainmaker.yml -rw-r--r--. 1 root root 1638 1月 19 15:24 log.yml # 拉取镜像 docker pull chainmakerofficial/chainmaker:v2.0.0 # 启动 docker run -d --name chainmaker --restart=always \ -p 11301:11301 -p 12301:12301 \ -v /data/chainmaker-go/build/config/node1:/chainmaker-go/config/wx-org.chainmaker.org \ -v /data/chainmaker/node_data:/chainmaker-go/data \ -v /data/chainmaker/logs:/chainmaker-go/log \ chainmakerofficial/chainmaker:v2.0.0 \ /chainmaker-go/bin/chainmaker start -c /chainmaker-go/config/wx-org.chainmaker.org/chainmaker.yml # 解释 --restart=always 关机自动重启节点 -p 11301:11301 p2p端口 -p 12301:12301 rpc端口 -v /data/chainmaker-go/build/config/node1 把生成的配置文件映射到容器内部,如果路径不对,会起不来 -v /data/chainmaker/node_data 数据目录 -v /data/chainmaker/logs 日志目录 chainmakerofficial/chainmaker:v2.0.0 镜像 /chainmaker-go/bin/chainmaker start -c /chainmaker-go/config/wx-org.chainmaker.org/chainmaker.yml 指定配置文件启动 # 查看启动日志 tail -100f /data/chainmaker/logs/system.log # 出现此图形为启动成功

image-20220119154836434

tail -1000f /data/chainmaker/logs/system.log |grep "ERROR\|put block\|all necessary" 日志说明: 2022-01-19 15:46:50.719 [INFO] [Storage] @chain1 store/blockstore_impl.go:179 chain[chain1]: put block[0] hash[98848a1f1eb928606c7202d169104f84f7f586623903a833578a5b1f741a0cc6] (txs:1 bytes:5551), 时间 [日志级别] [模块] @链名称 文件名.go:行数 链chain[链名称]:put block[区块高度](txs:交易个数 bytes:区块大小), 使用时间毫秒(mashal:0, log:1, blockdb:0, statedb:0, historydb:0, resultdb:0, contractdb:0, batchChan:0, total:1)

image-20220119155038647

2、智能合约示例

见官方文档

2.1 拉取合约环境镜像 # 拉取镜像 docker pull chainmakerofficial/chainmaker-go-contract:2.0.0 docker images # 运行镜像 docker run -d --name chainmaker-go-contract -v /data/chainmaker-go-contract/:/home chainmakerofficial/chainmaker-go-contract:2.0.0 bash -c "while true; do echo hello chainmaker; sleep 5;done" # 查看日志,5秒打印一行日志 docker logs -f chainmaker-go-contract hello chainmaker hello chainmaker hello chainmaker hello chainmaker 2.2、编译合约 进入容器内部 docker exec -it chainmaker-go-contract bash cd /home/ tar xvf /data/contract_go_template.tar.gz # 解压缩合约SDK源码 cd contract_tinygo sh build.sh # 编译main.go合约 # 生成合约的字节码文件在 /home/contract_tinygo/chainmaker-contract-go.wasm ls -l total 104 -rw-r--r--. 1 501 staff 84 Sep 7 12:19 Makefile -rw-r--r--. 1 501 staff 73 Sep 7 12:19 build.sh # 编译脚本 -rw-r--r--. 1 501 staff 4149 Sep 7 12:19 bulletproofs.go # 合约SDK基于bulletproofs的范围证明接口实现 -rwxr-xr-x. 1 root root 36226 Jan 19 08:04 chainmaker-contract-go.wasm # 合约 -rw-r--r--. 1 501 staff 19677 Sep 7 12:19 chainmaker.go # 合约SDK主要接口及实现 -rw-r--r--. 1 501 staff 4221 Sep 7 12:19 chainmaker_rs.go # 合约SDK sql接口实现 drwxr-xr-x. 2 501 staff 47 Jan 19 08:04 convert -rw-r--r--. 1 501 staff 11761 Sep 7 12:19 easycodec.go # 序列化工具类 -rw-r--r--. 1 501 staff 55 Sep 7 12:19 go.mod -rw-r--r--. 1 501 staff 3634 Sep 7 12:19 main.go # 存证示例代码 -rw-r--r--. 1 501 staff 1992 Sep 7 12:19 paillier.go # 合约SDK基于paillier的半同态运算接口实现 3、部署合约 3.1 编译命令行工具

官方文档

实际生产系统还是用SDK方式

cd /data/chainmaker-go/tools/cmc go build go: downloading chainmaker.org/chainmaker/pb-go/v2 v2.0.0 .... #使用chainmaker-cryptogen生成的测试链的证书,软连接过来 cd testdata/ ln -s ../../../build/crypto-config . ./cmc --help # 主要参数说明 sdk配置文件flag --sdk-conf-path:指定cmc使用sdk的配置文件路径 admin签名者flags,此类flag的顺序及个数必须保持一致,且至少传入一个admin --admin-crt-file-paths: admin签名者的tls crt文件的路径列表. 单签模式下只需要填写一个即可, 离线多签模式下多个需要用逗号分割 比如 ./wx-org1.chainmaker.org/admin1.tls.crt,./wx-org2.chainmaker.org/admin1.tls.crt --admin-key-file-paths: admin签名者的tls key文件的路径列表. 单签模式下只需要填写一个即可, 离线多签模式下多个需要用逗号分割 比如 ./wx-org1.chainmaker.org/admin1.tls.key,./wx-org2.chainmaker.org/admin1.tls.key 覆盖sdk配置flags,不传则使用sdk配置,如果想覆盖sdk的配置,则以下六个flag都必填 --org-id: 指定发送交易的用户所属的组织Id, 会覆盖sdk配置文件读取的配置 --chain-id: 指定链Id, 会覆盖sdk配置文件读取的配置 --user-tlscrt-file-path: 指定发送交易的用户tls证书文件路径, 会覆盖sdk配置文件读取的配置 --user-tlskey-file-path: 指定发送交易的用户tls私钥路径, 会覆盖sdk配置文件读取的配置 --user-signcrt-file-path: 指定发送交易的用户sign证书文件路径, 会覆盖sdk配置文件读取的配置 --user-signkey-file-path: 指定发送交易的用户sign私钥路径, 会覆盖sdk配置文件读取的配置 其他flags --byte-code-path:指定合约的wasm文件路径 --contract-name:指定合约名称 --method:指定调用的合约方法名称 --runtime-type:指定合约执行虚拟机环境,包含:GASM、EVM、WASMER、WXVM、NATIVE --version:指定合约的版本号,在发布和升级合约时使用 --sync-result:指定是否同步等待交易执行结果,默认为false,如果设置为true,在发送完交易后会主动查询交易执行结果 --params:指定发布合约或调用合约时的参数信息 --concurrency:指定调用合约并发的go routine,用于压力测试 --total-count-per-goroutine:指定单个go routine发送的交易数量,用于压力测试,和--concurrency配合使用 --block-height:指定区块高度 --tx-id:指定交易Id --with-rw-set:指定获取区块时是否附带读写集,默认是false --abi-file-path:调用evm合约时需要指定被调用合约的abi文件路径,如:--abi-file-path=./testdata/balance-evm-demo/ledger_balance.abi 3.2 执行创建合约 # 由于是单节点,所以要修改客户端证书的路径 # 修改sdk_config.yml文件 # /data/chainmaker-go/tools/cmc/testdata vim sdk_config.yml --- # 组织ID: 原:wx-org1.chainmaker.org 现:wx-org.chainmaker.org # 客户端用户私钥路径: 原:./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.key 现:./testdata/crypto-config/wx-org.chainmaker.org/user/client1/client1.tls.key # 客户端用户证书路径 原:./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.crt 现:./testdata/crypto-config/wx-org.chainmaker.org/user/client1/client1.tls.crt # 客户端用户交易签名私钥路径 原:./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.key 现:./testdata/crypto-config/wx-org.chainmaker.org/user/client1/client1.sign.key # 客户端用户交易签名证书路径 原:./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.crt 现:./testdata/crypto-config/wx-org.chainmaker.org/user/client1/client1.sign.crt # 节点地址 原:node_addr: "127.0.0.1:12301" 现:node_addr: "192.168.88.135:12301" # 信任证书池路径 原:./testdata/crypto-config/wx-org.chainmaker.org/ca 现:./testdata/crypto-config/wx-org.chainmaker.org/ca cd .. ./cmc client contract user create \ --contract-name=chain_001 \ --runtime-type=GASM \ --byte-code-path=/data/chainmaker-go-contract/contract_tinygo/chainmaker-contract-go.wasm \ --version=1.0 \ --sdk-conf-path=./testdata/sdk_config.yml \ --admin-key-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.tls.key \ --admin-crt-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.tls.crt \ --sync-result=true \ --params="{}" # 返回结果 response: message:"OK" contract_result: tx_id:"53282716d4f342b7b5ee2a1e7b98c5531ae12d92f2b947a69ebca0bb33841fb3" # 参数说明 --admin-key-file-paths=签名证书 --client-crt-file-paths=连接证书 --org-id=组织id --byte-code-path=二进制字节码wasm文件路径 --contract-name=合约名称 --runtime-type=类型 --sdk-conf-path=sdk配置文件 --version=版本号 --sync-result=是否返回结果 # put block 只要有读写操作区块高度就会递增

image-20220119162353500

image-20220119162412662

3.3 执行合约方法 ./cmc client contract user invoke \ --contract-name=chain_001 \ --method=save \ --sdk-conf-path=./testdata/sdk_config.yml \ --params="{\"file_name\":\"hello chainmaker\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"6543234\"}" \ --sync-result=true # 结果 INVOKE contract resp, [code:0]/[msg:OK]/[contractResult:result:"hello chainmakerab3456df5799b87c77e7f88" gas_used:13568342 contract_event: ]/[txId:bcd40a1cb41d48c89960517a824ad4fbe49dd7b46a704bbf9f1ed5a28b9165ee] --method=save 方法 --params=传参数

image-20220119162844328

image-20220119162927155

3.4 查询合约 # 根据file_hash查询 ./cmc client contract user get \ --contract-name=chain_001 \ --method=find_by_file_hash \ --sdk-conf-path=./testdata/sdk_config.yml \ --params="{\"file_hash\":\"ab3456df5799b87c77e7f88\"}" # 结果 QUERY contract resp: message:"SUCCESS" contract_result:


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有