하이퍼레저 패브릭 - Ledger

choko's avatar
Jun 29, 2024
하이퍼레저 패브릭 - Ledger
 
World State Ledger와 Blockchain Ledger로 나누어진다.

World State Ledger

  • ledger의 현재 값을 보유하는 데이터베이스, 기본적으로 키-값으로 표현됨
  • World State를 사용하면 전체 트랜잭션 로그를 순회하지 않고도 현재 값에 직접 엑세스 할 수 있음
  • 응용프로그램은 World State의 변경 사항을 트랜잭션으로 제출하고, 이러한 트랜잭션은 Blockchain Ledger에 커밋된다.
  • 버전 번호가 있으며, state가 변경될 때마다 버전 번호는 증가함. 현재 상태가 보증 시점의 버전과 일치하는지 확인할 때 사용됨.
  • World State Ledger는 Blockchain Ledger에 의해 언제든지 재생성될 수 있음
 

Blockchain Ledger

  • 개체가 현재 상태에 도달한 기록을 남김, 순차적 로그로 구성됨
  • 각 블록은 트랜잭션이 포함되며, 각 트랜잭션은 World State에 대한 query, update를 나타냄
  • 블록 Sequence는 Ordering Service에 의해 설정된다
  • 각 블록의 헤더에는 자신 블록 트랜잭션의 해시와, 이전 블록의 해시가 포함됨 → 이런 방식으로 모든 트랜잭션은 순서가 지정되고 암호화 방식으로 함께 연결됨
  • Blockchain Ledger은 항상 파일 시스템으로 구현됨.
notion image
👉
1. D0은 제네시스 블록이다. 2. 블록 B2는 트랜잭션 5,6,7를 포함하고, 블록 데이터 D2를 가지고 있다. * 3. B2는 D2의 모든 트랜잭션에 대한 암호화 해시와 H1의 해시가 포함된 블록 헤더 H2를 가지고 있다. → 불변으로 연결
 
 

Block Structure

notion image

1. 블록 헤더

블록 헤더는 3개의 필드로 구성된다.
  1. 블록 번호 : 0(제네시스 블록)에서 시작하는 정수, 새 블록마다 1씩 증가
  1. 현재 블록 해시 : 현재 블록에 포함된 모든 트랜잭션의 해시
  1. 이전 블록 헤더 해시 : 이전 블록 헤더의 해시
 

2. 블록 데이터

순서대로 정렬된 트랜잭션 목록이 포함되어 있다. Ordering service에서 블록을 생성할 떄 작성된다.
트랜잭션 구조
notion image
  1. Header(헤더) 트랜잭션에 대한 몇 가지 필수 메타데이터(ex: 체인코드 이름, 해당 버전 등)을 포함한다.
  1. Signature(서명) 클라이언트 애플리케이션에서 생성한 암호화 서명이 포함되어 있다. 트랜잭션 세부 정보가 변조되지 않았는지 확인하는데 사용된다.(세부 정보를 변경하려면 개인 키가 필요하기 때문)
  1. Proposal(제안) Ledger 업데이트를 하는 스마트 계약의 매개 변수들을 인코딩한다.
  1. Response(응답) World State의 전후 값을 읽기 쓰기 세트(RW-set)로 캡처한다. 트랜잭션이 성공적으로 검증되면 Ledger에 적용되어 World State를 업데이트 한다.
  1. Endorsements(보증) 보증 정책을 충족하기에 충분한 각 필수 조직의 서명된 트랜잭션 응답 목록. 충분한 보증과 일치하지 않는 트랜잭션 응답은 포함시키지 않는다.
 

3. 블록 메타 데이터

  • 네트워크 노드에서 블록을 확인하는 데 사용되는 블록 생성자의 인증서 및 서명이 포함된다.
 
 
 

World State 데이터베이스 옵션

1. LevelDB
  • 디폴트 값으로, Ledger 상태가 단순한 키-값 쌍일때 적합하다.
2. CouchDB
풍부한 query와 update를 지원하기 때문에, Ledger가 JSON 문서로 구조화될 떄 적합하다.
 
Share article

Tom의 TIL 정리방