docker安装fabric链码

docker-compose -f docker-compose-3orderer.yaml up -d

输出结果:

Creating network "docker_default" with the default driver
Creating orderer0.example.com ... done
Creating orderer1.example.com ... done
Creating fabric-cli           ... done
Creating orderer2.example.com ... done
docker-compose -f docker-compose-org1.yaml up -d

输出结果:

WARNING: Found orphan containers (fabric-cli, orderer0.example.com, orderer2.example.com, orderer1.example.com) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating peer1.org1.couchdb ... done
Creating peer0.org1.couchdb ... done
Creating peer0.org1.example.com ... done
Creating peer1.org1.example.com ... done
docker-compose -f docker-compose-org2.yaml up -d

输出结果:

WARNING: Found orphan containers (peer0.org1.example.com, peer1.org1.couchdb, orderer2.example.com, peer0.org1.couchdb, orderer0.example.com, fabric-cli, orderer1.example.com, peer1.org1.example.com) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating peer0.org2.couchdb ... done
Creating peer1.org2.couchdb     ... done
Creating peer0.org2.example.com ... done
Creating peer1.org2.example.com ... done

进入fabric-cli:

docker exec -it fabric-cli bash

创建通道,生成bussinesschannel.block文件:

export APP_CHANNEL=businesschannel
export TIMEOUT=30
export CORE_PEER_LOCALMSPID=Org1MSP
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

peer channel create -o orderer0.example.com:7050 -c ${APP_CHANNEL} -f "/tmp/channel-artifacts/$APP_CHANNEL.tx" --timeout "${TIMEOUT}s" --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
mv businesschannel.block /tmp/channel-artifacts/

org1-peer0加入通道:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
peer channel join -b /tmp/channel-artifacts/businesschannel.block

输出结果:

[020 04-14 13:06:58.33 UTC] [channelCmd] executeJoin -> INFO Successfully submitted proposal to join channel

org1-peer1加入通道:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer1.org1.example.com:8051
peer channel join -b /tmp/channel-artifacts/businesschannel.block

输出结果:

[020 04-14 13:16:46.35 UTC] [channelCmd] executeJoin -> INFO Successfully submitted proposal to join channel

org2-peer0加入通道:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
peer channel join -b /tmp/channel-artifacts/businesschannel.block

输出结果:

[020 04-14 13:19:51.05 UTC] [channelCmd] executeJoin -> INFO Successfully submitted proposal to join channel

org2-peer1 加入通道:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer1.org2.example.com:10051
peer channel join -b /tmp/channel-artifacts/businesschannel.block

输出结果:

[020 04-14 13:21:11.98 UTC] [channelCmd] executeJoin -> INFO Successfully submitted proposal to join channel

安装链码:在宿主机的/home/lighthouse/fabric3O/chaincodes下载合约代码:

git clone https://gitee.com/kernelHP/hyperledger-fabric-contract-java-demo.git
cd hyperledger-fabric-contract-java-demo/

编译打包源码:

mvn compile package -DskipTests -Dmaven.test.skip=true
mv target/chaincode.jar $PWD
rm -rf target/ src pom.xml

打包链码:

peer lifecycle chaincode package hyperledger-fabric-contract-java-demo.tar.gz --path ./hyperledger-fabric-contract-java-demo/ --lang java --label hyperledger-fabric-contract-java-demo_1

安装链码:org1-peer0:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

输出结果:

[020 04-14 13:34:15.68 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Installed remotely: response:<status:200 payload:"\nhhyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41\022'hyperledger-fabric-contract-java-demo_1" > 
[021 04-14 13:34:15.68 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Chaincode code package identifier: hyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41

安装org1-peer1:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer1.org1.example.com:8051
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

输出结果:

[020 04-14 13:35:51.91 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Installed remotely: response:<status:200 payload:"\nhhyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41\022'hyperledger-fabric-contract-java-demo_1" > 
[021 04-14 13:35:51.91 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Chaincode code package identifier: hyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41

安装org2-peer0:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

输出结果:

[020 04-14 13:37:20.18 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Installed remotely: response:<status:200 payload:"\nhhyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41\022'hyperledger-fabric-contract-java-demo_1" > 
[021 04-14 13:37:20.18 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Chaincode code package identifier: hyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41

安装org2-peer1:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer1.org2.example.com:10051
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz

输出结果:

[020 04-14 13:38:49.06 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Installed remotely: response:<status:200 payload:"\nhhyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41\022'hyperledger-fabric-contract-java-demo_1" > 
[021 04-14 13:38:49.06 UTC] [cli.lifecycle.chaincode] submitInstallProposal -> INFO Chaincode code package identifier: hyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41

查询包id:

peer lifecycle chaincode queryinstalled

包ID是链码标签和链码二进制文件的哈希值的组合。每个peer节点将生成相同的包ID。输出结果:

Installed chaincodes on peer:
Package ID: hyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41, Label: hyperledger-fabric-contract-java-demo_1

将包ID保存为环境变量:

export CC_PACKAGE_ID=hyperledger-fabric-contract-java-demo_1:3c28345df18eb39906f49df16a6774392d366ad8a21aa2fa98a3db405ec6db41

批准链码定义:org1:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
peer lifecycle chaincode approveformyorg -o orderer0.example.com:7050 --ordererTLSHostnameOverride orderer0.example.com --channelID businesschannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

输出结果:

[025 04-14 13:51:17.85 UTC] [chaincodeCmd] ClientWait -> INFO txid [c3c375c7b2da9e0048fb71e8be266dfa67db1506643f99f0f5552c10f77f0757] committed with status (VALID) at peer0.org1.example.com:7051

批准org2:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
peer lifecycle chaincode approveformyorg -o orderer0.example.com:7050 --ordererTLSHostnameOverride orderer0.example.com --channelID businesschannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

输出结果:

[025 04-14 13:53:51.84 UTC] [chaincodeCmd] ClientWait -> INFO txid [ac4c08c586a52b51350f8c5a5a5ee01538e77d5c9b9fe1619d58e593626d5662] committed with status (VALID) at peer0.org2.example.com:9051

检查通道成员是否已批准相同的链码定义:

peer lifecycle chaincode checkcommitreadiness --channelID businesschannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

输出结果:

153FD955104145BF071844A092819E023D 
{
        "approvals": {
                "Org1MSP": true,
                "Org2MSP": true
        }
}

将链码提交到通道::

peer lifecycle chaincode commit -o orderer0.example.com:7050 --ordererTLSHostnameOverride orderer0.example.com --channelID businesschannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

输出结果:

[029 04-14 13:56:24.90 UTC] [chaincodeCmd] ClientWait -> INFO txid [c29003a4b848971ca280ad68482c2d009d55ba45788b024411953aaba0a6a0ce] committed with status (VALID) at peer0.org1.example.com:7051
[02a 04-14 13:56:25.09 UTC] [chaincodeCmd] ClientWait -> INFO txid [c29003a4b848971ca280ad68482c2d009d55ba45788b024411953aaba0a6a0ce] committed with status (VALID) at peer0.org2.example.com:9051

调用链码:

peer chaincode invoke -o orderer0.example.com:7050 --ordererTLSHostnameOverride orderer0.example.com --tls --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C businesschannel -n hyperledger-fabric-contract-java-demo --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"createCat","Args":["cat-0" , "tom" ,  "3" , "蓝色" , "大懒猫"]}'
peer chaincode query -C businesschannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'

 结束容器:

docker-compose -f docker-compose-3orderer.yaml down
docker-compose -f docker-compose-org2.yaml down
docker-compose -f docker-compose-org1.yaml down

 

posted @   只能说运气有点好  阅读(251)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示