// Copyright (c) 2012-2013 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) {} }; struct OutEntry { uint64_t outGlobalIndex; crypto::public_key outKey; }; struct OutsForAmount { uint64_t amount; std::vector outs; }; 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 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; }; }