Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
demetrius
5 лет назад

Проверка целостности

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

Мы выполним 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) ? "действительной" : "недействительной"));

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

подпись = 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***********

Подписи не равны. Сеть является недействительной.

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

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

0
0.445 GOLOS
На Golos с September 2017
Комментарии (0)
Сортировать по:
Сначала старые