Пример #1
0
 def dump (self):
     print 'hash: %s' % (hexify (dhash (self.render())),)
     print 'inputs: %d' % (len(self.inputs))
     for i in range (len (self.inputs)):
         (outpoint, index), script, sequence = self.inputs[i]
         redeem = pprint_script (parse_script (script))
         print '%3d %s:%d %r %d' % (i, hexify(outpoint), index, redeem, sequence)
     print '%d outputs' % (len(self.outputs))
     for i in range (len (self.outputs)):
         value, pk_script = self.outputs[i]
         pk_script = pprint_script (parse_script (pk_script))
         print '%3d %s %r' % (i, bcrepr (value), pk_script)
     print 'lock_time:', self.lock_time
Пример #2
0
 def dump (self):
     print 'hash: %s' % (hexify (dhash (self.render())),)
     print 'inputs: %d' % (len(self.inputs))
     for i in range (len (self.inputs)):
         (outpoint, index), script, sequence = self.inputs[i]
         redeem = pprint_script (parse_script (script))
         print '%3d %s:%d %r %d' % (i, hexify(outpoint), index, redeem, sequence)
     print '%d outputs' % (len(self.outputs))
     for i in range (len (self.outputs)):
         value, pk_script = self.outputs[i]
         pk_script = pprint_script (parse_script (pk_script))
         print '%3d %s %r' % (i, bcrepr (value), pk_script)
     print 'lock_time:', self.lock_time
Пример #3
0
 def initialize (self):
     db = the_block_db
     n = 0
     W ('start: %r\n' % (time.ctime(),))
     for name in db_gen():
         b = db[name]
         # assume coinbase is ok for now
         tx0 = b.transactions[0]
         self.store_outputs (tx0)
         for tx in b.transactions[1:]:
             # verify each transaction
             # first, we need the output script for each of the inputs
             for i in range (len (tx.inputs)):
                 (outpoint, index), script, sequence = tx.inputs[i]
                 key = '%s:%d' % (hexify (outpoint, True), index)
                 pair = self.monies[key]
                 amt, oscript = pair[:8], pair[8:]
                 amt, = struct.unpack ('<Q', amt)
                 try:
                     tx.verify0 (i, oscript)
                 except VerifyError:
                     W ('failed verification: %r:%d\n' % (tx.name,i))
                 except NotImplementedError:
                     W ('not implemented: %r:%d\n' % (tx.name,i))
                 else:
                     del self.monies[key]
             self.store_outputs (tx)
         n += 1
         #if n == 120000:
         #    coro.profiler.start()
         #if n == 130000:
         #    coro.profiler.stop()
         if n % 1000 == 0:
             W ('.')
     W ('done: %r\n' % (time.ctime(),))
Пример #4
0
 def initialize(self):
     db = the_block_db
     n = 0
     W('start: %r\n' % (time.ctime(), ))
     for name in db_gen():
         b = db[name]
         # assume coinbase is ok for now
         tx0 = b.transactions[0]
         self.store_outputs(tx0)
         for tx in b.transactions[1:]:
             # verify each transaction
             # first, we need the output script for each of the inputs
             for i in range(len(tx.inputs)):
                 (outpoint, index), script, sequence = tx.inputs[i]
                 key = '%s:%d' % (hexify(outpoint, True), index)
                 pair = self.monies[key]
                 amt, oscript = pair[:8], pair[8:]
                 amt, = struct.unpack('<Q', amt)
                 try:
                     tx.verify0(i, oscript)
                 except VerifyError:
                     W('failed verification: %r:%d\n' % (tx.name, i))
                 except NotImplementedError:
                     W('not implemented: %r:%d\n' % (tx.name, i))
                 else:
                     del self.monies[key]
             self.store_outputs(tx)
         n += 1
         #if n == 120000:
         #    coro.profiler.start()
         #if n == 130000:
         #    coro.profiler.stop()
         if n % 1000 == 0:
             W('.')
     W('done: %r\n' % (time.ctime(), ))
Пример #5
0
 def build_block_chain(self):
     from caesure.proto import unpack_block_header
     if not os.path.isfile(BLOCKS_PATH):
         open(BLOCKS_PATH, 'wb').write('')
     file = open(BLOCKS_PATH, 'rb')
     print 'reading block headers...'
     file.seek(0)
     i = -1
     name = ZERO_BLOCK
     # first, read all the blocks
     t0 = timer()
     while 1:
         pos = file.tell()
         size = file.read(8)
         if not size:
             break
         else:
             size, = struct.unpack('<Q', size)
             header = file.read(80)
             (version, prev_block, merkle_root, timestamp, bits,
              nonce) = unpack_block_header(header)
             # skip the rest of the block
             file.seek(size - 80, 1)
             prev_block = hexify(prev_block, True)
             name = hexify(dhash(header), True)
             bn = 1 + self.block_num[prev_block]
             self.prev[name] = prev_block
             self.next.setdefault(prev_block, set()).add(name)
             self.block_num[name] = bn
             self.num_block.setdefault(bn, set()).add(name)
             self.blocks[name] = pos
             self.last_block = max(self.last_block, bn)
     print 'last block (%d): %r' % (self.last_block,
                                    self.num_block[self.last_block])
     file.close()
     print '%.02f secs to load block chain' % (t0.end())
     self.read_only_file = open(BLOCKS_PATH, 'rb')
Пример #6
0
 def build_block_chain (self):
     from caesure.proto import unpack_block_header
     if not os.path.isfile (BLOCKS_PATH):
         open (BLOCKS_PATH, 'wb').write('')
     file = open (BLOCKS_PATH, 'rb')
     print 'reading block headers...'
     file.seek (0)
     i = -1
     name = ZERO_BLOCK
     # first, read all the blocks
     t0 = timer()
     while 1:
         pos = file.tell()
         size = file.read (8)
         if not size:
             break
         else:
             size, = struct.unpack ('<Q', size)
             header = file.read (80)
             (version, prev_block, merkle_root,
              timestamp, bits, nonce) = unpack_block_header (header)
             # skip the rest of the block
             file.seek (size-80, 1)
             prev_block = hexify (prev_block, True)
             name = hexify (dhash (header), True)
             bn = 1 + self.block_num[prev_block]
             self.prev[name] = prev_block
             self.next.setdefault (prev_block, set()).add (name)
             self.block_num[name] = bn
             self.num_block.setdefault (bn, set()).add (name)
             self.blocks[name] = pos
             self.last_block = max (self.last_block, bn)
     if name != ZERO_BLOCK:
         print 'last block (%d): %r' % (self.last_block, self.num_block[self.last_block])
     file.close()
     print '%.02f secs to load block chain' % (t0.end())
     self.read_only_file = open (BLOCKS_PATH, 'rb')
Пример #7
0
 def dump(self, fout=sys.stdout):
     D = fout.write
     D('hash: %s\n' % (hexify(dhash(self.render())), ))
     D('inputs: %d\n' % (len(self.inputs)))
     for i in range(len(self.inputs)):
         (outpoint, index), script, sequence = self.inputs[i]
         try:
             redeem = pprint_script(parse_script(script))
         except ScriptError:
             redeem = script.encode('hex')
         D('%3d %064x:%d %r %d\n' % (i, outpoint, index, redeem, sequence))
     D('outputs: %d\n' % (len(self.outputs), ))
     for i in range(len(self.outputs)):
         value, pk_script = self.outputs[i]
         pk_script = pprint_script(parse_script(pk_script))
         D('%3d %s %r\n' % (i, bcrepr(value), pk_script))
     D('lock_time: %s\n' % (self.lock_time, ))
Пример #8
0
 def dump (self, fout=sys.stdout):
     D = fout.write
     D ('hash: %s\n' % (hexify (dhash (self.render())),))
     D ('inputs: %d\n' % (len(self.inputs)))
     for i in range (len (self.inputs)):
         (outpoint, index), script, sequence = self.inputs[i]
         try:
             redeem = pprint_script (parse_script (script))
         except ScriptError:
             redeem = script.encode ('hex')
         D ('%3d %064x:%d %r %d\n' % (i, outpoint, index, redeem, sequence))
     D ('outputs: %d\n' % (len(self.outputs),))
     for i in range (len (self.outputs)):
         value, pk_script = self.outputs[i]
         pk_script = pprint_script (parse_script (pk_script))
         D ('%3d %s %r\n' % (i, bcrepr (value), pk_script))
     D ('lock_time: %s\n' % (self.lock_time,))
Пример #9
0
def shorthex (s):
    return shorten (hexify (s))
Пример #10
0
 def cmd_inv (self, data):
     pairs = caesure.proto.unpack_inv (data)
     for objid, name in pairs:
         the_dispatcher.add_inv (objid, hexify (name, True))
Пример #11
0
 def cmd_inv(self, data):
     pairs = caesure.proto.unpack_inv(data)
     for objid, name in pairs:
         the_dispatcher.add_inv(objid, hexify(name, True))