diff --git a/CellFrameDashboardGUI/DapCommandController.cpp b/CellFrameDashboardGUI/DapCommandController.cpp index e690e439f3bacb1310db3854b4fe52d1f6c2d468..88d41c62c99f4ca921366fe4d705dede0f5fa745 100644 --- a/CellFrameDashboardGUI/DapCommandController.cpp +++ b/CellFrameDashboardGUI/DapCommandController.cpp @@ -79,7 +79,17 @@ void DapCommandController::changeCurrentNetwork(const QString& aNetwork) m_DAPRpcSocket->invokeRemoteMethod("RPCServer.changeCurrentNetwork", aNetwork); } -#include "DapChainWallet.h" +void DapCommandController::sendMempool(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::takeFromMempool(const QString& aNetwork) +{ + m_DAPRpcSocket->invokeRemoteMethod("RPCServer.takeFromMempool", aNetwork); +} + void DapCommandController::setNewWalletData(const QVariant& aData) { emit sigWalletData(QByteArray::fromHex(aData.toByteArray())); @@ -223,6 +233,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 8d4f4a5a8dfb65928d3dd494665ed45dcaf08de9..e9bb6d3aff1ff882db05ebb1d44605f3a6bbb883 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. @@ -113,7 +116,10 @@ private slots: void processGetCmdHistory(); // --------------------------------------------- + /// Handling service response for get wallet data void processGetWalletData(); + /// Handling service response for get result of putting transaction to mempool + void processGetResultTransaction(); public slots: /// Show or hide GUI client by clicking on the tray icon. @@ -171,9 +177,22 @@ public slots: // --------------------------------------------- + /// Response wallet data + /// @param data void setNewWalletData(const QVariant& aData); - + /// Request wallet data void requestWalletData(); + /// 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 + void sendMempool(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue); + /// Taking everything from mempool + /// @param network + void takeFromMempool(const QString& aNetwork); }; #endif // COMMANDCONTROLLER_H diff --git a/CellFrameDashboardGUI/DapServiceController.cpp b/CellFrameDashboardGUI/DapServiceController.cpp index aaa03277b822a913b74d0e710247383c343579ec..d5cfc6d76e92547ac12e6e481bd3d17763a3ab0b 100644 --- a/CellFrameDashboardGUI/DapServiceController.cpp +++ b/CellFrameDashboardGUI/DapServiceController.cpp @@ -73,6 +73,7 @@ void DapServiceController::init(DapServiceClient *apDapServiceClient) connect(m_pDapCommandController, &DapCommandController::sigWalletData, &DapChainWalletModel::instance(), &DapChainWalletModel::setWalletData); + connect(m_pDapCommandController, &DapCommandController::sendResponseTransaction, this, &DapServiceController::resultMempool); } QString DapServiceController::getBrand() const @@ -281,6 +282,16 @@ QObject *DapServiceController::singletonProvider(QQmlEngine *engine, QJSEngine * return &getInstance(); } +void DapServiceController::createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue) +{ + m_pDapCommandController->sendMempool(aFromWallet, aToAddress, aToken, aNetwork, aValue); +} + +void DapServiceController::sendToken(const QString& aNetwork) +{ + m_pDapCommandController->takeFromMempool(aNetwork); +} + void DapServiceController::requestWalletData() { m_pDapCommandController->requestWalletData(); diff --git a/CellFrameDashboardGUI/DapServiceController.h b/CellFrameDashboardGUI/DapServiceController.h index f96d43b0d8d9288e23f4f32666d35f4475212123..fd767d9f13cf162279d035fdd4ea17435a220871 100644 --- a/CellFrameDashboardGUI/DapServiceController.h +++ b/CellFrameDashboardGUI/DapServiceController.h @@ -174,8 +174,15 @@ public slots: /// @param scriptEngine The QJSEngine class provides an environment for evaluating JavaScript code. static QObject *singletonProvider(QQmlEngine *engine, QJSEngine *scriptEngine); + void createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aToken, const QString& aNetwork, const quint64 aValue); + void sendToken(const QString& aNetwork); + public slots: + /// Request wallet data void requestWalletData(); + +signals: + void resultMempool(bool result); }; #endif // DAPSERVICECONTROLLER_H diff --git a/CellFrameDashboardGUI/main.cpp b/CellFrameDashboardGUI/main.cpp index f0c0595ff04cd5675b750c75ced6fb24a701e3ed..700a203cfdc93c1d85485b64c9ab86f27e66eec1 100644 --- a/CellFrameDashboardGUI/main.cpp +++ b/CellFrameDashboardGUI/main.cpp @@ -96,7 +96,6 @@ int main(int argc, char *argv[]) engine.rootContext()->setContextProperty("dapWalletModel", &DapChainWalletModel::instance()); engine.rootContext()->setContextProperty("clipboard", &DapClipboard::instance()); engine.rootContext()->setContextProperty("pt", 1.0); - engine.load(QUrl("qrc:/screen/main.qml")); if (engine.rootObjects().isEmpty()) diff --git a/CellFrameDashboardGUI/screen/DapUiQmlScreenMainWindowForm.ui.qml b/CellFrameDashboardGUI/screen/DapUiQmlScreenMainWindowForm.ui.qml index fefed83756ee79698c3ccb54fd451a3f8c68fa3e..2e11ad423c88e90fcd83fb4cb37eb6b437b35e02 100644 --- a/CellFrameDashboardGUI/screen/DapUiQmlScreenMainWindowForm.ui.qml +++ b/CellFrameDashboardGUI/screen/DapUiQmlScreenMainWindowForm.ui.qml @@ -125,7 +125,6 @@ Page { delegate: componentItemMainMenuTab clip: true interactive: false - currentIndex: 0 } focus: true } diff --git a/CellFrameDashboardService/CellFrameDashboardService.pro b/CellFrameDashboardService/CellFrameDashboardService.pro index 58f806d02d04cac6a19fb1d5bf42028e04947e99..e03e0a07991dd1f50cae6f3ed8def0abd796c4ff 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 \ + $$PWD/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 \ + $$PWD/DapChainTransaction.h include (../libdap/libdap.pri) include (../libdap-crypto/libdap-crypto.pri) diff --git a/CellFrameDashboardService/DapChainDashboardService.cpp b/CellFrameDashboardService/DapChainDashboardService.cpp index 886a914b422b2d10f8ea7b71aad6a17088eeb651..d33f84b96effb9a08199c5e960ba5fcac1ec3de6 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,13 @@ 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); +} + +void DapChainDashboardService::takeFromMempool(const QString& aNetwork) +{ + m_pDapChainTransaction->takeFromMempool(aNetwork); +} diff --git a/CellFrameDashboardService/DapChainDashboardService.h b/CellFrameDashboardService/DapChainDashboardService.h index 27aa3f299d9e7412bcd02d1de4eff291d6e019ab..808cfbc896ce5d78604c4ef09a0eab8696612b7a 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(); @@ -134,9 +137,24 @@ public slots: /// @return history of last 50 commands QString getCmdHistory() const; + /// Add new wallet + /// @param wallet name + /// @return sucessful or not bool appendWallet(const QString& aWalletName) const; - + /// Wallets data + /// @return data QByteArray walletData() const; + /// Putting new transaction in mempool + /// @param name of wallet + /// @param address of a receiver + /// @param name of token + /// @param name of network + /// @param sum for transaction + /// @return sucessful or not + bool createTransaction(const QString& aFromWallet, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue); + /// Taking everything from mempool + /// @param network + void takeFromMempool(const QString& aNetwork); private slots: /// Request new history request by handle wallet's name @@ -144,7 +162,8 @@ private slots: /// Send new history transaction to client /// @param New history transaction void doSendNewHistory(const QVariant& aData); - + /// Taking everything from mempool + /// @param network void doSendNewWalletData(const QByteArray& aData); }; diff --git a/CellFrameDashboardService/DapChainTransaction.cpp b/CellFrameDashboardService/DapChainTransaction.cpp new file mode 100644 index 0000000000000000000000000000000000000000..62f0ef9638aec207d30134d2e390f31de732ff15 --- /dev/null +++ b/CellFrameDashboardService/DapChainTransaction.cpp @@ -0,0 +1,38 @@ +#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") + { + return true; + } + + return false; +} + +void DapChainTransaction::takeFromMempool(const QString& aNetwork) +{ + QProcess processMempool; + processMempool.start(QString("%1 mempool_proc -net " + aNetwork +" -chain gdb").arg(CLI_PATH)); + processMempool.waitForFinished(-1); + processMempool.readAll(); +} diff --git a/CellFrameDashboardService/DapChainTransaction.h b/CellFrameDashboardService/DapChainTransaction.h new file mode 100644 index 0000000000000000000000000000000000000000..e7a3a3a5e4418fccd02acf59208a65fd733e21fd --- /dev/null +++ b/CellFrameDashboardService/DapChainTransaction.h @@ -0,0 +1,29 @@ +#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; + + /// Taking everything from mempool + /// @param network + void takeFromMempool(const QString& aNetwork); +}; + +#endif // DAPCHAINTRANSACTION_H diff --git a/CellFrameDashboardService/DapChainWalletHandler.cpp b/CellFrameDashboardService/DapChainWalletHandler.cpp index f3815d37d0b8e74dc1178af2c7944c51a8b7cd0b..fd61172fe0e2c4b658922572d765ad74ddb94baa 100755 --- a/CellFrameDashboardService/DapChainWalletHandler.cpp +++ b/CellFrameDashboardService/DapChainWalletHandler.cpp @@ -21,41 +21,6 @@ bool DapChainWalletHandler::appendWallet(const QString& aWalletName) return rx.indexIn(result, 0); } -bool DapChainWalletHandler::createTransaction(const QString& aFromAddress, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue) const -{ - QString fromWalletName; - for(int i = 0; i < m_walletList.count(); i++) - { - if(m_walletList[i].first.Address == aFromAddress) - fromWalletName = m_walletList[i].first.Name; - } - - if(fromWalletName.isEmpty() || !m_networkList.contains(aNetwork)) return false; - 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(fromWalletName) - .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; -} - QByteArray DapChainWalletHandler::walletData() const { QByteArray data; diff --git a/CellFrameDashboardService/DapChainWalletHandler.h b/CellFrameDashboardService/DapChainWalletHandler.h index 5a57b924abb8519b2a9a7d7d008bbc5d1d356eed..5b3d3cd46be657ce045f1870d50c0eda761f2f68 100755 --- a/CellFrameDashboardService/DapChainWalletHandler.h +++ b/CellFrameDashboardService/DapChainWalletHandler.h @@ -24,8 +24,6 @@ public: bool appendWallet(const QString& aWalletName); - bool createTransaction(const QString& aFromAddress, const QString& aToAddress, const QString& aTokenName, const QString& aNetwork, const quint64 aValue) const; - QByteArray walletData() const; private slots: diff --git a/libdap b/libdap index 1c0614797a3a2a2f4c179630025600e177637a65..ee6e8617e1f589b45f15e327ed18cddfa87915f8 160000 --- a/libdap +++ b/libdap @@ -1 +1 @@ -Subproject commit 1c0614797a3a2a2f4c179630025600e177637a65 +Subproject commit ee6e8617e1f589b45f15e327ed18cddfa87915f8 diff --git a/libdap-crypto b/libdap-crypto index c81202ba5d48e5d77afcc8aea9962a10560527f3..16a16e71b9cfae4fd8df530ed8cd6146010ae7e0 160000 --- a/libdap-crypto +++ b/libdap-crypto @@ -1 +1 @@ -Subproject commit c81202ba5d48e5d77afcc8aea9962a10560527f3 +Subproject commit 16a16e71b9cfae4fd8df530ed8cd6146010ae7e0 diff --git a/libdap-qt b/libdap-qt index 5f661c223be1ccd39f0dfa104a44de0d9f9dfb35..7129934993bef42104cffbef8f983cde724afce2 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 af9704c2619c8d8395625a72f16489f106fc487b..dd91e44d482c478322350fba08d8cf65292f163f 160000 --- a/libdap-qt-ui-qml +++ b/libdap-qt-ui-qml @@ -1 +1 @@ -Subproject commit af9704c2619c8d8395625a72f16489f106fc487b +Subproject commit dd91e44d482c478322350fba08d8cf65292f163f