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 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
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
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
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)
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
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(), )
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)
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