/* This file is part of TON Blockchain Library. TON Blockchain Library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. TON Blockchain Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with TON Blockchain Library. If not, see . Copyright 2017-2020 Telegram Systems LLP */ #pragma once #include "full-node.h" #include "full-node-shard.h" //#include "ton-node-slave.h" #include "interfaces/proof.h" #include "interfaces/shard.h" #include "full-node-private-overlay.hpp" #include #include namespace ton { namespace validator { namespace fullnode { class FullNodeImpl : public FullNode { public: void update_dht_node(td::actor::ActorId dht) override { dht_ = dht; } void add_permanent_key(PublicKeyHash key, td::Promise promise) override; void del_permanent_key(PublicKeyHash key, td::Promise promise) override; void sign_shard_overlay_certificate(ShardIdFull shard_id, PublicKeyHash signed_key, td::uint32 expiry_at, td::uint32 max_size, td::Promise promise) override; void import_shard_overlay_certificate(ShardIdFull shard_id, PublicKeyHash signed_key, std::shared_ptr cert, td::Promise promise) override; void update_adnl_id(adnl::AdnlNodeIdShort adnl_id, td::Promise promise) override; void set_config(FullNodeConfig config) override; void add_ext_msg_overlay(std::vector nodes, std::map senders, std::string name, td::Promise promise) override; void del_ext_msg_overlay(std::string name, td::Promise promise) override; void add_shard(ShardIdFull shard); void del_shard(ShardIdFull shard); void sync_completed(); void initial_read_complete(BlockHandle top_block); void send_ihr_message(AccountIdPrefixFull dst, td::BufferSlice data); void send_ext_message(AccountIdPrefixFull dst, td::BufferSlice data); void send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqnp, td::BufferSlice data); void send_broadcast(BlockBroadcast broadcast); void download_block(BlockIdExt id, td::uint32 priority, td::Timestamp timeout, td::Promise promise); void download_zero_state(BlockIdExt id, td::uint32 priority, td::Timestamp timeout, td::Promise promise); void download_persistent_state(BlockIdExt id, BlockIdExt masterchain_block_id, td::uint32 priority, td::Timestamp timeout, td::Promise promise); void download_block_proof(BlockIdExt block_id, td::uint32 priority, td::Timestamp timeout, td::Promise promise); void download_block_proof_link(BlockIdExt block_id, td::uint32 priority, td::Timestamp timeout, td::Promise promise); void get_next_key_blocks(BlockIdExt block_id, td::Timestamp timeout, td::Promise> promise); void download_archive(BlockSeqno masterchain_seqno, std::string tmp_dir, td::Timestamp timeout, td::Promise promise); void got_key_block_state(td::Ref state); void new_key_block(BlockHandle handle); void start_up() override; FullNodeImpl(PublicKeyHash local_id, adnl::AdnlNodeIdShort adnl_id, FileHash zero_state_file_hash, FullNodeConfig config, td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId rldp, td::actor::ActorId rldp2, td::actor::ActorId dht, td::actor::ActorId overlays, td::actor::ActorId validator_manager, td::actor::ActorId client, std::string db_root); private: PublicKeyHash local_id_; adnl::AdnlNodeIdShort adnl_id_; FileHash zero_state_file_hash_; td::actor::ActorId get_shard(AccountIdPrefixFull dst); td::actor::ActorId get_shard(ShardIdFull dst); std::map> shards_; td::actor::ActorId keyring_; td::actor::ActorId adnl_; td::actor::ActorId rldp_; td::actor::ActorId rldp2_; td::actor::ActorId dht_; td::actor::ActorId overlays_; td::actor::ActorId validator_manager_; td::actor::ActorId client_; std::string db_root_; PublicKeyHash sign_cert_by_; std::vector all_validators_; std::map current_validators_; std::set local_keys_; FullNodeConfig config_; std::map> private_block_overlays_; bool private_block_overlays_enable_compression_ = false; struct ExtMsgOverlayInfo { std::vector nodes_; std::map senders_; std::map> actors_; // our local id -> actor }; std::map private_custom_overlays_; void update_private_overlays(); void set_private_block_overlays_enable_compression(bool value); void create_private_block_overlay(PublicKeyHash key); void update_ext_msg_overlay(const std::string& name, ExtMsgOverlayInfo& overlay); }; } // namespace fullnode } // namespace validator } // namespace ton