31
31
class Chain (object ):
32
32
33
33
def __init__ (self , genesis = None , env = None , coinbase = b'\x00 ' * 20 , \
34
- new_head_cb = None , localtime = None , ** kwargs ):
34
+ new_head_cb = None , reset_genesis = False , localtime = None , ** kwargs ):
35
35
self .env = env or Env ()
36
36
# Initialize the state
37
37
if 'head_hash' in self .db : # new head tag
@@ -48,9 +48,11 @@ def __init__(self, genesis=None, env=None, coinbase=b'\x00' * 20, \
48
48
elif "extraData" in genesis :
49
49
self .state = state_from_genesis_declaration (
50
50
genesis , self .env )
51
+ reset_genesis = True
51
52
print ('Initializing chain from provided genesis declaration' )
52
53
elif "prev_headers" in genesis :
53
54
self .state = State .from_snapshot (genesis , self .env )
55
+ reset_genesis = True
54
56
print ('Initializing chain from provided state snapshot, %d (%s)' % \
55
57
(self .state .block_number , encode_hex (self .state .prev_headers [0 ].hash [:8 ])))
56
58
else :
@@ -64,25 +66,28 @@ def __init__(self, genesis=None, env=None, coinbase=b'\x00' * 20, \
64
66
"hash" : kwargs .get ('prevhash' , '00' * 32 ),
65
67
"uncles_hash" : kwargs .get ('uncles_hash' , '0x' + encode_hex (BLANK_UNCLES_HASH ))
66
68
}, self .env )
69
+ reset_genesis = True
67
70
68
71
assert self .env .db == self .state .db
69
72
70
73
initialize (self .state )
71
74
self .new_head_cb = new_head_cb
72
75
73
76
self .head_hash = self .state .prev_headers [0 ].hash
74
- self .genesis = Block (self .state .prev_headers [0 ], [], [])
75
- self .db .put (b'block:0' , self .genesis .header .hash )
76
- self .db .put (b'state:' + self .genesis .header .hash , self .state .trie .root_hash )
77
- self .db .put ('GENESIS_NUMBER' , str (self .state .block_number ))
78
- self .db .put ('GENESIS_HASH' , str (self .genesis .header .hash ))
79
77
assert self .state .block_number == self .state .prev_headers [0 ].number
80
- self .db .put (b'score:' + self .genesis .header .hash , "0" )
81
- self .db .put ('GENESIS_STATE' , json .dumps (self .state .to_snapshot ()))
82
- self .db .put (self .head_hash , 'GENESIS' )
83
- self .db .put ('state:' + self .head_hash , self .state .trie .root_hash )
84
- self .db .put ('GENESIS_RLP' , rlp .encode (self .genesis ))
85
- #self.db.commit()
78
+ if reset_genesis :
79
+ self .genesis = Block (self .state .prev_headers [0 ], [], [])
80
+ self .db .put ('GENESIS_NUMBER' , str (self .state .block_number ))
81
+ self .db .put ('GENESIS_HASH' , str (self .genesis .header .hash ))
82
+ self .db .put ('GENESIS_STATE' , json .dumps (self .state .to_snapshot ()))
83
+ self .db .put ('GENESIS_RLP' , rlp .encode (self .genesis ))
84
+ self .db .put (b'block:0' , self .genesis .header .hash )
85
+ self .db .put (b'score:' + self .genesis .header .hash , "0" )
86
+ self .db .put (b'state:' + self .genesis .header .hash , self .state .trie .root_hash )
87
+ self .db .put (self .head_hash , 'GENESIS' )
88
+ self .db .commit ()
89
+ else :
90
+ self .genesis = self .get_block_by_number (0 )
86
91
self .min_gasprice = kwargs .get ('min_gasprice' , 5 * 10 ** 9 )
87
92
self .coinbase = coinbase
88
93
self .extra_data = 'moo ha ha says the laughing cow.'
0 commit comments