peer lifecycle chaincode
명령 Syntaxpeer lifecycle chaincode package
명령 : 피어에 설치 전, 먼저 (Go) 체인코드 패키징--path
플래그 : 체인코드의 위치를 나타냄.--label
플래그 : 조직에서 패키지를 식별하는 데 사용할 myccv1
의 체인코드 패키지 레이블을 제공peer lifecycle chaincode package mycc.tar.gz --path $CHAINCODE_DIR --lang golang --label myccv1
peer chaincode install
명령 : 체인코드가 패키징된 후 피어에 체인코드 설치peer0.org1.example.com:7051
(--peerAddresses
에 정의된 피어인)에 mycc.tar.gz
패키지 설치 peer lifecycle chaincode install mycc.tar.gz --peerAddresses peer0.org1.example.com:7051
2019-03-13 13:48:53.691 UTC [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nEmycc:ebd89878c2bbccf62f68c36072626359376aa83c36435a058d453e8dbfd894cc" >
2019-03-13 13:48:53.691 UTC [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: mycc:a7ca45a7cc85f1d89c905b775920361ed089a364e12a9b6d55ba75c965ddd6a9
peer lifecycle chaincode queryinstalled
: 설치한 체인코드의 패키지 ID를 찾기
peer lifecycle chaincode queryinstalled --peerAddresses peer0.org1.example.com:7051
성공하면 명령은 패키지 레이블과 연결된 패키지 ID를 반환
Get installed chaincodes on peer:
Package ID: myccv1:a7ca45a7cc85f1d89c905b775920361ed089a364e12a9b6d55ba75c965ddd6a9, Label: myccv1
--output
플래그 : CLI가 출력을 JSON으로 형식화
peer lifecycle chaincode queryinstalled --peerAddresses peer0.org1.example.com:7051 --output json
성공하면 명령은 JSON으로 설치한 체인코드를 반환
{
"installed_chaincodes": [
{
"package_id": "mycc_1:aab9981fa5649cfe25369fce7bb5086a69672a631e4f95c4af1b5198fe9f845b",
"label": "mycc_1",
"references": {
"mychannel": {
"chaincodes": [
{
"name": "mycc",
"version": "1"
}
]
}
}
}
]
}
peer lifecycle chaincode getinstalledpackage
: 피어에서 설치된 체인코드 패키지 검색queryinstalled
에서 반환한 패키지 식별자를 사용--package-id
플래그: 체인코드 패키지 식별자 전달--output-directory
플래그 : 체인코드 패키지를 작성할 위치를 지정
peer lifecycle chaincode getinstalledpackage
--package-id myccv1:a7ca45a7cc85f1d89c905b775920361ed089a364e12a9b6d55ba75c965ddd6a9
--output-directory /tmp --peerAddresses peer0.org1.example.com:7051
peer lifecycle chaincode calculatepackageid
: 피어에 체인코드를 설치하지 않고 패키지된 체인코드에서 패키지 ID 계산
mycc.tar.gz.
패키지 의 패키지 ID를 계산
peer lifecycle chaincode calculatepackageid mycc.tar.gz
성공적인 명령은 패키징된 체인코드의 패키지 ID를 반환
myccv1:cc7bb5f50a53c207f68d37e9423c32f968083282e5ffac00d41ffc5768dc187
--output
플래그 : CLI가 출력을 JSON으로 형식화
peer lifecycle chaincode calculatepackageid mycc.tar.gz --output json
성공하면 명령은 체인코드 패키지 ID를 JSON으로 반환
{
"package_id": "myccv1:cc7bb5f50a53c207f68d37e9423c32f968083282e5ffac00d41ffc5768dc1873"
}
체인코드 패키지가 피어에 설치 -> 조직에 대한 체인코드 정의를 승인
체인코드 정의에는 체인코드 이름, 버전 및 보증 정책을 포함하여 체인코드 거버넌스의 중요한 매개변수가 포함
peer lifecycle chaincode approveformyorg
: mychannel
채널의 1.0
버전에서 mycc
로 명명된 체인코드의 정의를 승인
--package-id
플래그: 체인코드 패키지 식별자를 전달
--signature-policy
플래그 : 체인코드에 대한 보증 정책 정의
init-required
플래그 : 다른 체인코드 함수를 호출하기 전에 초기화 함수 실행
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID mychannel --name mycc --version 1.0
--init-required
--package-id myccv1:a7ca45a7cc85f1d89c905b775920361ed089a364e12a9b6d55ba75c965ddd6a9 --sequence 1
--signature-policy "AND ('Org1MSP.peer','Org2MSP.peer')"
2019-03-18 16:04:09.046 UTC [cli.lifecycle.chaincode] InitCmdFactory -> INFO 001 Retrieved channel (mychannel) orderer endpoint: orderer.example.com:7050
2019-03-18 16:04:11.253 UTC [chaincodeCmd] ClientWait -> INFO 002 txid [efba188ca77889cc1c328fc98e0bb12d3ad0abcda3f84da3714471c7c1e6c13c] committed with status (VALID) at peer0.org1.example.com:7051
--channel-config-policy
플래그: 채널 구성 내부의 정책을 체인코드 보증 정책으로 사용O
Channel/Application/Endorsement
: 기본 보증 정책export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID mychannel --name mycc --version 1.0 --init-required --package-id myccv1:a7ca45a7cc85f1d89c905b775920361ed089a364e12a9b6d55ba75c965ddd6a9 --sequence 1 --channel-config-policy Channel/Application/Admins
2019-03-18 16:04:09.046 UTC [cli.lifecycle.chaincode] InitCmdFactory -> INFO 001 Retrieved channel (mychannel) orderer endpoint: orderer.example.com:7050
2019-03-18 16:04:11.253 UTC [chaincodeCmd] ClientWait -> INFO 002 txid [efba188ca77889cc1c328fc98e0bb12d3ad0abcda3f84da3714471c7c1e6c13c] committed with status (VALID) at peer0.org1.example.com:7051
peer lifecycle chaincode queryapproved
명령 : 조직의 승인된 체인코드 정의 쿼리
ex: mychannel
channel 의 시퀀스 번호 1
에 mycc
로 명명된 체인코드의 승인된 정의를 쿼리
peer lifecycle chaincode queryapproved -C mychannel -n mycc --sequence 1
Approved chaincode definition for chaincode 'mycc' on channel 'mychannel':
sequence: 1, version: 1, init-required: true, package-id: mycc_1:d02f72000e7c0f715840f51cb8d72d70bc1ba230552f8445dded0ec8b6e0b830, endorsement plugin: escc, validation plugin: vscc
가장 최근에 승인된 정의(최신: 현재 정의된 시퀀스 번호와 다음 시퀀스 번호 중 더 새로운 것)를 쿼리하기 위해 시퀀스 번호를 지정하지 않고 이 명령을 사용할 수도 있습니다.
peer lifecycle chaincode queryapproved -C mychannel -n mycc
Approved chaincode definition for chaincode 'mycc' on channel 'mychannel':
sequence: 3, version: 3, init-required: false, package-id: mycc_1:d02f72000e7c0f715840f51cb8d72d70bc1ba230552f8445dded0ec8b6e0b830, endorsement plugin: escc, validation plugin: vscc
--output
플래그 : CLI가 출력을 JSON으로 형식화
peer lifecycle chaincode queryapproved -C mychannel -n mycc --sequence 1 --output json
mychannel
channel 의 1
시퀀스 번호에서 mycc
체인코드에 대해 승인된 체인코드 정의가 있는 JSON을 반환{
"sequence": 1,
"version": "1",
"endorsement_plugin": "escc",
"validation_plugin": "vscc",
"validation_parameter": "EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA==",
"collections": {},
"init_required": true,
"source": {
"Type": {
"LocalPackage": {
"package_id": "mycc_1:d02f72000e7c0f715840f51cb8d72d70bc1ba230552f8445dded0ec8b6e0b830"
}
}
}
}
패키지가 지정되지 않은 승인된 체인코드 정의를 쿼리할 때
peer lifecycle chaincode queryapproved -C mychannel -n mycc --sequence 2 --output json
성공하면 명령은 mychannel
channel 의2
시퀀스 번호에서mycc
체인코드에 대해 승인된 체인코드 정의가 있는 JSON을 반환
{
"sequence": 2,
"version": "2",
"endorsement_plugin": "escc",
"validation_plugin": "vscc",
"validation_parameter": "EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA==",
"collections": {},
"source": {
"Type": {
"Unavailable": {}
}
}
}
peer lifecycle chaincode checkcommitreadiness
: 체인코드 정의를 커밋할 준비가 되었는지 확인
/Channel/Application/Endorsement
정책(기본적으로 다수)을 충족하기 위해 체인코드 정의를 승인했는지 확인 가능mychannel
channel 에서 1.0
version 이라는 이름의 mycc
체인코드를 확인하는 명령 peer lifecycle chaincode checkcommitreadiness
의 예
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode checkcommitreadiness -o orderer.example.com:7050 --channelID mychannel --tls --cafile $ORDERER_CA --name mycc --version 1.0 --init-required --sequence 1
성공하면 명령은 체인코드 정의를 승인한 조직을 반환
Chaincode definition for chaincode 'mycc', version '1.0', sequence '1' on channel
'mychannel' approval status by org:
Org1MSP: true
Org2MSP: true
--output
플래그를 사용하여 CLI가 출력을 JSON으로 형식화
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode checkcommitreadiness -o orderer.example.com:7050 --channelID mychannel --tls --cafile $ORDERER_CA --name mycc --version 1.0 --init-required --sequence 1 --output json
성공하면 명령은 조직이 체인코드 정의를 승인했는지 여부를 보여주는 JSON 맵을 반환
{
"Approvals": {
"Org1MSP": true,
"Org2MSP": true
}
}
peer lifecycle chaincode commit
: 충분한 수의 조직이 조직에 대한 체인코드 정의를 승인하면 한 조직은 채널 정의 커밋 가능.
정의에 대한 조직 보증을 수집하기 위해 채널에 있는 다른 조직의 피어를 대상으로 함.
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID mychannel --name mycc --version 1.0 --sequence 1 --init-required --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer0.org2.example.com:9051
2019-03-18 16:14:27.258 UTC [chaincodeCmd] ClientWait -> INFO 001 txid [b6f657a14689b27d69a50f39590b3949906b5a426f9d7f0dcee557f775e17882] committed with status (VALID) at peer0.org2.example.com:9051
2019-03-18 16:14:27.321 UTC [chaincodeCmd] ClientWait -> INFO 002 txid [b6f657a14689b27d69a50f39590b3949906b5a426f9d7f0dcee557f775e17882] committed with status (VALID) at peer0.org1.example.com:7051
peer lifecycle chaincode querycommitted
: 채널에 커밋된 체인코드 정의를 쿼리
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode querycommitted -o orderer.example.com:7050 --channelID mychannel --name mycc --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051
Committed chaincode definition for chaincode 'mycc' on channel 'mychannel':
Version: 1, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
Approvals: [Org1MSP: true, Org2MSP: true]
해당 채널의 모든 체인코드 정의를 쿼리하기 위해 채널 이름만 지정할 수도 있움.
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode querycommitted -o orderer.example.com:7050 --channelID mychannel --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051
Committed chaincode definitions on channel 'mychannel':
Name: mycc, Version: 1, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
Name: yourcc, Version: 2, Sequence: 3, Endorsement Plugin: escc, Validation Plugin: vscc
--output플래그
를 사용하여 CLI가 출력을 JSON으로 형식화
특정 체인코드 정의를 쿼리하기 위해
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode querycommitted -o orderer.example.com:7050 --channelID mychannel --name mycc --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --output json
성공하면 이 명령은 채널 'mychannel'에서 체인코드 'mycc'에 대한 체인코드 정의를 커밋한 JSON을 반환
{
"sequence": 1,
"version": "1",
"endorsement_plugin": "escc",
"validation_plugin": "vscc",
"validation_parameter": "EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA==",
"collections": {},
"init_required": true,
"approvals": {
"Org1MSP": true,
"Org2MSP": true
}
}
validation_parameter
은 base64로 인코딩, 이를 디코딩하는 명령의 예는 다음과 같다.
echo EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA== | base64 -d
/Channel/Application/Endorsement
해당 채널의 모든 체인코드 정의를 쿼리하기 위해
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode querycommitted -o orderer.example.com:7050 --channelID mychannel --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --output json
성공하면 이 명령은 채널 'mychannel'에서 체인코드 정의를 커밋한 JSON을 반환
{
"chaincode_definitions": [
{
"name": "mycc",
"sequence": 1,
"version": "1",
"endorsement_plugin": "escc",
"validation_plugin": "vscc",
"validation_parameter": "EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA==",
"collections": {},
"init_required": true
},
{
"name": "yourcc",
"sequence": 3,
"version": "2",
"endorsement_plugin": "escc",
"validation_plugin": "vscc",
"validation_parameter": "EiAvQ2hhbm5lbC9BcHBsaWNhdGlvbi9FbmRvcnNlbWVudA==",
"collections": {}
}
]
}
정리가 잘 된 글이네요. 도움이 됐습니다.