#pragma once #include "td/actor/actor.h" #include "validator/interfaces/validator-manager.h" #include "validator/db/package.hpp" namespace ton { namespace validator { class ArchiveImporter : public td::actor::Actor { public: ArchiveImporter(std::string path, td::Ref state, BlockSeqno shard_client_seqno, td::Ref opts, td::actor::ActorId manager, td::Promise> promise); void start_up() override; void abort_query(td::Status error); void finish_query(); void check_masterchain_block(BlockSeqno seqno); void checked_masterchain_proof(BlockHandle handle, td::Ref data); void applied_masterchain_block(BlockHandle handle); void got_new_materchain_state(td::Ref state); void checked_all_masterchain_blocks(BlockSeqno seqno); void check_next_shard_client_seqno(BlockSeqno seqno); void checked_shard_client_seqno(BlockSeqno seqno); void got_masterchain_state(td::Ref state); void apply_shard_block(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::Promise promise); void apply_shard_block_cont1(BlockHandle handle, BlockIdExt masterchain_block_id, td::Promise promise); void apply_shard_block_cont2(BlockHandle handle, BlockIdExt masterchain_block_id, td::Promise promise); void apply_shard_block_cont3(BlockHandle handle, BlockIdExt masterchain_block_id, td::Promise promise); void check_shard_block_applied(BlockIdExt block_id, td::Promise promise); private: std::string path_; td::Ref state_; BlockSeqno shard_client_seqno_; td::Ref opts_; std::shared_ptr package_; td::actor::ActorId manager_; td::Promise> promise_; std::map masterchain_blocks_; std::map> blocks_; }; } // namespace validator } // namespace ton