**Motivations:** - Fix insufficient UTXO amount error in anchor API - Ensure continuous availability of usable UTXOs for anchor transactions - Improve anchor transaction reliability and efficiency **Root causes:** - UTXO selection logic was too restrictive, rejecting UTXOs larger than needed - No automatic provisioning of new usable UTXOs when existing ones were not suitable - Algorithm prevented efficient use of available UTXOs **Correctifs:** - Refactored createAnchorTransaction() to provision 7 UTXOs of 2500 sats on each anchor - Use single large UTXO to create 1 anchor output + 7 provisioning outputs + change - Simplified UTXO selection: single large UTXO per transaction instead of multiple small ones - Added UTXO provisioning logic in signet-dashboard - Enhanced Bitcoin RPC methods in both api-anchorage and signet-dashboard - Added documentation in fixKnowledge/api-anchorage-utxo-provisioning.md **Evolutions:** - Enhanced signet-dashboard with new pages (hash-list, utxo-list, join-signet, api-docs) - Improved Bitcoin RPC client with better error handling and UTXO management - Added cache files for hash and UTXO lists - Updated api-faucet with improved server configuration - Enhanced anchor count tracking **Pages affectées:** - api-anchorage/src/bitcoin-rpc.js: Complete refactor of createAnchorTransaction() - api-anchorage/src/routes/anchor.js: Enhanced anchor route - api-anchorage/src/server.js: Server configuration updates - signet-dashboard/src/bitcoin-rpc.js: Added comprehensive Bitcoin RPC client - signet-dashboard/src/server.js: Enhanced server with new routes - signet-dashboard/public/: Added new HTML pages and updated app.js - api-faucet/src/server.js: Server improvements - api-faucet/README.md: Documentation updates - fixKnowledge/api-anchorage-utxo-provisioning.md: New documentation - anchor_count.txt, hash_list.txt, utxo_list.txt: Tracking files
156 lines
7.1 KiB
HTML
156 lines
7.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Bitcoin Ancrage - Dashboard de Supervision</title>
|
|
<link rel="stylesheet" href="styles.css">
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<header>
|
|
<h1>Bitcoin Ancrage - Dashboard de Supervision</h1>
|
|
<p class="subtitle">Surveillance de la blockchain et outils de test</p>
|
|
<p class="external-links">
|
|
<a href="https://mempool.4nkweb.com/fr/" target="_blank" rel="noopener noreferrer" class="external-link">
|
|
🔗 Explorer Mempool
|
|
</a>
|
|
<a href="/hash-list" class="external-link">
|
|
📋 Liste des Hash
|
|
</a>
|
|
<a href="/utxo-list" class="external-link">
|
|
✅ Liste des UTXO
|
|
</a>
|
|
<a href="/join-signet" class="external-link">
|
|
🔗 Rejoindre le Réseau
|
|
</a>
|
|
<a href="/api-docs" class="external-link">
|
|
📚 Documentation API
|
|
</a>
|
|
</p>
|
|
</header>
|
|
|
|
<main>
|
|
<!-- Section Supervision -->
|
|
<section class="supervision-section">
|
|
<h2>État de la Blockchain</h2>
|
|
<div class="grid">
|
|
<div class="card">
|
|
<h3>Hauteur de Bloc</h3>
|
|
<p class="value" id="block-height">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Dernier Bloc Miné</h3>
|
|
<p class="value" id="last-block-time">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Transactions dans le Dernier Bloc</h3>
|
|
<p class="value" id="last-block-tx-count">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Balance Mature</h3>
|
|
<p class="value" id="balance-mature">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Balance Immature</h3>
|
|
<p class="value" id="balance-immature">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Nombre d'Ancrages</h3>
|
|
<p class="value" id="anchor-count">
|
|
<span id="anchor-count-value">-</span>
|
|
<span id="anchor-count-spinner" class="spinner" style="display: none;">⏳</span>
|
|
</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Nombre de Pairs</h3>
|
|
<p class="value" id="peer-count">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Difficulté de Minage</h3>
|
|
<p class="value" id="mining-difficulty">-</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Temps Moyen entre Blocs</h3>
|
|
<p class="value" id="avg-block-time">
|
|
<span id="avg-block-time-value">-</span>
|
|
<span id="avg-block-time-spinner" class="spinner" style="display: none;">⏳</span>
|
|
</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Frais Moyens</h3>
|
|
<p class="value" id="avg-fee">
|
|
<span id="avg-fee-value">-</span>
|
|
<span id="avg-fee-spinner" class="spinner" style="display: none;">⏳</span>
|
|
</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Montant Moyen des Transactions</h3>
|
|
<p class="value" id="avg-tx-amount">
|
|
<span id="avg-tx-amount-value">-</span>
|
|
<span id="avg-tx-amount-spinner" class="spinner" style="display: none;">⏳</span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section Test d'Ancrage -->
|
|
<section class="anchor-section">
|
|
<h2>Test de l'API d'Ancrage</h2>
|
|
<div class="card">
|
|
<div class="tabs">
|
|
<button class="tab-button active" onclick="switchTab('text', this)">Saisie de Texte</button>
|
|
<button class="tab-button" onclick="switchTab('file', this)">Sélection de Fichier</button>
|
|
</div>
|
|
|
|
<div id="text-tab" class="tab-content active">
|
|
<label for="anchor-text">Texte à ancrer :</label>
|
|
<textarea id="anchor-text" rows="5" placeholder="Entrez le texte à ancrer..."></textarea>
|
|
<button onclick="generateHashFromText()">Générer le Hash</button>
|
|
</div>
|
|
|
|
<div id="file-tab" class="tab-content">
|
|
<label for="anchor-file">Fichier à ancrer :</label>
|
|
<input type="file" id="anchor-file" onchange="handleFileSelect(event)">
|
|
<div id="file-info" class="file-info"></div>
|
|
<button onclick="generateHashFromFile()">Générer le Hash</button>
|
|
</div>
|
|
|
|
<div class="hash-section">
|
|
<label for="anchor-hash">Hash SHA256 :</label>
|
|
<input type="text" id="anchor-hash" placeholder="Le hash sera généré automatiquement...">
|
|
<div class="hash-buttons">
|
|
<button onclick="verifyHash()">Vérifier le Hash</button>
|
|
<button onclick="anchorDocument()">Ancrer le Document</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="anchor-result" class="result"></div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Section Faucet -->
|
|
<section class="faucet-section">
|
|
<h2>Faucet Bitcoin Ancrage</h2>
|
|
<div class="card">
|
|
<p>Recevez 50 000 ✅ (0.0005 🛡) sur votre adresse Bitcoin Ancrage</p>
|
|
<label for="faucet-api-key">Clé API :</label>
|
|
<input type="text" id="faucet-api-key" placeholder="Entrez votre clé API">
|
|
<label for="faucet-address">Adresse Bitcoin :</label>
|
|
<input type="text" id="faucet-address" placeholder="tb1q..." pattern="^(tb1|bcrt1|2|3)[a-zA-HJ-NP-Z0-9]{25,62}$">
|
|
<button onclick="requestFaucet()">Demander des ✅</button>
|
|
<div id="faucet-result" class="result"></div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<footer>
|
|
<p>Bitcoin Ancrage Dashboard - Équipe 4NK</p>
|
|
<p>Dernière mise à jour : <span id="last-update">-</span></p>
|
|
</footer>
|
|
</div>
|
|
|
|
<script src="app.js?v=20260124"></script>
|
|
</body>
|
|
</html>
|