// Copyright 2019-2024 The Hush developers // Released under the GPLv3 #ifndef DATAMODEL_H #define DATAMODEL_H #include "camount.h" #include "precompiled.h" #include struct UnspentOutput { QString address; QString txid; CAmount amount; int blockCreated; bool spendable; bool pending; }; // Data class that holds all the data about the wallet. class DataModel { public: void replaceZaddresses(QList* newZ); void replaceTaddresses(QList* newZ); void replaceBalances(QMap* newBalances); void replaceUTXOs(QList* utxos); void markAddressUsed(QString address); void setLatestBlock(int blockHeight); int getLatestBlock() { QReadLocker locker(lock); return this->latestBlock; } void setEncryptionStatus(bool encrypted, bool locked) { this->isEncrypted = encrypted; this->isLocked = locked; } QPair getEncryptionStatus() { return qMakePair(this->isEncrypted, this->isLocked); } const QList getAllZAddresses() { QReadLocker locker(lock); return *zaddresses; } const QList getAllTAddresses() { QReadLocker locker(lock); return *taddresses; } const QList getUTXOs() { QReadLocker locker(lock); return *utxos; } const QMap getAllBalances() { QReadLocker locker(lock); return *balances; } const QMap getUsedAddresses() { QReadLocker locker(lock); return *usedAddresses; } CAmount getAvailableBalance() { QReadLocker locker(lock); return availableBalance; } void setAvailableBalance(CAmount a) { QReadLocker locker(lock); this->availableBalance = a; } CAmount getBalT() { QReadLocker locker(lock); return balT; } void setBalT(CAmount a) { QReadLocker locker(lock); this->balT = a; } CAmount getBalZ() { QReadLocker locker(lock); return balZ; } void setBalZ(CAmount a) { QReadLocker locker(lock); this->balZ = a; } CAmount getBalU() { QReadLocker locker(lock); return balU; } void setBalU(CAmount a) { QReadLocker locker(lock); this->balU = a; } CAmount getBalVerified() { QReadLocker locker(lock); return balVerified; } void setBalVerified(CAmount a) { QReadLocker locker(lock); this->balVerified = a; } CAmount getBalSpendable() { QReadLocker locker(lock); return balSpendable; } void setBalSpendable(CAmount a) { QReadLocker locker(lock); this->balSpendable = a; } CAmount getTotalPending() { QReadLocker locker(lock); return totalPending; } void setTotalPending(CAmount a) { QReadLocker locker(lock); this->totalPending = a; } DataModel(); ~DataModel(); private: int latestBlock; bool isEncrypted = false; bool isLocked = false; QList* utxos = nullptr; QMap* balances = nullptr; QMap* usedAddresses = nullptr; QList* zaddresses = nullptr; QList* taddresses = nullptr; CAmount availableBalance; CAmount totalPending; // Outgoing pending is -ve CAmount balT; CAmount balZ; CAmount balU; CAmount balVerified; CAmount balSpendable; QReadWriteLock* lock; }; #endif // DATAMODEL_H