Implemented transactions record

This commit is contained in:
2021-08-13 17:34:19 +02:00
parent 415fda3d64
commit 4d94e3ad5b
12 changed files with 178 additions and 93 deletions

55
src/main/java/Main.java Normal file
View File

@@ -0,0 +1,55 @@
import java.io.File;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
import model.BlockChain;
import util.TransactionsGenerator;
import model.Miner;
import util.FileManagement;
import util.Security;
public final class Main {
public static void main(final String[] args) throws InterruptedException, IOException {
final var nThreads = Runtime.getRuntime().availableProcessors();
final var blockChain = BlockChain.getInstance();
// Cryptographic keys management
final File publicKey = new File(Security.PUBLIC_KEY);
final File privateKey = new File(Security.PRIVATE_KEY);
if (!publicKey.exists() || !privateKey.exists()) {
Security.generateKeys();
}
final var transactionsExecutor = Executors.newScheduledThreadPool(nThreads);
// Mocks a generator to send transactions into the blockchain
transactionsExecutor.scheduleAtFixedRate(new TransactionsGenerator(blockChain), 0, 200, TimeUnit.MILLISECONDS);
final var minerExecutor = Executors.newFixedThreadPool(nThreads);
// Creation of 15 miners
IntStream.range(0, 15)
.mapToObj(minerId -> new Miner(minerId, blockChain))
.forEach(minerExecutor::submit);
minerExecutor.shutdown();
if (!minerExecutor.awaitTermination(60, TimeUnit.SECONDS)) {
minerExecutor.shutdownNow();
}
transactionsExecutor.shutdown();
if (!transactionsExecutor.awaitTermination(60, TimeUnit.SECONDS)) {
transactionsExecutor.shutdownNow();
}
FileManagement.saveBlockChain(blockChain);
}
}