39 namespace js = json_spirit;
41 ChainParams::ChainParams()
43 for (
unsigned i = 1; i <= 4; ++i)
52 ChainParams::ChainParams(
string const& _json,
h256 const& _stateRoot)
54 *
this = loadConfig(_json, _stateRoot);
58 string const& _json,
h256 const& _stateRoot,
const boost::filesystem::path& _configPath)
const 62 js::read_string_or_throw(_json, val);
63 js::mObject obj = val.get_obj();
68 js::mObject params = obj[
c_params].get_obj();
74 auto setOptionalU256Parameter = [¶ms](
u256 &_destination,
string const& _name)
76 if (params.count(_name))
77 _destination =
u256(fromBigEndian<u256>(
fromHex(params.at(_name).get_str())));
101 string genesisStr = js::write_string(obj[
c_genesis],
false);
102 cp = cp.loadGenesis(genesisStr, _stateRoot);
104 string genesisStateStr = js::write_string(obj[
c_accounts],
false);
113 ChainParams ChainParams::loadGenesis(
string const& _json,
h256 const& _stateRoot)
const 118 js::read_string(_json, val);
119 js::mObject genesis = val.get_obj();
121 cp.parentHash =
h256(0);
125 cp.minimumDifficulty;
137 cp.sealRLP =
rlp(mixHash) +
rlp(nonce);
139 cp.stateRoot = _stateRoot ? _stateRoot : cp.calculateStateRoot();
145 SealEngineFace* ret = SealEngineRegistrar::create(sealEngineName);
146 assert(ret &&
"Seal engine not found");
158 void ChainParams::populateFromGenesis(
bytes const& _genesisRLP,
AccountMap const& _state)
161 parentHash = bi.parentHash();
162 author = bi.author();
163 difficulty = bi.difficulty();
164 gasLimit = bi.gasLimit();
165 gasUsed = bi.gasUsed();
166 timestamp = bi.timestamp();
167 extraData = bi.extraData();
170 sealFields = r[0].itemCount() - BlockHeader::BasicFields;
172 for (
unsigned i = BlockHeader::BasicFields; i < r[0].itemCount(); ++i)
173 sealRLP += r[0][i].data();
175 calculateStateRoot(
true);
177 auto b = genesisBlock();
178 if (b != _genesisRLP)
181 cdebug <<
"Genesis now:" << BlockHeader::headerHashFromBlock(b);
188 h256 ChainParams::calculateStateRoot(
bool _force)
const 193 if (!stateRoot || _force)
198 stateRoot = state.root();
203 bytes ChainParams::genesisBlock()
const 207 calculateStateRoot();
209 block.
appendList(BlockHeader::BasicFields + sealFields)
virtual unsigned sealFields() const
u256 experimentalForkBlock
string const c_accountStartNonce
string const c_byzantiumForkBlock
std::unordered_map< Address, Account > AccountMap
bytes rlp(_T _t)
Export a single item in RLP format, returning a byte array.
string const c_daoHardforkBlock
u256 constantinopleForkBlock
string const c_gasLimitBoundDivisor
string const c_difficultyBoundDivisor
std::unordered_map< Address, Account > const & genesisState()
string const c_maximumExtraDataSize
virtual bytes sealRLP() const
string const c_EIP150ForkBlock
string const c_maxGasLimit
void setBlockReward(u256 const &_newBlockReward)
string const c_difficulty
u256 maximumExtraDataSize
bytes fromHex(std::string const &_s, WhenError _throw=WhenError::DontThrow)
string const c_experimentalForkBlock
string const c_tieBreakingGas
string const c_minimumDifficulty
h256 stateRoot
Only pre-populate if known equivalent to genesisState's root. If they're different Bad Things Will Ha...
std::unordered_map< Address, PrecompiledContract > precompiled
Precompiled contracts as specified in the chain params.
std::vector< byte > bytes
string const c_EIP158ForkBlock
RLPStream & appendList(size_t _items)
Appends a list.
string const c_sealEngine
bytes const & out() const
Read the byte stream.
u256 gasLimitBoundDivisor
string const c_homesteadForkBlock
u256 difficultyBoundDivisor
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
void validateConfigJson(js::mObject const &_obj)
std::string sealEngineName
The chain sealer name: e.g. Ethash, NoProof, BasicAuthority.
void setChainParams(ChainOperationParams const &_params)
string const c_blockReward
h2048 LogBloom
The log bloom's size (2048-bit).
AddressHash commit(AccountMap const &_cache, SecureTrieDB< Address, DB > &_state)
string const c_eWASMForkBlock
string const c_allowFutureBlocks
string const c_durationLimit
AccountMap jsonToAccountMap(std::string const &_json, u256 const &_defaultNonce=0, AccountMaskMap *o_mask=nullptr, PrecompiledContractMap *o_precompiled=nullptr, const boost::filesystem::path &_configPath={})
Class for writing to an RLP bytestream.
string const c_minGasLimit
string const c_constantinopleForkBlock
RLPStream & appendRaw(bytesConstRef _rlp, size_t _itemCount=1)
Appends raw (pre-serialised) RLP data. Use with caution.
h256 calculateStateRoot(bool _force=false) const
bytes RLPEmptyList
The empty list in RLP format.