Пример #1
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
Пример #2
0
def signInitialChainConfig(signedConfigItems, chainId,
                           chainCreationPolicyName):
    bootstrapHelper = BootstrapHelper(chainId=chainId)
    # Returns a list prepended with a signedConfiguration
    signedConfigItems = bootstrapHelper.signInitialChainConfig(
        signedConfigItems, chainCreationPolicyName)
    return common_dot_configuration_pb2.ConfigurationEnvelope(
        Items=signedConfigItems)
Пример #3
0
def createGenesisBlock(context, chainId, consensusType, signedConfigItems=[]):
    '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!!!"

    configItems = createSignedConfigItems(context,
                                          chainId,
                                          consensusType,
                                          signedConfigItems=signedConfigItems)

    bootstrapHelper = BootstrapHelper(chainId=chainId,
                                      consensusType=consensusType)
    configEnvelope = common_dot_configuration_pb2.ConfigurationEnvelope(
        Items=configItems)

    envelope = createConfigTxEnvelope(chainId, configEnvelope)

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

    # Spoke with kostas, for orderer in general
    signaturesMetadata = ""
    lastConfigurationBlockMetadata = common_dot_common_pb2.Metadata(
        value=common_dot_common_pb2.LastConfiguration(
            index=0).SerializeToString()).SerializeToString()
    ordererConfigMetadata = ""
    transactionFilterMetadata = ""
    block = common_dot_common_pb2.Block(
        Header=common_dot_common_pb2.BlockHeader(
            Number=0,
            PreviousHash=None,
            DataHash=bootstrapHelper.computeBlockDataHash(blockData),
        ),
        Data=blockData,
        Metadata=common_dot_common_pb2.BlockMetadata(Metadata=[
            signaturesMetadata, lastConfigurationBlockMetadata,
            transactionFilterMetadata, ordererConfigMetadata
        ]),
    )

    # 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, envelope)