コード例 #1
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
コード例 #2
0
    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)
コード例 #3
0
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