安裝軟體
安裝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方法

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376073.html
標籤:區塊鏈
上一篇:如何從Nginx上的certbot獲取受信任的證書?
下一篇:在Nginx中使用條件鏡像
