def createInvokeProposalForBDD(context, ccSpec, chainID, signersCert, Mspid, type): import binascii "Returns a deployment proposal of chaincode type" lc_chaincode_invocation_spec = chaincode_pb2.ChaincodeInvocationSpec(chaincode_spec = ccSpec) # Create ccHdrExt = proposal_pb2.ChaincodeHeaderExtension(chaincode_id=ccSpec.chaincode_id) ccProposalPayload = proposal_pb2.ChaincodeProposalPayload(input=lc_chaincode_invocation_spec.SerializeToString()) serializedIdentity = identities_pb2.SerializedIdentity(mspid=Mspid, id_bytes=crypto.dump_certificate(crypto.FILETYPE_PEM, signersCert)) nonce = bootstrap_util.BootstrapHelper.getNonce() sigHdr = bootstrap_util.make_signature_header(serializedIdentity.SerializeToString(), nonce) # Calculate the transaction ID tx_id = binascii.hexlify(bootstrap_util.computeCryptoHash(nonce + serializedIdentity.SerializeToString())) chainHdr = bootstrap_util.make_chain_header(type=common_dot_common_pb2.HeaderType.Value(type), channel_id=chainID, txID=tx_id, extension=ccHdrExt.SerializeToString()) header = common_dot_common_pb2.Header(channel_header=chainHdr.SerializeToString(), signature_header=sigHdr.SerializeToString()) # make proposal proposal = proposal_pb2.Proposal(header=header.SerializeToString(), payload=ccProposalPayload.SerializeToString()) return proposal
def createSignedTx(user, signed_proposal, proposal_responses): assert len(proposal_responses) > 0, "Expected at least 1 ProposalResponse" #Unpack signed proposal proposal = proposal_pb2.Proposal() proposal.ParseFromString(signed_proposal.proposal_bytes) header = common_dot_common_pb2.Header() header.ParseFromString(proposal.header) ccProposalPayload = proposal_pb2.ChaincodeProposalPayload() ccProposalPayload.ParseFromString(proposal.payload) # Be sure to clear the TransientMap ccProposalPayload.TransientMap.clear() endorsements = [p.endorsement for p in proposal_responses] ccEndorsedAction = transaction_pb2.ChaincodeEndorsedAction( proposal_response_payload=proposal_responses[0].payload, endorsements=endorsements) ccActionPayload = transaction_pb2.ChaincodeActionPayload( chaincode_proposal_payload=ccProposalPayload.SerializeToString(), action=ccEndorsedAction) transaction = transaction_pb2.Transaction() action = transaction.actions.add() action.header = header.signature_header action.payload = ccActionPayload.SerializeToString() payload = common_dot_common_pb2.Payload( header=header, data=transaction.SerializeToString()) payloadBytes = payload.SerializeToString() signature = user.sign(payloadBytes) envelope = common_dot_common_pb2.Envelope(payload=payloadBytes, signature=signature) return envelope
def createInvokeProposalForBDD(ccSpec, chainID, signersCert, Mspid, type): "Returns a deployment proposal of chaincode type" lc_chaincode_invocation_spec = chaincode_pb2.ChaincodeInvocationSpec(chaincodeSpec = ccSpec) # Create ccHdrExt = chaincode_proposal_pb2.ChaincodeHeaderExtension(chaincodeID=ccSpec.chaincodeID) ccProposalPayload = chaincode_proposal_pb2.ChaincodeProposalPayload(Input=lc_chaincode_invocation_spec.SerializeToString()) bootstrapHelper = bootstrap_util.BootstrapHelper(chainId=chainID) chainHdr = bootstrapHelper.makeChainHeader(type=common_dot_common_pb2.HeaderType.Value(type), txID=bootstrap_util.GetUUID(), extension=ccHdrExt.SerializeToString()) serializedIdentity = identities_pb2.SerializedIdentity(Mspid=Mspid, IdBytes=crypto.dump_certificate(crypto.FILETYPE_PEM, signersCert)) sigHdr = bootstrapHelper.makeSignatureHeader(serializedIdentity.SerializeToString(), bootstrap_util.BootstrapHelper.getNonce()) header = common_dot_common_pb2.Header(chainHeader=chainHdr, signatureHeader=sigHdr) # make proposal proposal = proposal_pb2.Proposal(header=header.SerializeToString(), payload=ccProposalPayload.SerializeToString()) return proposal