2016-02-15 20:04:00 +02:00
|
|
|
// Copyright (c) 2014-2016, The Monero Project
|
|
|
|
//
|
|
|
|
// All rights reserved.
|
|
|
|
//
|
|
|
|
// Redistribution and use in source and binary forms, with or without modification, are
|
|
|
|
// permitted provided that the following conditions are met:
|
|
|
|
//
|
|
|
|
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
|
|
// conditions and the following disclaimer.
|
|
|
|
//
|
|
|
|
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
|
|
// of conditions and the following disclaimer in the documentation and/or other
|
|
|
|
// materials provided with the distribution.
|
|
|
|
//
|
|
|
|
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
|
|
|
// used to endorse or promote products derived from this software without specific
|
|
|
|
// prior written permission.
|
|
|
|
//
|
|
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
|
|
|
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
|
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
|
|
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
|
|
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
|
|
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
//
|
|
|
|
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <string>
|
2016-04-19 12:25:03 +03:00
|
|
|
#include <vector>
|
2016-04-20 13:01:00 +03:00
|
|
|
#include <ctime>
|
2016-02-15 20:04:00 +02:00
|
|
|
|
|
|
|
// Public interface for libwallet library
|
|
|
|
namespace Bitmonero {
|
|
|
|
|
2016-04-26 13:46:20 +03:00
|
|
|
namespace Utils {
|
|
|
|
bool isAddressLocal(const std::string &hostaddr);
|
|
|
|
}
|
2016-04-03 14:34:38 +03:00
|
|
|
/**
|
2016-04-19 12:25:03 +03:00
|
|
|
* @brief Transaction-like interface for sending money
|
2016-04-03 14:34:38 +03:00
|
|
|
*/
|
2016-04-05 15:24:44 +03:00
|
|
|
struct PendingTransaction
|
2016-04-03 14:34:38 +03:00
|
|
|
{
|
|
|
|
enum Status {
|
|
|
|
Status_Ok,
|
|
|
|
Status_Error
|
|
|
|
};
|
2016-04-05 15:24:44 +03:00
|
|
|
virtual ~PendingTransaction() = 0;
|
2016-04-03 14:34:38 +03:00
|
|
|
virtual int status() const = 0;
|
|
|
|
virtual std::string errorString() const = 0;
|
|
|
|
virtual bool commit() = 0;
|
2016-04-05 15:24:44 +03:00
|
|
|
virtual uint64_t amount() const = 0;
|
|
|
|
virtual uint64_t dust() const = 0;
|
|
|
|
virtual uint64_t fee() const = 0;
|
2016-04-03 14:34:38 +03:00
|
|
|
};
|
2016-02-15 20:04:00 +02:00
|
|
|
|
2016-04-19 12:25:03 +03:00
|
|
|
/**
|
|
|
|
* @brief The TransactionInfo - interface for displaying transaction information
|
|
|
|
*/
|
|
|
|
struct TransactionInfo
|
|
|
|
{
|
|
|
|
enum Direction {
|
|
|
|
Direction_In,
|
|
|
|
Direction_Out
|
|
|
|
};
|
2016-04-22 13:21:08 +03:00
|
|
|
virtual ~TransactionInfo() = 0;
|
2016-04-20 13:01:00 +03:00
|
|
|
virtual int direction() const = 0;
|
2016-04-19 12:25:03 +03:00
|
|
|
virtual bool isHold() const = 0;
|
|
|
|
virtual bool isFailed() const = 0;
|
|
|
|
virtual uint64_t amount() const = 0;
|
|
|
|
virtual uint64_t fee() const = 0;
|
2016-04-22 13:21:08 +03:00
|
|
|
virtual uint64_t blockHeight() const = 0;
|
|
|
|
virtual std::string hash() const = 0;
|
2016-04-20 13:01:00 +03:00
|
|
|
virtual std::time_t timestamp() const = 0;
|
|
|
|
virtual std::string paymentId() const = 0;
|
2016-04-19 12:25:03 +03:00
|
|
|
};
|
2016-04-22 13:21:08 +03:00
|
|
|
/**
|
|
|
|
* @brief The TransactionHistory - interface for displaying transaction history
|
|
|
|
*/
|
|
|
|
struct TransactionHistory
|
|
|
|
{
|
|
|
|
virtual ~TransactionHistory() = 0;
|
|
|
|
virtual int count() const = 0;
|
|
|
|
virtual TransactionInfo * transaction(int index) const = 0;
|
|
|
|
virtual TransactionInfo * transaction(const std::string &id) const = 0;
|
|
|
|
virtual std::vector<TransactionInfo*> getAll() const = 0;
|
|
|
|
virtual void refresh() = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2016-04-19 12:25:03 +03:00
|
|
|
|
2016-02-15 20:04:00 +02:00
|
|
|
/**
|
|
|
|
* @brief Interface for wallet operations.
|
|
|
|
* TODO: check if /include/IWallet.h is still actual
|
|
|
|
*/
|
|
|
|
struct Wallet
|
|
|
|
{
|
2016-03-10 18:43:10 +02:00
|
|
|
|
|
|
|
enum Status {
|
|
|
|
Status_Ok,
|
|
|
|
Status_Error
|
|
|
|
};
|
|
|
|
|
2016-02-21 20:18:16 +02:00
|
|
|
virtual ~Wallet() = 0;
|
|
|
|
virtual std::string seed() const = 0;
|
|
|
|
virtual std::string getSeedLanguage() const = 0;
|
|
|
|
virtual void setSeedLanguage(const std::string &arg) = 0;
|
2016-04-19 12:25:03 +03:00
|
|
|
// virtual void setListener(Listener * listener) = 0;
|
2016-03-10 18:43:10 +02:00
|
|
|
//! returns wallet status (Status_Ok | Status_Error)
|
|
|
|
virtual int status() const = 0;
|
|
|
|
//! in case error status, returns error string
|
|
|
|
virtual std::string errorString() const = 0;
|
2016-03-11 16:05:36 +02:00
|
|
|
virtual bool setPassword(const std::string &password) = 0;
|
2016-03-12 16:52:58 +02:00
|
|
|
virtual std::string address() const = 0;
|
2016-03-15 22:11:38 +02:00
|
|
|
virtual bool store(const std::string &path) = 0;
|
2016-03-25 16:06:30 +02:00
|
|
|
virtual bool init(const std::string &daemon_address, uint64_t upper_transaction_size_limit) = 0;
|
|
|
|
virtual bool connectToDaemon() = 0;
|
2016-04-26 13:46:20 +03:00
|
|
|
virtual void setTrustedDaemon(bool arg) = 0;
|
|
|
|
virtual bool trustedDaemon() const = 0;
|
2016-03-25 16:06:30 +02:00
|
|
|
virtual uint64_t balance() const = 0;
|
2016-03-31 12:48:41 +03:00
|
|
|
virtual uint64_t unlockedBalance() const = 0;
|
2016-04-05 15:24:44 +03:00
|
|
|
static std::string displayAmount(uint64_t amount);
|
2016-03-31 12:48:41 +03:00
|
|
|
// TODO?
|
|
|
|
// virtual uint64_t unlockedDustBalance() const = 0;
|
2016-03-31 16:38:57 +03:00
|
|
|
virtual bool refresh() = 0;
|
2016-04-05 15:24:44 +03:00
|
|
|
virtual PendingTransaction * createTransaction(const std::string &dst_addr, uint64_t amount) = 0;
|
|
|
|
virtual void disposeTransaction(PendingTransaction * t) = 0;
|
2016-04-19 12:25:03 +03:00
|
|
|
virtual TransactionHistory * history() const = 0;
|
2016-02-15 20:04:00 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief WalletManager - provides functions to manage wallets
|
|
|
|
*/
|
|
|
|
struct WalletManager
|
|
|
|
{
|
2016-03-11 16:05:36 +02:00
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Creates new wallet
|
|
|
|
* \param path Name of wallet file
|
|
|
|
* \param password Password of wallet file
|
|
|
|
* \param language Language to be used to generate electrum seed memo
|
|
|
|
* \return Wallet instance (Wallet::status() needs to be called to check if created successfully)
|
|
|
|
*/
|
2016-03-31 12:48:41 +03:00
|
|
|
virtual Wallet * createWallet(const std::string &path, const std::string &password, const std::string &language, bool testnet = false) = 0;
|
2016-03-10 18:43:10 +02:00
|
|
|
|
2016-03-11 16:05:36 +02:00
|
|
|
/*!
|
|
|
|
* \brief Opens existing wallet
|
|
|
|
* \param path Name of wallet file
|
|
|
|
* \param password Password of wallet file
|
|
|
|
* \return Wallet instance (Wallet::status() needs to be called to check if opened successfully)
|
|
|
|
*/
|
2016-03-31 12:48:41 +03:00
|
|
|
virtual Wallet * openWallet(const std::string &path, const std::string &password, bool testnet = false) = 0;
|
2016-02-15 20:04:00 +02:00
|
|
|
|
2016-03-11 16:05:36 +02:00
|
|
|
/*!
|
|
|
|
* \brief recovers existing wallet using memo (electrum seed)
|
|
|
|
* \param path Name of wallet file to be created
|
|
|
|
* \param memo memo (25 words electrum seed)
|
|
|
|
* \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully)
|
|
|
|
*/
|
2016-03-31 12:48:41 +03:00
|
|
|
virtual Wallet * recoveryWallet(const std::string &path, const std::string &memo, bool testnet = false) = 0;
|
2016-03-11 16:05:36 +02:00
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Closes wallet. In case operation succeded, wallet object deleted. in case operation failed, wallet object not deleted
|
|
|
|
* \param wallet previously opened / created wallet instance
|
|
|
|
* \return None
|
|
|
|
*/
|
2016-03-10 18:43:10 +02:00
|
|
|
virtual bool closeWallet(Wallet *wallet) = 0;
|
|
|
|
|
|
|
|
//! checks if wallet with the given name already exists
|
2016-02-20 18:04:56 +02:00
|
|
|
virtual bool walletExists(const std::string &path) = 0;
|
2016-02-15 20:04:00 +02:00
|
|
|
|
2016-03-10 18:43:10 +02:00
|
|
|
virtual std::string errorString() const = 0;
|
2016-03-25 16:06:30 +02:00
|
|
|
// //! set
|
|
|
|
// virtual void setDaemonAddress(const std::string &address) = 0;
|
2016-02-15 20:04:00 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct WalletManagerFactory
|
|
|
|
{
|
|
|
|
static WalletManager * getWalletManager();
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|