construncting ringct txs seems to work now

pull/3/head
moneroexamples 7 years ago
parent 0f0448cbf8
commit aa1459a248

@ -279,6 +279,7 @@ CurrentBlockchainStatus::get_random_outputs(const vector<uint64_t>& amounts,
return true;
}
bool
CurrentBlockchainStatus::commit_tx(const string& tx_blob)
{
@ -540,6 +541,11 @@ CurrentBlockchainStatus::get_payment_id_as_string(const transaction& tx)
}
output_data_t
CurrentBlockchainStatus::get_output_key(uint64_t amount, uint64_t global_amount_index)
{
return core_storage->get_db().get_output_key(amount, global_amount_index);
}
bool
CurrentBlockchainStatus::start_tx_search_thread(XmrAccount acc)

@ -140,7 +140,8 @@ struct CurrentBlockchainStatus
static string
get_payment_id_as_string(const transaction& tx);
static output_data_t
get_output_key(uint64_t amount, uint64_t global_amount_index);
// definitions of these function are at the end of this file
// due to forward declaraions of TxSearch

@ -449,6 +449,12 @@ YourMoneroRequests::get_random_outs(const shared_ptr< Session > session, const B
vector<COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount> found_outputs;
// if (CurrentBlockchainStatus::get_random_outputs(amounts, count, found_outputs))
// {
//
// }
if (CurrentBlockchainStatus::get_random_outputs(amounts, count, found_outputs))
{
json& j_amount_outs = j_response["amount_outs"];
@ -482,8 +488,8 @@ YourMoneroRequests::get_random_outs(const shared_ptr< Session > session, const B
// placeholder variable for ringct outputs info
// that we need to save in database
string rtc_outpk;
string rtc_mask("0", 64);
string rtc_amount("0", 64);
string rtc_mask(64, '0');
string rtc_amount(64, '0');
json out_details {
{"global_index", out.global_amount_index},
@ -496,22 +502,17 @@ YourMoneroRequests::get_random_outs(const shared_ptr< Session > session, const B
rtc_outpk = pod_to_hex(random_output_tx.rct_signatures.outPk[output_idx_in_tx].mask);
rtc_mask = pod_to_hex(random_output_tx.rct_signatures.ecdhInfo[output_idx_in_tx].mask);
rtc_amount = pod_to_hex(random_output_tx.rct_signatures.ecdhInfo[output_idx_in_tx].amount);
out_details["rct"]= rtc_outpk + rtc_mask + rtc_amount;
}
else
{
rtc_outpk = pod_to_hex(rct::pk2rct(out.out_key));
}
output_data_t od = CurrentBlockchainStatus::get_output_key(outs.amount, global_amount_index);
string pks {"ee8624b194bb2c5ee87408c8ceb3aa482ef9246b21082387d58356c26bbde65b"};
public_key pk;
hex_to_pod(pks, pk);
cout << pod_to_hex(pk) << endl;
cout << pod_to_hex(rct::pk2rct(pk)) << endl;
rtc_outpk = pod_to_hex(od.commitment);
}
out_details["rct"]= rtc_outpk + rtc_mask + rtc_amount;
out_details["rct"] = rtc_outpk + rtc_mask + rtc_amount;
j_outputs.push_back(out_details);

@ -163,6 +163,89 @@ namespace xmreg
}
/*
* Not finished. get_random_outs_for_amounts is used instead of this.
*/
bool
get_random_outs(const vector<uint64_t>& amounts,
const uint64_t& outs_count)
{
// get histogram for the amounts we need
epee::json_rpc::request<COMMAND_RPC_GET_OUTPUT_HISTOGRAM::request>
req_t = AUTO_VAL_INIT(req_t);
epee::json_rpc::response<COMMAND_RPC_GET_OUTPUT_HISTOGRAM::response, std::string>
resp_t = AUTO_VAL_INIT(resp_t);
req_t.jsonrpc = "2.0";
req_t.id = epee::serialization::storage_entry(0);
req_t.method = "get_output_histogram";
req_t.params.amounts = amounts;
std::lock_guard<std::mutex> guard(m_daemon_rpc_mutex);
if (!connect_to_monero_deamon())
{
cerr << "get_current_height: not connected to deamon" << endl;
return false;
}
bool r = epee::net_utils::invoke_http_json("/json_rpc",
req_t, resp_t,
m_http_client);
if (!r || resp_t.result.status == "Failed")
{
//error_msg = res.reason;
cerr << "Error get_output_histogram: " << resp_t.result.status << endl;
return false;
}
// generate output indices to request
COMMAND_RPC_GET_OUTPUTS_BIN::request req = AUTO_VAL_INIT(req);
COMMAND_RPC_GET_OUTPUTS_BIN::response res = AUTO_VAL_INIT(res);
for (auto hist: resp_t.result.histogram)
{
cout << hist.total_instances << endl;
req.outputs.push_back({hist.amount, 2});
}
r = epee::net_utils::invoke_http_bin("/get_outs.bin",
req, res, m_http_client,
timeout_time_ms);
if (!r || res.status == "Failed")
{
//error_msg = res.reason;
cerr << "Error /get_outs.bin: " << res.status << endl;
return false;
}
for (auto o: res.outs)
{
cout << "\no.key: " << pod_to_hex(o.key) << endl;
cout << "o.mask: " << pod_to_hex(o.mask) << endl;
cout << "o.txid: " << pod_to_hex(o.txid) << endl;
cout << "o.height: " << pod_to_hex(o.height) << endl;
//rct::key mask = td.is_rct() ? rct::commit(td.amount(), td.m_mask) : rct::zeroCommit(td.amount());
rct::key rct_commitment = rct::zeroCommit(0);
}
r;
}
bool
commit_tx(const string& tx_blob, string& error_msg)

Loading…
Cancel
Save