Skip to content
Snippets Groups Projects
Commit 17e9862a authored by corentinstd's avatar corentinstd
Browse files

modif

parent 5a1ef21b
No related branches found
No related tags found
No related merge requests found
Showing
with 194 additions and 4 deletions
......@@ -14,8 +14,9 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.release>21</maven.compiler.release>
</properties>
<dependencies>
......
......@@ -8,6 +8,12 @@ public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
System.out.println("Début de la blockchain");
// Création de la blockchain
Blockchain blockchain = new Blockchain("BloBlockchain");
//Création de 2 wallets
Wallet bobWallet = new Wallet("publicKey1", "privateKey1");
Wallet aliceWallet = new Wallet("publicKey2", "privateKey2");
}
}
......@@ -3,5 +3,38 @@ package fr.miage;
import java.util.List;
public class Bloc {
private String hash;
private List<Transaction> transactions;
private String header;
public Bloc(String hash,List<Transaction> transactions) {
this.hash = hash;
this.transactions = transactions;
}
public String getHash() {
return hash;
}
public String getHeader() {
return header;
}
public void setHash(String hash) {
this.hash = hash;
}
public void setHeader(String header) {
this.header = header;
}
public Bloc(List<Transaction> transactions) {
this.transactions = transactions;
}
public List<Transaction> getTransactions() {
return transactions;
}
public void setTransactions(List<Transaction> transactions) {
this.transactions = transactions;
}
}
// package fr.miage;
// public class BlocHeader {
// private String previousHash;
// private long time;
// private long nonce;
// private long size;
// public static final int DIFFICULTY = 27;
// public BlocHeader(String hash, String previousHash, long time, long nonce, long size) {
// this.hash = hash;
// this.previousHash = previousHash;
// this.time = time;
// this.nonce = nonce;
// this.size = size;
// }
// public String getHash() {
// return hash;
// }
// public void setHash(String hash) {
// this.hash = hash;
// }
// public String getPreviousHash() {
// return previousHash;
// }
// public void setPreviousHash(String previousHash) {
// this.previousHash = previousHash;
// }
// public long getTime() {
// return time;
// }
// public void setTime(long time) {
// this.time = time;
// }
// public long getNonce() {
// return nonce;
// }
// public void setNonce(long nonce) {
// this.nonce = nonce;
// }
// public long getSize() {
// return size;
// }
// public void setSize(long size) {
// this.size = size;
// }
// }
......@@ -5,4 +5,10 @@ import java.util.LinkedList;
public class Blockchain {
private String name;
private LinkedList<Bloc> blocs;
public Blockchain(String name) {
this.name = name;
this.blocs = new LinkedList<Bloc>();
}
}
package fr.miage;
public enum EnumTypeTransaction {
NORMAL, COINBASE;
}
package fr.miage;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Optional;
import java.util.stream.DoubleStream;
import javax.swing.text.html.Option;
import org.apache.commons.codec.digest.DigestUtils;
public class MinageManager {
//TODO
private static final int DIFFICULTY = 27;
public MinageManager() {
}
public Bloc mineABloc(Bloc previousBloc) {
double target = Math.pow(2, 256 - DIFFICULTY);
//DoubleStream doubleStream = DoubleStream.iterate(0, i -> i + 1).limit((long) Math.pow(2, DIFFICULTY));
Compute result = new Compute(new BigInteger(DigestUtils.sha256Hex(previousBloc.getHeader() + Math.pow(2,DIFFICULTY)), 16).doubleValue(), Math.pow(2,DIFFICULTY));
if(result.hash < target){
System.out.println("Bloc miné avec succès : " + result.nonce);
System.out.println("Hash : " + DigestUtils.sha256Hex(previousBloc.getHeader() + result.nonce));
Bloc bloc = new Bloc(transactions, new BlocHeader(DigestUtils.sha256Hex(previousBloc.getHeader() + result.nonce), previousBloc.getHeader(), System.currentTimeMillis(), result.nonce, transactions.size()));
}
System.out.println("Failed after " + BlocHeader.DIFFICULTY + " tries");
return new Result("", BlocHeader.DIFFICULTY);
}
record Result(String hash, double nonce){}
record Compute(double hash, double nonce){}
}
......@@ -6,6 +6,16 @@ public class Transaction {
private String id;
private List<UTxO> inputs;
private List<UTxO> outputs;
//private double fees;
private String signature;
private String typeTransaction;
public Transaction(String id, List<UTxO> inputs, List<UTxO> outputs, String signature, String typeTransaction) {
this.id = id;
this.inputs = inputs;
this.outputs = outputs;
this.signature = signature;
}
//créer transaction coinbase
}
......@@ -5,4 +5,11 @@ public class UTxO {
private String hashWallet; // hash du wallet
private Transaction transaction; // transaction précédente (provenance de l'argent) --> peut etre meme que le hash de la transaction
private double montant;
public UTxO(String hashWallet, Transaction transaction, double montant) {
this.hashWallet = hashWallet;
this.transaction = transaction;
this.montant = montant;
}
}
package fr.miage;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
public class Wallet {
......@@ -13,5 +16,14 @@ public class Wallet {
this.publicKey = publicKey;
this.privateKey = privateKey;
}
public void initWallet(byte[] data) throws NoSuchAlgorithmException{
}
private String hashSha256(String privateKey) throws NoSuchAlgorithmException{
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(privateKey.getBytes(StandardCharsets.UTF_8));
}
}
No preview for this file type
No preview for this file type
fr/miage/Transaction.class
fr/miage/Bloc.class
fr/miage/UTxO.class
fr/miage/App.class
fr/miage/Blockchain.class
fr/miage/EnumTypeTransaction.class
fr/miage/MinageManager.class
fr/miage/Wallet.class
fr/miage/BlocHeader.class
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/EnumTypeTransaction.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/Bloc.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/Blockchain.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/App.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/MinageManager.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/Transaction.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/Wallet.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/BlocHeader.java
/Users/corentinstd/Library/CloudStorage/OneDrive-Personnel/Cours/M2_S1/Blockchain/blockchain-project/src/main/java/fr/miage/UTxO.java
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment