From 45a160d7c19a7c7b6d76485f1ebc5a5b34845cc7 Mon Sep 17 00:00:00 2001 From: ms Date: Thu, 31 Mar 2022 14:29:43 +0200 Subject: [PATCH] Add getConfigParam to tonlibjson --- tl/generate/scheme/tonlib_api.tl | 5 +++++ tl/generate/scheme/tonlib_api.tlo | Bin 27936 -> 28216 bytes tonlib/tonlib/LastConfig.cpp | 2 +- tonlib/tonlib/LastConfig.h | 9 +------- tonlib/tonlib/TonlibClient.cpp | 36 ++++++++++++++++++++++-------- tonlib/tonlib/TonlibClient.h | 3 +++ 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/tl/generate/scheme/tonlib_api.tl b/tl/generate/scheme/tonlib_api.tl index b1dd7679..4527cc09 100644 --- a/tl/generate/scheme/tonlib_api.tl +++ b/tl/generate/scheme/tonlib_api.tl @@ -210,6 +210,9 @@ blocks.shortTxId mode:# account:mode.0?bytes lt:mode.1?int64 hash:mode.2?bytes = blocks.transactions id:ton.blockIdExt req_count:int32 incomplete:Bool transactions:vector = blocks.Transactions; blocks.header id:ton.blockIdExt global_id:int32 version:int32 after_merge:Bool after_split:Bool before_split:Bool want_merge:Bool want_split:Bool validator_list_hash_short:int32 catchain_seqno:int32 min_ref_mc_seqno:int32 is_key_block:Bool prev_key_block_seqno:int32 start_lt:int64 end_lt:int64 vert_seqno:# prev_blocks:vector = blocks.Header; //blocks.shortData header:blocks.Header transactions:blocks.Header = blocks.BlockData; + +configInfo config:tvm.cell = ConfigInfo; + ---functions--- init options:options = options.Info; @@ -262,6 +265,8 @@ guessAccount public_key:string rwallet_init_public_key:string = AccountRevisionL getAccountState account_address:accountAddress = FullAccountState; createQuery private_key:InputKey address:accountAddress timeout:int32 action:Action initial_account_state:InitialAccountState = query.Info; +getConfigParam mode:# id:ton.blockIdExt param:# = ConfigInfo; + msg.decrypt input_key:InputKey data:msg.dataEncryptedArray = msg.DataDecryptedArray; msg.decryptWithProof proof:bytes data:msg.dataEncrypted = msg.Data; diff --git a/tl/generate/scheme/tonlib_api.tlo b/tl/generate/scheme/tonlib_api.tlo index 77741950ec220ed7ec01cd6f79333282a16276d4..d5a8344d6d832315af5525ff6b0288e42aa7e453 100644 GIT binary patch delta 174 zcmZ2*i*d&tM&3uW^{p77Abcb5c1D5!p$wW_&iQ$1ndzQ+Y55Ej3nVrlVQk@HY}o9{ zx0+KDET4>!2k~zn6Y^o4yiiDd@&X?b7Lds17vc-d7+p4Z`t9eE?fN3l#Fw600x>lp tu_!T@0j7<4vS)zypH;+YW+FvWa{m3;_E=JL>=d delta 53 zcmdmShjGCzM&3uW^{p77AZ#P=cE-(b7+ZK4>o*tjt>)ZZATh;^(Rnkg|9-B`2~jtM E0oLph*8l(j diff --git a/tonlib/tonlib/LastConfig.cpp b/tonlib/tonlib/LastConfig.cpp index 0111095b..5ee73212 100644 --- a/tonlib/tonlib/LastConfig.cpp +++ b/tonlib/tonlib/LastConfig.cpp @@ -39,7 +39,7 @@ td::StringBuilder& operator<<(td::StringBuilder& sb, const LastConfigState& stat return sb; } -LastConfig::LastConfig(ExtClientRef client, td::unique_ptr callback) : callback_(std::move(callback)) { +LastConfig::LastConfig(ExtClientRef client) { client_.set_client(client); VLOG(last_block) << "State: " << state_; } diff --git a/tonlib/tonlib/LastConfig.h b/tonlib/tonlib/LastConfig.h index 514b4a59..d610165d 100644 --- a/tonlib/tonlib/LastConfig.h +++ b/tonlib/tonlib/LastConfig.h @@ -36,17 +36,10 @@ td::StringBuilder& operator<<(td::StringBuilder& sb, const LastConfigState& stat class LastConfig : public td::actor::Actor { public: - class Callback { - public: - virtual ~Callback() { - } - }; - - explicit LastConfig(ExtClientRef client, td::unique_ptr callback); + explicit LastConfig(ExtClientRef client); void get_last_config(td::Promise promise); private: - td::unique_ptr callback_; ExtClient client_; LastConfigState state_; diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index be2fe6c2..d75fb120 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -1439,17 +1439,9 @@ void TonlibClient::init_last_block(LastBlockState state) { } void TonlibClient::init_last_config() { ref_cnt_++; - class Callback : public LastConfig::Callback { - public: - Callback(td::actor::ActorShared client) : client_(std::move(client)) { - } - - private: - td::actor::ActorShared client_; - }; raw_last_config_ = td::actor::create_actor(td::actor::ActorOptions().with_name("LastConfig").with_poll(false), - get_client_ref(), td::make_unique(td::actor::actor_shared(this))); + get_client_ref()); } void TonlibClient::on_result(td::uint64 id, tonlib_api::object_ptr response) { @@ -4198,6 +4190,32 @@ auto to_lite_api(const tonlib_api::ton_blockIdExt& blk) -> td::Result>&& promise) { + TRY_RESULT(lite_block, to_lite_api(*request.id_)) + auto block = create_block_id(std::move(lite_block)); + auto param = request.param_; + std::vector params = { param }; + + client_.send_query(ton::lite_api::liteServer_getConfigParams(0, std::move(lite_block), std::move(params)), + promise.wrap([block, param](auto r_config) { + auto state = block::check_extract_state_proof(block, r_config->state_proof_.as_slice(), + r_config->config_proof_.as_slice()); + if (state.is_error()) { + LOG(ERROR) << "block::check_extract_state_proof failed: " << state.error(); + } + auto config = block::Config::extract_from_state(std::move(state.move_as_ok()), 0); + if (config.is_error()) { + LOG(ERROR) << "block::Config::extract_from_state failed: " << config.error(); + } + tonlib_api::configInfo config_result; + config_result.config_ = tonlib_api::make_object(to_bytes(config.move_as_ok()->get_config_param(param))); + return tonlib_api::make_object(std::move(config_result)); + })); + + return td::Status::OK(); +} + td::Status TonlibClient::do_request(const tonlib_api::blocks_getMasterchainInfo& masterchain_info, td::Promise>&& promise) { client_.send_query(ton::lite_api::liteServer_getMasterchainInfo(), diff --git a/tonlib/tonlib/TonlibClient.h b/tonlib/tonlib/TonlibClient.h index 6d80c152..716133e4 100644 --- a/tonlib/tonlib/TonlibClient.h +++ b/tonlib/tonlib/TonlibClient.h @@ -357,6 +357,9 @@ class TonlibClient : public td::actor::Actor { td::Status do_request(const tonlib_api::blocks_getBlockHeader& request, td::Promise>&& promise); + td::Status do_request(const tonlib_api::getConfigParam& request, + td::Promise>&& promise); + void proxy_request(td::int64 query_id, std::string data); void load_libs_from_disk();