コード例 #1
0
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()
コード例 #2
0
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
コード例 #3
0
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))
コード例 #4
0
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")
コード例 #5
0
def stop_server():
    shared.stop()
    server_proc.join()
    chain_proc.join()
    print_log("Electrum Server stopped")
コード例 #6
0
 def handler(signum=None, frame=None):
     print_log('Signal handler called with signal', signum)
     shared.stop()
コード例 #7
0
def stop_server():
    shared.stop()
    server_proc.join()
    chain_proc.join()
    print_log("Electrum Server stopped")
コード例 #8
0
 def handler(signum = None, frame = None):
     print_log('Signal handler called with signal', signum)
     shared.stop()
コード例 #9
0
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: