# 部署PK账户模式的链 ## 通过命令行启动PK模式的链 ### 环境依赖 #### 硬件环境 | 配置 | 最低配置 | 推荐配置 | | ---- | -------- | -------- | | CPU | 1.5GHz | 2.4GHz | | 内存 | 8GB | 16GB | | 核心 | 4核 | 8核 | | 带宽 | 2Mb | 10Mb | #### 软件环境 当前文档在centos7.6操作下完成,以下为本次演示所需的依赖,软件列表如下: | 名称 | 版本 | 描述 | 是否必须 | | --------------------------------------------- | ----- | ------------------------------------------------------------ | -------- | | git | / | 源码管理 | 是 | | golang | 1.16-1.19 | 编译环境(需修改国内代理) | 是 | | gcc | 7.3+ | 编译环境依赖 | 是 | | glibc | 2.18 | 智能合约执行环境依赖 | 是 | | tmux | / | 默认快速启动命令依赖 | 否 | | wasmer运行时库 **libwasmer_runtime_c_api.so** | / | https://git.chainmaker.org.cn/chainmaker/vm-wasmer/-/tree/master/wasmer-go/packaged/lib 目录下,找到对应链分支的库,将该库路径添加至系统PATH环境变量下
启动脚本默认包含,单独启动需加上如下配置:
cd deployPath/lib
cp xxx/main/libwasmer_runtime_c_api.so libwasmer.so
export LD_LIBRARY_PATH=deployPath/lib:$LD_LIBRARY_PATH | 是 | ##### git 下载地址:[https://git-scm.com/downloads](https://git-scm.com/downloads) 安装步骤,请参看:[https://git-scm.com/book/en/v2/Getting-Started-Installing-Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) ##### golang > 版本为1.16-1.19 下载地址:[https://golang.org/dl/](https://golang.org/dl/) 安装步骤,请参看:[https://golang.org/doc/install](https://golang.org/doc/install) ##### gcc 1. 检查 gcc 版本 ```bash gcc --version ``` 显示结果若 < 7.3,则执行下面步骤升级 2. 升级 gcc ```bash sudo yum install centos-release-scl sudo yum install devtoolset-7-gcc* scl enable devtoolset-7 bash ``` 注意:第三条指令`scl enable devtoolset-7 bash` 只是在当前会话中升级了gcc,如果想每次登录gcc自动升级,可以把`scl enable devtoolset-7 bash` 放在` ~/.bash_profile` 文件中。 ### 环境搭建 下面将介绍`使用脚本搭建`搭建环境。 > 适用于`Linux`、`MacOS` #### 源码下载 从[长安链官网](https://chainmaker.org.cn/)下载源码:[https://git.chainmaker.org.cn/chainmaker/chainmaker-go](https://git.chainmaker.org.cn/chainmaker/chainmaker-go) > 当前为私有仓库,需要先进行账号注册 - 下载`chainmaker-go`源码到本地 ```bash $ git clone -b v2.3.3 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git ``` - 下载`证书生成工具`源码到本地 ```bash $ git clone -b v2.3.0 --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-cryptogen.git ``` #### 源码编译 - 编译证书生成工具 ```bash $ cd chainmaker-cryptogen $ make ``` #### 配置文件生成 - 将编译好的`chainmaker-cryptogen`,软连接到`chainmaker-go/tools`目录 ```bash # 进入工具目录 $ cd chainmaker-go/tools # 软连接chainmaker-cryptogen到tools目录下 $ ln -s ../../chainmaker-cryptogen/ . ``` #### 账户生成 - 进入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 (1-TBFT(default),5-DPOS): 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 ``` #### 编译和安装包制作 - 生成账号(prepare.sh脚本)后执行build_release.sh脚本,将编译chainmaker-go模块,并打包生成安装,存于路径chainmaker-go/build/release中 ``` $ ./build_release.sh $ tree ../build/release/ ../build/release/ ├── chainmaker-v2.0.0-wx-org1.chainmaker.org-20210406194833-x86_64.tar.gz ├── chainmaker-v2.0.0-wx-org2.chainmaker.org-20210406194833-x86_64.tar.gz ├── chainmaker-v2.0.0-wx-org3.chainmaker.org-20210406194833-x86_64.tar.gz ├── chainmaker-v2.0.0-wx-org4.chainmaker.org-20210406194833-x86_64.tar.gz └── crypto-config-20210406194833.tar.gz ``` #### 启动和停止链 - 执行cluster_quick_start.sh脚本,会解压各个安装包,调用bin目录中的start.sh脚本,启动chainmaker节点 ``` $ ./cluster_quick_start.sh normal ``` - 启动成功后,将*.tar.gz备份,以免下次启动再次解压缩时文件被覆盖 ``` $ mkdir -p ../build/bak $ mv ../build/release/*.tar.gz ../build/bak ``` 若需要关闭集群,使用脚本: ``` $ ./cluster_quick_stop.sh ``` #### 查看节点是否存在 - 查看进程 ``` $ 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 ``` - 查看端口 ``` $ 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 ``` - 查看日志 ``` $ cat ../build/release/*/bin/panic.log $ cat ../build/release/*/log/system.log $ cat ../build/release/*/log/system.log |grep "ERROR\|put block\|all necessary" //若看到all necessary peers connected则表示节点已经准备就绪。 ``` #### 部署/调用智能合约 启动成功后,可进行部署/调用合约测试,以验证链是否正常运行。 此处提供示例合约的已编译之后的合约文件,可直接下载文件并部署合约。 - Rust:[rust-fact-2.0.0.wasm](https://git.chainmaker.org.cn/chainmaker/chainmaker-go/-/raw/v2.2.0/test/wasm/rust-fact-2.0.0.wasm) ##### CMC工具配置 使用长安链命令行工具cmc进行测试,详细教程请见[命令行工具pk](../dev/命令行工具pk.html#交易功能) 其中,cmc工具配置文件sdk_config_pk.yaml需要进行相应修改,主要修改以下配置: - 客户端私钥:user_sign_key_file_path ```yaml chain_client: # 链ID chain_id: "chain1" # 客户端用户交易签名私钥路径 user_sign_key_file_path: "./testdata/crypto-config/node1/admin/admin1/admin1.key" # 管理员1私钥 # 签名使用的哈希算法,和节点保持一直 crypto: hash: SHA256 auth_type: public # 默认支持TimestampKey,如果开启enableNormalKey则使用NormalKey enable_normal_key: false nodes: - # 节点地址,格式为:IP:端口:连接数 node_addr: "127.0.0.1:12301" # 节点连接数 conn_cnt: 10 - # 节点地址,格式为:IP:端口:连接数 node_addr: "127.0.0.1:12302" # 节点连接数 conn_cnt: 10 archive: # 数据归档链外存储相关配置 type: "mysql" dest: "root:123456:localhost:3306" secret_key: xxx rpc_client: max_receive_message_size: 16 # grpc客户端接收消息时,允许单条message大小的最大值(MB) max_send_message_size: 16 # grpc客户端发送消息时,允许单条message大小的最大值(MB) ``` 注:由于我们使用管理员账户进行测试,所以user_sign_key_file_path需要指定管理员私钥 #### 使用长安链SDK进行测试 - 通过长安链SDK进行部署/调用,详情[SDK使用说明章节](../sdk/GoSDK使用说明.md) - 需要将SDK所需的相关证书替换成,上文所生成的证书,然后进行操作。 ## 通过管理台启动pk模式的链 #### 登录 - 私有化部署本平台时会生成的对应的admin账号,默认密码为a123456 #### 新增节点账户 - 填写账户备注名 - 选择节点账户 - 支持申请国密和非国密两种证书。 #### 新增用户账户 - 填写账户备注名 - 选择用户账户 - 支持申请国密和非国密两种证书。 #### 新建区块链 - 选择公钥模式 - 链配置文件参数设定 - 此处用于新增链配置文件,目前支持自定义链的id、名称、区块最大容量,出块间隔、交易过期时长,以及共识配置。 - 目前支持配置TBFT、DPOS等共识。 - 申请链配置文件前,请先确保,所需的节点和用户账户已经申请/导入本管理平台。 - 支持根据需求选择你要部署的链所支持的虚拟机类型。 - 支持单机部署和多机部署,请正确填写所要之后要部署区块链节点的机器所在的ip,并确保端口不冲突。 - 如果开启报错日志采集服务,则在您部署到链运行过程中如果发生异常,管理台会收集报错日志,并汇总展示,方便定位问题。如果您开启了参与长安链改进计划,则采集到的报错日志,将自动上传给长安链官方团队,方便团队持续改进产品。 #### 下载部署链 - 部署区块链 - 下载链配置以zip包为准,zip包包含对应的链配置文件和部署脚本 - 将下载的包移动到需要部署的机器上去(可以使用scp进行移动) - 执行`unzip`解压成`release`包,进入`release`包执行`start.sh`进行启动 #### 快速订阅链 - 链部署成功之后在管理台进行快速订阅 - 公钥需要选择公钥模式 #### 部署/调用合约验证链是否正常 订阅成功后,可进行部署/调用示例合约,以检查链功能是否正常。部署合约的使用教程可详见:[部署示例合约](./部署示例合约.md)。