Exemple #1
0
 def load_metadata(self, fileob):
     from coro.asn1.data_file import DataFileReader
     LOG('loading metadata', 'start')
     t0 = timer()
     max_block = 0
     max_pos = 0
     df = DataFileReader(fileob)
     try:
         info = df.read_object()
         version = info[0]
         assert (version == 1)
         version, nblocks = info
         for i in xrange(nblocks):
             name, pos, num, prev = df.read_object()
             name = Name(name)
             prev = Name(prev)
             self.blocks[name] = pos
             max_pos = max(pos, max_pos)
             self.prev[name] = prev
             self.num_block.setdefault(num, set()).add(name)
             self.block_num[name] = num
             max_block = max(max_block, num)
         self.last_block = max_block
     except coro.asn1.ber.DecodeError:
         LOG('error decoding metadata')
     LOG('loading metadata', 'stop', t0.end(), self.last_block)
     return max_pos
Exemple #2
0
 def load_state(self, path=None):
     from coro.asn1.data_file import DataFileReader
     from __main__ import G
     if path is None:
         path = os.path.join(G.args.base, self.save_path)
     LOG('cache', 'start')
     t0 = timer()
     try:
         f = open(path, 'rb')
         df = DataFileReader(f)
         info = df.read_object()
         if info[0] < self.cache_version:
             LOG('old cache version, ignoring')
             return
         assert (info[0] == self.cache_version)  # version
         [
             _, self.height, self.block_name, self.total, self.lost,
             self.fees, size
         ] = info
         LOG('cache', self.height, size)
         self.block_name = Name(self.block_name)
         n = [0]
         df.next = df.read_object
         self.outpoints.build(df, size)
         f.close()
         LOG('cache', 'stop', len(self.outpoints), n[0])
         LOG('cache', self.height, repr(self.block_name))
     except IOError:
         pass
     LOG('cache', 'stop', t0.end())
Exemple #3
0
 def load_state(self, path=None):
     from coro.asn1.data_file import DataFileReader
     from __main__ import G
     if path is None:
         path = os.path.join(G.args.base, self.save_path)
     W('loading outpoints cache...')
     t0 = timer()
     try:
         f = open(path, 'rb')
         df = DataFileReader(f)
         info = df.read_object()
         if info[0] < self.cache_version:
             W('old cache version, ignoring...\n')
             return
         assert (info[0] == self.cache_version)  # version
         [
             _, self.height, self.block_name, self.total, self.lost,
             self.fees, size
         ] = info
         W(' height = %d size = %d ...' % (self.height, size))
         self.block_name = Name(self.block_name)
         n = [0]
         df.next = df.read_object
         self.outpoints.build(df, size)
         f.close()
         W('[loaded outpoints %d/%d entries]' % (len(self.outpoints), n[0]))
         W('\nlast block: %d %064x\n' % (self.height, self.block_name))
     except IOError:
         pass
     W('...done (%.2fs)\n' % (t0.end(), ))
Exemple #4
0
def gen_utxo(path='/usr/local/caesure/utxo.bin'):
    f = open(path, 'rb')
    df = DataFileReader(f)
    info = df.read_object()
    # note: first object is some metadata
    [version, height, block_name, total, lost, fees, size] = info
    try:
        while 1:
            # this is followed by (txname[:16], index, amt, script), ...
            yield df.read_object()
    except EOFError:
        f.close()