Sign In
공부 내용

Fabric chaincode lifecycle (작성 중)

Y
yeji Kim
체인코드
규정된 인터페이스를 구현하는 Go, Node.js, java 등으로 작성된 프로그램
보증 피어 프로세스와 격리된 보안 docker 컨테이너에서 실행
체인코드 배포
네트워크 운영자는 패브릭 life cycle을 이용해 다음 작업을 수행...
1.
체인코드 설치 및 정의
2.
체인코드 업그레이드
3.
배포 시나리오
4.
새로운 fabric lifecycle로 마이그레이션

체인코드 설치 및 정의

조직이 매개변수(이름, 버전, 체인코드 승인 정책 등)에 동의해야 함.
채널 구성원 합의 과정
1.
체인코드 패키징 : 한 조직 또는 각 조직에서 완료
2.
피어에 체인코드 설치 : 체인코드를 통해 트랜잭션을 승인하거나 원장에 쿼리하는 모든 조직
3.
조직에 대한 체인코드 정의승인 : 체인 코드를 사용할 모든 조직
4.
체인코드 정의를 채널에 커밋 : 필요한 수의 조직이 승인되면 한 조직에서 커밋 트랜잭션 제출
a.
제출자는 먼저 승인한 조직의 충분한 피어로부터 보증을 수집 → 트랜잭션 제출 → 체인코드 정의, 커밋

1. 스마트 컨트랙트 패키징

체인 코드를 tar 파일로 패키징
fabric 피어 바이너리, node fabric sdk 또는 gnu tar 같은 도구 사용
주석 → 체인코드 패키지 레이블 제공
결과 파일 형식
.tar.gz
tar 파일에는 아래 두 파일이 포함되어야 함
metadata.json : 메타 데이터 파일, 체인코드 언어, 코드 경로 및 패키지 레이블

2. 피어에 체인코드 설치

트랜잭션을 실행하고 승인할 모든 피어에 체인코드 패키지 설치 using peer administrator
피어 : 체인코드가 설치된 후 체인 코드를 빌드하고 문제가 있는 경우 빌들 오류 반환
조직 : 체인코드를 한 번만 패키징한 다음 조직에 속한 모든 피어에 동일한패키지 설치
체인코드 실행 확인 : 한 조직에서 체인코드를 패키징하여 대역 외 다른 채널 구성원에게 전송
성공적 설치 output = 패키지 해시, 결합된 패키지 레이블인 체인코드 패키지 식별자 반환
패키지 식별자 : 피어에 설치된 체인코드 패키지를 조직에서 승인한 체인코드 정의와 연결
식별자 저장 : peer cli를 사용해 피어에 설치된 패키지 쿼리 → 패키지 식별자 찾기 가능

3. 조직에 대한 체인코드 정의 승인

체인코드 - 체인코드 정의에 의해 관리됨
체인코드 정의는 체인코드 매개 변수에 대한 조직의 투표를 통해 채널 구성원이 정함.
승인된 조직 정의는 채널 사용 전에 채널 구성원이 체인코드의 사용 동의를 허가한다.
체인코드 정의에 필요한 매개변수
이름, 버전
시퀀스 - 채널에서 체인코드가 정의된 횟수. 정수이며 체인코드 업그레이드를 추적하는 데 사용.
보증 정책 - 트랜잭션 출력을 실행하고 검증해야 하는 조직에서 필요
cli에 전달되는 문자열로 표현되거나 채널 구성에서 정책 참조 가능.
기본적으로 보증 정책은 channel/application/endorsement로 설정
기본적으로 채널에 있는 대부분의 조직이 트랜잭션을 보증하도록 요구.
컬랙션 구성 - 체인코드와 연결된 개인 데이터 컬렉션 정의 파일의 경로
ESCC/VSCC 플러그인 - 해당 체인코드에서 사용할 사용자 지정 보증 또는 유효성 검사 플러그인의 이름
초기화 - fabric chaincode shim API의 저수준 API를 사용할 땐 init 함수가 잇어야 함.
체인코드 인터페이스에 필요하지만, 앱에서 반드시 호출할 필요는 x
init cc의 정의를 승인할 때, 호출 여부 지정 가능.
—init-required. 이 플래그를 사용하는 경우 cc 버전을 증가시킬 때마다 cc 초기화를 위해 —isInit 플래그 또는 매개변수를 cc 호출에 전달해야 한다.
체인코드 정의에는 패키지 식별자도 포함 - 체인코드를 사용하려는 각 조직의 필수 매개변수
패키지 ID는 모든 조직에서 동일할 필요 X
조직은 체인코드 패키지를 설치하거나 정의에 식별자 포함하지 않고 체인코드 정의 승인 가능.
체인 코드를 사용하는 각 채널 구성원은 조직에 대한 체인코드 정의를 승인해야 함.
승인은 ordering 서비스에 제출 → 이후 모든 동료에게 분배
승인은 organization administrator가 제출 → 승인된 정의는 조직의 모든 동료가 사용할 수 있는 컬렉션에 저장 ⇒ 피어가 여러 개인 경우에도 조직에 대한 체인 코드를 한 번만 승인하면 됨.

4. 체인코드 정의를 채널에 커밋

충분한 수의 채널 구성원이 체인코드 정의를 승인하면 한 조직이 정의를 채널에 커밋할 수 있음
checkcommitreadiness 명령 - 피어 cli를 사용해 채널에 정의를 커밋하기 전, 해당 명령어를 사용하여 어떤 채널 구성원이 정의를 승인했는지에 따라 체인코드 정의 커밋이 성공해야 하는지 여부 확인 가능
조직에 대해 승인된 체인코드 정의 질의 → 조직이 승인한 경우, 정의를 보증하는 채널 구성원의 동료에게 커밋 트랜잭션 제안 전송 → 트랜잭션이 ordering service에 제출 → 체인 코드가 채널
정의를 승인해야 하는 조직 수는 channel/application/lifecycleendoersement 정책에 따라 결정.

체인코드 업그레이드

체인코드 바이너리를 업그레이드하거나 정책만 업데이트 가능
1.
체인코드 재패키징 - 체인코드 바이너리를 업그레이드하는 경우에만
a.
체인코드 재패키징
b.
org1, org2는 체인코드 바이너리를 업그레이드하고 체인코드를 다시 패키징함.
i.
두 조직모두 다른 패키지 레이블 사용
2.
피어에 새 체인코드 패키지 설치 - 다시 한 번 체인코드 바이너리를 업그레이드하는 경우에만.
a.
새 체인코드 패키지를 설치하면, 새 체인코드 정의에 전달해야 하는 패키지 ID 생성
b.
수명 주기 프로세스에서 체인코드 바이너리가 업그레이드되었는지 추적하는 데 사용되는 체인코드 버전을 변경해야 함.
3.
새 체인코드 정의 승인
a.
채널 구성원은 새 정책으로 정의를 승인. 새 정의는 시퀀스 값을 1씩 증가.
b.
각 조직의 관리자는 해당 조직에 대해 새 cc 정의를 승인 → 새 정의는 새 packageID를 참조하고 cc 버전을 변경 → 시퀀스를 1에서 2로 증가
4.
채널에 정의 커밋
a.
충분한 수의 채널 구성원이 새 체인코드 정의를 실행하면, 한 조직의 관리자가 새 cc 정의를 채널에 커밋. → 업그레이드된 cc 바이너리 코드로 새 cc 컨테이너가 시작됨.
b.
cc 정의의 시퀀스를 통해 업그레이드 추적
c.
모든 채널 구성원은 시퀀스 번호를 1씩 증가+cc 업그레이드를 위해 새 정의를 승인

배포 시나리오

채널 가입

cc 패키지 설치 → 채널에 이미 커밋된 cc 정의 승인 → cc 사용 시작.
보증 정책은 자동으로 새 조직을 포함하도록 자동으로 업데이트됨.

보증정책 업데이트

세 조직 모두 새로운 보증 정책 승인
시퀀스 증가 but cc 버전 업데이트는 X
새 보증 정책은 새 정의가 채널에 커밋된 후에 적용.

cc 설치하지 않고 정의 승인

org3는 cc 설치 x. cc 정의의 일부로 packageID 제공 X. but 여전히 채널에 커밋된 mycc 정의 승인 가능

한 조직이 cc 정의에 동의 x

동의 x 조직은 cc 사용 x

채널이 cc 정의에 동의 x

다수가 cc에 동의 x → 커밋 x
어떤 구성원도 cc 사용 x

조직은 다른 cc 패키지를 설치 (다른 cc 바이너리 사용)

각 조직은 cc 정의를 승인할 때 다른 패키지 id 사용 O ⇒

하나의 패키지를 사용하여 여러 cc 생성

하나의 cc 패키지로 여러 cc 승인하고, 커밋하여, 채널에 여러 cc 인스턴스 생성 O
각 정의는 다른 cc 이름을 지정해야 함 → 채널에서 컨트랙트의 여러 인스턴스를 실행할 수 있지만 계약에 다른 보증 정책이 적용되도록 할 수 O
Subscribe to '아무튼-작업일지'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to '아무튼-작업일지'!
Subscribe
👍