티스토리 뷰

반응형

이 글은 https://blockchain-fabric.blogspot.com/2018/03/system-chaincodes-in-hyperledger-fabric.html 페이지를 번역 및 정리한 내용입니다.



Hyperledger Fabric v1.1은 시스템 체인 코드(System Chaincodes)라고하는 다양한 특수 체인 코드를 제공하여 특정 권한 작업을 수행합니다. 이 글의 목표는 Fabric의 다양한 시스템 체인 코드 구현, 기능 및 사용법에 대한 지침을 제공하는 것입니다. 사용자 체인 코드와 마찬가지로 시스템 체인 코드는 Init() 및 Invoke() 함수도 구현합니다. 5 개의 시스템 체인 코드가 있으며 아래에 나열되어 있습니다.

  1. Configuration System Chaincode (CSCC) -- core/scc/cscc/configure.go
  2. Life Cycle System Chaincode (LSCC) -- core/scc/lscc/lscc.go
  3. Query System Chaincode (QSCC) -- core/scc/qscc/query.go
  4. Endorser System Chaincode (ESCC) -- core/scc/escc/endorser_onevalidsignature.go
  5. Validator System Chaincode (VSCC) -- core/scc/vscc/validator_onevalidsignature.go

다음은 각 시스템 체인 코드가 제공하는 기능을 사용법과 함께 제시합니다. 커맨드 라인(CLI)을 사용하여 시스템 체인 코드가 지원하는 모든 기능을 쉽게 invoke/query할 수 없을 수도 있습니다. 왜냐하면 일련의 직렬화된 프로토 타입 바이트의 golang 구조체를 전달해야 할 수도 있기 때문입니다. 따라서 이러한 함수의 경우 SDK를 사용하는 것이 좋습니다. 이 글에서는 해당 기능에 대해서만 CLI를 사용하여 invoke/query를 실행합니다.


Configuration System Chaincode (CSCC)

CSCC는 피어 및 프로세스 채널 구성 트랜잭션에 대한 채널 관련 정보를 관리합니다. 그것은 다음과 같은 다섯 가지 기능을 제공합니다.

  • JoinChain
  • GetConfigBlock
  • GetConfigTree
  • SimulateConfigTreeUpdate
  • GetChannels

다음은 각 기능의 사용법을 보여줍니다. 우리는 모든 명령이 샘플 네트워크에서 peer0을 가리키는 클라이언트에서 실행된다고 가정합니다(setup 참조). CSCC 관련 명령을 실행하려면 피어 채널 및 피어 체인 코드 CLI 명령을 사용해야합니다.


JoinChain

JoinChain 기능이 호출되어 피어를 채널에 가입시킵니다. peer channel create 명령(setup 참조)의 결과로 orderer로부터 수신된 채널 구성 블록의 직렬화된 기본 바이트인 하나의 인수가 필요합니다. 다음 peer CLI 명령은 피어를 ch1이라는 채널에 조인시킵니다. peer channel join 명령은 CSCC를 호출하는 동안 ch1.block을 읽고 바이트로 전달합니다. 그러나 peer chaincode invoke를 사용해야하는 경우 ch1.block의 내용을 CLI 쿼리 자체에 넣는 것은 쉽지 않습니다.

peer channel join -b ch1.block


GetConfigBlock

GetConfigBlock은 지정된 채널에 대한 현재 구성 블록을 가져 오기 위해 호출(invoke)됩니다. 채널 이름의 바이트 표현인 하나의 인수가 필요합니다. 다음 두 개의 피어 CLI 명령 중 하나를 사용하여 채널 ch1의 구성(config) 블록을 가져올 수 있습니다.

peer chaincode query -C "" -n cscc -c '{"Args":["GetConfigBlock", "ch1"]}'

또는

peer channel fetch -o orderer0:7050 config -c ch1


GetChannels

GetChannels는 피어가 지금까지 조인한 모든 채널에 대한 정보를 가져 오기 위해 호출(invoke)됩니다. 다음 두 개의 피어 CLI 명령을 사용하여 모든 채널을 가져올 수 있습니다.

peer chaincode query -C "" -n cscc -c '{"Args":["GetChannels"]}'

또는

peer channel list


독자를 위한 연습

CLI 명령을 사용하여 GetConfigTreeSimulateConfigTreeUpdate를 query/invoke합니다. 채널에서 조직을 추가하거나 제거하려면 config 트리를 가져 와서 수정하고 SimulateConfigTreeUpdate 함수를 호출하여 CSCC에서 승인하도록해야합니다.


Life Cycle System Chaincode (LSCC)

LSCC는 체인 코드의 수명주기를 관리합니다. 체인 코드는 피어에 설치되고 채널에 배포되며 업그레이드되고 사용자는 체인 코드 실행에 대한 정보를 얻을 수 있습니다.

  • install
  • deploy
  • upgrade
  • getid
  • getdepspec
  • getccdata
  • getchaincodes
  • getinstalledchaincode

위와 같은 8 가지 기능을 제공합니다.


install

install 기능은 피어 파일 시스템 (/var/hyperledger/production/chaincodes)에 체인 코드 프로그램을 저장하도록 호출(invoke)됩니다. 체인 코드 배포 스펙(core/common/ccprovider/cdspackage.go)의 직렬화 된 protobuf 바이트인 하나의 인수가 필요합니다. LSCC를 직접 호출 할 수는 있지만 전체 체인 코드의 내용을 전달해야하므로 체인 코드의 내용을 읽음으로써 LSCC에서 내부적으로 호출하는 peer chaincode install 명령을 사용하는 것이 좋습니다.

peer chaincode install -n generic-chaincode -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/generic-chaincode


deploy

deploy 기능은 주어진 채널에서 체인 코드를 인스턴스화하기 위해 호출(invoke)됩니다. 다섯 가지 인수를 사용할 수 있는데, 처음 두 개의 인수인 채널 이름 및 체인 코드 배포 사양은 필수 사항입니다. 다른 세 가지 인수, 즉 보증 정책, 엔도서 시스템 체인 코드의 이름 및 유효성 검사기 시스템 체인 코드의 이름은 선택 사항입니다.

peer chaincode instantiate -o orderer0:7050 -C ch1 -n generic-chaincode -v 1.0 -c '{"Args":["init"]}' -P "AND ('Org0MSP.member','Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member')"


getdepspec

getdepspec 기능은 피어에 설치된 체인 코드의 배포 사양을 가져 오는 데 사용됩니다. 다음 명령은 ch1 채널에서 generic-chaincode라는 이름의 체인 코드의 배포 사양을 검색합니다.

peer chaincode query -C "ch1" -n lscc -c '{"Args":["getdepspec", "ch1", "generic-chaincode"]}'


getchaincodes

getchaincodes 기능은 채널에 배포된 체인 코드 목록을 가져 오는 데 사용됩니다. 다음 명령은 채널 ch1에서 인스턴스화 된 체인 코드 목록을 검색합니다.

peer chaincode query -C "ch1" -n lscc -c '{"Args":["getchaincodes"]}'


getinstalledchaincodes

getinstalledchaincodes 기능은 피어에 설치된 체인 코드 목록을 가져 오는 데 사용됩니다. 다음 명령은 피어에 설치된 체인 코드 목록을 검색합니다.

peer chaincode query -C "" -n lscc -c '{"Args":["getinstalledchaincodes"]}'


독자를 위한 연습

CLI 명령을 사용하여 체인 코드, 체인 코드의 getidgetccdata(즉, 체인 코드 데이터)를 업그레이드하십시오.


Query System Chaincode (QSCC)

LSCC는 블록 저장소에 저장된 블록 및 트랜잭션을 쿼리 할 수 있도록 특정 기능을 사용자에게 제공합니다.

  • GetChainInfo
  • GetBlockByNumber
  • GetBlockByHash
  • GetTransactionByID
  • GetBlockByTxID

위와 같은 다섯 가지 기능을 제공합니다.


GetBlockByNumber

GetBlockByNumber 기능은 직렬화된 블록을 가져 오는 데 사용됩니다. 다음 명령은 채널 ch1에서 블록 번호 3을 검색합니다.

peer chaincode query -C "" -n qscc -c '{"Args":["GetBlockByNumber", "ch1", "3"]}'


독자를 위한 연습

다른 기능의 사용법은 위의 CLI 명령과 매우 유사합니다.


Endorser System Chaincode (ESCC)

ESCC는 트랜잭션을 실행한 후 트랜잭션 실행 결과(즉, 트랜잭션 상태, 체인 코드 이벤트, reat/write set 등)를 포함하는 트랜잭션 응답 메시지에 서명을 넣기 위해 엔도싱 피어(endorsing peer) (core/endorser/endorser.go)에 의해 호출됩니다. invoke 함수는 5 - 7 개의 매개 변수를 수용 할 수 있습니다. 이 매개 변수는 Header, ChaincodeProposalPayload, ChaincodeID, Response, 시뮬레이션 결과, 이벤트 및 페이로드 가시성(payload visibility)입니다.


Validator System Chaincode (VSCC)

VSCC는 committing 피어 (core/committer/txvalidator/validator.go)에 의해 호출되어 각 트랜잭션의 서명 세트를 체인 코드의 보증 정책에 대해 유효성을 검사합니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함