Пример #1
0
    def __init__(self,
                 *,
                 ssl_dir: Optional[str] = None,
                 ssl_certificate_location: Optional[str] = None,
                 ssl_key_location: Optional[str] = None,
                 ca_file: Optional[str] = None,
                 ca_url: str = CA_CERT_URL,
                 ws_uri: str = CLOUD_WEBSOCKETS_URL):
        if ssl_dir is None:
            ssl_dir = os.path.join(config.get_default_data_path(),
                                   utils_constants.SSL_FOLDER,
                                   DEFAULT_NODE_NAME, "registration_only")
        if ssl_certificate_location is None:
            ssl_certificate_location = os.path.join(
                ssl_dir, f"{DEFAULT_NODE_NAME}_cert.pem")
        if ssl_key_location is None:
            ssl_key_location = os.path.join(ssl_dir,
                                            f"{DEFAULT_NODE_NAME}_key.pem")
        if ca_file is None:
            with urllib.request.urlopen(ca_url) as cert_file:
                contents = cert_file.read().decode("utf-8")
                context = ssl.create_default_context(
                    Purpose.SERVER_AUTH,
                    cadata=contents,
                )
        else:
            context = ssl.create_default_context(
                Purpose.SERVER_AUTH,
                cafile=ca_file,
            )

        super().__init__(ws_uri)
        context.load_cert_chain(ssl_certificate_location, ssl_key_location)
        context.check_hostname = False
        self.ssl_context = context
Пример #2
0
def add_argument_parser_common(arg_parser: ArgumentParser):
    arg_parser.add_argument(
        "--data-dir",
        help="Path to store configuration, state and log files",
        default=config.get_default_data_path()
    )
    arg_parser.add_argument(
        "--ca-cert-url",
        help="The URL for retrieving BDN ca certificate data (default: {})".format(
            config.get_env_default(NodeStartArgs.CA_CERT_URL)
        ),
        default=config.get_env_default(NodeStartArgs.CA_CERT_URL),
        type=str
    )
    arg_parser.add_argument(
        "--private-ssl-base-url",
        help="The base URL for retrieving specific certificate data (default: {})".format(
            config.get_env_default(NodeStartArgs.PRIVATE_SSL_BASE_URL)
        ),
        default=config.get_env_default(NodeStartArgs.PRIVATE_SSL_BASE_URL),
        type=str
    )
Пример #3
0
def get_common_opts(
    port: int,
    external_ip: str = constants.LOCALHOST,
    node_id: Optional[str] = None,
    outbound_peers: Optional[List[OutboundPeerModel]] = None,
    blockchain_network_num: int = constants.ALL_NETWORK_NUM,
    block_confirmations_count: int = 2,
    final_tx_confirmations_count: int = 4,
    rpc_port: int = 28332,
    continent: str = "NA",
    country: str = "United States",
    region: str = "us-east-1",
    parallelism_degree: int = 1,
    split_relays: bool = False,
    sid_expire_time: int = 30,
    rpc: bool = False,
    transaction_validation: bool = True,
    rpc_use_ssl: bool = False,
    **kwargs,
) -> CommonOpts:
    if node_id is None:
        node_id = f"Node at {port}"
    if outbound_peers is None:
        outbound_peers = []

    arg_parser = argparse.ArgumentParser(add_help=False)
    cli.add_argument_parser_logging(arg_parser, default_log_level=LogLevel.DEBUG)
    opts = arg_parser.parse_args([])
    # opts = Namespace()
    opts.__dict__.update(
        {
            "external_ip": external_ip,
            "external_port": port,
            "node_id": node_id,
            "memory_stats_interval": 3600,
            "dump_detailed_report_at_memory_usage": 100,
            "dump_removed_short_ids": False,
            "dump_removed_short_ids_path": "",
            "transaction_pool_memory_limit": 200000000,
            "use_extensions": constants.USE_EXTENSION_MODULES,
            "import_extensions": constants.USE_EXTENSION_MODULES,
            "tx_mem_pool_bucket_size": constants.DEFAULT_TX_MEM_POOL_BUCKET_SIZE,
            "throughput_stats_interval": constants.THROUGHPUT_STATS_INTERVAL_S,
            "info_stats_interval": constants.INFO_STATS_INTERVAL_S,
            "sync_tx_service": True,
            "source_version": "v1.0.0",
            "non_ssl_port": 3000,
            "enable_node_cache": True,
            "rpc_port": rpc_port,
            "rpc_host": constants.LOCALHOST,
            "rpc_user": "",
            "rpc_password": "",
            "rpc_use_ssl": rpc_use_ssl,
            "rpc_ssl_base_url": "",
            "continent": continent,
            "country": country,
            "region": region,
            "hostname": "bxlocal",
            "sdn_url": f"{constants.LOCALHOST}:8080",
            "enable_buffered_send": False,
            "block_compression_debug": False,
            "enable_tcp_quickack": True,
            "thread_pool_parallelism_degree": config.get_thread_pool_parallelism_degree(
                str(parallelism_degree)
            ),
            "data_dir": config.get_default_data_path(),
            "ca_cert_url": "https://certificates.blxrbdn.com/ca",
            "private_ssl_base_url": "https://certificates.blxrbdn.com",
            "rpc": rpc,
            "transaction_validation": transaction_validation,
            "using_private_ip_connection": False,
        }
    )

    for key, val in kwargs.items():
        opts.__dict__[key] = val
    common_opts = CommonOpts.from_opts(opts)

    # some attributes are usually set by the node runner
    common_opts.__dict__.update({
        "node_type": AbstractNode.NODE_TYPE,
        "outbound_peers": outbound_peers,
        "sid_expire_time": sid_expire_time,
        "split_relays": split_relays,
        "blockchain_networks": {
            0: blockchain_network(
                "Bitcoin",
                "Mainnet",
                0,
                15,
                15,
                final_tx_confirmations_count,
                block_confirmations_count,
                ),
            1: blockchain_network(
                "Bitcoin",
                "Testnet",
                1,
                15,
                15,
                final_tx_confirmations_count,
                block_confirmations_count,
                ),
            4: blockchain_network(
                "BitcoinCash",
                "Testnet",
                4,
                15,
                15,
                24,
                block_confirmations_count,
            ),
            5: blockchain_network(
                "Ethereum",
                "Mainnet",
                5,
                5,
                5,
                24,
                block_confirmations_count,
            ),
            3: blockchain_network(
                "Ethereum",
                "Testnet",
                3,
                5,
                5,
                final_tx_confirmations_count,
                block_confirmations_count,
            ),
            33: blockchain_network(
                "Ontology",
                "Mainnet",
                33,
                5,
                5,
                final_tx_confirmations_count,
                block_confirmations_count,
            ),
            10: blockchain_network(
                "Ethereum",
                "BSC-Mainnet",
                10,
                5,
                5,
                24,
                block_confirmations_count,
            ),
        },
        "blockchain_network_num": blockchain_network_num,
    })
    return common_opts
Пример #4
0
 def setUp(self):
     self.blockchain_network = helpers.blockchain_network(
         protocol="Bitcoin",
         network_name="Mainnet",
         network_num=1,
         block_interval=600,
         final_tx_confirmations_count=6)
     self.set_ssl_folder()
     opts = {
         "log_path":
         "",
         "to_stdout":
         True,
         "external_port":
         0,
         "external_ip":
         "1.1.1.1",
         "node_id":
         None,
         "blockchain_network":
         self.blockchain_network.network,
         "network_num":
         self.blockchain_network.network_num,
         "blockchain_protocol":
         self.blockchain_network.protocol,
         "blockchain_networks": {
             self.blockchain_network.network_num: self.blockchain_network
         },
         "log_level":
         LogLevel.INFO,
         "log_format":
         LogFormat.PLAIN,
         "log_flush_immediately":
         True,
         "log_fluentd_enable":
         False,
         "log_fluentd_host":
         None,
         "use_extensions":
         True,
         "log_fluentd_queue_size":
         1000,
         "thread_pool_parallelism_degree":
         config.get_thread_pool_parallelism_degree(
             str(constants.DEFAULT_THREAD_POOL_PARALLELISM_DEGREE), ),
         "log_level_overrides": {},
         "source_version":
         "v1.0.0",
         "ca_cert_url":
         self.ssl_folder_url,
         "private_ssl_base_url":
         self.ssl_folder_url,
         "data_dir":
         config.get_default_data_path(),
         "log_level_fluentd":
         LogLevel.DEBUG,
         "log_level_stdout":
         LogLevel.TRACE,
         "sdn_url":
         "https://localhost:8080",
     }
     for item in CommonOpts.__dataclass_fields__:
         if item not in opts:
             opts[item] = None
     self.opts = CommonOpts.from_opts(Namespace(**opts))
     log_config.create_logger(None, LogLevel.WARNING)
     self.event_loop_mock = EventLoopMock()