創建一個智能合約並部署(java)
環境
jdk:java version “1.8.0_221”
gradle:Gradle 5.6.2
fabric:1.4.1
centos:
注意:
gradle需要配置本地倉庫和jvm,gradle和maven都可以採用,不過gradle 5.6.2配置本地倉庫和jvm比較麻煩(IBM官方教程用的gradle),官方沒有提供教程,筆者在這裏浪費了很多時間。
部署
- 部署單機單節點fabric網絡
- 將編輯好的Java chaincode拷貝到
/opt/gopath/src/github.com/hyperledger/fabric/singlepeer/chaincode/java
目錄下,如果不存在此目錄,請自行創建。
鏈碼的位置需要的文件:
運行
關閉和刪除已存在的進程
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
生成公私鑰和證書
./bin/cryptogen generate --config=./crypto-config.yaml
生成創世區塊
mkdir channel-artifacts
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
生成通道配置區塊
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel
啓動orderer和peer
docker-compose -f docker-compose-cli.yaml up -d
啓動cli容器
docker exec -it cli bash
創建channel
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx
peer加入channel
peer channel join -b mychannel.block
安裝鏈碼
peer chaincode install -n mycc -p /opt/gopath/src/github.com/hyperledger/fabric/singlepeer/chaincode/java -v 1.0 -l java
注意:-p
後面的是docker容器中鏈碼所在的位置,命令中-l java
表示安裝的鏈碼由java編寫
實例化智能合約
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -l java -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer')"
java編寫的鏈碼編譯速度較慢,耐心等待
查詢
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
轉賬
peer chaincode invoke -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
參考:
- 博客園博主靈龍關於Fabric 1.4 單機單節點部署(solo)的實例:https://www.cnblogs.com/llongst/p/9571321.html
- 鏈碼實例參考fabric-chaincode-java-1.4.1,地址:https://github.com/hyperledger/fabric-chaincode-java/tree/v1.4.1
- IBM教程:https://www.ibm.com/developerworks/java/library/j-chaincode-for-java-developers/j-chaincode-for-java-developers-pdf.pdf