38 lines
920 B
Python
38 lines
920 B
Python
# standard imports
|
|
import logging
|
|
|
|
# external imports
|
|
from chainlib.stat import ChainStat
|
|
from chainlib.eth.block import (
|
|
block_latest,
|
|
block_by_number,
|
|
Block,
|
|
)
|
|
|
|
logg = logging.getLogger().getChild(__name__)
|
|
|
|
BLOCK_SAMPLES = 10
|
|
|
|
|
|
def init_chain_stat(rpc, block_start=0):
|
|
stat = ChainStat()
|
|
|
|
if block_start == 0:
|
|
o = block_latest()
|
|
r = rpc.do(o)
|
|
try:
|
|
block_start = int(r, 16)
|
|
except TypeError:
|
|
block_start = int(r)
|
|
logg.debug('blockstart {}'.format(block_start))
|
|
|
|
for i in range(BLOCK_SAMPLES):
|
|
o = block_by_number(block_start-10+i)
|
|
block_src = rpc.do(o)
|
|
logg.debug('block {}'.format(block_src))
|
|
block = Block(block_src)
|
|
stat.block_apply(block)
|
|
|
|
logg.debug('calculated block time {} from {} block samples'.format(stat.block_average(), BLOCK_SAMPLES))
|
|
return stat
|