diff --git a/installer b/installer
index 84c0326..fee612c 100755
--- a/installer
+++ b/installer
@@ -4,11 +4,11 @@
# An Open Source Linux Appliance from Robbie Ferguson
# (c) 2025 Robbie Ferguson
-# Version 1.0.2
+# Version 1.0.3
set -e
-BTC_VER="30.0"
+BTC_VER="29.2"
APP_ROOT="/opt/btc-solo"
WWW_ROOT="/var/www/btc-solo"
@@ -109,7 +109,7 @@ curl -fsSL "$BASE_URL/$TARBALL" -o "$TMPD/$TARBALL"
curl -fsSL "$BASE_URL/SHA256SUMS" -o "$TMPD/SHA256SUMS"
if command -v gpg >/dev/null 2>&1; then
curl -fsSL "$BASE_URL/SHA256SUMS.asc" -o "$TMPD/SHA256SUMS.asc" || true
- # If you’ve already imported the Bitcoin Core release keys, this will verify.
+ # If you've already imported the Bitcoin Core release keys, this will verify.
# If not, we still proceed after SHA256 check below.
gpg --verify "$TMPD/SHA256SUMS.asc" "$TMPD/SHA256SUMS" || echo "[WARN] Could not verify SHA256SUMS signature (no keys?). Continuing with SHA256 check."
fi
@@ -1166,7 +1166,7 @@ function drawLineGraph(containerId, points, opts = {}) {
Range
${
isFinite(minVal) && isFinite(maxVal)
- ? minVal.toFixed(2) + '–' + maxVal.toFixed(2) + ' ' + unit
+ ? minVal.toFixed(2) + '-' + maxVal.toFixed(2) + ' ' + unit
: 'n/a'
}
@@ -1425,7 +1425,7 @@ async function loadStatus() {
const rawIbd = data.initialblockdownload;
const hasRealIbd = (typeof rawIbd === 'boolean');
const ibd = hasRealIbd ? rawIbd : true;
- const blocks = data.blocks ?? '–';
+ const blocks = data.blocks ?? '-';
const pruned = data.pruned ? '(pruned)' : '';
let progress = 0;
if (typeof data.verificationprogress === 'number') {
@@ -1591,7 +1591,7 @@ function parseHashrate(str) {
}
function formatHashrateHps(value) {
- if (value == null || !isFinite(value) || value <= 0) return '–';
+ if (value == null || !isFinite(value) || value <= 0) return '-';
let v = value;
let unit = 'H/s';
@@ -1627,9 +1627,9 @@ const HIDE_SEC = 3 * 24 * 3600; // 3 days -> "inactive" list
const PURGE_SEC = 30 * 24 * 3600; // 30 days -> purge from UI
function formatShare(value) {
- if (value == null) return '–';
+ if (value == null) return '-';
const num = typeof value === 'number' ? value : parseFloat(value);
- if (!isFinite(num)) return '–';
+ if (!isFinite(num)) return '-';
const units = ['', 'k', 'M', 'G', 'T', 'P'];
let v = num;
let i = 0;
@@ -1675,13 +1675,13 @@ function buildWorkerDetailHtml(worker, animate, graphId) {
detail.push('
Last share: ' + lastRel + ' (' + lastAbs + ')
');
detail.push('Hashrate (averages):
');
detail.push('' +
- '- 1 minute: ' + (worker.hashrate1m || '–') + '
' +
- '- 5 minutes: ' + (worker.hashrate5m || '–') + '
' +
- '- 1 hour: ' + (worker.hashrate1hr || '–') + '
' +
- '- 1 day: ' + (worker.hashrate1d || '–') + '
' +
- '- 7 days: ' + (worker.hashrate7d || '–') + '
' +
+ '- 1 minute: ' + (worker.hashrate1m || '-') + '
' +
+ '- 5 minutes: ' + (worker.hashrate5m || '-') + '
' +
+ '- 1 hour: ' + (worker.hashrate1hr || '-') + '
' +
+ '- 1 day: ' + (worker.hashrate1d || '-') + '
' +
+ '- 7 days: ' + (worker.hashrate7d || '-') + '
' +
'
');
- detail.push('Shares: ' + (worker.shares ?? '–') +
+ detail.push('
Shares: ' + (worker.shares ?? '-') +
' • Best share: ' + formatShare(worker.bestshare) +
' • Best ever: ' + formatShare(worker.bestever) + '
');
@@ -1816,17 +1816,17 @@ async function loadPool() {
const acceptedText = shares.accepted != null
? acceptedNum.toLocaleString()
- : '–';
+ : '-';
const rejectedText = shares.rejected != null
? rejectedNum.toLocaleString()
- : '–';
+ : '-';
let rejectPct = null;
if (totalShares > 0 && rejectedNum >= 0) {
rejectPct = ((rejectedNum / totalShares) * 100).toFixed(2);
}
- const bestHashText = bestPoolH1m ? formatHashrateHps(bestPoolH1m) : '–';
+ const bestHashText = bestPoolH1m ? formatHashrateHps(bestPoolH1m) : '-';
summaryHtml += '
SHARES
';
summaryHtml += '
';
@@ -1932,12 +1932,12 @@ async function loadPool() {
tableHtml += '
' +
'| ' + displayName + ' | ' +
- '' + (w.hashrate1m || '–') + ' | ' +
- '' + (w.hashrate5m || '–') + ' | ' +
- '' + (w.hashrate1hr || '–') + ' | ' +
- '' + (w.hashrate1d || '–') + ' | ' +
- '' + (w.hashrate7d || '–') + ' | ' +
- '' + (w.shares ?? '–') + ' | ' +
+ '' + (w.hashrate1m || '-') + ' | ' +
+ '' + (w.hashrate5m || '-') + ' | ' +
+ '' + (w.hashrate1hr || '-') + ' | ' +
+ '' + (w.hashrate1d || '-') + ' | ' +
+ '' + (w.hashrate7d || '-') + ' | ' +
+ '' + (w.shares ?? '-') + ' | ' +
'' + formatShare(w.bestshare) + ' | ' +
'' + lastCol + ' | ' +
'
';
@@ -2349,7 +2349,7 @@ if (isset($_GET['addr'])) {
$addr = trim($_GET['addr']);
}
-// light sanity check (not strict – CKPool does the real validation)
+// light sanity check (not strict - CKPool does the real validation)
if ($addr !== '' && !preg_match('/^[13bc][a-km-zA-HJ-NP-Z1-9]{25,}$/', $addr)) {
$addr = '';
}
@@ -2418,7 +2418,7 @@ if ($addr !== '') {
}
$resp['worker_count'] = count($resp['workers']);
} else {
- // Not a fatal error – just "no data yet" for that address
+ // Not a fatal error - just "no data yet" for that address
if ($resp['error'] === null) {
$resp['error'] = 'No worker stats yet for this address';
}
@@ -2483,7 +2483,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {