コード例 #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 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
コード例 #3
0
def createGenesisBlock(context, chainId, networkConfigPolicy, consensusType):
    'Generates the genesis block for starting the oderers and for use in the chain config transaction by peers'
    #assert not "bootstrapGenesisBlock" in context,"Genesis block already created:\n{0}".format(context.bootstrapGenesisBlock)
    directory = getDirectory(context)
    assert len(
        directory.ordererAdminTuples) > 0, "No orderer admin tuples defined!!!"

    bootstrapHelper = BootstrapHelper(chainId=chainId,
                                      consensusType=consensusType)
    configItems = []
    configItems.append(bootstrapHelper.encodeBatchSize())
    configItems.append(bootstrapHelper.encodeConsensusType())
    configItems.append(bootstrapHelper.encodeChainCreators())
    configItems.append(bootstrapHelper.encodeAcceptAllPolicy())
    configItems.append(bootstrapHelper.lockDefaultModificationPolicy())
    configEnvelope = common_dot_configuration_pb2.ConfigurationEnvelope(
        Items=configItems)

    payloadChainHeader = bootstrapHelper.makeChainHeader(
        type=common_dot_common_pb2.HeaderType.Value(
            "CONFIGURATION_TRANSACTION"))

    #Now the SignatureHeader
    serializedCreatorCertChain = None
    nonce = None
    payloadSignatureHeader = common_dot_common_pb2.SignatureHeader(
        creator=serializedCreatorCertChain,
        nonce=bootstrapHelper.getNonce(),
    )

    payloadHeader = common_dot_common_pb2.Header(
        chainHeader=payloadChainHeader,
        signatureHeader=payloadSignatureHeader,
    )
    payload = common_dot_common_pb2.Payload(
        header=payloadHeader, data=configEnvelope.SerializeToString())
    envelope = common_dot_common_pb2.Envelope(
        payload=payload.SerializeToString(), signature=None)

    blockData = common_dot_common_pb2.BlockData(
        Data=[envelope.SerializeToString()])

    block = common_dot_common_pb2.Block(
        Header=common_dot_common_pb2.BlockHeader(
            Number=0,
            PreviousHash=None,
            DataHash=bootstrapHelper.computeBlockDataHash(blockData),
        ),
        Data=blockData,
        Metadata=None,
    )

    # Add this back once crypto certs are required
    for nodeAdminTuple in directory.ordererAdminTuples:
        userCert = directory.ordererAdminTuples[nodeAdminTuple]
        certAsPEM = crypto.dump_certificate(crypto.FILETYPE_PEM, userCert)
        # print("UserCert for orderer genesis:\n{0}\n".format(certAsPEM))
        # print("")

    return block
コード例 #4
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
コード例 #5
0
def _testAccessPBMethods():
    channel_header = common_pb2.ChannelHeader(channel_id=TEST_CHAIN_ID,
                                              type=common_pb2.ENDORSER_TRANSACTION)
    header = common_pb2.Header(channel_header=channel_header.SerializeToString(),
                               signature_header=common_pb2.SignatureHeader().SerializeToString())
    payload = common_pb2.Payload(header=header,
                                 data="Functional test: {0}".format(datetime.datetime.utcnow()))
    envelope = common_pb2.Envelope(payload=payload.SerializeToString())
    return envelope
コード例 #6
0
def generateMessageEnvelope():
    channel_header = common_pb2.ChannelHeader(channel_id=endorser_util.TEST_CHANNEL_ID,
                                              type=common_pb2.ENDORSER_TRANSACTION)
    header = common_pb2.Header(channel_header=channel_header.SerializeToString(),
                               signature_header=common_pb2.SignatureHeader().SerializeToString())
    payload = common_pb2.Payload(header=header,
                                 data=str.encode("Functional test: {0}".format(datetime.datetime.utcnow())) )
    envelope = common_pb2.Envelope(payload=payload.SerializeToString())
    return envelope
コード例 #7
0
ファイル: orderer_util.py プロジェクト: higer/fabric-1
def generateBroadcastMessages(numToGenerate = 1, timeToHoldOpen = 1):
    messages = []
    for i in range(0, numToGenerate):
        envelope = common_pb2.Envelope()
        payload = common_pb2.Payload(header = common_pb2.Header(chainHeader = common_pb2.ChainHeader()))
        # TODO, appropriately set the header type
        payload.data = str("BDD test: {0}".format(datetime.datetime.utcnow()))
        envelope.payload = payload.SerializeToString()
        messages.append(envelope)
    for msg in messages:
        yield msg
    time.sleep(timeToHoldOpen)
コード例 #8
0
def _defaultDataFunction(index):
    payload = common_pb2.Payload(
        header=common_pb2.Header(
            chainHeader=common_pb2.ChainHeader(
                chainID=TEST_CHAIN_ID,
                type=common_pb2.ENDORSER_TRANSACTION,
            ),
            signatureHeader=common_pb2.SignatureHeader(),
        ),
        data=str("BDD test: {0}".format(datetime.datetime.utcnow())),
    )
    envelope = common_pb2.Envelope(payload=payload.SerializeToString())
    return envelope
コード例 #9
0
def createSeekInfo(chainID = TEST_CHAIN_ID, start = 'Oldest', end = 'Newest',  behavior = 'FAIL_IF_NOT_READY'):
    return common_pb2.Envelope(
        payload = common_pb2.Payload(
            header = common_pb2.Header(
                channel_header = common_pb2.ChannelHeader( channel_id = chainID ).SerializeToString(),
                signature_header = common_pb2.SignatureHeader().SerializeToString(),
            ),
            data = ab_pb2.SeekInfo(
                start = seekPosition(start),
                stop = seekPosition(end),
                behavior = ab_pb2.SeekInfo.SeekBehavior.Value(behavior),
            ).SerializeToString(),
        ).SerializeToString(),
    )
コード例 #10
0
def generateBroadcastMessages(numToGenerate=1, timeToHoldOpen=1):
    messages = []
    for i in range(0, numToGenerate):
        envelope = common_pb2.Envelope()
        payload = common_pb2.Payload(header=common_pb2.Header(
            chainHeader=common_pb2.ChainHeader()))
        payload.header.chainHeader.chainID = TEST_CHAIN_ID
        payload.header.chainHeader.type = common_pb2.ENDORSER_TRANSACTION
        payload.data = str("BDD test: {0}".format(datetime.datetime.utcnow()))
        envelope.payload = payload.SerializeToString()
        messages.append(envelope)
    for msg in messages:
        yield msg
    time.sleep(timeToHoldOpen)
コード例 #11
0
def createConfigTxEnvelope(chainId, signedConfigEnvelope):
    bootstrapHelper = BootstrapHelper(chainId=chainId)
    payloadChainHeader = bootstrapHelper.makeChainHeader(
        type=common_dot_common_pb2.HeaderType.Value(
            "CONFIGURATION_TRANSACTION"))

    #Now the SignatureHeader
    serializedCreatorCertChain = None
    nonce = None
    payloadSignatureHeader = common_dot_common_pb2.SignatureHeader(
        creator=serializedCreatorCertChain,
        nonce=bootstrapHelper.getNonce(),
    )

    payloadHeader = common_dot_common_pb2.Header(
        chainHeader=payloadChainHeader,
        signatureHeader=payloadSignatureHeader,
    )
    payload = common_dot_common_pb2.Payload(
        header=payloadHeader, data=signedConfigEnvelope.SerializeToString())
    envelope = common_dot_common_pb2.Envelope(
        payload=payload.SerializeToString(), signature=None)
    return envelope