7. Tranzactii(3)

Spread the love

Am creat un sistem de tranzacționare, dar acum trebuie să-l implementăm în lanțul nostru de tip blockchain. În locul mesajului de test folosit inițial în blocurile noastre, vom introduce ceva folositor – o listă de tranzacții . Problema este că pot exista foarte multe tranzacții, ceea ce ar duce la probleme în calcularea hash-ului (a semnăturii). Pentru rezolvarea acestei situații se pot folosi un merkle root al tranzacțiilor ca în funcția de mai jos, pe care o adăugă, in clasa Utile:

   //Preia o lista de tranzactii su intoarce un merkle root al acestora
 public static String getMerkleRoot(ArrayList<Tranzactie> transactions) {
 int count = transactions.size();
 ArrayList<String> previousTreeLayer = new ArrayList<String>();
 for (Tranzactie transaction : transactions) {
 previousTreeLayer.add(transaction.transactionId);
 }
 ArrayList<String> treeLayer = previousTreeLayer;
 while (count > 1) {
 treeLayer = new ArrayList<String>();
 for (int i = 1; i < previousTreeLayer.size(); i++) {
 treeLayer.add(applySha256(previousTreeLayer.get(i - 1) + previousTreeLayer.get(i)));
 }
 count = treeLayer.size();
 previousTreeLayer = treeLayer;
 }
 String merkleRoot = (treeLayer.size() == 1) ? treeLayer.get(0) : "";
 return merkleRoot;
 }

Acum putem modifica și clasa Block:

Comentariile nu sunt permise.