citylabs-study

9일차 스터디 (hyperldeger fabric - ledger , gitlab ssh key 등록)

seongjin08 2022. 1. 20. 14:38

 

 

https://hyperledger-fabric.readthedocs.io/en/release-2.2/ledger/ledger.html

 

Ledger — hyperledger-fabricdocs master documentation

Docs » Key Concepts » Ledger Edit on GitHub Ledger Audience: Architects, Application and smart contract developers, administrators A ledger is a key concept in Hyperledger Fabric; it stores important factual information about business objects; both the c

hyperledger-fabric.readthedocs.io

 

ledger 은 Hyperledger fabric 핵심 개념이다.

 비즈니스 개체에 대한 중요한 사실 정보를 저장합니다. 

개체 속성의 값과 이러한 값을 초래한 트랜잭션을 모두 기록.

 

ledger 란 무엇인가?

 

원장은 거래 저널로 비즈니스의 현재 상태를 포함합니다. 

원장은 오래 전 부터 존재 해왔지만 최근의 예로 은행 계좌를 생각 할 수 있습니다.

은행의 계좌에는 본인의 자산과 언제 얼마가 빠지고 채워졌는지 기록이 담겨져 있습니다.

hyperledger fabric은 은행 계좌 처럼 현재 가치를 표시하고 지금까지의 트랜잭션(거래)의

기록을 저장한다고 볼 수 있습니다.

 

ledger 사실 및 상태

 

원장은 말 그대로 비즈니스 개체를 저장하지 않고 대신 해당 개체에 대한 사실 을 저장 합니다.

원장에 저장한 사실을 통해 원장에 대한 다른 주요 정보와 함께 위치를 식별할 수 있습니다.

객체의 상태에 대한 사실을 변경 될 수 있지만 이 사실에대한 히스토리(내역) 을 변경 할 수는 없으며

추가할수 있지만 변경할수는 없습니다.

 

ledger

 

hyperledger fabric 에서 원장은 world state 와 blockchain 으로 구성.

블록체인 B는 세계 상태 W를 결정합니다. 

1. 데이터 베이스인  world state 에 원장 상태의 현재값을 보유. 

world state 을 사용 하면 프로그램이 전체 트랜젝션 로그를 순회하여 계산할 필요 없이

상태의 현재 값을 직접 엑세스 할 수 있다.

원장 상태는 기본적으로 키 와 값 으로 표현됨.

상태가 생성,업데이트,삭제가 될 수 있으므로 world state 는 자주 변경 될 수있다.

 

2. blockchain 에는  world state 의 모든 변경 사항을 기록하는 트랜젝션 기록 

트랜젝션은 블록체인에 추가된 블록 내에서 수집 되므로 world state 의 변경 이력을 이해 할 수 있다.

blockchain 데이터 구조는 일단 작성되면 수정 할 수 없기 때문에 world state 와는 다릅니다.

 

 

world state

world state 는 고유한 원장 상태로  객체 속성의 현재 값을 보유

객체의 현재값을 계산하기 위해 block chain 을 탐색하는 것은 번거로울 것이다.

world state 에서 직접 가져오기만 하면 된다.

원장에 world state 는 두개의 상태를 포함한다.

이 예에서는 각각의 키와 값이 있는 두 자동차(car1,car2) 가 있다.

응용프로그램은 상태를 가져오고 ,입력,삭제 하기위해 간당한 원장 API 를

사용하는 smart contract 를 호출 할 수있다.

 

world state 는 데이터 베이스로 구현된다. 

 

응용프로그램은 world state 의 변경 사항을 캡쳐 트랜젝션을 제출하고 트랜잭션은 ledger bolck chain에 

가 됩니다. 응용프로그램 hyperledger SDK에 의해  합의 메커니즘 의 세부사항으로부터 격리됨니다.

스마트 계약을 호출하고 트랜잭션의 블록체인에 포함될 때 알림을 받스빈다.(유효 여부 관계없이)

보증 집합에 서명한(합의) 트랜잭션만 world state에 업데이트된다.

충분한 보증인이 트랜잭션에 서명하지 않으면 world state 는 변경되지 않는다.

 

상태에는 버젼 번호가 있으며 그림에서 상태 car1 과 car2는 시작 버젼인 0이다.

버젼 번호는 hyperledger fabric 에서 내부용이며 상태가 변경될때마다 증가한다.

현재 상태가 보증 시전의 버젼과 일치하는 지 확인하기 위해 상태가 업데이트 될때마다 버젼을 확인함.

동시 업데이트는 없다.

 

ledger 가 처음 생성 될때는 world state 는 비어있다.

world state에 대한 유효한 변경이 나다내는 모든 트랜젝션이 blockchain에 기로 되기 때문에

world state는 언제든지 block chain 에서 재 생성 될 수 있다.

 

blockchain - 블록체인

 

 world state 에는 현재 상태에 관련된 사실 집합이 포함되어 있는 반면 

block chain 에는 현재 상태에 도달하게 된 기록으로 

ledger 상태의 모든 이전 버젼과 변경 방법을 기록한다.

 

블록체인의 상호 연결된 블록의 순차 로그로 구조화 되며 각 블록에는 일련의 트랜잭션이 포함 되고 

각 트렌젝션은 world state에 대한 쿼리 또한 업데이트 된다.

중요한 것은 블록 시퀀싱과 블록 내 트랜잭션 시퀀싱이 블록이 Ordering Service 라는 Hyperledger Fabric 구성 요소에 의해 처음 생성될 때 설정된다는 것 입니다.

 

각 블록의 헤더에는 블록 트랜잭션의 해시 와 이전 블록 헤더의 해시가 포함됨.

이러한 방식으로 ledger 에 모든 트랜잭션은 순서가 지정되고 암호화 방식으로 함꼐 연결된다.

ledger 호스팅하는 한 노드가 변조 되더라도 ledger의 독립된 노드의 네트워크 전체에 분산되어

있기 때문에 '올바른' 블록체인 이라고 다른 노드를 속일 수 없습니다.

 

데이터 베이스를 사용하는 world state 와 달리 blockchain 은 항상 파일로 구현된다.

blockchain 데이터 구조는 매우 작은 단순 작업 이기 때문에 합리적 디자인이다.

blockchain 끝에 추가하는 것이 기본 작업이다.

블록

 

3가지의 섹션으로 구성

 

1. 블록 헤더

- 블록 번호 : 0(제네시스 블록) 애서 시작하는 정수로,블록체인에 추가된느 모든 새 블록에 대해 1씩 증가 

- 현재 블록 해시 : 현재 블록에 포함된 모든 트랜잭션의 해시

- 이전 블록 헤더 해시 : 이전 블록 헤더의 해시 

이러한 필드는 블록 데이터를 암호화 해싱하여 내부적으로 파생됩니다. 그들은 각각의 모든 블록이 이웃과 불가분하게 연결되어 불변의 원장으로 이어지도록 합니다.

 

2. 블록 데이터 

순서대로 정렬된 트랜잭션 목록이 포함되어 있다.

주문서비스에서 블록을 생성할 때 작성됨.

 

3. 메타 데이터 차단

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

블록 커미터는 상태 포크를 감지하기 위해 모든 트랜잭션에 대한 유효/무효 표시기를 블록 메타데이터에 있는 비트맵에 추가하고 해당 블록까지 누적 상태 업데이트의 해시를 추가합니다. 블록 데이터 및 헤더 필드와 달리 이 섹션은 블록 해시 계산에 대한 입력이 아닙니다.

 

Transactions 

 

* header - 헤더
H4 - 트랜잭션에 대한 몇가지 필수 메티 데이터(예 : 관련체인 코드의 이름 및 해당 버젼) 를 캡쳐

 

* signature - 서명

S4 - 클라이언트 애플리케이션에서 생성한 암호화 서명 포함

필드는 트랜잭션 세부 정보가 변조되지 않았는지 확인하는 데 사용됩니다.

트랜젝션 세부 정보를 생성하려면 어플리케이션의 개인 키가 필요 하기 때문

 

* proposal - 제안

P4 - 제안된 ledger 업데이트를 생성하는 smart contract에 어플리케이션이 제공한 입력 매개 변수를 인코딩 합니다.

smart contract 가 실행괼 때 이제안은 현재 world state 와 함께 새로운 world state 를 결정하는 입력 매게 변수를 제공

 

* response - 응답

R4 - world state 의 전후 값을 읽기 쓰기 세트 (RW-set) 로 캡쳐

smart contract 출력이며 트랜잭션이 성공적으로 검증 되면 ledger에 적용되어 world state 를 업데이트 한다.

 

* endorsements - 보증

E4 - 보증 정책을 충족하기에 풍분한 각 필수 조직의 서명된 트랜잭션 응답 목록입니다.

하나의 트랜잭션 응답만 트랜잭션에 포함되지만 여러 보증이 있음을 알 수 있습니다.

이는 각 보증이 조직의 특정 트랜잭션 응답을 효과적으로 인코딩 하기 위함.

유효하지 않은 것으로 거부 되고 world state 를 업데이트하지 않으므로 충분한 보증 과 일치하지

않는 트랜잭션 응답을 포함할 필요가 없다.

 

World State database options 

 

world state 는 ledger 상태의 간단하고 효율적인 저장 및 검색을 제공하기 위해 물리적으로 데이터 베이스로  구현됩니다.

원장 상태는 단순하거나 복합 값을 가질 수 있으며

데이터 베이스에는 LevelDB 및 CouchDB가 포함된다.

 

LevelDB 는 기본값이며 원장상채가 단순한 키 - 값 일때 적합하다. LevelDB 데이터 베이스는 피어 노드와

함꼐 위치하며 동일한 운영체제 프로세스에 포함.

 

CouchDB는 비지니스 트랜잭션에서 흔히 볼 수 있는 풍부한 쿼리 와 업데이트를 지원하기 때문에 원장 상태가

JSON 문서로 구조화될 때 특히 적절한 선택입니다. 구현 측면에서 CouchDB는 별도의 운영 체제 프로세스에서

실행되지만 피어 노드 와 CouchDB 인스턴스 사이에는 1:1 관계가 있습니다. 이모든 것은 스마트계약에 보이지 않습니다.

 

Example Ledger: Basic Asset Transfer - 예시 원장 : 기본 자산 이전

기본 자산 이전 샘플 어플리케이션을 실행했다면 이 원장 생성된다.

 

블록체인에는 두 개의 블록이 포함되어 있음을 알 수 있습니다. 블록 0은 제네시스 블록이지만 자동차와 관련된 트랜잭션은 포함하지 않습니다. 그러나 블록 1에는 트랜잭션 T1, T2, T3, T4가 포함되어 있으며 이들은 세계 상태에서 ASSET1에서 ASSET4에 대한 초기 상태를 생성한 트랜잭션에 해당합니다.

 

Namespaces

실제로 각 체인코드에는 다른 모든 체인코드와 구분되는 고유한 세계 상태가 있습니다. 세계 상태는 네임스페이스에 있으므로 동일한 체인코드 내의 스마트 계약만 지정된 네임스페이스에 액세스할 수 있습니다.

블록체인은 네임스페이스가 없습니다. 여기에는 다양한 스마트 계약 네임스페이스의 트랜잭션이 포함됩니다.

 

channels

Hyperledger Fabric에서 각 channels에는 완전히 별도의 원장이 있습니다. 이것은 완전히 분리된 블록체인과 네임스페이스를 포함하여 완전히 분리된 세계 상태를 의미합니다. 애플리케이션과 스마트 계약이 채널 간에 통신하여 원장 정보에 액세스할 수 있습니다.

 

 

git lab 셋팅 해보기

 

git lab에 접속 후 회원가입을 하면 프로젝트를 만들면

ssh 키를 입력하라고 나올걸이다.

그 경고문 에 있는 add ssh 를 클릭 후

 

mac 기준으로  teminer 을 켜고 

 $  ssh-keygen

명령어를 친다.

엔터치고 비밀번호 치면 파일이 생성 되게 된다.

$ cd ~/.ssh

$ ls -al

id_rsa.pub 이라는 파일이 있을것이다.

$  cat id_ras.pub

을 치게되면 ssh key 가 나오게 된데

이걸 복붙해서 git lab 홈페이지로 돌아가 복붙하고

title 과 만료 일자를 정해주고

add key 버튼을 누르면 끝.

 

이후 작업은 git hub 와 사용 방법이 비슷하다.