feat: Implémentation du transfert automatique de fonds
- Scripts de transfert automatique de fonds du wallet mining vers le relay - Vérification automatique des fonds insuffisants - Monitoring continu des fonds - Intégration dans docker-compose - Documentation complète des scripts - Résolution automatique du problème de fonds pour le pairing
This commit is contained in:
parent
790ae52fcf
commit
fa13f34e0d
@ -68,6 +68,7 @@ services:
|
||||
- ./relay/sdk_relay.conf:/home/bitcoin/.conf:ro
|
||||
- sdk_data:/home/bitcoin/.4nk
|
||||
- bitcoin_data:/home/bitcoin/.bitcoin
|
||||
- ./scripts/funds:/scripts/funds:ro
|
||||
ports:
|
||||
- "127.0.0.1:8090:8090"
|
||||
- "127.0.0.1:8091:8091"
|
||||
@ -256,3 +257,4 @@ networks:
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
|
||||
|
186
docs/TRANSFERT_AUTOMATIQUE_FONDS.md
Normal file
186
docs/TRANSFERT_AUTOMATIQUE_FONDS.md
Normal file
@ -0,0 +1,186 @@
|
||||
# Transfert Automatique de Fonds
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Ce système implémente un mécanisme automatique de transfert de fonds du wallet mining vers le relay en cas de fonds insuffisants. Cela résout automatiquement le problème de fonds pour le processus de pairing.
|
||||
|
||||
## Scripts Disponibles
|
||||
|
||||
### 1. `scripts/funds/simple_transfer.sh`
|
||||
Script de base pour transférer des fonds du wallet mining vers le relay.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
./scripts/funds/simple_transfer.sh [amount]
|
||||
```
|
||||
|
||||
**Paramètres:**
|
||||
- `amount`: Montant à transférer en BTC (par défaut: 0.01)
|
||||
|
||||
**Fonctionnalités:**
|
||||
- Vérification de la connectivité Bitcoin
|
||||
- Vérification des soldes des wallets
|
||||
- Génération d'une adresse pour le relay
|
||||
- Transfert de fonds
|
||||
- Confirmation de la transaction
|
||||
- Redémarrage du relay
|
||||
|
||||
### 2. `scripts/funds/check_and_transfer_funds.sh`
|
||||
Script d'intégration qui vérifie les fonds et lance un transfert si nécessaire.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
./scripts/funds/check_and_transfer_funds.sh [min_amount]
|
||||
```
|
||||
|
||||
**Paramètres:**
|
||||
- `min_amount`: Montant minimum requis en BTC (par défaut: 0.001)
|
||||
|
||||
**Fonctionnalités:**
|
||||
- Vérification des fonds du relay dans la configuration
|
||||
- Vérification du solde du wallet relay dans Bitcoin Core
|
||||
- Transfert automatique si fonds insuffisants
|
||||
- Transfère 10x le montant minimum requis
|
||||
|
||||
### 3. `scripts/funds/monitor_funds.sh`
|
||||
Script de monitoring continu des fonds du relay.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
./scripts/funds/monitor_funds.sh [interval_seconds]
|
||||
```
|
||||
|
||||
**Paramètres:**
|
||||
- `interval_seconds`: Intervalle de vérification en secondes (par défaut: 30)
|
||||
|
||||
**Fonctionnalités:**
|
||||
- Monitoring continu des fonds
|
||||
- Vérification de l'état du relay
|
||||
- Transfert automatique si fonds insuffisants
|
||||
- Affichage des statistiques en temps réel
|
||||
|
||||
### 4. `scripts/funds/startup_funds_check.sh`
|
||||
Script de vérification des fonds au démarrage.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
./scripts/funds/startup_funds_check.sh
|
||||
```
|
||||
|
||||
**Fonctionnalités:**
|
||||
- Attente du démarrage des services
|
||||
- Vérification de la connectivité Bitcoin
|
||||
- Vérification de l'état du relay
|
||||
- Lancement du transfert automatique si nécessaire
|
||||
|
||||
### 5. `scripts/startup-with-funds-check.sh`
|
||||
Script de démarrage complet avec vérification des fonds.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
./scripts/startup-with-funds-check.sh
|
||||
```
|
||||
|
||||
**Fonctionnalités:**
|
||||
- Démarrage des services Docker Compose
|
||||
- Attente du démarrage complet
|
||||
- Vérification et transfert automatique des fonds
|
||||
|
||||
## Intégration dans les Applications
|
||||
|
||||
### Docker Compose
|
||||
Le volume `./scripts/funds:/scripts/funds:ro` est monté dans le conteneur `sdk_relay` pour permettre l'accès aux scripts.
|
||||
|
||||
### Démarrage Automatique
|
||||
Utilisez `./scripts/startup-with-funds-check.sh` pour démarrer les services avec vérification automatique des fonds.
|
||||
|
||||
### Monitoring Continu
|
||||
Lancez `./scripts/funds/monitor_funds.sh` en arrière-plan pour un monitoring continu des fonds.
|
||||
|
||||
## Configuration
|
||||
|
||||
### Variables d'Environnement
|
||||
- `MINING_WALLET`: Nom du wallet mining (par défaut: "mining_mnemonic")
|
||||
- `RELAY_WALLET`: Nom du wallet relay (par défaut: "default")
|
||||
- `COOKIE_FILE`: Chemin vers le fichier cookie Bitcoin (par défaut: "/home/bitcoin/.bitcoin/signet/.cookie")
|
||||
|
||||
### Montants par Défaut
|
||||
- Montant minimum: 0.001 BTC (100,000 sats)
|
||||
- Montant de transfert par défaut: 0.01 BTC (1,000,000 sats)
|
||||
- Multiplicateur de transfert: 10x le montant minimum
|
||||
|
||||
## Dépannage
|
||||
|
||||
### Problèmes Courants
|
||||
|
||||
1. **bc non installé**
|
||||
```bash
|
||||
sudo apt-get install -y bc
|
||||
```
|
||||
|
||||
2. **Permissions insuffisantes**
|
||||
```bash
|
||||
chmod +x scripts/funds/*.sh
|
||||
```
|
||||
|
||||
3. **Wallet non chargé**
|
||||
Les scripts chargent automatiquement le wallet relay si nécessaire.
|
||||
|
||||
4. **Transaction non confirmée**
|
||||
Les scripts génèrent automatiquement des blocs pour confirmer les transactions.
|
||||
|
||||
### Logs
|
||||
Les scripts affichent des logs colorés pour faciliter le débogage:
|
||||
- 🔵 [INFO]: Informations générales
|
||||
- 🟢 [SUCCESS]: Opérations réussies
|
||||
- 🟡 [WARNING]: Avertissements
|
||||
- 🔴 [ERROR]: Erreurs
|
||||
|
||||
## Exemples d'Utilisation
|
||||
|
||||
### Transfert Manuel
|
||||
```bash
|
||||
# Transférer 0.01 BTC
|
||||
./scripts/funds/simple_transfer.sh 0.01
|
||||
|
||||
# Transférer 0.1 BTC
|
||||
./scripts/funds/simple_transfer.sh 0.1
|
||||
```
|
||||
|
||||
### Vérification et Transfert Automatique
|
||||
```bash
|
||||
# Vérifier et transférer si nécessaire (minimum 0.001 BTC)
|
||||
./scripts/funds/check_and_transfer_funds.sh 0.001
|
||||
|
||||
# Vérifier et transférer si nécessaire (minimum 0.01 BTC)
|
||||
./scripts/funds/check_and_transfer_funds.sh 0.01
|
||||
```
|
||||
|
||||
### Monitoring Continu
|
||||
```bash
|
||||
# Monitoring toutes les 30 secondes
|
||||
./scripts/funds/monitor_funds.sh
|
||||
|
||||
# Monitoring toutes les 60 secondes
|
||||
./scripts/funds/monitor_funds.sh 60
|
||||
```
|
||||
|
||||
### Démarrage Complet
|
||||
```bash
|
||||
# Démarrage avec vérification des fonds
|
||||
./scripts/startup-with-funds-check.sh
|
||||
```
|
||||
|
||||
## Sécurité
|
||||
|
||||
- Les scripts utilisent des montants par défaut sécurisés
|
||||
- Vérification des soldes avant transfert
|
||||
- Confirmation des transactions
|
||||
- Logs détaillés pour audit
|
||||
|
||||
## Maintenance
|
||||
|
||||
- Les scripts sont conçus pour être robustes et auto-réparateurs
|
||||
- Monitoring continu disponible
|
||||
- Redémarrage automatique du relay après transfert
|
||||
- Gestion des erreurs et retry automatique
|
229
scripts/funds/auto_transfer_funds.sh
Executable file
229
scripts/funds/auto_transfer_funds.sh
Executable file
@ -0,0 +1,229 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de transfert automatique de fonds du wallet mining vers le relay
|
||||
# Usage: ./auto_transfer_funds.sh [amount] [relay_address]
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
MINING_WALLET="mining_mnemonic"
|
||||
RELAY_WALLET="default"
|
||||
BITCOIN_RPC_URL="bitcoin:38332"
|
||||
COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie"
|
||||
MIN_AMOUNT=0.001 # Montant minimum à transférer (0.001 BTC = 100,000 sats)
|
||||
DEFAULT_AMOUNT=0.01 # Montant par défaut (0.01 BTC = 1,000,000 sats)
|
||||
|
||||
# Couleurs pour les logs
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Fonctions de logging
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Fonction pour vérifier la connectivité Bitcoin
|
||||
check_bitcoin_connectivity() {
|
||||
log_info "Vérification de la connectivité Bitcoin..."
|
||||
|
||||
if ! docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" getblockchaininfo > /dev/null 2>&1; then
|
||||
log_error "Impossible de se connecter au nœud Bitcoin"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "Connexion Bitcoin OK"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Fonction pour vérifier le solde du wallet mining
|
||||
check_mining_balance() {
|
||||
log_info "Vérification du solde du wallet mining..."
|
||||
|
||||
local balance=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" getbalance 2>/dev/null || echo "0")
|
||||
|
||||
if [ "$balance" = "0" ]; then
|
||||
log_error "Wallet mining vide ou inaccessible"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "Solde wallet mining: $balance BTC"
|
||||
echo "$balance"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Fonction pour vérifier le solde du wallet relay
|
||||
check_relay_balance() {
|
||||
log_info "Vérification du solde du wallet relay..."
|
||||
|
||||
# Charger le wallet relay s'il n'est pas déjà chargé
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true
|
||||
|
||||
local balance=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0")
|
||||
|
||||
log_info "Solde wallet relay: $balance BTC"
|
||||
echo "$balance"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Fonction pour générer une adresse pour le relay
|
||||
generate_relay_address() {
|
||||
log_info "Génération d'une adresse pour le relay..."
|
||||
|
||||
# Charger le wallet relay
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true
|
||||
|
||||
local address=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getnewaddress "relay_funding" 2>/dev/null)
|
||||
|
||||
if [ -z "$address" ]; then
|
||||
log_error "Impossible de générer une adresse pour le relay"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "Adresse générée: $address"
|
||||
echo "$address"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Fonction pour transférer des fonds
|
||||
transfer_funds() {
|
||||
local amount=$1
|
||||
local address=$2
|
||||
|
||||
log_info "Transfert de $amount BTC vers $address..."
|
||||
|
||||
local txid=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" sendtoaddress "$address" "$amount" 2>/dev/null)
|
||||
|
||||
if [ -z "$txid" ]; then
|
||||
log_error "Échec du transfert de fonds"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "Transfert effectué. TXID: $txid"
|
||||
echo "$txid"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Fonction pour confirmer une transaction
|
||||
confirm_transaction() {
|
||||
local txid=$1
|
||||
local address=$2
|
||||
|
||||
log_info "Confirmation de la transaction $txid..."
|
||||
|
||||
# Générer des blocs pour confirmer la transaction
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" generatetoaddress 6 "$address" > /dev/null 2>&1
|
||||
|
||||
# Vérifier les confirmations
|
||||
local confirmations=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" gettransaction "$txid" 2>/dev/null | jq -r '.confirmations // 0')
|
||||
|
||||
if [ "$confirmations" -gt 0 ]; then
|
||||
log_success "Transaction confirmée ($confirmations confirmations)"
|
||||
return 0
|
||||
else
|
||||
log_warning "Transaction non confirmée (confirmations: $confirmations)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Fonction pour vérifier les fonds du relay dans le fichier de configuration
|
||||
check_relay_funds_in_config() {
|
||||
log_info "Vérification des fonds du relay dans la configuration..."
|
||||
|
||||
local outputs_count=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0")
|
||||
|
||||
log_info "Nombre d'outputs du relay: $outputs_count"
|
||||
echo "$outputs_count"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Fonction principale
|
||||
main() {
|
||||
local amount=${1:-$DEFAULT_AMOUNT}
|
||||
local relay_address=${2:-""}
|
||||
|
||||
log_info "=== TRANSFERT AUTOMATIQUE DE FONDS ==="
|
||||
log_info "Montant: $amount BTC"
|
||||
|
||||
# Vérifications préliminaires
|
||||
if ! check_bitcoin_connectivity; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier le solde du wallet mining
|
||||
local mining_balance=$(check_mining_balance)
|
||||
if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier si le montant demandé est disponible
|
||||
if (( $(echo "$mining_balance < $amount" | bc -l) )); then
|
||||
log_error "Solde insuffisant dans le wallet mining ($mining_balance BTC < $amount BTC)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier le solde actuel du relay
|
||||
local relay_balance=$(check_relay_balance)
|
||||
|
||||
# Vérifier les fonds dans la configuration du relay
|
||||
local outputs_count=$(check_relay_funds_in_config)
|
||||
|
||||
# Si le relay a déjà des fonds, ne pas transférer
|
||||
if (( $(echo "$relay_balance > 0" | bc -l) )) || [ "$outputs_count" -gt 0 ]; then
|
||||
log_info "Le relay a déjà des fonds (balance: $relay_balance BTC, outputs: $outputs_count)"
|
||||
log_success "Aucun transfert nécessaire"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Générer une adresse pour le relay si non fournie
|
||||
if [ -z "$relay_address" ]; then
|
||||
relay_address=$(generate_relay_address)
|
||||
if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Effectuer le transfert
|
||||
local txid=$(transfer_funds "$amount" "$relay_address")
|
||||
if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Confirmer la transaction
|
||||
if confirm_transaction "$txid" "$relay_address"; then
|
||||
log_success "Transfert de fonds réussi et confirmé"
|
||||
|
||||
# Redémarrer le relay pour qu'il détecte les nouveaux fonds
|
||||
log_info "Redémarrage du relay pour détecter les nouveaux fonds..."
|
||||
docker compose restart sdk_relay
|
||||
|
||||
log_success "Relay redémarré. Les fonds devraient être détectés dans quelques secondes."
|
||||
else
|
||||
log_warning "Transfert effectué mais non confirmé. Le relay pourrait ne pas détecter les fonds immédiatement."
|
||||
fi
|
||||
|
||||
log_success "=== TRANSFERT AUTOMATIQUE TERMINÉ ==="
|
||||
}
|
||||
|
||||
# Vérifier que bc est installé
|
||||
if ! command -v bc &> /dev/null; then
|
||||
log_error "bc n'est pas installé. Installation..."
|
||||
sudo apt-get update && sudo apt-get install -y bc
|
||||
fi
|
||||
|
||||
# Exécuter la fonction principale
|
||||
main "$@"
|
44
scripts/funds/check_and_transfer_funds.sh
Executable file
44
scripts/funds/check_and_transfer_funds.sh
Executable file
@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script d'intégration pour vérifier et transférer des fonds automatiquement
|
||||
# Usage: ./check_and_transfer_funds.sh [min_amount]
|
||||
|
||||
set -e
|
||||
|
||||
MIN_AMOUNT=${1:-0.001} # Montant minimum en BTC (par défaut 0.001 BTC = 100,000 sats)
|
||||
COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie"
|
||||
RELAY_WALLET="default"
|
||||
|
||||
echo "=== VÉRIFICATION ET TRANSFERT AUTOMATIQUE DE FONDS ==="
|
||||
|
||||
# Vérifier les fonds du relay dans la configuration
|
||||
echo "Vérification des fonds du relay..."
|
||||
OUTPUTS_COUNT=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0")
|
||||
|
||||
if [ "$OUTPUTS_COUNT" -gt 0 ]; then
|
||||
echo "Le relay a déjà des fonds ($OUTPUTS_COUNT outputs). Aucun transfert nécessaire."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Vérifier le solde du wallet relay dans Bitcoin Core
|
||||
echo "Vérification du solde du wallet relay dans Bitcoin Core..."
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true
|
||||
RELAY_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0")
|
||||
|
||||
if [ "$(echo "$RELAY_BALANCE >= $MIN_AMOUNT" | bc -l)" = "1" ]; then
|
||||
echo "Le relay a suffisamment de fonds ($RELAY_BALANCE BTC >= $MIN_AMOUNT BTC). Aucun transfert nécessaire."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Fonds insuffisants détectés. Lancement du transfert automatique..."
|
||||
echo "Solde actuel: $RELAY_BALANCE BTC"
|
||||
echo "Montant minimum requis: $MIN_AMOUNT BTC"
|
||||
|
||||
# Lancer le script de transfert
|
||||
TRANSFER_AMOUNT=$(echo "$MIN_AMOUNT * 10" | bc -l) # Transférer 10x le montant minimum
|
||||
echo "Transfert de $TRANSFER_AMOUNT BTC..."
|
||||
|
||||
# Exécuter le script de transfert
|
||||
./scripts/funds/simple_transfer.sh "$TRANSFER_AMOUNT"
|
||||
|
||||
echo "=== VÉRIFICATION ET TRANSFERT TERMINÉ ==="
|
46
scripts/funds/monitor_funds.sh
Executable file
46
scripts/funds/monitor_funds.sh
Executable file
@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de monitoring des fonds du relay
|
||||
# Usage: ./monitor_funds.sh [interval_seconds]
|
||||
|
||||
set -e
|
||||
|
||||
INTERVAL=${1:-30} # Intervalle de vérification en secondes (par défaut 30s)
|
||||
COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie"
|
||||
RELAY_WALLET="default"
|
||||
|
||||
echo "=== MONITORING DES FONDS DU RELAY ==="
|
||||
echo "Intervalle de vérification: $INTERVAL secondes"
|
||||
echo "Appuyez sur Ctrl+C pour arrêter"
|
||||
|
||||
while true; do
|
||||
echo ""
|
||||
echo "--- $(date) ---"
|
||||
|
||||
# Vérifier les fonds du relay dans la configuration
|
||||
OUTPUTS_COUNT=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0")
|
||||
echo "Outputs du relay: $OUTPUTS_COUNT"
|
||||
|
||||
# Vérifier le solde du wallet relay dans Bitcoin Core
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true
|
||||
RELAY_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0")
|
||||
echo "Solde wallet relay: $RELAY_BALANCE BTC"
|
||||
|
||||
# Vérifier le solde du wallet mining
|
||||
MINING_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="mining_mnemonic" getbalance 2>/dev/null || echo "0")
|
||||
echo "Solde wallet mining: $MINING_BALANCE BTC"
|
||||
|
||||
# Vérifier l'état du relay
|
||||
RELAY_STATUS=$(docker compose ps sdk_relay --format "table {{.Status}}" | tail -n +2)
|
||||
echo "État du relay: $RELAY_STATUS"
|
||||
|
||||
# Si le relay n'a pas de fonds, lancer le transfert automatique
|
||||
if [ "$OUTPUTS_COUNT" -eq 0 ] && [ "$(echo "$RELAY_BALANCE < 0.001" | bc -l)" = "1" ]; then
|
||||
echo "⚠️ Fonds insuffisants détectés. Lancement du transfert automatique..."
|
||||
./scripts/funds/simple_transfer.sh 0.01
|
||||
else
|
||||
echo "✅ Fonds suffisants"
|
||||
fi
|
||||
|
||||
sleep "$INTERVAL"
|
||||
done
|
63
scripts/funds/simple_transfer.sh
Executable file
63
scripts/funds/simple_transfer.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script simplifié de transfert de fonds
|
||||
set -e
|
||||
|
||||
MINING_WALLET="mining_mnemonic"
|
||||
RELAY_WALLET="default"
|
||||
COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie"
|
||||
AMOUNT=${1:-0.01}
|
||||
|
||||
echo "=== TRANSFERT SIMPLE DE FONDS ==="
|
||||
echo "Montant: $AMOUNT BTC"
|
||||
|
||||
# Vérifier la connectivité
|
||||
echo "Vérification de la connectivité Bitcoin..."
|
||||
if ! docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" getblockchaininfo > /dev/null 2>&1; then
|
||||
echo "ERREUR: Impossible de se connecter au nœud Bitcoin"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier le solde du wallet mining
|
||||
echo "Vérification du solde du wallet mining..."
|
||||
MINING_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" getbalance 2>/dev/null || echo "0")
|
||||
echo "Solde wallet mining: $MINING_BALANCE BTC"
|
||||
|
||||
# Charger le wallet relay
|
||||
echo "Chargement du wallet relay..."
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true
|
||||
|
||||
# Vérifier le solde du wallet relay
|
||||
echo "Vérification du solde du wallet relay..."
|
||||
RELAY_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0")
|
||||
echo "Solde wallet relay: $RELAY_BALANCE BTC"
|
||||
|
||||
# Si le relay a déjà des fonds, ne pas transférer
|
||||
if [ "$(echo "$RELAY_BALANCE > 0" | bc -l)" = "1" ]; then
|
||||
echo "Le relay a déjà des fonds. Aucun transfert nécessaire."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Générer une adresse pour le relay
|
||||
echo "Génération d'une adresse pour le relay..."
|
||||
RELAY_ADDRESS=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getnewaddress "relay_funding" 2>/dev/null)
|
||||
echo "Adresse générée: $RELAY_ADDRESS"
|
||||
|
||||
# Effectuer le transfert
|
||||
echo "Transfert de $AMOUNT BTC vers $RELAY_ADDRESS..."
|
||||
TXID=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" sendtoaddress "$RELAY_ADDRESS" "$AMOUNT" 2>/dev/null)
|
||||
echo "Transaction ID: $TXID"
|
||||
|
||||
# Générer des blocs pour confirmer
|
||||
echo "Génération de blocs pour confirmer la transaction..."
|
||||
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" generatetoaddress 6 "$RELAY_ADDRESS" > /dev/null 2>&1
|
||||
|
||||
# Vérifier les confirmations
|
||||
CONFIRMATIONS=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" gettransaction "$TXID" 2>/dev/null | jq -r '.confirmations // 0')
|
||||
echo "Confirmations: $CONFIRMATIONS"
|
||||
|
||||
# Redémarrer le relay
|
||||
echo "Redémarrage du relay..."
|
||||
docker compose restart sdk_relay
|
||||
|
||||
echo "=== TRANSFERT TERMINÉ ==="
|
40
scripts/funds/startup_funds_check.sh
Executable file
40
scripts/funds/startup_funds_check.sh
Executable file
@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de vérification des fonds au démarrage
|
||||
# Usage: ./startup_funds_check.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== VÉRIFICATION DES FONDS AU DÉMARRAGE ==="
|
||||
|
||||
# Attendre que les services soient prêts
|
||||
echo "Attente du démarrage des services..."
|
||||
sleep 30
|
||||
|
||||
# Vérifier la connectivité Bitcoin
|
||||
echo "Vérification de la connectivité Bitcoin..."
|
||||
for i in {1..10}; do
|
||||
if docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" getblockchaininfo > /dev/null 2>&1; then
|
||||
echo "✅ Connexion Bitcoin OK"
|
||||
break
|
||||
fi
|
||||
echo "⏳ Attente de la connexion Bitcoin... ($i/10)"
|
||||
sleep 10
|
||||
done
|
||||
|
||||
# Vérifier l'état du relay
|
||||
echo "Vérification de l'état du relay..."
|
||||
for i in {1..10}; do
|
||||
if docker exec sdk_relay curl -f http://localhost:8091/ > /dev/null 2>&1; then
|
||||
echo "✅ Relay opérationnel"
|
||||
break
|
||||
fi
|
||||
echo "⏳ Attente du relay... ($i/10)"
|
||||
sleep 10
|
||||
done
|
||||
|
||||
# Vérifier et transférer les fonds si nécessaire
|
||||
echo "Vérification des fonds..."
|
||||
./scripts/funds/check_and_transfer_funds.sh 0.001
|
||||
|
||||
echo "=== VÉRIFICATION DES FONDS TERMINÉE ==="
|
Loading…
x
Reference in New Issue
Block a user