Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions src/cpp/py_monero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,7 @@ PYBIND11_MODULE(monero, m) {
// monero_tx
py_monero_tx
.def(py::init<>())
.def_property_readonly_static("DEFAULT_PAYMENT_ID", [](py::object /* self */) { return monero::monero_tx::DEFAULT_PAYMENT_ID; })
.def_readwrite("block", &monero::monero_tx::m_block)
.def_readwrite("hash", &monero::monero_tx::m_hash)
.def_readwrite("version", &monero::monero_tx::m_version)
Expand Down Expand Up @@ -983,6 +984,20 @@ PYBIND11_MODULE(monero, m) {
.def_readwrite("change_amount", &monero::monero_tx_wallet::m_change_amount)
.def_readwrite("num_dummy_outputs", &monero::monero_tx_wallet::m_num_dummy_outputs)
.def_readwrite("extra_hex", &monero::monero_tx_wallet::m_extra_hex)
.def("get_incoming_amount", [](monero::monero_tx_wallet& self) {
uint64_t amount = 0;
for (const auto& transfer : self.m_incoming_transfers) {
if (transfer->m_amount != boost::none)
amount += transfer->m_amount.get();
}
return amount;
})
.def("get_outgoing_amount", [](monero::monero_tx_wallet& self) {
uint64_t amount = 0;
if (self.m_outgoing_transfer != boost::none && self.m_outgoing_transfer.value()->m_amount != boost::none)
amount = self.m_outgoing_transfer.value()->m_amount.get();
return amount;
})
.def("get_transfers", [](monero::monero_tx_wallet& self) {
MONERO_CATCH_AND_RETHROW(self.get_transfers());
})
Expand All @@ -992,6 +1007,16 @@ PYBIND11_MODULE(monero, m) {
.def("filter_transfers", [](monero::monero_tx_wallet& self, const monero_transfer_query& query) {
MONERO_CATCH_AND_RETHROW(self.filter_transfers(query));
}, py::arg("query"))
.def("get_inputs_wallet", [](monero::monero_tx_wallet& self, const boost::optional<monero_output_query>& query) {
std::vector<std::shared_ptr<monero::monero_output_wallet>> inputs;
for(const auto& i : self.m_inputs) {
auto input = std::dynamic_pointer_cast<monero::monero_output_wallet>(i);
if (!input) continue;
if (query == boost::none || query.value().meets_criteria(input.get()))
inputs.push_back(input);
}
return inputs;
}, py::arg("query") = py::none())
.def("get_outputs_wallet", [](monero::monero_tx_wallet& self) {
MONERO_CATCH_AND_RETHROW(self.get_outputs_wallet());
})
Expand Down Expand Up @@ -2007,13 +2032,13 @@ PYBIND11_MODULE(monero, m) {
.def_static("is_valid_language", [](const std::string& language) {
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::is_valid_language(language));
}, py::arg("language"))
.def_static("get_blocks_from_txs", [](std::vector<std::shared_ptr<monero::monero_tx_wallet>> txs) {
.def_static("get_blocks_from_txs", [](const std::vector<std::shared_ptr<monero::monero_tx_wallet>>& txs) {
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::get_blocks_from_txs(txs));
}, py::arg("txs"))
.def_static("get_blocks_from_transfers", [](std::vector<std::shared_ptr<monero::monero_transfer>> transfers) {
.def_static("get_blocks_from_transfers", [](const std::vector<std::shared_ptr<monero::monero_transfer>>& transfers) {
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::get_blocks_from_transfers(transfers));
}, py::arg("transfers"))
.def_static("get_blocks_from_outputs", [](std::vector<std::shared_ptr<monero::monero_output_wallet>> outputs) {
.def_static("get_blocks_from_outputs", [](const std::vector<std::shared_ptr<monero::monero_output_wallet>>& outputs) {
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::get_blocks_from_outputs(outputs));
}, py::arg("outputs"))
.def_static("get_payment_uri", [](const monero::monero_tx_config &config) {
Expand Down
2 changes: 1 addition & 1 deletion src/cpp/wallet/py_monero_wallet_rpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ std::vector<monero_account> PyMoneroWalletRpc::get_accounts(bool include_subaddr
// merge info
auto account = &accounts[subaddress->m_account_index.get()];
if (account->m_index != subaddress->m_account_index) throw std::runtime_error("RPC accounts are out of order");
auto tgt_subaddress = &account->m_subaddresses[subaddress->m_account_index.get()];
auto tgt_subaddress = &account->m_subaddresses[subaddress->m_index.get()];
if (tgt_subaddress->m_index != subaddress->m_index) throw std::runtime_error("RPC subaddresses are out of order");

if (subaddress->m_balance != boost::none) tgt_subaddress->m_balance = subaddress->m_balance;
Expand Down
2 changes: 2 additions & 0 deletions src/python/monero_tx.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ class MoneroTx(SerializableStruct):
"""
Models a Monero transaction on the blockchain.
"""
DEFAULT_PAYMENT_ID: str
"""Default tx payment id"""
block: MoneroBlock | None
"""Block including the transaction."""
common_tx_sets: str | None
Expand Down
6 changes: 6 additions & 0 deletions src/python/monero_tx_wallet.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,18 @@ class MoneroTxWallet(MoneroTx):
@typing.overload
def get_outputs_wallet(self, query: MoneroOutputQuery) -> list[MoneroOutputWallet]:
...
def get_inputs_wallet(self, query: MoneroOutputQuery | None = None) -> list[MoneroOutputWallet]:
...
@typing.overload
def get_transfers(self) -> list[MoneroTransfer]:
...
@typing.overload
def get_transfers(self, query: MoneroTransferQuery) -> list[MoneroTransfer]:
...
def get_incoming_amount(self) -> int:
...
def get_outgoing_amount(self) -> int:
...
@typing.overload
def merge(self, tgt: MoneroTxWallet) -> None:
...
Expand Down
Loading