Мы не имеем ничего общего с блокчейн, если не можем проверить его действительность (нет ли изменений в сеть блоков).

Мы выполним 2 проверки:
  • Подпись блока совпадает с подписью, полученной в результате расчета
  • Предыдущая подпись блока совпадает с информацией о подписи текущего блока

Мы пройдемся по всей сети проверим все блоки, используя функцию ниже, которую мы также введем в класс Utile:

      public static Boolean isChainValid(List blockchain) {
        Block currentBlock;
        Block previousBlock;

        //просматриваем сеть, чтобы проверить hash (подписи):
        for (int i = 1; i < blockchain.size(); i++) {
            currentBlock = blockchain.get(i);
            previousBlock = blockchain.get(i - 1);
            //Сравниваю подпись блока с расчетной
            if (!currentBlock.getHash().equals(calculateHash(currentBlock))) {
                System.out.println("Подписи не равны");
                return false;
            }
            //сравниваю предыдущую подпись блока с предыдущей информацией подписи в текущем блоке
            if (!previousBlock.getHash().equals(currentBlock.getPreviousHash())) {
                System.out.println("Предыдущая подпись отличается");
                return false;
            }
        }
        return true;
    }

Мы применим эту функцию к нашей сеть. Придется изменить сеть, чтобы 3 блока были включены в список.



Мы начнем с добавления новой функции в класс Utile для вывода списка блоков:

 
    public static void printBlock(List blocks) {
        for (Block block : blocks) {
            printBlock(block);
        }
    }

В main-сеть мы создаем список блочных объектов. Новая версия будет выглядеть так:

 
    public static void main(String[] args) {
        List blocks = new ArrayList();
        Block block1 = new Block("первое сообщение", "0");
        blocks.add(block1);
        Block block2 = new Block("второе сообщение", block1.getHash());
        blocks.add(block2);
        Block block3 = new Block("третье сообщение", block2.getHash());
        blocks.add(block3);
        Utile.printBlock(blocks);
    }

В конце мы добавляем проверку сети:

 
System.out.println("Сеть является " + (Utile.isChainValid(blocks) ? "действительной" : "недействительной"));

Как и ожидалось, мы получаем подтверждение того, что сеть действительна

Ledger Nano S - The secure hardware wallet

подпись = 145f77c895efd7cb1788caa27e6f306fd96284be68f3b453f419ce252168fef8

предыдущая подпись = 74130941b4c2225453ac49a0e6e714214ca2087b9a05a563439682ce627b6be2

********** END BLOCK***********

Сеть действительна

Мы проведем тест — после создания сети мы изменим данные во 2 блоке и посмотрим, все ли они действительны

 
    public static void main(String[] args) {
        List blocks = new ArrayList();
        Block block1 = new Block("первое сообщение", "0");
        blocks.add(block1);
        Block block2 = new Block("второе сообщение", block1.getHash());
        blocks.add(block2);
        Block block3 = new Block("третье сообщение", block2.getHash());
        blocks.add(block3);
        Utile.printBlock(blocks);
        block2.setData("второе измененное сообщение");//входим в цепочку        System.out.println(«Сеть есть»+ (Utile.isChainValid(blocks) ? «действительный»: «недействительный»));
    }

Мы получаем сообщение о том, что сеть больше не действительна:

подпись = e58a813f3a5f0abc34fe601ff9629cbed3dca4b2c6c38bf6e3643128528c32b6

предыдущая подпись = ffe598b39662deec6b3d7306026d578edd65a0736271f985d2bb06a95d988d22

**********END BLOCK***********

Подписи не равны.

Сеть является недействительной.

Как создать блокчейн?

Далее мы пойдем к … майнингу — мы увидим, зачем это нужно, что это значит и как это можно сделать.

telegram-bitcoinrush

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here