// Copyright (c) 2012-2015, The CryptoNote developers, The Bytecoin developers // // This file is part of Bytecoin. // // Bytecoin 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 3 of the License, or // (at your option) any later version. // // Bytecoin 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 Bytecoin. If not, see . #pragma once #include #include #include #include #include #include #include #include namespace CryptoNote { typedef size_t TransactionId; typedef size_t TransferId; typedef std::array TransactionHash; struct Transfer { std::string address; int64_t amount; }; const TransactionId INVALID_TRANSACTION_ID = std::numeric_limits::max(); const TransferId INVALID_TRANSFER_ID = std::numeric_limits::max(); const uint64_t UNCONFIRMED_TRANSACTION_HEIGHT = std::numeric_limits::max(); enum class TransactionState : uint8_t { Active, // --> {Deleted} Deleted, // --> {Active} Sending, // --> {Active, Cancelled, Failed} Cancelled, // --> {} Failed // --> {} }; struct TransactionInfo { TransferId firstTransferId; size_t transferCount; int64_t totalAmount; uint64_t fee; uint64_t sentTime; uint64_t unlockTime; TransactionHash hash; bool isCoinbase; uint64_t blockHeight; uint64_t timestamp; std::string extra; TransactionState state; }; typedef std::array WalletPublicKey; typedef std::array WalletSecretKey; struct WalletAccountKeys { WalletPublicKey viewPublicKey; WalletSecretKey viewSecretKey; WalletPublicKey spendPublicKey; WalletSecretKey spendSecretKey; }; class IWalletObserver { public: virtual ~IWalletObserver() {} virtual void initCompleted(std::error_code result) {} virtual void saveCompleted(std::error_code result) {} virtual void synchronizationProgressUpdated(uint64_t current, uint64_t total) {} virtual void synchronizationCompleted(std::error_code result) {} virtual void actualBalanceUpdated(uint64_t actualBalance) {} virtual void pendingBalanceUpdated(uint64_t pendingBalance) {} virtual void externalTransactionCreated(TransactionId transactionId) {} virtual void sendTransactionCompleted(TransactionId transactionId, std::error_code result) {} virtual void transactionUpdated(TransactionId transactionId) {} }; class IWallet { public: virtual ~IWallet() {} ; virtual void addObserver(IWalletObserver* observer) = 0; virtual void removeObserver(IWalletObserver* observer) = 0; virtual void initAndGenerate(const std::string& password) = 0; virtual void initAndLoad(std::istream& source, const std::string& password) = 0; virtual void initWithKeys(const WalletAccountKeys& accountKeys, const std::string& password) = 0; virtual void shutdown() = 0; virtual void reset() = 0; virtual void save(std::ostream& destination, bool saveDetailed = true, bool saveCache = true) = 0; virtual std::error_code changePassword(const std::string& oldPassword, const std::string& newPassword) = 0; virtual std::string getAddress() = 0; virtual uint64_t actualBalance() = 0; virtual uint64_t pendingBalance() = 0; virtual size_t getTransactionCount() = 0; virtual size_t getTransferCount() = 0; virtual TransactionId findTransactionByTransferId(TransferId transferId) = 0; virtual bool getTransaction(TransactionId transactionId, TransactionInfo& transaction) = 0; virtual bool getTransfer(TransferId transferId, Transfer& transfer) = 0; virtual TransactionId sendTransaction(const Transfer& transfer, uint64_t fee, const std::string& extra = "", uint64_t mixIn = 0, uint64_t unlockTimestamp = 0) = 0; virtual TransactionId sendTransaction(const std::vector& transfers, uint64_t fee, const std::string& extra = "", uint64_t mixIn = 0, uint64_t unlockTimestamp = 0) = 0; virtual std::error_code cancelTransaction(size_t transferId) = 0; virtual void getAccountKeys(WalletAccountKeys& keys) = 0; }; }