| 52 | } |
| 53 | |
| 54 | ChainParams ChainParams::loadConfig(string const& _json, h256 const& _stateRoot) const |
| 55 | { |
| 56 | ChainParams cp(*this); |
| 57 | js::mValue val; |
| 58 | json_spirit::read_string(_json, val); |
| 59 | js::mObject obj = val.get_obj(); |
| 60 | |
| 61 | cp.sealEngineName = obj["sealEngine"].get_str(); |
| 62 | // params |
| 63 | js::mObject params = obj["params"].get_obj(); |
| 64 | cp.accountStartNonce = u256(fromBigEndian<u256>(fromHex(params["accountStartNonce"].get_str()))); |
| 65 | cp.maximumExtraDataSize = u256(fromBigEndian<u256>(fromHex(params["maximumExtraDataSize"].get_str()))); |
| 66 | cp.tieBreakingGas = params.count("tieBreakingGas") ? params["tieBreakingGas"].get_bool() : true; |
| 67 | cp.blockReward = u256(fromBigEndian<u256>(fromHex(params["blockReward"].get_str()))); |
| 68 | for (auto i: params) |
| 69 | if (i.first != "accountStartNonce" && i.first != "maximumExtraDataSize" && i.first != "blockReward" && i.first != "tieBreakingGas") |
| 70 | cp.otherParams[i.first] = i.second.get_str(); |
| 71 | // genesis |
| 72 | string genesisStr = json_spirit::write_string(obj["genesis"], false); |
| 73 | cp = cp.loadGenesis(genesisStr, _stateRoot); |
| 74 | // genesis state |
| 75 | string genesisStateStr = json_spirit::write_string(obj["accounts"], false); |
| 76 | cp = cp.loadGenesisState(genesisStateStr, _stateRoot); |
| 77 | return cp; |
| 78 | } |
| 79 | |
| 80 | ChainParams ChainParams::loadGenesisState(string const& _json, h256 const& _stateRoot) const |
| 81 | { |