mirror of
https://github.com/wownero/diff-chart.git
synced 2026-10-17 15:21:25 +02:00
coin supply: show projected value
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
<script src="data/aeon-data-9.js"></script>
|
||||
<script src="data/aeon-data-10.js"></script>
|
||||
<script src="js/block-reward.js"></script>
|
||||
<script src="aeon-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
@@ -42,7 +43,7 @@ var chart = get_chart([].concat(
|
||||
chartData_8,
|
||||
chartData_9,
|
||||
chartData_10,
|
||||
), 12);
|
||||
), aeon_config);
|
||||
|
||||
function togglePan() {
|
||||
chart.chartCursor.pan = document.getElementById("pan").checked;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
<script src="data/aeon-data-9.js"></script>
|
||||
<script src="data/aeon-data-10.js"></script>
|
||||
<script src="js/coin-supply.js"></script>
|
||||
<script src="aeon-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
@@ -43,7 +44,12 @@ var chart = get_chart([].concat(
|
||||
chartData_8,
|
||||
chartData_9,
|
||||
chartData_10,
|
||||
), 12);
|
||||
), aeon_config);
|
||||
|
||||
function toggleProj() {
|
||||
chart.graphs[1].hidden = !document.getElementById("proj").checked;
|
||||
chart.validateNow();
|
||||
}
|
||||
|
||||
function togglePan() {
|
||||
chart.chartCursor.pan = document.getElementById("pan").checked;
|
||||
@@ -54,6 +60,7 @@ function togglePan() {
|
||||
<body>
|
||||
<h1>Aeon coin supply</h1>
|
||||
<div id="chartdiv"></div>
|
||||
<p><input type="checkbox" id="proj" onclick="toggleProj()">Show projected supply</p>
|
||||
<p><input type="checkbox" id="pan" onclick="togglePan()">Enable panning</p>
|
||||
<p><a href="./">Back to top</a></p>
|
||||
</body>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
function int_log2(x)
|
||||
{
|
||||
var r = 0;
|
||||
while (true)
|
||||
{
|
||||
x >>= 1;
|
||||
if (x == 0)
|
||||
break;
|
||||
++r;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
var aeon_config = {
|
||||
MONEY_SUPPLY: "18446744073709551615", // (uint64_t)(-1)
|
||||
EMISSION_SPEED_FACTOR_PER_MINUTE: 20,
|
||||
FINAL_SUBSIDY_PER_MINUTE: 300000000000, // 3 * pow(10, 11)
|
||||
CRYPTONOTE_DISPLAY_DECIMAL_POINT: 12,
|
||||
DIFFICULTY_TARGET_V2: 240,
|
||||
DIFFICULTY_TARGET_V1: 60,
|
||||
get_difficulty_target: function(height) {
|
||||
return height < 592000 ? this.DIFFICULTY_TARGET_V1 : this.DIFFICULTY_TARGET_V2;
|
||||
},
|
||||
get_emission_speed_factor: function(target_minutes) {
|
||||
return this.EMISSION_SPEED_FACTOR_PER_MINUTE - int_log2(target_minutes);
|
||||
},
|
||||
};
|
||||
@@ -27,13 +27,10 @@
|
||||
<script src="data/aeon-data-9.js"></script>
|
||||
<script src="data/aeon-data-10.js"></script>
|
||||
<script src="js/diff.js"></script>
|
||||
<script src="aeon-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
var diff_targets = [
|
||||
{ height: 0, value: 60},
|
||||
{ height: 592000, value: 240},
|
||||
];
|
||||
var chart = get_chart([].concat(
|
||||
chartData_0,
|
||||
chartData_1,
|
||||
@@ -46,7 +43,7 @@ var chart = get_chart([].concat(
|
||||
chartData_8,
|
||||
chartData_9,
|
||||
chartData_10,
|
||||
), diff_targets);
|
||||
), aeon_config);
|
||||
|
||||
function toggleLogScale() {
|
||||
chart.valueAxes[0].logarithmic = document.getElementById("log_scale").checked;
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
function get_chart(chartData, decimal_point) {
|
||||
function get_chart(chartData, cryptonote_config) {
|
||||
chartData.shift();
|
||||
|
||||
for (var i = 0; i < chartData.length; ++i) {
|
||||
chartData[i].date = new Date(1000 * chartData[i][0]);
|
||||
chartData[i].height = i + 1;
|
||||
chartData[i].reward = print_money(chartData[i][3], decimal_point);
|
||||
chartData[i].reward = print_money(chartData[i][3], cryptonote_config.CRYPTONOTE_DISPLAY_DECIMAL_POINT);
|
||||
}
|
||||
|
||||
var chart = AmCharts.makeChart("chartdiv", {
|
||||
|
||||
+30
-5
@@ -1,14 +1,27 @@
|
||||
function get_chart(chartData, decimal_point) {
|
||||
function get_chart(chartData, cryptonote_config) {
|
||||
for (var i = 0; i < chartData.length; ++i) {
|
||||
chartData[i].date = new Date(1000 * chartData[i][0]);
|
||||
chartData[i].height = i;
|
||||
chartData[i].coin_supply = bigInt(chartData[i][3]);
|
||||
for (var j = 0; j < chartData[i][5].length; ++j)
|
||||
chartData[i].coin_supply = chartData[i].coin_supply.minus(chartData[i][5][j][4]);
|
||||
chartData[i].coin_supply = chartData[i].coin_supply.minus(chartData[i][5][j][4]); // subtract fees
|
||||
if (i > 0)
|
||||
chartData[i].coin_supply = chartData[i].coin_supply.plus(chartData[i - 1].coin_supply);
|
||||
chartData[i].coin_supply_str = print_money(chartData[i].coin_supply, decimal_point);
|
||||
chartData[i].coin_supply_real = chartData[i].coin_supply.toJSNumber() / Math.pow(10, decimal_point);
|
||||
chartData[i].coin_supply_str = print_money(chartData[i].coin_supply, cryptonote_config.CRYPTONOTE_DISPLAY_DECIMAL_POINT);
|
||||
chartData[i].coin_supply_real = chartData[i].coin_supply.toJSNumber() / Math.pow(10, cryptonote_config.CRYPTONOTE_DISPLAY_DECIMAL_POINT);
|
||||
// projected supply
|
||||
var target = cryptonote_config.get_difficulty_target(i);
|
||||
var target_minutes = target / 60;
|
||||
var emission_speed_factor = cryptonote_config.get_emission_speed_factor(target_minutes);
|
||||
var already_generated_coins = i == 0 ? bigInt(0) : chartData[i - 1].coin_supply_proj;
|
||||
var base_reward = bigInt(cryptonote_config.MONEY_SUPPLY).minus(already_generated_coins).shiftRight(emission_speed_factor);
|
||||
if (base_reward.lesser(cryptonote_config.FINAL_SUBSIDY_PER_MINUTE * target_minutes))
|
||||
{
|
||||
base_reward = bigInt(cryptonote_config.FINAL_SUBSIDY_PER_MINUTE * target_minutes);
|
||||
}
|
||||
chartData[i].coin_supply_proj = base_reward.plus(already_generated_coins);
|
||||
chartData[i].coin_supply_proj_str = print_money(chartData[i].coin_supply_proj, cryptonote_config.CRYPTONOTE_DISPLAY_DECIMAL_POINT);
|
||||
chartData[i].coin_supply_proj_real = chartData[i].coin_supply_proj.toJSNumber() / Math.pow(10, cryptonote_config.CRYPTONOTE_DISPLAY_DECIMAL_POINT);
|
||||
}
|
||||
|
||||
chartData.shift();
|
||||
@@ -27,7 +40,7 @@ function get_chart(chartData, decimal_point) {
|
||||
"graphs": [{
|
||||
"id": "g1",
|
||||
"lineColor": "#cc9900",
|
||||
"balloonText": "Supply: <b>[[coin_supply_str]]</b>\nHeight: <b>[[height]]</b>",
|
||||
"balloonText": "Supply: <b>[[coin_supply_str]]</b>\n(Proj: [[coin_supply_proj_str]])\nHeight: <b>[[height]]</b>",
|
||||
"bullet": "round",
|
||||
"bulletBorderAlpha": 1,
|
||||
"bulletColor": "#FFFFFF",
|
||||
@@ -38,6 +51,18 @@ function get_chart(chartData, decimal_point) {
|
||||
"balloon":{
|
||||
"cornerRadius": 10,
|
||||
}
|
||||
},{
|
||||
"id": "g2",
|
||||
"lineColor": "#447700",
|
||||
"bullet": "round",
|
||||
"bulletBorderAlpha": 1,
|
||||
"bulletColor": "#FFFFFF",
|
||||
"hideBulletsCount": 50,
|
||||
"title": "projected coin supply",
|
||||
"valueField": "coin_supply_proj_real",
|
||||
"useLineColorForBulletBorder": true,
|
||||
"showBalloon": false,
|
||||
"hidden": true,
|
||||
}],
|
||||
"chartScrollbar": {
|
||||
"autoGridCount": true,
|
||||
|
||||
+2
-10
@@ -1,19 +1,11 @@
|
||||
function get_diff_target(diff_targets, height) {
|
||||
for (var i = diff_targets.length - 1; i >= 0; --i) {
|
||||
if (diff_targets[i].height <= height)
|
||||
return diff_targets[i].value;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function get_chart(chartData, diff_targets) {
|
||||
function get_chart(chartData, cryptonote_config) {
|
||||
chartData.shift();
|
||||
|
||||
for (var i = 0; i < chartData.length; ++i) {
|
||||
chartData[i].date = new Date(1000 * chartData[i][0]);
|
||||
chartData[i].height = i + 1;
|
||||
chartData[i].difficulty = chartData[i][2];
|
||||
chartData[i].hashrate = formatHashrate(chartData[i].difficulty / get_diff_target(diff_targets, chartData[i].height), 2);
|
||||
chartData[i].hashrate = formatHashrate(chartData[i].difficulty / cryptonote_config.get_difficulty_target(chartData[i].height), 2);
|
||||
}
|
||||
|
||||
var chart = AmCharts.makeChart("chartdiv", {
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
<script src="data/monero-data-17.js"></script>
|
||||
<script src="data/monero-data-18.js"></script>
|
||||
<script src="js/block-reward.js"></script>
|
||||
<script src="monero-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
@@ -58,7 +59,7 @@ var chart = get_chart([].concat(
|
||||
chartData_16,
|
||||
chartData_17,
|
||||
chartData_18,
|
||||
), 12);
|
||||
), monero_config);
|
||||
|
||||
function togglePan() {
|
||||
chart.chartCursor.pan = document.getElementById("pan").checked;
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
<script src="data/monero-data-17.js"></script>
|
||||
<script src="data/monero-data-18.js"></script>
|
||||
<script src="js/coin-supply.js"></script>
|
||||
<script src="monero-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
@@ -59,7 +60,12 @@ var chart = get_chart([].concat(
|
||||
chartData_16,
|
||||
chartData_17,
|
||||
chartData_18,
|
||||
), 12);
|
||||
), monero_config);
|
||||
|
||||
function toggleProj() {
|
||||
chart.graphs[1].hidden = !document.getElementById("proj").checked;
|
||||
chart.validateNow();
|
||||
}
|
||||
|
||||
function togglePan() {
|
||||
chart.chartCursor.pan = document.getElementById("pan").checked;
|
||||
@@ -70,6 +76,7 @@ function togglePan() {
|
||||
<body>
|
||||
<h1>Monero coin supply</h1>
|
||||
<div id="chartdiv"></div>
|
||||
<p><input type="checkbox" id="proj" onclick="toggleProj()">Show projected supply</p>
|
||||
<p><input type="checkbox" id="pan" onclick="togglePan()">Enable panning</p>
|
||||
<p><a href="./">Back to top</a></p>
|
||||
</body>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
var monero_config = {
|
||||
MONEY_SUPPLY: "18446744073709551615", // (uint64_t)(-1)
|
||||
EMISSION_SPEED_FACTOR_PER_MINUTE: 20,
|
||||
FINAL_SUBSIDY_PER_MINUTE: 300000000000, // 3 * pow(10, 11)
|
||||
CRYPTONOTE_DISPLAY_DECIMAL_POINT: 12,
|
||||
DIFFICULTY_TARGET_V2: 120,
|
||||
DIFFICULTY_TARGET_V1: 60,
|
||||
get_difficulty_target: function(height) {
|
||||
return height < 1009827 ? this.DIFFICULTY_TARGET_V1 : this.DIFFICULTY_TARGET_V2;
|
||||
},
|
||||
get_emission_speed_factor: function(target_minutes) {
|
||||
return this.EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes - 1);
|
||||
},
|
||||
};
|
||||
+2
-5
@@ -35,13 +35,10 @@
|
||||
<script src="data/monero-data-17.js"></script>
|
||||
<script src="data/monero-data-18.js"></script>
|
||||
<script src="js/diff.js"></script>
|
||||
<script src="monero-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
var diff_targets = [
|
||||
{ height: 0, value: 60},
|
||||
{ height: 1009827, value: 120},
|
||||
];
|
||||
var chart = get_chart([].concat(
|
||||
chartData_0,
|
||||
chartData_1,
|
||||
@@ -62,7 +59,7 @@ var chart = get_chart([].concat(
|
||||
chartData_16,
|
||||
chartData_17,
|
||||
chartData_18,
|
||||
), diff_targets);
|
||||
), monero_config);
|
||||
|
||||
function toggleLogScale() {
|
||||
chart.valueAxes[0].logarithmic = document.getElementById("log_scale").checked;
|
||||
|
||||
@@ -17,10 +17,11 @@
|
||||
<script src="js/util.js"></script>
|
||||
<script src="data/wownero-data-0.js"></script>
|
||||
<script src="js/block-reward.js"></script>
|
||||
<script src="wownero-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
var chart = get_chart(chartData_0, 11);
|
||||
var chart = get_chart(chartData_0, wownero_config);
|
||||
|
||||
function togglePan() {
|
||||
chart.chartCursor.pan = document.getElementById("pan").checked;
|
||||
|
||||
@@ -18,10 +18,16 @@
|
||||
<script src="js/util.js"></script>
|
||||
<script src="data/wownero-data-0.js"></script>
|
||||
<script src="js/coin-supply.js"></script>
|
||||
<script src="wownero-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
var chart = get_chart(chartData_0, 11);
|
||||
var chart = get_chart(chartData_0, wownero_config);
|
||||
|
||||
function toggleProj() {
|
||||
chart.graphs[1].hidden = !document.getElementById("proj").checked;
|
||||
chart.validateNow();
|
||||
}
|
||||
|
||||
function togglePan() {
|
||||
chart.chartCursor.pan = document.getElementById("pan").checked;
|
||||
@@ -32,6 +38,7 @@ function togglePan() {
|
||||
<body>
|
||||
<h1>Wownero coin supply</h1>
|
||||
<div id="chartdiv"></div>
|
||||
<p><input type="checkbox" id="proj" onclick="toggleProj()">Show projected supply</p>
|
||||
<p><input type="checkbox" id="pan" onclick="togglePan()">Enable panning</p>
|
||||
<p><a href="./">Back to top</a></p>
|
||||
</body>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
var wownero_config = {
|
||||
MONEY_SUPPLY: "18446744073709551615", // (uint64_t)(-1)
|
||||
EMISSION_SPEED_FACTOR_PER_MINUTE: 24,
|
||||
FINAL_SUBSIDY_PER_MINUTE: 0,
|
||||
CRYPTONOTE_DISPLAY_DECIMAL_POINT: 11,
|
||||
DIFFICULTY_TARGET_V2: 300,
|
||||
DIFFICULTY_TARGET_V1: 300,
|
||||
get_difficulty_target: function(height) {
|
||||
return this.DIFFICULTY_TARGET_V1;
|
||||
},
|
||||
get_emission_speed_factor: function(target_minutes) {
|
||||
return this.EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes - 1);
|
||||
},
|
||||
};
|
||||
+2
-4
@@ -17,13 +17,11 @@
|
||||
<script src="js/util.js"></script>
|
||||
<script src="data/wownero-data-0.js"></script>
|
||||
<script src="js/diff.js"></script>
|
||||
<script src="wownero-config.js"></script>
|
||||
|
||||
<!-- Chart code -->
|
||||
<script>
|
||||
var diff_targets = [
|
||||
{ height: 0, value: 300},
|
||||
];
|
||||
var chart = get_chart(chartData_0, diff_targets);
|
||||
var chart = get_chart(chartData_0, wownero_config);
|
||||
|
||||
function toggleLogScale() {
|
||||
chart.valueAxes[0].logarithmic = document.getElementById("log_scale").checked;
|
||||
|
||||
Reference in New Issue
Block a user