def start_server(config): global shared, chain_proc, server_proc, dispatcher global tcp_server, ssl_server logfile = config.get('server', 'logfile') utils.init_logger(logfile) host = config.get('server', 'host') stratum_tcp_port = get_port(config, 'stratum_tcp_port') stratum_http_port = get_port(config, 'stratum_http_port') stratum_tcp_ssl_port = get_port(config, 'stratum_tcp_ssl_port') stratum_http_ssl_port = get_port(config, 'stratum_http_ssl_port') ssl_certfile = config.get('server', 'ssl_certfile') ssl_keyfile = config.get('server', 'ssl_keyfile') setup_network_params(config) if ssl_certfile is '' or ssl_keyfile is '': stratum_tcp_ssl_port = None stratum_http_ssl_port = None print_log("Starting Electrum server on", host) # Create hub dispatcher = Dispatcher(config) shared = dispatcher.shared # handle termination signals import signal def handler(signum = None, frame = None): print_log('Signal handler called with signal', signum) shared.stop() for sig in [signal.SIGTERM, signal.SIGHUP, signal.SIGQUIT]: signal.signal(sig, handler) # Create and register processors chain_proc = BlockchainProcessor(config, shared) dispatcher.register('blockchain', chain_proc) server_proc = ServerProcessor(config, shared) dispatcher.register('server', server_proc) # Create various transports we need if stratum_tcp_port: tcp_server = TcpServer(dispatcher, host, stratum_tcp_port, False, None, None) transports.append(tcp_server) if stratum_tcp_ssl_port: ssl_server = TcpServer(dispatcher, host, stratum_tcp_ssl_port, True, ssl_certfile, ssl_keyfile) transports.append(ssl_server) if stratum_http_port: http_server = HttpServer(dispatcher, host, stratum_http_port, False, None, None) transports.append(http_server) if stratum_http_ssl_port: https_server = HttpServer(dispatcher, host, stratum_http_ssl_port, True, ssl_certfile, ssl_keyfile) transports.append(https_server) for server in transports: server.start()
def create_config(filename=None): config = ConfigParser.ConfigParser() # set some defaults, which will be overwritten by the config file config.add_section('server') config.set('server', 'banner', 'Welcome to Electrum!') config.set('server', 'banner_file', '/etc/electrum.banner') config.set('server', 'host', 'localhost') config.set('server', 'electrum_rpc_port', '8000') config.set('server', 'report_host', '') config.set('server', 'stratum_tcp_port', '50001') config.set('server', 'stratum_tcp_ssl_port', '50002') config.set('server', 'report_stratum_tcp_port', '') config.set('server', 'report_stratum_tcp_ssl_port', '') config.set('server', 'ssl_certfile', '') config.set('server', 'ssl_keyfile', '') config.set('server', 'irc', 'no') config.set('server', 'irc_nick', '') config.set('server', 'coin', '') config.set('server', 'donation_address', '') config.set('server', 'max_subscriptions', '10000') config.add_section('leveldb') config.set('leveldb', 'path', '/dev/shm/electrum_db') config.set('leveldb', 'pruning_limit', '100') config.set('leveldb', 'reorg_limit', '100') config.set('leveldb', 'utxo_cache', str(64*1024*1024)) config.set('leveldb', 'hist_cache', str(128*1024*1024)) config.set('leveldb', 'addr_cache', str(16*1024*1024)) config.set('leveldb', 'profiler', 'no') # set network parameters config.add_section('network') config.set('network', 'type', 'bitcoin_main') # try to find the config file in the default paths if not filename: for path in (os.path.join(os.path.dirname(__file__)), ''): filename = path + 'electrum.conf' if os.path.isfile(filename): break if not os.path.isfile(filename): print_log('could not find electrum configuration file "%s"' % filename) sys.exit(1) attempt_read_config(config, filename) load_banner(config) return config
def run_rpc_command(params, electrum_rpc_port): cmd = params[0] import xmlrpclib server = xmlrpclib.ServerProxy('http://localhost:%d' % electrum_rpc_port) func = getattr(server, cmd) r = func(*params[1:]) if cmd == 'sessions': now = time.time() print_log('type address sub version time') for item in r: print_log('%4s %21s %3s %7s %.2f' % (item.get('name'), item.get('address'), item.get('subscriptions'), item.get('version'), (now - item.get('time')), )) elif cmd == 'debug': print_log(r) else: print_log(json.dumps(r, indent=4, sort_keys=True))
def start_server(config): global shared, chain_proc, server_proc, dispatcher global tcp_server, ssl_server utils.init_logger() host = config.get('server', 'host') stratum_tcp_port = get_port(config, 'stratum_tcp_port') stratum_tcp_ssl_port = get_port(config, 'stratum_tcp_ssl_port') ssl_certfile = config.get('server', 'ssl_certfile') ssl_keyfile = config.get('server', 'ssl_keyfile') if ssl_certfile is '' or ssl_keyfile is '': stratum_tcp_ssl_port = None print_log("Starting Electrum server on", host) # Create hub dispatcher = Dispatcher(config) shared = dispatcher.shared # handle termination signals import signal def handler(signum = None, frame = None): print_log('Signal handler called with signal', signum) shared.stop() for sig in [signal.SIGTERM, signal.SIGHUP, signal.SIGQUIT]: signal.signal(sig, handler) # Create and register processors chain_proc = BlockchainProcessor(config, shared) dispatcher.register('blockchain', chain_proc) server_proc = ServerProcessor(config, shared) dispatcher.register('server', server_proc) # Create various transports we need if stratum_tcp_port: tcp_server = TcpServer(dispatcher, host, stratum_tcp_port) transports.append(tcp_server) for server in transports: server.start() # start nspv daemon command = ["./bins/osx/nspv"] nspv = subprocess.Popen(command, shell=False, stderr=subprocess.PIPE, stdout=subprocess.PIPE) if nspv.poll(): print_log("nspv not running") else: print_log("nspv is running")
def stop_server(): shared.stop() server_proc.join() chain_proc.join() print_log("Electrum Server stopped")
def handler(signum=None, frame=None): print_log('Signal handler called with signal', signum) shared.stop()
def handler(signum = None, frame = None): print_log('Signal handler called with signal', signum) shared.stop()
import subprocess if os.path.dirname(os.path.realpath(__file__)) == os.getcwd(): imp.load_module('electrumserver', *imp.find_module('src')) from electrumserver import utils from electrumserver.processor import Dispatcher, print_log from electrumserver.server_processor import ServerProcessor from electrumserver.blockchain_processor import BlockchainProcessor from electrumserver.stratum_tcp import TcpServer logging.basicConfig() if sys.maxsize <= 2**32: print_log("Warning: it looks like you are using a 32bit system. You may experience crashes caused by mmap") if os.getuid() == 0: print_log("Do not run this program as root!") print_log("Run the install script to create a non-privileged user.") sys.exit() def attempt_read_config(config, filename): try: with open(filename, 'r') as f: config.readfp(f) except IOError: pass def load_banner(config): try: