2016-02-15 13:04:00 -05: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 05:25:03 -04:00
|
|
|
#include <vector>
|
2016-04-20 06:01:00 -04:00
|
|
|
#include <ctime>
|
2016-02-15 13:04:00 -05:00
|
|
|
|
|
|
|
// Public interface for libwallet library
|
|
|
|
namespace Bitmonero {
|
|
|
|
|
2016-04-26 06:46:20 -04:00
|
|
|
namespace Utils {
|
|
|
|
bool isAddressLocal(const std::string &hostaddr);
|
|
|
|
}
|
2016-04-03 07:34:38 -04:00
|
|
|
/**
|
2016-04-19 05:25:03 -04:00
|
|
|
* @brief Transaction-like interface for sending money
|
2016-04-03 07:34:38 -04:00
|
|
|
*/
|
2016-04-05 08:24:44 -04:00
|
|
|
struct PendingTransaction
|
2016-04-03 07:34:38 -04:00
|
|
|
{
|
|
|
|
enum Status {
|
|
|
|
Status_Ok,
|
|
|
|
Status_Error
|
|
|
|
};
|
2016-04-05 08:24:44 -04:00
|
|
|
virtual ~PendingTransaction() = 0;
|
2016-04-03 07:34:38 -04:00
|
|
|
virtual int status() const = 0;
|
|
|
|
virtual std::string errorString() const = 0;
|
|
|
|
virtual bool commit() = 0;
|
2016-04-05 08:24:44 -04:00
|
|
|
virtual uint64_t amount() const = 0;
|
|
|
|
virtual uint64_t dust() const = 0;
|
|
|
|
virtual uint64_t fee() const = 0;
|
2016-04-03 07:34:38 -04:00
|
|
|
};
|
2016-02-15 13:04:00 -05:00
|
|
|
|
2016-04-19 05:25:03 -04:00
|
|
|
/**
|
|
|
|
* @brief The TransactionInfo - interface for displaying transaction information
|
|
|
|
*/
|
|
|
|
struct TransactionInfo
|
|
|
|
{
|
|
|
|
enum Direction {
|
|
|
|
Direction_In,
|
|
|
|
Direction_Out
|
|
|
|
};
|
2016-04-29 09:26:14 -04:00
|
|
|
|
|
|
|
struct Transfer {
|
|
|
|
Transfer(uint64_t _amount, const std::string &address);
|
|
|
|
const uint64_t amount;
|
|
|
|
const std::string address;
|
|
|
|
};
|
|
|
|
|
2016-04-22 06:21:08 -04:00
|
|
|
virtual ~TransactionInfo() = 0;
|
2016-04-20 06:01:00 -04:00
|
|
|
virtual int direction() const = 0;
|
2016-04-29 09:26:14 -04:00
|
|
|
virtual bool isPending() const = 0;
|
2016-04-19 05:25:03 -04:00
|
|
|
virtual bool isFailed() const = 0;
|
|
|
|
virtual uint64_t amount() const = 0;
|
|
|
|
virtual uint64_t fee() const = 0;
|
2016-04-22 06:21:08 -04:00
|
|
|
virtual uint64_t blockHeight() const = 0;
|
2016-04-29 09:26:14 -04:00
|
|
|
//! transaction_id
|
2016-04-22 06:21:08 -04:00
|
|
|
virtual std::string hash() const = 0;
|
2016-04-20 06:01:00 -04:00
|
|
|
virtual std::time_t timestamp() const = 0;
|
|
|
|
virtual std::string paymentId() const = 0;
|
2016-04-29 09:26:14 -04:00
|
|
|
//! only applicable for output transactions
|
|
|
|
virtual const std::vector<Transfer> & transfers() const = 0;
|
2016-04-19 05:25:03 -04:00
|
|
|
};
|
2016-04-22 06:21:08 -04: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 05:25:03 -04:00
|
|
|
|
2016-02-15 13:04:00 -05:00
|
|
|
/**
|
|
|
|
* @brief Interface for wallet operations.
|
|
|
|
* TODO: check if /include/IWallet.h is still actual
|
|
|
|
*/
|
|
|
|
struct Wallet
|
|
|
|
{
|
2016-03-10 11:43:10 -05:00
|
|
|
|
|
|
|
enum Status {
|
|
|
|
Status_Ok,
|
|
|
|
Status_Error
|
|
|
|
};
|
|
|
|
|
2016-02-21 13:18:16 -05: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 05:25:03 -04:00
|
|
|
// virtual void setListener(Listener * listener) = 0;
|
2016-03-10 11:43:10 -05: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 09:05:36 -05:00
|
|
|
virtual bool setPassword(const std::string &password) = 0;
|
2016-03-12 09:52:58 -05:00
|
|
|
virtual std::string address() const = 0;
|
2016-03-15 16:11:38 -04:00
|
|
|
virtual bool store(const std::string &path) = 0;
|
2016-03-25 10:06:30 -04:00
|
|
|
virtual bool init(const std::string &daemon_address, uint64_t upper_transaction_size_limit) = 0;
|
|
|
|
virtual bool connectToDaemon() = 0;
|
2016-04-26 06:46:20 -04:00
|
|
|
virtual void setTrustedDaemon(bool arg) = 0;
|
|
|
|
virtual bool trustedDaemon() const = 0;
|
2016-03-25 10:06:30 -04:00
|
|
|
virtual uint64_t balance() const = 0;
|
2016-03-31 05:48:41 -04:00
|
|
|
virtual uint64_t unlockedBalance() const = 0;
|
2016-04-05 08:24:44 -04:00
|
|
|
static std::string displayAmount(uint64_t amount);
|
2016-03-31 05:48:41 -04:00
|
|
|
// TODO?
|
|
|
|
// virtual uint64_t unlockedDustBalance() const = 0;
|
2016-03-31 09:38:57 -04:00
|
|
|
virtual bool refresh() = 0;
|
2016-04-05 08:24:44 -04:00
|
|
|
virtual PendingTransaction * createTransaction(const std::string &dst_addr, uint64_t amount) = 0;
|
|
|
|
virtual void disposeTransaction(PendingTransaction * t) = 0;
|
2016-04-19 05:25:03 -04:00
|
|
|
virtual TransactionHistory * history() const = 0;
|
2016-02-15 13:04:00 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief WalletManager - provides functions to manage wallets
|
|
|
|
*/
|
|
|
|
struct WalletManager
|
|
|
|
{
|
2016-03-11 09:05:36 -05: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 05:48:41 -04:00
|
|
|
virtual Wallet * createWallet(const std::string &path, const std::string &password, const std::string &language, bool testnet = false) = 0;
|
2016-03-10 11:43:10 -05:00
|
|
|
|
2016-03-11 09:05:36 -05: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 05:48:41 -04:00
|
|
|
virtual Wallet * openWallet(const std::string &path, const std::string &password, bool testnet = false) = 0;
|
2016-02-15 13:04:00 -05:00
|
|
|
|
2016-03-11 09:05:36 -05: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 05:48:41 -04:00
|
|
|
virtual Wallet * recoveryWallet(const std::string &path, const std::string &memo, bool testnet = false) = 0;
|
2016-03-11 09:05:36 -05: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 11:43:10 -05:00
|
|
|
virtual bool closeWallet(Wallet *wallet) = 0;
|
|
|
|
|
|
|
|
//! checks if wallet with the given name already exists
|
2016-02-20 11:04:56 -05:00
|
|
|
virtual bool walletExists(const std::string &path) = 0;
|
2016-02-15 13:04:00 -05:00
|
|
|
|
2016-03-10 11:43:10 -05:00
|
|
|
virtual std::string errorString() const = 0;
|
2016-03-25 10:06:30 -04:00
|
|
|
// //! set
|
|
|
|
// virtual void setDaemonAddress(const std::string &address) = 0;
|
2016-02-15 13:04:00 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct WalletManagerFactory
|
|
|
|
{
|
|
|
|
static WalletManager * getWalletManager();
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|