[Hyperledger] Fabric 튜토리얼(2) - Tools 실습하기

Hyperledger Fabric 튜토리얼(2) - Tools 실습하기

나는 오늘도 공식 사이트를 읽는다… 이번 포스팅에서는 채널을 추가하는 것과 트랜잭션을 실습해 볼 것이다. 하하!

무작정 실습할 수는 없으니 configtxg en tool을 알아 보자!


Configure Transaction Generator

configtxgen tool은 다음의 네 가지로 구성되어 있다.

  • orderer인 genesis block
  • channel인 configuration transaction
  • 마지막으로 각각의 Peer Org에 대한 anchor peer transactions

orderer block은 order를 위한 genesis block 이며 채널을 구성하는 트랜잭션 파일은 채널이 생성될 때 orderer에게 broadcast 된다. anchor peer transactions은 채널에서 각 조직의 anchor peer를 지정한다.

어떻게 동작하나요?

Configtxgen은 샘플 네트워크를 정의한 configtx.yaml 파일을 사용한다. 이 파일에는 각 peer node를 유지 및 관리하는 Orderer Org(OrdererOrg)와 Peer Orgs(Org1 & Org2)가 있다.

또한 이 파일은 두 개의 Peer Orgs로 구성된 SampleConsortium을 설명한다. 이 파일 맨 위에 있는 Profile 섹션을 특히 주의깊게 보아야 한다. 두 가지의 특징적인 헤더를 볼 수 있는데 하나는 orderer genesis block(TwoOrgsOrdererGenesis)이고, 다른 하나는 우리의 채널(TwoOrgsChannel)이다. 우리가 무언가를 만들 때 헤더를 인수로 전달하기 때문에 헤더를 잘 관찰해야 한다.

configtx.yaml에는 두 가지 추가 사양이 포함되어 있다. 첫째, 각 피어 조직(peer0.org1.example.com & peer0.org2.example.com)에 대한 앵커 피어 지정이다. 둘째, 인증서 저장이다. orderer genesis block에 속하는 각각의 Org에 인증서를 저장할 수 있다. member마다의 MSP 디렉토리 위치를 알고 있기 때문이다. orderer와 통신하는 모든 네트워크 엔티티가 디지털 서명을 확인할 수 있다는 점에서 이것은 아주 중요한 개념이다.


Tool 실행하기

configtxgencryptogen 명령으로 수동으로 인증서, 키 및 다양한 구성 아티팩트를 생성하거나, byfn.sh 스크립트를 적용할 수도 있다.

아래의 실습은 first-network 에서 진행된다.

Artifacts 수동 생성

cryto-config.yaml 파일에 정의된대로 네트워크 구성에 사용될 인증서를 생성할 때 필요한 명령은 byfn.sh 스크립트에 정의된 generateCerts 함수를 참조하면 된다.

실습 전, 네트워크가 올라가 있다면 내리고 시작해야 한다.

1
./byfn.sh down

먼저 cryptogen tool을 실행해 보자. 바이너리가 bin 디렉토리에 있기 때문에 tool의 상대 경로를 사용해야 한다.

1
../bin/cryptogen generate --config=./crypto-config.yaml

터미널에 아마 다음의 로그가 찍힐 것이다.

1
2
org1.example.com
org2.example.com

인증서 및 키(예-MSP)는 crypto-config의 루트 디렉토리인 first-network 디렉토리에 출력된다.

다음으로 configtxgen tool에게 configtx.yaml 파일의 위치를 알려 주어야 한다. 현재 작업 디렉토리에서 다음의 명령을 실행하자.

1
export FABRIC_PATH=$PWD

아래와 같은 방법으로 configtxgen tool을 호출하여 orderer genesis block을 생성한다.

1
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

실행 결과로 아래와 비슷한 출력이 나와야 한다.

1
2
3
2017-10-26 19:21:56.301 EDT [common/tools/configtxgen] main -> INFO 001 Loading configuration
2017-10-26 19:21:56.309 EDT [common/tools/configtxgen] doOutputBlock -> INFO 002 Generating genesis block
2017-10-26 19:21:56.309 EDT [common/tools/configtxgen] doOutputBlock -> INFO 003 Writing genesis block

에러만 나오는데요?

네, 혹시 아래의 에러인가요?

1
[common/tools/configtxgen] main -> CRIT 005 Error on outputChannelCreateTx: config update generation failure: could not parse application to application group: setting up the MSP manager failed: the supplied identity is not valid: x509: certificate signed by unknown authority (possibly because of "x509: ECDSA verification failure" while trying to verify candidate authority certificate "ca.org1.example.com")

네트워크를 내리지 않아서 생기는 에러이다. ./byfn.sh -m down 명령어 실행 후 다시 시도해 보자.


Channel 구성 트랜잭션 만들기

다음으로는 channel 트랜잭선 아티팩트를 생성해야 한다. 먼저 $CHANNEL_NAME을 바꾸거나 CHANNEL_NAME을 전체에서 사용할 수 있는 환경 변수로 만들어야 한다.

1
2
3
# The channel.tx artifact contains the definitions for our sample channel

export CHANNEL_NAME=mychannel && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

다음과 유사한 결과를 볼 수 있을 것이다.

1
2
3
2017-10-26 19:24:05.324 EDT [common/tools/configtxgen] main -> INFO 001 Loading configuration
2017-10-26 19:24:05.329 EDT [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2017-10-26 19:24:05.329 EDT [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

여기에서도 에러만 나오는데요?

음, 이 에러인가요?

1
[channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/Application at version 0, but got version 1

이 에러도 네트워크를 내리지 않아 생기는 에러이다. ./byfn.sh -m down 명령어 실행 후 다시 시도해 보자.

이번에는 우리가 구성할 channel에서 Org1의 anchor peer를 정의하자. 위에서 했던 것과 같이 $CHANNEL_NAME을 바꾸거나 환경 변수를 설정해야 한다.

1
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

이제 Org2에 대한 앵커 피어를 동일 채널에서 정의하자.

1
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

여기까지 Channel 구성 트랜잭션을 만들어 보았다. 다음 포스팅에서는 이를 바탕으로 network를 시작하는 방법에 대해 살펴볼 것이다.


Share