Mайнинг


 У нас уже есть блокчейн с блоками, которые мы можем проверить, если он являются действительными. Но как мы узнаем, что вся сети действительна? — чтобы никто не вмешивался и не заменял всю сеть блоков на другую?  Гениальное решение, которое применяет технология  блокчейн. Это идентификация подписей, которые сопряжены с очень  большими трудностями при получении (вычислении). Поэтому для создания  новой сети, заменяющей существующую, вам потребуется использовать  исключительную вычислительную мощность — практически невозможно достичь. Это то, что делают криптовалютные майнеры — идентифицируют подписи,  которые удовлетворяют определенным условиям, и блоки добавляются в сеть.  Чем дольше идет майнинг, тем сложнее будет создать сеть, аналогичную  существующей.
  
Но как мы можем сделать подпись более сложной? — понятен только алгоритм  — он повторно используется для проверки! Решение простое — при создании  подписи мы добавляем параметр, который изменяется до тех пор, пока не  будет получена подпись, соответствующая определенному правилу. Пример: — условие: подпись начинается с 5 нулей (0000 .) — В дополнение к уже установленным датам блок также будет содержать  информацию: целое число, которое будет включено в расчет подписи блока.  Шаги для поиска правильного числа: найдите подпись блока, если число =  1, и посмотрите, равны ли первые 5 символов нулю. Если не дать число  значение 2, мы переделаем подпись и проверяем, есть ли 5 нулей в начале;  и так далее, пока мы не найдем нужную число (в этом случае нам,  вероятно, придется попробовать несколько миллионов вариантов) Первый шаг — добавить блок (класс Block) в новое поле — число: 

 
   private int номер; //добавлен новый номер

   public int getномер() {
       return номер;
   }

   public void setномер(int номер) {
       this.номер = номер;
   }

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

 
   public static String calculateHash(Block block) {
       String calculatedhash = applySha256(
               block.getPreviousHash()
               + Long.toString(block.getTimestamp())
               + block.getData()
               + Integer.toString(block.getномер, который теперь является частью подписи );())//номер, который теперь является частью подписи
       );
       return calculatedhash;
   }

Следующим шагом является добавление функции майнинга в класс Utile  (где сложность будет заключаться в наличии нулей перед подписью): 

https://bitcoinrush.md/mining/



Comments 0