mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Fix parsing config in tonlib
This commit is contained in:
parent
7f263b8b11
commit
f4b23a257b
2 changed files with 14 additions and 27 deletions
|
@ -659,11 +659,12 @@ TEST(Tonlib, ConfigCache) {
|
||||||
],
|
],
|
||||||
"validator": {
|
"validator": {
|
||||||
"@type": "validator.config.global",
|
"@type": "validator.config.global",
|
||||||
"zero_state": {
|
"init_block": {
|
||||||
"workchain": -1,
|
"workchain": -1,
|
||||||
"shard": -9223372036854775808,
|
"shard": -9223372036854775808,
|
||||||
"seqno": 0,
|
"seqno": 0,
|
||||||
"file_hash": "eh9yveSz1qMdJ7mOsO+I+H77jkLr9NpAuEkoJuseXBo="
|
"file_hash": "eh9yveSz1qMdJ7mOsO+I+H77jkLr9NpAuEkoJuseXBo="
|
||||||
|
"root_hash": "ZXSXxDHhTALFxReyTZRd8E4Ya3ySOmpOWAS4rBX9XBY=",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})abc";
|
})abc";
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "adnl/adnl-node-id.hpp"
|
#include "adnl/adnl-node-id.hpp"
|
||||||
#include "td/utils/JsonBuilder.h"
|
#include "td/utils/JsonBuilder.h"
|
||||||
#include "auto/tl/ton_api_json.h"
|
#include "auto/tl/ton_api_json.h"
|
||||||
|
#include "ton/ton-tl.hpp"
|
||||||
|
|
||||||
namespace tonlib {
|
namespace tonlib {
|
||||||
td::Result<ton::BlockIdExt> parse_block_id_ext(td::JsonObject &obj) {
|
td::Result<ton::BlockIdExt> parse_block_id_ext(td::JsonObject &obj) {
|
||||||
|
@ -64,41 +65,26 @@ td::Result<ton::BlockIdExt> parse_block_id_ext(td::JsonObject &obj) {
|
||||||
td::Result<Config> Config::parse(std::string str) {
|
td::Result<Config> Config::parse(std::string str) {
|
||||||
TRY_RESULT(json, td::json_decode(str));
|
TRY_RESULT(json, td::json_decode(str));
|
||||||
if (json.type() != td::JsonValue::Type::Object) {
|
if (json.type() != td::JsonValue::Type::Object) {
|
||||||
return td::Status::Error("Invalid config (1)");
|
return td::Status::Error("Invalid config: json is not an object");
|
||||||
}
|
}
|
||||||
|
|
||||||
Config res;
|
Config res;
|
||||||
ton::ton_api::liteclient_config_global conf;
|
ton::ton_api::liteclient_config_global conf;
|
||||||
TRY_STATUS(ton::ton_api::from_json(conf, json.get_object()));
|
TRY_STATUS(ton::ton_api::from_json(conf, json.get_object()));
|
||||||
TRY_RESULT_ASSIGN(res.lite_servers, liteclient::LiteServerConfig::parse_global_config(conf));
|
TRY_RESULT_ASSIGN(res.lite_servers, liteclient::LiteServerConfig::parse_global_config(conf));
|
||||||
|
|
||||||
TRY_RESULT(validator_obj,
|
if (!conf.validator_) {
|
||||||
td::get_json_object_field(json.get_object(), "validator", td::JsonValue::Type::Object, false));
|
return td::Status::Error("Invalid config: no 'validator' section");
|
||||||
auto &validator = validator_obj.get_object();
|
|
||||||
TRY_RESULT(validator_type, td::get_json_object_string_field(validator, "@type", false));
|
|
||||||
if (validator_type != "validator.config.global") {
|
|
||||||
return td::Status::Error("Invalid config (7)");
|
|
||||||
}
|
}
|
||||||
TRY_RESULT(zero_state_obj, td::get_json_object_field(validator, "zero_state", td::JsonValue::Type::Object, false));
|
if (!conf.validator_->zero_state_) {
|
||||||
TRY_RESULT(zero_state_id, parse_block_id_ext(zero_state_obj.get_object()));
|
return td::Status::Error("Invalid config: no zerostate");
|
||||||
res.zero_state_id = zero_state_id;
|
}
|
||||||
auto r_init_block_obj = td::get_json_object_field(validator, "init_block", td::JsonValue::Type::Object, false);
|
res.zero_state_id = ton::create_block_id(conf.validator_->zero_state_);
|
||||||
if (r_init_block_obj.is_ok()) {
|
if (conf.validator_->init_block_) {
|
||||||
TRY_RESULT(init_block_id, parse_block_id_ext(r_init_block_obj.move_as_ok().get_object()));
|
res.init_block_id = ton::create_block_id(conf.validator_->init_block_);
|
||||||
res.init_block_id = init_block_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto r_hardforks = td::get_json_object_field(validator, "hardforks", td::JsonValue::Type::Array, false);
|
for (auto &fork : conf.validator_->hardforks_) {
|
||||||
if (r_hardforks.is_ok()) {
|
res.hardforks.push_back(ton::create_block_id(fork));
|
||||||
auto hardforks_obj = r_hardforks.move_as_ok();
|
|
||||||
auto &hardforks = hardforks_obj.get_array();
|
|
||||||
for (auto &fork : hardforks) {
|
|
||||||
if (fork.type() != td::JsonValue::Type::Object) {
|
|
||||||
return td::Status::Error("Invalid config (8)");
|
|
||||||
}
|
|
||||||
TRY_RESULT(fork_block, parse_block_id_ext(fork.get_object()));
|
|
||||||
res.hardforks.push_back(std::move(fork_block));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto hardfork : res.hardforks) {
|
for (auto hardfork : res.hardforks) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue