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
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(),))
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(), ))
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')
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')
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, ))
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,))
def shorthex (s): return shorten (hexify (s))
def cmd_inv (self, data): pairs = caesure.proto.unpack_inv (data) for objid, name in pairs: the_dispatcher.add_inv (objid, hexify (name, True))
def cmd_inv(self, data): pairs = caesure.proto.unpack_inv(data) for objid, name in pairs: the_dispatcher.add_inv(objid, hexify(name, True))