3. 大规模灵活共识机制使用文档
开源代码地址:https://git.chainweaver.org.cn/stcsm/flextender
3.1. 概述
本使用文档旨在帮助用户快速了解并使用“大规模灵活共识机制”相关能力,包括环境配置,代码编译,节点启动,合约部署等。
3.2. 环境依赖
3.2.1. 硬件要求
| 配置 | 最低配置 | 推荐配置 |
|---|---|---|
| 内存 | 8GB | 16GB |
| 核心 | 4 核 | 8 核 |
3.2.2. 软件依赖
| 名称 | 版本 | 描述 | 是否必须 |
|---|---|---|---|
| docker | 24+ | 运行go合约的容器 | 是 |
| 7z | / | 代码解压缩的依赖 | 是 |
| jq | / | 解析、过滤、提取 JSON 数据 | 是 |
3.3. 运行环境安装
在每个节点上依次执行以下命令,完成基础运行环境的安装。
sudo apt-get update
# 安装 jq
sudo apt-get install -y jq
# 安装 7zip
sudo apt-get install -y p7zip-full p7zip-rar
# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 启动 Docker 服务
sudo service docker start
3.4. 节点IP与noise网络初始化配置
进入目录
cd /home/ubuntu/flex-newscripts/chainmaker-go/scripts/multi
按照下列格式将共识节点和relayer节点的IP填入nodes.json和relayers.json

进入目录
cd /home/ubuntu/lib/getkey
运行
go run noise.go 1
来获取noise网络配置

3.5. 启动长安链节点
进入目录
cd /home/ubuntu/flex-newscripts/chainmaker-go/scripts
准备配置文件并编译 ChainMaker,然后将其部署到实例上,运行区块链网络。依次执行:
sudo ./remote_cgroup.sh
./remote_deploy_largescale.sh -p
./remote_deploy_largescale.sh -d
./remote_deploy_largescale.sh -a start
./deploy_relayer.sh

随后开启coordinator 用于启动共识层
cd /home/ubuntu/co
go run main.go

3.6. 部署token合约并测试
1.部署合约
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd /home/ubuntu/deploy-2025-10-29/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user create \
--contract-name=Token1 \
--version=1.0 \
--sync-result=true \
--timeout=60 \
--sdk-conf-path=./sdk_config_remote.yml \
--byte-code-path=./Token.7z \
--runtime-type=DOCKER_GO \
--admin-crt-file-paths=../../config/wx-org1.chainmaker.org/certs/user/admin1/admin1.sign.crt \
--admin-key-file-paths=../../config/wx-org1.chainmaker.org/certs/user/admin1/admin1.sign.key \
--params='{\"name\":\"token1\", \"symbol\":\"token1\", \"decimals\":\"8\"}'" \
2>&1 | tee deploy.log
(将IP替换为第一个节点的IP ,将2025-10-29替换为当前日期)

2.获取合约admin地址
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd /home/ubuntu/deploy-2025-10-29/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user get \
--contract-name=Token1 \
--method=Admin \
--sdk-conf-path=./sdk_config_remote.yml \
--params='{}'" \
2>&1 | tee admin.log

调用base64解码工具进行解码,如下图所示

3.给admin地址mint token
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd /home/ubuntu/deploy-2025-10-29/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user invoke \
--contract-name=Token1 \
--method=Mint \
--sync-result=true \
--sdk-conf-path=./sdk_config_remote.yml \
--params='{\"account\":\"2e4003afd7b929c12fb59a7d365a48067f46556f\", \"amount\":\"1000000000000\"}'" \
2>&1 | tee mint.log

4.调用transfer交易
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd /home/ubuntu/deploy-2025-10-29/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user invoke \
--contract-name=Token1 \
--method=Transfer \
--sync-result=false \
--sdk-conf-path=./sdk_config_remote.yml \
--params='{\"to\":\"0a7369a1a6d1b0663b1c126a44c5accf53cf58e6\", \"amount\":\"1\"}'" \
2>&1 | tee transfer.log

3.7. 部署存证合约并测试
将存证合约文件scp到测试机器(第一台)
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 "mkdir -p /home/ubuntu/contract" && \
scp -i /home/ubuntu/.ssh/aws \
/home/ubuntu/lib/chainmaker-go/tools/cmc/testdata/claim-wasm-demo/rust-fact-2.0.0.wasm \
ubuntu@127.0.0.1:/home/ubuntu/contract/
部署存证合约
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd ~/deploy-2025-12-23/chainmaker-v2.3.6-wx-org.chainmaker.org/bin/cmc && \
./cmc client contract user create \
--contract-name=fact \
--runtime-type=WASMER \
--byte-code-path=/home/ubuntu/contract/rust-fact-2.0.0.wasm \
--version=1.0 \
--sdk-conf-path=/home/ubuntu/deploy-2025-12-23/chainmaker-v2.3.6-wx-org.chainmaker.org/bin/cmc/sdk_config_remote.yml \
--admin-key-file-paths=/home/ubuntu/deploy-2025-12-23/chainmaker-v2.3.6-wx-org.chainmaker.org/config/wx-org1.chainmaker.org/certs/user/admin1/admin1.sign.key \
--admin-crt-file-paths=/home/ubuntu/deploy-2025-12-23/chainmaker-v2.3.6-wx-org.chainmaker.org/config/wx-org1.chainmaker.org/certs/user/admin1/admin1.sign.crt \
--sync-result=true \
--params='{}'"
3.调用存证合约
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd ~/deploy-2025-12-23/chainmaker-v2.3.6-wx-org.chainmaker.org/bin/cmc && \
./cmc client contract user invoke \
--contract-name=fact \
--method=save \
--sdk-conf-path=/home/ubuntu/deploy-2025-12-23/chainmaker-v2.3.6-wx-org.chainmaker.org/bin/cmc/sdk_config_remote.yml \
--params='{\"file_name\":\"name007\",\"file_hash\":\"ab3456df5799b87c77e7f88\",\"time\":\"48\"}' \
--sync-result=false"
3.8. 测试系统合约
1.初始化账户余额
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd ~/deploy-2026-01-06/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user invoke \
--contract-name=T \
--method=INITK \
--sdk-conf-path=./sdk_config_remote.yml \
--params='{\"count\":\"100\"}' \
--sync-result=true"
2.调用Transfer进行转账
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd ~/deploy-2026-01-06/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user invoke \
--contract-name=T \
--method=TRANSFER \
--sdk-conf-path=./sdk_config_remote.yml \
--params='{\"from\":\"from1\",\"to\":\"to1\",\"amount\":\"1\"}' \
--sync-result=true"
3.查询账户余额
ssh -i /home/ubuntu/.ssh/aws ubuntu@127.0.0.1 \
"cd ~/deploy-2026-01-06/chainmaker-v2.3.6-wx-org1.chainmaker.org/bin/cmc && \
./cmc client contract user invoke \
--contract-name=T \
--method=BALANCE \
--sdk-conf-path=./sdk_config_remote.yml \
--params='{\"addr\":\"from1\"}' \
--sync-result=true"