get_random_outs updated to ringct

pull/3/head
moneroexamples 7 years ago
parent 1bd3b2678a
commit 577c1f3d5c

@ -1754,7 +1754,9 @@ var cnUtil = (function(initConfig) {
}
var found_money = JSBigInt.ZERO;
var sources = [];
console.log('Selected transfers: ', outputs);
//console.log('Selected transfers: ', outputs);
for (i = 0; i < outputs.length; ++i) {
found_money = found_money.add(outputs[i].amount);
if (found_money.compare(UINT64_MAX) !== -1) {
@ -1780,6 +1782,9 @@ var cnUtil = (function(initConfig) {
var oe = {};
oe.index = out.global_index.toString();
oe.key = out.public_key;
console.log('outputs[',i,']: ', outputs[i]);
if (rct){
if (out.rct){
oe.commit = out.rct.slice(0,64); //add commitment from rct mix outs

@ -62,4 +62,4 @@ var crc32 = (function () {
};
return crc32;
})();
})();

@ -176,8 +176,47 @@ CurrentBlockchainStatus::tx_exist(const string& tx_hash_str)
throw runtime_error("(hex_to_pod(tx_hash_str, tx_hash) failed!");
}
bool
CurrentBlockchainStatus::get_tx_with_output(
uint64_t output_idx, uint64_t amount,
transaction& tx, uint64_t& output_idx_in_tx)
{
tx_out_index tx_out_idx;
try
{
// get pair pair<crypto::hash, uint64_t> where first is tx hash
// and second is local index of the output i in that tx
tx_out_idx = core_storage->get_db()
.get_output_tx_and_index(amount, output_idx);
}
catch (const OUTPUT_DNE &e)
{
string out_msg = fmt::format(
"Output with amount {:d} and index {:d} does not exist!",
amount, output_idx
);
bool
cerr << out_msg << endl;
return false;
}
output_idx_in_tx = tx_out_idx.second;
if (!mcore.get_tx(tx_out_idx.first, tx))
{
cerr << "Cant get tx: " << tx_out_idx.first << endl;
return false;
}
return true;
}
bool
CurrentBlockchainStatus::get_output_keys(const uint64_t& amount,
const vector<uint64_t>& absolute_offsets,
vector<cryptonote::output_data_t>& outputs)

@ -103,6 +103,10 @@ struct CurrentBlockchainStatus
static bool
tx_exist(const string& tx_hash_str);
static bool
get_tx_with_output(uint64_t output_idx, uint64_t amount,
transaction& tx, uint64_t& output_idx_in_tx);
static bool
get_output_keys(const uint64_t& amount,
const vector<uint64_t>& absolute_offsets,

@ -462,18 +462,57 @@ YourMoneroRequests::get_random_outs(const shared_ptr< Session > session, const B
for (const COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::out_entry& out: outs.outs)
{
uint64_t global_amount_index = out.global_amount_index;
j_outputs.push_back(json {
transaction random_output_tx;
uint64_t output_idx_in_tx;
if (!CurrentBlockchainStatus::get_tx_with_output(
global_amount_index, outs.amount,
random_output_tx, output_idx_in_tx))
{
cerr << "cant get random output transaction" << endl;
break;
}
//cout << pod_to_hex(out.out_key) << endl;
//cout << pod_to_hex(get_transaction_hash(random_output_tx)) << endl;
//cout << output_idx_in_tx << endl;
// 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);
json out_details {
{"global_index", out.global_amount_index},
{"public_key" , pod_to_hex(out.out_key)}
});
}
};
if (random_output_tx.version > 1 && !is_coinbase(random_output_tx))
{
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);
}
else
{
rtc_outpk = pod_to_hex(rct::pk2rct(out.out_key));
}
out_details["rct"]= rtc_outpk + rtc_mask + rtc_amount;
j_outputs.push_back(out_details);
} // for (const COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::out_entry& out: outs.outs)
j_amount_outs.push_back(j_outs);
}
}
} // for (const COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount& outs: found_outputs)
} // if (CurrentBlockchainStatus::get_random_outputs(amounts, count, found_outputs))
string response_body = j_response.dump();

Loading…
Cancel
Save