Skip to content
Snippets Groups Projects
MinageManager.java 1.46 KiB
package fr.miage;

import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;
import java.util.UUID;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;

import org.apache.commons.codec.digest.DigestUtils;
import fr.miage.blocs.Bloc;
import fr.miage.blocs.BlocHeader;

public class MinageManager {

    private static final int DIFFICULTY = 5;

    public MinageManager() {
    }

    public static void mineABloc(Bloc bloc) {
        int nonce = 0;
        bloc.setCoinbase(addCoinbaseTransaction());
        String target = new String(new char[DIFFICULTY]).replace('\0', '0');
        System.out.println("[MINAGE] ---- Minage en cours...");
        while (!bloc.getHash().substring(0, DIFFICULTY).equals(target)) {
            nonce++;
            bloc.setNonce(nonce);
            bloc.generateHash();
        }
        System.out.println("Nonce trouvé : " + nonce);
        System.out.println("Hash trouvé : " + bloc.getHash());
    }

    public static Coinbase addCoinbaseTransaction() {
        Coinbase coinbase = new Coinbase();
        List<UTxO> outputs = Arrays.asList(new UTxO(coinbase.getId(), UUID.randomUUID(), null, 5.0));
        return new Coinbase(outputs, null, EnumTypeTransaction.COINBASE);
    }

    public static double computeTarget(String header) {
        return Math.pow(2, (256 - DIFFICULTY));
    }

}