Концепции блокчейна и криптовалюты можно легко понять, если разделить концепции на две части: блок и поток транзакций.
Блоки — это файлы, в которых постоянно записываются данные, относящиеся к сети Биткойн блокчейна. Блок записывает некоторые или все самые последние транзакции Биткойн, которые еще не вошли в какие-либо предыдущие блоки. Таким образом, блок подобен странице бухгалтерской книги или книги записей. Каждый раз, когда блок «завершен», он уступает место следующему блоку в цепочке блоков . Таким образом, блок представляет собой постоянное хранилище записей, которые после записи не могут быть изменены или удалены.
Блокчейн — это децентрализованная база данных или просто децентрализованный связанный список, в котором список записей (называемых блоками) связан с помощью криптографии. Под децентрализацией мы подразумеваем, что не существует единой базы данных, в которой сохраняются все записи, а один и тот же набор данных сохраняется в нескольких базах данных. Блок в цепочке блоков содержит список записей (называемых данными транзакции), отметку времени (время UNIX) и криптографический хэш предыдущего блока (хэш преобразует данные предыдущего блока в фиксированную длину случайных данных). Этот процесс сохранения блоков можно увидеть ниже:

Блок — технические информация о блоке (заголовке блока) по частям, ниже:

- Блок Генезиса — это первый блок любой цепочки блоков, и его значение всегда жестко запрограммировано. Поскольку до него не существовало предыдущего блока, предыдущий хеш в этом случае остается «0». Все данные хранятся в более поздних блоках, и уже следующий блок будет иметь значение хэша блока Genesis в разделе «предыдущий хэш», как показано на рисунке выше.
- Хеширование — это процесс, в котором используется алгоритм для преобразования строки любой длины в строку фиксированной длины. Это очень важно в случае блокчейна, поскольку помогает отслеживать огромные данные, не сохраняя их, а скорее сохраняя хэш этих данных. Биткойн использует SHA 256, а Ethereum использует алгоритмы Keccak-256 соответственно. Единственная важная вещь, которую следует убрать, — это то, что этот сгенерированный хеш-ключ является тем, который хранит данные текущего блока и адрес следующего блока, таким образом связывая оба блока и отслеживая предыдущий блок. На приведенной ниже диаграмме я сгенерировал хэш строки с использованием алгоритма SHA 256, вы также можете сгенерировать хеш-значения отсюда .
- Данные транзакции — все записи транзакций сохраняются как данные транзакции. Каждый блок цепочки блоков может содержать тысячи данных транзакций, и будет неэффективно хранить все данные внутри каждого блока в виде серии. Это снизит эффективность поиска данных. Чтобы решить эту проблему, данные внутри блока хранятся в виде дерева Меркла.
- Дерево Меркла — это представление данных (в данном случае хеш-ключа наших данных транзакции) в форме листа и дочернего узла. Эти узлы связаны с одним корнем. Этот корень представляет собой представление всех данных транзакции в виде единого хеш-ключа. Чтобы упростить задачу, представьте себе дерево с несколькими ветвями, и каждая ветвь имеет свои собственные ветви. Теперь на последнем уровне веток будут наши данные. Эти данные будут иметь свои собственные хеш-ключи, как обсуждалось ранее. Эти хешированные ключи будут разделены на пары и снова будут хешированы. Этот процесс повторяется до тех пор, пока мы не получим только один хэш. Этот хеш хранится в цепочке блоков как данные, и с его помощью можно получить только другие данные. Такой высокий уровень хеширования делает его защищенным от взлома.
- Отметка времени — как следует из названия, отметка времени — это значение даты и времени, которое хранится в блоке. Любая транзакция в этом мире не может быть завершена без данных о дате и времени. Он сообщает, в какое время был создан этот блок. В блокчейне это значение имеет форму отметки времени Unix. Временная метка Unix — это количество секунд, прошедших с 01.01.1970, что означает, что 0000000000 по времени UNIX равно 1 января 1970 года 12:00:00 AM. Метка времени — это преобразованное значение GMT. Таким образом, если блок создан, он примет текущее время по Гринвичу и преобразует его в Unix Time, проверит его, если оно больше, чем сохраненное время предыдущего блока, а затем сохранит его. Вы можете преобразовать любое время в UNIX время здесь.
- Nonce
Буквальное значение nonce означает «уникальный для конкретного случая». Nonce — это не общий термин Blockchain, а криптографический термин, который в основном обсуждается с точки зрения биткойнов. Одноразовый номер — это число, которое нужно угадать таким образом, чтобы при добавлении перед хешированным значением текущего блока получилось значение, хешированное значение которого меньше сложности (оно также является частью блока и восстанавливается для каждого блока. ), его длина равна длине хешированного блока, то есть 64 символа, что равно длине SHA-256 в случае Биткойна. - Процесс поиска одноразового номера:
- Человек (майнер) должен угадать значение nonce (оно может начинаться с 000… 0001).
- Получить хеш-значение заголовка блока предыдущего блока (000dceb75a135c…)
- Добавьте этот одноразовый номер перед хешем заголовка блока (000… 0001000dceb75a135c…)
- Повторите добавленное выше значение (xyz)
- Получите значение сложности из заголовка блока (abc)
- Проверьте, меньше ли указанное выше повторно хешированное значение, чем значение сложности (xyz <abc)
- Если да, то в текущую цепочку биткойнов добавляется новый блок, и этот человек получает вознаграждение в биткойнах за свою работу.
Как выглядит блок в коде
block = { 'index': 1, 'timestamp': 1506057125.900785, 'transactions': [ { 'sender': "8527147fe1f5426f9dd545de4b27ee00", 'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f", 'amount': 5, } ], 'proof': 324984774000, 'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" }
Идея цепочки очевидна — каждый блок включает в себя хэш предшествующего. Это очень важно: именно так обеспечивается неизменность цепочки: если хакер повредит какой-либо блок, то абсолютно все последующие будут содержать неверные хэши.