Я не говорю, что вам нужно разбираться в передовых концепциях программирования, чтобы понять блокчейн, но ваша жизнь станет намного проще, если вы это сделаете. И если вы разбираетесь в объектно-ориентированном программировании, у меня есть для вас экономия времени: Block-Chain — это Link-list. Если вы новичок в объектно-ориентированном программировании, читайте дальше. Я пройдусь по компонентам, из которых состоит Block-Chain.

В каждом из моих блогов используется подход «сверху вниз», кроме этого, потому что блокчейн, несмотря на всю эту шумиху, на самом деле является просто технической хитростью, которую можно оценить только в том случае, если вы уже понимаете коды. Не всякая идея величия может быть перенесена в другую область, например, в Фундаментальную теорему исчисления. Это работает из-за того, как разработано программирование. По крайней мере, я не вижу распространения этой идеи на другие системы, если только мы не изменим систему искусственно, чтобы она вел себя как программа. Это вид сверху вниз, который я могу получить с помощью Block-Chain, но я постараюсь сделать его менее сухим и более интересным.

Цепь

Есть 3 класса, которые объединены вместе, чтобы сформировать цепочку блоков: блок, цепочка блоков и транзакция. Обратите внимание, что я написал первый алфавит каждого термина с заглавной буквы, потому что это классы. В этом блоге будет обсуждаться класс Block, а во второй части мы углубимся в Blockchain и Transaction.

Заблокировать

Вам нужно знать 3 метода класса в Block: конструктор, calculateHash и mineBlock.

У каждого блока есть хеш. И каждый хеш шифруется с помощью временной метки переменных объекта, предыдущего хэша, транзакции и одноразового номера — я объясню одноразовый номер позже. Вот почему на приведенном выше снимке экрана вы видите, что все переменные инициируются входными данными конструктора класса, кроме одноразового номера и хэша, которые назначаются выходу «calculatedHash()». Так что же такое «вычислитьHash()»?

«calculateHash()» — это метод класса для поддержания чистоты кода. Внутри я импортировал SHA256 для шифрования хэша, но это не единственный способ. Внутри SHA256 мы передаем объектные переменные — timeStamp, previousHash, nonce и транзакции — для генерации зашифрованного кода.

Итак, вернемся к одноразовому номеру. Его основная цель — изменить зашифрованный код, вот и все. Следующий вопрос: зачем нам менять зашифрованный код? Причина в том, что если зашифрованный код не изменится, цикл while на скриншоте выше будет работать вечно. Но тогда зачем нам запускать этот цикл while в методе «mineBlock», и зачем нам вообще нужен этот метод. Причина в безопасности. С увеличением сложности вычислительная мощность, а значит, и время, необходимое для майнинга блока, значительно увеличивается. Чтобы понять, как это помогает безопасности, вам сначала нужно понять Block-Chain в контексте узлов.

Чтобы запустить Block-Chain в реальном мире, неразумно иметь одного человека или одну организацию для запуска всей цепочки блоков для всего мира! Это также противоречит цели блокчейна, которая заключается в децентрализации. Решение состоит в том, чтобы дать каждому возможность запустить сеть Block-Chain, эта отдельная сеть называется узлом. Но как мы узнаем, какой отдельный узел имеет подлинные блоки, а какой — сфабрикованные блоки. Это проблема безопасности, о которой я упоминал ранее. Так как же повышение сложности майнинга блока помогает безопасности? Вы видели это на скриншоте выше: цикл while. Я объясню параметр функции mineBlock во второй части, а сейчас подумайте о том, сколько времени требуется для формирования нового блока. Эта концепция называется Proof-of-Work и помогает безопасности двумя способами. Во-первых, поскольку для майнинга 1 блока требуются значительные ресурсы в виде вычислительной мощности и времени, майнеры рискуют потерять все ранее сформированные блоки, если их поймают на нарушении правил. А во-вторых, так как формировать новый блок ресурсоемко, естественно, тот, у кого блок самый длинный, заслуживает наибольшего доверия.

Заключение

Конечно, как и все остальное, Proof-of-Work не является пуленепробиваемым решением. Например, централизация — это проблема, при которой крупнейшая сеть будет продолжать увеличиваться, что противоречит цели децентрализации. Поэтому это еще рабочий процесс. На данный момент все, что вам нужно сделать, это понять, как работает этот класс Block, и я свяжу все вместе во второй части, чтобы вы увидели магию Block-Chain.

https://github.com/Yuanleoluo/blockChain/blob/main/src/back_end_logic/Block.js