Exemplo n.º 1
0
def test_parse_from_the_start():
    logging.info('\n')
    blocks.initialise(db)
    for i in range(tx_index):
        blocks.parse_block(db, i)

    # Check balances of source_default.
    output_new['get_balances'] = util.get_balances(db, address=source_default)
Exemplo n.º 2
0
def reparse(testnet=True):
    options = dict(COUNTERPARTYD_OPTIONS)
    options.pop('data_dir')
    counterpartyd.set_options(database_file=':memory:',
                              testnet=testnet,
                              **options)

    if testnet:
        config.PREFIX = b'TESTXXXX'

    logger = logging.getLogger()
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(message)s')
    console.setFormatter(formatter)
    logger.addHandler(console)

    memory_db = util.connect_to_db()
    initialise_db(memory_db)

    prod_db_path = os.path.join(
        config.DATA_DIR, '{}.{}{}.db'.format(config.XCP_CLIENT,
                                             str(config.VERSION_MAJOR),
                                             '.testnet' if testnet else ''))
    prod_db = apsw.Connection(prod_db_path)
    prod_db.setrowtrace(util.rowtracer)

    with memory_db.backup("main", prod_db, "main") as backup:
        backup.step()

    # here we don't use block.reparse() because it reparse db in transaction (`with db`)
    memory_cursor = memory_db.cursor()
    for table in blocks.TABLES + ['balances']:
        memory_cursor.execute('''DROP TABLE IF EXISTS {}'''.format(table))
    blocks.initialise(memory_db)
    previous_ledger_hash = None
    previous_txlist_hash = None
    memory_cursor.execute('''SELECT * FROM blocks ORDER BY block_index''')
    for block in memory_cursor.fetchall():
        try:
            logger.info('Block (re‐parse): {}'.format(str(
                block['block_index'])))
            previous_ledger_hash, previous_txlist_hash = blocks.parse_block(
                memory_db, block['block_index'], block['block_time'],
                previous_ledger_hash, block['ledger_hash'],
                previous_txlist_hash, block['txlist_hash'])
        except ConsensusError as e:
            message = str(e)
            if message.find('ledger_hash') != -1:
                new_ledger = get_block_ledger(memory_db, block['block_index'])
                old_ledger = get_block_ledger(prod_db, block['block_index'])
                compare_strings(old_ledger, new_ledger)
            elif message.find('txlist_hash') != -1:
                new_txlist = get_block_txlist(memory_db, block['block_index'])
                old_txlist = get_block_txlist(prod_db, block['block_index'])
                compare_strings(old_txlist, new_txlist)
            raise (e)
Exemplo n.º 3
0
def test_initialise():
    blocks.initialise(db)

    # First block (for burn.create sanity check).
    cursor = db.cursor()
    cursor.execute(
        '''INSERT INTO blocks(
                        block_index,
                        block_hash,
                        block_time) VALUES(?,?,?)''',
        (config.BURN_START - 1, 'foobar', 1337))
    cursor.close()
Exemplo n.º 4
0
def test_initialise ():
    blocks.initialise(db)

    # First block (for burn.create sanity check).
    cursor = db.cursor()
    cursor.execute('''INSERT INTO blocks(
                        block_index,
                        block_hash,
                        block_time) VALUES(?,?,?)''',
                        (config.BURN_START - 1,
                        'foobar',
                        1337)
                  )
    cursor.close()
Exemplo n.º 5
0
def reparse(testnet=True):
    options = dict(COUNTERPARTYD_OPTIONS)
    options.pop('data_dir')
    bluejudyd.set_options(database_file=':memory:', testnet=testnet, **options)
    
    if testnet:
        config.PREFIX = b'TESTXXXX'

    logger = logging.getLogger()
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(message)s')
    console.setFormatter(formatter)
    logger.addHandler(console)

    memory_db = util.connect_to_db()
    initialise_db(memory_db)
    
    prod_db_path = os.path.join(config.DATA_DIR, '{}.{}{}.db'.format(config.XBJ_CLIENT, str(config.VERSION_MAJOR), '.testnet' if testnet else ''))
    prod_db = apsw.Connection(prod_db_path)
    prod_db.setrowtrace(util.rowtracer)

    with memory_db.backup("main", prod_db, "main") as backup:
        backup.step()

    # here we don't use block.reparse() because it reparse db in transaction (`with db`)
    memory_cursor = memory_db.cursor()
    for table in blocks.TABLES + ['balances']:
        memory_cursor.execute('''DROP TABLE IF EXISTS {}'''.format(table))
    blocks.initialise(memory_db)
    previous_ledger_hash = None
    previous_txlist_hash = None
    memory_cursor.execute('''SELECT * FROM blocks ORDER BY block_index''')
    for block in memory_cursor.fetchall():
        try:
            logger.info('Block (re‐parse): {}'.format(str(block['block_index'])))
            previous_ledger_hash, previous_txlist_hash = blocks.parse_block(memory_db, block['block_index'], block['block_time'], 
                                                                                    previous_ledger_hash, block['ledger_hash'],
                                                                                    previous_txlist_hash, block['txlist_hash'])
        except ConsensusError as e:
            message = str(e)
            if message.find('ledger_hash') != -1:
                new_ledger = get_block_ledger(memory_db, block['block_index'])
                old_ledger = get_block_ledger(prod_db, block['block_index'])
                compare_strings(old_ledger, new_ledger)
            elif message.find('txlist_hash') != -1:
                new_txlist = get_block_txlist(memory_db, block['block_index'])
                old_txlist = get_block_txlist(prod_db, block['block_index'])
                compare_strings(old_txlist, new_txlist)
            raise(e)
Exemplo n.º 6
0
def test_initialise ():
    blocks.initialise(db)
Exemplo n.º 7
0
def reparse(testnet=True):
    options = dict(COUNTERPARTYD_OPTIONS)
    options.pop('data_dir')
    counterpartyd.set_options(database_file=':memory:', testnet=testnet, **options)

    if testnet:
        config.PREFIX = b'TESTXXXX'

    logger = logging.getLogger()
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(message)s')
    console.setFormatter(formatter)
    logger.addHandler(console)

    memory_db = database.get_connection(read_only=False)
    initialise_db(memory_db)

    prod_db_path = os.path.join(config.DATA_DIR, '{}.{}{}.db'.format(config.XCP_CLIENT, str(config.VERSION_MAJOR), '.testnet' if testnet else ''))
    prod_db = apsw.Connection(prod_db_path)
    prod_db.setrowtrace(database.rowtracer)

    with memory_db.backup("main", prod_db, "main") as backup:
        backup.step()

    # here we don't use block.reparse() because it reparse db in transaction (`with db`)
    memory_cursor = memory_db.cursor()
    for table in blocks.TABLES + ['balances']:
        memory_cursor.execute('''DROP TABLE IF EXISTS {}'''.format(table))

    # clean consensus hashes if first block hash don't match with checkpoint.
    checkpoints = check.CHECKPOINTS_TESTNET if config.TESTNET else check.CHECKPOINTS_MAINNET
    columns = [column['name'] for column in memory_cursor.execute('''PRAGMA table_info(blocks)''')]
    for field in ['ledger_hash', 'txlist_hash']:
        if field in columns:
            sql = '''SELECT {} FROM blocks  WHERE block_index = ?'''.format(field)
            first_hash = list(memory_cursor.execute(sql, (config.BLOCK_FIRST,)))[0][field]
            if first_hash != checkpoints[config.BLOCK_FIRST][field]:
                logging.info('First hash changed. Cleaning {}.'.format(field))
                memory_cursor.execute('''UPDATE blocks SET {} = NULL'''.format(field))

    blocks.initialise(memory_db)
    previous_ledger_hash = None
    previous_txlist_hash = None
    memory_cursor.execute('''SELECT * FROM blocks ORDER BY block_index''')
    for block in memory_cursor.fetchall():
        try:
            logger.info('Block (re‐parse): {}'.format(str(block['block_index'])))
            previous_ledger_hash, previous_txlist_hash = blocks.parse_block(memory_db, block['block_index'], block['block_time'],
                                                                                    previous_ledger_hash, block['ledger_hash'],
                                                                                    previous_txlist_hash, block['txlist_hash'])
        except check.ConsensusError as e:
            message = str(e)
            if message.find('ledger_hash') != -1:
                new_ledger = get_block_ledger(memory_db, block['block_index'])
                old_ledger = get_block_ledger(prod_db, block['block_index'])
                compare_strings(old_ledger, new_ledger)
            elif message.find('txlist_hash') != -1:
                new_txlist = get_block_txlist(memory_db, block['block_index'])
                old_txlist = get_block_txlist(prod_db, block['block_index'])
                compare_strings(old_txlist, new_txlist)
            raise(e)
Exemplo n.º 8
0
def initialise_db(db):
    blocks.initialise(db)
    insert_block(db, config.BURN_START - 1)
Exemplo n.º 9
0
def test_parse_from_the_start():
    global db, cursor
    blocks.initialise(db, cursor)
    for i in range(tx_index):
        cursor = blocks.parse_block(db, cursor, i)
Exemplo n.º 10
0
def test_initialise():
    global db, cursor
    blocks.initialise(db, cursor)
Exemplo n.º 11
0
def test_initialise():
    blocks.initialise(db)
Exemplo n.º 12
0
def reparse(testnet=True):
    options = dict(COUNTERPARTYD_OPTIONS)
    options.pop('data_dir')
    counterpartyd.set_options(database_file=':memory:',
                              testnet=testnet,
                              **options)

    if testnet:
        config.PREFIX = b'TESTXXXX'

    logger = logging.getLogger()
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(message)s')
    console.setFormatter(formatter)
    logger.addHandler(console)

    memory_db = database.get_connection(read_only=False)
    initialise_db(memory_db)

    prod_db_path = os.path.join(
        config.DATA_DIR, '{}.{}{}.db'.format(config.XCP_CLIENT,
                                             str(config.VERSION_MAJOR),
                                             '.testnet' if testnet else ''))
    prod_db = apsw.Connection(prod_db_path)
    prod_db.setrowtrace(database.rowtracer)

    with memory_db.backup("main", prod_db, "main") as backup:
        backup.step()

    # here we don't use block.reparse() because it reparse db in transaction (`with db`)
    memory_cursor = memory_db.cursor()
    for table in blocks.TABLES + ['balances']:
        memory_cursor.execute('''DROP TABLE IF EXISTS {}'''.format(table))

    # clean consensus hashes if first block hash don't match with checkpoint.
    checkpoints = check.CHECKPOINTS_TESTNET if config.TESTNET else check.CHECKPOINTS_MAINNET
    columns = [
        column['name']
        for column in memory_cursor.execute('''PRAGMA table_info(blocks)''')
    ]
    for field in ['ledger_hash', 'txlist_hash']:
        if field in columns:
            sql = '''SELECT {} FROM blocks  WHERE block_index = ?'''.format(
                field)
            first_hash = list(
                memory_cursor.execute(sql, (config.BLOCK_FIRST, )))[0][field]
            if first_hash != checkpoints[config.BLOCK_FIRST][field]:
                logger.info('First hash changed. Cleaning {}.'.format(field))
                memory_cursor.execute(
                    '''UPDATE blocks SET {} = NULL'''.format(field))

    blocks.initialise(memory_db)
    previous_ledger_hash = None
    previous_txlist_hash = None
    memory_cursor.execute('''SELECT * FROM blocks ORDER BY block_index''')
    for block in memory_cursor.fetchall():
        try:
            logger.info('Block (re‐parse): {}'.format(str(
                block['block_index'])))
            previous_ledger_hash, previous_txlist_hash = blocks.parse_block(
                memory_db, block['block_index'], block['block_time'],
                previous_ledger_hash, block['ledger_hash'],
                previous_txlist_hash, block['txlist_hash'])
        except check.ConsensusError as e:
            message = str(e)
            if message.find('ledger_hash') != -1:
                new_ledger = get_block_ledger(memory_db, block['block_index'])
                old_ledger = get_block_ledger(prod_db, block['block_index'])
                compare_strings(old_ledger, new_ledger)
            elif message.find('txlist_hash') != -1:
                new_txlist = get_block_txlist(memory_db, block['block_index'])
                old_txlist = get_block_txlist(prod_db, block['block_index'])
                compare_strings(old_txlist, new_txlist)
            raise (e)
Exemplo n.º 13
0
def initialise_db(db):
    blocks.initialise(db)
    insert_block(db, config.BURN_START - 1)