Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
File: main.py Progetto: fanff/QRL
def main():
    args = parse_arguments()

    config.create_path(config.user.wallet_dir)

    slaves = mining_wallet_checks(args)

    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, slaves=slaves)
    qrlnode.set_chain(chain_manager)

    set_logger(args, qrlnode.sync_state)

    #######
    # NOTE: Keep assigned to a variable or might get collected
    admin_service, grpc_service = start_services(qrlnode)

    qrlnode.start_listening()
    qrlnode.connect_peers()

    qrlnode.start_pow()

    logger.info('QRL blockchain ledger %s', config.dev.version)
    logger.info('mining/staking address %s', slaves[0])

    # FIXME: This will be removed once we move away from Twisted
    reactor.run()
Esempio n. 4
0
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()
Esempio n. 5
0
class TestQRLNodeProperties(TestCase):
    @patch('qrl.core.misc.ntp.getTime', new=replacement_getTime)
    def setUp(self):
        state = Mock()
        self.m_chain_manager = ChainManager(state=state)
        self.m_chain_manager._last_block = None
        self.m_chain_manager._state.get_block_by_number.return_value = None

        self.m_peer_manager = Mock(name='mock P2PPeerManager')

        self.qrlnode = QRLNode(mining_address=b'')
        self.qrlnode.set_chain_manager(self.m_chain_manager)
        self.qrlnode.peer_manager = self.m_peer_manager

    def test_state(self):
        # If qrlnode._p2pfactory is None, then this should be this value
        self.assertEqual(self.qrlnode.state, ESyncState.unknown.value)

        # Else, it should be whatever this part of p2pfactory says
        m_p2pfactory = Mock()
        m_p2pfactory.sync_state.state.value = "test"
        self.qrlnode._p2pfactory = m_p2pfactory
        self.assertEqual(self.qrlnode.state, "test")

    def test_num_connections(self):
        # If qrlnode._p2pfactory is None, then this should return 0
        self.assertEqual(self.qrlnode.num_connections, 0)

        # otherwise it should return what p2pfactory's num_connections says
        m_p2pfactory = Mock(num_connections=5)
        self.qrlnode._p2pfactory = m_p2pfactory
        self.assertEqual(self.qrlnode.num_connections, 5)

    def test_epoch(self):
        self.assertEqual(self.qrlnode.epoch, 0)

        self.m_chain_manager._last_block = Mock(block_number=5)
        self.assertEqual(self.qrlnode.epoch,
                         (5 // config.dev.blocks_per_epoch))

        self.m_chain_manager._last_block = Mock(block_number=256)
        self.assertEqual(self.qrlnode.epoch,
                         (256 // config.dev.blocks_per_epoch))

    def test_uptime_network(self):
        # If there is no block after the genesis block, this property should return 0
        self.assertEqual(self.qrlnode.uptime_network, 0)

        # However, if there is a block after the genesis block, use its timestamp to calculate our uptime.
        with patch('qrl.core.misc.ntp.getTime') as m_getTime:
            self.m_chain_manager._state.get_block_by_number.return_value = Mock(
                timestamp=1000000)
            m_getTime.return_value = 1500000
            self.assertEqual(self.qrlnode.uptime_network, 500000)

    def test_block_last_reward(self):
        # If last_block() returned None, of course the last reward was 0.
        self.assertEqual(self.qrlnode.block_last_reward, 0)

        # Else it is what the block_reward says it is.
        self.m_chain_manager._last_block = Mock(block_reward=53)
        self.assertEqual(self.qrlnode.block_last_reward, 53)

    def test_block_time_mean(self):
        # FIXME
        # For this function to work, last_block() must not return a None. If it does, bad things will happen.
        self.m_chain_manager._last_block = Mock(name='mock Block')

        # If this particular function returns None, this property should just return the config value
        self.m_chain_manager._state.get_block_metadata.return_value = None
        self.assertEqual(self.qrlnode.block_time_mean,
                         config.dev.mining_setpoint_blocktime)

        # Else, it should consult state.get_measurement()
        self.m_chain_manager._state.get_block_metadata.return_value = Mock(
            name='mock BlockMetadata')
        self.qrlnode.block_time_mean()
        self.m_chain_manager._state.get_measurement.assert_called_once()

    def test_coin_supply(self):
        with mock._patch_object(ChainManager,
                                'total_coin_supply') as m_total_coin_supply:
            m_total_coin_supply.__get__ = Mock(return_value=100)
            self.assertEqual(100, self.qrlnode.coin_supply)
            m_total_coin_supply.__get__.assert_called_once()

    def test_coin_supply_max(self):
        # This property should be whatever config says it is.
        self.assertEqual(self.qrlnode.coin_supply_max,
                         config.dev.max_coin_supply)

    def test_get_peers_stat(self):
        self.qrlnode.get_peers_stat()
        self.m_peer_manager.get_peers_stat.assert_called_once()

    def test_connect_peers(self):
        self.qrlnode.connect_peers()
        self.m_peer_manager.connect_peers.assert_called_once()