outouts age added

master
moneroexamples 8 years ago
parent e4305061c9
commit 1007b2f7d0

@ -107,6 +107,7 @@ namespace xmreg {
uint64_t fee; uint64_t fee;
uint64_t mixin_no; uint64_t mixin_no;
uint64_t size; uint64_t size;
uint64_t blk_height;
size_t version; size_t version;
uint64_t unlock_time; uint64_t unlock_time;
vector<uint8_t> extra; vector<uint8_t> extra;
@ -163,6 +164,7 @@ namespace xmreg {
{"no_inputs" , input_key_imgs.size()}, {"no_inputs" , input_key_imgs.size()},
{"no_outputs" , output_pub_keys.size()}, {"no_outputs" , output_pub_keys.size()},
{"mixin" , mixin_str}, {"mixin" , mixin_str},
{"blk_height" , blk_height},
{"version" , std::to_string(version)}, {"version" , std::to_string(version)},
{"has_payment_id" , payment_id != null_hash}, {"has_payment_id" , payment_id != null_hash},
{"has_payment_id8" , payment_id8 != null_hash8}, {"has_payment_id8" , payment_id8 != null_hash8},
@ -1587,6 +1589,7 @@ namespace xmreg {
{"no_of_sources" , no_of_sources}, {"no_of_sources" , no_of_sources},
{"use_rct" , tx_cd.use_rct}, {"use_rct" , tx_cd.use_rct},
{"single_dest_source" , get_account_address_as_str(testnet, tx_dest.addr)}, {"single_dest_source" , get_account_address_as_str(testnet, tx_dest.addr)},
{"dest_amount" , fmt::format("{:0.12f}", XMR_AMOUNT(tx_dest.amount))},
{"dest_sources" , mstch::array{}} {"dest_sources" , mstch::array{}}
}; };
@ -1598,7 +1601,7 @@ namespace xmreg {
const tx_source_entry& tx_source = tx_cd.sources.at(i); const tx_source_entry& tx_source = tx_cd.sources.at(i);
mstch::map single_dest_source { mstch::map single_dest_source {
{"amount" , {"output_amount" ,
fmt::format("{:0.12f}", XMR_AMOUNT(tx_source.amount))}, fmt::format("{:0.12f}", XMR_AMOUNT(tx_source.amount))},
{"real_output" , tx_source.real_output}, {"real_output" , tx_source.real_output},
{"real_out_tx_key" , pod_to_hex(tx_source.real_out_tx_key)}, {"real_out_tx_key" , pod_to_hex(tx_source.real_out_tx_key)},
@ -1610,6 +1613,28 @@ namespace xmreg {
cout << tx_source.real_out_tx_key << endl; cout << tx_source.real_out_tx_key << endl;
cout << tx_source.real_output_in_tx_index << endl; cout << tx_source.real_output_in_tx_index << endl;
uint64_t index_of_real_output = tx_source.outputs[tx_source.real_output].first;
// get tx of the real output
tx_out_index real_toi = core_storage->get_db()
.get_output_tx_and_index(0, index_of_real_output);
transaction real_source_tx;
if (!mcore->get_tx(real_toi.first, real_source_tx))
{
cerr << "Cant get tx in blockchain: " << real_toi.first << endl;
return string("Cant get tx: " + pod_to_hex(real_toi.first));
}
tx_details real_txd = get_tx_details(real_source_tx);
public_key real_out_pub_key = real_txd.output_pub_keys[tx_source.real_output_in_tx_index].first.key;
cout << "real_txd.hash: " << pod_to_hex(real_txd.hash) << endl;
cout << "real_txd.pk: " << pod_to_hex(real_txd.pk) << endl;
cout << "real_out_pub_key: " << pod_to_hex(real_out_pub_key) << endl;
mstch::array& outputs = boost::get<mstch::array>(single_dest_source["outputs"]); mstch::array& outputs = boost::get<mstch::array>(single_dest_source["outputs"]);
size_t output_i {0}; size_t output_i {0};
@ -1643,13 +1668,31 @@ namespace xmreg {
tx_details txd = get_tx_details(tx); tx_details txd = get_tx_details(tx);
public_key out_pub_key = txd.output_pub_keys[toi.second].first.key;
// get block cointaining this tx
block blk;
if (!mcore->get_block_by_height(txd.blk_height, blk))
{
cerr << "Cant get block: " << txd.blk_height << endl;
return string("Cant get block: " + to_string(txd.blk_height));
}
pair<string, string> age = get_age(server_timestamp, blk.timestamp);
mstch::map single_output { mstch::map single_output {
{"out_index" , oe.first}, {"out_index" , oe.first},
{"tx_hash" , pod_to_hex(txd.hash)}, {"tx_hash" , pod_to_hex(txd.hash)},
{"out_pub_key" , pod_to_hex(txd.output_pub_keys[toi.second].first.key)}, {"out_pub_key" , pod_to_hex(out_pub_key)},
{"ctkey" , pod_to_hex(oe.second)} {"ctkey" , pod_to_hex(oe.second)},
{"output_age" , age.first},
{"is_real" , (out_pub_key == real_out_pub_key)}
}; };
single_dest_source.insert({"age_format" , age.second});
outputs.push_back(single_output); outputs.push_back(single_output);
++output_i; ++output_i;
@ -2324,7 +2367,6 @@ namespace xmreg {
// get tx fee // get tx fee
txd.fee = get_tx_fee(tx); txd.fee = get_tx_fee(tx);
} }
} }
get_payment_id(tx, txd.payment_id, txd.payment_id8); get_payment_id(tx, txd.payment_id, txd.payment_id8);
@ -2346,6 +2388,16 @@ namespace xmreg {
// get unlock time // get unlock time
txd.unlock_time = tx.unlock_time; txd.unlock_time = tx.unlock_time;
try
{
txd.blk_height = core_storage->get_db().get_tx_block_height(txd.hash);
}
catch (exception& e)
{
cerr << "Cant get block height: " << txd.hash << e.what() << endl;
txd.blk_height = 0;
}
return txd; return txd;
} }

@ -141,24 +141,37 @@
<br/> <br/>
{{#txs}} {{#txs}}
no_of_destinations: {{no_of_destinations}} <br/> no_of_destinations: {{no_of_destinations}} <br/>
<table class="center" style="width: 80%; margin-top:10px"> <div class="center" style="width: 90%; margin-top:10px">
<tr><td>Address {{single_dest_source}}</td><td>Amount</td></tr> Amount: {{dest_amount}} <br/>
To address: {{single_dest_source}} <br/>
<h4>Outputs used</h4>
{{#dest_sources}} {{#dest_sources}}
<tr><td></td><td>{{amount}}</td></tr> <table style="width: 80%; margin-top:10px">
<tr> <tr>
<td colspan="2"> <td>Output Index</td>
Outputs used <br/> <td>Stealth address</td>
<table> <td>Is this real output</td>
<tr><td>Output Index</td>Stealth address<td>Is this real output</td></tr> <td>Age {{age_format}}</td>
<td>Amount</td>
</tr>
{{#outputs}} {{#outputs}}
<tr><td>{{out_index}}</td><td><a href="/tx/{{tx_hash}}">{{out_pub_key}}</a></td><td></td></tr> <tr>
<td>{{out_index}}</td>
<td><a href="/tx/{{tx_hash}}">{{out_pub_key}}</a></td>
{{#is_real}}
<td><span style="color: #008009;font-weight: bold">{{is_real}}</span></td>
{{/is_real}}
{{^is_real}}
<td>{{is_real}}</td>
{{/is_real}}
<td>{{output_age}}</td>
<td>{{output_amount}}</td>
</tr>
<!-- <tr><td colspan="3">&nbsp; &nbsp; ctkey: {{ctkey}}</td></tr>--> <!-- <tr><td colspan="3">&nbsp; &nbsp; ctkey: {{ctkey}}</td></tr>-->
{{/outputs}} {{/outputs}}
</table> </table>
</td>
</tr>
{{/dest_sources}} {{/dest_sources}}
</table> </div>
{{/txs}} {{/txs}}
</div> </div>

Loading…
Cancel
Save