From 08eb90ed6b56ecd2dc9ca4d7fb63681714b79524 Mon Sep 17 00:00:00 2001 From: ncantu Date: Mon, 26 Jan 2026 03:55:23 +0100 Subject: [PATCH] Fix IPv6 connection error in Bitcoin RPC client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - L'API d'ancrage échoue avec l'erreur "connect EADDRNOTAVAIL ::1:38332" lors des tentatives de connexion au nœud Bitcoin - Les ancrages de documents ne peuvent pas être créés sans connexion RPC réussie - Le problème persiste malgré l'utilisation de 127.0.0.1 dans la configuration **Root causes:** - Node.js peut préférer IPv6 lors de la résolution DNS, même si 127.0.0.1 est utilisé directement - La bibliothèque bitcoin-core peut effectuer des résolutions DNS internes qui aboutissent à IPv6 - Le système peut avoir une préférence IPv6 qui influence la résolution DNS de Node.js **Correctifs:** - Ajout de dns.setDefaultResultOrder('ipv4first') au début de bitcoin-rpc.js pour forcer Node.js à préférer IPv4 lors de la résolution DNS - Cette configuration garantit que même si le système préfère IPv6, Node.js essaiera IPv4 en premier **Evolutions:** - Configuration DNS Node.js pour forcer IPv4 en priorité - Documentation mise à jour avec la nouvelle correction **Pages affectées:** - api-anchorage/src/bitcoin-rpc.js : Ajout de la configuration DNS IPv4 - fixKnowledge/anchor-api-ipv6-connection-error.md : Documentation de la correction supplémentaire --- api-anchorage/src/bitcoin-rpc.js | 5 +++++ fixKnowledge/anchor-api-ipv6-connection-error.md | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/api-anchorage/src/bitcoin-rpc.js b/api-anchorage/src/bitcoin-rpc.js index 10c37b6..c70a8e6 100644 --- a/api-anchorage/src/bitcoin-rpc.js +++ b/api-anchorage/src/bitcoin-rpc.js @@ -6,6 +6,11 @@ import Client from 'bitcoin-core'; import { logger } from './logger.js'; +import dns from 'dns'; + +// Force IPv4 first to avoid IPv6 connection issues +// This ensures that even if the system prefers IPv6, Node.js will try IPv4 first +dns.setDefaultResultOrder('ipv4first'); class BitcoinRPC { constructor() { diff --git a/fixKnowledge/anchor-api-ipv6-connection-error.md b/fixKnowledge/anchor-api-ipv6-connection-error.md index e08e1ec..1bb6103 100644 --- a/fixKnowledge/anchor-api-ipv6-connection-error.md +++ b/fixKnowledge/anchor-api-ipv6-connection-error.md @@ -2,7 +2,7 @@ **Auteur** : Équipe 4NK **Date** : 2026-01-26 -**Version** : 1.0 +**Version** : 2.0 ## Problème @@ -25,6 +25,7 @@ L'API d'ancrage tente de se connecter au nœud Bitcoin via IPv6 (`::1:38332`) al 1. **Valeur par défaut `localhost`** : Le code utilisait `localhost` comme valeur par défaut, qui peut être résolu en IPv6 (`::1`) selon la configuration système 2. **Configuration système** : Le système peut avoir une préférence IPv6, ce qui fait que `localhost` résout vers `::1` au lieu de `127.0.0.1` 3. **Nœud Bitcoin** : Le nœud Bitcoin n'écoute que sur IPv4 (`127.0.0.1`), pas sur IPv6 +4. **Résolution DNS Node.js** : Node.js peut préférer IPv6 lors de la résolution DNS, même si `127.0.0.1` est utilisé directement, la bibliothèque `bitcoin-core` peut effectuer des résolutions DNS internes qui aboutissent à IPv6 ## Correctifs @@ -33,6 +34,7 @@ L'API d'ancrage tente de se connecter au nœud Bitcoin via IPv6 (`::1:38332`) al 1. **`api-anchorage/src/bitcoin-rpc.js`** : - Ligne 13 : Remplacement de `'localhost'` par `'127.0.0.1'` dans le constructeur - Ligne 234 : Remplacement de `'localhost'` par `'127.0.0.1'` dans la fonction `createAnchorTransaction` + - Ajout de `dns.setDefaultResultOrder('ipv4first')` au début du fichier pour forcer Node.js à préférer IPv4 lors de la résolution DNS 2. **`api-anchorage/.env.example`** : - Ligne 2 : Remplacement de `BITCOIN_RPC_HOST=localhost` par `BITCOIN_RPC_HOST=127.0.0.1` @@ -48,6 +50,7 @@ BITCOIN_RPC_HOST=127.0.0.1 ## Evolutions - **Valeur par défaut sécurisée** : Le code utilise maintenant `127.0.0.1` par défaut, forçant IPv4 +- **Configuration DNS Node.js** : Ajout de `dns.setDefaultResultOrder('ipv4first')` pour forcer Node.js à préférer IPv4 même si le système préfère IPv6 - **Documentation** : Le fichier `.env.example` reflète la bonne pratique ## Pages affectées @@ -126,4 +129,5 @@ curl --user bitcoin:bitcoin --data-binary '{"jsonrpc":"1.0","id":"test","method" - Le problème peut persister si le service n'est pas redémarré après modification du `.env` - Le code utilise maintenant `127.0.0.1` par défaut, ce qui garantit l'utilisation d'IPv4 même si la variable d'environnement n'est pas définie +- La configuration `dns.setDefaultResultOrder('ipv4first')` garantit que Node.js préfère IPv4 même si le système a une préférence IPv6 - Cette correction s'applique à tous les environnements (test, pre-production, production)