Hush full node GUI wallet
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
5.5 KiB

6 years ago
#include "precompiled.h"
6 years ago
#include "mainwindow.h"
6 years ago
#include "settings.h"
Settings* Settings::instance = nullptr;
bool Settings::getSaveZtxs() {
6 years ago
// Load from the QT Settings.
return QSettings().value("options/savesenttx", true).toBool();
}
void Settings::setSaveZtxs(bool save) {
6 years ago
QSettings().setValue("options/savesenttx", save);
}
6 years ago
Settings* Settings::init() {
if (instance == nullptr)
instance = new Settings();
6 years ago
return instance;
}
Settings* Settings::getInstance() {
6 years ago
return instance;
6 years ago
}
Config Settings::getSettings() {
6 years ago
// Load from the QT Settings.
QSettings s;
auto host = s.value("connection/host").toString();
auto port = s.value("connection/port").toString();
auto username = s.value("connection/rpcuser").toString();
auto password = s.value("connection/rpcpassword").toString();
return Config{host, port, username, password};
}
6 years ago
void Settings::saveSettings(const QString& host, const QString& port, const QString& username, const QString& password) {
6 years ago
QSettings s;
6 years ago
s.setValue("connection/host", host);
s.setValue("connection/port", port);
s.setValue("connection/rpcuser", username);
s.setValue("connection/rpcpassword", password);
6 years ago
s.sync();
6 years ago
// re-init to load correct settings
init();
}
void Settings::setUsingZcashConf(QString confLocation) {
if (!confLocation.isEmpty())
_confLocation = confLocation;
}
bool Settings::isTestnet() {
6 years ago
return _isTestnet;
}
void Settings::setTestnet(bool isTestnet) {
6 years ago
this->_isTestnet = isTestnet;
}
bool Settings::isSaplingAddress(QString addr) {
6 years ago
return ( isTestnet() && addr.startsWith("ztestsapling")) ||
(!isTestnet() && addr.startsWith("zs"));
6 years ago
}
bool Settings::isSproutAddress(QString addr) {
6 years ago
return isZAddress(addr) && !isSaplingAddress(addr);
6 years ago
}
bool Settings::isZAddress(QString addr) {
6 years ago
return addr.startsWith("z");
}
bool Settings::isSyncing() {
6 years ago
return _isSyncing;
}
void Settings::setSyncing(bool syncing) {
6 years ago
this->_isSyncing = syncing;
}
int Settings::getBlockNumber() {
6 years ago
return this->_blockNumber;
}
void Settings::setBlockNumber(int number) {
6 years ago
this->_blockNumber = number;
}
bool Settings::isSaplingActive() {
6 years ago
return (isTestnet() && getBlockNumber() > 280000) ||
(!isTestnet() && getBlockNumber() > 419200);
}
double Settings::getZECPrice() {
6 years ago
return zecPrice;
}
QString Settings::getUSDFormat(double bal) {
if (!Settings::getInstance()->isTestnet() && Settings::getInstance()->getZECPrice() > 0)
return "$" + QLocale(QLocale::English).toString(bal * Settings::getInstance()->getZECPrice(), 'f', 2);
6 years ago
else
return QString();
}
QString Settings::getZECDisplayFormat(double bal) {
// This is idiotic. Why doesn't QString have a way to do this?
QString f = QString::number(bal, 'f', 8);
while (f.contains(".") && (f.right(1) == "0" || f.right(1) == ".")) {
f = f.left(f.length() - 1);
}
return f % " " % Settings::getTokenName();
}
QString Settings::getZECUSDDisplayFormat(double bal) {
6 years ago
auto usdFormat = getUSDFormat(bal);
if (!usdFormat.isEmpty())
return getZECDisplayFormat(bal) % " (" % getUSDFormat(bal) % ")";
else
return getZECDisplayFormat(bal);
6 years ago
}
void Settings::saveRestore(QDialog* d) {
d->restoreGeometry(QSettings().value(d->objectName() % "geometry").toByteArray());
QObject::connect(d, &QDialog::finished, [=](auto) {
QSettings().setValue(d->objectName() % "geometry", d->saveGeometry());
});
6 years ago
}
6 years ago
//=================================
// Static Stuff
//=================================
const QString Settings::txidStatusMessage = QString("Tx submitted (right click to copy) txid:");
const QString Settings::getTokenName() {
if (Settings::getInstance()->isTestnet()) {
return "TAZ";
} else {
return "ZEC";
}
}
const QString Settings::getDonationAddr(bool sapling) {
if (Settings::getInstance()->isTestnet())
if (sapling)
return "ztestsapling1wn6889vznyu42wzmkakl2effhllhpe4azhu696edg2x6me4kfsnmqwpglaxzs7tmqsq7kudemp5";
else
return "ztn6fYKBii4Fp4vbGhkPgrtLU4XjXp4ZBMZgShtopmDGbn1L2JLTYbBp2b7SSkNr9F3rQeNZ9idmoR7s4JCVUZ7iiM5byhF";
else
if (sapling)
return "zs1gv64eu0v2wx7raxqxlmj354y9ycznwaau9kduljzczxztvs4qcl00kn2sjxtejvrxnkucw5xx9u";
else
return "zcEgrceTwvoiFdEvPWcsJHAMrpLsprMF6aRJiQa3fan5ZphyXLPuHghnEPrEPRoEVzUy65GnMVyCTRdkT6BYBepnXh6NBYs";
}
const QString Settings::getDevSproutAddr() {
return "ztbGDqgkmXQjheivgeirwEvJLD4SUNqsWCGwxwVg4YpGz1ARR8P2rXaptkT14z3NDKamcxNmQuvmvktyokMs7HkutRNSx1D";
}
// Get the dev fee address based on the transaction
const QString Settings::getDevAddr(Tx) {
return QString();
}
double Settings::getMinerFee() {
return 0.0001;
}
double Settings::getZboardAmount() {
return 0.0001;
}
QString Settings::getZboardAddr() {
if (Settings::getInstance()->isTestnet()) {
return getDonationAddr(true);
}
else {
return "zs10m00rvkhfm4f7n23e4sxsx275r7ptnggx39ygl0vy46j9mdll5c97gl6dxgpk0njuptg2mn9w5s";
}
}
6 years ago
double Settings::getTotalFee() { return getMinerFee(); }
6 years ago
bool Settings::isValidAddress(QString addr) {
QRegExp zcexp("^z[a-z0-9]{94}$", Qt::CaseInsensitive);
QRegExp zsexp("^z[a-z0-9]{77}$", Qt::CaseInsensitive);
QRegExp ztsexp("^ztestsapling[a-z0-9]{76}", Qt::CaseInsensitive);
QRegExp texp("^t[a-z0-9]{34}$", Qt::CaseInsensitive);
return zcexp.exactMatch(addr) || texp.exactMatch(addr) ||
ztsexp.exactMatch(addr) || zsexp.exactMatch(addr);
}