Skip to content

Commit ae81505

Browse files
authored
Merge pull request #671 from YoungHypo/issue-update-chaincode-query
Upgrade Backend of Chaincode Approve
2 parents caf9c31 + a26b82e commit ae81505

File tree

3 files changed

+56
-32
lines changed

3 files changed

+56
-32
lines changed

src/api-engine/api/lib/peer/chaincode.py

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,15 @@ def lifecycle_query_installed(self, timeout):
6363
"""
6464

6565
try:
66-
res = subprocess.Popen("{} lifecycle chaincode queryinstalled --output json --connTimeout {}"
67-
.format(self.peer, timeout), shell=True,
68-
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
66+
command = [
67+
self.peer,
68+
"lifecycle", "chaincode", "queryinstalled",
69+
"--output", "json",
70+
"--connTimeout", timeout
71+
]
72+
LOG.info(" ".join(command))
73+
res = subprocess.Popen(command, shell=False,
74+
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
6975

7076
stdout, stderr = res.communicate()
7177
return_code = res.returncode
@@ -106,8 +112,8 @@ def lifecycle_get_installed_package(self, timeout):
106112
raise Exception(err_msg)
107113
return res_return
108114

109-
def lifecycle_approve_for_my_org(self, orderer_url, orderer_tls_rootcert, channel_name, cc_name,
110-
chaincode_version, policy, sequence=1):
115+
def lifecycle_approve_for_my_org(self, orderer_url, channel_name, cc_name,
116+
chaincode_version, sequence, policy, init_flag):
111117
"""
112118
The administrator can use the peer lifecycle chaincode approveformyorg subcommand to approve the chain code on
113119
behalf of the organization.
@@ -116,8 +122,9 @@ def lifecycle_approve_for_my_org(self, orderer_url, orderer_tls_rootcert, channe
116122
:param channel_name: channel name
117123
:param cc_name: chaincode name
118124
:param chaincode_version: chaincode version
119-
:param policy: chaincode policy
120125
:param sequence: The channel chain code defines the serial number. The default value is 1
126+
:param policy: chaincode policy
127+
:param init_flag: if the chaincode is first init.
121128
:return:
122129
"""
123130
try:
@@ -131,18 +138,43 @@ def lifecycle_approve_for_my_org(self, orderer_url, orderer_tls_rootcert, channe
131138
if package_id == "":
132139
return 1, "not exist the chaincode, please check chaincode_name and chaincode_version"
133140

141+
command = []
134142
if os.getenv("CORE_PEER_TLS_ENABLED") == "false" or os.getenv("CORE_PEER_TLS_ENABLED") is None:
135-
res = subprocess.Popen("{} lifecycle chaincode approveformyorg -o {} - --channelID {} --name {} "
136-
"--version {} --init-required --package-id {} --sequence {} --signature-policy {}"
137-
.format(self.peer, orderer_url, channel_name, cc_name, chaincode_version, package_id,
138-
sequence, policy), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
143+
command = [
144+
self.peer,
145+
"lifecycle", "chaincode", "approveformyorg",
146+
"-o", orderer_url,
147+
"--channelID", channel_name,
148+
"--name", cc_name,
149+
"--version", chaincode_version,
150+
"--package-id", package_id,
151+
"--sequence", str(sequence)
152+
]
139153
else:
140-
res = subprocess.Popen("{} lifecycle chaincode approveformyorg -o {} --tls --cafile {} --channelID {} "
141-
"--name {} --version {} --init-required --package-id {} --sequence {} "
142-
"--signature-policy {}"
143-
.format(self.peer, orderer_url, orderer_tls_rootcert, channel_name,
144-
cc_name, chaincode_version, package_id, sequence, policy), shell=True,
145-
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
154+
ORDERER_CA = os.getenv("ORDERER_CA")
155+
command = [
156+
self.peer,
157+
"lifecycle", "chaincode", "approveformyorg",
158+
"-o", orderer_url,
159+
"--ordererTLSHostnameOverride", orderer_url.split(":")[0],
160+
"--channelID", channel_name,
161+
"--name", cc_name,
162+
"--version", chaincode_version,
163+
"--package-id", package_id,
164+
"--sequence", str(sequence),
165+
"--tls",
166+
"--cafile", ORDERER_CA
167+
]
168+
169+
if init_flag:
170+
command.append("--init-required")
171+
if policy:
172+
command.append("--signature-policy")
173+
command.append(policy)
174+
175+
LOG.info(" ".join(command))
176+
res = subprocess.Popen(command, shell=False,
177+
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
146178
stdout, stderr = res.communicate()
147179
return_code = res.returncode
148180

src/api-engine/api/routes/chaincode/serializers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ class ChainCodeApproveForMyOrgBody(serializers.Serializer):
6262
channel_name = serializers.CharField(max_length=128, required=True)
6363
chaincode_name = serializers.CharField(max_length=128, required=True)
6464
chaincode_version = serializers.CharField(max_length=128, required=True)
65-
policy = serializers.CharField(max_length=128, required=True)
66-
orderer_url = serializers.CharField(max_length=128, required=True)
6765
sequence = serializers.IntegerField(min_value=1, required=True)
66+
policy = serializers.CharField(max_length=128, required=False, allow_blank=True)
67+
init_flag = serializers.BooleanField(required=False)
6868

6969

7070
class ChainCodeCommitBody(ChainCodeApproveForMyOrgBody):

src/api-engine/api/routes/chaincode/views.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -328,35 +328,27 @@ def approve_for_my_org(self, request):
328328
try:
329329
channel_name = serializer.validated_data.get("channel_name")
330330
chaincode_name = serializer.validated_data.get("chaincode_name")
331-
chaincode_version = serializer.validated_data.get(
332-
"chaincode_version")
333-
policy = serializer.validated_data.get("policy")
334-
# Perhaps the orderer's port is best stored in the database
335-
orderer_url = serializer.validated_data.get("orderer_url")
331+
chaincode_version = serializer.validated_data.get("chaincode_version")
332+
policy = serializer.validated_data.get("policy", "")
336333
sequence = serializer.validated_data.get("sequence")
334+
init_flag = serializer.validated_data.get("init_flag", False)
337335

338336
org = request.user.organization
339337
qs = Node.objects.filter(type="orderer", organization=org)
340338
if not qs.exists():
341339
raise ResourceNotFound
342340
orderer_node = qs.first()
341+
orderer_url = orderer_node.name + "." + org.name.split(".", 1)[1] + ":" + str(7050)
343342

344-
orderer_tls_dir = "{}/{}/crypto-config/ordererOrganizations/{}/orderers/{}/msp/tlscacerts" \
345-
.format(CELLO_HOME, org.name, org.name.split(".", 1)[1], orderer_node.name + "." +
346-
org.name.split(".", 1)[1])
347-
orderer_tls_root_cert = ""
348-
for _, _, files in os.walk(orderer_tls_dir):
349-
orderer_tls_root_cert = orderer_tls_dir + "/" + files[0]
350-
break
351343
qs = Node.objects.filter(type="peer", organization=org)
352344
if not qs.exists():
353345
raise ResourceNotFound
354346
peer_node = qs.first()
355347
envs = init_env_vars(peer_node, org)
356348

357349
peer_channel_cli = PeerChainCode(**envs)
358-
code, content = peer_channel_cli.lifecycle_approve_for_my_org(orderer_url, orderer_tls_root_cert, channel_name,
359-
chaincode_name, chaincode_version, policy, sequence)
350+
code, content = peer_channel_cli.lifecycle_approve_for_my_org(orderer_url, channel_name,
351+
chaincode_name, chaincode_version, sequence, policy, init_flag)
360352
if code != 0:
361353
return Response(err(" lifecycle_approve_for_my_org failed. err: " + content), status=status.HTTP_400_BAD_REQUEST)
362354
except Exception as e:

0 commit comments

Comments
 (0)