10. 链下扩容工具
10.1. 简介
链下扩容是 ChainMaker 之上的扩展,以链上智能合约为信任背书,通过高安全、高可用、高性能的处理交易,以整体提升交易处理性能。
了解技术细节,请参考链下扩容技术文档。
10.2. 编译&配置
下载代码
$ git clone https://git.chainmaker.org.cn/ibpc/offchain-channel-scaling
编译&运行方式如下:
创建工作目录 $WORKDIR 比如 ~/chainmaker
启动测试链 在工作目录下 使用脚本搭建
需要 注意 的是,在启动长安链时,需要开启 docker VM。
# 编译
$ cd $WORKDIR/offchain-channel-scaling/
$ make build
$ cp -rf $WORKDIR/chainmaker-go/build/crypto-config $WORKDIR/offchain-channel-scaling/testdata/ # 使用chainmaker-cryptogen生成的测试链的证书
# 查看help
$ ./bin/oce --help
最后修改 $WORKDIR/offchain-channel-scaling/config/sdk_config*.yaml
文件 nodes.node_addr
为启动的测试链的 RPC ip:port
10.3. 自定义配置
oce 依赖自有配置 config.yaml 和 sdk-go 配置文件 sdk_config.yaml
编译和配置使用的是模板文件
可通过修改 $WORKDIR/offchain-channel-scaling/config.yaml
、 $WORKDIR/offchain-channel-scaling/sdk-config.yaml
实现自定义配置。
比如 sign_priv_key_file
,sign_cert_file
可以设置为普通用户或 admin 用户的证书/私钥路径。
其他详细配置项请看 $WORKDIR/offchain−channel−scaling/config.yaml
中的注解。
10.4. 智能合约部署
合约代码在 $WORKDIR/offchain-channel-scaling/contract
目录下,编译生成合约参考使用Golang进行智能合约开发章节,编译机上需要安装 7z 压缩工具,在上述所说目录下,执行 ./build.sh
即可执行生成合约,生成好之后有两个合约 channel_contract.7z
和 stake_contract.7z
,在部署的测试链上首先部署channel_contract.7z
合约,之后再部署 stake_contract.7z
合约。
也可使用已经编译好的合约,直接部署,使用如下命令即可直接部署:
make deploy_contract
10.4.1. 修改合约名称
如果需要自定义合约名称,在项目中全局替换:
channel_contract
替换为xxx_contract
。stake_contract
替换为yyy_contract
。
10.5. 启动链下扩容
10.5.1. 使用自己部署的链启动链下通道
一种简单的启动四节点通道办法:
make four
稍微等待几秒命令执行完会启动一个 4 节点的链下通道,之后节点间可以进行交易。
不同机器间 组成链下通道的步骤:
在各个节点下载项目
修改 config 目录下 net.listen_addr 配置,127.0.0.1 改为本机节点 IP。
启动各个节点的程序
# 节点 1 用 config.yaml ./bin/oce chan create -c config/config.yaml -b 30000 -n chan1 # 节点 2 用 config2.yaml ./bin/oce chan join -c config/config2.yaml -b 30000 -n chan1 # 节点 3 用 config3.yaml ./bin/oce chan join -c config/config3.yaml -b 30000 -n chan1 # 节点 4 用 config4.yaml ./bin/oce chan join -c config/config4.yaml -b 30000 -n chan1
10.5.2. 使用测试网络启动链下通道
项目切到 cmtestnet 分支,命令如下:
git checkout cmtestnet
之后到 长安链 · ChainMaker 测试网络 注册账号并申请用户证书,下载下来证书后,放到项目 testdata/test-crypto/wx-org5.chainmaker.org/user/
目录下,修改配置文件对应证书位置,之后下载 chainmaker / common 库到项目同级目录,修改 go.mod
文件如下行,取消注释。
// replace chainmaker.org/chainmaker/common/v2 => ../common
之后打开下载的 common
项目,打开 crypto/x509/verify.go
文件,修改如下位置代码,大约 780 行:
keyUsages := opts.KeyUsages
if len(keyUsages) == 0 {
keyUsages = []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}
}
添加 x509.ExtKeyUsageClientAuth
,如下:
keyUsages := opts.KeyUsages
if len(keyUsages) == 0 {
keyUsages = []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}
}
保存后,回到链下扩容项目,重新构建可执行文件,之后按 5.1 正常执行即可。
10.6. 节点间交易:
./bin/oce chan trade -a 10 -n chan1 -i QmfHFdpTN1RCLvvqpivwF5KwDTefaGMNezqxw7MoZRzmjh -c config/config.yaml -s
注解:
-a 交易数
-n 通道名称
-i 目标节点id
-c 配置文件
-s 同步返回结果
注:
自己的节点 id 会在加入或创建通道时回显到屏幕上,如下:
channel create success, nodeID: QmUtQmnGVyvmBcKHqbmywiHJwU5p5CrbsVynKuRSocKrDs
channel join success, nodeID: QmfHFdpTN1RCLvvqpivwF5KwDTefaGMNezqxw7MoZRzmjh
10.7. 查询余额
./bin/oce chan balance -n chan1 -c config/config.yaml
注解:
-n 通道名称
-c 配置文件
10.8. 节点创建通道
./bin/oce chan create -c config/config.yaml -b 30000 -n chan1
注解:
-c 配置文件
-b 金额
-n 通道名称
10.9. 节点加入通道
./bin/oce chan join -c config/config2.yaml -b 30000 -n chan1
注解:
-c 配置文件
-b 金额
-n 通道名称
10.10. 节点退出通道
./bin/oce chan exit -n chan1 -c config/config4.yaml
注解:
-c 配置文件
-n 通道名称