171 - Validate address
This commit is contained in:
parent
df1cbe6570
commit
1219651f76
|
@ -1,6 +1,7 @@
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "addressbook.h"
|
#include "addressbook.h"
|
||||||
#include "viewalladdresses.h"
|
#include "viewalladdresses.h"
|
||||||
|
#include "validateaddress.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
#include "ui_mobileappconnector.h"
|
#include "ui_mobileappconnector.h"
|
||||||
#include "ui_addressbook.h"
|
#include "ui_addressbook.h"
|
||||||
|
@ -11,6 +12,7 @@
|
||||||
#include "ui_turnstile.h"
|
#include "ui_turnstile.h"
|
||||||
#include "ui_turnstileprogress.h"
|
#include "ui_turnstileprogress.h"
|
||||||
#include "ui_viewalladdresses.h"
|
#include "ui_viewalladdresses.h"
|
||||||
|
#include "ui_validateaddress.h"
|
||||||
#include "rpc.h"
|
#include "rpc.h"
|
||||||
#include "balancestablemodel.h"
|
#include "balancestablemodel.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
@ -83,6 +85,9 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
// z-Board.net
|
// z-Board.net
|
||||||
QObject::connect(ui->actionz_board_net, &QAction::triggered, this, &MainWindow::postToZBoard);
|
QObject::connect(ui->actionz_board_net, &QAction::triggered, this, &MainWindow::postToZBoard);
|
||||||
|
|
||||||
|
// Validate Address
|
||||||
|
QObject::connect(ui->actionValidate_Address, &QAction::triggered, this, &MainWindow::validateAddress);
|
||||||
|
|
||||||
// Connect mobile app
|
// Connect mobile app
|
||||||
QObject::connect(ui->actionConnect_Mobile_App, &QAction::triggered, this, [=] () {
|
QObject::connect(ui->actionConnect_Mobile_App, &QAction::triggered, this, [=] () {
|
||||||
if (rpc->getConnection() == nullptr)
|
if (rpc->getConnection() == nullptr)
|
||||||
|
@ -644,6 +649,48 @@ void MainWindow::donate() {
|
||||||
ui->tabWidget->setCurrentIndex(1);
|
ui->tabWidget->setCurrentIndex(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate an address
|
||||||
|
*/
|
||||||
|
void MainWindow::validateAddress() {
|
||||||
|
// Make sure everything is up and running
|
||||||
|
if (!getRPC() || !getRPC()->getConnection())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// First thing is ask the user for an address
|
||||||
|
bool ok;
|
||||||
|
auto address = QInputDialog::getText(this, tr("Enter Address to validate"),
|
||||||
|
tr("Transparent or Shielded Address:") + QString(" ").repeated(140), // Pad the label so the dialog box is wide enough
|
||||||
|
QLineEdit::Normal, "", &ok);
|
||||||
|
if (!ok)
|
||||||
|
return;
|
||||||
|
|
||||||
|
getRPC()->validateAddress(address, [=] (json props) {
|
||||||
|
QDialog d(this);
|
||||||
|
Ui_ValidateAddress va;
|
||||||
|
va.setupUi(&d);
|
||||||
|
Settings::saveRestore(&d);
|
||||||
|
Settings::saveRestoreTableHeader(va.tblProps, &d, "validateaddressprops");
|
||||||
|
va.tblProps->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
|
||||||
|
va.lblAddress->setText(address);
|
||||||
|
|
||||||
|
QList<QPair<QString, QString>> propsList;
|
||||||
|
for (auto it = props.begin(); it != props.end(); it++) {
|
||||||
|
|
||||||
|
propsList.append(
|
||||||
|
QPair<QString, QString>(
|
||||||
|
QString::fromStdString(it.key()), QString::fromStdString(it.value().dump()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
ValidateAddressesModel model(va.tblProps, propsList);
|
||||||
|
va.tblProps->setModel(&model);
|
||||||
|
|
||||||
|
d.exec();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::postToZBoard() {
|
void MainWindow::postToZBoard() {
|
||||||
QDialog d(this);
|
QDialog d(this);
|
||||||
|
@ -1233,7 +1280,6 @@ void MainWindow::setupTransactionsTab() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::addNewZaddr(bool sapling) {
|
void MainWindow::addNewZaddr(bool sapling) {
|
||||||
|
|
||||||
rpc->newZaddr(sapling, [=] (json reply) {
|
rpc->newZaddr(sapling, [=] (json reply) {
|
||||||
QString addr = QString::fromStdString(reply.get<json::string_t>());
|
QString addr = QString::fromStdString(reply.get<json::string_t>());
|
||||||
// Make sure the RPC class reloads the z-addrs for future use
|
// Make sure the RPC class reloads the z-addrs for future use
|
||||||
|
@ -1325,6 +1371,7 @@ void MainWindow::setupReceiveTab() {
|
||||||
viewaddrs.setupUi(&d);
|
viewaddrs.setupUi(&d);
|
||||||
Settings::saveRestore(&d);
|
Settings::saveRestore(&d);
|
||||||
Settings::saveRestoreTableHeader(viewaddrs.tblAddresses, &d, "viewalladdressestable");
|
Settings::saveRestoreTableHeader(viewaddrs.tblAddresses, &d, "viewalladdressestable");
|
||||||
|
viewaddrs.tblAddresses->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
|
||||||
ViewAllAddressesModel model(viewaddrs.tblAddresses, *getRPC()->getAllTAddresses(), getRPC());
|
ViewAllAddressesModel model(viewaddrs.tblAddresses, *getRPC()->getAllTAddresses(), getRPC());
|
||||||
viewaddrs.tblAddresses->setModel(&model);
|
viewaddrs.tblAddresses->setModel(&model);
|
||||||
|
|
|
@ -58,6 +58,8 @@ public:
|
||||||
void balancesReady();
|
void balancesReady();
|
||||||
void payZcashURI(QString uri = "", QString myAddr = "");
|
void payZcashURI(QString uri = "", QString myAddr = "");
|
||||||
|
|
||||||
|
void validateAddress();
|
||||||
|
|
||||||
void updateLabels();
|
void updateLabels();
|
||||||
void updateTAddrCombo(bool checked);
|
void updateTAddrCombo(bool checked);
|
||||||
void updateFromCombo();
|
void updateFromCombo();
|
||||||
|
|
|
@ -1084,6 +1084,7 @@
|
||||||
<string>&Apps</string>
|
<string>&Apps</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionConnect_Mobile_App"/>
|
<addaction name="actionConnect_Mobile_App"/>
|
||||||
|
<addaction name="actionValidate_Address"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionz_board_net"/>
|
<addaction name="actionz_board_net"/>
|
||||||
<addaction name="actionTurnstile_Migration"/>
|
<addaction name="actionTurnstile_Migration"/>
|
||||||
|
@ -1202,6 +1203,11 @@
|
||||||
<string>File a bug...</string>
|
<string>File a bug...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionValidate_Address">
|
||||||
|
<property name="text">
|
||||||
|
<string>Validate Address</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
|
12
src/rpc.cpp
12
src/rpc.cpp
|
@ -219,6 +219,18 @@ void RPC::importTPrivKey(QString addr, bool rescan, const std::function<void(jso
|
||||||
conn->doRPCWithDefaultErrorHandling(payload, cb);
|
conn->doRPCWithDefaultErrorHandling(payload, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RPC::validateAddress(QString address, const std::function<void(json)>& cb) {
|
||||||
|
QString method = address.startsWith("z") ? "z_validateaddress" : "validateaddress";
|
||||||
|
|
||||||
|
json payload = {
|
||||||
|
{"jsonrpc", "1.0"},
|
||||||
|
{"id", "someid"},
|
||||||
|
{"method", method.toStdString() },
|
||||||
|
{"params", { address.toStdString() } },
|
||||||
|
};
|
||||||
|
|
||||||
|
conn->doRPCWithDefaultErrorHandling(payload, cb);
|
||||||
|
}
|
||||||
|
|
||||||
void RPC::getBalance(const std::function<void(json)>& cb) {
|
void RPC::getBalance(const std::function<void(json)>& cb) {
|
||||||
json payload = {
|
json payload = {
|
||||||
|
|
|
@ -84,6 +84,7 @@ public:
|
||||||
void getTPrivKey(QString addr, const std::function<void(json)>& cb);
|
void getTPrivKey(QString addr, const std::function<void(json)>& cb);
|
||||||
void importZPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
|
void importZPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
|
||||||
void importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
|
void importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
|
||||||
|
void validateAddress(QString address, const std::function<void(json)>& cb);
|
||||||
|
|
||||||
void shutdownZcashd();
|
void shutdownZcashd();
|
||||||
void noConnection();
|
void noConnection();
|
||||||
|
@ -121,7 +122,6 @@ private:
|
||||||
void getZAddresses (const std::function<void(json)>& cb);
|
void getZAddresses (const std::function<void(json)>& cb);
|
||||||
void getTAddresses (const std::function<void(json)>& cb);
|
void getTAddresses (const std::function<void(json)>& cb);
|
||||||
|
|
||||||
|
|
||||||
Connection* conn = nullptr;
|
Connection* conn = nullptr;
|
||||||
QProcess* ezcashd = nullptr;
|
QProcess* ezcashd = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include "validateaddress.h"
|
||||||
|
|
||||||
|
|
||||||
|
ValidateAddressesModel::ValidateAddressesModel(QTableView *parent, QList<QPair<QString, QString>> props)
|
||||||
|
: QAbstractTableModel(parent) {
|
||||||
|
headers << tr("Property") << tr("Value");
|
||||||
|
this->props = props;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ValidateAddressesModel::rowCount(const QModelIndex&) const {
|
||||||
|
return props.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ValidateAddressesModel::columnCount(const QModelIndex&) const {
|
||||||
|
return headers.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant ValidateAddressesModel::data(const QModelIndex &index, int role) const {
|
||||||
|
QPair<QString, QString> p = props.at(index.row());
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
switch(index.column()) {
|
||||||
|
case 0: return p.first;
|
||||||
|
case 1: return p.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QVariant ValidateAddressesModel::headerData(int section, Qt::Orientation orientation, int role) const {
|
||||||
|
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
|
||||||
|
return headers.at(section);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef VALIDATEADDRESS_H
|
||||||
|
#define VALIDATEADDRESS_H
|
||||||
|
|
||||||
|
#include "precompiled.h"
|
||||||
|
|
||||||
|
class ValidateAddressesModel : public QAbstractTableModel {
|
||||||
|
|
||||||
|
public:
|
||||||
|
ValidateAddressesModel(QTableView* parent, QList<QPair<QString, QString>> props);
|
||||||
|
~ValidateAddressesModel() = default;
|
||||||
|
|
||||||
|
int rowCount(const QModelIndex &parent) const;
|
||||||
|
int columnCount(const QModelIndex &parent) const;
|
||||||
|
QVariant data(const QModelIndex &index, int role) const;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<QPair<QString, QString>> props;
|
||||||
|
QStringList headers;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // VALIDATEADDRESS_H
|
|
@ -0,0 +1,85 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ValidateAddress</class>
|
||||||
|
<widget class="QDialog" name="ValidateAddress">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Validate Address</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="lblAddress">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Address:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QTableView" name="tblProps">
|
||||||
|
<attribute name="horizontalHeaderStretchLastSection">
|
||||||
|
<bool>true</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Close</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>ValidateAddress</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>ValidateAddress</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
|
@ -53,6 +53,7 @@ SOURCES += \
|
||||||
src/addressbook.cpp \
|
src/addressbook.cpp \
|
||||||
src/logger.cpp \
|
src/logger.cpp \
|
||||||
src/addresscombo.cpp \
|
src/addresscombo.cpp \
|
||||||
|
src/validateaddress.cpp \
|
||||||
src/websockets.cpp \
|
src/websockets.cpp \
|
||||||
src/mobileappconnector.cpp \
|
src/mobileappconnector.cpp \
|
||||||
src/recurring.cpp \
|
src/recurring.cpp \
|
||||||
|
@ -78,13 +79,14 @@ HEADERS += \
|
||||||
src/fillediconlabel.h \
|
src/fillediconlabel.h \
|
||||||
src/addressbook.h \
|
src/addressbook.h \
|
||||||
src/logger.h \
|
src/logger.h \
|
||||||
src/addresscombo.h \
|
src/addresscombo.h \
|
||||||
|
src/validateaddress.h \
|
||||||
src/websockets.h \
|
src/websockets.h \
|
||||||
src/mobileappconnector.h \
|
src/mobileappconnector.h \
|
||||||
src/recurring.h \
|
src/recurring.h \
|
||||||
src/requestdialog.h \
|
src/requestdialog.h \
|
||||||
src/memoedit.h \
|
src/memoedit.h \
|
||||||
src/viewalladdresses.h
|
src/viewalladdresses.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
src/mainwindow.ui \
|
src/mainwindow.ui \
|
||||||
|
@ -97,6 +99,7 @@ FORMS += \
|
||||||
src/turnstileprogress.ui \
|
src/turnstileprogress.ui \
|
||||||
src/privkey.ui \
|
src/privkey.ui \
|
||||||
src/memodialog.ui \
|
src/memodialog.ui \
|
||||||
|
src/validateaddress.ui \
|
||||||
src/viewalladdresses.ui \
|
src/viewalladdresses.ui \
|
||||||
src/connection.ui \
|
src/connection.ui \
|
||||||
src/zboard.ui \
|
src/zboard.ui \
|
||||||
|
|
Loading…
Reference in New Issue