作者:明神特烦恼
公众号:明神特烦恼

长安链介绍:
    长安链·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(账号需要注册)

长安链项目集合.png

1) chainmaker-go

   长安链底层核心代码,由rpc接口、交易池、共识、合约引擎等模块构成,也是各区块链平台的核心优势点,也是我们判断其平台能力的主要评估点。总之一句话,灰常重要。

2) chainmaker-explorer chainmaker-explorer-web

   区块链浏览器,可用来展示区块链的链个数、区块高度、区块内容、部署的合约个数、总交易数等等,相当于对整个区块链系统的profile,由于我们还没有进行深入研究,先放上一张对比照片fabric的~

对比照片.png

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文件。

修改位置.png

修改内容(可复制):

     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个组织

image.png
3.2) lsof -p 86650 | grep TCP 86650 为org1 节点进程号

可以看到org1节点启动3个端口监听,其中

  • 节点间通信端口:11301
  • 客户端连接端口:12301
  • 监控端口: 12321
image.png
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安装、调用、查询智能合约。

关注作者,共同学习区块链技术。

发表回复

后才能评论