From fd18ad1e606c5e5f29775376d102532998cadd44 Mon Sep 17 00:00:00 2001 From: thotbot Date: Sat, 3 Jul 2021 23:47:55 +0200 Subject: [PATCH] subaddressIndex() --- src/wallet/api/wallet.cpp | 21 +++++++++++++++++++++ src/wallet/api/wallet.h | 1 + src/wallet/api/wallet2_api.h | 1 + 3 files changed, 23 insertions(+) diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index 0a469b421..0b639b6cc 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -893,6 +893,27 @@ std::string WalletImpl::address(uint32_t accountIndex, uint32_t addressIndex) co return m_wallet->get_subaddress_as_str({accountIndex, addressIndex}); } +bool WalletImpl::subaddressIndex(std::string address, std::pair &index) const +{ + clearStatus(); + cryptonote::address_parse_info info; + + if (!cryptonote::get_account_address_from_str(info, m_wallet->nettype(), address)) { + setStatusError(tr("Failed to parse address")); + return false; + } + + auto i = m_wallet->get_subaddress_index(info.address); + if (!i) { + setStatusError(tr("Address doesn't belong to the wallet")); + return false; + } + + index.first = i->major; + index.second = i->minor; + return true; +} + std::string WalletImpl::integratedAddress(const std::string &payment_id) const { crypto::hash8 pid; diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h index 71f4c1f28..b9cbbf921 100644 --- a/src/wallet/api/wallet.h +++ b/src/wallet/api/wallet.h @@ -100,6 +100,7 @@ public: bool setDevicePin(const std::string &password) override; bool setDevicePassphrase(const std::string &password) override; std::string address(uint32_t accountIndex = 0, uint32_t addressIndex = 0) const override; + bool subaddressIndex(std::string address, std::pair &index) const override; std::string integratedAddress(const std::string &payment_id) const override; std::string secretViewKey() const override; std::string publicViewKey() const override; diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h index c71edce2d..4efdc1364 100644 --- a/src/wallet/api/wallet2_api.h +++ b/src/wallet/api/wallet2_api.h @@ -555,6 +555,7 @@ struct Wallet virtual bool setDevicePin(const std::string &pin) { (void)pin; return false; }; virtual bool setDevicePassphrase(const std::string &passphrase) { (void)passphrase; return false; }; virtual std::string address(uint32_t accountIndex = 0, uint32_t addressIndex = 0) const = 0; + virtual bool subaddressIndex(std::string address, std::pair &index) const = 0; std::string mainAddress() const { return address(0, 0); } virtual std::string path() const = 0; virtual NetworkType nettype() const = 0;