# 大规模灵活共识机制使用文档 开源代码地址:https://git.chainweaver.org.cn/stcsm/flextender ## 概述 本使用文档旨在帮助用户快速了解并使用“大规模灵活共识机制”相关能力,包括环境配置,代码编译,节点启动,合约部署等。 ## 环境依赖 ### 硬件要求 | 配置 | 最低配置 | 推荐配置 | |------|----------|----------| | 内存 | 8GB | 16GB | | 核心 | 4 核 | 8 核 | ### 软件依赖 | 名称 | 版本 | 描述 | 是否必须 | |--------|-----------|----------------------------------------------------|----------| | docker | 24+ | 运行go合约的容器 | 是 | | 7z | / | 代码解压缩的依赖 | 是 | | jq | / | 解析、过滤、提取 JSON 数据 | 是 | ## 运行环境安装 在每个节点上依次执行以下命令,完成基础运行环境的安装。 ```bash 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 ``` ## 节点IP与noise网络初始化配置 进入目录 ```bash cd /home/ubuntu/flex-newscripts/chainmaker-go/scripts/multi ``` 按照下列格式将共识节点和relayer节点的IP填入nodes.json和relayers.json ![img.png](../images/CuttingEdgeManual-FE-ip.png) 进入目录 ```bash cd /home/ubuntu/lib/getkey ``` 运行 ```bash go run noise.go 1 ``` 来获取noise网络配置 ![img.png](../images/CuttingEdgeManual-FE-noise.png) ## 启动长安链节点 进入目录 ```bash cd /home/ubuntu/flex-newscripts/chainmaker-go/scripts ``` 准备配置文件并编译 ChainMaker,然后将其部署到实例上,运行区块链网络。依次执行: ```bash sudo ./remote_cgroup.sh ./remote_deploy_largescale.sh -p ./remote_deploy_largescale.sh -d ./remote_deploy_largescale.sh -a start ./deploy_relayer.sh ``` ![img.png](../images/CuttingEdgeManual-FE-start.png) 随后开启coordinator 用于启动共识层 ```bash cd /home/ubuntu/co go run main.go ``` ![img.png](../images/CuttingEdgeManual-FE-co.png) ## 部署token合约并测试 1.部署合约 ```bash 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替换为当前日期) ![img.png](../images/CuttingEdgeManual-FE-deploy.png) 2.获取合约admin地址 ```bash 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 ``` ![img.png](../images/CuttingEdgeManual-FE-admin.png) 调用base64解码工具进行解码,如下图所示 ![img.png](../images/CuttingEdgeManual-FE-base.png) 3.给admin地址mint token ```bash 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 ``` ![img.png](../images/CuttingEdgeManual-FE-mint.png) 4.调用transfer交易 ```bash 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 ``` ![img.png](../images/CuttingEdgeManual-FE-transfer.png) ## 部署存证合约并测试 1. 将存证合约文件scp到测试机器(第一台) ```bash 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/ ``` 2. 部署存证合约 ```bash 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.调用存证合约 ```bash 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" ``` ## 测试系统合约 1.初始化账户余额 ```bash 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进行转账 ```bash 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.查询账户余额 ```bash 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" ```