def main(): args = parse_arguments() qrl_dir_post_fix = '' copy_files = [] if args.network_type == 'testnet': qrl_dir_post_fix = '-testnet' package_directory = os.path.dirname(os.path.abspath(__file__)) copy_files.append( os.path.join(package_directory, 'network/testnet/genesis.yml')) copy_files.append( os.path.join(package_directory, 'network/testnet/config.yml')) config.user.qrl_dir = os.path.expanduser( os.path.normpath(args.qrl_dir) + qrl_dir_post_fix) config.create_path(config.user.qrl_dir, copy_files) config.user.load_yaml(config.user.config_path) global payment_slaves, payment_xmss global mining_stub, public_stub mining_stub = qrlmining_pb2_grpc.MiningAPIStub( grpc.insecure_channel('{0}:{1}'.format(config.user.mining_api_host, config.user.mining_api_port))) public_stub = qrl_pb2_grpc.PublicAPIStub( grpc.insecure_channel('{0}:{1}'.format(config.user.public_api_host, config.user.public_api_port), options=[('grpc.max_receive_message_length', 10485760)])) payment_xmss = None payment_slaves = read_slaves(config.user.mining_pool_payment_wallet_path) app.run(host=config.user.grpc_proxy_host, port=config.user.grpc_proxy_port, threaded=False)
def main(): args = parse_arguments() logger.debug( "=====================================================================================" ) logger.info("QRL Path: %s", args.qrl_dir) config.user.qrl_dir = expanduser(args.qrl_dir) config.create_path(config.user.qrl_dir) logger.debug( "=====================================================================================" ) config.create_path(config.user.wallet_dir) mining_address = None if config.user.mining_enabled: mining_address = get_mining_address(args.mining_address) if not mining_address: logger.warning('Invalid Mining Credit Wallet Address') logger.warning('%s', args.mining_address) return False ntp.setDrift() if args.debug: logger.warning("FAULT HANDLER ENABLED") faulthandler.enable() logger.info('Initializing chain..') persistent_state = State() if args.measurement > -1: persistent_state.get_measurement = MagicMock( return_value=args.measurement) chain_manager = ChainManager(state=persistent_state) chain_manager.load(Block.from_json(GenesisBlock().to_json())) qrlnode = QRLNode(db_state=persistent_state, mining_address=mining_address) qrlnode.set_chain_manager(chain_manager) set_logger(args, qrlnode.sync_state) ####### # NOTE: Keep assigned to a variable or might get collected admin_service, grpc_service, mining_service = start_services(qrlnode) qrlnode.start_listening() qrlnode.connect_peers() qrlnode.start_pow(args.mining_thread_count) logger.info('QRL blockchain ledger %s', config.dev.version) logger.info('mining/staking address %s', args.mining_address) # FIXME: This will be removed once we move away from Twisted reactor.run()
def __init__(self): """ >>> Wallet().address_bundle is not None True """ config.create_path(config.user.wallet_path) self.wallet_dat_filename = os.path.join(config.user.wallet_path, config.dev.wallet_dat_filename) self.slave_dat_filename = os.path.join(config.user.wallet_path, config.dev.slave_dat_filename) self.address_bundle = None self._read_wallet() self._valid_or_create()
def __init__(self, valid_or_create=True): """ >>> Wallet().address_bundle is not None True """ config.create_path(config.user.wallet_dir) self.wallet_dat_filename = os.path.join(config.user.wallet_dir, config.dev.wallet_dat_filename) self.address_bundle = None self._read_wallet() if valid_or_create: self._valid_or_create()
def load_peer_addresses(self): if os.path.isfile(self.peers_path) is True: logger.info('Opening peers.dat') with open(self.peers_path, 'rb') as my_file: self.peer_addresses = pickle.load(my_file) else: logger.info('Creating peers.dat') # Ensure the data path exists config.create_path(config.user.data_path) with open(self.peers_path, 'wb') as my_file: pickle.dump(config.user.peer_list, my_file) self.peer_addresses = config.user.peer_list logger.info('Known Peers: %s', self.peer_addresses)
def main(): args = parse_arguments() config.create_path(config.user.wallet_dir) mining_credit_wallet = get_mining_credit_wallet(args.mining_credit_wallet) if not mining_credit_wallet: logger.warning('Invalid Mining Credit Wallet Address') logger.warning('%s', args.mining_credit_wallet) return False logger.debug( "=====================================================================================" ) logger.info("Data Path: %s", args.data_dir) config.user.data_dir = args.data_dir config.create_path(config.user.data_dir) ntp.setDrift() logger.info('Initializing chain..') persistent_state = State() chain_manager = ChainManager(state=persistent_state) chain_manager.load(Block.from_json(GenesisBlock().to_json())) qrlnode = QRLNode(db_state=persistent_state, mining_credit_wallet=mining_credit_wallet) qrlnode.set_chain_manager(chain_manager) set_logger(args, qrlnode.sync_state) ####### # NOTE: Keep assigned to a variable or might get collected admin_service, grpc_service, mining_service = start_services(qrlnode) qrlnode.start_listening() qrlnode.connect_peers() qrlnode.start_pow(args.mining_thread_count) logger.info('QRL blockchain ledger %s', config.dev.version) logger.info('mining/staking address %s', args.mining_credit_wallet) # FIXME: This will be removed once we move away from Twisted reactor.run()
def load_peer_addresses(self): try: if os.path.isfile(self.peers_path): logger.info('Opening peers.qrl') with open(self.peers_path, 'rb') as infile: known_peers = qrl_pb2.KnownPeers() known_peers.ParseFromString(infile.read()) self.peer_addresses = [peer.ip for peer in known_peers.peers] return except Exception as e: logger.warning("Error loading peers") logger.info('Creating peers.qrl') # Ensure the data path exists config.create_path(config.user.data_path) self.update_peer_addresses(config.user.peer_list) logger.info('Known Peers: %s', self.peer_addresses)
def load_peer_addresses(self) -> None: try: if os.path.isfile(self.peers_path): logger.info('Opening peers.qrl') with open(self.peers_path, 'rb') as infile: known_peers = qrl_pb2.StoredPeers() known_peers.ParseFromString(infile.read()) # FIXME: Refactor, move to json? self._peer_addresses |= set([peer.ip for peer in known_peers.peers]) self._peer_addresses |= set(config.user.peer_list) return except Exception as e: logger.warning("Error loading peers") logger.exception(e) logger.info('Creating peers.qrl') # Ensure the data path exists config.create_path(config.user.data_dir) self.update_peer_addresses(config.user.peer_list) logger.info('Known Peers: %s', self._peer_addresses)
def get_default_wallet_path() -> str: config.create_path(config.user.wallet_dir) return os.path.join(config.user.wallet_dir, config.dev.wallet_dat_filename)
def save_known_peers(self, known_peers: List[str]): tmp = list(known_peers)[:3 * config.user.max_peers_limit] config.create_path(config.user.data_dir) with open(self.peers_path, 'w') as outfile: json.dump(tmp, outfile)
def main(): args = parse_arguments() logger.debug("=====================================================================================") logger.info("QRL Path: %s", args.qrl_dir) config.user.qrl_dir = expanduser(args.qrl_dir) config.create_path(config.user.qrl_dir) logger.debug("=====================================================================================") config.create_path(config.user.wallet_dir) mining_address = None ntp.setDrift() logger.info('Initializing chain..') persistent_state = State() if args.mocknet: args.debug = True config.user.mining_enabled = True config.user.mining_thread_count = 1 config.user.mining_pause = 500 config.dev.mining_setpoint_blocktime = 1 config.user.genesis_difficulty = 2 # Mocknet mining address # Q01050058bb3f8cb66fd90d0347478e5bdf3a475e82cfc5fe5dc276500ca21531e6edaf3d2d0f7e # Mocknet mining hexseed # 010500dd70f898c2cb4c11ce7fd85aa04554e41dcc46569871d189a3f48d84e2fbedbe176695e291e9b81e619b3625c624cde6 args.mining_address = 'Q01050058bb3f8cb66fd90d0347478e5bdf3a475e82cfc5fe5dc276500ca21531e6edaf3d2d0f7e' if args.debug: logger.warning("FAULT HANDLER ENABLED") faulthandler.enable() if config.user.mining_enabled: mining_address = get_mining_address(args.mining_address) if not mining_address: logger.warning('Invalid Mining Credit Wallet Address') logger.warning('%s', args.mining_address) return False if args.measurement > -1: persistent_state.get_measurement = MagicMock(return_value=args.measurement) chain_manager = ChainManager(state=persistent_state) chain_manager.load(Block.deserialize(GenesisBlock().serialize())) qrlnode = QRLNode(mining_address=mining_address) qrlnode.set_chain_manager(chain_manager) set_logger(args, qrlnode.sync_state) ####### # NOTE: Keep assigned to a variable or might get collected admin_service, grpc_service, mining_service, debug_service = start_services(qrlnode) qrlnode.start_listening() qrlnode.connect_peers() qrlnode.start_pow(args.mining_thread_count) logger.info('QRL blockchain ledger %s', config.dev.version) if config.user.mining_enabled: logger.info('Mining/staking address %s using %s threads (0 = auto)', 'Q' + bin2hstr(mining_address), args.mining_thread_count) elif args.mining_address or args.mining_thread_count: logger.warning('Mining is not enabled but you sent some "mining related" param via CLI') # FIXME: This will be removed once we move away from Twisted reactor.run()
from qrl.core import config from qrl.core.Wallet import WalletDecryptionError from qrl.services.WalletAPIService import WalletAPIService from qrl.generated import qrl_pb2, qrl_pb2_grpc, qrlwallet_pb2 from qrl.generated.qrlwallet_pb2_grpc import add_WalletAPIServicer_to_server from qrl.core.Wallet import Wallet from qrl.core.txs.TransferTransaction import TransferTransaction from qrl.core.txs.MessageTransaction import MessageTransaction from qrl.core.txs.SlaveTransaction import SlaveTransaction from qrl.core.txs.TokenTransaction import TokenTransaction from qrl.core.txs.TransferTokenTransaction import TransferTokenTransaction from qrl.crypto.xmss import XMSS CONNECTION_TIMEOUT = 15 config.create_path(config.user.wallet_dir) pid = os.path.join(config.user.wallet_dir, 'qrl_walletd.pid') class WalletD: def __init__(self): self._wallet_path = os.path.join(config.user.wallet_dir, 'walletd.json') self._public_stub = qrl_pb2_grpc.PublicAPIStub( grpc.insecure_channel(config.user.public_api_server)) self._wallet = None self._passphrase = None self.load_wallet() def to_plain_blocks(self, block): pheader = qrlwallet_pb2.PlainBlockHeader()
def get_chaindatafile(epoch): baseDir = os.path.join(config.user.data_path, config.dev.chain_file_directory) config.create_path(baseDir) return os.path.join(baseDir, 'chain.da' + str(epoch))
def _get_chain_datafile(epoch): # TODO: Persistence will move to rocksdb base_dir = os.path.join(config.user.data_path, config.dev.chain_file_directory) config.create_path(base_dir) return os.path.join(base_dir, 'chain.da' + str(epoch))
def main(): args = parse_arguments() qrl_dir_post_fix = '' copy_files = [] if args.network_type == 'testnet': config.dev.hard_fork_heights = list( config.dev.testnet_hard_fork_heights ) # Hard Fork Block Height For Testnet qrl_dir_post_fix = '-testnet' package_directory = os.path.dirname(os.path.abspath(__file__)) copy_files.append( os.path.join(package_directory, 'network/testnet/genesis.yml')) copy_files.append( os.path.join(package_directory, 'network/testnet/config.yml')) logger.debug( "=====================================================================================" ) logger.info("QRL Path: %s", args.qrl_dir) config.user.qrl_dir = os.path.expanduser( os.path.normpath(args.qrl_dir) + qrl_dir_post_fix) config.create_path(config.user.qrl_dir, copy_files) config.user.load_yaml(config.user.config_path) if args.mining_thread_count is None: args.mining_thread_count = config.user.mining_thread_count logger.debug( "=====================================================================================" ) config.create_path(config.user.wallet_dir) mining_address = None ntp.setDrift() logger.info('Initializing chain..') persistent_state = State() if args.mocknet: args.debug = True config.user.mining_enabled = True config.user.mining_thread_count = 1 config.user.mining_pause = 500 config.dev.pbdata.block.block_timing_in_seconds = 1 config.user.genesis_difficulty = 2 # Mocknet mining address # Q01050058bb3f8cb66fd90d0347478e5bdf3a475e82cfc5fe5dc276500ca21531e6edaf3d2d0f7e # Mocknet mining hexseed # 010500dd70f898c2cb4c11ce7fd85aa04554e41dcc46569871d189a3f48d84e2fbedbe176695e291e9b81e619b3625c624cde6 args.mining_address = 'Q01050058bb3f8cb66fd90d0347478e5bdf3a475e82cfc5fe5dc276500ca21531e6edaf3d2d0f7e' if args.debug: logger.warning("FAULT HANDLER ENABLED") faulthandler.enable() if config.user.mining_enabled: mining_address = get_mining_address(args.mining_address) if not mining_address: logger.warning('Invalid Mining Credit Wallet Address') logger.warning('%s', args.mining_address) return False chain_manager = ChainManager(state=persistent_state) if args.measurement > -1: chain_manager.get_measurement = MagicMock( return_value=args.measurement) chain_manager.load(Block.deserialize(GenesisBlock().serialize())) qrlnode = QRLNode(mining_address=mining_address) qrlnode.set_chain_manager(chain_manager) set_logger.set_logger(args, qrlnode.sync_state) ####### # NOTE: Keep assigned to a variable or might get collected admin_service, grpc_service, mining_service, debug_service = start_services( qrlnode) qrlnode.start_listening() qrlnode.start_pow(args.mining_thread_count) logger.info('QRL blockchain ledger %s', config.dev.version) if config.user.mining_enabled: logger.info('Mining/staking address %s using %s threads (0 = auto)', 'Q' + bin2hstr(mining_address), args.mining_thread_count) elif args.mining_address or args.mining_thread_count: logger.warning( 'Mining is not enabled but you sent some "mining related" param via CLI' ) reactor.run()