【元壤BaaS】长安链开发之命令行部署启动长安链

公众号:元壤

元壤yr.xyz:一分钟搭建您专属的NFT数字藏品服务平台。

写在前面:

长安链文档:https://docs.chainmaker.org.cn/

本系列教程,是以长安链官方文档为基准。很多文字描述我直接复制官方文档,我只是将自己的使用过程,整理出来。也欢迎留言讨论。

通过命令行工具启动链

1.1. 概述

通过本文你将可以搭建起长安链多节点集群,并使用命令行工具和SDK完成长安链功能的体验。

通过源码搭建长安链并且上链查数据需要以下步骤,本文将一一演示

  • 下载长安链及证书管理工具源码
  • 编译源码
  • 生成节点证书
  • 编译及安装包制作
  • 启动节点集群
  • 查看节点状态
  • 使用CMC工具安装、调用、查询一个合约
  • 使用GO SDK验证合约

2.2. 环境依赖

2.2.1. 硬件依赖

配置 最低配置 推荐配置
CPU 1.5GHz 2.4GHz
内存 8GB 16GB
核心 4核 8核
带宽 2Mb 10Mb

2.2.2. 软件依赖

当前文档在centos7.6操作下完成,以下为本次演示所需的依赖 软件列表如下:

名称 版本 描述 是否必须
git / 源码管理
golang 1.16+ 编译环境
docker 18+ 独立运行容器
docker-compose / 容器管理组件
gcc 7.3+ 编译环境依赖
glibc 2.18 智能合约执行环境依赖
tmux / 默认快速启动命令依赖
wasmer运行时库 libwasmer_runtime_c_api.so / 库在chainmaker-go/main目录下,将该库路径添加至系统PATH环境变量下 启动脚本默认包含,单独启动需加上如下配置: cd deployPath/lib cp xxx/main/libwasmer_runtime_c_api.so libwasmer.so export LD_LIBRARY_PATH=deployPath/lib:$LD_LIBRARY_PATH

2.3. 环境搭建

下面将介绍使用脚本搭建使用Docker搭建两种方式搭建环境,任选一种即可。

2.3.1. 使用脚本搭建

适用于LinuxMacOS

2.3.1.1. 源码下载

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

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

  • 下载chainmaker源码到本地
$ git clone https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git

WX20220715-181144@2x

  • 下载证书生成工具源码到本地
$ git clone -b v2.2.0 https://git.chainmaker.org.cn/chainmaker/chainmaker-cryptogen.git

WX20220715-183424@2x

下载到本地你想放置的目录:

WX20220718-171706@2x

2.3.1.2. 源码编译

  • 编译证书生成工具
$ cd chainmaker-cryptogen
$ make

WX20220718-171924@2x

也可以查看本地项目目录:

WX20220803-110123@2x

2.3.1.3. 配置文件生成

  • 将编译好的chainmaker-cryptogen,软连接到chainmaker-go/tools目录
# 进入工具目录
$ cd chainmaker-go/tools

# 软连接chainmaker-cryptogen到tools目录下
$ ln -s ../../chainmaker-cryptogen/ .

WX20220718-172051@2x

  • 2.1版本之后,ChainMaker支持多种身份模式,由于不同身份模式下,配置文件的目录结构和内容差异较大,我们提供了不同的生成配置文件的脚本。根据场景,选择需要使用的身份模式PermissionedWithCert、PermissionedWithKey、Public(详情见身份权限管理),从下面脚本中选择一种即可

身份模式这里,我最早用了PermissionedWithCert,但是它需要将用户添加到组织。后来我就改成了Public模式。

2.3.1.3.3. Public

2.1版本之后新增的身份模式,详情见身份权限管理

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

prepare_pk.sh脚本支持生成4/7/10/13/16节点公私钥和配置

# 进入脚本目录
$ cd ../scripts

# 查看脚本帮助
$ ./prepare_pk.sh -h
Usage:
  prepare_pk.sh node_cnt(4/7/10/13/16) chain_cnt(1-4) p2p_port(default:11301) rpc_port(default:12301)
    eg1: prepare_pk.sh 4 1
    eg2: prepare_pk.sh 4 1 11301 12301

# 生成单链4节点集群的密钥和配置
$ ./prepare_pk.sh 4 1
begin check params...
begin generate keys, cnt: 4
input consensus type (5-DPOS(default)):
input log level (DEBUG|INFO(default)|WARN|ERROR):
input hash type (SHA256(default)|SM3):
enable docker vm (YES|NO(default))
config node total 4
begin generate node1 config...
begin generate node2 config...
begin generate node3 config...
begin generate node4 config...

# 查看生成好的节点密钥和配置
$ tree -L 3 ../build/
../build/
├── config
│   ├── node1
│   │   ├── admin
│   │   ├── chainconfig
│   │   ├── chainmaker.yml
│   │   ├── log.yml
│   │   ├── node1.key
│   │   ├── node1.nodeid
│   │   ├── node1.pem
│   │   └── user
│   ├── node2
│   │   ├── admin
│   │   ├── chainconfig
│   │   ├── chainmaker.yml
│   │   ├── log.yml
│   │   ├── node2.key
│   │   ├── node2.nodeid
│   │   ├── node2.pem
│   │   └── user
│   ├── node3
│   │   ├── admin
│   │   ├── chainconfig
│   │   ├── chainmaker.yml
│   │   ├── log.yml
│   │   ├── node3.key
│   │   ├── node3.nodeid
│   │   ├── node3.pem
│   │   └── user
│   └── node4
│       ├── admin
│       ├── chainconfig
│       ├── chainmaker.yml
│       ├── log.yml
│       ├── node4.key
│       ├── node4.nodeid
│       ├── node4.pem
│       └── user
├── crypto-config
│   ├── node1
│   │   ├── admin
│   │   ├── node1.key
│   │   ├── node1.nodeid
│   │   ├── node1.pem
│   │   └── user
│   ├── node2
│   │   ├── admin
│   │   ├── node2.key
│   │   ├── node2.nodeid
│   │   ├── node2.pem
│   │   └── user
│   ├── node3
│   │   ├── admin
│   │   ├── node3.key
│   │   ├── node3.nodeid
│   │   ├── node3.pem
│   │   └── user
│   └── node4
│       ├── admin
│       ├── node4.key
│       ├── node4.nodeid
│       ├── node4.pem
│       └── user
└── crypto_config.yml   

查看帮助脚本:

WX20220803-111827@2x

生成单链4节点集群的密钥和配置:

WX20220803-112005@2x

查看生成好的节点密钥和配置:

WX20220803-112228@2x

或者直接查看本地目录:

WX20220803-112143@2x

这里一对儿密钥:

WX20220803-114634@2x

  • 关于自动生成的端口说明

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

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

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

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

2.3.1.4. 编译及安装包制作

  • 生成证书(prepare.sh脚本)后执行build_release.sh脚本,将编译chainmaker-go模块,并打包生成安装,存于路径chainmaker-go/build/release
$ ./build_release.sh
$ tree ../build/release/
../build/release/
├── chainmaker-v2.2.1-node1-20220803115954-x86_64.tar.gz
├── chainmaker-v2.2.1-node2-20220803115954-x86_64.tar.gz
├── chainmaker-v2.2.1-node3-20220803115954-x86_64.tar.gz
├── chainmaker-v2.2.1-node4-20220803115954-x86_64.tar.gz
└── crypto-config-20220803115954.tar.gz

WX20220803-120120@2x

查看目录:

WX20220803-120235@2x

2.3.1.5. 启动节点集群

  • 执行cluster_quick_start.sh脚本,会解压各个安装包,调用bin目录中的start.sh脚本,启动chainmaker节点
$ ./cluster_quick_start.sh normal

运行效果:

hanru@localhost scripts % ./cluster_quick_start.sh normal
===> Unzip chainmaker installation package
x chainmaker-v2.2.1-node1/
x chainmaker-v2.2.1-node1/bin/
x chainmaker-v2.2.1-node1/config/
x chainmaker-v2.2.1-node1/lib/
x chainmaker-v2.2.1-node1/log/
x chainmaker-v2.2.1-node1/lib/wxdec
x chainmaker-v2.2.1-node1/lib/libwasmer.dylib
x chainmaker-v2.2.1-node1/config/node1/
x chainmaker-v2.2.1-node1/config/node1/log.yml
x chainmaker-v2.2.1-node1/config/node1/node1.nodeid
x chainmaker-v2.2.1-node1/config/node1/chainconfig/
x chainmaker-v2.2.1-node1/config/node1/admin/
x chainmaker-v2.2.1-node1/config/node1/user/
x chainmaker-v2.2.1-node1/config/node1/chainmaker.yml
x chainmaker-v2.2.1-node1/config/node1/node1.pem
x chainmaker-v2.2.1-node1/config/node1/node1.key
x chainmaker-v2.2.1-node1/config/node1/user/client1/
x chainmaker-v2.2.1-node1/config/node1/user/client1/client1.pem
x chainmaker-v2.2.1-node1/config/node1/user/client1/client1.key
x chainmaker-v2.2.1-node1/config/node1/user/client1/client1.addr
x chainmaker-v2.2.1-node1/config/node1/admin/admin1/
x chainmaker-v2.2.1-node1/config/node1/admin/admin2/
x chainmaker-v2.2.1-node1/config/node1/admin/admin5/
x chainmaker-v2.2.1-node1/config/node1/admin/admin4/
x chainmaker-v2.2.1-node1/config/node1/admin/admin3/
x chainmaker-v2.2.1-node1/config/node1/admin/admin3/admin3.pem
x chainmaker-v2.2.1-node1/config/node1/admin/admin3/admin3.key
x chainmaker-v2.2.1-node1/config/node1/admin/admin4/admin4.pem
x chainmaker-v2.2.1-node1/config/node1/admin/admin4/admin4.key
x chainmaker-v2.2.1-node1/config/node1/admin/admin5/admin5.pem
x chainmaker-v2.2.1-node1/config/node1/admin/admin5/admin5.key
x chainmaker-v2.2.1-node1/config/node1/admin/admin2/admin2.pem
x chainmaker-v2.2.1-node1/config/node1/admin/admin2/admin2.key
x chainmaker-v2.2.1-node1/config/node1/admin/admin1/admin1.pem
x chainmaker-v2.2.1-node1/config/node1/admin/admin1/admin1.key
x chainmaker-v2.2.1-node1/config/node1/chainconfig/bc1.yml
x chainmaker-v2.2.1-node1/bin/docker-vm-standalone-start.sh
x chainmaker-v2.2.1-node1/bin/restart.sh
x chainmaker-v2.2.1-node1/bin/docker-vm-standalone-stop.sh
x chainmaker-v2.2.1-node1/bin/init.sh
x chainmaker-v2.2.1-node1/bin/run.sh
x chainmaker-v2.2.1-node1/bin/stop.sh
x chainmaker-v2.2.1-node1/bin/chainmaker
x chainmaker-v2.2.1-node1/bin/chainmaker.service
x chainmaker-v2.2.1-node1/bin/start.sh
x chainmaker-v2.2.1-node2/
x chainmaker-v2.2.1-node2/bin/
x chainmaker-v2.2.1-node2/config/
x chainmaker-v2.2.1-node2/lib/
x chainmaker-v2.2.1-node2/log/
x chainmaker-v2.2.1-node2/lib/wxdec
x chainmaker-v2.2.1-node2/lib/libwasmer.dylib
x chainmaker-v2.2.1-node2/config/node2/
x chainmaker-v2.2.1-node2/config/node2/log.yml
x chainmaker-v2.2.1-node2/config/node2/chainconfig/
x chainmaker-v2.2.1-node2/config/node2/admin/
x chainmaker-v2.2.1-node2/config/node2/user/
x chainmaker-v2.2.1-node2/config/node2/node2.pem
x chainmaker-v2.2.1-node2/config/node2/node2.nodeid
x chainmaker-v2.2.1-node2/config/node2/chainmaker.yml
x chainmaker-v2.2.1-node2/config/node2/node2.key
x chainmaker-v2.2.1-node2/config/node2/user/client1/
x chainmaker-v2.2.1-node2/config/node2/user/client1/client1.pem
x chainmaker-v2.2.1-node2/config/node2/user/client1/client1.key
x chainmaker-v2.2.1-node2/config/node2/user/client1/client1.addr
x chainmaker-v2.2.1-node2/config/node2/admin/admin1/
x chainmaker-v2.2.1-node2/config/node2/admin/admin2/
x chainmaker-v2.2.1-node2/config/node2/admin/admin5/
x chainmaker-v2.2.1-node2/config/node2/admin/admin4/
x chainmaker-v2.2.1-node2/config/node2/admin/admin3/
x chainmaker-v2.2.1-node2/config/node2/admin/admin3/admin3.pem
x chainmaker-v2.2.1-node2/config/node2/admin/admin3/admin3.key
x chainmaker-v2.2.1-node2/config/node2/admin/admin4/admin4.pem
x chainmaker-v2.2.1-node2/config/node2/admin/admin4/admin4.key
x chainmaker-v2.2.1-node2/config/node2/admin/admin5/admin5.pem
x chainmaker-v2.2.1-node2/config/node2/admin/admin5/admin5.key
x chainmaker-v2.2.1-node2/config/node2/admin/admin2/admin2.pem
x chainmaker-v2.2.1-node2/config/node2/admin/admin2/admin2.key
x chainmaker-v2.2.1-node2/config/node2/admin/admin1/admin1.pem
x chainmaker-v2.2.1-node2/config/node2/admin/admin1/admin1.key
x chainmaker-v2.2.1-node2/config/node2/chainconfig/bc1.yml
x chainmaker-v2.2.1-node2/bin/docker-vm-standalone-start.sh
x chainmaker-v2.2.1-node2/bin/restart.sh
x chainmaker-v2.2.1-node2/bin/docker-vm-standalone-stop.sh
x chainmaker-v2.2.1-node2/bin/init.sh
x chainmaker-v2.2.1-node2/bin/run.sh
x chainmaker-v2.2.1-node2/bin/stop.sh
x chainmaker-v2.2.1-node2/bin/chainmaker
x chainmaker-v2.2.1-node2/bin/chainmaker.service
x chainmaker-v2.2.1-node2/bin/start.sh
x chainmaker-v2.2.1-node3/
x chainmaker-v2.2.1-node3/bin/
x chainmaker-v2.2.1-node3/config/
x chainmaker-v2.2.1-node3/lib/
x chainmaker-v2.2.1-node3/log/
x chainmaker-v2.2.1-node3/lib/wxdec
x chainmaker-v2.2.1-node3/lib/libwasmer.dylib
x chainmaker-v2.2.1-node3/config/node3/
x chainmaker-v2.2.1-node3/config/node3/log.yml
x chainmaker-v2.2.1-node3/config/node3/node3.nodeid
x chainmaker-v2.2.1-node3/config/node3/chainconfig/
x chainmaker-v2.2.1-node3/config/node3/admin/
x chainmaker-v2.2.1-node3/config/node3/user/
x chainmaker-v2.2.1-node3/config/node3/node3.pem
x chainmaker-v2.2.1-node3/config/node3/chainmaker.yml
x chainmaker-v2.2.1-node3/config/node3/node3.key
x chainmaker-v2.2.1-node3/config/node3/user/client1/
x chainmaker-v2.2.1-node3/config/node3/user/client1/client1.pem
x chainmaker-v2.2.1-node3/config/node3/user/client1/client1.key
x chainmaker-v2.2.1-node3/config/node3/user/client1/client1.addr
x chainmaker-v2.2.1-node3/config/node3/admin/admin1/
x chainmaker-v2.2.1-node3/config/node3/admin/admin2/
x chainmaker-v2.2.1-node3/config/node3/admin/admin5/
x chainmaker-v2.2.1-node3/config/node3/admin/admin4/
x chainmaker-v2.2.1-node3/config/node3/admin/admin3/
x chainmaker-v2.2.1-node3/config/node3/admin/admin3/admin3.pem
x chainmaker-v2.2.1-node3/config/node3/admin/admin3/admin3.key
x chainmaker-v2.2.1-node3/config/node3/admin/admin4/admin4.pem
x chainmaker-v2.2.1-node3/config/node3/admin/admin4/admin4.key
x chainmaker-v2.2.1-node3/config/node3/admin/admin5/admin5.pem
x chainmaker-v2.2.1-node3/config/node3/admin/admin5/admin5.key
x chainmaker-v2.2.1-node3/config/node3/admin/admin2/admin2.pem
x chainmaker-v2.2.1-node3/config/node3/admin/admin2/admin2.key
x chainmaker-v2.2.1-node3/config/node3/admin/admin1/admin1.pem
x chainmaker-v2.2.1-node3/config/node3/admin/admin1/admin1.key
x chainmaker-v2.2.1-node3/config/node3/chainconfig/bc1.yml
x chainmaker-v2.2.1-node3/bin/docker-vm-standalone-start.sh
x chainmaker-v2.2.1-node3/bin/restart.sh
x chainmaker-v2.2.1-node3/bin/docker-vm-standalone-stop.sh
x chainmaker-v2.2.1-node3/bin/init.sh
x chainmaker-v2.2.1-node3/bin/run.sh
x chainmaker-v2.2.1-node3/bin/stop.sh
x chainmaker-v2.2.1-node3/bin/chainmaker
x chainmaker-v2.2.1-node3/bin/chainmaker.service
x chainmaker-v2.2.1-node3/bin/start.sh
x chainmaker-v2.2.1-node4/
x chainmaker-v2.2.1-node4/bin/
x chainmaker-v2.2.1-node4/config/
x chainmaker-v2.2.1-node4/lib/
x chainmaker-v2.2.1-node4/log/
x chainmaker-v2.2.1-node4/lib/wxdec
x chainmaker-v2.2.1-node4/lib/libwasmer.dylib
x chainmaker-v2.2.1-node4/config/node4/
x chainmaker-v2.2.1-node4/config/node4/log.yml
x chainmaker-v2.2.1-node4/config/node4/chainconfig/
x chainmaker-v2.2.1-node4/config/node4/admin/
x chainmaker-v2.2.1-node4/config/node4/user/
x chainmaker-v2.2.1-node4/config/node4/chainmaker.yml
x chainmaker-v2.2.1-node4/config/node4/node4.pem
x chainmaker-v2.2.1-node4/config/node4/node4.nodeid
x chainmaker-v2.2.1-node4/config/node4/node4.key
x chainmaker-v2.2.1-node4/config/node4/user/client1/
x chainmaker-v2.2.1-node4/config/node4/user/client1/client1.pem
x chainmaker-v2.2.1-node4/config/node4/user/client1/client1.key
x chainmaker-v2.2.1-node4/config/node4/user/client1/client1.addr
x chainmaker-v2.2.1-node4/config/node4/admin/admin1/
x chainmaker-v2.2.1-node4/config/node4/admin/admin2/
x chainmaker-v2.2.1-node4/config/node4/admin/admin5/
x chainmaker-v2.2.1-node4/config/node4/admin/admin4/
x chainmaker-v2.2.1-node4/config/node4/admin/admin3/
x chainmaker-v2.2.1-node4/config/node4/admin/admin3/admin3.pem
x chainmaker-v2.2.1-node4/config/node4/admin/admin3/admin3.key
x chainmaker-v2.2.1-node4/config/node4/admin/admin4/admin4.pem
x chainmaker-v2.2.1-node4/config/node4/admin/admin4/admin4.key
x chainmaker-v2.2.1-node4/config/node4/admin/admin5/admin5.pem
x chainmaker-v2.2.1-node4/config/node4/admin/admin5/admin5.key
x chainmaker-v2.2.1-node4/config/node4/admin/admin2/admin2.pem
x chainmaker-v2.2.1-node4/config/node4/admin/admin2/admin2.key
x chainmaker-v2.2.1-node4/config/node4/admin/admin1/admin1.pem
x chainmaker-v2.2.1-node4/config/node4/admin/admin1/admin1.key
x chainmaker-v2.2.1-node4/config/node4/chainconfig/bc1.yml
x chainmaker-v2.2.1-node4/bin/docker-vm-standalone-start.sh
x chainmaker-v2.2.1-node4/bin/restart.sh
x chainmaker-v2.2.1-node4/bin/docker-vm-standalone-stop.sh
x chainmaker-v2.2.1-node4/bin/init.sh
x chainmaker-v2.2.1-node4/bin/run.sh
x chainmaker-v2.2.1-node4/bin/stop.sh
x chainmaker-v2.2.1-node4/bin/chainmaker
x chainmaker-v2.2.1-node4/bin/chainmaker.service
x chainmaker-v2.2.1-node4/bin/start.sh
===> Starting chainmaker cluster
START ==>  /Users/hanru/Documents/程序咖/chainmaker/chainmaker-go/build/release/chainmaker-v2.2.1-node1
chainmaker is startting, pls check log...
START ==>  /Users/hanru/Documents/程序咖/chainmaker/chainmaker-go/build/release/chainmaker-v2.2.1-node2
chainmaker is startting, pls check log...
START ==>  /Users/hanru/Documents/程序咖/chainmaker/chainmaker-go/build/release/chainmaker-v2.2.1-node3
chainmaker is startting, pls check log...
START ==>  /Users/hanru/Documents/程序咖/chainmaker/chainmaker-go/build/release/chainmaker-v2.2.1-node4
chainmaker is startting, pls check log...
hanru@localhost scripts % 

启动效果:

WX20220803-120539@2x

  • 启动成功后,将*.gar.gz备份,以免下次启动再次解压缩时文件被覆盖
$ mkdir -p ../build/bak
$ mv ../build/release/*.tar.gz ../build/bak

做好备份:

WX20220803-120721@2x

若需要关闭集群,使用脚本:

$ ./cluster_quick_stop.sh

2.3.1.6. 查看节点启动使用正常

  • 查看进程是否存在
$ ps -ef|grep chainmaker | grep -v grep
25261  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org1.chainmaker.org/chainmaker.yml
25286  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org2.chainmaker.org/chainmaker.yml
25309  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org3.chainmaker.org/chainmaker.yml
25335  2146  4 19:55 pts/20   00:00:01 ./chainmaker start -c ../config/wx-org4.chainmaker.org/chainmaker.yml

WX20220803-120933@2x

  • 查看端口是否监听
$ netstat -lptn | grep 1230
tcp6       0      0 :::12301                :::*                    LISTEN      25261/./chainmaker  
tcp6       0      0 :::12302                :::*                    LISTEN      25286/./chainmaker  
tcp6       0      0 :::12303                :::*                    LISTEN      25309/./chainmaker  
tcp6       0      0 :::12304                :::*                    LISTEN      25335/./chainmaker 

mac下,命令稍改一下:netstat -anv | grep 1230

WX20220803-121050@2x

  • 检查节点是否有ERROR日志
$ cat ../build/release/*/bin/panic.log
$ cat ../build/release/*/log/system.log
$ cat ../build/release/*/log/system.log |grep "ERROR\|put block\|all necessary"

打开活动监视器也能看见这4个服务:

WX20220803-121145@2x

相关新闻

联系我们

联系我们

133-3118-4066

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部