Fabric新加的组织如何使用chaincode

227 阅读9分钟

本文接上篇文章的内容进行,在进行该文中的操作时,需要保证,环境已经部署了一个order节点,2个组织,并创建了一个channel,并部署了chaincode.

1.新增一个组织并加入到通道

➜  test-network git:(ad8fc2f) ✗ cd addOrg3

➜  addOrg3 git:(ad8fc2f) ✗ ls

README.md         addOrg3.sh        ccp-generate.sh   ccp-template.json ccp-template.yaml configtx.yaml     docker            fabric-ca         org3-crypto.yaml

➜  addOrg3 git:(ad8fc2f) ✗ ./addOrg3.sh up -c channel1

我们从日志中看看整个流程的操作,首先

/Users/zhaojunwei/workspace/hyfa/fabric-samples/test-network/addOrg3/../../bin/cryptogen

Generating certificates using cryptogen tool

Creating Org3 Identities

+ cryptogen generate --config=org3-crypto.yaml --output=../organizations

org3.example.com

+ res=0

Generating CCP files for Org3

/Users/zhaojunwei/workspace/hyfa/fabric-samples/test-network/addOrg3/../../bin/configtxgen

Generating Org3 organization definition

+ configtxgen -printOrg Org3MSP

2022-01-05 10:49:44.345 CST [common.tools.configtxgen] main -> INFO 001 Loading configuration

2022-01-05 10:49:44.351 CST [common.tools.configtxgen.localconfig] LoadTopLevel -> INFO 002 Loaded configuration: /Users/zhaojunwei/workspace/hyfa/fabric-samples/test-network/addOrg3/configtx.yaml

+ res=0

Bringing up Org3 peer

Creating volume "docker_peer0.org3.example.com" with default driver

WARNING: Found orphan containers (cli, peer0.org2.example.com, peer0.org1.example.com, orderer.example.com) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.

Creating peer0.org3.example.com ... done

创建org3,并启动,然后加org3加入到channel中

Generating and submitting config tx to add Org3

Creating config transaction to add org3 to network

Using organization 1

Fetching the most recent configuration block for the channel

+ peer channel fetch config config_block.pb -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

2022-01-05 02:49:49.198 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

2022-01-05 02:49:49.201 UTC [cli.common] readBlock -> INFO 002 Received block: 6

2022-01-05 02:49:49.201 UTC [channelCmd] fetch -> INFO 003 Retrieving last config block: 2

2022-01-05 02:49:49.204 UTC [cli.common] readBlock -> INFO 004 Received block: 2

Decoding config block to JSON and isolating config to config.json

+ configtxlator proto_decode --input config_block.pb --type common.Block

+ jq '.data.data[0].payload.data.config'

+ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./organizations/peerOrganizations/org3.example.com/org3.json

+ configtxlator proto_encode --input config.json --type common.Config

+ configtxlator proto_encode --input modified_config.json --type common.Config

+ configtxlator compute_update --channel_id channel1 --original original_config.pb --updated modified_config.pb

+ configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate

+ jq .

++ cat config_update.json

+ echo '{"payload":{"header":{"channel_header":{"channel_id":"channel1", "type":2}},"data":{"config_update":{' '"channel_id":' '"channel1",' '"isolated_data":' '{},' '"read_set":' '{' '"groups":' '{' '"Application":' '{' '"groups":' '{' '"Org1MSP":' '{' '"groups":' '{},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"1"' '},' '"Org2MSP":' '{' '"groups":' '{},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"1"' '}' '},' '"mod_policy":' '"",' '"policies":' '{' '"Admins":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Endorsement":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"LifecycleEndorsement":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Readers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Writers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '}' '},' '"values":' '{' '"Capabilities":' '{' '"mod_policy":' '"",' '"value":' null, '"version":' '"0"' '}' '},' '"version":' '"1"' '}' '},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"0"' '},' '"write_set":' '{' '"groups":' '{' '"Application":' '{' '"groups":' '{' '"Org1MSP":' '{' '"groups":' '{},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"1"' '},' '"Org2MSP":' '{' '"groups":' '{},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"1"' '},' '"Org3MSP":' '{' '"groups":' '{},' '"mod_policy":' '"Admins",' '"policies":' '{' '"Admins":' '{' '"mod_policy":' '"Admins",' '"policy":' '{' '"type":' 1, '"value":' '{' '"identities":' '[' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"ADMIN"' '},' '"principal_classification":' '"ROLE"' '}' '],' '"rule":' '{' '"n_out_of":' '{' '"n":' 1, '"rules":' '[' '{' '"signed_by":' 0 '}' ']' '}' '},' '"version":' 0 '}' '},' '"version":' '"0"' '},' '"Endorsement":' '{' '"mod_policy":' '"Admins",' '"policy":' '{' '"type":' 1, '"value":' '{' '"identities":' '[' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"PEER"' '},' '"principal_classification":' '"ROLE"' '}' '],' '"rule":' '{' '"n_out_of":' '{' '"n":' 1, '"rules":' '[' '{' '"signed_by":' 0 '}' ']' '}' '},' '"version":' 0 '}' '},' '"version":' '"0"' '},' '"Readers":' '{' '"mod_policy":' '"Admins",' '"policy":' '{' '"type":' 1, '"value":' '{' '"identities":' '[' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"ADMIN"' '},' '"principal_classification":' '"ROLE"' '},' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"PEER"' '},' '"principal_classification":' '"ROLE"' '},' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"CLIENT"' '},' '"principal_classification":' '"ROLE"' '}' '],' '"rule":' '{' '"n_out_of":' '{' '"n":' 1, '"rules":' '[' '{' '"signed_by":' 0 '},' '{' '"signed_by":' 1 '},' '{' '"signed_by":' 2 '}' ']' '}' '},' '"version":' 0 '}' '},' '"version":' '"0"' '},' '"Writers":' '{' '"mod_policy":' '"Admins",' '"policy":' '{' '"type":' 1, '"value":' '{' '"identities":' '[' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"ADMIN"' '},' '"principal_classification":' '"ROLE"' '},' '{' '"principal":' '{' '"msp_identifier":' '"Org3MSP",' '"role":' '"CLIENT"' '},' '"principal_classification":' '"ROLE"' '}' '],' '"rule":' '{' '"n_out_of":' '{' '"n":' 1, '"rules":' '[' '{' '"signed_by":' 0 '},' '{' '"signed_by":' 1 '}' ']' '}' '},' '"version":' 0 '}' '},' '"version":' '"0"' '}' '},' '"values":' '{' '"MSP":' '{' '"mod_policy":' '"Admins",' '"value":' '{' '"config":' '{' '"admins":' '[],' '"crypto_config":' '{' '"identity_identifier_hash_function":' '"SHA256",' '"signature_hash_family":' '"SHA2"' '},' '"fabric_node_ous":' '{' '"admin_ou_identifier":' '{' '"certificate":' '"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVRENDQWZlZ0F3SUJBZ0lRYmRYY01nY2xzajRRNGk3d1owemFrekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF4TURVd01qUTFNREJhRncwek1qQXhNRE13TWpRMU1EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3pMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKdUljSkdpM0NLVzZqcmxJZlVzZU0vMml2bjJaRjE4MktmS09iRVREczltMHFyR3NGbmtJbTNyYTlRZXUyTmlucApaRWRTUjBaUkhHVjI1Mnhud0Jlb2hLTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQUcKbUlsRHk3Q2RDZGFCcVlsZ3NuK1ZoT2tRekVzSWdBV3BjZm56eWNvalpUQUtCZ2dxaGtqT1BRUURBZ05IQURCRQpBaUEveWJiUk9QbU1JenRtM0ppSmJXdFFsY3k2NHN1NEhLUUdGY1pEaldLT3JnSWdRb1dGYVNMSFd1UU9NeXJkCklyRDB6MmluVmZDT2lWOHBiR1pRdXZCZmxMST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",' '"organizational_unit_identifier":' '"admin"' '},' '"client_ou_identifier":' '{' '"certificate":' '"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVRENDQWZlZ0F3SUJBZ0lRYmRYY01nY2xzajRRNGk3d1owemFrekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF4TURVd01qUTFNREJhRncwek1qQXhNRE13TWpRMU1EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3pMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKdUljSkdpM0NLVzZqcmxJZlVzZU0vMml2bjJaRjE4MktmS09iRVREczltMHFyR3NGbmtJbTNyYTlRZXUyTmlucApaRWRTUjBaUkhHVjI1Mnhud0Jlb2hLTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQUcKbUlsRHk3Q2RDZGFCcVlsZ3NuK1ZoT2tRekVzSWdBV3BjZm56eWNvalpUQUtCZ2dxaGtqT1BRUURBZ05IQURCRQpBaUEveWJiUk9QbU1JenRtM0ppSmJXdFFsY3k2NHN1NEhLUUdGY1pEaldLT3JnSWdRb1dGYVNMSFd1UU9NeXJkCklyRDB6MmluVmZDT2lWOHBiR1pRdXZCZmxMST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",' '"organizational_unit_identifier":' '"client"' '},' '"enable":' true, '"orderer_ou_identifier":' '{' '"certificate":' '"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVRENDQWZlZ0F3SUJBZ0lRYmRYY01nY2xzajRRNGk3d1owemFrekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF4TURVd01qUTFNREJhRncwek1qQXhNRE13TWpRMU1EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3pMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKdUljSkdpM0NLVzZqcmxJZlVzZU0vMml2bjJaRjE4MktmS09iRVREczltMHFyR3NGbmtJbTNyYTlRZXUyTmlucApaRWRTUjBaUkhHVjI1Mnhud0Jlb2hLTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQUcKbUlsRHk3Q2RDZGFCcVlsZ3NuK1ZoT2tRekVzSWdBV3BjZm56eWNvalpUQUtCZ2dxaGtqT1BRUURBZ05IQURCRQpBaUEveWJiUk9QbU1JenRtM0ppSmJXdFFsY3k2NHN1NEhLUUdGY1pEaldLT3JnSWdRb1dGYVNMSFd1UU9NeXJkCklyRDB6MmluVmZDT2lWOHBiR1pRdXZCZmxMST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",' '"organizational_unit_identifier":' '"orderer"' '},' '"peer_ou_identifier":' '{' '"certificate":' '"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVRENDQWZlZ0F3SUJBZ0lRYmRYY01nY2xzajRRNGk3d1owemFrekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF4TURVd01qUTFNREJhRncwek1qQXhNRE13TWpRMU1EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3pMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKdUljSkdpM0NLVzZqcmxJZlVzZU0vMml2bjJaRjE4MktmS09iRVREczltMHFyR3NGbmtJbTNyYTlRZXUyTmlucApaRWRTUjBaUkhHVjI1Mnhud0Jlb2hLTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQUcKbUlsRHk3Q2RDZGFCcVlsZ3NuK1ZoT2tRekVzSWdBV3BjZm56eWNvalpUQUtCZ2dxaGtqT1BRUURBZ05IQURCRQpBaUEveWJiUk9QbU1JenRtM0ppSmJXdFFsY3k2NHN1NEhLUUdGY1pEaldLT3JnSWdRb1dGYVNMSFd1UU9NeXJkCklyRDB6MmluVmZDT2lWOHBiR1pRdXZCZmxMST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",' '"organizational_unit_identifier":' '"peer"' '}' '},' '"intermediate_certs":' '[],' '"name":' '"Org3MSP",' '"organizational_unit_identifiers":' '[],' '"revocation_list":' '[],' '"root_certs":' '[' '"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVRENDQWZlZ0F3SUJBZ0lRYmRYY01nY2xzajRRNGk3d1owemFrekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF4TURVd01qUTFNREJhRncwek1qQXhNRE13TWpRMU1EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3pMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKdUljSkdpM0NLVzZqcmxJZlVzZU0vMml2bjJaRjE4MktmS09iRVREczltMHFyR3NGbmtJbTNyYTlRZXUyTmlucApaRWRTUjBaUkhHVjI1Mnhud0Jlb2hLTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQUcKbUlsRHk3Q2RDZGFCcVlsZ3NuK1ZoT2tRekVzSWdBV3BjZm56eWNvalpUQUtCZ2dxaGtqT1BRUURBZ05IQURCRQpBaUEveWJiUk9QbU1JenRtM0ppSmJXdFFsY3k2NHN1NEhLUUdGY1pEaldLT3JnSWdRb1dGYVNMSFd1UU9NeXJkCklyRDB6MmluVmZDT2lWOHBiR1pRdXZCZmxMST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="' '],' '"signing_identity":' null, '"tls_intermediate_certs":' '[],' '"tls_root_certs":' '[' '"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNWakNDQWYyZ0F3SUJBZ0lRVkZxazRzM2JLOUc4NisrM1VXOTQyREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB5TWpBeE1EVXdNalExTURCYUZ3MHpNakF4TURNd01qUTEKTURCYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVyN0hYTDF5bGg0OGFvb2dVVlZ1Z3VUZStuN1pEbWJOQjVoN3JNNjhVOWxvV0QwVGFyTjhGeDBRcgpKSldZcDNpRHRNRklJZDN6cmZxMTRlQmJkeU5GVmFOdE1Hc3dEZ1lEVlIwUEFRSC9CQVFEQWdHbU1CMEdBMVVkCkpRUVdNQlFHQ0NzR0FRVUZCd01DQmdnckJnRUZCUWNEQVRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUNrR0ExVWQKRGdRaUJDQjVPK1pBMy9VTnlSSlRDV2l1ajdwSmlYeTNVdXZGT2Z5KzRLRlc2OUE4WXpBS0JnZ3Foa2pPUFFRRApBZ05IQURCRUFpQXZMK24vMGxqamVOaVlJa2ZZa2diaGQwZExkYSt2NzVLMHhyTmVTOTN5NVFJZ1hYQWYzSUw5CnYybXVocEdhaU5GeFdrcGt5NkVQbVgweXZwdG8ySUpWZHdBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="' ']' '},' '"type":' 0 '},' '"version":' '"0"' '}' '},' '"version":' '"0"' '}' '},' '"mod_policy":' '"Admins",' '"policies":' '{' '"Admins":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Endorsement":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"LifecycleEndorsement":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Readers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Writers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '}' '},' '"values":' '{' '"Capabilities":' '{' '"mod_policy":' '"",' '"value":' null, '"version":' '"0"' '}' '},' '"version":' '"2"' '}' '},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"0"' '}' '}}}}'

+ configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope

Signing config transaction

Using organization 1

+ peer channel signconfigtx -f org3_update_in_envelope.pb

2022-01-05 02:49:49.411 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

Submitting transaction from a different peer (peer0.org2) which also signs it

Using organization 2

+ peer channel update -f org3_update_in_envelope.pb -c channel1 -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

2022-01-05 02:49:49.469 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

2022-01-05 02:49:49.492 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update

Config transaction to add org3 to network submitted

Joining Org3 peers to network

Using organization 3

Fetching channel config block from orderer...

+ peer channel fetch 0 channel1.block -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

+ res=0

2022-01-05 02:49:49.869 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

2022-01-05 02:49:49.873 UTC [cli.common] readBlock -> INFO 002 Received block: 0

Joining org3 peer to the channel...

+ peer channel join -b channel1.block

+ res=0

2022-01-05 02:49:52.946 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

2022-01-05 02:49:52.970 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel

Setting anchor peer for org3...

Using organization 3

Fetching channel config for channel channel1

Using organization 3

Fetching the most recent configuration block for the channel

+ peer channel fetch config config_block.pb -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c channel1 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

2022-01-05 02:49:53.042 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

2022-01-05 02:49:53.046 UTC [cli.common] readBlock -> INFO 002 Received block: 7

2022-01-05 02:49:53.046 UTC [channelCmd] fetch -> INFO 003 Retrieving last config block: 7

2022-01-05 02:49:53.051 UTC [cli.common] readBlock -> INFO 004 Received block: 7

Decoding config block to JSON and isolating config to Org3MSPconfig.json

+ configtxlator proto_decode --input config_block.pb --type common.Block

+ jq '.data.data[0].payload.data.config'

Generating anchor peer update transaction for Org3 on channel channel1

+ jq '.channel_group.groups.Application.groups.Org3MSP.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "peer0.org3.example.com","port": 11051}]},"version": "0"}}' Org3MSPconfig.json

+ configtxlator proto_encode --input Org3MSPconfig.json --type common.Config

+ configtxlator proto_encode --input Org3MSPmodified_config.json --type common.Config

+ configtxlator compute_update --channel_id channel1 --original original_config.pb --updated modified_config.pb

+ configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate

+ jq .

++ cat config_update.json

+ echo '{"payload":{"header":{"channel_header":{"channel_id":"channel1", "type":2}},"data":{"config_update":{' '"channel_id":' '"channel1",' '"isolated_data":' '{},' '"read_set":' '{' '"groups":' '{' '"Application":' '{' '"groups":' '{' '"Org3MSP":' '{' '"groups":' '{},' '"mod_policy":' '"",' '"policies":' '{' '"Admins":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Endorsement":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Readers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Writers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '}' '},' '"values":' '{' '"MSP":' '{' '"mod_policy":' '"",' '"value":' null, '"version":' '"0"' '}' '},' '"version":' '"0"' '}' '},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"2"' '}' '},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"0"' '},' '"write_set":' '{' '"groups":' '{' '"Application":' '{' '"groups":' '{' '"Org3MSP":' '{' '"groups":' '{},' '"mod_policy":' '"Admins",' '"policies":' '{' '"Admins":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Endorsement":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Readers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '},' '"Writers":' '{' '"mod_policy":' '"",' '"policy":' null, '"version":' '"0"' '}' '},' '"values":' '{' '"AnchorPeers":' '{' '"mod_policy":' '"Admins",' '"value":' '{' '"anchor_peers":' '[' '{' '"host":' '"peer0.org3.example.com",' '"port":' 11051 '}' ']' '},' '"version":' '"0"' '},' '"MSP":' '{' '"mod_policy":' '"",' '"value":' null, '"version":' '"0"' '}' '},' '"version":' '"1"' '}' '},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"2"' '}' '},' '"mod_policy":' '"",' '"policies":' '{},' '"values":' '{},' '"version":' '"0"' '}' '}}}}'

+ configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope

2022-01-05 02:49:53.261 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized

2022-01-05 02:49:53.281 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update

Anchor peer set for org 'Org3MSP' on channel 'channel1'

Channel 'channel1' joined

Org3 peer successfully added to network

至此,org3已经加入到channel1通道中了,那么如果此时,升级chaincode的话,会是什么情况呢。

2.升级chaincode

首先设置一下CORE_PEER_MSPCONFIGPATH,然后打包新的chaincode

export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

peer lifecycle chaincode package basic_2.tar.gz --path ../asset-transfer-basic/chaincode-go-v2  --lang golang  --label basic_2.0

切换到org1,进行chaincode的install操作

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_TLS_ENABLED=true

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_LOCALMSPID="Org1MSP"

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_ADDRESS=localhost:7051

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode install basic_2.tar.gz

2022-01-05 11:12:10.202 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nJbasic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89\022\tbasic_2.0" > 

2022-01-05 11:12:10.205 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: basic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89

查询安装

  test-network git:(ad8fc2f)  peer lifecycle chaincode queryinstalled

Installed chaincodes on peer:

Package ID: basic_1.0:950c4b082bc8229268015e94e544db76afeb7086fbb52980387bd5e1bd0b41b3, Label: basic_1.0

Package ID: basic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89, Label: basic_2.0

设置新的CC_PACKAGE_ID

export NEW_CC_PACKAGE_ID=basic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89

执行Approve操作

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channel1 --name basic --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

2022-01-05 11:15:21.253 CST [chaincodeCmd] ClientWait -> INFO 001 txid [cb9773fd2397203ee292ebbeb84b8b58e155cfd51bd0dddae7332e2b95e9c66c] committed with status (VALID) at localhost:7051

至此切换到org2,并进行安装,approve操作

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_LOCALMSPID="Org2MSP"

➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_ADDRESS=localhost:9051

\


➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode install basic_2.tar.gz

2022-01-05 11:17:33.447 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nJbasic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89\022\tbasic_2.0" > 

2022-01-05 11:17:33.448 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: basic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89

执行approve操作

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channel1 --name basic --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 

2022-01-05 11:18:14.504 CST [chaincodeCmd] ClientWait -> INFO 001 txid [f46cd47f68e1f59d771c5379956ea2df847a996498b3dfa0768c521f37193314] committed with status (VALID) at localhost:9051

此时在Org2下执行checkcommitreadiness操作,看看已经approve的情况

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode checkcommitreadiness --channelID channel1 --name basic --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

{

    "pprovals": {

        "Org1MSP": true,

        "Org2MSP": true,

        "Org3MSP": false

    }

}

这个时候,我们commit一下,看看效果

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channel1 --name basic --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt  

2022-01-05 11:21:16.948 CST [chaincodeCmd] ClientWait -> INFO 001 txid [1c5a30882caebe321860c213841749a7c1a3939d6576b15bc321fa07f1c8065d] committed with status (VALID) at localhost:7051

2022-01-05 11:21:16.952 CST [chaincodeCmd] ClientWait -> INFO 002 txid [1c5a30882caebe321860c213841749a7c1a3939d6576b15bc321fa07f1c8065d] committed with status (VALID) at localhost:9051

可以发现的是,commit成功了,这也说明了,我们使用默认的背书策略就是,只要保证大多数的参与者同意了提案,该提案就可以提到到channel中。此时org3并没有做任何操作

此时,我们切换到org3,做一些有趣的事情


➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_TLS_ENABLED=true

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_LOCALMSPID="Org3MSP"

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp

➜  test-network git:(ad8fc2f) ✗ export CORE_PEER_ADDRESS=localhost:11051

➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ 

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode install basic.tar.gz

2022-01-05 11:28:07.553 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nJbasic_1.0:950c4b082bc8229268015e94e544db76afeb7086fbb52980387bd5e1bd0b41b3\022\tbasic_1.0" > 

2022-01-05 11:28:07.555 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: basic_1.0:950c4b082bc8229268015e94e544db76afeb7086fbb52980387bd5e1bd0b41b3

➜  test-network git:(ad8fc2f) ✗

发现了没有,我再org3中安装basic,第一个版本竟然成功了。

但是,当你想去approve的时候,并不能如你所愿

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID channel1 --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1

Error: proposal failed with status: 500 - failed to invoke backing implementation of 'ApproveChaincodeDefinitionForMyOrg': currently defined sequence 2 is larger than requested sequence 1

此时,你查询提交的时候,依然是之前的

  test-network git:(ad8fc2f)  peer lifecycle chaincode querycommitted --channelID channel1 --name basic --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

Committed chaincode definition for chaincode 'basic' on channel 'channel1':

Version: 2.0, Sequence: 2, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true, Org3MSP: false]

此时,你可以做的就是approve操作是之前org1和org2做的。

➜  test-network git:(ad8fc2f) ✗ peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channel1 --name basic --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

2022-01-05 11:37:42.879 CST [chaincodeCmd] ClientWait -> INFO 001 txid [d7df80ff1b2717de93f93de3b60e471bfbead30a9df92cf2de0daba9286823f3] committed with status (VALID) at localhost:11051

此时,你再查看

  test-network git:(ad8fc2f)  peer lifecycle chaincode querycommitted --channelID channel1 --name basic --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

Committed chaincode definition for chaincode 'basic' on channel 'channel1':

Version: 2.0, Sequence: 2, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true, Org3MSP: true]

发现了,我们执行approve升级后的chaincode是成功了

此时,我们执行invoke chaincode的时候,还是失败

➜  test-network git:(ad8fc2f) ✗ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C channel1 -n basic --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --peerAddresses localhost:11051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

Error: endorsement failure during invoke. response: status:500 message:"make sure the chaincode basic has been successfully defined on channel channel1 and try again: chaincode definition for 'basic' exists, but chaincode is not installed"

我们将basic_2安装到org3

  test-network git:(ad8fc2f)  peer lifecycle chaincode install basic_2.tar.gz 

2022-01-05 11:49:10.408 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 001 Installed remotely: response:<status:200 payload:"\nJbasic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89\022\tbasic_2.0" > 

2022-01-05 11:49:10.408 CST [cli.lifecycle.chaincode] submitInstallProposal -> INFO 002 Chaincode code package identifier: basic_2.0:ecca6a4ccb867170d0f8ea48a52c75d32b6eae0f2755ede94650e9e27bf83f89

此时再次invoke就可以了

➜  test-network git:(ad8fc2f) ✗ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C channel1 -n basic --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --peerAddresses localhost:11051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

2022-01-05 11:50:08.349 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

查询也可

➜  test-network git:(ad8fc2f) ✗ peer chaincode query -C channel1 -n basic -c '{"Args":["GetAllAssets"]}'

[{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset7","Owner":"Michel","Size":15}]

你有没有发现,我们在org3上,执行了approve之后,并没有显示的执行commit操作,依然奏效。

3.新加入的组织想要使用通道内已经安装的合约如何进行

首先第一步,需要在当前组织上安装chaincode

peer lifecycle chaincode install basic.tar.gz

其次,也仅需一步就可以使用chaincode,那就是需要该组织approve操作,如果不进行这步操作,是无法进行使用的

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channel1 --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

然后就可以使用chaincode的了

➜  test-network git:(ad8fc2f) peer chaincode query -C channel1 -n basic -c '{"Args":["GetAllAssets"]}'

[{"ID":"asset1","color":"blue","size":5,"owner":"Tomoko","appraisedValue":300},{"ID":"asset2","color":"red","size":5,"owner":"Brad","appraisedValue":400},{"ID":"asset3","color":"green","size":10,"owner":"Jin Soo","appraisedValue":500},{"ID":"asset4","color":"yellow","size":10,"owner":"Max","appraisedValue":600},{"ID":"asset5","color":"black","size":15,"owner":"Adriana","appraisedValue":700},{"ID":"asset6","color":"white","size":15,"owner":"Michel","appraisedValue":800}]

➜  test-network git:(ad8fc2f)

如果你不进行approve操作会怎样呢

test-network git:(ad8fc2f) peer chaincode query -C channel1 -n basic -c '{"Args":["GetAllAssets"]}'

Error: endorsement failure during query. response: status:500 message:"make sure the chaincode basic has been successfully defined on channel channel1 and try again: chaincode definition for 'basic' at sequence 1 on channel 'channel1' has not yet been approved by this org"