@ -79,52 +79,43 @@ class LevelDBReader(object):
gets head block header
gets head block header
"""
"""
if not self . head_block_header :
if not self . head_block_header :
hash = self . db . get ( head_header_key )
block_ hash = self . db . get ( head_header_key )
num = self . _get_block_number ( hash )
num = self . _get_block_number ( block_ hash)
self . head_block_header = self . _get_block_header ( hash , num )
self . head_block_header = self . _get_block_header ( block_ hash, num )
# find header with valid state
# find header with valid state
while not self . db . get ( self . head_block_header . state_root ) and self . head_block_header . prevhash is not None :
while not self . db . get ( self . head_block_header . state_root ) and self . head_block_header . prevhash is not None :
hash = self . head_block_header . prevhash
block_ hash = self . head_block_header . prevhash
num = self . _get_block_number ( hash )
num = self . _get_block_number ( block_ hash)
self . head_block_header = self . _get_block_header ( hash , num )
self . head_block_header = self . _get_block_header ( block_ hash, num )
return self . head_block_header
return self . head_block_header
def _get_block_number ( self , hash ) :
def _get_block_number ( self , block_hash ) :
"""
""" Get block number by its hash """
gets block number by hash
number_key = block_hash_prefix + block_hash
"""
number_key = block_hash_prefix + hash
return self . db . get ( number_key )
return self . db . get ( number_key )
def _get_block_header ( self , hash , num ) :
def _get_block_header ( self , block_hash , num ) :
"""
""" Get block header by block header hash & number """
get block header by block header hash & number
header_key = header_prefix + num + block_hash
"""
header_key = header_prefix + num + hash
block_header_data = self . db . get ( header_key )
block_header_data = self . db . get ( header_key )
header = rlp . decode ( block_header_data , sedes = BlockHeader )
header = rlp . decode ( block_header_data , sedes = BlockHeader )
return header
return header
def _get_address_by_hash ( self , hash ) :
def _get_address_by_hash ( self , block_hash ) :
"""
""" Get mapped address by its hash """
get mapped address by its hash
address_key = address_prefix + block_hash
"""
address_key = address_prefix + hash
return self . db . get ( address_key )
return self . db . get ( address_key )
def _get_last_indexed_number ( self ) :
def _get_last_indexed_number ( self ) :
"""
""" Get latest indexed block number """
latest indexed block number
"""
return self . db . get ( address_mapping_head_key )
return self . db . get ( address_mapping_head_key )
def _get_block_receipts ( self , hash , num ) :
def _get_block_receipts ( self , block_hash , num ) :
"""
""" Get block transaction receipts by block header hash & number """
get block transaction receipts by block header hash & number
"""
number = _format_block_number ( num )
number = _format_block_number ( num )
receipts_key = block_receipts_prefix + number + hash
receipts_key = block_receipts_prefix + number + block_hash
receipts_data = self . db . get ( receipts_key )
receipts_data = self . db . get ( receipts_key )
receipts = rlp . decode ( receipts_data , sedes = CountableList ( ReceiptForStorage ) )
receipts = rlp . decode ( receipts_data , sedes = CountableList ( ReceiptForStorage ) )
return receipts
return receipts
@ -216,12 +207,10 @@ class EthLevelDB(object):
if not cnt % 1000 :
if not cnt % 1000 :
logging . info ( " Searched %d contracts " % cnt )
logging . info ( " Searched %d contracts " % cnt )
def contract_hash_to_address ( self , hash ) :
def contract_hash_to_address ( self , contract_hash ) :
"""
""" Tries to find corresponding account address """
tries to find corresponding account address
"""
address_hash = binascii . a2b_hex ( utils . remove_0x_head ( hash ) )
address_hash = binascii . a2b_hex ( utils . remove_0x_head ( contract_hash ) )
indexer = AccountIndexer ( self )
indexer = AccountIndexer ( self )
return _encode_hex ( indexer . get_contract_by_hash ( address_hash ) )
return _encode_hex ( indexer . get_contract_by_hash ( address_hash ) )
@ -230,9 +219,9 @@ class EthLevelDB(object):
"""
"""
gets block header by block number
gets block header by block number
"""
"""
hash = self . reader . _get_block_hash ( number )
block_ hash = self . reader . _get_block_hash ( number )
block_number = _format_block_number ( number )
block_number = _format_block_number ( number )
return self . reader . _get_block_header ( hash , block_number )
return self . reader . _get_block_header ( block_ hash, block_number )
def eth_getBlockByNumber ( self , number ) :
def eth_getBlockByNumber ( self , number ) :
"""
"""