Создаем свой блокчейн с UTXO и Генезисом. Теория

Привет всем любителям интересного, или другим заблудшим душам

Здесь вы бы могли узнать о том:

  • Как захватить мир коробкой из под миксера
  • Как найти счастье без СМС и регистрации
  • В чем смысл жизни инфузории туфельки

Но не узнаете. Ведь есть более интересная задача – создать генезис блок для блокчейна, который будет содержать все непотраченные транзакции.

Что же такое генезис блок, и где он обитает?
Как известно, снег начинается со снежинки, слово начинается с буквы, а блокчейн начинается с генезис (греч. Γένεσις, Γένεση — происхождение, возникновение, зарождение) блока.

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

Итак, перейдем к задаче: необходимо создать генезис блок (или, по-сути просто блок) в котором будут все неизрасходованные транзакции.

Сначала разберемся со структурой блока, которая приведена ниже

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

Давайте дальше посмотрим на структуру транзакций

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

Чтобы понимать как работают транзакции, достаточно понять только одно:

У транзакций есть входы и выходы. Каждый вход ссылается на выход предыдущей транзакции.

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

Чтобы понять суть входов и выходов в транзакции, приведу пример ниже

  1. В самом начале было 50 BTC, которые получены путем генерации нового блока. Сейчас они являются неиспользованным выходом
  2. Дальше 50 BTC используются, как вход в “Транзакция 1”. Соответственно те 50 BTC стали использованным выходом, и еще раз его потратить не получится. При каких условиях выход тратить можно, а при каких нет – рассмотрим в следующих статьях. Это сложная тема, которая в нашей задачи не нужна.
    В этой же транзакции создаются два выхода по 0.5 BTC и  49.5 BTC
  3. В конце мы видим, как выход первой транзакции стал входом для второй транзакции. Именно по этому принципу передаются биткоины в блокчейне.

Перед тем, как перейти к прикладной части этой статьи – перед написанием программы на с++, посмотрим структуру входов и выходов транзакции

Структура входов транзакции

 

Структура выходов транзакции

 

Промежуточный итог

Мы знаем что в каждом блоке есть транзакции. Каждая транзакция формируется из входов и выходов, где вход – выход предыдущей транзакции.

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

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *