[가상화폐] KEEP!T column: 하이퍼레저 패브릭(Hyperledger Fabric)의 거래 흐름

이 컨텐츠 출처는 KEEP!T (https://steemit.com/@keepit) 입니다

image.png

KEEP!T Column: 하이퍼레저 패브릭(Hyperledger Fabric)의 거래(트랜잭션) 흐름


안녕하세요. 킵잇입니다.

하이퍼레저 패브릭의 용어 몇 개와 하이퍼레저 패브릭 공식 문서에 기반하여 표준적인 거래 흐름을 설명드리고자 합니다.

월드스테이트(World State) : 하이퍼레저 패브릭의 용어이며 모든 원장의 '현재 상태'를 의미합니다. 패브릭에서는 원장에 모든 데이터를 넣지 않으며 거래내역만을 기록합니다. 실제 데이터는 월드스테이트라는 일종의 데이터베이스에 저장합니다. 블록체인은 모든 원장들의 기록을 의미합니다. 일반적으로 원장의 현재 값이 필요한데, 항상 쉽게 이용할 수 있어 매우 유용한 부분입니다. 장부 상태의 현재 값을 얻기 위해서 '전체 블록체인'을 뒤질 필요가 없습니다. 단지 월드스테이트만 있다면 바로 현재 값을 얻을 수 있습니다.

체인코드(Chaincode) : 이더리움에서의 스마트 계약과 같은 의미입니다. 사용자가 매번 직접 조작하지 않아도 미리 작성된 코드에 따라 원장의 내용을 바꾸는 기능을 합니다. 더불어 정보 자체에 대한 접근을 권한에 따라 일정정도 차단하는 기능(Encapsulation)도 가지고 있습니다.

신원(Identity) : 디지털 신원에는 패브릭에서 사용 권한을 결정하는데 몇개의 추가 속성이 있습니다. 신원과 연관된 속성의 결합체에 특별한 이름인 주체(Principal)가 주어집니다. 주체는 특정 신원에 대한 광범위한 속성을 포함할 수 있기에 좀 더 유연합니다.

멤버십 서비스 공급자(Membership Service Provider) : 당연히 신원을 확인이 가능하려면 신뢰할 수 있는 기관이 있어야겠지요. 우리가 가지고 있는 주민등록증의 경우에도 발급 기관이 적혀있어 신뢰성을 담보하는 것인데요. 하이퍼레저 패브릭에서는 멤버십 서비스 공급자(MSP)가 그 역할을 합니다. 피어의 구성 요소로써, 클라이언트로부터 들어오는 트랜잭션 요청을 확인하고 트랜잭션 결과에 서명(보증)할 수 있습니다.

트랜잭션 흐름


표준적인 자산 거래의 트랜잭션 매커니즘입니다.

채소인 무를 사고 파는 두 명의 클라이언트 A와 클라이언트 B가 등장합니다.

<a href=https://cdn.steemitimages.com/DQmVPkziN6mRGySqjfmHkp64z4vnCNhcaLbP4VNsmCo9eVP/step0.png" alt="step0.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

가정



채널이 설정되어 실행 중인 것으로 가정합니다. 애플리케이션 사용자는 조직의 CA(인증기관, Certificate Authority)에 등록하고 네트워크 인증에 필요한 필수 암호화 자료를 받습니다.

체인코드(무 시장의 초기 상태를 나타내는 키-값쌍 포함)가 피어에 설치되고 채널에 인스턴스화 됩니다. 체인코드에는 트랜잭션 명령어 세트와 합의된 무 가격을 정의하는 논리 구조가 있습니다. 피어 A와 피어 B가 모든 거래를 보증해야 한다는 것을 명시해 놓은 체인코드에 대한 보증 정책(Endorsement policy)도 마련되어 있습니다.

<a href=https://cdn.steemitimages.com/DQmVA4xVjG8DxU49gNNJg3tseGFewLWxmTC6ARWdbp7dFjP/step1.png" alt="step1.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

1. 클라이언트 A가 트랜잭션을 시작합니다.



무슨 일이지? - 클라이언트 A가 무 구입 요청(Request)을 보냅니다. 요청은 클라이언트 A와 클라이언트 B를 대표하는 피어 A와 피어 B를 대상으로 합니다. 보증 정책(Endorsement Policy)에 따르면 두 피어가 모든 트랜잭션을 보증해야 하므로 이 요청은 피어 A와 피어 B에게 갑니다.

다음으로 트랜잭션 제안(Proposal)이 작성됩니다. 노드, 자바, 파이썬을 활용하는 애플리케이션은 트랜잭션 제안을 생성하는 사용 가능한 API들 중 하나를 활용합니다.

제안은 원장에 데이터를 읽거나 쓸 수 있는(자산에 대한 새 키-값쌍을 작성하는) 체인코드 기능을 호출해달라는 요청입니다.

<a href=https://cdn.steemitimages.com/DQmV7HXicc6khWVUMNiS57JmCADQW5JbBR9iAXe9vpTHesY/step2.png" alt="step2.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

2. 보증 피어들이 서명을 확인하고 트랜잭션을 실행합니다.



보증 피어들은 몇가지를 확인합니다.
(1) 트랜잭션 제안이 잘 구성되었는지
(2) 이전에 제출되지 않은 것(리플레이 어택 방지)[https://en.wikipedia.org/wiki/Replay_attack]
(3) 서명이 유효한지(MSP를 사용)
(4) 제출자 (클라이언트 A)가 당 채널에서 제안된 연산을수행할 수 있도록 적절하게 승인되었는지 여부

보증 피어들은 호출된 체인코드의 기능에 대한 아규먼트로 트랜잭션 제안을 입력 받습니다. 그리고 현재 상태 데이터베이스에 대해 체인코드를 실행하고 응답된 값, 읽기 세트, 쓰기 세트를 포함하는 트랜잭션 결과를 생성합니다.

이 부분에서는 원장의 업데이트가 이루어지지 않습니다.

이러한 값 세트들은 보증 피어의 서명과 함께, 어플리케이션의 페이로드를 분석하는 '제안 응답'으로 반환됩니다.

<a href=https://cdn.steemitimages.com/DQmeuht1mMj71XZ38k2KwLn78u9FcNg4uNmjPXuYfr5fpSd/step3.png" alt="step3.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

3. 제안 응답들을 점검합니다.



어플리케이션은 보증 피어 서명을 확인하고 제안 응답들을 대조하여 제안 응답이 동일한지를 확인합니다.

체인코드가 원장만을 쿼리한 경우에, 애플리케이션은 쿼리 응답을 검사하고 '오더링 서비스'에 트랜잭션을 보내지 않습니다.

클라이언트 애플리케이션이 원장을 업데이트하기 위해 '오더링 서비스'에 트랜잭션을 제출하려는 경우, 애플리케이션은 지정된 보증 정책이 충족되었는지(즉 피어 A와 피어 B가 모두 보증했는가)를 결정합니다. 이 아키텍처는 애플리케이션이 응답을 검사하지 않거나 미보증된 트랜잭션을 선택하더라도, 보증 정책은 피어들에 의해 수행되고 커밋 확인 단계에서 각각의 피어에서 따로 검증됩니다.

<a href=https://cdn.steemitimages.com/DQmV7JVvccvdJ8LHxchGgbDNg9Yo7FhuZRSDcTfsqQeCbsF/step4.png" alt="step4.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

4. 클라이언트는 보증을 트랜잭션으로 조합합니다.



애플리케이션은 '오더링 서비스'에 대한 트랜잭션 메시지 내의 트랜잭션 제안과 응답을 '브로드캐스트'합니다.

트랜잭션에는 '읽기/쓰기 세트', 보증 피어의 서명, 채널 ID가 포함됩니다.

'오더링 서비스'는 트랜잭션 수행을 위해 전체 내용을 검사할 필요가 없고, 네트워크의 모든 채널로부터 트랜잭션을 받고, 채널별로 시간순으로 정렬하여 채널당 트랜잭션 블록을 생성합니다. SOLO와 Kafka 방식의 두 가지 합의 알고리즘이 있는데요, SOLO의 경우는 테스트용으로만 사용할 것을 권장합니다.

<a href=https://cdn.steemitimages.com/DQmUfBsziWhHmXX1pRT1T21Bs6znSDhdSyX2EswH5z6pCji/step5.png" alt="step5.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

5. 트랜잭션이 검증되고 커밋(Commit)됩니다.



트랜잭션 블록은 채널의 모든 피어에게 전달(Delivered)됩니다.

블록 내의 트랜잭션은 보증 정책(Endorsement Policy)이 충족되는지 확인하고, 트랜잭션 실행에 의해 원장 상태가 변경되지 않았는지 확인하기 위해 검증됩니다. 검증이 완료되면 블록 내의 트랜잭션은 유효 또는 무효로 구분됩니다.

<a href=https://cdn.steemitimages.com/DQmcEeZfr85myN8zbsXsaVfQkGB8B5feTwwqsM1rFM6XSjv/step6.png" alt="step6.png" style="box-sizing: inherit; border-style: none; display: inline-block; vertical-align: middle; max-width: 100%; height: auto; width: auto; max-height: none;">

6. 원장 갱신



각 피어는 블록을 채널의 체인에 추가하고 각 유효 트랜잭션마다 '쓰기 세트'가 현재 상태 데이터베이스에 기록됩니다.

이벤트가 발생하는데요, 클라이언트 어플리케이션에 트랜잭션(호출)이 체인에 불변 속성으로 추가되어, 트랜잭션이 유효 또는 무효인지 여부를 알려줍니다.

출처 : https://hyperledger-fabric.readthedocs.io/en/release-1.3/


HOON



logo_end.gif 


이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

블록체인 기술

번호 제목 글쓴이 날짜 조회수
공지 축 Work4Block 사이트 오픈 icon Work4Block 04-12 42,860
178 정보 KEEP!T Column: 블록체인 진영 시리즈(1) 제도권의 시도들 icon Work4Block 04-07 1,280
177 정보 KEEP!T Column: 구글 이후의 시대 - 조지 길더 icon Work4Block 03-15 1,332
176 정보 KEEP!T promotion: 광고에 블록체인의 핵심적 가치를 붙이면 생기는 일 icon Work4Block 03-07 1,299
175 정보 [인터체인 시리즈 I]코스모스 네트워크 I - 데이터 상호운용 방법과 텐더민트 합의 알고리듬 icon Work4Block 01-25 1,865
174 가상화폐 (코인비평) 라인 링크(Link)의 BTC 보상정책과 봉이 김선달 icon Work4Block 01-15 1,175
173 정보 KEEP!T History: 블록체인史 (최종) 블록체인의 새 패러다임을 제시한 이더리움 icon Work4Block 01-10 1,136
172 가상화폐 [eosDAC] 크리머 : 커스토디안 출마 선언 및 당선 공약 + eosDAC의 가치 상승 전략 icon Work4Block 01-02 1,081
171 가상화폐 (코인비평) 퍼블리토(Publyto)....스팀에 필요한 것이 이런 것이 아니었을까? icon Work4Block 01-02 997
170 가상화폐 [EOS는 도태될 것인가? 도약할 것인가?] 1편 : 기존 기업 블록체인(댑) vs EOS 블록체인(댑) icon Work4Block 12-26 1,215
169 가상화폐 (코인비평) 스팀(steem)의 진정한 호재 ; 구글 애드센스 도입 icon Work4Block 12-13 2,184
168 가상화폐 [EOS] 댄라리머 : 열심히 보단 똑똑하게 일해라. (CPU를 위한 효율적인 컨트랙트 개발)] (번역)) icon Work4Block 12-13 1,229
167 가상화폐 KEEP!T column: 하이퍼레저 패브릭(Hyperledger Fabric)의 거래 흐름 icon Work4Block 12-13 1,234
166 가상화폐 [번역+사견] 개발자들이 EOS를 사용해야 하는 이유 5가지. + 개발자 FAQ icon Work4Block 12-11 1,265
165 가상화폐 [CODEOS] 새롭게 배포된 EOSIO v1.5.0을 소개합니다. icon Work4Block 12-10 1,055
164 정보 블록체인은 살아날수 있는가 -ㅅ- icon Work4Block 12-10 1,181
163 정보 KEEP!T Column: UN SDG와 블록체인 icon Work4Block 12-06 1,205
162 가상화폐 EOS Snapshot 기능 소개 icon Work4Block 11-27 1,278
161 정보 KEEP!T column: 두나무의 블록체인 개발 플랫폼, 루니버스 icon Work4Block 11-17 1,445
160 정보 KEEP!T History: 스테이블 코인은 변동성에 답이 될 수 있을까. icon Work4Block 11-11 1,244
159 가상화폐 이오스는 왜 도박앱 투성일까 icon Work4Block 10-29 1,554