Class AccountRefiller

java.lang.Object
fr.univ_eiffel.legotools.factory.api.AccountRefiller

public class AccountRefiller extends Object
Gère le système de "minage" pour recharger le solde du compte client.

Cette classe implémente le protocole Proof-of-Work (Preuve de Travail) exigé par l'API de l'usine :

  1. 1. Demande d'un défi cryptographique (Challenge).
  2. 2. Résolution locale du défi (calcul intensif CPU).
  3. 3. Envoi de la solution pour obtenir des crédits.
  • Field Details

    • POW_SOLVER

      public static final ProofOfWorkSolver POW_SOLVER
      Solveur de preuve de travail utilisant SHA-256.
  • Constructor Details

    • AccountRefiller

      public AccountRefiller(String serverUrl, String email, String apiKey)
      Initialise le rechargeur de compte avec les identifiants API.
      Parameters:
      serverUrl - L'URL de base de l'usine
      email - L'email du compte client.
      apiKey - La clé secrète pour signer les requêtes.
  • Method Details

    • fetchChallenge

      public AccountRefiller.Challenge fetchChallenge() throws IOException
      Récupère un nouveau défi auprès du serveur. Le serveur envoie un préfixe de données et un préfixe de hash cible.
      Returns:
      L'objet Challenge contenant les contraintes à résoudre.
      Throws:
      IOException - Si l'API est inaccessible ou rejette les identifiants.
    • solveChallenge

      public byte[] solveChallenge(AccountRefiller.Challenge challenge)
      Résout le défi cryptographique localement.
      Parameters:
      challenge - Le défi à résoudre.
      Returns:
      Un tableau d'octets représentant la solution trouvée (nonce).
    • submitChallengeAnswer

      public void submitChallengeAnswer(AccountRefiller.ChallengeAnswer challengeAnswer) throws IOException
      Envoie la solution trouvée au serveur pour validation.
      Parameters:
      challengeAnswer - La réponse formatée contenant la solution.
      Throws:
      IOException - Si la connexion échoue ou si la réponse est rejetée (Status != 200).
    • fetchAccountBalance

      public String fetchAccountBalance() throws IOException
      Récupère le solde actuel pour confirmer le rechargement.
      Returns:
      Le solde du compte sous forme de chaîne.
      Throws:
      IOException - Si la requête échoue.
    • refill

      public String refill() throws IOException
      Exécute le processus complet de rechargement (Minage).
      Returns:
      Le nouveau solde après rechargement.
      Throws:
      IOException - En cas d'erreur réseau ou de validation.