Цель этой серии руководств - помочь вам понять технологию блокчейн, разработав ее. Если вы хотите создать настоящую криптовалюту, что-то вроде coinmechanic.io - гораздо более разумная альтернатива!

В этом уроке мы:

  • Создайте свой первый (самый) базовый «блокчейн».
  • Внедрите простую систему доказательства работы (майнинг).
  • Полюбуйтесь возможностями.

(Я предполагаю, что у вас есть базовое понимание объектно-ориентированного программирования)

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

Это часть Мега-руководства по разработке блокчейнов

Настройка.

Мы будем использовать Java, но вы должны уметь следовать на любом языке ООП. Я буду использовать Eclipse, но вы можете использовать любой новый модный текстовый редактор (хотя вы упустите много полезного).

Тебе понадобится:

  • Установлены Java и JDK. (да).
  • Eclipse (или другой IDE / текстовый редактор).

При желании вы можете взять библиотеку GSON от google (кто они ???). Это позволит нам превратить объект в Json \ o /. Это очень полезная библиотека, которую мы также будем использовать в дальнейшем для работы с peer2peer, но не стесняйтесь использовать альтернативный метод.

В Eclipse создайте (файл ›новый›) Java-проект. Я назову свой проект «noobchain» и создам новый класс с тем же именем (NoobChain).

Теперь все готово :)

Создание блокчейна.

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

Хеш = цифровой отпечаток.

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

Что это значит ? … Изменение любых данных в этом списке приведет к изменению подписи и разрыву цепочки.

Итак, сначала давайте создадим класс Block, который составляет цепочку блоков:

Как видите, наш базовый блок содержит String hash, который будет содержать нашу цифровую подпись. Переменная previousHash для хранения хэша предыдущего блока иString data для хранения данных нашего блока.

Далее нам понадобится способ создания цифрового отпечатка пальца,

есть много криптографических алгоритмов, из которых вы можете выбрать, однако SHA256 отлично подходит для этого примера. Мы можем import java.security.MessageDigest; получить доступ к алгоритму SHA256.

Позже нам понадобится использовать SHA256, поэтому давайте создадим удобный вспомогательный метод в новом классе утилиты StringUtil:

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

Теперь давайте воспользуемся нашим помощником applySha256 в новом методе в Block классе для вычисления хэша. Мы должны вычислить хеш для всех частей блока, в которые мы не хотим вмешиваться. Итак, для нашего блока мы включим previousHash, data и timeStamp.

и давайте добавим этот метод в Block конструктор

Время для тестирования…

В нашем основном классе NoobChain позволяет создать несколько блоков и распечатать хэши на экране, чтобы убедиться, что все в рабочем состоянии.

Первый блок называется генезис-блоком, и поскольку предыдущего блока нет, мы просто введем «0» в качестве предыдущего хеша.

Результат должен выглядеть примерно так:

У каждого блока теперь есть собственная цифровая подпись, основанная на его информации и подписи предыдущего блока.

В настоящее время это небольшая цепочка, поэтому давайте сохраним наши блоки в ArrayList, а также импортируем gson, чтобы просмотреть его как Json. (нажмите здесь, чтобы узнать, как импортировать библиотеку gson)

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

Теперь нам нужен способ проверить целостность нашей цепочки блоков.

Давайте создадим метод isChainValid () Boolean в NoobChain классе, который будет перебирать все блоки в цепочке. и сравните хеши. Этот метод должен будет проверить, что хеш-переменная действительно равна вычисленному хешу, а хэш предыдущего блока равен переменной previousHash.

Любое изменение блоков блокчейна приведет к тому, что этот метод вернет false.

В сети биткойн узлы совместно используют свои блокчейны, и сеть принимает самую длинную действующую цепочку. Что должно помешать кому-то вмешиваться в данные в старом блоке, а затем создать совершенно новый более длинный блокчейн и представить его в сети? Подтверждение работы. Система подтверждения работы hashcash означает, что создание новых блоков требует значительного времени и вычислительных мощностей. Следовательно, злоумышленнику потребуется больше вычислительных мощностей, чем остальным одноранговым узлам вместе взятым.

Начнем майнинг блоков !!!

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

Давайте добавим int под названием nonce, который будет включен в наш метод calculateHash (), и столь необходимый mineBlock () метод:

Метод mineBlock () принимает int, называемый трудностью, это количество нулей, которые они должны найти. Низкую сложность, такую ​​как 1 или 2, можно решить почти мгновенно на большинстве компьютеров, я бы предложил что-то около 4–6 для тестирования. На момент написания статьи сложность Litecoin составляет около 442 592 доллара.

Давайте добавим сложность как статическую переменную к классу NoobChain:

public static int difficulty = 5;

Мы должны обновить NoobChain класс, чтобы запускать mineBlock () метод для каждого нового блока. isChainValid () Boolean также должен проверять, есть ли у каждого блока решенный (путем майнинга) хеш.

Ваши результаты должны выглядеть так:

На добычу каждого блока ушло время! (около 3 секунд) Вам следует повозиться со значением сложности, чтобы увидеть, как это повлияет на время, необходимое для добычи каждого блока;)

Если кто-то должен подделать 😒 данные в вашей системе блокчейн:

  • Их блокчейн будет недействительным.
  • Они не смогут создать более длинный блокчейн.
  • Честные блокчейны в вашей сети будут иметь преимущество во времени на самой длинной цепочке.

Подделанный блокчейн не сможет догнать более длинную и действующую цепочку. *

* если только они не обладают значительно большей скоростью вычислений, чем все остальные узлы в вашей сети вместе взятые. Будущий квантовый компьютер или что-то в этом роде.

Вы все сделали со своим базовым блокчейном!

Ваш блокчейн:
›Состоит из блоков, в которых хранятся данные.
›Имеет цифровую подпись, которая связывает ваши блоки вместе.
› Требуется подтверждение работы майнинга для проверки новых блоков.
›Можно проверить, являются ли данные в нем действительными и неизменными.

Вы можете скачать эти файлы проекта на Github.

«Создание вашего первого блокчейна на Java. Часть 2:"

Мы покрываем транзакции, подписи и кошельки.

[email protected] | Д искорд | Telegram | Coinmechanic.io

Это часть Мега-руководства по разработке блокчейнов