From 7466d482d48b62f0480ef80c34088d62f308d889 Mon Sep 17 00:00:00 2001 From: "evgenii.tagiltsev" <tagiltsev.evgenii@gmail.com> Date: Thu, 12 Dec 2019 12:58:11 +0100 Subject: [PATCH] [+] added class for creation transactions --- .../CellFrameDashboardGUI.pro | 6 ++-- .../DapCommandController.cpp | 13 ++++++- CellFrameDashboardGUI/DapCommandController.h | 7 ++++ .../DapServiceController.cpp | 3 ++ CellFrameDashboardGUI/DapServiceController.h | 1 + CellFrameDashboardGUI/DapTransaction.cpp | 22 ++++++++++++ CellFrameDashboardGUI/DapTransaction.h | 22 ++++++++++++ CellFrameDashboardGUI/main.cpp | 2 ++ .../CellFrameDashboardService.pro | 6 ++-- .../DapChainDashboardService.cpp | 7 ++++ .../DapChainDashboardService.h | 5 +++ .../DapChainTransaction.cpp | 34 +++++++++++++++++++ .../DapChainTransaction.h | 25 ++++++++++++++ libdap | 2 +- libdap-crypto | 2 +- libdap-qt | 2 +- libdap-qt-ui-qml | 2 +- 17 files changed, 152 insertions(+), 9 deletions(-) create mode 100644 CellFrameDashboardGUI/DapTransaction.cpp create mode 100644 CellFrameDashboardGUI/DapTransaction.h create mode 100644 CellFrameDashboardService/DapChainTransaction.cpp create mode 100644 CellFrameDashboardService/DapChainTransaction.h diff --git a/CellFrameDashboardGUI/CellFrameDashboardGUI.pro b/CellFrameDashboardGUI/CellFrameDashboardGUI.pro index be1d35cb2..370cf496b 100755 --- a/CellFrameDashboardGUI/CellFrameDashboardGUI.pro +++ b/CellFrameDashboardGUI/CellFrameDashboardGUI.pro @@ -80,7 +80,8 @@ SOURCES += \ $$PWD/DapServiceClientNativeLinux.cpp \ $$PWD/DapServiceClientNativeWin.cpp \ $$PWD/DapServiceClientNativeMacOS.cpp \ - $$PWD/DapChainWalletsModel.cpp + $$PWD/DapChainWalletsModel.cpp \ + DapTransaction.cpp RESOURCES += $$PWD/qml.qrc @@ -107,7 +108,8 @@ HEADERS += \ $$PWD/DapServiceClientNativeLinux.h \ $$PWD/DapServiceClientNativeWin.h \ $$PWD/DapChainWalletsModel.h \ - $$PWD/DapWalletFilterModel.h + $$PWD/DapWalletFilterModel.h \ + DapTransaction.h include (../libdap/libdap.pri) include (../libdap-crypto/libdap-crypto.pri) diff --git a/CellFrameDashboardGUI/DapCommandController.cpp b/CellFrameDashboardGUI/DapCommandController.cpp index e690e439f..5c430992f 100644 --- a/CellFrameDashboardGUI/DapCommandController.cpp +++ b/CellFrameDashboardGUI/DapCommandController.cpp @@ -79,7 +79,12 @@ void DapCommandController::changeCurrentNetwork(const QString& aNetwork) m_DAPRpcSocket->invokeRemoteMethod("RPCServer.changeCurrentNetwork", aNetwork); } -#include "DapChainWallet.h" +void DapCommandController::sendTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue) +{ + DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.createTransaction", aFromWallet, aToAddress, aToken, aNetwork, aValue); + connect(reply, SIGNAL(finished()), this, SLOT(processGetResultTransaction())); +} + void DapCommandController::setNewWalletData(const QVariant& aData) { emit sigWalletData(QByteArray::fromHex(aData.toByteArray())); @@ -223,6 +228,12 @@ void DapCommandController::processGetWalletData() emit sigWalletData(QByteArray::fromHex(result)); } +void DapCommandController::processGetResultTransaction() +{ + DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender()); + emit sendResponseTransaction(reply->response().toJsonValue().toBool()); +} + void DapCommandController::processGetNetworkList() { DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender()); diff --git a/CellFrameDashboardGUI/DapCommandController.h b/CellFrameDashboardGUI/DapCommandController.h index 8d4f4a5a8..ea41c1a7c 100644 --- a/CellFrameDashboardGUI/DapCommandController.h +++ b/CellFrameDashboardGUI/DapCommandController.h @@ -9,6 +9,7 @@ #include "DapRpcSocket.h" #include "DapRpcServiceProvider.h" #include "DapRpcService.h" +#include "DapChainWallet.h" /// Class command controller for service class DapCommandController : public DapRpcService, public DapRpcServiceProvider @@ -75,6 +76,8 @@ signals: // --------------------------------------------- void sigWalletData(QByteArray data); + void sendResponseTransaction(bool result); + public: /// Overloaded constructor. /// @param apIODevice Data transfer device. @@ -115,6 +118,8 @@ private slots: // --------------------------------------------- void processGetWalletData(); + void processGetResultTransaction(); + public slots: /// Show or hide GUI client by clicking on the tray icon. /// @param aIsActivated Accepts true - when requesting to @@ -174,6 +179,8 @@ public slots: void setNewWalletData(const QVariant& aData); void requestWalletData(); + + void sendTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue); }; #endif // COMMANDCONTROLLER_H diff --git a/CellFrameDashboardGUI/DapServiceController.cpp b/CellFrameDashboardGUI/DapServiceController.cpp index aaa03277b..1f21aa904 100644 --- a/CellFrameDashboardGUI/DapServiceController.cpp +++ b/CellFrameDashboardGUI/DapServiceController.cpp @@ -73,6 +73,9 @@ void DapServiceController::init(DapServiceClient *apDapServiceClient) connect(m_pDapCommandController, &DapCommandController::sigWalletData, &DapChainWalletModel::instance(), &DapChainWalletModel::setWalletData); + connect(&DapTransaction::instance(), &DapTransaction::sendTransaction, m_pDapCommandController, &DapCommandController::sendTransaction); + connect(m_pDapCommandController, &DapCommandController::sendResponseTransaction, &DapTransaction::instance(), &DapTransaction::receiveResult); + } QString DapServiceController::getBrand() const diff --git a/CellFrameDashboardGUI/DapServiceController.h b/CellFrameDashboardGUI/DapServiceController.h index f96d43b0d..27d08052e 100644 --- a/CellFrameDashboardGUI/DapServiceController.h +++ b/CellFrameDashboardGUI/DapServiceController.h @@ -17,6 +17,7 @@ #include "DapScreenHistoryModel.h" #include "DapSettingsNetworkModel.h" #include "DapConsoleModel.h" +#include "DapTransaction.h" #include "DapChainWalletModel.h" diff --git a/CellFrameDashboardGUI/DapTransaction.cpp b/CellFrameDashboardGUI/DapTransaction.cpp new file mode 100644 index 000000000..858e352e3 --- /dev/null +++ b/CellFrameDashboardGUI/DapTransaction.cpp @@ -0,0 +1,22 @@ +#include "DapTransaction.h" + +DapTransaction::DapTransaction(QObject *parent) : QObject(parent) +{ + +} + +DapTransaction& DapTransaction::instance() +{ + static DapTransaction instance; + return instance; +} + +void DapTransaction::createRequestTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue) +{ + emit sendTransaction(aFromWallet, aToAddress, aToken, aNetwork, aValue); +} + +void DapTransaction::receiveResult(const bool aSuccessful) +{ + emit sendResult(aSuccessful); +} diff --git a/CellFrameDashboardGUI/DapTransaction.h b/CellFrameDashboardGUI/DapTransaction.h new file mode 100644 index 000000000..a370b0d24 --- /dev/null +++ b/CellFrameDashboardGUI/DapTransaction.h @@ -0,0 +1,22 @@ +#ifndef DAPTRANSACTION_H +#define DAPTRANSACTION_H + +#include <QObject> + +class DapTransaction : public QObject +{ + Q_OBJECT +public: + explicit DapTransaction(QObject *parent = nullptr); + static DapTransaction& instance(); + +public slots: + void createRequestTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue); + void receiveResult(const bool aSuccessful); + +signals: + void sendResult(bool result); + void sendTransaction(const QString& fromWallet, const QString& toAddress, const QString& token, const QString& network, const quint64 value); +}; + +#endif // DAPTRANSACTION_H diff --git a/CellFrameDashboardGUI/main.cpp b/CellFrameDashboardGUI/main.cpp index 5551f3145..19f74a605 100644 --- a/CellFrameDashboardGUI/main.cpp +++ b/CellFrameDashboardGUI/main.cpp @@ -25,6 +25,7 @@ #include "DapConsoleModel.h" #include "DapChainConvertor.h" #include "DapClipboard.h" +#include "DapTransaction.h" #include "DapChainWalletModel.h" #include "DapWalletFilterModel.h" @@ -95,6 +96,7 @@ int main(int argc, char *argv[]) engine.rootContext()->setContextProperty("dapWalletFilterModel", &DapWalletFilterModel::instance()); engine.rootContext()->setContextProperty("dapWalletModel", &DapChainWalletModel::instance()); engine.rootContext()->setContextProperty("clipboard", &DapClipboard::instance()); + engine.rootContext()->setContextProperty("dapTransaction", &DapTransaction::instance()); engine.rootContext()->setContextProperty("pt", 1.3); engine.load(QUrl("qrc:/screen/main.qml")); diff --git a/CellFrameDashboardService/CellFrameDashboardService.pro b/CellFrameDashboardService/CellFrameDashboardService.pro index 58f806d02..e59c75465 100755 --- a/CellFrameDashboardService/CellFrameDashboardService.pro +++ b/CellFrameDashboardService/CellFrameDashboardService.pro @@ -54,7 +54,8 @@ SOURCES += \ $$PWD/DapChainWalletHandler.cpp \ $$PWD/DapChainLogHandler.cpp \ $$PWD/DapChainNetworkHandler.cpp \ - $$PWD/DapChainConsoleHandler.cpp + $$PWD/DapChainConsoleHandler.cpp \ + DapChainTransaction.cpp HEADERS += \ $$PWD/DapChainDashboardService.h \ @@ -65,7 +66,8 @@ HEADERS += \ $$PWD/DapChainWalletHandler.h \ $$PWD/DapChainLogHandler.h \ $$PWD/DapChainNetworkHandler.h \ - $$PWD/DapChainConsoleHandler.h + $$PWD/DapChainConsoleHandler.h \ + DapChainTransaction.h include (../libdap/libdap.pri) include (../libdap-crypto/libdap-crypto.pri) diff --git a/CellFrameDashboardService/DapChainDashboardService.cpp b/CellFrameDashboardService/DapChainDashboardService.cpp index 886a914b4..28aa41c49 100755 --- a/CellFrameDashboardService/DapChainDashboardService.cpp +++ b/CellFrameDashboardService/DapChainDashboardService.cpp @@ -26,6 +26,8 @@ DapChainDashboardService::DapChainDashboardService() : DapRpcService(nullptr) QObject::connect(m_pDapChainWalletHandler, &DapChainWalletHandler::walletDataChanged, this, &DapChainDashboardService::doSendNewWalletData); m_pDapChainWalletHandler->setNetworkList(m_pDapChainNetworkHandler->getNetworkList()); + m_pDapChainTransaction = new DapChainTransaction(this); + } bool DapChainDashboardService::start() @@ -222,3 +224,8 @@ QByteArray DapChainDashboardService::walletData() const { return m_pDapChainWalletHandler->walletData(); } + +bool DapChainDashboardService::createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue) +{ + return m_pDapChainTransaction->createTransaction(aFromWallet, aToAddress, aTokenName, aNetwork, aValue); +} diff --git a/CellFrameDashboardService/DapChainDashboardService.h b/CellFrameDashboardService/DapChainDashboardService.h index 27aa3f299..825e5b2d5 100755 --- a/CellFrameDashboardService/DapChainDashboardService.h +++ b/CellFrameDashboardService/DapChainDashboardService.h @@ -29,6 +29,7 @@ #include "DapChainHistoryHandler.h" #include "DapChainNetworkHandler.h" #include "DapChainConsoleHandler.h" +#include "DapChainTransaction.h" #include <QLocalServer> typedef class DapRpcLocalServer DapUiService; @@ -65,6 +66,8 @@ class DapChainDashboardService : public DapRpcService /// Recipient network's name DapChainNetworkHandler* m_pDapChainNetworkHandler {nullptr}; + DapChainTransaction* m_pDapChainTransaction {nullptr}; + public: /// Standard Ñonstructor. explicit DapChainDashboardService(); @@ -138,6 +141,8 @@ public slots: QByteArray walletData() const; + bool createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue); + private slots: /// Request new history request by handle wallet's name void doRequestWallets(); diff --git a/CellFrameDashboardService/DapChainTransaction.cpp b/CellFrameDashboardService/DapChainTransaction.cpp new file mode 100644 index 000000000..4bbc0f5ff --- /dev/null +++ b/CellFrameDashboardService/DapChainTransaction.cpp @@ -0,0 +1,34 @@ +#include "DapChainTransaction.h" + +DapChainTransaction::DapChainTransaction(QObject *parent) : QObject(parent) +{ + +} + +bool DapChainTransaction::createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue) const +{ + QProcess processCreate; + processCreate.start(QString("%1 tx_create -net %2 -chain gdb -from_wallet %3 -to_addr %4 -token %5 -value %6") + .arg(CLI_PATH) + .arg(aNetwork) + .arg(aFromWallet) + .arg(aToAddress) + .arg(aTokenName) + .arg(QString::number(aValue))); + processCreate.waitForFinished(-1); + QByteArray result = processCreate.readAll(); + + QRegExp rx("transfer=(\\w+)"); + rx.indexIn(result, 0); + + if(rx.cap(1) == "Ok") { + + QProcess processMempool; + processMempool.start(QString("%1 mempool_proc -net " + aNetwork +" -chain gdb").arg(CLI_PATH)); + processMempool.waitForFinished(-1); + processMempool.readAll(); + return true; + } + + return false; +} diff --git a/CellFrameDashboardService/DapChainTransaction.h b/CellFrameDashboardService/DapChainTransaction.h new file mode 100644 index 000000000..0434dee20 --- /dev/null +++ b/CellFrameDashboardService/DapChainTransaction.h @@ -0,0 +1,25 @@ +#ifndef DAPCHAINTRANSACTION_H +#define DAPCHAINTRANSACTION_H + +#include <QObject> +#include <QProcess> +#include <QDebug> + +class DapChainTransaction : public QObject +{ + Q_OBJECT + +public: + explicit DapChainTransaction(QObject *parent = nullptr); + + /// Request for creation new transaction + /// @param name of wallet + /// @param address of a receiver + /// @param name of token + /// @param name of network + /// @param sum for transaction + /// @return result of trying to do transaction + bool createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue) const; +}; + +#endif // DAPCHAINTRANSACTION_H diff --git a/libdap b/libdap index 1c0614797..ee6e8617e 160000 --- a/libdap +++ b/libdap @@ -1 +1 @@ -Subproject commit 1c0614797a3a2a2f4c179630025600e177637a65 +Subproject commit ee6e8617e1f589b45f15e327ed18cddfa87915f8 diff --git a/libdap-crypto b/libdap-crypto index c81202ba5..16a16e71b 160000 --- a/libdap-crypto +++ b/libdap-crypto @@ -1 +1 @@ -Subproject commit c81202ba5d48e5d77afcc8aea9962a10560527f3 +Subproject commit 16a16e71b9cfae4fd8df530ed8cd6146010ae7e0 diff --git a/libdap-qt b/libdap-qt index 5f661c223..712993499 160000 --- a/libdap-qt +++ b/libdap-qt @@ -1 +1 @@ -Subproject commit 5f661c223be1ccd39f0dfa104a44de0d9f9dfb35 +Subproject commit 7129934993bef42104cffbef8f983cde724afce2 diff --git a/libdap-qt-ui-qml b/libdap-qt-ui-qml index 8dfd465e9..4c38710d4 160000 --- a/libdap-qt-ui-qml +++ b/libdap-qt-ui-qml @@ -1 +1 @@ -Subproject commit 8dfd465e991656dca083c0fd3a0ff5825d61fe86 +Subproject commit 4c38710d45f7e5e7c3ba8139a964c886b4061f10 -- GitLab