aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2018-03-05 15:04:59 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2018-03-16 10:33:05 +0000
commitb057a21d56a19f109a58ba873ec2fd69ee533cd5 (patch)
tree27941f7c3e490ab9efa1eab2f42a7d019325bced
parentringdb: factor ring addition code (diff)
downloadmonero-b057a21d56a19f109a58ba873ec2fd69ee533cd5.tar.xz
wallet2_api: add ring api
-rw-r--r--src/wallet/api/wallet.cpp38
-rw-r--r--src/wallet/api/wallet.h2
-rw-r--r--src/wallet/api/wallet2_api.h6
3 files changed, 46 insertions, 0 deletions
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp
index 64407a341..be3ca9853 100644
--- a/src/wallet/api/wallet.cpp
+++ b/src/wallet/api/wallet.cpp
@@ -1952,6 +1952,44 @@ bool WalletImpl::unblackballOutput(const std::string &pubkey)
return true;
}
+bool WalletImpl::getRing(const std::string &key_image, std::vector<uint64_t> &ring) const
+{
+ crypto::key_image raw_key_image;
+ if (!epee::string_tools::hex_to_pod(key_image, raw_key_image))
+ {
+ m_status = Status_Error;
+ m_errorString = tr("Failed to parse key image");
+ return false;
+ }
+ bool ret = m_wallet->get_ring(raw_key_image, ring);
+ if (!ret)
+ {
+ m_status = Status_Error;
+ m_errorString = tr("Failed to get ring");
+ return false;
+ }
+ return true;
+}
+
+bool WalletImpl::setRing(const std::string &key_image, const std::vector<uint64_t> &ring, bool relative)
+{
+ crypto::key_image raw_key_image;
+ if (!epee::string_tools::hex_to_pod(key_image, raw_key_image))
+ {
+ m_status = Status_Error;
+ m_errorString = tr("Failed to parse key image");
+ return false;
+ }
+ bool ret = m_wallet->set_ring(raw_key_image, ring, relative);
+ if (!ret)
+ {
+ m_status = Status_Error;
+ m_errorString = tr("Failed to set ring");
+ return false;
+ }
+ return true;
+}
+
} // namespace
namespace Bitmonero = Monero;
diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h
index 2bc34c592..9d40008d1 100644
--- a/src/wallet/api/wallet.h
+++ b/src/wallet/api/wallet.h
@@ -165,6 +165,8 @@ public:
virtual bool lightWalletImportWalletRequest(std::string &payment_id, uint64_t &fee, bool &new_request, bool &request_fulfilled, std::string &payment_address, std::string &status);
virtual bool blackballOutputs(const std::vector<std::string> &pubkeys, bool add);
virtual bool unblackballOutput(const std::string &pubkey);
+ virtual bool getRing(const std::string &key_image, std::vector<uint64_t> &ring) const;
+ virtual bool setRing(const std::string &key_image, const std::vector<uint64_t> &ring, bool relative);
private:
void clearStatus() const;
diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h
index df74e5885..b67e13ac5 100644
--- a/src/wallet/api/wallet2_api.h
+++ b/src/wallet/api/wallet2_api.h
@@ -763,6 +763,12 @@ struct Wallet
//! unblackballs an output
virtual bool unblackballOutput(const std::string &pubkey) = 0;
+ //! gets the ring used for a key image, if any
+ virtual bool getRing(const std::string &key_image, std::vector<uint64_t> &ring) const = 0;
+
+ //! sets the ring used for a key image
+ virtual bool setRing(const std::string &key_image, const std::vector<uint64_t> &ring, bool relative) = 0;
+
//! Light wallet authenticate and login
virtual bool lightWalletLogin(bool &isNewWallet) const = 0;