mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
New liteserver config format
* Specify shards and seqno/utime/lt limits for liteservers in global config * Support in lite-client, tonlib, blockchain-explorer * Rework proxy-liteserver
This commit is contained in:
parent
38ab70c037
commit
007f1fb1d7
26 changed files with 1187 additions and 1130 deletions
|
@ -43,7 +43,6 @@
|
|||
#include "block/block-auto.h"
|
||||
#include "crypto/vm/utils.h"
|
||||
#include "td/utils/crypto.h"
|
||||
#include "lite-client/QueryTraits.h"
|
||||
|
||||
#include "vm/boc.h"
|
||||
#include "vm/cellops.h"
|
||||
|
@ -212,7 +211,8 @@ void HttpQueryBlockData::finish_query() {
|
|||
}
|
||||
|
||||
void HttpQueryBlockData::start_up() {
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getBlock>(ton::create_tl_lite_block_id(block_id_));
|
||||
auto query = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getBlock>(ton::create_tl_lite_block_id(block_id_)), true);
|
||||
|
||||
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
|
@ -223,7 +223,7 @@ void HttpQueryBlockData::start_up() {
|
|||
});
|
||||
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryBlockData::got_block_data(td::BufferSlice data) {
|
||||
|
@ -274,7 +274,8 @@ void HttpQueryBlockView::finish_query() {
|
|||
}
|
||||
|
||||
void HttpQueryBlockView::start_up_query() {
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getBlock>(ton::create_tl_lite_block_id(block_id_));
|
||||
auto query = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getBlock>(ton::create_tl_lite_block_id(block_id_)), true);
|
||||
|
||||
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
|
@ -285,7 +286,7 @@ void HttpQueryBlockView::start_up_query() {
|
|||
});
|
||||
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryBlockView::got_block_data(td::BufferSlice data) {
|
||||
|
@ -321,10 +322,11 @@ void HttpQueryBlockInfo::start_up_query() {
|
|||
td::actor::send_closure(SelfId, &HttpQueryBlockInfo::got_block_header, R.move_as_ok());
|
||||
}
|
||||
});
|
||||
auto query =
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getBlockHeader>(ton::create_tl_lite_block_id(block_id_), 0);
|
||||
auto query = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getBlockHeader>(ton::create_tl_lite_block_id(block_id_), 0),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
pending_queries_ = 1;
|
||||
|
||||
if (block_id_.is_masterchain()) {
|
||||
|
@ -336,15 +338,16 @@ void HttpQueryBlockInfo::start_up_query() {
|
|||
td::actor::send_closure(SelfId, &HttpQueryBlockInfo::got_shard_info, R.move_as_ok());
|
||||
}
|
||||
});
|
||||
auto query_2 =
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getAllShardsInfo>(ton::create_tl_lite_block_id(block_id_));
|
||||
auto query_2 = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getAllShardsInfo>(ton::create_tl_lite_block_id(block_id_)),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query_2, true), liteclient::get_query_shard(*query_2),
|
||||
std::move(P_2));
|
||||
std::move(query_2), std::move(P_2));
|
||||
pending_queries_++;
|
||||
}
|
||||
auto query_3 = ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7, 1024, nullptr, false, false);
|
||||
auto query_3 = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7, 1024, nullptr, false, false),
|
||||
true);
|
||||
auto P_3 = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
td::actor::send_closure(SelfId, &HttpQueryBlockInfo::abort_query, R.move_as_error_prefix("litequery failed: "));
|
||||
|
@ -353,8 +356,7 @@ void HttpQueryBlockInfo::start_up_query() {
|
|||
}
|
||||
});
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query_3, true), liteclient::get_query_shard(*query_3),
|
||||
std::move(P_3));
|
||||
std::move(query_3), std::move(P_3));
|
||||
pending_queries_++;
|
||||
}
|
||||
|
||||
|
@ -407,9 +409,11 @@ void HttpQueryBlockInfo::got_transactions(td::BufferSlice data) {
|
|||
|
||||
if (f->incomplete_ && transactions_.size() > 0) {
|
||||
const auto &T = *transactions_.rbegin();
|
||||
auto query_3 = ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7 + 128, 1024,
|
||||
ton::create_tl_object<ton::lite_api::liteServer_transactionId3>(T.addr.addr, T.lt), false, false);
|
||||
auto query_3 = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7 + 128, 1024,
|
||||
ton::create_tl_object<ton::lite_api::liteServer_transactionId3>(T.addr.addr, T.lt), false, false),
|
||||
true);
|
||||
auto P_3 = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
td::actor::send_closure(SelfId, &HttpQueryBlockInfo::abort_query, R.move_as_error_prefix("litequery failed: "));
|
||||
|
@ -418,8 +422,7 @@ void HttpQueryBlockInfo::got_transactions(td::BufferSlice data) {
|
|||
}
|
||||
});
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query_3, true), liteclient::get_query_shard(*query_3),
|
||||
std::move(P_3));
|
||||
std::move(query_3), std::move(P_3));
|
||||
} else {
|
||||
if (!--pending_queries_) {
|
||||
finish_query();
|
||||
|
@ -539,13 +542,14 @@ void HttpQueryBlockSearch::start_up_query() {
|
|||
td::actor::send_closure(SelfId, &HttpQueryBlockSearch::got_block_header, R.move_as_ok());
|
||||
}
|
||||
});
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_lookupBlock>(
|
||||
mode_,
|
||||
ton::create_tl_lite_block_id_simple(
|
||||
ton::BlockId{account_prefix_.workchain, account_prefix_.account_id_prefix, seqno_}),
|
||||
lt_, utime_);
|
||||
auto query = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_lookupBlock>(
|
||||
mode_,
|
||||
ton::create_tl_lite_block_id_simple(ton::BlockId{
|
||||
account_prefix_.workchain, account_prefix_.account_id_prefix, seqno_}),
|
||||
lt_, utime_),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryBlockSearch::got_block_header(td::BufferSlice data) {
|
||||
|
@ -567,16 +571,17 @@ void HttpQueryBlockSearch::got_block_header(td::BufferSlice data) {
|
|||
td::actor::send_closure(SelfId, &HttpQueryBlockSearch::got_shard_info, R.move_as_ok());
|
||||
}
|
||||
});
|
||||
auto query_2 =
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getAllShardsInfo>(ton::create_tl_lite_block_id(block_id_));
|
||||
auto query_2 = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getAllShardsInfo>(ton::create_tl_lite_block_id(block_id_)),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query_2, true), liteclient::get_query_shard(*query_2),
|
||||
std::move(P_2));
|
||||
std::move(query_2), std::move(P_2));
|
||||
pending_queries_++;
|
||||
}
|
||||
|
||||
auto query_3 = ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7, 1024, nullptr, false, false);
|
||||
auto query_3 = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7, 1024, nullptr, false, false),
|
||||
true);
|
||||
auto P_3 = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
td::actor::send_closure(SelfId, &HttpQueryBlockSearch::abort_query, R.move_as_error_prefix("litequery failed: "));
|
||||
|
@ -585,8 +590,7 @@ void HttpQueryBlockSearch::got_block_header(td::BufferSlice data) {
|
|||
}
|
||||
});
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query_3, true), liteclient::get_query_shard(*query_3),
|
||||
std::move(P_3));
|
||||
std::move(query_3), std::move(P_3));
|
||||
pending_queries_++;
|
||||
}
|
||||
|
||||
|
@ -626,9 +630,11 @@ void HttpQueryBlockSearch::got_transactions(td::BufferSlice data) {
|
|||
|
||||
if (f->incomplete_ && transactions_.size() > 0) {
|
||||
const auto &T = *transactions_.rbegin();
|
||||
auto query_3 = ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7 + 128, 1024,
|
||||
ton::create_tl_object<ton::lite_api::liteServer_transactionId3>(T.addr.addr, T.lt), false, false);
|
||||
auto query_3 = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_listBlockTransactions>(
|
||||
ton::create_tl_lite_block_id(block_id_), 7 + 128, 1024,
|
||||
ton::create_tl_object<ton::lite_api::liteServer_transactionId3>(T.addr.addr, T.lt), false, false),
|
||||
true);
|
||||
auto P_3 = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
|
||||
if (R.is_error()) {
|
||||
td::actor::send_closure(SelfId, &HttpQueryBlockSearch::abort_query,
|
||||
|
@ -638,8 +644,7 @@ void HttpQueryBlockSearch::got_transactions(td::BufferSlice data) {
|
|||
}
|
||||
});
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query_3, true), liteclient::get_query_shard(*query_3),
|
||||
std::move(P_3));
|
||||
std::move(query_3), std::move(P_3));
|
||||
} else {
|
||||
if (!--pending_queries_) {
|
||||
finish_query();
|
||||
|
@ -727,10 +732,11 @@ void HttpQueryViewAccount::start_up_query() {
|
|||
}
|
||||
});
|
||||
auto a = ton::create_tl_object<ton::lite_api::liteServer_accountId>(addr_.workchain, addr_.addr);
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getAccountState>(ton::create_tl_lite_block_id(block_id_),
|
||||
std::move(a));
|
||||
auto query = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_getAccountState>(
|
||||
ton::create_tl_lite_block_id(block_id_), std::move(a)),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryViewAccount::got_account(td::BufferSlice data) {
|
||||
|
@ -823,9 +829,10 @@ void HttpQueryViewTransaction::start_up_query() {
|
|||
}
|
||||
});
|
||||
auto a = ton::create_tl_object<ton::lite_api::liteServer_accountId>(addr_.workchain, addr_.addr);
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getTransactions>(1, std::move(a), lt_, hash_);
|
||||
auto query = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getTransactions>(1, std::move(a), lt_, hash_), true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryViewTransaction::got_transaction(td::BufferSlice data) {
|
||||
|
@ -913,10 +920,11 @@ void HttpQueryViewTransaction2::start_up_query() {
|
|||
}
|
||||
});
|
||||
auto a = ton::create_tl_object<ton::lite_api::liteServer_accountId>(addr_.workchain, addr_.addr);
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getOneTransaction>(
|
||||
ton::create_tl_lite_block_id(block_id_), std::move(a), lt_);
|
||||
auto query = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_getOneTransaction>(
|
||||
ton::create_tl_lite_block_id(block_id_), std::move(a), lt_),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryViewTransaction2::got_transaction(td::BufferSlice data) {
|
||||
|
@ -975,9 +983,9 @@ void HttpQueryViewLastBlock::start_up() {
|
|||
}
|
||||
});
|
||||
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getMasterchainInfo>();
|
||||
auto query = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_getMasterchainInfo>(), true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryViewLastBlock::got_result(td::BufferSlice data) {
|
||||
|
@ -1041,9 +1049,9 @@ void HttpQueryConfig::start_up() {
|
|||
}
|
||||
});
|
||||
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getMasterchainInfo>();
|
||||
auto query = ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_getMasterchainInfo>(), true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1067,17 +1075,16 @@ void HttpQueryConfig::send_main_query() {
|
|||
td::actor::send_closure(SelfId, &HttpQueryConfig::got_result, R.move_as_ok());
|
||||
}
|
||||
});
|
||||
if (params_.size() > 0) {
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_getConfigParams>(
|
||||
0, ton::create_tl_lite_block_id(block_id_), std::vector<int>(params_));
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
} else {
|
||||
auto query =
|
||||
ton::create_tl_object<ton::lite_api::liteServer_getConfigAll>(0, ton::create_tl_lite_block_id(block_id_));
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
}
|
||||
auto query =
|
||||
params_.size() > 0
|
||||
? ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_getConfigParams>(
|
||||
0, ton::create_tl_lite_block_id(block_id_), std::vector<int>(params_)),
|
||||
true)
|
||||
: ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_getConfigAll>(
|
||||
0, ton::create_tl_lite_block_id(block_id_)),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryConfig::got_result(td::BufferSlice data) {
|
||||
|
@ -1219,9 +1226,10 @@ void HttpQuerySend::start_up() {
|
|||
td::actor::send_closure(SelfId, &HttpQuerySend::got_result, R.move_as_ok());
|
||||
}
|
||||
});
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_sendMessage>(std::move(data_));
|
||||
auto query =
|
||||
ton::serialize_tl_object(ton::create_tl_object<ton::lite_api::liteServer_sendMessage>(std::move(data_)), true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQuerySend::got_result(td::BufferSlice data) {
|
||||
|
@ -1327,10 +1335,12 @@ void HttpQueryRunMethod::start_up_query() {
|
|||
return abort_query(params_serialized.move_as_error_prefix("cannot serialize stack with get-method parameters : "));
|
||||
}
|
||||
|
||||
auto query = ton::create_tl_object<ton::lite_api::liteServer_runSmcMethod>(
|
||||
0x17, ton::create_tl_lite_block_id(block_id_), std::move(a), method_id, params_serialized.move_as_ok());
|
||||
auto query = ton::serialize_tl_object(
|
||||
ton::create_tl_object<ton::lite_api::liteServer_runSmcMethod>(
|
||||
0x17, ton::create_tl_lite_block_id(block_id_), std::move(a), method_id, params_serialized.move_as_ok()),
|
||||
true);
|
||||
td::actor::send_closure(CoreActorInterface::instance_actor_id(), &CoreActorInterface::send_lite_query,
|
||||
ton::serialize_tl_object(query, true), liteclient::get_query_shard(*query), std::move(P));
|
||||
std::move(query), std::move(P));
|
||||
}
|
||||
|
||||
void HttpQueryRunMethod::got_result(td::BufferSlice data) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue