Hyperledger Fabric 튜토리얼(2) - Tools 실습하기
나는 오늘도 공식 사이트를 읽는다… 이번 포스팅에서는 채널을 추가하는 것과 트랜잭션을 실습해 볼 것이다. 하하!
무작정 실습할 수는 없으니 configtxgen 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 실행하기
configtxgen
과 cryptogen
명령으로 수동으로 인증서, 키 및 다양한 구성 아티팩트를 생성하거나, 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 | org1.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 | 2017-10-26 19:21:56.301 EDT [common/tools/configtxgen] main -> INFO 001 Loading configuration |
에러만 나오는데요?
네, 혹시 아래의 에러인가요?
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 | The channel.tx artifact contains the definitions for our sample channel |
다음과 유사한 결과를 볼 수 있을 것이다.
1 | 2017-10-26 19:24:05.324 EDT [common/tools/configtxgen] main -> INFO 001 Loading configuration |
여기에서도 에러만 나오는데요?
음, 이 에러인가요?
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를 시작하는 방법에 대해 살펴볼 것이다.