// 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 "CryptoNoteCore/CryptoNoteBasic.h" #include "CryptoNoteProtocol/CryptoNoteProtocolDefinitions.h" #include "Rpc/CoreRpcServerCommandsDefinitions.h" #include "BlockchainExplorerData.h" #include "ITransaction.h" namespace CryptoNote { class INodeObserver { public: virtual ~INodeObserver() {} virtual void peerCountUpdated(size_t count) {} virtual void localBlockchainUpdated(uint32_t height) {} virtual void lastKnownBlockHeightUpdated(uint32_t height) {} virtual void poolChanged() {} virtual void blockchainSynchronized(uint32_t topHeight) {} }; struct OutEntry { uint32_t outGlobalIndex; Crypto::PublicKey outKey; }; struct OutsForAmount { uint64_t amount; std::vector outs; }; struct TransactionShortInfo { Crypto::Hash txId; TransactionPrefix txPrefix; }; struct BlockShortEntry { Crypto::Hash blockHash; bool hasBlock; CryptoNote::Block block; std::vector txsShortInfo; }; 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 uint32_t getLastLocalBlockHeight() const = 0; virtual uint32_t getLastKnownBlockHeight() const = 0; virtual uint32_t getLocalBlockCount() const = 0; virtual uint32_t getKnownBlockCount() const = 0; virtual uint64_t getLastLocalBlockTimestamp() const = 0; virtual void relayTransaction(const 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::vector&& knownBlockIds, std::vector& newBlocks, uint32_t& startHeight, const Callback& callback) = 0; virtual void getTransactionOutsGlobalIndices(const Crypto::Hash& transactionHash, std::vector& outsGlobalIndices, const Callback& callback) = 0; virtual void queryBlocks(std::vector&& knownBlockIds, uint64_t timestamp, std::vector& newBlocks, uint32_t& startHeight, const Callback& callback) = 0; virtual void getPoolSymmetricDifference(std::vector&& knownPoolTxIds, Crypto::Hash knownBlockId, bool& isBcActual, std::vector>& newTxs, std::vector& deletedTxIds, const Callback& callback) = 0; virtual void getMultisignatureOutputByGlobalIndex(uint64_t amount, uint32_t gindex, MultisignatureOutput& out, const Callback& callback) = 0; virtual void getBlocks(const std::vector& blockHeights, std::vector>& blocks, const Callback& callback) = 0; virtual void getBlocks(const std::vector& blockHashes, std::vector& blocks, const Callback& callback) = 0; virtual void getBlocks(uint64_t timestampBegin, uint64_t timestampEnd, uint32_t blocksNumberLimit, std::vector& blocks, uint32_t& blocksNumberWithinTimestamps, const Callback& callback) = 0; virtual void getTransactions(const std::vector& transactionHashes, std::vector& transactions, const Callback& callback) = 0; virtual void getTransactionsByPaymentId(const Crypto::Hash& paymentId, std::vector& transactions, const Callback& callback) = 0; virtual void getPoolTransactions(uint64_t timestampBegin, uint64_t timestampEnd, uint32_t transactionsNumberLimit, std::vector& transactions, uint64_t& transactionsNumberWithinTimestamps, const Callback& callback) = 0; virtual void isSynchronized(bool& syncStatus, const Callback& callback) = 0; }; }