목표 ! Fabric 에서 체인코드가 어떤식으로 읽고 쓰는지 ( read&Write set) 알아보기
이 부분을 이해해야 체인코드를 작성하고 체인코드 스트럭처 를 설계 할 수 있다.
TPS 가 높은 체인코드를 설계 가능
Fabric이 사용하는 방식은 KVS( Key-Value Store)
Level, Couch ( 레벨디비는 속도가 빠르고 카우치디비는 복잡한 쿼리문 작성 가능)
체인코드안에서는
A :100 , B : hello ( 체인코드에서 값을 저장하는 방식) ( key - value )
다른점 ? : 한 블록 내에서 하나의 키 값을 여러 번 읽어서 바꿔 쓸 수가 없다.( 한 블락에서 한번 작성 )
Read Set , Write Set (https://hyperledger-fabric.readthedocs.io/en/release-2.5/readwrite.html?highlight=read write)
한 block 내에서 한번 write 한 키에 대해서는 Read를 하면 실패한다.
- T1 -> 둘다 쓰기 만 했기 때문에 k1 k2 의 값이 v1, v2 로 바뀐다 ( 성공 )
- T2 -> k1은 T1에서 이미 쓰기 작업을 했기 때문에 읽기를 할 수 없다 ( 실패 )
- T3 -> k2는 읽기 작업을 하지 않았기 때문에 k2의 값은 v2'' 로 바뀐다 ( 성공 )
- T4 -> k2를 위에서 이미 쓰기 작업을 했기 때문에 read 작업을 할 수가 없다 . ( 실패 )
- T5 -> k5는 위에서 작업을 하지 않았기때문에 읽기 가능 ( 성공 )
비트 , 이더의 경우
한 block 내에서 아래의 경우가 가능함. ( [Hyperledger Fabric Core Concept] 02. Fabric Read&Write Set ( 6:47초 )
A = 100
A = A + 100 ( A => 200 )
A = A + 100 ( A => 300 )
이더에서는 block을 생성하는 얘 ( 마이너 ) 가 트랜잭션이 외부에서 들어올 때 마다 보관 하고 있다가 POW 가 성공 하면 block를 던진다.
새로운 블럭의 트랜잭션을 다 보관하고 있기 때문에 히스토리를 다 알고있다.
패브릭의 경우
피어가 block을 만들지 않기때문에 검증한 트랜잭션을 보관하지 않는다.
App 에서 트랜잭션 제안 >> 피어에서 받아서 체인코드 시뮬레이팅 ( ex. 월드스테이트 : a = 100 , 체인코드 : a = a +100 ( a => 200) ) >>> 피어가 체인코드 시뮬레이팅 후 오더러피어에게 전송 ( ex. a= a+ 100 ) >>> 새로운 트랜잭션 제안 >>> a = a + 100 >>> 피어가 시뮬레이팅 후 오더러에게 전송 ( ex. a = a +100 ) >>> 오더러피어에서 두번째 트랜잭션을 FAIL 처리 함.
FAIL 처리 된 트랜잭션은 버려지지는 않고 block에 전달됨.
피어가 시뮬레이팅을 하는데 피어가 block을 만들지 않기 때문.
오더러는 block을 만들면서 체인코드를 시뮬레이팅 하지 않는다. 오더러는 오더러 렛저를 따로 가지고 있다
왜 ? : 문제가 생겼을때 ( 피어들이 다 끊겼을때 ) 새로 block 만들어서 배포하기 위해 저장 만하고있다.
또한 검증하는건 피어들이 검증 잘 했는지 피어들의 시그니쳐만 확인한다. ( 체인코드는 확인 X )
Fabric - high through put network
- 태깅을 이용함
- A : 100 ( 이전 블록 )
- A1 : +100 (태깅 1)
- A2 : +-50 (태깅 2)
- A3 : +100 (태깅 3)
- A : 250 ( 태깅은 빼고 A 만 보고 수집하여 계산 )
- high through put network 을 통해서 수준높은 TPS 구현 가능
- 이러한 방식을 사용하지 않으면 한 블럭에 한 트랜잭션만 생성 >> 오버헤드가 엄청 커진다.
본 게시글은 Dapp Campus 의 강의를 보고 정리한 내용입니다!
https://www.youtube.com/watch?v=FN2zoG3LRwU&list=PLlYCl1UOH8dima_f8QOIeY1ieuOAYKo_G&index=2
'HyperledgerFabric > Core Concept' 카테고리의 다른 글
06 . Fabric Identity - 2 (0) | 2023.07.14 |
---|---|
05. FabricIdentity - 1 (0) | 2023.06.23 |
04. Fabric Network Setting Guide (0) | 2023.06.23 |
03.Fabric Study Guide (0) | 2023.06.23 |
01.Fabric Structure (0) | 2023.06.23 |