, ,

8 декабря, 2024

Что такое майнинг. За что дают вознаграждение.

Сегодня хотел бы поделится объяснением того что из себя представляет майнинг простыми словами. Сам продолжаю в этом разбираться поэтому и решил написать этот пост, чтобы и мне самому лучше разобраться, но так же может быть это будет полезно и другим.

Итак, мы все слышали про майнеров и майнинг Биткона, но в чем суть этого процесса. Попытаюсь рассказать как можно проще.

Криптовалюты, такие как Биткоин и Эфириум, представляют собой децентрализованную базу данных — своеобразный журнал (лог), в котором хранится история взаимодействий между адресами. Каждое взаимодействие — это транзакция, записанная в блокчейн.

Блокчейн — это последовательная цепочка блоков, где каждый блок содержит множество транзакций. Записи (блоки) связаны между собой, что делает их неизменными и надежными. Такой децентрализованный подход означает, что данные не хранятся на одном сервере, а распределяются между участниками сети.

Как работает майнинг?

Когда в сети происходит новая транзакция, она сначала попадает в мемпул — специальное хранилище неподтвержденных транзакций. Задача майнеров — взять эти транзакции, объединить их в блок и вычислить его хэш. Однако, чтобы хэш считался корректным, он должен соответствовать определенному правилу, например, начинаться с нескольких нулей. Это правило определяет сложность майнинга.

Майнеры перебирают значения специального числа, называемого nonce, чтобы найти подходящий хэш. Этот процесс требует больших вычислительных мощностей. Сложность подбора регулируется самой сетью: чем больше майнеров участвуют, тем выше сложность. Это помогает поддерживать стабильное время создания новых блоков.

Зачем нужна сложность хэширования?

Подбор хэша выполняет важную функцию: он защищает сеть от фальсификации данных. Если злоумышленник попытается подделать блок, то его хэш изменится, что нарушит всю цепочку. Таким образом, децентрализованная сеть становится устойчивой к взлому.

Как майнеры зарабатывают?

Майнер, который первым подберет подходящий хэш, формирует новый блок и добавляет его в блокчейн. За это он получает вознаграждение в виде криптовалюты (например, биткоинов) и комиссии за обработанные транзакции. Остальные майнеры продолжают искать хэш для следующего блока.

Теперь, когда общий смысл майнинга понятен ( я надеюсь на это), я бы хотел дополнить кода для майнинга на уровне идеи. Само собой реальные программы для майнинга используют более сложные алгоритмы и реализации.

Пример майнинга (на уровне идеи) с использованием PHP

<?php

// Простые данные блока
$blockData = "Example Block Data"; // Данные блока
$previousHash = "0000abc123";      // Хеш предыдущего блока
$difficulty = 4;                  // Количество нулей в начале хеша

$nonce = 0;                       // Начальное значение nonce
$found = false;                   // Флаг успешного нахождения

// Майнинг — перебор значений nonce
while (!$found) {
    $nonce++;
    $hash = hash('sha256', $blockData . $previousHash . $nonce);

    // Условие: хеш должен начинаться с заданного количества нулей
    if (substr($hash, 0, $difficulty) === str_repeat('0', $difficulty)) {
        $found = true;
        echo "Блок найден!\n";
        echo "Хеш: $hash\n";
        echo "Nonce: $nonce\n";
    }
}

Пример майнинга (на уровне идеи) с использованием Rust

use sha2::{Sha256, Digest};

fn main() {
    let data = b"Example Block Data";
    let mut nonce: u64 = 0;
    let difficulty = 4;
    
    loop {
        // Формируем строку: данные + nonce
        let input = format!("{}{}", String::from_utf8_lossy(data), nonce);
        
        // Создаем SHA256 хеш
        let mut hasher = Sha256::new();
        hasher.update(input);
        let hash = hasher.finalize();
        
        // Проверяем, начинается ли хеш с заданного числа нулей
        if hash.iter().take(difficulty).all(|&byte| byte == 0) {
            println!("Блок найден!");
            println!("Nonce: {}", nonce);
            println!("Hash: {:x}", hash);
            break;
        }
        
        nonce += 1;
    }
}

Пример скрипта на Python создания нового блока и майнинга

import hashlib
import time

class Block:
    def __init__(self, index, previous_hash, data, difficulty):
        self.index = index  # Номер блока
        self.timestamp = time.time()  # Время создания блока
        self.previous_hash = previous_hash  # Хеш предыдущего блока
        self.data = data  # Данные транзакций
        self.difficulty = difficulty  # Сложность (число нулей в начале хэша)
        self.nonce = 0  # Счетчик, который будет меняться, чтобы найти подходящий хеш
        self.hash = self.compute_hash()  # Текущий хеш блока

    def compute_hash(self):
        """
        Вычисляет SHA256-хеш текущего блока на основе его данных.
        """
        block_string = f"{self.index}{self.timestamp}{self.previous_hash}{self.data}{self.nonce}"
        return hashlib.sha256(block_string.encode()).hexdigest()

    def mine_block(self):
        """
        Ищет такой хеш, который удовлетворяет условиям сложности (difficulty).
        """
        prefix = "0" * self.difficulty
        while not self.hash.startswith(prefix):
            self.nonce += 1  # Меняем nonce
            self.hash = self.compute_hash()  # Пересчитываем хеш
        return self.hash

# Пример работы
def main():
    # Сложность: требуется, чтобы хеш начинался с двух нулей
    difficulty = 2

    # Генерация блока 1
    genesis_block = Block(index=1, previous_hash="0" * 64, data="First Block", difficulty=difficulty)
    print("Mining genesis block...")
    print(f"Block mined with hash: {genesis_block.mine_block()}")
    print(f"Nonce: {genesis_block.nonce}\n")

    # Генерация блока 2
    block_2 = Block(index=2, previous_hash=genesis_block.hash, data="Second Block", difficulty=difficulty)
    print("Mining second block...")
    print(f"Block mined with hash: {block_2.mine_block()}")
    print(f"Nonce: {block_2.nonce}\n")

if __name__ == "__main__":
    main()

Пока это все. Надеюсь это поможет лучше понять что из себя представляет майнинг криптовалюты и каким образом за это выплачиваются вознаграждения.