1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

Merge branch 'testnet' into accelerator

This commit is contained in:
SpyCheese 2024-10-09 21:10:36 +03:00
commit df21424047
44 changed files with 373 additions and 180 deletions

View file

@ -74,29 +74,30 @@ void ShardClient::got_init_state_from_db(td::Ref<MasterchainState> state) {
}
void ShardClient::start_up_init_mode() {
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::Unit> R) {
R.ensure();
td::actor::send_closure(SelfId, &ShardClient::apply_all_shards);
});
td::MultiPromise mp;
auto ig = mp.init_guard();
ig.add_promise(std::move(P));
auto vec = masterchain_state_->get_shards();
for (auto &shard : vec) {
if (opts_->need_monitor(shard->shard(), masterchain_state_)) {
auto P = td::PromiseCreator::lambda([promise = ig.get_promise()](td::Result<td::Ref<ShardState>> R) mutable {
R.ensure();
promise.set_value(td::Unit());
});
td::actor::create_actor<DownloadShardState>("downloadstate", shard->top_block_id(),
masterchain_block_handle_->id(), 2, manager_,
td::Timestamp::in(3600 * 3), std::move(P))
.release();
std::vector<BlockIdExt> shards;
for (const auto& s : masterchain_state_->get_shards()) {
if (opts_->need_monitor(s->shard(), masterchain_state_)) {
shards.push_back(s->top_block_id());
}
}
download_shard_states(masterchain_block_handle_->id(), std::move(shards), 0);
}
void ShardClient::download_shard_states(BlockIdExt masterchain_block_id, std::vector<BlockIdExt> shards, size_t idx) {
if (idx >= shards.size()) {
LOG(WARNING) << "downloaded all shard states";
applied_all_shards();
return;
}
BlockIdExt block_id = shards[idx];
td::actor::create_actor<DownloadShardState>(
"downloadstate", block_id, masterchain_block_handle_->id(), 2, manager_, td::Timestamp::in(3600 * 5),
[=, SelfId = actor_id(this), shards = std::move(shards)](td::Result<td::Ref<ShardState>> R) {
R.ensure();
td::actor::send_closure(SelfId, &ShardClient::download_shard_states, masterchain_block_id, std::move(shards),
idx + 1);
})
.release();
}
void ShardClient::applied_all_shards() {