Skip to content

Commit b3ee7b6

Browse files
Basic wallet txs test
1 parent 94b2629 commit b3ee7b6

27 files changed

Lines changed: 2591 additions & 1390 deletions

src/cpp/py_monero.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,7 @@ PYBIND11_MODULE(monero, m) {
704704
// monero_tx
705705
py_monero_tx
706706
.def(py::init<>())
707+
.def_property_readonly_static("DEFAULT_PAYMENT_ID", [](py::object /* self */) { return monero::monero_tx::DEFAULT_PAYMENT_ID; })
707708
.def_readwrite("block", &monero::monero_tx::m_block)
708709
.def_readwrite("hash", &monero::monero_tx::m_hash)
709710
.def_readwrite("version", &monero::monero_tx::m_version)
@@ -983,6 +984,20 @@ PYBIND11_MODULE(monero, m) {
983984
.def_readwrite("change_amount", &monero::monero_tx_wallet::m_change_amount)
984985
.def_readwrite("num_dummy_outputs", &monero::monero_tx_wallet::m_num_dummy_outputs)
985986
.def_readwrite("extra_hex", &monero::monero_tx_wallet::m_extra_hex)
987+
.def("get_incoming_amount", [](monero::monero_tx_wallet& self) {
988+
uint64_t amount = 0;
989+
for (const auto& transfer : self.m_incoming_transfers) {
990+
if (transfer->m_amount != boost::none)
991+
amount += transfer->m_amount.get();
992+
}
993+
return amount;
994+
})
995+
.def("get_outgoing_amount", [](monero::monero_tx_wallet& self) {
996+
uint64_t amount = 0;
997+
if (self.m_outgoing_transfer != boost::none && self.m_outgoing_transfer.value()->m_amount != boost::none)
998+
amount = self.m_outgoing_transfer.value()->m_amount.get();
999+
return amount;
1000+
})
9861001
.def("get_transfers", [](monero::monero_tx_wallet& self) {
9871002
MONERO_CATCH_AND_RETHROW(self.get_transfers());
9881003
})
@@ -992,6 +1007,16 @@ PYBIND11_MODULE(monero, m) {
9921007
.def("filter_transfers", [](monero::monero_tx_wallet& self, const monero_transfer_query& query) {
9931008
MONERO_CATCH_AND_RETHROW(self.filter_transfers(query));
9941009
}, py::arg("query"))
1010+
.def("get_inputs_wallet", [](monero::monero_tx_wallet& self, const boost::optional<monero_output_query>& query) {
1011+
std::vector<std::shared_ptr<monero::monero_output_wallet>> inputs;
1012+
for(const auto& i : self.m_inputs) {
1013+
auto input = std::dynamic_pointer_cast<monero::monero_output_wallet>(i);
1014+
if (!input) continue;
1015+
if (query == boost::none || query.value().meets_criteria(input.get()))
1016+
inputs.push_back(input);
1017+
}
1018+
return inputs;
1019+
}, py::arg("query") = py::none())
9951020
.def("get_outputs_wallet", [](monero::monero_tx_wallet& self) {
9961021
MONERO_CATCH_AND_RETHROW(self.get_outputs_wallet());
9971022
})
@@ -2007,13 +2032,13 @@ PYBIND11_MODULE(monero, m) {
20072032
.def_static("is_valid_language", [](const std::string& language) {
20082033
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::is_valid_language(language));
20092034
}, py::arg("language"))
2010-
.def_static("get_blocks_from_txs", [](std::vector<std::shared_ptr<monero::monero_tx_wallet>> txs) {
2035+
.def_static("get_blocks_from_txs", [](const std::vector<std::shared_ptr<monero::monero_tx_wallet>>& txs) {
20112036
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::get_blocks_from_txs(txs));
20122037
}, py::arg("txs"))
2013-
.def_static("get_blocks_from_transfers", [](std::vector<std::shared_ptr<monero::monero_transfer>> transfers) {
2038+
.def_static("get_blocks_from_transfers", [](const std::vector<std::shared_ptr<monero::monero_transfer>>& transfers) {
20142039
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::get_blocks_from_transfers(transfers));
20152040
}, py::arg("transfers"))
2016-
.def_static("get_blocks_from_outputs", [](std::vector<std::shared_ptr<monero::monero_output_wallet>> outputs) {
2041+
.def_static("get_blocks_from_outputs", [](const std::vector<std::shared_ptr<monero::monero_output_wallet>>& outputs) {
20172042
MONERO_CATCH_AND_RETHROW(PyMoneroUtils::get_blocks_from_outputs(outputs));
20182043
}, py::arg("outputs"))
20192044
.def_static("get_payment_uri", [](const monero::monero_tx_config &config) {

src/cpp/wallet/py_monero_wallet_rpc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ std::vector<monero_account> PyMoneroWalletRpc::get_accounts(bool include_subaddr
680680
// merge info
681681
auto account = &accounts[subaddress->m_account_index.get()];
682682
if (account->m_index != subaddress->m_account_index) throw std::runtime_error("RPC accounts are out of order");
683-
auto tgt_subaddress = &account->m_subaddresses[subaddress->m_account_index.get()];
683+
auto tgt_subaddress = &account->m_subaddresses[subaddress->m_index.get()];
684684
if (tgt_subaddress->m_index != subaddress->m_index) throw std::runtime_error("RPC subaddresses are out of order");
685685

686686
if (subaddress->m_balance != boost::none) tgt_subaddress->m_balance = subaddress->m_balance;

src/python/monero_tx.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ class MoneroTx(SerializableStruct):
77
"""
88
Models a Monero transaction on the blockchain.
99
"""
10+
DEFAULT_PAYMENT_ID: str
11+
"""Default tx payment id"""
1012
block: MoneroBlock | None
1113
"""Block including the transaction."""
1214
common_tx_sets: str | None

src/python/monero_tx_wallet.pyi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,18 @@ class MoneroTxWallet(MoneroTx):
5555
@typing.overload
5656
def get_outputs_wallet(self, query: MoneroOutputQuery) -> list[MoneroOutputWallet]:
5757
...
58+
def get_inputs_wallet(self, query: MoneroOutputQuery | None = None) -> list[MoneroOutputWallet]:
59+
...
5860
@typing.overload
5961
def get_transfers(self) -> list[MoneroTransfer]:
6062
...
6163
@typing.overload
6264
def get_transfers(self, query: MoneroTransferQuery) -> list[MoneroTransfer]:
6365
...
66+
def get_incoming_amount(self) -> int:
67+
...
68+
def get_outgoing_amount(self) -> int:
69+
...
6470
@typing.overload
6571
def merge(self, tgt: MoneroTxWallet) -> None:
6672
...

0 commit comments

Comments
 (0)