Merge pull request #6734
3aae649
Tweak format, add option for difficulty (hyc)e416f56
Add options to print daily coin emission and fees (hyc)2f481da
Don't forget size of prunable txn part (hyc)
This commit is contained in:
commit
9006119fba
|
@ -68,6 +68,9 @@ int main(int argc, char* argv[])
|
||||||
const command_line::arg_descriptor<bool> arg_outputs = {"with-outputs", "with output stats", false};
|
const command_line::arg_descriptor<bool> arg_outputs = {"with-outputs", "with output stats", false};
|
||||||
const command_line::arg_descriptor<bool> arg_ringsize = {"with-ringsize", "with ringsize stats", false};
|
const command_line::arg_descriptor<bool> arg_ringsize = {"with-ringsize", "with ringsize stats", false};
|
||||||
const command_line::arg_descriptor<bool> arg_hours = {"with-hours", "with txns per hour", false};
|
const command_line::arg_descriptor<bool> arg_hours = {"with-hours", "with txns per hour", false};
|
||||||
|
const command_line::arg_descriptor<bool> arg_emission = {"with-emission", "with coin emission", false};
|
||||||
|
const command_line::arg_descriptor<bool> arg_fees = {"with-fees", "with txn fees", false};
|
||||||
|
const command_line::arg_descriptor<bool> arg_diff = {"with-diff", "with difficulty", false};
|
||||||
|
|
||||||
command_line::add_arg(desc_cmd_sett, cryptonote::arg_data_dir);
|
command_line::add_arg(desc_cmd_sett, cryptonote::arg_data_dir);
|
||||||
command_line::add_arg(desc_cmd_sett, cryptonote::arg_testnet_on);
|
command_line::add_arg(desc_cmd_sett, cryptonote::arg_testnet_on);
|
||||||
|
@ -79,6 +82,9 @@ int main(int argc, char* argv[])
|
||||||
command_line::add_arg(desc_cmd_sett, arg_outputs);
|
command_line::add_arg(desc_cmd_sett, arg_outputs);
|
||||||
command_line::add_arg(desc_cmd_sett, arg_ringsize);
|
command_line::add_arg(desc_cmd_sett, arg_ringsize);
|
||||||
command_line::add_arg(desc_cmd_sett, arg_hours);
|
command_line::add_arg(desc_cmd_sett, arg_hours);
|
||||||
|
command_line::add_arg(desc_cmd_sett, arg_emission);
|
||||||
|
command_line::add_arg(desc_cmd_sett, arg_fees);
|
||||||
|
command_line::add_arg(desc_cmd_sett, arg_diff);
|
||||||
command_line::add_arg(desc_cmd_only, command_line::arg_help);
|
command_line::add_arg(desc_cmd_only, command_line::arg_help);
|
||||||
|
|
||||||
po::options_description desc_options("Allowed options");
|
po::options_description desc_options("Allowed options");
|
||||||
|
@ -120,6 +126,9 @@ int main(int argc, char* argv[])
|
||||||
bool do_outputs = command_line::get_arg(vm, arg_outputs);
|
bool do_outputs = command_line::get_arg(vm, arg_outputs);
|
||||||
bool do_ringsize = command_line::get_arg(vm, arg_ringsize);
|
bool do_ringsize = command_line::get_arg(vm, arg_ringsize);
|
||||||
bool do_hours = command_line::get_arg(vm, arg_hours);
|
bool do_hours = command_line::get_arg(vm, arg_hours);
|
||||||
|
bool do_emission = command_line::get_arg(vm, arg_emission);
|
||||||
|
bool do_fees = command_line::get_arg(vm, arg_fees);
|
||||||
|
bool do_diff = command_line::get_arg(vm, arg_diff);
|
||||||
|
|
||||||
LOG_PRINT_L0("Initializing source blockchain (BlockchainDB)");
|
LOG_PRINT_L0("Initializing source blockchain (BlockchainDB)");
|
||||||
std::unique_ptr<Blockchain> core_storage;
|
std::unique_ptr<Blockchain> core_storage;
|
||||||
|
@ -177,12 +186,20 @@ plot 'stats.csv' index "DATA" using (timecolumn(1,"%Y-%m-%d")):4 with lines, ''
|
||||||
// spit out a comment that GnuPlot can use as an index
|
// spit out a comment that GnuPlot can use as an index
|
||||||
std::cout << ENDL << "# DATA" << ENDL;
|
std::cout << ENDL << "# DATA" << ENDL;
|
||||||
std::cout << "Date\tBlocks/day\tBlocks\tTxs/Day\tTxs\tBytes/Day\tBytes";
|
std::cout << "Date\tBlocks/day\tBlocks\tTxs/Day\tTxs\tBytes/Day\tBytes";
|
||||||
|
if (do_emission)
|
||||||
|
std::cout << "\tEmission/day\tEmission";
|
||||||
|
if (do_fees)
|
||||||
|
std::cout << "\tFees/day\tFees";
|
||||||
|
if (do_diff)
|
||||||
|
std::cout << "\tDiffMin\tDiffMax\tDiffAvg";
|
||||||
if (do_inputs)
|
if (do_inputs)
|
||||||
std::cout << "\tInMin\tInMax\tInAvg";
|
std::cout << "\tInMin\tInMax\tInAvg";
|
||||||
if (do_outputs)
|
if (do_outputs)
|
||||||
std::cout << "\tOutMin\tOutMax\tOutAvg";
|
std::cout << "\tOutMin\tOutMax\tOutAvg";
|
||||||
if (do_ringsize)
|
if (do_ringsize)
|
||||||
std::cout << "\tRingMin\tRingMax\tRingAvg";
|
std::cout << "\tRingMin\tRingMax\tRingAvg";
|
||||||
|
if (do_inputs || do_outputs || do_ringsize)
|
||||||
|
std::cout << std::setprecision(2) << std::fixed;
|
||||||
if (do_hours) {
|
if (do_hours) {
|
||||||
char buf[8];
|
char buf[8];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -193,14 +210,20 @@ plot 'stats.csv' index "DATA" using (timecolumn(1,"%Y-%m-%d")):4 with lines, ''
|
||||||
}
|
}
|
||||||
std::cout << ENDL;
|
std::cout << ENDL;
|
||||||
|
|
||||||
|
#define MAX_INOUT 0xffffffff
|
||||||
|
#define MAX_RINGS 0xffffffff
|
||||||
|
|
||||||
struct tm prevtm = {0}, currtm;
|
struct tm prevtm = {0}, currtm;
|
||||||
uint64_t prevsz = 0, currsz = 0;
|
uint64_t prevsz = 0, currsz = 0;
|
||||||
uint64_t prevtxs = 0, currtxs = 0;
|
uint64_t prevtxs = 0, currtxs = 0;
|
||||||
uint64_t currblks = 0;
|
uint64_t currblks = 0;
|
||||||
uint64_t totins = 0, totouts = 0, totrings = 0;
|
uint64_t totins = 0, totouts = 0, totrings = 0;
|
||||||
uint32_t minins = 10, maxins = 0;
|
boost::multiprecision::uint128_t prevemission = 0, prevfees = 0;
|
||||||
uint32_t minouts = 10, maxouts = 0;
|
boost::multiprecision::uint128_t emission = 0, fees = 0;
|
||||||
uint32_t minrings = 50, maxrings = 0;
|
boost::multiprecision::uint128_t totdiff = 0, mindiff = 0, maxdiff = 0;
|
||||||
|
uint32_t minins = MAX_INOUT, maxins = 0;
|
||||||
|
uint32_t minouts = MAX_INOUT, maxouts = 0;
|
||||||
|
uint32_t minrings = MAX_RINGS, maxrings = 0;
|
||||||
uint32_t io, tottxs = 0;
|
uint32_t io, tottxs = 0;
|
||||||
uint32_t txhr[24] = {0};
|
uint32_t txhr[24] = {0};
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -230,34 +253,50 @@ plot 'stats.csv' index "DATA" using (timecolumn(1,"%Y-%m-%d")):4 with lines, ''
|
||||||
std::cout << timebuf << "\t" << currblks << "\t" << h << "\t" << currtxs << "\t" << prevtxs + currtxs << "\t" << currsz << "\t" << prevsz + currsz;
|
std::cout << timebuf << "\t" << currblks << "\t" << h << "\t" << currtxs << "\t" << prevtxs + currtxs << "\t" << currsz << "\t" << prevsz + currsz;
|
||||||
prevsz += currsz;
|
prevsz += currsz;
|
||||||
currsz = 0;
|
currsz = 0;
|
||||||
currblks = 0;
|
|
||||||
prevtxs += currtxs;
|
prevtxs += currtxs;
|
||||||
currtxs = 0;
|
currtxs = 0;
|
||||||
if (!tottxs)
|
if (!tottxs)
|
||||||
tottxs = 1;
|
tottxs = 1;
|
||||||
|
if (do_emission) {
|
||||||
|
std::cout << "\t" << print_money(emission) << "\t" << print_money(prevemission + emission);
|
||||||
|
prevemission += emission;
|
||||||
|
emission = 0;
|
||||||
|
}
|
||||||
|
if (do_fees) {
|
||||||
|
std::cout << "\t" << print_money(fees) << "\t" << print_money(prevfees + fees);
|
||||||
|
prevfees += fees;
|
||||||
|
fees = 0;
|
||||||
|
}
|
||||||
|
if (do_diff) {
|
||||||
|
std::cout << "\t" << (maxdiff ? mindiff : 0) << "\t" << maxdiff << "\t" << totdiff / currblks;
|
||||||
|
mindiff = 0; maxdiff = 0; totdiff = 0;
|
||||||
|
}
|
||||||
if (do_inputs) {
|
if (do_inputs) {
|
||||||
std::cout << "\t" << (maxins ? minins : 0) << "\t" << maxins << "\t" << totins / tottxs;
|
std::cout << "\t" << (maxins ? minins : 0) << "\t" << maxins << "\t" << totins * 1.0 / tottxs;
|
||||||
minins = 10; maxins = 0; totins = 0;
|
minins = MAX_INOUT; maxins = 0; totins = 0;
|
||||||
}
|
}
|
||||||
if (do_outputs) {
|
if (do_outputs) {
|
||||||
std::cout << "\t" << (maxouts ? minouts : 0) << "\t" << maxouts << "\t" << totouts / tottxs;
|
std::cout << "\t" << (maxouts ? minouts : 0) << "\t" << maxouts << "\t" << totouts * 1.0 / tottxs;
|
||||||
minouts = 10; maxouts = 0; totouts = 0;
|
minouts = MAX_INOUT; maxouts = 0; totouts = 0;
|
||||||
}
|
}
|
||||||
if (do_ringsize) {
|
if (do_ringsize) {
|
||||||
std::cout << "\t" << (maxrings ? minrings : 0) << "\t" << maxrings << "\t" << totrings / tottxs;
|
std::cout << "\t" << (maxrings ? minrings : 0) << "\t" << maxrings << "\t" << totrings * 1.0 / tottxs;
|
||||||
minrings = 50; maxrings = 0; totrings = 0;
|
minrings = MAX_RINGS; maxrings = 0; totrings = 0;
|
||||||
}
|
}
|
||||||
tottxs = 0;
|
|
||||||
if (do_hours) {
|
if (do_hours) {
|
||||||
for (i=0; i<24; i++) {
|
for (i=0; i<24; i++) {
|
||||||
std::cout << "\t" << txhr[i];
|
std::cout << "\t" << txhr[i];
|
||||||
txhr[i] = 0;
|
txhr[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
currblks = 0;
|
||||||
|
tottxs = 0;
|
||||||
std::cout << ENDL;
|
std::cout << ENDL;
|
||||||
}
|
}
|
||||||
skip:
|
skip:
|
||||||
currsz += bd.size();
|
currsz += bd.size();
|
||||||
|
uint64_t coinbase_amount;
|
||||||
|
uint64_t tx_fee_amount = 0;
|
||||||
for (const auto& tx_id : blk.tx_hashes)
|
for (const auto& tx_id : blk.tx_hashes)
|
||||||
{
|
{
|
||||||
if (tx_id == crypto::null_hash)
|
if (tx_id == crypto::null_hash)
|
||||||
|
@ -275,7 +314,12 @@ skip:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
currsz += bd.size();
|
currsz += bd.size();
|
||||||
|
if (db->get_prunable_tx_blob(tx_id, bd))
|
||||||
|
currsz += bd.size();
|
||||||
currtxs++;
|
currtxs++;
|
||||||
|
if (do_fees || do_emission) {
|
||||||
|
tx_fee_amount += get_tx_fee(tx);
|
||||||
|
}
|
||||||
if (do_hours)
|
if (do_hours)
|
||||||
txhr[currtm.tm_hour]++;
|
txhr[currtm.tm_hour]++;
|
||||||
if (do_inputs) {
|
if (do_inputs) {
|
||||||
|
@ -306,6 +350,21 @@ skip:
|
||||||
}
|
}
|
||||||
tottxs++;
|
tottxs++;
|
||||||
}
|
}
|
||||||
|
if (do_diff) {
|
||||||
|
difficulty_type diff = db->get_block_difficulty(h);
|
||||||
|
if (!mindiff || diff < mindiff)
|
||||||
|
mindiff = diff;
|
||||||
|
if (diff > maxdiff)
|
||||||
|
maxdiff = diff;
|
||||||
|
totdiff += diff;
|
||||||
|
}
|
||||||
|
if (do_emission) {
|
||||||
|
coinbase_amount = get_outs_money_amount(blk.miner_tx);
|
||||||
|
emission += coinbase_amount - tx_fee_amount;
|
||||||
|
}
|
||||||
|
if (do_fees) {
|
||||||
|
fees += tx_fee_amount;
|
||||||
|
}
|
||||||
currblks++;
|
currblks++;
|
||||||
|
|
||||||
if (stop_requested)
|
if (stop_requested)
|
||||||
|
|
Loading…
Reference in New Issue