Skip to content

Commit

Permalink
Tonlib: add methods smc.getRawFullAccountState and blocks.getOutMsgQu…
Browse files Browse the repository at this point in the history
…eueSizes (#1027)

* add method smc.getRawFullAccountState

* Add method blocks.getOutMsgQueueSizes
  • Loading branch information
dungeon-master-666 authored Jun 27, 2024
1 parent 0daee1d commit 06f503d
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
4 changes: 4 additions & 0 deletions tl/generate/scheme/tonlib_api.tl
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,8 @@ blocks.blockSignatures id:ton.blockIdExt signatures:(vector blocks.signature) =
blocks.shardBlockLink id:ton.blockIdExt proof:bytes = blocks.ShardBlockLink;
blocks.blockLinkBack to_key_block:Bool from:ton.blockIdExt to:ton.blockIdExt dest_proof:bytes proof:bytes state_proof:bytes = blocks.BlockLinkBack;
blocks.shardBlockProof from:ton.blockIdExt mc_id:ton.blockIdExt links:(vector blocks.shardBlockLink) mc_proof:(vector blocks.blockLinkBack) = blocks.ShardBlockProof;
blocks.outMsgQueueSize id:ton.blockIdExt size:int32 = blocks.OutMsgQueueSize;
blocks.outMsgQueueSizes shards:(vector blocks.outMsgQueueSize) ext_msg_queue_size_limit:int32 = blocks.OutMsgQueueSizes;

configInfo config:tvm.cell = ConfigInfo;

Expand Down Expand Up @@ -309,6 +311,7 @@ smc.forget id:int53 = Ok;
smc.getCode id:int53 = tvm.Cell;
smc.getData id:int53 = tvm.Cell;
smc.getState id:int53 = tvm.Cell;
smc.getRawFullAccountState id:int53 = raw.FullAccountState;
smc.runGetMethod id:int53 method:smc.MethodId stack:vector<tvm.StackEntry> = smc.RunResult;

smc.getLibraries library_list:(vector int256) = smc.LibraryResult;
Expand All @@ -331,6 +334,7 @@ blocks.getTransactionsExt id:ton.blockIdExt mode:# count:# after:blocks.accountT
blocks.getBlockHeader id:ton.blockIdExt = blocks.Header;
blocks.getMasterchainBlockSignatures seqno:int32 = blocks.BlockSignatures;
blocks.getShardBlockProof id:ton.blockIdExt mode:# from:mode.0?ton.blockIdExt = blocks.ShardBlockProof;
blocks.getOutMsgQueueSizes mode:# wc:mode.0?int32 shard:mode.0?int64 = blocks.OutMsgQueueSizes;

onLiteServerQueryResult id:int64 bytes:bytes = Ok;
onLiteServerQueryError id:int64 error:error = Ok;
Expand Down
Binary file modified tl/generate/scheme/tonlib_api.tlo
Binary file not shown.
29 changes: 29 additions & 0 deletions tonlib/tonlib/TonlibClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4360,6 +4360,17 @@ td::Status TonlibClient::do_request(const tonlib_api::smc_getState& request,
return td::Status::OK();
}

td::Status TonlibClient::do_request(const tonlib_api::smc_getRawFullAccountState& request,
td::Promise<object_ptr<tonlib_api::raw_fullAccountState>>&& promise) {
auto it = smcs_.find(request.id_);
if (it == smcs_.end()) {
return TonlibError::InvalidSmcId();
}
auto& acc = it->second;
promise.set_result(acc->to_raw_fullAccountState());
return td::Status::OK();
}

bool is_list(vm::StackEntry entry) {
while (true) {
if (entry.type() == vm::StackEntry::Type::t_null) {
Expand Down Expand Up @@ -6031,6 +6042,24 @@ td::Status TonlibClient::do_request(const tonlib_api::blocks_getShardBlockProof&
return td::Status::OK();
}

td::Status TonlibClient::do_request(const tonlib_api::blocks_getOutMsgQueueSizes& request,
td::Promise<object_ptr<tonlib_api::blocks_outMsgQueueSizes>>&& promise) {
client_.send_query(ton::lite_api::liteServer_getOutMsgQueueSizes(request.mode_, request.wc_, request.shard_),
promise.wrap([](lite_api_ptr<ton::lite_api::liteServer_outMsgQueueSizes>&& queue_sizes) {
tonlib_api::blocks_outMsgQueueSizes result;
result.ext_msg_queue_size_limit_ = queue_sizes->ext_msg_queue_size_limit_;
for (auto &x : queue_sizes->shards_) {
tonlib_api::blocks_outMsgQueueSize shard;
shard.id_ = to_tonlib_api(*x->id_);
shard.size_ = x->size_;
result.shards_.push_back(tonlib_api::make_object<tonlib_api::blocks_outMsgQueueSize>(std::move(shard)));
}
return tonlib_api::make_object<tonlib_api::blocks_outMsgQueueSizes>(std::move(result));
}));

return td::Status::OK();
}

void TonlibClient::load_libs_from_disk() {
LOG(DEBUG) << "loading libraries from disk cache";
auto r_data = kv_->get("tonlib.libcache");
Expand Down
4 changes: 4 additions & 0 deletions tonlib/tonlib/TonlibClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,8 @@ class TonlibClient : public td::actor::Actor {
td::Promise<object_ptr<tonlib_api::tvm_cell>>&& promise);
td::Status do_request(const tonlib_api::smc_getState& request,
td::Promise<object_ptr<tonlib_api::tvm_cell>>&& promise);
td::Status do_request(const tonlib_api::smc_getRawFullAccountState& request,
td::Promise<object_ptr<tonlib_api::raw_fullAccountState>>&& promise);

td::Status do_request(const tonlib_api::smc_runGetMethod& request,
td::Promise<object_ptr<tonlib_api::smc_runResult>>&& promise);
Expand Down Expand Up @@ -390,6 +392,8 @@ class TonlibClient : public td::actor::Actor {
td::Promise<object_ptr<tonlib_api::blocks_blockSignatures>>&& promise);
td::Status do_request(const tonlib_api::blocks_getShardBlockProof& request,
td::Promise<object_ptr<tonlib_api::blocks_shardBlockProof>>&& promise);
td::Status do_request(const tonlib_api::blocks_getOutMsgQueueSizes& request,
td::Promise<object_ptr<tonlib_api::blocks_outMsgQueueSizes>>&& promise);

void get_config_param(int32_t param, int32_t mode, ton::BlockIdExt block,
td::Promise<object_ptr<tonlib_api::configInfo>>&& promise);
Expand Down

0 comments on commit 06f503d

Please sign in to comment.