Hyperledger Fabric 2.2 실습 (3) - Fabric 트렌젝션 및 Genesis block 생성

ljh·2021년 3월 25일
2

1. configtx.yaml 설정 파일 분석

2. configtx.yaml 파일 작성

3. 트렌젝션 및 Genesis block 생성


configtx.yaml 설정 파일 분석

Hyperledger Fabric 네트워크 구축시 필요한 여러가지 트렌젝션(채널 생성, 앵커피어 설정) 들과 genesis.block 을 Fabric에서 제공하는 configtxgen 툴을 사용하여 생성합니다.

configtx.yaml 예제 링크

실제 configtx.yaml 파일을 작성하기 전에 주로 사용하는 옵션(설정)들을 확인해보겠습니다.
configtx.yaml 파일에서 *변수명 표현은 &변수명 을 참조한다는 의미입니다.

Organizations 설정

Organizations:
    - &SampleOrg                      
        Name: SampleOrg              # 조직 이름
        ID: SampleOrg                # MSPID
        MSPDir: msp                  # 조직의 msp 경로
        Policies: &SampleOrgPolicies # 조직에 대한 정책
            Readers:                 # 읽기 정책
                Type: Signature      # 정책 타입 (Signature(서명), ImplicitMeta)
                Rule: "OR('SampleOrg.member')"
            Writers:                 # 쓰기 정책
                Type: Signature
                Rule: "OR('SampleOrg.member')"
            Admins:                  # 어드민 정책
                Type: Signature
                Rule: "OR('SampleOrg.admin')"
            Endorsement:             # 보증 정책
                Type: Signature
                Rule: "OR('SampleOrg.member')"
        OrdererEndpoints:            # 정의하는 조직이 오더러일 경우 오더러 주소
            - "127.0.0.1:7050"   
        AnchorPeers:                 # 정의하는 조직이 피어일 경우 앵커피어 주소
            - Host: 127.0.0.1
              Port: 7051

Capabilities 설정

Capabilities:  # 각각 사용하는 버전에 true
    Channel: &ChannelCapabilities
        V2_0: true
    Orderer: &OrdererCapabilities
        V2_0: true
    Application: &ApplicationCapabilities
        V2_0: true

Application 설정

Application: &ApplicationDefaults
    Policies: &ApplicationDefaultPolicies  # Application 정책 설정
        LifecycleEndorsement:              # 체인코드 Lifecycle 관련 정책
            Type: ImplicitMeta             # 정책 타입 (Signature(서명), ImplicitMeta)
            Rule: "MAJORITY Endorsement"
        Endorsement:                       # 보증 정책
            Type:  ImplicitMeta
            Rule: "MAJORITY Endorsement"
        Readers:                           # 읽기 정책
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:                           # 쓰기 정책
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:                            # 어드민 정책
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
    Capabilities:
        <<: *ApplicationCapabilities

Orderer 설정

Orderer: &OrdererDefaults
    OrdererType: solo                               # 오더링 방식(sole, kafka, etcdraft)
    BatchTimeout: 2s                                # 배치 타임아웃 설정
    BatchSize:
        MaxMessageCount: 500                        # 블록당 최대 트렌젝션 개수
        AbsoluteMaxBytes: 10 MB 
        PreferredMaxBytes: 2 MB                     # 블록 최대 크기
    EtcdRaft:                                       # etcdraft 방식 사용시 필요한 설정
        Consenters:
            - Host: raft0.example.com               # 오더러 정보 호스트(ip)
              Port: 7050                            # 오더러 포트
              ClientTLSCert: path/to/ClientTLSCert0 # 오더러 tls 클라이언트 인증서
              ServerTLSCert: path/to/ServerTLSCert0 # 오더러 tls 서버 인증서
    Policies:                                       # Orderer 정책 설정
        Readers:                                    # 읽기 정책
            Type: ImplicitMeta                      # 정책 타입 (Signature(서명), ImplicitMeta)
            Rule: "ANY Readers"
        Writers:                                    # 쓰기 정책
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:                                     # 어드민 정책
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
        BlockValidation:                            # 블록 보증 관련 정책
            Type: ImplicitMeta
            Rule: "ANY Writers"

Channel 설정

Channel: &ChannelDefaults
    Policies:                    # Channel 정책 설정
        Readers:                 # 읽기 정책 
            Type: ImplicitMeta   # 정책 타입 (Signature(서명), ImplicitMeta)
            Rule: "ANY Readers"
        Writers:                 # 쓰기 정책
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:                  # 어드민 정책
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
    Capabilities:
        <<: *ChannelCapabilities

configtx.yaml 파일 작성

위에서 분석한 내용을 기반으로 본 포스트에서 구축할 네트워크에 대한 configtx.yaml 작성합니다.

configtx.yaml 파일 작성
sudo vi /home/fabric/infra/configtx.yaml

Organizations: # 조직 설정
  - &orderer
    Name: orderer # 조직 이름(오더러)
    ID: ordererMSP # 조직 MSP ID
    # 발급받은 조직 msp 경로
    MSPDir: /home/fabric/infra/crypto-config/ordererOrganizations/orgorderer.com/msp 
    Policies:
        Readers:
            Type: Signature
            Rule: "OR('ordererMSP.member')"
        Writers:
            Type: Signature
            Rule: "OR('ordererMSP.member')"
        Admins:
            Type: Signature
            Rule: "OR('ordererMSP.admin')"
        Endorsement:
            Type: Signature
            Rule: "OR('ordererMSP.member')"
    OrdererEndpoints: # 오더러 주소
         - orderer0.orgorderer.com:7050
         - orderer1.orgorderer.com:8050
         - orderer2.orgorderer.com:9050
  - &apeer
    Name: apeer # 조직 이름(피어)
    ID: apeerMSP # 조직 MSP ID
    # 발급받은 조직 msp 경로
    MSPDir: /home/fabric/infra/crypto-config/peerOrganizations/orgapeer.com/msp
    Policies:
        Readers:
            Type: Signature
            Rule: "OR('apeerMSP.member')"
        Writers:
            Type: Signature
            Rule: "OR('apeerMSP.member')"
        Admins:
            Type: Signature
            Rule: "OR('apeerMSP.admin')"
        Endorsement:
            Type: Signature
            Rule: "OR('apeerMSP.member')"
    AnchorPeers: # 앵커피어 설정 (보통 0번피어를 앵커피어로 지정한다)
       - Host: peer0.orgapeer.com
         Port: 7051
Capabilities:
    Channel: &ChannelCapabilities
        V2_0: true
    Orderer: &OrdererCapabilities
        V2_0: true
    Application: &ApplicationCapabilities
        V2_0: true
Application: &ApplicationDefaults
    Organizations:
    Policies: # Application 정책 설정
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: Signature
            Rule: "OR('apeerMSP.admin')" # Application 관련 정책은 apeer조직의 어드인 서명이 필요함
        LifecycleEndorsement:
            Type: ImplicitMeta
            Rule: "ANY Endorsement"
        Endorsement:
            Type: ImplicitMeta
            Rule: "ANY Endorsement"
    Capabilities:
        <<: *ApplicationCapabilities
Orderer: &OrdererDefaults
    OrdererType: etcdraft
    BatchTimeout: 1s
    BatchSize:
        MaxMessageCount: 20
        AbsoluteMaxBytes: 80 KB
        PreferredMaxBytes: 20 KB
    EtcdRaft:
        Consenters:
          - Host: orderer0.orgorderer.com
            Port: 7050
            ClientTLSCert: /home/fabric/infra//crypto-config/ordererOrganizations/orgorderer.com/orderers/orderer0.orgorderer.com/tls/server.crt
            ServerTLSCert: /home/fabric/infra//crypto-config/ordererOrganizations/orgorderer.com/orderers/orderer0.orgorderer.com/tls/server.crt
          - Host: orderer1.orgorderer.com
            Port: 8050
            ClientTLSCert: /home/fabric/infra//crypto-config/ordererOrganizations/orgorderer.com/orderers/orderer1.orgorderer.com/tls/server.crt
            ServerTLSCert: /home/fabric/infra//crypto-config/ordererOrganizations/orgorderer.com/orderers/orderer1.orgorderer.com/tls/server.crt
          - Host: orderer2.orgorderer.com
            Port: 9050
            ClientTLSCert: /home/fabric/infra//crypto-config/ordererOrganizations/orgorderer.com/orderers/orderer2.orgorderer.com/tls/server.crt
            ServerTLSCert: /home/fabric/infra//crypto-config/ordererOrganizations/orgorderer.com/orderers/orderer2.orgorderer.com/tls/server.crt
    Organizations:
    - *orderer
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: Signature
            Rule: "OR('apeerMSP.admin')" # Orderer 관련 정책은 apeer조직의 어드인 서명이 필요함
        BlockValidation:
            Type: ImplicitMeta
            Rule: "ANY Writers"
Channel: &ChannelDefaults
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: Signature
            Rule: "OR('apeerMSP.admin')" # Channel 관련 정책은 apeer조직의 어드인 서명이 필요함
    Capabilities:
        <<: *ChannelCapabilities
# 실질적인 트렌젝션, Genesis 블록은 아래 설정을 참조하여 생성된다.
# configtx.yaml 파일 윗부분에 작성한 것들을 참조하여 최종 프로파일을 만든다.
Profiles:
    OneOrgChannel:
        Consortium: SampleConsortium
        <<: *ChannelDefaults
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *apeer
    EtcdRaftNetwork:
        <<: *ChannelDefaults
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
            - <<: *orderer
        Consortiums:
            SampleConsortium:
                Organizations:
                - *apeer

트렌젝션 및 Genesis block 생성

이번 목차에서는 완성된 configtx.yaml 파일과 configtxgen 툴을 활용하여 아래 3개의 파일을 생성하겠습니다.

  • 채널 생성 트렌젝션
  • 앵커피어(apeer) 설정 트렌젝션
  • Genesis 블록

트렌젝션 관련 폴더 생성

mkdir -p /home/fabric/infra/channel-artifacts

채널 생성 트렌젝션 생성 (채널명은 testchannel로 한다)
configtxgen -profile 프로파일명 -outputCreateChannelTx 생성된 트렌젝션 이름 -channelID 채널명

configtxgen -profile OneOrgChannel -outputCreateChannelTx /home/fabric/infra/channel-artifacts/testchannel.tx -channelID testchannel

앵커피어 설정 트렌젝션 생성
configtxgen -profile 프로파일명 -outputAnchorPeersUpdate 생성된 트렌젝션 이름 -channelID 채널명 -asOrg 조직명

configtxgen -profile OneOrgChannel -outputAnchorPeersUpdate /home/fabric/infra/channel-artifacts/apeerMSPanchors.tx -channelID testchannel -asOrg apeer

Genesis block 생성
configtxgen -profile 프로파일명 -outputAnchorPeersUpdate 생성된 트렌젝션 이름 -channelID 채널명 -asOrg 조직명

configtxgen -profile EtcdRaftNetwork -outputBlock /home/fabric/infra/channel-artifacts/genesis.block -channelID testchainid




이로써 hyperleger fabric 구축을 트렌젝션 및 Genesis 블록 생성이 완료되었습니다.
다음 포스트에서는 Peer, Orderer 구축 및 채널 생성을 진행하겠습니다.

profile
삽질 일기장..

0개의 댓글