From b298f542a645219a73eb452732ad6dbcf95c9e89 Mon Sep 17 00:00:00 2001 From: akildemir <34187742+akildemir@users.noreply.github.com> Date: Mon, 10 Feb 2025 16:20:42 +0300 Subject: [PATCH] add audit tx support for wallet api (#14) --- src/wallet/api/wallet.cpp | 28 ++++++++++++++++++++++++++++ src/wallet/api/wallet.h | 4 ++++ src/wallet/api/wallet2_api.h | 19 +++++++++++++++++-- src/wallet/api/yield_info.cpp | 2 +- src/wallet/api/yield_info.h | 4 ++-- 5 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index 94b0c19ea..8ba862609 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -1444,6 +1444,34 @@ PendingTransaction *WalletImpl::createStakeTransaction(uint64_t amount, uint32_t return createTransactionMultDest(Monero::transaction_type::STAKE, std::vector {dst_addr}, payment_id, amount ? (std::vector {amount}) : (optional>()), mixin_count, asset_type, is_return, priority, subaddr_account, subaddr_indices); } +PendingTransaction *WalletImpl::createAuditTransaction( + uint32_t mixin_count, + PendingTransaction::Priority priority, + uint32_t subaddr_account, + std::set subaddr_indices +) { + // Need to populate {dst_entr, payment_id, asset_type, is_return} + const string dst_addr = m_wallet->get_subaddress_as_str({subaddr_account, 0});//MY LOCAL (SUB)ADDRESS + const string payment_id = ""; + const string asset_type = "SAL"; + const bool is_return = false; + + LOG_ERROR("createAuditTransaction: called"); + + return createTransactionMultDest( + Monero::transaction_type::AUDIT, + std::vector {dst_addr}, + payment_id, + (optional>()), + mixin_count, + asset_type, + is_return, + priority, + subaddr_account, + subaddr_indices + ); +} + // TODO: // 1 - properly handle payment id (add another menthod with explicit 'payment_id' param) // 2 - check / design how "Transaction" can be single interface diff --git a/src/wallet/api/wallet.h b/src/wallet/api/wallet.h index 709bb8df1..cfdf13779 100644 --- a/src/wallet/api/wallet.h +++ b/src/wallet/api/wallet.h @@ -158,6 +158,10 @@ public: PendingTransaction::Priority priority = PendingTransaction::Priority_Low, uint32_t subaddr_account = 0, std::set subaddr_indices = {}) override; + PendingTransaction * createAuditTransaction(uint32_t mixin_count, + PendingTransaction::Priority priority = PendingTransaction::Priority_Low, + uint32_t subaddr_account = 0, + std::set subaddr_indices = {}) override; PendingTransaction * createTransactionMultDest(const transaction_type &tx_type, const std::vector &dst_addr, const std::string &payment_id, optional> amount, uint32_t mixin_count, diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h index 2605f4754..071142d8d 100644 --- a/src/wallet/api/wallet2_api.h +++ b/src/wallet/api/wallet2_api.h @@ -58,7 +58,8 @@ enum transaction_type : uint8_t { BURN = 5, STAKE = 6, RETURN = 7, - MAX = 7 + AUDIT = 8, + MAX = 8 }; namespace Utils { @@ -97,7 +98,7 @@ struct YieldInfo virtual uint64_t yield() const = 0; virtual uint64_t yield_per_stake() const = 0; virtual std::string period() const = 0; - virtual std::vector> payouts() const = 0; + virtual std::vector> payouts() const = 0; }; @@ -878,6 +879,20 @@ struct Wallet uint32_t subaddr_account = 0, std::set subaddr_indices = {}) = 0; + /*! + * \brief createAuditTransaction creates audit transaction. + * \param mixin_count mixin count. if 0 passed, wallet will use default value + * \param subaddr_indices set of subaddress indices to use for transfer or sweeping. if set empty, all are chosen when sweeping, and one or more are automatically chosen when transferring. after execution, returns the set of actually used indices + * \param priority + * \return PendingTransaction object. caller is responsible to check PendingTransaction::status() + * after object returned + */ + + virtual PendingTransaction * createAuditTransaction(uint32_t mixin_count, + PendingTransaction::Priority = PendingTransaction::Priority_Low, + uint32_t subaddr_account = 0, + std::set subaddr_indices = {}) = 0; + /*! * \brief createTransactionMultDest creates transaction with multiple destinations. if dst_addr is an integrated address, payment_id is ignored * \param tx_type the type of transaction being created diff --git a/src/wallet/api/yield_info.cpp b/src/wallet/api/yield_info.cpp index 9ff401534..0780b349e 100644 --- a/src/wallet/api/yield_info.cpp +++ b/src/wallet/api/yield_info.cpp @@ -123,7 +123,7 @@ namespace Monero { return m_yield_per_stake; } - std::vector> YieldInfoImpl::payouts() const + std::vector> YieldInfoImpl::payouts() const { return m_payouts; } diff --git a/src/wallet/api/yield_info.h b/src/wallet/api/yield_info.h index 8ec98fb42..ae08c4f9b 100644 --- a/src/wallet/api/yield_info.h +++ b/src/wallet/api/yield_info.h @@ -53,7 +53,7 @@ public: uint64_t yield() const override; uint64_t yield_per_stake() const override; std::string period() const override; - std::vector> payouts() const override; + std::vector> payouts() const override; private: friend class WalletImpl; @@ -68,7 +68,7 @@ private: uint64_t m_yield_per_stake; uint64_t m_num_entries; std::string m_period; - std::vector> m_payouts; + std::vector> m_payouts; }; }