Создание нового канала¶
В этом руководстве вы научитесь использовать инструмент командной строки configtxgen, а также команды peer channel для добавления одноранговых узлов в канал. Хотя в этом руководстве для создания нового канала используется тестовая сеть Fabric, все рассмотренные действия могут использоваться операторами сети в производственной среде.
В рамках процесса создания канала будут рассмотрены следующие этапы:
- Настройка инструмента configtxgen
- Использование файла configtx.yaml
- Системный канал службы упорядочения
- Создание канала приложений
- Добавление одноранговых узлов в канал
- Установка якорных узлов
Настройка инструмента configtxgen¶
Для создания канала сперва создается транзакция создания канала и отравляется в службу упорядочения. В транзакции
создания канала указывается начальная конфигурация канала, которая используется службой упорядочения для записи
первичного блока канала. Несмотря на то, что файл транзакции создания канала можно создать вручную, легче воспользоваться
инструментом configtxgen. Инструмент configtxgen считывает файл configtx.yaml
,
в котором содержится конфигурация канала, а затем записывает соответствующую информацию в транзакцию создания канала.
Прежде чем рассматривать файл configtx.yaml
, загрузим и настроим инструмент configtxgen
.
Исполняемые файлы для инструмента configtxgen
можно скачать и установить, следуя инструкциям из этого раздела.
Инструмент configtxgen
будет загружен в каталог bin
локального репозитория fabric-samples
вместе с другими инструментами Fabric.
В рамках этого учебного примера мы будем работать из подкаталога test-network
каталога fabric-samples
. Перейдите
к каталогу test-network
, используя следующую команду:
cd fabric-samples/test-network
До конца этого руководства мы будем использовать этот каталог. Используйте следующую команду для добавления инструмента configtxgen в путь интерфейса командной строки:
export PATH=${PWD}/../bin:$PATH
Для использования инструмента configtxgen
необходимо в переменной среды FABRIC_CFG_PATH
указать путь к каталогу,
в котором находится локальная копия файла configtx.yaml
. В рамках этого руководства будем ссылаться на файл configtx.yaml
в каталоге configtx
, используемый для настройки примера сети Fabric:
export FABRIC_CFG_PATH=${PWD}/configtx
Для проверки того, что инструмент configtxgen
работает, используйте следующую команду:
configtxgen --help
Файл configtx.yaml¶
В файле configtx.yaml
содержится информация, которая требуется для создания конфигурация канала,
в удобном для чтения и редактирования формате. Инструмент configtxgen
использует профили каналов,
указанные в файле configtx.yaml
, для создания конфигурации и сохранения ее в
формате protobuf, который считывается сетью Fabric.
Файл configtx.yaml
, используемый для развертывания примера сети, расположен в подкаталоге configtx
каталога test-network
.
Файл содержит следующую информацию, которая будет использоваться для создания нового канала:
Organizations: организации, которые могут стать членами канала. Каждая организация имеет ссылку на криптографические ключи, которые используются для создания провайдера службы членства канала.
Ordering service: здесь указываются узлы, которые войдут в состав службы упорядочения сети, а также метод консенсуса для согласования порядка транзакций. В файле также указываются организации, которые станут администраторами службы упорядочения.
Channel policies: в различных разделах файла указываются правила, которые будут управлять тем, как организации взаимодействуют с каналом, а также какие организации должны одобрять обновления канала. В рамках настоящего руководства будем использовать правила по умолчанию, используемые в сетях Fabric.
Channel profiles: каждый профиль канала использует информацию из других разделов файла
configtx.yaml
для создания конфигурации канала. Профили используются при создании первичных блоков системного канала службы упорядочения и каналов, которые будут использоваться организациями с одноранговыми узлами. В отличие от системного канала, каналы, используемые организациями с одноранговыми узлами, часто называют каналами приложений.Инструмент
configtxgen
использует файлconfigtx.yaml
для создания полноценного первичного блока системного канала. Т.е. в профиле системного канала должна быть указана полная конфигурация системного канала. Профиль канала, используемый для создания транзакции создания канала, должен содержать дополнительную информацию о конфигурации, необходимую для создания канала приложения.
Чтобы узнать больше об этом файле, смотрите раздел Использование файла configtx.yaml для создания конфигурации канала. Теперь перейдем непосредственно к процессу создания канала, хотя мы будем возвращаться к этому файлу еще много раз.
Запуск сети¶
Для создания канала нам понадобится тестовая сеть Fabric. В рамках этого учебного примера в качестве
начального состояния будем использовать вновь созданную сеть. Следующая команда удалит любые активные или устаревшие контейнеры,
а также ранее созданные артефакты. Убедитесь, что вы находитесь в подкаталоге test-network
локального клона fabric-samples
.
./network.sh down
Следующая команда запустит пример сети:
./network.sh up
Эта команда создаст сеть Fabric с двумя организациями-членами и одной организацией службы упорядочения, определенной
в файле configtx.yaml
. У организаций-членов будет по одному одноранговому узлу, а организация-администратор службы
упорядочения будет иметь один узел упорядочения. При выполнении этой команды сценарий выведет журналы создаваемых узлов:
Creating network "net_test" with the default driver
Creating volume "net_orderer.example.com" with default driver
Creating volume "net_peer0.org1.example.com" with default driver
Creating volume "net_peer0.org2.example.com" with default driver
Creating orderer.example.com ... done
Creating peer0.org2.example.com ... done
Creating peer0.org1.example.com ... done
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d0c74b9d6af hyperledger/fabric-orderer:latest "orderer" 4 seconds ago Up Less than a second 0.0.0.0:7050->7050/tcp orderer.example.com
ea1cf82b5b99 hyperledger/fabric-peer:latest "peer node start" 4 seconds ago Up Less than a second 0.0.0.0:7051->7051/tcp peer0.org1.example.com
cd8d9b23cb56 hyperledger/fabric-peer:latest "peer node start" 4 seconds ago Up 1 second 7051/tcp, 0.0.0.0:9051->9051/tcp peer0.org2.example.com
В нашем случае пример сети развернут без создания канала приложения. Тем не менее скрипт примера сети создает системный
канал в случае использования команды ./network.sh up
. Точнее, скрипт использует инструмент configtxgen
и файл configtx.yaml
для создания первичного блока системного канала. Поскольку системный канал используется для создания других каналов,
следует уделить системному каналу службы упорядочения особое внимание, прежде чем переходить к созданию каналов приложений.
Системный канал службы упорядочения¶
Системный канал является первым каналом, который создается в сети Fabric. В системном канале указываются узлы, формирующие службу упорядочения, а также набор организаций, которые являются администраторами службы упорядочения.
Системный канал также включает в себя организации с одноранговыми узлами, принадлежащие к консорциуму блокчейна. Консорциум представляет собой набор организаций-членов системного канала, которые не являются администраторами службы упорядочения. Члены консорциума имеют возможность создавать новые каналы и добавлять в канал другие организации консорциума.
Первичный блок системного канала требуется для развертывания новой службы упорядочения. Скрипт запуска тестовой сети уже
создал первичный блок при выполнении команды ./network.sh up
. Первичный блок использовался при запуске одного
узла службы упорядочения для создания системного канала и службы упорядочения сети. Если посмотреть результат выполнения
скрипта ./network.sh
в журнале, можно увидеть команду, которая создала первичный блок:
configtxgen -profile TwoOrgsOrdererGenesis -channelID system-channel -outputBlock ./system-genesis-block/genesis.block
Инструмент configtxgen
использовал профиль канала TwoOrgsOrdererGenesis
из файла configtx.yaml
для записи первичного
блока в каталог system-genesis-block
. Профиль TwoOrgsOrdererGenesis
показан ниже:
TwoOrgsOrdererGenesis:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums:
SampleConsortium:
Organizations:
- *Org1
- *Org2
Раздел Orderer:
профиля создает один узел службы упорядочения Raft, используемой в примере сети, а также организацию OrdererOrg
,
в качестве администратора службы упорядочения. Раздел Consortiums
профиля создает консорциум организаций с одноранговыми узлами
с именем SampleConsortium:
. Обе организации с одноранговыми узлами, Org1 и Org2, являются членами консорциума. В результате мы
можем добавить обе организации в новые каналы, созданные в тестовой сети. В случае необходимости добавления другой организации
в канал без добавления этой организации в консорциум, сперва нужно создать канал, который включает организации Org1 и Org2,
а затем добавить другую организацию путем обновления конфигурации канала.
Создание канала приложений¶
Теперь, когда узлы сети уже развернуты и создан канал службы упорядочения с помощью скрипта network.sh
, можно приступить
к созданию нового канала для организаций с одноранговыми узлами. Мы уже установили переменные среды, которые необходимы
для использования инструмента configtxgen
. Выполните следующую команду для создания транзакции создания канала channel1
:
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel1.tx -channelID channel1
В параметре -channelID
указывается имя создаваемого канала. Имя канала должно содержать только строчные буквы и быть
не длиннее 250 символов, а также соответствовать регулярному выражению [a-z][a-z0-9.-]*
. Через флаг -profile
команда
получает имя профиля TwoOrgsChannel
из файла configtx.yaml
, который используется тестовой сетью для создания каналов приложений:
TwoOrgsChannel:
Consortium: SampleConsortium
<<: *ChannelDefaults
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
В профиле указывается имя SampleConsortium
из системного канала, а также две организации с одноранговыми узлами из консорциума
в качестве членов канала. Так как системный канал используется в качестве шаблона при создании каналов приложений,
узлы службы упорядочения, которые определенные в нем, становятся упорядочивающими узлами канала
по умолчанию для новых каналов, в то время как администраторы службы упорядочения становятся администраторами службы упорядочения канала.
Набор узлов службы упорядочения канала может быть изменен при обновлении канала.
При успешном выполнении команды в журнале будет показана загрузка файла configtx.yaml
инструментом configtxgen
,
а также сохранение транзакции создания канала:
2020-03-11 16:37:12.695 EDT [common.tools.configtxgen] main -> INFO 001 Loading configuration
2020-03-11 16:37:12.738 EDT [common.tools.configtxgen.localconfig] Load -> INFO 002 Loaded configuration: /Usrs/fabric-samples/test-network/configtx/configtx.yaml
2020-03-11 16:37:12.740 EDT [common.tools.configtxgen] doOutputChannelCreateTx -> INFO 003 Generating new channel configtx
2020-03-11 16:37:12.789 EDT [common.tools.configtxgen] doOutputChannelCreateTx -> INFO 004 Writing new channel tx
Отправить транзакцию создания канала в службу упорядочивания можно, воспользовавшись инструментом командной строки.
Для этого необходимо указать в переменной среды FABRIC_CFG_PATH
путь к файлу core.yaml
, который находится в каталоге
fabric-samples/config
. Установите значение для переменной среды FABRIC_CFG_PATH
с помощью следующей команды:
export FABRIC_CFG_PATH=$PWD/../config/
Прежде чем служба упорядочения создаст канал, будет произведена проверка полномочий идентификатора, который отправил запрос. По умолчанию создавать новые каналы могут только идентификаторы с ролью администратора организаций, принадлежащих к консорциуму системного канала. Выполните следующие команды с помощью интерфейса командной строки одноранговых узлов от имени администратора организации Org1:
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
Теперь можно создать канал с помощью следующей команды:
peer channel create -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 -f ./channel-artifacts/channel1.tx --outputBlock ./channel-artifacts/channel1.block --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
В приведенной выше команде путь к файлу транзакции создания канала указывается с помощью флага -f
, а флаг -c
позволяет
указать имя канала. Флаг -o
предназначен для выбора узла службы упорядочения, который будет использоваться при создании канала.
Флаг --cafile
содержит путь к сертификату TLS узла службы упорядочения. При выполнении команды peer channel create
интерфейс командной строки одноранговых узлов выдаст следующий результат:
2020-03-06 17:33:49.322 EST [channelCmd] InitCmdFactory -> INFO 00b Endorser and orderer connections initialized
2020-03-06 17:33:49.550 EST [cli.common] readBlock -> INFO 00c Received block: 0
Поскольку в рамках этого руководства используется служба упорядочения Raft, могут появиться сообщения о недоступности
некоторых узлов, которые можно проигнорировать. Команда поместит первичный блок нового канала в файл, указанный с помощью флага --outputBlock
.
Присоединение одноранговых узлов к каналу¶
После создания канала можно присоединять одноранговые узлы к каналу. Организации-члены канала могут получить первичный блок канала от службы упорядочения с помощью команды peer channel fetch и использовать его для присоединения однорангового узла к каналу с помощью команды peer channel join. После присоединения однорангового узла к каналу, узел создаст копию реестра блокчейн, получив присутствующие в канале блоки от службы упорядочения.
Поскольку мы используем интерфейс командной строки от имени администратора организации Org1, можно присоединить одноранговый узел этой организации к каналу. Так как организация Org1 отправляла транзакцию создания канала, в нашей файловой системе уже хранится первичный блок канала. Присоединим одноранговый узел организации Org1 к каналу с помощью следующей команды.
peer channel join -b ./channel-artifacts/channel1.block
В переменной среды CORE_PEER_ADDRESS
указан адрес peer0.org1.example.com
. В случае успешного выполнения команды
будет получен ответ о добавлении узла peer0.org1.example.com
в канал:
2020-03-06 17:49:09.903 EST [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-03-06 17:49:10.060 EST [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel
Чтобы проверить, что одноранговый узел присоединился к каналу, используйте команду peer channel getinfo:
peer channel getinfo -c channel1
Команда выведет на экран количество блоков канала и хеш последнего блока. Поскольку первичный блок является единственным блоком в канале, количество блоков в канале (длина канала) будет равно единице:
2020-03-13 10:50:06.978 EDT [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Blockchain info: {"height":1,"currentBlockHash":"kvtQYYEL2tz0kDCNttPFNC4e6HVUFOGMTIDxZ+DeNQM="}
Теперь добавим одноранговый узел организации Org2 к каналу. Установите следующие переменные среды для работы с интерфейсом
командной строки одноранговых узлов от имени администратора организации Org2. Одноранговый узел peer0.org2.example.com
организации Org2 также будет указан в переменных среды в качестве целевого узла.
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
Хотя первичный блок канала еще по-прежнему хранится в файловой системе, в реальной сети организации Org2 потребуется получить
этот блок от службы упорядочения. Используйте команду peer channel fetch
для получения первичного блока для организации Org2:
peer channel fetch 0 ./channel-artifacts/channel_org2.block -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Указанный 0
в команде подразумевает запрос первичного блока, который требуется для присоединения к каналу. Если команда завершена успешно,
будет отображен следующий результат:
2020-03-13 11:32:06.309 EDT [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-03-13 11:32:06.336 EDT [cli.common] readBlock -> INFO 002 Received block: 0
Команда возвращает первичный блок канала и называет его channel_org2.block
, что позволяет отличить его от блока,
полученного организацией Org1. Теперь используем этот блок для присоединения однорангового узла организации Org2 к каналу.
peer channel join -b ./channel-artifacts/channel_org2.block
Установка якорных узлов¶
После присоединения одноранговых узлов к каналу организации должны выбрать хотя бы один из своих узлов в качестве якорного. Якорные узлы в полной мере раскрывают возможности использования закрытых данных и обнаружения служб. Каждая организация должна установить несколько якорных узлов в канале в качестве резервных. Более подробная информация о протоколе gossip и якорных узлах приведена в разделе Протокол распространения данных gossip.
Адреса якорных узлов каждой из организаций хранятся в конфигурации канала. Члены канала могут указать свои якорные узлы во время
обновления конфигурации канала. Воспользуйтесь инструментом configtxlator для обновления конфигурации
канала и выбора якорных узлов для организации Org1 и Org2. Процесс установки якорного узла аналогичен процессу обновления конфигурации
канала и является хорошей возможностью попробовать инструмент configtxlator
в действии для обновления конфигурации канала.
Также потребуется установить инструмент jq на вашем компьютере.
Начнем с выбора якорного узла от имени организации Org1. Сперва получим последний блок конфигурации канала, используя команду peer channel fetch
.
Установите следующие переменные среды для работы с интерфейсом командной строки одноранговых узлов от имени администратора организации Org1:
export FABRIC_CFG_PATH=$PWD/../config/
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
Выполните следующую команду для получения конфигурации канала:
peer channel fetch config channel-artifacts/config_block.pb -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Поскольку последний блок конфигурации канала является первичным блоком канала, команда вернет блок 0 из канала.
2020-04-15 20:41:56.595 EDT [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-04-15 20:41:56.603 EDT [cli.common] readBlock -> INFO 002 Received block: 0
2020-04-15 20:41:56.603 EDT [channelCmd] fetch -> INFO 003 Retrieving last config block: 0
2020-04-15 20:41:56.608 EDT [cli.common] readBlock -> INFO 004 Received block: 0
Блок конфигурации канала хранится в каталоге channel-artifacts
, чтобы отделить процесс обновления от других артефактов.
Перейдите в каталог channel-artifacts
для осуществления последующих действий:
cd channel-artifacts
Теперь можно воспользоваться инструментом configtxlator
, чтобы начать работу с конфигурацией канала.
Сперва сконвертируйте блок из формата protobuf в объект JSON, который можно легко прочитать и отредактировать.
Также удалите ненужные данные блока, оставив только конфигурацию канала.
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
jq .data.data[0].payload.data.config config_block.json > config.json
Эти команды преобразуют блок конфигурации канала в упорядоченный файл формата JSON (config.json
),
который послужит исходником для обновления. Поскольку этот файл понадобится дальше в неизменном виде,
сделаем копию для возможности редактирования. Оригинальная конфигурация канала понадобится на следующих этапах.
cp config.json config_copy.json
Воспользуйтесь инструментом jq
, чтобы добавить якорный узел организации Org1 в конфигурацию канала.
jq '.channel_group.groups.Application.groups.Org1MSP.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "peer0.org1.example.com","port": 7051}]},"version": "0"}}' config_copy.json > modified_config.json
Эта операция создаст обновленную версию конфигурации канала в файле modified_config.json
формата JSON.
Теперь можно преобразовать оригинальную и измененную конфигурации канала в формат protobuf и рассчитать разницу между ними.
configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
configtxlator compute_update --channel_id channel1 --original config.pb --updated modified_config.pb --output config_update.pb
Новый файл формата protobuf channel_update.pb
содержит обновление с новыми якорными узлами, которое необходимо применить
к конфигурации канала. Оберните обновление конфигурации в конверт транзакции, чтобы создать транзакцию обновления конфигурации канала.
configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
echo '{"payload":{"header":{"channel_header":{"channel_id":"channel1", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb
Теперь для обновления конфигурации канала можно использовать артифакт config_update_in_envelope.pb
. Перейдите обратно к каталогу test-network
:
cd ..
Добавьте якорный узел, указав новую конфигурацию канала в команде peer channel update
.
Поскольку мы обновляем раздел конфигурации канала, который влияет только на организацию Org1, нет необходимости в
одобрении изменений другими членами канала.
peer channel update -f channel-artifacts/config_update_in_envelope.pb -c channel1 -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Если команда выполнена успешно, будет отображен следующий результат:
2020-01-09 21:30:45.791 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update
Теперь настройте якорные узлы для организации Org2. Так как процесс идентичен предыдущим действиям, не будем слишком подробно останавливаться на каждом из шагов. Установите следующие переменные среды для работы с интерфейсом командной строки одноранговых узлов от имени администратора организации Org2:
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
Запросите последний блок конфигурации канала, который сейчас является вторым блоком в канале:
peer channel fetch config channel-artifacts/config_block.pb -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Перейдите к каталогу channel-artifacts
:
cd channel-artifacts
Далее можно сконвертировать и скопировать блок конфигурации.
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
jq .data.data[0].payload.data.config config_block.json > config.json
cp config.json config_copy.json
Укажите узел организации Org2, который был добавлен в канал в качестве якорного узла в конфигурации канала:
jq '.channel_group.groups.Application.groups.Org2MSP.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "peer0.org2.example.com","port": 9051}]},"version": "0"}}' config_copy.json > modified_config.json
Теперь можно преобразовать оригинальную и измененную конфигурации канала в формат protobuf и рассчитать разницу между ними.
configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
configtxlator compute_update --channel_id channel1 --original config.pb --updated modified_config.pb --output config_update.pb
Оберните обновление конфигурации в конверт транзакции, чтобы создать транзакцию обновления конфигурации канала.
configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
echo '{"payload":{"header":{"channel_header":{"channel_id":"channel1", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb
Перейдите обратно к каталогу test-network
:
cd ..
Обновите канал, указав якорный узел организации Org2, с помощью следующей команды:
peer channel update -f channel-artifacts/config_update_in_envelope.pb -c channel1 -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Чтобы убедиться, что канал успешно обновлен, выполните команду peer channel info
:
peer channel getinfo -c channel1
Теперь, после обновления канала путем добавления двух блоков конфигурации канала в дополнение к первичному блоку, количество блоков в канале выросло до трех:
Blockchain info: {"height":3,"currentBlockHash":"eBpwWKTNUgnXGpaY2ojF4xeP3bWdjlPHuxiPCTIMxTk=","previousBlockHash":"DpJ8Yvkg79XHXNfdgneDb0jjQlXLb/wxuNypbfHMjas="}
Развертывание чейнкода в новом канале¶
Чтобы убедиться в успешном создании канала, разверните чейнкод в канале. Можно воспользоваться скриптом network.sh
для развертывания чейнкода Fabcar в любом канале тестовой сети. Разверните чейнкод в новом канале с помощью следующей команды:
./network.sh deployCC -c channel1
После выполнения команды в журнале можно увидеть, что чейнкод развернут в канале. Чейнкод вызывается для добавления данных в реестр канала, а затем – для чтения этих данных.
[{"Key":"CAR0","Record":{"make":"Toyota","model":"Prius","colour":"blue","owner":"Tomoko"}},
{"Key":"CAR1","Record":{"make":"Ford","model":"Mustang","colour":"red","owner":"Brad"}},
{"Key":"CAR2","Record":{"make":"Hyundai","model":"Tucson","colour":"green","owner":"Jin Soo"}},
{"Key":"CAR3","Record":{"make":"Volkswagen","model":"Passat","colour":"yellow","owner":"Max"}},
{"Key":"CAR4","Record":{"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}},
{"Key":"CAR5","Record":{"make":"Peugeot","model":"205","colour":"purple","owner":"Michel"}},
{"Key":"CAR6","Record":{"make":"Chery","model":"S22L","colour":"white","owner":"Aarav"}},
{"Key":"CAR7","Record":{"make":"Fiat","model":"Punto","colour":"violet","owner":"Pari"}},
{"Key":"CAR8","Record":{"make":"Tata","model":"Nano","colour":"indigo","owner":"Valeria"}},
{"Key":"CAR9","Record":{"make":"Holden","model":"Barina","colour":"brown","owner":"Shotaro"}}]
===================== Query successful on peer0.org1 on channel 'channel1' =====================