Merge pull request #5351
a299dc96
rpc.gettransactions: fill as_json with partial tx in pruned mode (stoffu)
This commit is contained in:
commit
18ceac9ca5
|
@ -646,30 +646,61 @@ namespace cryptonote
|
||||||
e.prunable_hash = epee::string_tools::pod_to_hex(std::get<2>(tx));
|
e.prunable_hash = epee::string_tools::pod_to_hex(std::get<2>(tx));
|
||||||
if (req.split || req.prune || std::get<3>(tx).empty())
|
if (req.split || req.prune || std::get<3>(tx).empty())
|
||||||
{
|
{
|
||||||
|
// use splitted form with pruned and prunable (filled only when prune=false and the daemon has it), leaving as_hex as empty
|
||||||
e.pruned_as_hex = string_tools::buff_to_hex_nodelimer(std::get<1>(tx));
|
e.pruned_as_hex = string_tools::buff_to_hex_nodelimer(std::get<1>(tx));
|
||||||
if (!req.prune)
|
if (!req.prune)
|
||||||
e.prunable_as_hex = string_tools::buff_to_hex_nodelimer(std::get<3>(tx));
|
e.prunable_as_hex = string_tools::buff_to_hex_nodelimer(std::get<3>(tx));
|
||||||
}
|
if (req.decode_as_json)
|
||||||
else
|
|
||||||
{
|
|
||||||
cryptonote::blobdata tx_data;
|
|
||||||
if (req.prune)
|
|
||||||
tx_data = std::get<1>(tx);
|
|
||||||
else
|
|
||||||
tx_data = std::get<1>(tx) + std::get<3>(tx);
|
|
||||||
e.as_hex = string_tools::buff_to_hex_nodelimer(tx_data);
|
|
||||||
if (req.decode_as_json && !tx_data.empty())
|
|
||||||
{
|
{
|
||||||
|
cryptonote::blobdata tx_data;
|
||||||
cryptonote::transaction t;
|
cryptonote::transaction t;
|
||||||
if (cryptonote::parse_and_validate_tx_from_blob(tx_data, t))
|
if (req.prune || std::get<3>(tx).empty())
|
||||||
{
|
{
|
||||||
if (req.prune)
|
// decode pruned tx to JSON
|
||||||
|
tx_data = std::get<1>(tx);
|
||||||
|
if (cryptonote::parse_and_validate_tx_base_from_blob(tx_data, t))
|
||||||
{
|
{
|
||||||
pruned_transaction pruned_tx{t};
|
pruned_transaction pruned_tx{t};
|
||||||
e.as_json = obj_to_json_str(pruned_tx);
|
e.as_json = obj_to_json_str(pruned_tx);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
res.status = "Failed to parse and validate pruned tx from blob";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// decode full tx to JSON
|
||||||
|
tx_data = std::get<1>(tx) + std::get<3>(tx);
|
||||||
|
if (cryptonote::parse_and_validate_tx_from_blob(tx_data, t))
|
||||||
|
{
|
||||||
e.as_json = obj_to_json_str(t);
|
e.as_json = obj_to_json_str(t);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res.status = "Failed to parse and validate tx from blob";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// use non-splitted form, leaving pruned_as_hex and prunable_as_hex as empty
|
||||||
|
cryptonote::blobdata tx_data = std::get<1>(tx) + std::get<3>(tx);
|
||||||
|
e.as_hex = string_tools::buff_to_hex_nodelimer(tx_data);
|
||||||
|
if (req.decode_as_json)
|
||||||
|
{
|
||||||
|
cryptonote::transaction t;
|
||||||
|
if (cryptonote::parse_and_validate_tx_from_blob(tx_data, t))
|
||||||
|
{
|
||||||
|
e.as_json = obj_to_json_str(t);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res.status = "Failed to parse and validate tx from blob";
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue