长安链 部署及测试(一)
作者:明神特烦恼
公众号:明神特烦恼
长安链介绍:
长安链·ChainMaker是新一代区块链开源底层软件平台,包含区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施。
“长安链·ChainMaker”具备自主可控、灵活装配、软硬一体、开源开放的突出特点,由北京微芯研究院、清华大学、北京航空航天大学、腾讯和百度等知名高校、企业共同研发。取名“长安链”,喻意“长治久安、再创辉煌、链接世界”。
长安链作为区块链开源底层软件平台,包涵区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施,同时也是国内首个自主可控区块链软硬件技术体系。
长安链的应用场景,涵盖供应链金融、碳交易、食品追溯等一系列关乎国计民生的重大领域。
官网地址:https://chainmaker.org/
代码集地址: https://git.chainmaker.org.cn/users/chainmaker/projects
文档地址:https://docs.chainmaker.org.cn/
长安链是新型的国内自主研发的区块链底层平台之一,目前正在快速发展中。我们本次学习的目的是深入研究与学习长安链,来判断其技术能力及发展潜力**
。本文与大家一起学习长安链的集群部署、安装合约、测试合约。
1. 项目集介绍
代码地址:https://git.chainmaker.org.cn/users/chainmaker/projects(账号需要注册)
1) chainmaker-go
长安链底层核心代码,由rpc接口、交易池、共识、合约引擎等模块构成,也是各区块链平台的核心优势点,也是我们判断其平台能力的主要评估点。总之一句话,灰常重要。
2) chainmaker-explorer chainmaker-explorer-web
区块链浏览器,可用来展示区块链的链个数、区块高度、区块内容、部署的合约个数、总交易数等等,相当于对整个区块链系统的profile,由于我们还没有进行深入研究,先放上一张对比照片fabric的~
2) chainmaker-cryptogen
根据配置文件生成证书体系,该内容需要系统讲解,简单来讲:区块链系统不认识你,只认识密码学,你只能用公钥、证书等来证明你的身份。
3) chainmaker-docs
初学者的福音,这里的文章介绍是比较成体系的,由于整个项目在快速迭代,会有描述与代码版本不相符的地方,但基本不影响我们对他的理解,同时根据commit情况看代码的Readme是会更新的,当文档有问题时不妨先读下所查模块的Readme。
4) chainmaker-sdk-java chainmaker-sdk-go
访问区块链底层的sdk,可以执行压缩证书上链、合约管理、交易管理、查询等操作。
5) chainmaker-common
长安链通用组件库,chainmaker-go 会依赖该模块,由于长安链大部分模块都是用golang写的,common的高度封装为其他服务提供基础服务。也就是chainmaker go 与 common是依赖关系,在版本管理上使用的是submodule方式管理。
6) chainmaker-pb
长安链的proto库,可通过proto文件生成跨语言的rpc调用及统一的数据结构。
2. 集群部署
1)笔者软件环境
MacOS Catalina 10.15.7
go1.15
目前来看长安链对于linux系支持的较好,如果有同学使用linux不用担心兼容性问题。
2)集群部署
参照文档:https://git.chainmaker.org.cn/chainmaker/chainmaker-docs/-/blob/master/ChainMaker_Deploy_Manual.md
2.1)安装tmux
在启动集群时如果使用非normal方式启动,则使用tmux命令
Mac: brew install tmux
Centos:yum install tmux
2.2)下载源码
git clone –recurse-submodules https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git
cd chainmaker-go/tools
git clone –recurse-submodules https://git.chainmaker.org.cn/chainmaker/chainmaker-cryptogen.git
笔者所用版本chainmaker-go: commit a979e212910450adfa352c4282e807d0ec7bd7be
2.3)编译chainmaker-cryptogen
cd chainmaker-go/tools/chainmaker-cryptogen
make
2.4)生成证书
cd chainmaker-go/scripts
./prepare.sh 4 1 ## 参数4代表节点数量(和组织数量一致),1代表链数量
这里如果使用的是Mac电脑会报错,因为Mac默认的sed版本不是gnu的,这里可以修改一下prepare.sh文件。
修改内容(可复制):
num=$(sed -n "/seeds/=" $CONFIG_TPL_PATH/chainmaker.yml)
for ((k = $NODE_CNT; k > 0; k = k - 1)); do
sed -i -e "${num} a\
- "/ip4/127.0.0.1/tcp/$(($P2P_PORT_PREFIX+$k))/p2p/{org${k}_peerid}"\
" node$i/chainmaker.yml
done
该操作后,会在 ../build
目录下生成证书内容以及配置每个节点的配置文件内容。
2.5)制作部署包
cd chainmaker-go/scripts
./build_release.sh
2.6)启动集群
cd chainmaker-go/scripts
./cluster_quick_start.sh normal #这里与参考链接不同,不带normal参数会使用tmux终端复用能力,这里暂时不需要。
3. 集群观察
3.1) ps -ef | grep chainmaker
可以看到启动4个节点,属于4个组织
3.2) lsof -p 86650 | grep TCP
86650 为org1 节点进程号
可以看到org1节点启动3个端口监听,其中
- 节点间通信端口:11301
- 客户端连接端口:12301
- 监控端口: 12321
3.3) ledger存储位置
默认在chainmaker-go/build/release/chainmaker-V1.0.0-wx-org1.chainmaker.org/data/wx-org1.chainmaker.org
3.4) 日志路径
默认在chainmaker-go/build/release/chainmaker-V1.0.0-wx-org1.chainmaker.org/log
4. 部署测试合约
本次操作按照参考文档使用cmc工具,后续使用sdk再次操作合约。
4.1)拷贝crypto-config
cd chainmaker-go/tools/cmc
go mod download
go build
#拷贝sdk的配置文件和示例里cmc命令行需要使用的文件
cp -r ../sdk/testdata ./
rm -rf testdata/crypto-config
cp -r ../../build/crypto-config testdata/crypto-config
4.2)安装合约
./cmc client contract user create
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt
--org-id=wx-org1.chainmaker.org
--chain-id=chain1
--client-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.crt
--client-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.key
--byte-code-path=../../test/wasm/rust-asset-management-1.0.0.wasm
--contract-name=asset
--runtime-type=WASMER
--sdk-conf-path=./testdata/sdk_config.yml
--version=1.0
--sync-result=true
--params="{"issue_limit":"500000000","total_supply":"1000000000"}"
4.3)查询合约
./cmc client contract user get
--sdk-conf-path ./testdata/sdk_config.yml
--contract-name asset --method total_supply
至此整个集群部署工作结束。
5. 集群脚本
在上面的集群操作中涉及三个脚本prepare.sh、build_release.sh、cluster_quick_start.sh,这三个shell脚本通俗易懂,可清楚其证书生成方式及路径、配置文件生成方式及路径。
6. Next
在实际业务使用中,会通过sdk来调用区块链底层,下节将学习使用tinygo开发智能合约、编译智能合约,使用go版本的SDK安装、调用、查询智能合约。
关注作者,共同学习区块链技术。