Fix IPv6 connection error in Bitcoin RPC client
**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
This commit is contained in:
parent
df5c731cd2
commit
08eb90ed6b
@ -6,6 +6,11 @@
|
|||||||
|
|
||||||
import Client from 'bitcoin-core';
|
import Client from 'bitcoin-core';
|
||||||
import { logger } from './logger.js';
|
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 {
|
class BitcoinRPC {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
**Auteur** : Équipe 4NK
|
**Auteur** : Équipe 4NK
|
||||||
**Date** : 2026-01-26
|
**Date** : 2026-01-26
|
||||||
**Version** : 1.0
|
**Version** : 2.0
|
||||||
|
|
||||||
## Problème
|
## 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
|
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`
|
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
|
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
|
## 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`** :
|
1. **`api-anchorage/src/bitcoin-rpc.js`** :
|
||||||
- Ligne 13 : Remplacement de `'localhost'` par `'127.0.0.1'` dans le constructeur
|
- 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`
|
- 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`** :
|
2. **`api-anchorage/.env.example`** :
|
||||||
- Ligne 2 : Remplacement de `BITCOIN_RPC_HOST=localhost` par `BITCOIN_RPC_HOST=127.0.0.1`
|
- 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
|
## Evolutions
|
||||||
|
|
||||||
- **Valeur par défaut sécurisée** : Le code utilise maintenant `127.0.0.1` par défaut, forçant IPv4
|
- **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
|
- **Documentation** : Le fichier `.env.example` reflète la bonne pratique
|
||||||
|
|
||||||
## Pages affectées
|
## 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 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
|
- 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)
|
- Cette correction s'applique à tous les environnements (test, pre-production, production)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user