mirror of
https://github.com/AskDavis/Casinotest.git
synced 2026-01-06 13:09:46 -08:00
Initial commit.
This commit is contained in:
165
src/qt/walletmodel.h
Normal file
165
src/qt/walletmodel.h
Normal file
@@ -0,0 +1,165 @@
|
||||
#ifndef WALLETMODEL_H
|
||||
#define WALLETMODEL_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "allocators.h" /* for SecureString */
|
||||
|
||||
class OptionsModel;
|
||||
class AddressTableModel;
|
||||
class TransactionTableModel;
|
||||
class CWallet;
|
||||
|
||||
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. */
|
||||
class WalletModel : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent = 0);
|
||||
~WalletModel();
|
||||
|
||||
enum StatusCode // Returned by sendCoins
|
||||
{
|
||||
OK,
|
||||
InvalidAmount,
|
||||
InvalidAddress,
|
||||
AmountExceedsBalance,
|
||||
AmountWithFeeExceedsBalance,
|
||||
DuplicateAddress,
|
||||
TransactionCreationFailed, // Error returned when wallet is still locked
|
||||
TransactionCommitFailed,
|
||||
Aborted
|
||||
};
|
||||
|
||||
enum EncryptionStatus
|
||||
{
|
||||
Unencrypted, // !wallet->IsCrypted()
|
||||
Locked, // wallet->IsCrypted() && wallet->IsLocked()
|
||||
Unlocked // wallet->IsCrypted() && !wallet->IsLocked()
|
||||
};
|
||||
|
||||
OptionsModel *getOptionsModel();
|
||||
AddressTableModel *getAddressTableModel();
|
||||
TransactionTableModel *getTransactionTableModel();
|
||||
|
||||
qint64 getBalance() const;
|
||||
qint64 getUnconfirmedBalance() const;
|
||||
qint64 getImmatureBalance() const;
|
||||
int getNumTransactions() const;
|
||||
EncryptionStatus getEncryptionStatus() const;
|
||||
|
||||
// Check address for validity
|
||||
bool validateAddress(const QString &address);
|
||||
|
||||
// Return status record for SendCoins, contains error id + information
|
||||
struct SendCoinsReturn
|
||||
{
|
||||
SendCoinsReturn(StatusCode status,
|
||||
qint64 fee=0,
|
||||
QString hex=QString()):
|
||||
status(status), fee(fee), hex(hex) {}
|
||||
StatusCode status;
|
||||
qint64 fee; // is used in case status is "AmountWithFeeExceedsBalance"
|
||||
QString hex; // is filled with the transaction hash if status is "OK"
|
||||
};
|
||||
|
||||
// Send coins to a list of recipients
|
||||
SendCoinsReturn sendCoins(const QList<SendCoinsRecipient> &recipients);
|
||||
|
||||
// Wallet encryption
|
||||
bool setWalletEncrypted(bool encrypted, const SecureString &passphrase);
|
||||
// Passphrase only needed when unlocking
|
||||
bool setWalletLocked(bool locked, const SecureString &passPhrase=SecureString());
|
||||
bool changePassphrase(const SecureString &oldPass, const SecureString &newPass);
|
||||
// Wallet backup
|
||||
bool backupWallet(const QString &filename);
|
||||
|
||||
// RAI object for unlocking wallet, returned by requestUnlock()
|
||||
class UnlockContext
|
||||
{
|
||||
public:
|
||||
UnlockContext(WalletModel *wallet, bool valid, bool relock);
|
||||
~UnlockContext();
|
||||
|
||||
bool isValid() const { return valid; }
|
||||
|
||||
// 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;
|
||||
mutable bool relock; // mutable, as it can be set to false by copying
|
||||
|
||||
void CopyFrom(const UnlockContext& rhs);
|
||||
};
|
||||
|
||||
UnlockContext requestUnlock();
|
||||
|
||||
private:
|
||||
CWallet *wallet;
|
||||
|
||||
// Wallet has an options model for wallet-specific options
|
||||
// (transaction fee, for example)
|
||||
OptionsModel *optionsModel;
|
||||
|
||||
AddressTableModel *addressTableModel;
|
||||
TransactionTableModel *transactionTableModel;
|
||||
|
||||
// Cache some values to be able to detect changes
|
||||
qint64 cachedBalance;
|
||||
qint64 cachedUnconfirmedBalance;
|
||||
qint64 cachedImmatureBalance;
|
||||
qint64 cachedNumTransactions;
|
||||
EncryptionStatus cachedEncryptionStatus;
|
||||
int cachedNumBlocks;
|
||||
|
||||
QTimer *pollTimer;
|
||||
|
||||
void subscribeToCoreSignals();
|
||||
void unsubscribeFromCoreSignals();
|
||||
void checkBalanceChanged();
|
||||
|
||||
signals:
|
||||
// Signal that balance in wallet changed
|
||||
void balanceChanged(qint64 balance, 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, bool modal);
|
||||
|
||||
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();
|
||||
};
|
||||
|
||||
|
||||
#endif // WALLETMODEL_H
|
||||
Reference in New Issue
Block a user