X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fwalletmodel.h;h=84be46462249252e39b8cbc0af350130160d1605;hb=b0368da0e15b5506548da3462e14b038ca21ae69;hp=b141c0762dfebd4029b8f8630c5a002e9c238c96;hpb=b7bcaf940d27fa8cfe89422943fbeaab7a350930;p=novacoin.git diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index b141c07..84be464 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -2,28 +2,44 @@ #define WALLETMODEL_H #include -#include +#include +#include + +#include "allocators.h" /* for SecureString */ class OptionsModel; class AddressTableModel; class TransactionTableModel; class CWallet; - -struct SendCoinsRecipient +class CKeyID; +class CPubKey; +class COutput; +class COutPoint; +class uint256; +class CCoinControl; + +QT_BEGIN_NAMESPACE +class QTimer; +QT_END_NAMESPACE + +class SendCoinsRecipient { +public: QString address; QString label; qint64 amount; }; -// Interface to Bitcoin wallet from Qt view code +/** Interface to Bitcoin wallet from Qt view code. */ class WalletModel : public QObject { Q_OBJECT + public: explicit WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent = 0); + ~WalletModel(); - enum StatusCode + enum StatusCode // Returned by sendCoins { OK, InvalidAmount, @@ -31,10 +47,9 @@ public: AmountExceedsBalance, AmountWithFeeExceedsBalance, DuplicateAddress, - TransactionCreationFailed, + TransactionCreationFailed, // Error returned when wallet is still locked TransactionCommitFailed, - Aborted, - MiscError + Aborted }; enum EncryptionStatus @@ -49,7 +64,10 @@ public: TransactionTableModel *getTransactionTableModel(); qint64 getBalance() const; + void getBalance(qint64 &nTotal, qint64 &nWatchOnly) const; + qint64 getStake() const; qint64 getUnconfirmedBalance() const; + qint64 getImmatureBalance() const; int getNumTransactions() const; EncryptionStatus getEncryptionStatus() const; @@ -59,7 +77,7 @@ public: // Return status record for SendCoins, contains error id + information struct SendCoinsReturn { - SendCoinsReturn(StatusCode status, + SendCoinsReturn(StatusCode status=Aborted, qint64 fee=0, QString hex=QString()): status(status), fee(fee), hex(hex) {} @@ -69,13 +87,21 @@ public: }; // Send coins to a list of recipients - SendCoinsReturn sendCoins(const QList &recipients); + SendCoinsReturn sendCoins(const QList &recipients, const CCoinControl *coinControl=NULL); // Wallet encryption - bool setWalletEncrypted(bool encrypted, const std::string &passphrase); + bool setWalletEncrypted(bool encrypted, const SecureString &passphrase); // Passphrase only needed when unlocking - bool setWalletLocked(bool locked, const std::string &passPhrase=std::string()); - bool changePassphrase(const std::string &oldPass, const std::string &newPass); + bool setWalletLocked(bool locked, const SecureString &passPhrase=SecureString()); + bool changePassphrase(const SecureString &oldPass, const SecureString &newPass); + // Wallet backup + bool backupWallet(const QString &filename); + + bool dumpWallet(const QString &filename); + bool importWallet(const QString &filename); + + void getStakeWeight(quint64& nMinWeight, quint64& nMaxWeight, quint64& nWeight); + void getStakeWeightFromValue(const qint64& nTime, const qint64& nValue, quint64& nWeight); // RAI object for unlocking wallet, returned by requestUnlock() class UnlockContext @@ -86,12 +112,9 @@ public: bool isValid() const { return valid; } - UnlockContext(const UnlockContext& obj) - { CopyFrom(obj); } - private: - UnlockContext& operator=(const UnlockContext& rhs) - { CopyFrom(rhs); return *this; } - + // Copy operator and constructor transfer the context + UnlockContext(const UnlockContext& obj) { CopyFrom(obj); } + UnlockContext& operator=(const UnlockContext& rhs) { CopyFrom(rhs); return *this; } private: WalletModel *wallet; bool valid; @@ -102,6 +125,14 @@ public: UnlockContext requestUnlock(); + bool getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; + void getOutputs(const std::vector& vOutpoints, std::vector& vOutputs); + void listCoins(std::map >& mapCoins) const; + bool isLockedCoin(uint256 hash, unsigned int n) const; + void lockCoin(COutPoint& output); + void unlockCoin(COutPoint& output); + void listLockedCoins(std::vector& vOutpts); + private: CWallet *wallet; @@ -112,24 +143,49 @@ private: AddressTableModel *addressTableModel; TransactionTableModel *transactionTableModel; + // Cache some values to be able to detect changes qint64 cachedBalance; + qint64 cachedStake; qint64 cachedUnconfirmedBalance; + qint64 cachedImmatureBalance; qint64 cachedNumTransactions; EncryptionStatus cachedEncryptionStatus; + int cachedNumBlocks; + + QTimer *pollTimer; + + void subscribeToCoreSignals(); + void unsubscribeFromCoreSignals(); + void checkBalanceChanged(); + + +public slots: + /* Wallet status might have changed */ + void updateStatus(); + /* New transaction, or transaction changed status */ + void updateTransaction(const QString &hash, int status); + /* New, updated or removed address book entry */ + void updateAddressBook(const QString &address, const QString &label, bool isMine, int status); + /* Current, immature or unconfirmed balance might have changed - emit 'balanceChanged' if so */ + void pollBalanceChanged(); signals: - void balanceChanged(qint64 balance, qint64 unconfirmedBalance); + // Signal that balance in wallet changed + void balanceChanged(qint64 total, qint64 watchOnly, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance); + + // Number of transactions in wallet changed void numTransactionsChanged(int count); + + // Encryption status of wallet changed void encryptionStatusChanged(int status); + + // Signal emitted when wallet needs to be unlocked + // It is valid behaviour for listeners to keep the wallet locked after this signal; + // this means that the unlocking failed or was cancelled. void requireUnlock(); // Asynchronous error notification - void error(const QString &title, const QString &message); - -public slots: - -private slots: - void update(); + void error(const QString &title, const QString &message, bool modal); };