Share
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 '아무튼-작업일지'
Welcome to '아무튼-작업일지'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to '아무튼-작업일지'!
Subscribe
👍
Other posts in '공부 내용'See all
yeji Kim
피그마
frame 해상도 - 점유도 커뮤니티 ui KIT - duplicate 버튼생성하기 1-3, 프로토타이핑, text styling, auto layouthttps://www.youtube.com/watch?v=E4NfxpV9hpE 미드저니
yeji Kim
fabric application
about asset transfer 구성 요소 샘플 app smart contract 샘플 app 준비하기 npm install → 종속성 설치, 앱 빌드 1. gateway에 대한 gRPC 연결 설정 2. gateway 연결 생성 요구사항 fabric gateway에 대한 gRPC 연결 네트워크와 거래할 때 사용되는 client ID 디지털 서명 3. 호출할 계약에 액세스 gateway.getNetwork, network.getContract 4. 샘플 자산으로 원장 채우기 submitTranscation은 fabric gateway를 통해 다음을 수행 거래 제안 승인 승인된 거래를 주문 서비스에 제출 트랜젝션이 커밋되고 원장 상태가 업데이트될 때까지 대기 샘플 앱에 initLedger 호출. contract.submitTransaction
yeji Kim
fabric gateway
fabric gateway fabric network에 트랜잭션을 제출하기 위해 간소화된 최소 API 제공 클라이언트 app 작성 go, node, java 중 하나를 사용 다음 트랜잭션 단계를 관리 트랜젝션 제안 평가 단일 피어에서 cc 호출하고 결과를 client에게 반환 일반적으로는 원장 업데이터 x, 원장 현재 상태를 쿼리 동일한 조직의 피어 중 원장 블록 높이가 가장 높은 피어 선택 없으면 다른 조직에서 선택 트랜젝션 제안 보증 결합된 서명 정책을 만족시키기에 충분한 보증 응답 수집 서명을 위해 client에게 준비된 트랜잭션 봉투 반환 트랜젝션 제출 서명된 트랜젝션 봉투가 주문 서비스에 전송되어 원장에 커밋 커밋 상태(유효성/무효화) 이벤트 대기 cc 이벤트 수신 스마트 계약 기능에서 발생하는 이벤트에 응답 가능 api는 endorse/submit/commitstatus 작업을 한 줄 submittransaction으로 결합해서 제공 클라이언트 app API 피어, cc 같은 운영 추상화보다는 조직, 계약 같은 논리적 추상화를 제공