forked from ethereum/pyethereum
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconsensus_strategy.py
33 lines (31 loc) · 1.32 KB
/
consensus_strategy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class ConsensusStrategy(object):
def __init__(self, **kwargs):
assert sorted(kwargs.keys()) == sorted(['check_seal', 'validate_uncles', 'initialize',
'finalize', 'get_uncles'])
for k, v in kwargs.items():
setattr(self, k, v)
def get_consensus_strategy(config):
if config['CONSENSUS_STRATEGY'] in (
'pow', 'ethpow', 'ethash', 'ethereum1'):
from ethereum.pow.consensus import check_pow, validate_uncles, \
initialize, finalize, get_uncle_candidates
return ConsensusStrategy(
check_seal=check_pow,
validate_uncles=validate_uncles,
initialize=initialize,
finalize=finalize,
get_uncles=get_uncle_candidates,
)
elif config['CONSENSUS_STRATEGY'] == 'hybrid_casper':
from ethereum.hybrid_casper.consensus import initialize
from ethereum.pow.consensus import check_pow, validate_uncles, \
finalize, get_uncle_candidates
return ConsensusStrategy(
check_seal=check_pow,
validate_uncles=validate_uncles,
initialize=initialize,
finalize=finalize,
get_uncles=get_uncle_candidates,
)
else:
raise Exception("Please set a consensus strategy! (pow, casper)")