operator== added for comparing outputs

new_rpc
moneroexamples 5 years ago
parent 40857bb56c
commit ea906ab859

@ -71,8 +71,6 @@ public:
return identified_outputs;
}
protected:
struct info
{
public_key pub_key;
@ -84,6 +82,8 @@ protected:
rct::key rtc_amount;
};
protected:
uint64_t total_received {0};
vector<info> identified_outputs;
};
@ -117,7 +117,6 @@ public:
return identified_inputs;
}
protected:
struct info
{
@ -126,6 +125,9 @@ protected:
public_key out_pub_key;
};
protected:
secret_key const* viewkey {nullptr};
known_outputs_t const* known_outputs {nullptr};
MicroCore* mcore {nullptr};

@ -32,19 +32,23 @@ JsonTx::init()
sender.amount = jtx["sender"]["amount"];
sender.change = jtx["sender"]["change"];
for (auto const& recpient: jtx["recipient"])
populate_outputs(jtx["sender"]["outputs"], sender.outputs);
for (auto const& jrecpient: jtx["recipient"])
{
recipients.push_back(account{});
addr_and_viewkey_from_string(
recpient["address"], recpient["viewkey"], \
jrecpient["address"], jrecpient["viewkey"], \
ntype, recipients.back().address,
recipients.back().viewkey);
parse_str_secret_key(recpient["spendkey"],
parse_str_secret_key(jrecpient["spendkey"],
recipients.back().spendkey);
recipients.back().amount = recpient["amount"];
recipients.back().amount = jrecpient["amount"];
populate_outputs(jrecpient["outputs"], recipients.back().outputs);
}
if (!hex_to_tx(jtx["hex"], tx, tx_hash, tx_prefix_hash))
@ -54,6 +58,7 @@ JsonTx::init()
}
bool
JsonTx::read_config()
{
@ -101,5 +106,22 @@ construct_jsontx(string tx_hash)
return JsonTx {tx_path};
}
void
JsonTx::populate_outputs(json const& joutputs, vector<output>& outs)
{
for (auto const& jout: joutputs)
{
public_key out_pk;
if (!hex_to_pod(jout[1], out_pk))
{
throw std::runtime_error("hex_to_pod(jout[1], out_pk)");
}
output out {jout[0], out_pk, jout[2]};
outs.push_back(out);
}
}
}

@ -17,6 +17,13 @@ class JsonTx
{
public:
struct output
{
uint64_t index {0};
public_key pub_key;
uint64_t amount {0};
};
struct account
{
address_parse_info address {};
@ -24,6 +31,7 @@ public:
secret_key spendkey {};
uint64_t amount {0};
uint64_t change {0};
vector<output> outputs;
};
json jtx;
@ -45,6 +53,7 @@ public:
private:
void init();
bool read_config();
void populate_outputs(json const& joutputs, vector<output>& outs);
};

@ -138,7 +138,8 @@
"is_subaddress": false,
"seed": "gels lair teeming cease nanny utility inexact leisure civilian emerge zippers skew gasp enjoy fugitive nanny candy nuance muppet scrub uneven yard ulcers unquoted yard",
"spendkey": "6fe76a5e4657695cbcc09fab93b70ac974c76e0f02afde71cb460423d1444b03",
"viewkey": "9595c2445cdd4c88d78f0af41ebdf52f68ae2e3597b9e7b99bc3d62e300df806"
"viewkey": "9595c2445cdd4c88d78f0af41ebdf52f68ae2e3597b9e7b99bc3d62e300df806",
"outputs": [[1, "9fecfbe91a399c46d79d7482cb9b420c7b88591a29fabfb8b6c7af1566299b42", 1000123400000000]]
}],
"sender": {
"_comment": "monerowalletstagenet3",
@ -147,6 +148,7 @@
"change": 108874026110000,
"seed": "vulture cuisine fishing chrome olive tudor wickets rowboat vivid looking sample dewdrop pyramid wield amused skirting mystery pager fifteen boxes object match pedantic pool tudor",
"spendkey": "df0f5720ae0b69454ca7db35db677272c7c19513cd0dc4147b0e00792a10f406",
"viewkey": "b45e6f38b2cd1c667459527decb438cdeadf9c64d93c8bccf40a9bf98943dc09"
"viewkey": "b45e6f38b2cd1c667459527decb438cdeadf9c64d93c8bccf40a9bf98943dc09",
"outputs": [[0, "f7856c84e02ee66d82310f82a3601ba0785782ca83ce53a0b4abb38c20be2d35", 108874026110000]]
}
}

@ -18,7 +18,8 @@
"is_subaddress": false,
"seed": "",
"spendkey": "df0f5720ae0b69454ca7db35db677272c7c19513cd0dc4147b0e00792a10f406",
"viewkey": "b45e6f38b2cd1c667459527decb438cdeadf9c64d93c8bccf40a9bf98943dc09"
"viewkey": "b45e6f38b2cd1c667459527decb438cdeadf9c64d93c8bccf40a9bf98943dc09",
"outputs": [[0, "472b5dcf3d976fa1b8e0d250a7c4e9dc52ae9db7b8fb00934f9dac800da9f89f", 24081949126455]]
}],
"sender": {
"_comment": "",

@ -20,6 +20,35 @@ string spendkey_56Vbjcz {"509a9761fde8856fc38e79ca705d85f979143524f178f8e2e0eb53
string known_outputs_csv_2_56bCoE {"./res/outputs_stagenet_2_56Vbjcz.csv"};
inline bool
operator==(const Output::info& lhs, const JsonTx::output& rhs)
{
return lhs.amount == rhs.amount
&& lhs.pub_key == rhs.pub_key
&& lhs.idx_in_tx == rhs.index;
}
inline bool
operator!=(const Output::info& lhs, const JsonTx::output& rhs)
{
return !(lhs == rhs);
}
inline bool
operator==(const vector<Output::info>& lhs, const vector<JsonTx::output>& rhs)
{
if (lhs.size() != rhs.size())
return false;
for (size_t i = 0; i < lhs.size(); i++)
{
if (lhs[i] != rhs[i])
return false;
}
return true;
}
TEST(MODULAR_IDENTIFIER, OutputsRingCT)
{
auto jtx = construct_jsontx("ddff95211b53c194a16c2b8f37ae44b643b8bd46b4cb402af961ecabeb8417b2");
@ -32,6 +61,11 @@ TEST(MODULAR_IDENTIFIER, OutputsRingCT)
identifier.identify();
ASSERT_EQ(identifier.get<Output>()->get().size(),
jtx->sender.outputs.size());
ASSERT_TRUE(identifier.get<Output>()->get() == jtx->sender.outputs);
ASSERT_EQ(identifier.get<Output>()->get_total(),
jtx->sender.change);
}
@ -49,6 +83,8 @@ TEST(MODULAR_IDENTIFIER, OutputsRingCTCoinbaseTx)
identifier.identify();
ASSERT_TRUE(identifier.get<Output>()->get() == jtx->recipients.at(0).outputs);
ASSERT_EQ(identifier.get<Output>()->get_total(),
jtx->recipients.at(0).amount);
}

Loading…
Cancel
Save