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 __init__(self, processed_transaction): bootstrap_util.EnvelopeExractor.__init__( self, processed_transaction.transactionEnvelope) self.processed_transaction = processed_transaction self.tx = transaction_pb2.Transaction() self.tx.ParseFromString(self.payload.data) self.chaincode_action_payload = transaction_pb2.ChaincodeActionPayload( ) self.chaincode_action_payload.ParseFromString( self.tx.actions[0].payload) # self.signature_header = common_dot_common_pb2.SignatureHeader() # self.signature_header.ParseFromString(self.tx.actions[0].header) self.chaincode_proposal_payload = proposal_pb2.ChaincodeProposalPayload( ) self.chaincode_proposal_payload.ParseFromString( self.chaincode_action_payload.chaincode_proposal_payload) self.chaincode_invocation_spec = chaincode_pb2.ChaincodeInvocationSpec( ) self.chaincode_invocation_spec.ParseFromString( self.chaincode_proposal_payload.input)
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