aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet2_api.h
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2016-07-06 18:11:04 +0200
committerRiccardo Spagni <ric@spagni.net>2016-07-06 18:11:04 +0200
commitfc58069731074c07fb1e37f5cb7f5154d7f7097b (patch)
treef60b803315a789d3674e393ffca2f5b4397bd0a5 /src/wallet/wallet2_api.h
parentMerge pull request #870 (diff)
parentCMake: GPL 'libutils' script removed (diff)
downloadmonero-fc58069731074c07fb1e37f5cb7f5154d7f7097b.tar.xz
Merge pull request #872
beb6d92 CMake: GPL 'libutils' script removed (Ilya Kitaev) 4e5521d PendingTransactionImpl: pointer->reference (Ilya Kitaev) 7b7cf21 commented regex (Ilya Kitaev) eec0f57 Typo fixed (Ilya Kitaev) f1c4a37 Wallet::createTransaction: added mixin_count param (Ilya Kitaev) 3318add double/string to monero integer convertion methods (Ilya Kitaev) 3ac20a4 wallet::default_mixin exposed to public interface as Wallet::setDefaultMixin, Wallet::defaultMixin; wallet::create_transaction_2 used in Wallet::createTransaction (Ilya Kitaev) c554055 Wallet::filename, Wallet::keysFilename, tests for move wallet (Ilya Kitaev) 8f9d98b removed unused "using" (Ilya Kitaev) 2facbe7 Wallet API : WalletManager::findWallets() added (Ilya Kitaev) ec949c3 scripts for faster test wallets generation (Ilya Kitaev) 7f3d28f regenerated test wallets, basic functions got broken (Ilya Kitaev) 4327548 installing wallet_api header (Ilya Kitaev) 7ac1342 cmake: BUILD_TESTS as option explicitly; added missed dependency (Ilya Kitaev) 1f0d016 cmake libutils dependency added (Ilya Kitaev) d43ad22 all wallet dependencies merged to single static lib (Ilya Kitaev) 9ae4e87 WalletListener::moneyReceived test (Ilya Kitaev) 40087a7 WalletListener::moneySpent test (Ilya Kitaev) 27d86b7 WalletListener::moneySpent(), WalletListener::moneyReceived() (Ilya Kitaev) ff52c67 i_wallet_callback: virtual dtor (Ilya Kitaev) 5dbd2b8 started WalletListener (Ilya Kitaev) 71131a8 TransactionHistory continued (Ilya Kitaev) 9311934 TransactionHistory continued (Ilya Kitaev) 566166a merged with upstream (Ilya Kitaev) 53a97bd Wallet API: transaction history in progress (Ilya Kitaev) 02c9df5 Wallet API : transaction history in progress (Ilya Kitaev) a213887 transaction history api in progress (Ilya Kitaev) b6aaf53 transaction history api in progress (Ilya Kitaev) f83f3cb api implementation splitted over separate files (Ilya Kitaev) 4e1c2dc TransactionInfo / TransactionHistory APIs design (Ilya Kitaev) 1774d95 TODOs for Transaction/Transfer interface (Ilya Kitaev) d97e9ef Transaction API continued (Ilya Kitaev) 079fbd3 Wallet::createTransaction API introduced (Ilya Kitaev) ee5bb17 Wallet::transfer() continued (Ilya Kitaev) c37c856 Wallet::transfer in progress (Ilya Kitaev) 830c19c Wallet::refresh + tests (Ilya Kitaev) 1ae9cdc "testnet" is default parameter (Ilya Kitaev) 2157a9a testnet option, Wallet::balance(), Wallet::unlockedBalance() (Ilya Kitaev) 8790904 - testnet option added to api; (Ilya Kitaev) 2cce329 wallet2::store() implemented within wallet2::store_to (Ilya Kitaev) d608647 WalletManager::findWallets: searching by "keys" files instead of "address.txt" files (Ilya Kitaev) ca61153 Wallet: payment id and integrated address (Ilya Kitaev) 23cbf6f PendingTransactionImpl: pointer->reference (Ilya Kitaev) c1d9e7c commented regex (Ilya Kitaev) 563baf1 Typo fixed (Ilya Kitaev) 2efec04 Wallet::createTransaction: added mixin_count param (Ilya Kitaev) 85a6322 double/string to monero integer convertion methods (Ilya Kitaev) e7d8f2a wallet::default_mixin exposed to public interface as Wallet::setDefaultMixin, Wallet::defaultMixin; wallet::create_transaction_2 used in Wallet::createTransaction (Ilya Kitaev) a537489 Wallet::filename, Wallet::keysFilename, tests for move wallet (Ilya Kitaev) a1eddcd removed unused "using" (Ilya Kitaev) 8390bfa Wallet API : WalletManager::findWallets() added (Ilya Kitaev) 44cc0ef scripts for faster test wallets generation (Ilya Kitaev) 2060bfe regenerated test wallets, basic functions got broken (Ilya Kitaev) dbc0b03 installing wallet_api header (Ilya Kitaev) 653c7e3 cmake: BUILD_TESTS as option explicitly; added missed dependency (Ilya Kitaev) ef9a74c cmake libutils dependency added (Ilya Kitaev) 191cb59 all wallet dependencies merged to single static lib (Ilya Kitaev) 91eeeb8 WalletListener::moneyReceived test (Ilya Kitaev) 64348a2 WalletListener::moneySpent test (Ilya Kitaev) 060bb62 WalletListener::moneySpent(), WalletListener::moneyReceived() (Ilya Kitaev) 214014c i_wallet_callback: virtual dtor (Ilya Kitaev) 3745770 started WalletListener (Ilya Kitaev) e6fdd5d TransactionHistory continued (Ilya Kitaev) 3dd4b4c merged with upstream (Ilya Kitaev) d500272 Wallet API : transaction history in progress (Ilya Kitaev) 663ed04 transaction history api in progress (Ilya Kitaev) 12345d3 api implementation splitted over separate files (Ilya Kitaev) 60508e6 TransactionInfo / TransactionHistory APIs design (Ilya Kitaev) 951f3b5 Wallet::createTransaction API introduced (Ilya Kitaev) 7c51227 Wallet::transfer in progress (Ilya Kitaev) e04c67a Wallet::refresh + tests (Ilya Kitaev) 9cdf0b7 "testnet" is default parameter (Ilya Kitaev) caf0e02 testnet option, Wallet::balance(), Wallet::unlockedBalance() (Ilya Kitaev) 8df820b - testnet option added to api; (Ilya Kitaev) 94eaeb5 wallet2::store() implemented within wallet2::store_to (Ilya Kitaev)
Diffstat (limited to 'src/wallet/wallet2_api.h')
-rw-r--r--src/wallet/wallet2_api.h176
1 files changed, 165 insertions, 11 deletions
diff --git a/src/wallet/wallet2_api.h b/src/wallet/wallet2_api.h
index c7e7c536c..66987e4c5 100644
--- a/src/wallet/wallet2_api.h
+++ b/src/wallet/wallet2_api.h
@@ -32,10 +32,85 @@
#include <string>
+#include <vector>
+#include <ctime>
// Public interface for libwallet library
namespace Bitmonero {
+ namespace Utils {
+ bool isAddressLocal(const std::string &hostaddr);
+ }
+/**
+ * @brief Transaction-like interface for sending money
+ */
+struct PendingTransaction
+{
+ enum Status {
+ Status_Ok,
+ Status_Error
+ };
+ virtual ~PendingTransaction() = 0;
+ virtual int status() const = 0;
+ virtual std::string errorString() const = 0;
+ virtual bool commit() = 0;
+ virtual uint64_t amount() const = 0;
+ virtual uint64_t dust() const = 0;
+ virtual uint64_t fee() const = 0;
+};
+
+/**
+ * @brief The TransactionInfo - interface for displaying transaction information
+ */
+struct TransactionInfo
+{
+ enum Direction {
+ Direction_In,
+ Direction_Out
+ };
+
+ struct Transfer {
+ Transfer(uint64_t _amount, const std::string &address);
+ const uint64_t amount;
+ const std::string address;
+ };
+
+ virtual ~TransactionInfo() = 0;
+ virtual int direction() const = 0;
+ virtual bool isPending() const = 0;
+ virtual bool isFailed() const = 0;
+ virtual uint64_t amount() const = 0;
+ virtual uint64_t fee() const = 0;
+ virtual uint64_t blockHeight() const = 0;
+ //! transaction_id
+ virtual std::string hash() const = 0;
+ virtual std::time_t timestamp() const = 0;
+ virtual std::string paymentId() const = 0;
+ //! only applicable for output transactions
+ virtual const std::vector<Transfer> & transfers() const = 0;
+};
+/**
+ * @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;
+};
+
+
+struct WalletListener
+{
+ virtual ~WalletListener() = 0;
+ virtual void moneySpent(const std::string &txId, uint64_t amount) = 0;
+ virtual void moneyReceived(const std::string &txId, uint64_t amount) = 0;
+ // TODO: on_skip_transaction;
+};
+
/**
* @brief Interface for wallet operations.
@@ -43,30 +118,93 @@ namespace Bitmonero {
*/
struct Wallet
{
- // TODO define wallet interface (decide what needed from wallet2)
enum Status {
Status_Ok,
Status_Error
};
- struct Listener
- {
- // TODO
- };
-
virtual ~Wallet() = 0;
virtual std::string seed() const = 0;
virtual std::string getSeedLanguage() const = 0;
virtual void setSeedLanguage(const std::string &arg) = 0;
- virtual void setListener(Listener * listener) = 0;
//! 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;
virtual bool setPassword(const std::string &password) = 0;
virtual std::string address() const = 0;
+
+ /*!
+ * \brief integratedAddress - returns integrated address for current wallet address and given payment_id.
+ * if passed "payment_id" param is an empty string or not-valid payment id string
+ * (16 characters hexadecimal string) - random payment_id will be generated
+ *
+ * \param payment_id - 16 characters hexadecimal string or empty string if new random payment id needs to be
+ * generated
+ * \return - 106 characters string representing integrated address
+ */
+ virtual std::string integratedAddress(const std::string &payment_id) const = 0;
+
+ /*!
+ * \brief store - stores wallet to file.
+ * \param path - main filename to store wallet to. additionally stores address file and keys file.
+ * to store to the same file - just pass empty string;
+ * \return
+ */
virtual bool store(const std::string &path) = 0;
+ /*!
+ * \brief filename - returns wallet filename
+ * \return
+ */
+ virtual std::string filename() const = 0;
+ /*!
+ * \brief keysFilename - returns keys filename. usually this formed as "wallet_filename".keys
+ * \return
+ */
+ virtual std::string keysFilename() const = 0;
+
+ virtual bool init(const std::string &daemon_address, uint64_t upper_transaction_size_limit) = 0;
+ virtual bool connectToDaemon() = 0;
+ virtual void setTrustedDaemon(bool arg) = 0;
+ virtual bool trustedDaemon() const = 0;
+ virtual uint64_t balance() const = 0;
+ virtual uint64_t unlockedBalance() const = 0;
+
+ static std::string displayAmount(uint64_t amount);
+ static uint64_t amountFromString(const std::string &amount);
+ static uint64_t amountFromDouble(double amount);
+ static std::string genPaymentId();
+
+ // TODO?
+ // virtual uint64_t unlockedDustBalance() const = 0;
+ virtual bool refresh() = 0;
+ /*!
+ * \brief createTransaction creates transaction. if dst_addr is an integrated address, payment_id is ignored
+ * \param dst_addr destination address as string
+ * \param payment_id optional payment_id, can be empty string
+ * \param amount amount
+ * \param mixin_count mixin count. if 0 passed, wallet will use default value
+ * \return PendingTransaction object. caller is responsible to check PendingTransaction::status()
+ * after object returned
+ */
+
+ virtual PendingTransaction * createTransaction(const std::string &dst_addr, const std::string &payment_id,
+ uint64_t amount, uint32_t mixin_count) = 0;
+
+ virtual void disposeTransaction(PendingTransaction * t) = 0;
+ virtual TransactionHistory * history() const = 0;
+ virtual void setListener(WalletListener *) = 0;
+ /*!
+ * \brief defaultMixin - returns number of mixins used in transactions
+ * \return
+ */
+ virtual uint32_t defaultMixin() const = 0;
+ /*!
+ * \brief setDefaultMixin - setum number of mixins to be used for new transactions
+ * \param arg
+ */
+ virtual void setDefaultMixin(uint32_t arg) = 0;
};
/**
@@ -82,7 +220,7 @@ struct WalletManager
* \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)
*/
- virtual Wallet * createWallet(const std::string &path, const std::string &password, const std::string &language) = 0;
+ virtual Wallet * createWallet(const std::string &path, const std::string &password, const std::string &language, bool testnet = false) = 0;
/*!
* \brief Opens existing wallet
@@ -90,7 +228,7 @@ struct WalletManager
* \param password Password of wallet file
* \return Wallet instance (Wallet::status() needs to be called to check if opened successfully)
*/
- virtual Wallet * openWallet(const std::string &path, const std::string &password) = 0;
+ virtual Wallet * openWallet(const std::string &path, const std::string &password, bool testnet = false) = 0;
/*!
* \brief recovers existing wallet using memo (electrum seed)
@@ -98,7 +236,7 @@ struct WalletManager
* \param memo memo (25 words electrum seed)
* \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully)
*/
- virtual Wallet * recoveryWallet(const std::string &path, const std::string &memo) = 0;
+ virtual Wallet * recoveryWallet(const std::string &path, const std::string &memo, bool testnet = false) = 0;
/*!
* \brief Closes wallet. In case operation succeded, wallet object deleted. in case operation failed, wallet object not deleted
@@ -107,9 +245,25 @@ struct WalletManager
*/
virtual bool closeWallet(Wallet *wallet) = 0;
- //! checks if wallet with the given name already exists
+ /*
+ * ! checks if wallet with the given name already exists
+ */
+
+ /*!
+ * @brief TODO: delme walletExists - check if the given filename is the wallet
+ * @param path - filename
+ * @return
+ */
virtual bool walletExists(const std::string &path) = 0;
+ /*!
+ * \brief findWallets - searches for the wallet files by given path name recursively
+ * \param path - starting point to search
+ * \return - list of strings with found wallets (absolute paths);
+ */
+ virtual std::vector<std::string> findWallets(const std::string &path) = 0;
+
+ //! returns verbose error string regarding last error;
virtual std::string errorString() const = 0;
};