基于ChainMaker实现部署集群部署合约区块链服务(java)
Posted fish1208
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于ChainMaker实现部署集群部署合约区块链服务(java)相关的知识,希望对你有一定的参考价值。
安装软件
安装git
yum install git -y
持久化账号
git config --global credential.helper store
git config --global user.name "用户名"
git config --global user.password "密码"
安装go
解压
tar -C /usr/local -zxvf go1.17.2.linux-amd64.tar.gz
修改配置文件
vi /etc/profile
# 在最后一行添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
source /etc/profile
查看版本
go version
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
安装
yum install docker-ce-18.06.3.ce-3.el7 -y
启动
systemctl enable docker
systemctl start docker
配置镜像加速器,通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
"registry-mirrors": ["https://ijdk512y.mirror.aliyuncs.com"]
EOF
systemctl daemon-reload
systemctl restart docker
查看版本
docker -v
安装docker-compose
运行此命令以下载 Docker Compose 的当前稳定版本
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
二进制文件应用可执行权限
chmod +x /usr/local/bin/docker-compose
创建链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看版本
docker-compose -version
安装net-tools tree gcc g++
yum install -y net-tools
yum install -y tree
yum install -y gcc g++
安装java
mkdir /usr/local/java
tar -C /usr/local/java -zxvf jdk-8u191-linux-x64.tar.gz
配置Java环境,编辑/etc/profile文件
vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
部署ChainMaker
创建目录
mkdir -p /opt/blockchain
下载chainmaker源码、证书生成工具源码到本地
cd /opt/blockchain
git clone https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git
git clone https://git.chainmaker.org.cn/chainmaker/chainmaker-cryptogen.git
编译证书生成工具
cd chainmaker-cryptogen
make
软连接
将编译好的chainmaker-cryptogen,软连接到chainmaker-go/tools目录
cd chainmaker-go/tools
ln -s ../../chainmaker-cryptogen/ .
部署集群
使用原始的身份模式(即证书模式)部署。也可以选择其它身份模式部署,详细操作请参考长安链官网(https://chainmaker.org.cn/)。
cd /opt/blockchain/chainmaker-go/scripts
生成单链4节点集群的证书和配置
./prepare.sh 4 1
编译及安装包制作
执行build_release.sh脚本,将编译chainmaker-go模块,并打包生成安装,存于路径chainmaker-go/build/release中
./build_release.sh
查看
tree -L 1 ../build/release/
启动节点集群
./cluster_quick_start.sh normal
查看节点启动使用正常
查看进程是否存在
ps -ef | grep chainmaker
查看端口是否监听
netstat -lptn | grep 1230
查看多节点达成共识
使用最旧的日志查看
cd /opt/blockchain/chainmaker-go/build/release/chainmaker-v2.1.0_alpha-wx-org1.chainmaker.org/log
cat system.log.2021120615 | grep "init blockchain\\[chain1\\] success\\|all necessary peers connected"
查看出块标记
使用最旧的日志查看
cd /opt/blockchain/chainmaker-go/build/release/chainmaker-v2.1.0_alpha-wx-org1.chainmaker.org/log
cat system.log.2021120615 | grep "ERROR\\|put block"
生成java-sdk的jar包
下载sdk源码到本地
cd /opt/blockchain
git clone https://git.chainmaker.org.cn/chainmaker/sdk-java.git
编译、生成jar包
cd sdk-java
./gradlew build
生成的jar包
cd build/libs
使用Rust进行智能合约开发
使用Docker镜像进行合约开发
拉取镜像
docker pull chainmakerofficial/chainmaker-rust-contract:2.1.0
设置本机的工作目录,挂载到docker容器中,以方便后续进行必要的文件拷贝
cd /opt/blockchain
mkdir -p contract/rust
运行docker容器并进入容器
docker run -it --name chainmaker-rust-contract -v /opt/blockchain/contract/rust:/home chainmakerofficial/chainmaker-rust-contract:2.1.0 bash
宿主机操作
合约地址:https://github.com/hongfish/fish1208-chainmaker-javasdk/tree/master/contract
将helloworld合约拷贝到/opt/blockchain/contract/rust目录下
编译合约(容器中操作)
进入容器
docker exec -it chainmaker-rust-contract bash
编译合约
cd /home/contract_helloworld
make build
生成的wasm文件存在于target/wasm32-unknown-unknown/release目录下
部署合约
生成cmc
cd /opt/blockchain/chainmaker-go/tools/cmc
go env -w GOPROXY=https://goproxy.io,direct
go build
./cmc --help
拷贝wasm文件(宿主机上操作)
cd /opt/blockchain/contract/rust/contract_helloworld/target/wasm32-unknown-unknown/release
cp contract_helloworld.wasm /opt/blockchain/chainmaker-go/tools/cmc/testdata/helloworld-wasm
拷贝crypto-config证书
cp -r /opt/blockchain/chainmaker-go/build/crypto-config /opt/blockchain/chainmaker-go/tools/cmc/testdata
部署合约
./cmc client contract user create \\
--contract-name=helloworld \\
--runtime-type=WASMER \\
--byte-code-path=./testdata/helloworld-wasm/contract_helloworld.wasm \\
--version=1.0 \\
--sdk-conf-path=./testdata/sdk_config.yml \\
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key \\
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt \\
--sync-result=true \\
--params=""
结果:
response: message:"OK" contract_result:<result:"\\n\\nhelloworld\\022\\0031.0\\030\\002*<\\n\\026wx-org1.chainmaker.org\\020\\001\\032 WM-\\206\\255/WS\\241\\3422Z N\\271<PB\\302\\006zB^\\2638\\216^\\345Z" message:"OK" > tx_id:"d1d9c7e9ed4b44d582e76f0d3aaedfc7c15185e04d8d4651b81e4d33043a241d"
升级合约
./cmc client contract user upgrade \\
--contract-name=helloworld \\
--runtime-type=WASMER \\
--byte-code-path=./testdata/helloworld-wasm/contract_helloworld.wasm \\
--version=2.0 \\
--sdk-conf-path=./testdata/sdk_config.yml \\
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key \\
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt \\
--sync-result=true \\
--params=""
执行合约
INVOKE contract
./cmc client contract user invoke \\
--contract-name=helloworld \\
--method=set \\
--sdk-conf-path=./testdata/sdk_config.yml \\
--params="\\"n\\":\\"Hello World2\\"" \\
--sync-result=true
结果:
INVOKE contract resp, [code:0]/[msg:OK]/[contractResult:gas_used:7086583 ]/[txId:ce99e71478944697b8596034b3e26e99c24103946ef14e92879545d58af3a54c]
QUERY contract
./cmc client contract user get \\
--contract-name=helloworld \\
--method=get \\
--sdk-conf-path=./testdata/sdk_config.yml \\
--params=""
结果:
QUERY contract resp: message:"SUCCESS" contract_result:<result:"\\"n\\":\\"Hello World2\\"" gas_used:17802379 > tx_id:"976c35496aee4564ba03ab92e629c2fa6b853695514d4a3bb93966e4cef366f6"
Java服务调用合约
使用java-sdk实现的区块链服务调用合约。
java服务地址: https://github.com/hongfish/fish1208-chainmaker-javasdk
HelloWorld合约set方法
HelloWorld合约get方法
以上是关于基于ChainMaker实现部署集群部署合约区块链服务(java)的主要内容,如果未能解决你的问题,请参考以下文章