하이퍼레저v1.4 트랜잭션 설명

패브릭 네트워크 내 트랜잭션

하이퍼레저 네트워크에서 각 참여 노드는 원장(Ledger)을 소유하고 합의 알고리즘을 통해 원장을 획일화

- 트랜잭션의 라이프사이클 -

  1. 클라이언트는 트랜잭션 제안(transaction proposal)을 명시된 endorsing peer에게 전달
  2. endorsing peer는 클라이언트가 유효한지 확인 후, 현재 world state와 수신한 트랜잭션 내 제안에 따라 체인코드 시뮬레이션
  3. 체인코드 실행 결과를 클라이언트에게 전송함(proposal response 전송)
    • 실행 결과 : 시뮬레이션 결과(RW set) + endorsing peer 서명, RW set은 world state에서 뭘 읽고 뭘 써야할지 알려줌
  4. 클라이언트는 응답을 얻은 후 제대로 작동하는지 확인하기 위해 유효성을 검사
  5. 수집된 응답이 endorsing policy 를 만족하면 클라이언트는 트랜잭션 구성 후 오더러에게 전송.
    • 오더러에게 보낸 트랜잭션 : transaction proposal , proposal response, endorsements
  6. 오더러는 트랜잭션 수신 후 검증, 유효한 트랜잭션을 포함하는 블록생성, 새 블록을 피어노드에게 전파
  7. 블록을 받은 피어노드는 블록을 검증하고 world state에 반영함

- 제네시스 블록의 탄생 -

genesis.block

  • configtx.yaml 파일, 적절한 프로파일과 함께 bin/configtxgen에 의해 생성됨
  • 노드가 시작될 때 오더러에 의해 로드 됨.
  • 채널 제네시스 블록(채널 트랜잭션에 의해 생성)은 채널당 하나씩 존재함

genesis.block != 채널 제네시스 블록

블록 살펴보기

First-network 실행

cd fabric-samples/first-network
./byfn.sh up

블록 가져오기

블록 높이 확인

docker exec -it cli peer channel getinfo -c mychannel

0번 ~ 4번 블록 가져오기

docker exec -it cli peer channel fetch 0 -c mychannel
docker exec -it cli peer channel fetch 1 -c mychannel
docker exec -it cli peer channel fetch 2 -c mychannel
docker exec -it cli peer channel fetch 3 -c mychannel
docker exec -it cli peer channel fetch 4 -c mychannel

docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel_0.block .
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel_1.block .
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel_2.block .
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel_3.block .
docker cp cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel_4.block .

Block -> Json 변환

../bin/configtxgen -inspectBlock mychannel_0.block > mychannel_0.json
../bin/configtxgen -inspectBlock mychannel_1.block > mychannel_1.json
../bin/configtxgen -inspectBlock mychannel_2.block > mychannel_2.json
../bin/configtxgen -inspectBlock mychannel_3.block > mychannel_3.json
../bin/configtxgen -inspectBlock mychannel_4.block > mychannel_4.json

블록 관찰

블록 0

채널 제네시스 블록
1. Header : 이전 블록 해쉬가 NULL(genesis block이기 때문이다)
2. Data : 트랜잭션이 저장되는 곳이다. 설정 트랜잭션이 저장되어 있다.
3. MetaData : 이 블록에 대한 정보가 저장되어 있다.

블록 1

Org1 앵커피어 업데이트
1. Header : 블록 0 의 해쉬
2. Data : 트랜잭션이 저장되는 곳이다. 설정 트랜잭션이 저장되어 있다.
3. MetaData : 이 블록에 대한 정보가 저장되어 있다.

블록 2

Org2 앵커피어 업데이트
1. Header : 블록 1 의 해쉬
2. Data : 트랜잭션이 저장되는 곳이다. 설정 트랜잭션이 저장되어 있다.
3. MetaData : 이 블록에 대한 정보가 저장되어 있다.

블록 3

체인코드 초기화
1. Header : 블록 2 의 해쉬
2. Data : Transaction Proposal, Endorsements, Proposal Response 가 저장되어 있다
3. MetaData : 이 블록에 대한 정보가 저장되어 있다.

블록 4

체인코드 invoke(값 변경)
1. Header : 블록 3 의 해쉬
2. Data : Transaction Proposal, Endorsements, Proposal Response 가 저장되어 있다
3. MetaData : 이 블록에 대한 정보가 저장되어 있다.

<< endorser 인증서 + 공개키>>

좋은 웹페이지 즐겨찾기