-
saintdi25u authoredsaintdi25u authored
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));
}
}