Skip to content
This repository has been archived by the owner on Oct 28, 2021. It is now read-only.

Commit

Permalink
accept simple genesis format with test_setChainParams
Browse files Browse the repository at this point in the history
  • Loading branch information
winsvega committed Feb 23, 2018
1 parent 0913b23 commit ece6502
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions libethereum/ChainParams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ set<string> const c_knownParamNames = {c_minGasLimit, c_maxGasLimit, c_gasLimitB
c_durationLimit, c_chainID, c_networkID, c_allowFutureBlocks};
} // anonymous namespace

/// parse simple genesis format into cpp genesis format
js::mObject prepareFromGeneralConfig(js::mObject const& _config);

ChainParams ChainParams::loadConfig(
string const& _json, h256 const& _stateRoot, const boost::filesystem::path& _configPath) const
{
Expand All @@ -98,6 +101,9 @@ ChainParams ChainParams::loadConfig(
json_spirit::read_string_or_throw(_json, val);
js::mObject obj = val.get_obj();

if (obj.count("version") && obj.at("version").get_str() == "1")
obj = prepareFromGeneralConfig(obj);

validateFieldNames(obj, c_knownChainConfigFields);

cp.sealEngineName = obj[c_sealEngine].get_str();
Expand Down Expand Up @@ -281,3 +287,32 @@ bytes ChainParams::genesisBlock() const
block.appendRaw(RLPEmptyList);
return block.out();
}

#include <libethashseal/GenesisInfo.h>
js::mObject prepareFromGeneralConfig(js::mObject const& _config)
{
assert(_config.count("params"));
js::mObject params = _config.at("params").get_obj();
assert(params.count("forkRules"));
string forkRules = params.at("forkRules").get_str();
Network rules;
if (forkRules == "Frontier")
rules = Network::FrontierTest;
else if (forkRules == "Homestead")
rules = Network::HomesteadTest;
else if (forkRules == "EIP150")
rules = Network::EIP150Test;
else if (forkRules == "EIP158")
rules = Network::EIP158Test;
else if (forkRules == "Byzantium")
rules = Network::ByzantiumTest;
else
assert(false);
js::mValue v;
js::read_string(genesisInfo(rules), v);
js::mObject obj = v.get_obj();

// overwrite with general config
obj["sealEngine"] = params.at("miningMethod");
return obj;
}

0 comments on commit ece6502

Please sign in to comment.