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은 항상 파일 시스템으로 구현됨.

1. D0은 제네시스 블록이다.
2. 블록 B2는 트랜잭션 5,6,7를 포함하고, 블록 데이터 D2를 가지고 있다.
* 3. B2는 D2의 모든 트랜잭션에 대한 암호화 해시와 H1의 해시가 포함된 블록 헤더 H2를 가지고 있다. → 불변으로 연결
Block Structure

1. 블록 헤더
블록 헤더는 3개의 필드로 구성된다.
- 블록 번호 : 0(제네시스 블록)에서 시작하는 정수, 새 블록마다 1씩 증가
- 현재 블록 해시 : 현재 블록에 포함된 모든 트랜잭션의 해시
- 이전 블록 헤더 해시 : 이전 블록 헤더의 해시
2. 블록 데이터
순서대로 정렬된 트랜잭션 목록이 포함되어 있다. Ordering service에서 블록을 생성할 떄 작성된다.
→ 트랜잭션 구조

- Header(헤더) 트랜잭션에 대한 몇 가지 필수 메타데이터(ex: 체인코드 이름, 해당 버전 등)을 포함한다.
- Signature(서명) 클라이언트 애플리케이션에서 생성한 암호화 서명이 포함되어 있다. 트랜잭션 세부 정보가 변조되지 않았는지 확인하는데 사용된다.(세부 정보를 변경하려면 개인 키가 필요하기 때문)
- Proposal(제안) Ledger 업데이트를 하는 스마트 계약의 매개 변수들을 인코딩한다.
- Response(응답) World State의 전후 값을 읽기 쓰기 세트(RW-set)로 캡처한다. 트랜잭션이 성공적으로 검증되면 Ledger에 적용되어 World State를 업데이트 한다.
- Endorsements(보증) 보증 정책을 충족하기에 충분한 각 필수 조직의 서명된 트랜잭션 응답 목록. 충분한 보증과 일치하지 않는 트랜잭션 응답은 포함시키지 않는다.
3. 블록 메타 데이터
- 네트워크 노드에서 블록을 확인하는 데 사용되는 블록 생성자의 인증서 및 서명이 포함된다.
World State 데이터베이스 옵션
1. LevelDB
- 디폴트 값으로, Ledger 상태가 단순한 키-값 쌍일때 적합하다.
2. CouchDB
풍부한 query와 update를 지원하기 때문에, Ledger가 JSON 문서로 구조화될 떄 적합하다.
Share article