HyperLedger Fabric 2.0 (развертывание Raft)

блокчейн

Подготовьте 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"]}'