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