Привет всем любителям интересного, или другим заблудшим душам
Здесь вы бы могли узнать о том:
- Как захватить мир коробкой из под миксера
- Как найти счастье без СМС и регистрации
- В чем смысл жизни инфузории туфельки
Но не узнаете. Ведь есть более интересная задача – создать генезис блок для блокчейна, который будет содержать все непотраченные транзакции.
Что же такое генезис блок, и где он обитает?
Как известно, снег начинается со снежинки, слово начинается с буквы, а блокчейн начинается с генезис (греч. Γένεσις, Γένεση — происхождение, возникновение, зарождение) блока.
По сути, он ничем не отличается от обычного блока в блокчейне, кроме его местоположения и отсутствия проверки хеша, что означает возможность создания этого блока со своими данными. Отсутствие проверки хеша обуславливается захардкоживанием в коде. Так, например, захардкожен хэш генезис блока у биткоина.
Итак, перейдем к задаче: необходимо создать генезис блок (или, по-сути просто блок) в котором будут все неизрасходованные транзакции.
Сначала разберемся со структурой блока, которая приведена ниже
Если не углубляться в структуру отдельных элементов (это я сделаю в другой раз), то все вроде бы понятно – каждый блок содержит информацию о себе и некоторое количество транзакций.
Давайте дальше посмотрим на структуру транзакций
Здесь все намного сложнее. Но опять же, наша задача – просто скопировать нужные байты из которых состоит транзакция. Поэтому нас должны интересовать только списки входов и выходов.
Чтобы понимать как работают транзакции, достаточно понять только одно:
У транзакций есть входы и выходы. Каждый вход ссылается на выход предыдущей транзакции.
Если у вас появился вопрос: “Откуда берутся входы в самом начале существования блокчейна”, то напомню, что за каждую генерацию блока дается награда. И в сгенерированном блоке не обязательно должны находиться транзакции. Т.е. входом новой транзакции может быть та награда, за сгенерированный блок.
Чтобы понять суть входов и выходов в транзакции, приведу пример ниже
- В самом начале было 50 BTC, которые получены путем генерации нового блока. Сейчас они являются неиспользованным выходом
- Дальше 50 BTC используются, как вход в “Транзакция 1”. Соответственно те 50 BTC стали использованным выходом, и еще раз его потратить не получится. При каких условиях выход тратить можно, а при каких нет – рассмотрим в следующих статьях. Это сложная тема, которая в нашей задачи не нужна.
В этой же транзакции создаются два выхода по 0.5 BTC и 49.5 BTC - В конце мы видим, как выход первой транзакции стал входом для второй транзакции. Именно по этому принципу передаются биткоины в блокчейне.
Перед тем, как перейти к прикладной части этой статьи – перед написанием программы на с++, посмотрим структуру входов и выходов транзакции
Структура входов транзакции
Структура выходов транзакции
Промежуточный итог
Мы знаем что в каждом блоке есть транзакции. Каждая транзакция формируется из входов и выходов, где вход – выход предыдущей транзакции.
Соответственно, чтобы реализовать нашу задачу (а именно, создать блок с непотраченными выходами транзакций) нам нужно: перебирая все блоки сохранять все выходы у всех транзакций, и удалять его, если он использован в другой транзакции.