예제 #1
0
    def test_measurement_0(self, mock_get_block):
        with set_qrl_dir('no_data'):
            with State() as state:
                self.assertIsNotNone(
                    state)  # to avoid warning (unused variable)
                chain_manager = ChainManager(state)
                mock_get_block.side_effect = TestStateMeasurement.get_block_example1
                parent_metadata = Mock()
                parent_metadata.last_N_headerhashes = []

                measurement = chain_manager.get_measurement(
                    config.dev,
                    100,
                    parent_headerhash=b'0',
                    parent_metadata=parent_metadata)
                self.assertEqual(60, measurement)

                measurement = chain_manager.get_measurement(
                    config.dev,
                    110,
                    parent_headerhash=b'0',
                    parent_metadata=parent_metadata)
                self.assertEqual(60, measurement)

                measurement = chain_manager.get_measurement(
                    config.dev,
                    1000,
                    parent_headerhash=b'0',
                    parent_metadata=parent_metadata)
                self.assertEqual(60, measurement)
예제 #2
0
    def test_measurement_4(self, mock_get_block):
        db_name = config.dev.db_name
        with mock.patch('qrl.core.config.dev') as devconfig:
            devconfig.N_measurement = 3
            devconfig.db_name = db_name
            with set_qrl_dir('no_data'):
                with State() as state:
                    self.assertIsNotNone(
                        state)  # to avoid warning (unused variable)
                    chain_manager = ChainManager(state)
                    mock_get_block.side_effect = TestStateMeasurement.get_block_example1
                    parent_metadata = Mock()
                    parent_metadata.last_N_headerhashes = [b'0', b'1', b'2']

                    measurement = chain_manager.get_measurement(
                        config.dev, 350, b'3', parent_metadata)
                    self.assertEqual(63, measurement)

                    measurement = chain_manager.get_measurement(
                        config.dev, 370, b'3', parent_metadata)
                    self.assertEqual(70, measurement)
예제 #3
0
파일: main.py 프로젝트: theQRL/QRL
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()