diff options
| author | Jaquee <jaquee.monero@gmail.com> | 2017-01-12 20:53:27 +0100 |
|---|---|---|
| committer | Jaquee <jaquee.monero@gmail.com> | 2017-01-15 12:32:31 +0100 |
| commit | 15c79df378db97b713150d92390a013e63044128 (patch) | |
| tree | 19e9d2b60eb0bc837eecfc4344746c0ed6a3a8bc /src | |
| parent | fd983955b4dbdbd612fbdf5ed08d8c8a049fb840 (diff) | |
| download | monzero-gui-15c79df378db97b713150d92390a013e63044128.tar.gz monzero-gui-15c79df378db97b713150d92390a013e63044128.tar.xz monzero-gui-15c79df378db97b713150d92390a013e63044128.zip | |
GUI cold signing
Diffstat (limited to 'src')
| -rw-r--r-- | src/libwalletqt/PendingTransaction.cpp | 10 | ||||
| -rw-r--r-- | src/libwalletqt/PendingTransaction.h | 2 | ||||
| -rw-r--r-- | src/libwalletqt/UnsignedTransaction.cpp | 89 | ||||
| -rw-r--r-- | src/libwalletqt/UnsignedTransaction.h | 58 | ||||
| -rw-r--r-- | src/libwalletqt/Wallet.cpp | 21 | ||||
| -rw-r--r-- | src/libwalletqt/Wallet.h | 11 |
6 files changed, 189 insertions, 2 deletions
diff --git a/src/libwalletqt/PendingTransaction.cpp b/src/libwalletqt/PendingTransaction.cpp index 8df7ad28..bd621d6c 100644 --- a/src/libwalletqt/PendingTransaction.cpp +++ b/src/libwalletqt/PendingTransaction.cpp @@ -13,7 +13,10 @@ QString PendingTransaction::errorString() const bool PendingTransaction::commit() { - return m_pimpl->commit(); + // Save transaction to file if fileName is set. + if(!m_fileName.isEmpty()) + return m_pimpl->commit(m_fileName.toStdString()); + return m_pimpl->commit(m_fileName.toStdString()); } quint64 PendingTransaction::amount() const @@ -47,6 +50,11 @@ quint64 PendingTransaction::txCount() const return m_pimpl->txCount(); } +void PendingTransaction::setFilename(const QString &fileName) +{ + m_fileName = fileName; +} + PendingTransaction::PendingTransaction(Monero::PendingTransaction *pt, QObject *parent) : QObject(parent), m_pimpl(pt) { diff --git a/src/libwalletqt/PendingTransaction.h b/src/libwalletqt/PendingTransaction.h index ad2cb275..a20264e6 100644 --- a/src/libwalletqt/PendingTransaction.h +++ b/src/libwalletqt/PendingTransaction.h @@ -44,6 +44,7 @@ public: quint64 fee() const; QStringList txid() const; quint64 txCount() const; + Q_INVOKABLE void setFilename(const QString &fileName); private: explicit PendingTransaction(Monero::PendingTransaction * pt, QObject *parent = 0); @@ -51,6 +52,7 @@ private: private: friend class Wallet; Monero::PendingTransaction * m_pimpl; + QString m_fileName; }; #endif // PENDINGTRANSACTION_H diff --git a/src/libwalletqt/UnsignedTransaction.cpp b/src/libwalletqt/UnsignedTransaction.cpp new file mode 100644 index 00000000..a1c472f2 --- /dev/null +++ b/src/libwalletqt/UnsignedTransaction.cpp @@ -0,0 +1,89 @@ +#include "UnsignedTransaction.h" +#include <QVector> +#include <QDebug> + +UnsignedTransaction::Status UnsignedTransaction::status() const +{ + return static_cast<Status>(m_pimpl->status()); +} + +QString UnsignedTransaction::errorString() const +{ + return QString::fromStdString(m_pimpl->errorString()); +} + +quint64 UnsignedTransaction::amount(int index) const +{ + std::vector<uint64_t> arr = m_pimpl->amount(); + if(index > arr.size() - 1) + return 0; + return arr[index]; +} + +quint64 UnsignedTransaction::fee(int index) const +{ + std::vector<uint64_t> arr = m_pimpl->fee(); + if(index > arr.size() - 1) + return 0; + return arr[index]; +} + +quint64 UnsignedTransaction::mixin(int index) const +{ + std::vector<uint64_t> arr = m_pimpl->mixin(); + if(index > arr.size() - 1) + return 0; + return arr[index]; +} + +quint64 UnsignedTransaction::txCount() const +{ + return m_pimpl->txCount(); +} + +quint64 UnsignedTransaction::minMixinCount() const +{ + return m_pimpl->minMixinCount(); +} + +QString UnsignedTransaction::confirmationMessage() const +{ + return QString::fromStdString(m_pimpl->confirmationMessage()); +} + +QStringList UnsignedTransaction::paymentId() const +{ + QList<QString> list; + for (const auto &t: m_pimpl->paymentId()) + list.append(QString::fromStdString(t)); + return list; +} + +QStringList UnsignedTransaction::recipientAddress() const +{ + QList<QString> list; + for (const auto &t: m_pimpl->recipientAddress()) + list.append(QString::fromStdString(t)); + return list; +} + +bool UnsignedTransaction::sign(const QString &fileName) const +{ + return m_pimpl->sign(fileName.toStdString()); +} + +void UnsignedTransaction::setFilename(const QString &fileName) +{ + m_fileName = fileName; +} + +UnsignedTransaction::UnsignedTransaction(Monero::UnsignedTransaction *pt, QObject *parent) + : QObject(parent), m_pimpl(pt) +{ + +} + +UnsignedTransaction::~UnsignedTransaction() +{ + delete m_pimpl; +} diff --git a/src/libwalletqt/UnsignedTransaction.h b/src/libwalletqt/UnsignedTransaction.h new file mode 100644 index 00000000..49391e45 --- /dev/null +++ b/src/libwalletqt/UnsignedTransaction.h @@ -0,0 +1,58 @@ +#ifndef UNSIGNEDTRANSACTION_H +#define UNSIGNEDTRANSACTION_H + +#include <QObject> + +#include <wallet/wallet2_api.h> + +class UnsignedTransaction : public QObject +{ + Q_OBJECT + Q_PROPERTY(Status status READ status) + Q_PROPERTY(QString errorString READ errorString) + // Q_PROPERTY(QList<qulonglong> amount READ amount) + // Q_PROPERTY(QList<qulonglong> fee READ fee) + Q_PROPERTY(quint64 txCount READ txCount) + Q_PROPERTY(QString confirmationMessage READ confirmationMessage) + Q_PROPERTY(QStringList recipientAddress READ recipientAddress) + Q_PROPERTY(QStringList paymentId READ paymentId) + Q_PROPERTY(quint64 minMixinCount READ minMixinCount) + +public: + enum Status { + Status_Ok = Monero::UnsignedTransaction::Status_Ok, + Status_Error = Monero::UnsignedTransaction::Status_Error, + Status_Critical = Monero::UnsignedTransaction::Status_Critical + }; + Q_ENUM(Status) + + enum Priority { + Priority_Low = Monero::UnsignedTransaction::Priority_Low, + Priority_Medium = Monero::UnsignedTransaction::Priority_Medium, + Priority_High = Monero::UnsignedTransaction::Priority_High + }; + Q_ENUM(Priority) + + Status status() const; + QString errorString() const; + Q_INVOKABLE quint64 amount(int index) const; + Q_INVOKABLE quint64 fee(int index) const; + Q_INVOKABLE quint64 mixin(int index) const; + QStringList recipientAddress() const; + QStringList paymentId() const; + quint64 txCount() const; + QString confirmationMessage() const; + quint64 minMixinCount() const; + Q_INVOKABLE bool sign(const QString &fileName) const; + Q_INVOKABLE void setFilename(const QString &fileName); + +private: + explicit UnsignedTransaction(Monero::UnsignedTransaction * pt, QObject *parent = 0); + ~UnsignedTransaction(); +private: + friend class Wallet; + Monero::UnsignedTransaction * m_pimpl; + QString m_fileName; +}; + +#endif // UNSIGNEDTRANSACTION_H diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index b39851dc..25670662 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -1,5 +1,6 @@ #include "Wallet.h" #include "PendingTransaction.h" +#include "UnsignedTransaction.h" #include "TransactionHistory.h" #include "AddressBook.h" #include "model/TransactionHistoryModel.h" @@ -211,7 +212,6 @@ quint64 Wallet::daemonBlockChainHeight() const quint64 Wallet::daemonBlockChainTargetHeight() const { - if (m_daemonBlockChainTargetHeight == 0 || m_daemonBlockChainTargetHeightTime.elapsed() / 1000 > m_daemonBlockChainTargetHeightTtl) { m_daemonBlockChainTargetHeight = m_walletImpl->daemonBlockChainTargetHeight(); @@ -323,12 +323,31 @@ void Wallet::createSweepUnmixableTransactionAsync() }); } +UnsignedTransaction * Wallet::loadTxFile(const QString &fileName) +{ + qDebug() << "Trying to sign " << fileName; + Monero::UnsignedTransaction * ptImpl = m_walletImpl->loadUnsignedTx(fileName.toStdString()); + UnsignedTransaction * result = new UnsignedTransaction(ptImpl, this); + return result; +} + +bool Wallet::submitTxFile(const QString &fileName) const +{ + qDebug() << "Trying to submit " << fileName; + return m_walletImpl->submitTransaction(fileName.toStdString()); +} + void Wallet::disposeTransaction(PendingTransaction *t) { m_walletImpl->disposeTransaction(t->m_pimpl); delete t; } +void Wallet::disposeTransaction(UnsignedTransaction *t) +{ + delete t; +} + TransactionHistory *Wallet::history() const { return m_history; diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index e4ff026b..28550a7f 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -6,6 +6,7 @@ #include "wallet/wallet2_api.h" // we need to have an access to the Monero::Wallet::Status enum here; #include "PendingTransaction.h" // we need to have an access to the PendingTransaction::Priority enum here; +#include "UnsignedTransaction.h" namespace Monero { class Wallet; // forward declaration @@ -162,9 +163,19 @@ public: //! creates async sweep unmixable transaction Q_INVOKABLE void createSweepUnmixableTransactionAsync(); + //! Sign a transfer from file + Q_INVOKABLE UnsignedTransaction * loadTxFile(const QString &fileName); + + //! Submit a transfer from file + Q_INVOKABLE bool submitTxFile(const QString &fileName) const; + + //! deletes transaction and frees memory Q_INVOKABLE void disposeTransaction(PendingTransaction * t); + //! deletes unsigned transaction and frees memory + Q_INVOKABLE void disposeTransaction(UnsignedTransaction * t); + //! returns transaction history TransactionHistory * history() const; |
