// Copyright (c) 2011-2015 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #pragma once #include #include #include #include #include "crypto/crypto.h" #include "cryptonote_core/cryptonote_basic.h" #include "cryptonote_protocol/cryptonote_protocol_defs.h" #include "rpc/core_rpc_server_commands_defs.h" namespace CryptoNote { class INodeObserver { public: virtual ~INodeObserver() {} virtual void peerCountUpdated(size_t count) {} virtual void localBlockchainUpdated(uint64_t height) {} virtual void lastKnownBlockHeightUpdated(uint64_t height) {} virtual void poolChanged() {} }; struct OutEntry { uint64_t outGlobalIndex; crypto::public_key outKey; }; struct OutsForAmount { uint64_t amount; std::vector outs; }; struct BlockCompleteEntry { crypto::hash blockHash; cryptonote::blobdata block; std::list txs; }; class INode { public: typedef std::function Callback; virtual ~INode() {} virtual bool addObserver(INodeObserver* observer) = 0; virtual bool removeObserver(INodeObserver* observer) = 0; virtual void init(const Callback& callback) = 0; virtual bool shutdown() = 0; virtual size_t getPeerCount() const = 0; virtual uint64_t getLastLocalBlockHeight() const = 0; virtual uint64_t getLastKnownBlockHeight() const = 0; virtual uint64_t getLastLocalBlockTimestamp() const = 0; virtual void relayTransaction(const cryptonote::Transaction& transaction, const Callback& callback) = 0; virtual void getRandomOutsByAmounts(std::vector&& amounts, uint64_t outsCount, std::vector& result, const Callback& callback) = 0; virtual void getNewBlocks(std::list&& knownBlockIds, std::list& newBlocks, uint64_t& startHeight, const Callback& callback) = 0; virtual void getTransactionOutsGlobalIndices(const crypto::hash& transactionHash, std::vector& outsGlobalIndices, const Callback& callback) = 0; virtual void queryBlocks(std::list&& knownBlockIds, uint64_t timestamp, std::list& newBlocks, uint64_t& startHeight, const Callback& callback) = 0; virtual void getPoolSymmetricDifference(std::vector&& known_pool_tx_ids, crypto::hash known_block_id, bool& is_bc_actual, std::vector& new_txs, std::vector& deleted_tx_ids, const Callback& callback) = 0; }; }