def __init__(self, log, clientparams): self.clientparams = clientparams self.log = log self.dbenv_handles = {} self.account_infos = {} # account => (handle, dirname, filename) self.dbenv = self.get_dbenv_handle(clientparams.data_directory) # Logfile handler = logging.handlers.RotatingFileHandler( os.path.join(clientparams.data_directory, clientparams.logfilename), maxBytes=1024 * 1024 * 8, backupCount=5) self.log.addHandler(handler) fmt = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(fmt) # Blockchain self.database = BSDDbBlockChainDatabase(self.log, self.dbenv, clientparams.runmode) self.database.open_or_create(GENESIS[clientparams.runmode]) self.blockchain = BlockchainWithAltbranches(self.log, self.database) # Transaction Pool self.txpool = TransactionPool() # Processpool self.process_pool = multiprocessing.Pool(multiprocessing.cpu_count()) # Node nodeparams = NodeParams(runmode=clientparams.runmode, port=clientparams.port, version=70000, enabledservices=SERVICES_NODE_NETWORK, nonce=clientparams.nonce, sub_version_num=clientparams.sub_version_num) self.node = BitcoinNode(self.blockchain, self.txpool, self.process_pool, nodeparams, self.log) # Address Pool self.addr_pool = AddrPool() # Bootstrapper, AddrPoolFiller if clientparams.get("findpeers", True): self.bootstrapper = Bootstrapper(clientparams.runmode, self.log) self.addrpool_filler = AddrPoolFiller(self.node, self.bootstrapper, self.addr_pool) for sockaddr in clientparams.seeds: self.addr_pool.addpeer(sockaddr) # Reconnector self.peer_reconnector = PeerReconnector( self.log, self.node, self.addr_pool, min_connections=clientparams.targetpeers) # Wallets self.account_set = AccountSet()