145 lines
3.8 KiB
Vue
145 lines
3.8 KiB
Vue
<template>
|
|
<div class="page">
|
|
<section class="card">
|
|
<h1>Monero node (monerod)</h1>
|
|
<p>
|
|
monerod runs in the atlas cluster (ns: <span class="mono">crypto</span>). Use the external RPC endpoint below; no cluster access or
|
|
port-forwarding is required.
|
|
</p>
|
|
<div class="panel">
|
|
<div class="label">Live status</div>
|
|
<div v-if="loading" class="mono">Loading...</div>
|
|
<div v-else-if="error" class="mono error">{{ error }}</div>
|
|
<div v-else class="grid">
|
|
<div class="kv"><span class="k">net</span><span class="v mono">{{ info.nettype }}</span></div>
|
|
<div class="kv"><span class="k">status</span><span class="v mono">{{ info.status }}</span></div>
|
|
<div class="kv"><span class="k">height</span><span class="v mono">{{ info.height }}</span></div>
|
|
<div class="kv"><span class="k">target</span><span class="v mono">{{ info.target_height }}</span></div>
|
|
</div>
|
|
</div>
|
|
<div class="panel">
|
|
<div class="label">External RPC (TLS)</div>
|
|
<code>monero.bstein.dev:443</code>
|
|
<div class="note">
|
|
Use SSL/TLS. If credentials are provided, set daemon login in your wallet; otherwise leave blank. If you need access, request a wallet
|
|
RPC user/pass.
|
|
</div>
|
|
</div>
|
|
<div class="panel">
|
|
<div class="label">Wallet config (GUI)</div>
|
|
<ul>
|
|
<li>Settings → Node → Address: <span class="mono">monero.bstein.dev</span></li>
|
|
<li>Port: <span class="mono">443</span></li>
|
|
<li>Use SSL/TLS: enabled</li>
|
|
<li>Daemon username/password: only if you were given credentials</li>
|
|
</ul>
|
|
</div>
|
|
<div class="panel">
|
|
<div class="label">Wallet config (CLI)</div>
|
|
<code>monero-wallet-cli --daemon-address monero.bstein.dev:443 --daemon-ssl enabled --daemon-login <user:pass></code>
|
|
<div class="note">Omit <span class="mono">--daemon-login</span> if the endpoint does not require authentication.</div>
|
|
</div>
|
|
<p class="note">
|
|
If you cannot connect, reach out for RPC credentials or allowlisting. The node stays on {{ info.nettype || "mainnet" }} and exposes
|
|
standard RPC at <span class="mono">/json_rpc</span>.
|
|
</p>
|
|
</section>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { onMounted, ref } from "vue";
|
|
import axios from "axios";
|
|
|
|
const info = ref({});
|
|
const loading = ref(true);
|
|
const error = ref("");
|
|
|
|
onMounted(async () => {
|
|
try {
|
|
const { data } = await axios.get("/api/monero/get_info", { timeout: 2500 });
|
|
info.value = data || {};
|
|
} catch (e) {
|
|
error.value = "Could not reach monerod from this site yet.";
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<style scoped>
|
|
.page {
|
|
max-width: 900px;
|
|
margin: 0 auto;
|
|
padding: 32px 22px 72px;
|
|
}
|
|
|
|
.panel {
|
|
margin: 10px 0;
|
|
padding: 10px;
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
border-radius: var(--radius-sm);
|
|
background: rgba(255, 255, 255, 0.04);
|
|
}
|
|
|
|
.label {
|
|
font-weight: 700;
|
|
color: var(--text-strong);
|
|
}
|
|
|
|
.note {
|
|
color: var(--text-muted);
|
|
font-size: 13px;
|
|
margin-top: 8px;
|
|
}
|
|
|
|
code {
|
|
display: block;
|
|
margin-top: 6px;
|
|
color: var(--accent-cyan);
|
|
}
|
|
|
|
.grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 10px;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.kv {
|
|
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
border-radius: 12px;
|
|
padding: 10px;
|
|
background: rgba(255, 255, 255, 0.03);
|
|
}
|
|
|
|
.panel ul {
|
|
margin: 6px 0 0;
|
|
padding-left: 18px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.panel li {
|
|
margin: 0 0 4px;
|
|
}
|
|
|
|
.k {
|
|
display: block;
|
|
color: var(--text-muted);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.v {
|
|
display: block;
|
|
color: var(--text-strong);
|
|
font-weight: 700;
|
|
margin-top: 6px;
|
|
}
|
|
|
|
.error {
|
|
color: var(--accent-rose);
|
|
}
|
|
</style>
|