// Copyright (c) 2011-2016 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 "IWallet.h" #include "INode.h" #include "CryptoNoteCore/Currency.h" #include "PaymentServiceJsonRpcMessages.h" #undef ERROR //TODO: workaround for windows build. fix it #include "Logging/LoggerRef.h" #include #include #include #include #include namespace PaymentService { struct WalletConfiguration { std::string walletFile; std::string walletPassword; }; void generateNewWallet(const CryptoNote::Currency ¤cy, const WalletConfiguration &conf, Logging::ILogger &logger, System::Dispatcher& dispatcher); struct TransactionsInBlockInfoFilter; class WalletService { public: WalletService(const CryptoNote::Currency& currency, System::Dispatcher& sys, CryptoNote::INode& node, CryptoNote::IWallet& wallet, const WalletConfiguration& conf, Logging::ILogger& logger); virtual ~WalletService(); void init(); void saveWallet(); std::error_code resetWallet(); std::error_code replaceWithNewWallet(const std::string& viewSecretKey); std::error_code createAddress(const std::string& spendSecretKeyText, std::string& address); std::error_code createAddress(std::string& address); std::error_code createTrackingAddress(const std::string& spendPublicKeyText, std::string& address); std::error_code deleteAddress(const std::string& address); std::error_code getSpendkeys(const std::string& address, std::string& publicSpendKeyText, std::string& secretSpendKeyText); std::error_code getBalance(const std::string& address, uint64_t& availableBalance, uint64_t& lockedAmount); std::error_code getBalance(uint64_t& availableBalance, uint64_t& lockedAmount); std::error_code getBlockHashes(uint32_t firstBlockIndex, uint32_t blockCount, std::vector& blockHashes); std::error_code getViewKey(std::string& viewSecretKey); std::error_code getTransactionHashes(const std::vector& addresses, const std::string& blockHash, uint32_t blockCount, const std::string& paymentId, std::vector& transactionHashes); std::error_code getTransactionHashes(const std::vector& addresses, uint32_t firstBlockIndex, uint32_t blockCount, const std::string& paymentId, std::vector& transactionHashes); std::error_code getTransactions(const std::vector& addresses, const std::string& blockHash, uint32_t blockCount, const std::string& paymentId, std::vector& transactionHashes); std::error_code getTransactions(const std::vector& addresses, uint32_t firstBlockIndex, uint32_t blockCount, const std::string& paymentId, std::vector& transactionHashes); std::error_code getTransaction(const std::string& transactionHash, TransactionRpcInfo& transaction); std::error_code getAddresses(std::vector& addresses); std::error_code sendTransaction(const SendTransaction::Request& request, std::string& transactionHash); std::error_code createDelayedTransaction(const CreateDelayedTransaction::Request& request, std::string& transactionHash); std::error_code getDelayedTransactionHashes(std::vector& transactionHashes); std::error_code deleteDelayedTransaction(const std::string& transactionHash); std::error_code sendDelayedTransaction(const std::string& transactionHash); std::error_code getUnconfirmedTransactionHashes(const std::vector& addresses, std::vector& transactionHashes); std::error_code getStatus(uint32_t& blockCount, uint32_t& knownBlockCount, std::string& lastBlockHash, uint32_t& peerCount); private: void refresh(); void reset(); void loadWallet(); void loadTransactionIdIndex(); void replaceWithNewWallet(const Crypto::SecretKey& viewSecretKey); std::vector getTransactions(const Crypto::Hash& blockHash, size_t blockCount) const; std::vector getTransactions(uint32_t firstBlockIndex, size_t blockCount) const; std::vector getRpcTransactionHashes(const Crypto::Hash& blockHash, size_t blockCount, const TransactionsInBlockInfoFilter& filter) const; std::vector getRpcTransactionHashes(uint32_t firstBlockIndex, size_t blockCount, const TransactionsInBlockInfoFilter& filter) const; std::vector getRpcTransactions(const Crypto::Hash& blockHash, size_t blockCount, const TransactionsInBlockInfoFilter& filter) const; std::vector getRpcTransactions(uint32_t firstBlockIndex, size_t blockCount, const TransactionsInBlockInfoFilter& filter) const; const CryptoNote::Currency& currency; CryptoNote::IWallet& wallet; CryptoNote::INode& node; const WalletConfiguration& config; bool inited; Logging::LoggerRef logger; System::Dispatcher& dispatcher; System::Event readyEvent; System::ContextGroup refreshContext; std::map transactionIdIndex; }; } //namespace PaymentService