Подготовьте 8 виртуальных машин, здесь Vagrant используется для создания centos7, 1 используется для службы nfs (здесь используется служба nfs, нет необходимости копировать сертификаты, блоки и другие файлы между хостами), а остальные 7 используются для развертывания фабрики узла, как показано на следующем рисунке:
Файл конфигурации создания виртуальной машины и ресурсы развертывания структуры упакованы.Нажмите здесь, чтобы получить, если вы его уже получили, перейдите в эту папку и начните разворачивать плотную сеть Fabric2.0.
Генерация конфигурации ткани
Нам нужно сгенерировать файлы сертификатов, блоки генезиса и файлы каналов в каталоге /share сервера NFS.
Сначала запустите виртуальную машину NFS Server, переключитесь на пользователя root и войдите в каталог /share.
#启动虚拟机
vagrant up nfsserver
#登录虚拟机
vagrant ssh nfsserver
####以下在虚拟机内执行####
#切换root用户
sudo su
cd /share
Далее сгенерируйте сертификат
./bin/cryptogen generate --config=./crypto-config.yaml
Чтобы сгенерировать блок генезиса, сначала создайте папку с артефактами канала.
mkdir channel-artifacts
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block -channelID system
Генерировать канал.
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel
Хорошо, файлы конфигурации, необходимые для структуры, созданы, и кластер Orderer развернут следующим.
Развернуть кластер Orderer
yaml файл ноды ордера готов, его нужно только запустить через docker-compose.
Сначала запустите три виртуальные машины заказчика
vagrant up orderer0
vagrant up orderer1
vagrant up orderer2
Запустите узел orderer0, узел orderer1 и узел orderer2 соответственно на трех виртуальных машинах заказчика.
docker-compose -f docker-compose-orderer-00.yaml up -d
docker-compose -f docker-compose-orderer-01.yaml up -d
docker-compose -f docker-compose-orderer-02.yaml up -d
ordererПосле завершения развертывания кластера вы можете развернутьOrg1иOrg2
Развертывание Org1 и Org2
Запустите оставшиеся 4 виртуальные машины: peer0-org1, pee1-org1, peer0-org2, peer1-org2.
vagrant up peer0org1
vagrant up peer1org1
vagrant up peer0org2
vagrant up peer1org2
Запустите узлы peer0-org1, peer1-org1, peer0-org2 и peer1-org2 на четырех виртуальных машинах соответственно.
docker-compose -f docker-compose-peer0-org1.yaml up -d
docker-compose -f docker-compose-peer1-org1.yaml up -d
docker-compose -f docker-compose-peer0-org2.yaml up -d
docker-compose -f docker-compose-peer1-org2.yaml up -d
присоединиться к каналу
Когда все узлы запущены и работают нормально, инструмент cli можно использовать для создания каналов, присоединения к каналам, развертывания контрактов и контрактов вызовов.
Сначала создайте канал на хосте узла peer0-org1, вам нужно войти в контейнер cli.
docker exec -it cli bash
Все нижеследующее выполняется внутри контейнера cli.
Создайте канал, вам нужен сертификат узла упорядочения.
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer channel create -o orderer0.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx --outputBlock ./channel-artifacts/mychannel.block --tls --cafile $ORDERER_CA
присоединиться к каналу
# peer 加入channel
peer channel join -b ./channel-artifacts/mychannel.block
хорошо, теперь канал создан, peer0-org1 присоединился к каналу, и остальные три одноранговых узла также будут добавлены в канал.
После выполнения следующих команд на трех узловых узлах, peer1-org1, peer0-org2 и peer1-org2, канал соединения завершается.
#进入cli
docker exec -it cli bash
peer channel join -b ./channel-artifacts/mychannel.block
После добавления канала контракт можно развернуть.
развернуть контракт
Жизненный цикл чейнкода Fabric 2.0 претерпел серьезные изменения.Для завершения развертывания контракта необходимы следующие шаги:
- Цепной код упаковки
- Установить чейнкод
- Организационное одобрение
- Отправить чейнкод
Упакованный чейнкод должен быть выполнен на одноранговой ноде.Когда контракт упакован, он должен зависеть от пакета.Здесь go mod vebdor используется для загрузки зависимостей.
#cli容器中
cd chaincode/go/abstore
#下载依赖文件
go mod vendor
#回到初吃目录
cd ../../../
#打包链码
peer lifecycle chaincode package cc.tar.gz --path github.com/hyperledger/fabric/peer/chaincode/go/abstore --lang golang --label mycc
Установите ChareCode, который необходимо выполнить на каждом узле узел.
#cli容器中
#安装链码
peer lifecycle chaincode install cc.tar.gz
Запрос на установку чейнкода
#cli容器中
#查询安装的链码,可以获取到链码的 package_id
peer lifecycle chaincode queryinstalled
Текущая организация утверждает цепочку. По умолчанию Fabric 2.0 требует утверждения кода цепочки более чем половиной организаций. На этот раз в сети Fabric развернуты две организации, поэтому обе организации должны утвердить код цепочки; цепочка утверждения код должен быть утвержден только в организации. Контейнер cli любого однорангового узла может выполнять операцию утверждения.
Для утверждения кода цепочки необходимо использовать package_id кода цепочки. В этой сети развертывания необходимо выполнить только следующие команды на узлах peer0-org1 и peer0-org2.
peer lifecycle chaincode approveformyorg --tls true --cafile $ORDERER_CA --channelID mychannel -n mycc -v 1 --init-required --package-id mycc:3ffc03cb2be5e15eac954c8c836ca994d5f298901b35087bd12b336caf2142fb --sequence 1 --waitForEvent
Запрос статуса утверждения чейнкода
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc -v 1 --sequence 1 --output json --init-required
Когда появится результат, показанный на рисунке выше, то есть более половины организаций одобрили, можно будет выполнить отправку кода цепочки.
Чтобы отправить код цепочки, выполните следующие команды в контейнере cli любого однорангового хоста.Убедитесь, что каждая утвержденная организация отправляет данные одновременно, то есть одноранговые узлы в каждой утвержденной организации участвуют в отправке вместе. В следующей команде во время инициализации указываются peer0.org1.example.com и peer0.org2.example.com. .
peer lifecycle chaincode commit -o orderer0.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1 --sequence 1 --init-required --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
Посмотреть отправленные чейнкоды
peer lifecycle chaincode querycommitted -C mychannel -n mycc
Чтобы инициализировать контракт, выполните следующие команды в cli-контейнере любого однорангового хоста.Убедитесь, что каждая утвержденная организация участвует в инициализации одновременно, то есть одноранговые узлы в каждой утвержденной организации участвуют в инициализации вместе. В следующей команде во время инициализации указываются peer0.org1.example.com и peer0.org2.example.com.
peer chaincode invoke -o orderer0.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"Args":["Init","a","100","b","100"]}'
Запросите значение a, результат показывает 100.
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'