Вот что мне нужно сделать по шагам:
У меня проблемы с шагом 4, он возвращается:
Error: got unexpected status: BAD_REQUEST -- Attempted to include a member which is not in the consortium
когда я бегу:
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Кроме того, я гарантирую, что все пути и переменные ENV указаны правильно.
Вот мой файл configtx.yaml:
Organizations:
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: crypto-config/peerOrganizations/bitpay.example.com/msp
AnchorPeers:
- Host: peer0.org2.example.com
Port: 7051
Capabilities:
Global: &ChannelCapabilities
V1_1: true
Orderer: &OrdererCapabilities
V1_1: true
Application: &ApplicationCapabilities
V1_2: true
Application: &ApplicationDefaults
Organizations:
Orderer: &OrdererDefaults
OrdererType: solo
Addresses:
- orderer.example.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 99 MB
PreferredMaxBytes: 512 KB
Kafka:
Brokers:
- 127.0.0.1:9092
Organizations:
Profiles:
ExampleOrdererGenesis:
Capabilities:
<<: *ChannelCapabilities
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums:
ExampleConsortium:
Organizations:
- *Org1
- *Org2
ExampleChannel:
Consortium: ExampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
TestChannel:
Consortium: ExampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org3
Capabilities:
<<: *ApplicationCapabilities
Я создал новые каналы с новой организацией, используя хак:
Это работает! Но я думаю, что это хак, потому что org1 уже был в определении блока генезиса ExampleConsortium
. Предположим, я хочу добавить в эту сеть org4 и создать канал между org4 и org3. это будет невозможно. Для этого мы должны иметь возможность обновить определение консорциума в блоке генезиса.
Особое внимание следует уделить разделу «Профиль» вышеуказанного файла:
Profiles:
ExampleOrdererGenesis:
Capabilities:
<<: *ChannelCapabilities
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums:
ExampleConsortium:
Organizations:
- *Org1
- *Org2
ExampleChannel:
Consortium: ExampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
TestChannel:
Consortium: ExampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org3
Capabilities:
<<: *ApplicationCapabilities
Я думаю, проблема в том, что ExampleOrdererGenesis
содержит определение консорциума и не включает Org3
. Может ли кто-нибудь помочь мне с шагами по обновлению с помощью инструмента configtxlator?
Вы должны обновлять этот раздел каждый раз, когда добавляете новую организацию в свой консорциум:
ExampleOrdererGenesis:
Capabilities:
<<: *ChannelCapabilities
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums:
ExampleConsortium:
Organizations:
- *Org1
- *Org2
- *Org3
- *Org4
Обновите эту часть в файле configtx.yaml, затем обновите конфигурацию с помощью инструмента configtxlator, как указано в этом руководстве https://hyperledger-fabric.readthedocs.io/en/latest/channel_update_tutorial.html.
Чтобы добавить новую организацию в консорциум, выполните следующие действия:
$: peer channel fetch config config_block.pb -o orderer.example.com:7050
-c testchainid
$: configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
$: jq -s '.[0] * {"channel_group":{"groups":{"Consortiums":{"groups": {"TestConsortium": {"groups": {"Org3MSP":.[1]}}}}}}}' config.json ./org3.json > modified_config.json
$: 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 testchainid --original config.pb --updated modified_config.pb --output org_update.pb
$: configtxlator proto_decode --input org_update.pb --type common.ConfigUpdate | jq . > org_update.json
$: echo '{"payload":{"header":{"channel_header":{"channel_id":"testchainid", "type":2}},"data":{"config_update":'$(cat org_update.json)'}}}' | jq . > org_update_in_envelope.json
$: configtxlator proto_encode --input org_update_in_envelope.json --type common.Envelope --output org_update_in_envelope.pb
$: peer channel signconfigtx -f org_update_in_envelope.pb
$: peer channel update -f org_update_in_envelope.pb -c testchainid -o orderer.example.com:7050
Я решил это по этой ссылке: https://github.com/rohitadivi/Reconfigure-BYFN/blob/master/Create_channel.md
Убедитесь, что вы понимаете, что такое testchaninid
в шагах по ссылке выше. Мы создаем канал для заказчика, когда запускаем транзакцию генезисного блока с помощью команды peer
. Мы получаем этот канал и обновляем его, а не любой другой канал.
это не работает, так как я не могу перезапустить свою сеть. если бы я мог, это было бы очень простое решение. Видите ли, я уже запустил транзакцию генезисного блока, используя
ExampleOrdererGenesis
, где мое определение консорциума не включает Org4. Теперь мне нужен способ обновить эту транзакцию Genesis.