Skip to content

Commit cfe4290

Browse files
chore(monitor): add more faucet information (#1373)
1 parent 6adf691 commit cfe4290

4 files changed

Lines changed: 91 additions & 14 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## v0.12.6 (TBD)
4+
5+
- Added Faucet metadata to the `miden-network-monitor` binary ([#1373](https://github.com/0xMiden/miden-node/pull/1373)).
6+
37
## v0.12.5 (2025-11-27)
48

59
- Actually update `miden-base` dependencies ([#1384](https://github.com/0xMiden/miden-node/pull/1384)).

bin/network-monitor/assets/index.html

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
<div class="main-content">
2020
<div class="form-title">Network Status Dashboard</div>
21-
21+
2222
<div id="status-container">
2323
<div class="loading-section">
2424
<div class="loader"></div>
@@ -168,7 +168,7 @@
168168
const isHealthy = service.status === 'Healthy';
169169
const statusColor = isHealthy ? '#22C55D' : '#ff5500';
170170
const statusIcon = isHealthy ? '✓' : '✗';
171-
171+
172172
let detailsHtml = '';
173173
if (service.details) {
174174
const details = service.details;
@@ -178,7 +178,7 @@
178178
<div class="detail-item"><strong>Version:</strong> ${details.RpcStatus.version}</div>
179179
${details.RpcStatus.genesis_commitment ? `
180180
<div class="detail-item">
181-
<strong>Genesis:</strong>
181+
<strong>Genesis:</strong>
182182
<span class="genesis-value">0x${details.RpcStatus.genesis_commitment.substring(0, 20)}...</span>
183183
<button class="copy-button" onclick="copyToClipboard('${details.RpcStatus.genesis_commitment}', event)" title="Copy full genesis commitment">
184184
<svg class="copy-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -254,6 +254,56 @@
254254
` : ''}
255255
</div>
256256
</div>
257+
${details.FaucetTest.faucet_metadata ? `
258+
<div class="nested-status">
259+
<strong>Faucet Token Info:</strong>
260+
<div class="test-metrics ${service.status === "Healthy" ? "healthy" : "unhealthy"}">
261+
<div class="metric-row">
262+
<span class="metric-label">Token ID:</span>
263+
<span class="metric-value">${details.FaucetTest.faucet_metadata.id.substring(0, 16)}...
264+
<button class="copy-button" onclick="copyToClipboard('${details.FaucetTest.faucet_metadata.id}', event)" title="Copy full token ID">
265+
<svg class="copy-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
266+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
267+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
268+
</svg>
269+
</button>
270+
</span>
271+
</div>
272+
<div class="metric-row">
273+
<span class="metric-label">Version:</span>
274+
<span class="metric-value">${details.FaucetTest.faucet_metadata.version || '-'}</span>
275+
</div>
276+
<div class="metric-row">
277+
<span class="metric-label">Current Issuance:</span>
278+
<span class="metric-value">${details.FaucetTest.faucet_metadata.issuance.toLocaleString()}</span>
279+
</div>
280+
<div class="metric-row">
281+
<span class="metric-label">Max Supply:</span>
282+
<span class="metric-value">${details.FaucetTest.faucet_metadata.max_supply.toLocaleString()}</span>
283+
</div>
284+
<div class="metric-row">
285+
<span class="metric-label">Decimals:</span>
286+
<span class="metric-value">${details.FaucetTest.faucet_metadata.decimals}</span>
287+
</div>
288+
<div class="metric-row">
289+
<span class="metric-label">Base Amount:</span>
290+
<span class="metric-value">${details.FaucetTest.faucet_metadata.base_amount.toLocaleString()}</span>
291+
</div>
292+
<div class="metric-row">
293+
<span class="metric-label">PoW Difficulty:</span>
294+
<span class="metric-value">${details.FaucetTest.faucet_metadata.pow_load_difficulty}</span>
295+
</div>
296+
<div class="metric-row">
297+
<span class="metric-label">Explorer URL:</span>
298+
<span class="metric-value">
299+
<a href="${details.FaucetTest.faucet_metadata.explorer_url}" target="_blank" rel="noopener noreferrer">
300+
${details.FaucetTest.faucet_metadata.explorer_url}
301+
</a>
302+
</span>
303+
</div>
304+
</div>
305+
</div>
306+
` : ''}
257307
` : ''}
258308
${details.NtxIncrement ? `
259309
<div class="nested-status">
@@ -413,7 +463,7 @@
413463
const originalContent = button.innerHTML;
414464
button.innerHTML = '<svg class="copy-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6L9 17l-5-5"/></svg>';
415465
button.style.color = '#22C55D';
416-
466+
417467
setTimeout(() => {
418468
button.innerHTML = originalContent;
419469
button.style.color = '';

bin/network-monitor/src/faucet.rs

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub struct FaucetTestDetails {
3838
pub success_count: u64,
3939
pub failure_count: u64,
4040
pub last_tx_id: Option<String>,
41-
pub challenge_difficulty: Option<u32>,
41+
pub faucet_metadata: Option<GetMetadataResponse>,
4242
}
4343

4444
/// Response from the faucet's `/pow` endpoint.
@@ -58,6 +58,19 @@ struct GetTokensResponse {
5858
note_id: String,
5959
}
6060

61+
/// Response from the faucet's `/get_metadata` endpoint.
62+
#[derive(Clone, Debug, Serialize, Deserialize)]
63+
pub struct GetMetadataResponse {
64+
id: String,
65+
issuance: u64,
66+
max_supply: u64,
67+
decimals: u8,
68+
explorer_url: String,
69+
pow_load_difficulty: u32,
70+
base_amount: u64,
71+
version: Option<String>,
72+
}
73+
6174
// FAUCET TEST TASK
6275
// ================================================================================================
6376

@@ -89,7 +102,7 @@ pub async fn run_faucet_test_task(
89102
let mut success_count = 0u64;
90103
let mut failure_count = 0u64;
91104
let mut last_tx_id = None;
92-
let mut last_challenge_difficulty = None;
105+
let mut faucet_metadata = None;
93106

94107
let mut interval = tokio::time::interval(test_interval);
95108
interval.set_missed_tick_behavior(MissedTickBehavior::Skip);
@@ -102,11 +115,11 @@ pub async fn run_faucet_test_task(
102115
let start_time = std::time::Instant::now();
103116

104117
match perform_faucet_test(&client, &faucet_url).await {
105-
Ok((result, challenge_difficulty)) => {
118+
Ok((minted_tokens, metadata)) => {
106119
success_count += 1;
107-
last_tx_id = Some(result.tx_id.clone());
108-
last_challenge_difficulty = Some(challenge_difficulty);
109-
info!("Faucet test successful: tx_id={}", result.tx_id);
120+
last_tx_id = Some(minted_tokens.tx_id.clone());
121+
faucet_metadata = Some(metadata);
122+
info!("Faucet test successful: tx_id={}", minted_tokens.tx_id);
110123
},
111124
Err(e) => {
112125
failure_count += 1;
@@ -121,7 +134,7 @@ pub async fn run_faucet_test_task(
121134
success_count,
122135
failure_count,
123136
last_tx_id: last_tx_id.clone(),
124-
challenge_difficulty: last_challenge_difficulty,
137+
faucet_metadata: faucet_metadata.clone(),
125138
};
126139

127140
let status = ServiceStatus {
@@ -157,7 +170,7 @@ pub async fn run_faucet_test_task(
157170
async fn perform_faucet_test(
158171
client: &Client,
159172
faucet_url: &Url,
160-
) -> anyhow::Result<(GetTokensResponse, u32)> {
173+
) -> anyhow::Result<(GetTokensResponse, GetMetadataResponse)> {
161174
// Use a test account ID - convert to AccountId and format properly
162175
let account_id = AccountId::try_from(ACCOUNT_ID_SENDER)
163176
.context("Failed to create AccountId from test constant")?;
@@ -211,7 +224,17 @@ async fn perform_faucet_test(
211224
let tokens_response: GetTokensResponse = serde_json::from_str(&response_text)
212225
.with_context(|| format!("Failed to parse tokens response: {response_text}"))?;
213226

214-
Ok((tokens_response, challenge_response.target.leading_zeros()))
227+
// Step 4: Get faucet metadata
228+
let metadata_url = faucet_url.join("/get_metadata")?;
229+
230+
let response = client.get(metadata_url).send().await?;
231+
232+
let response_text = response.text().await?;
233+
234+
let metadata: GetMetadataResponse = serde_json::from_str(&response_text)
235+
.with_context(|| format!("Failed to parse metadata response: {response_text}"))?;
236+
237+
Ok((tokens_response, metadata))
215238
}
216239

217240
/// Solves a proof-of-work challenge using SHA-256 hashing.

bin/network-monitor/src/monitor/tasks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ impl Tasks {
208208
success_count: 0,
209209
failure_count: 0,
210210
last_tx_id: None,
211-
challenge_difficulty: None,
211+
faucet_metadata: None,
212212
}),
213213
};
214214

0 commit comments

Comments
 (0)