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
示例#2
0
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
示例#3
0
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