PKT Mining Return Calculator
by 3rror404
HTML
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<div class="container-fluid py-5 mb-5">
<div class="row">
<div class="col">
<div class="form-group">
<label>Daily mining rate (per server) (PKT)</label>
<input type="number" id="txtDailyMiningRate" value="1000" class="form-control">
</div>
</div>
</div>
<div class="row">
<div class="col-sm">
<div class="form-group">
<label>Monthly server cost (per server) ($)</label>
<input type="number" id="txtMonthlyServerCost" value="500" class="form-control">
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label>Number of servers</label>
<input type="number" id="txtServerCount" value="3" class="form-control">
</div>
</div>
</div>
<!-- <div class="row">
<div class="col">
<div class="alert alert-info">
Enter the current coin value or a list of target values
</div>
</div>
</div> -->
<div class="row">
<div class="col-sm">
<div class="form-group">
<label>Current coin value ($)</label>
<input type="number" id="txtCoinPrice" value="0.05" class="form-control">
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label>Target coin values (comma separated) ($)</label>
<input type="text" id="txtCoinPriceTargets" value="0.05, 0.075, 0.1, 0.25, 0.5, 1, 2.5, 10" class="form-control">
</div>
</div>
</div>
<div class="row">
<div class="col">
<button type="button" id="btnRun" class="btn btn-primary">
Run
</button>
</div>
</div>
<div class="row">
<div class="col">
<div class="alert alert-info mt-3">
<div class="d-flex...
SCSS
label {
display: block;
}
.price-table {
display: table;
width:100%;
margin-top: 2rem;
> div {
display: table-row;
&:nth-child(1) {
span {
display: block;
}
span:nth-child(1) {
font-weight: bold;
}
span:nth-child(2) {
opacity: .6;
}
}
> div {
display: table-cell;
border: 1px solid #e6e6e6;
padding: 5px;
&.total {
background: #d8ffd8;
}
}
&:hover {
> div {
background: rgba(0,0,0,.05);
&.total {
background: darken(#d8ffd8, 10%);
}
}
}
}
}
JavaScript
const DIFFICULTY_PERIOD_DAYS = 100;
const DIFFICULTY_INCREASE_PERCENTAGE = 10;
const DIFFICULTY_DROP_DATE = new Date(2021, 3, 4);
const MINING_START_DATE = new Date(2021, 3, 26);
const txtDailyMiningRate = document.querySelector('#txtDailyMiningRate');
const txtMonthlyServerCost = document.querySelector('#txtMonthlyServerCost');
const txtServerCount = document.querySelector('#txtServerCount');
const txtCoinPrice = document.querySelector('#txtCoinPrice');
const txtCoinPriceTargets = document.querySelector('#txtCoinPriceTargets');
const btnRun = document.querySelector('#btnRun');
const outputTargets = document.querySelector('#output-targets');
const outputROI = document.querySelector('#output-roi');
btnRun.addEventListener('click', run);
function run() {
generateTargetsUI(getTargets());
generateROIUI(getMonthlyROI());
}
function getTargets() {
let values = [];
if (txtCoinPriceTargets.value != '') {
const targetPrices = txtCoinPriceTargets.value.split(',');
targetPrices.forEach((coinPrice) => {
values.push(calculateYearlyReturn(parseFloat(coinPrice)));
});
} else {
const coinPrice = parseFloat(txtCoinPrice.value)
values.push(calculateYearlyReturn(coinPrice));
}
return values;
}
function getMonthlyROI() {
const coinPrice = parseFloat(txtCoinPrice.value);
const monthlyValues = [];
for (let i = 0; i < 12; i++) {
monthlyValues.push(calculateDecliningReturnForMonth(i, coinPrice));
}
console.log(monthlyValues, 'Total', monthlyValues.reduce((a, b) => a + b, 0));
return monthlyValues;
}
function calculateYearlyReturn(coinPrice) {
const dailyRate = txtDailyMiningRate.value;
const serverCount = parseInt(txtServerCount.value);
//const coinPrice = parseFloat(txtCoinPrice.value);
const value = {
price: coinPrice,
raw: (((dailyRate * 365) * coinPrice) * serverCount),
converted: (calculateDecliningReturn(coinPrice) * serverCount),
tokens: dailyRate * 365
}
...