Серия 1
На Голанге

Что такое блокчейн? сложно построить? с чего начать? какой язык программирования использовать?

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

В какой-то момент мне стало утомительно постоянно отвечать на одни и те же вопросы каждому человеку. Поэтому я решил начать серию статей, чтобы просто поделиться ссылкой. Легко, правда? 😊.

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

В этой статье я сделаю маленький шаг с вами, и вы поймете основные концепции блокчейна и то, как его запрограммировать, используя Python, J avascript , или Go (Golang).

Я выбрал эти языки, потому что большинство людей с ними знакомо, особенно JavaScript и python. Но для обеспечения скорости, надежности и безопасности большинство основных движков блокчейна построены на c / c ++ (биткойн, EOS и т. д.), Go (Hyperledger Fabric, Ethereum), Java (Ethereum), Rust, Haskell (Cardano) и / или Ruby ( Ethereum), а затем обеспечивает привязку к другим простым в использовании языкам программирования.

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

Предварительные требования:

  • Сеть
  • Криптография
  • Структура данных и алгоритмы
  • Децентрализованные системы
  • Javascript / Go / Python

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

  1. Что такое блокчейн?

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

Так это человек с блокчейном?

Нет, терпи меня ».

Давайте упростим ситуацию на примере, поскольку инженеры лучше разбираются в цифрах.

Возьмем базу данных MySQL, в которой некоторая информация хранится в разных таблицах.

С указанной выше базой данных:

  1. Мы можем выполнять некоторые операции CRUD (создание, получение, обновление и удаление),
  2. Мы можем хранить одну и ту же информацию дважды,
  3. Мы можем удалить всю базу данных (по ошибке или намеренно),
  4. Мы не можем делиться конфиденциальной информацией с другими,
  5. База данных централизована (единая точка отказа, проблема безопасности),
  6. Невозможно доверять всему, что в нем хранится.
  7. База данных может быть взломана злоумышленниками
  8. Базе данных нужен менеджер (он / она может изменить или скомпрометировать данные)
  9. Пользователи не имеют власти над своими данными
  10. и более…

Так зачем, если нам нужно что-то другое, прозрачное, надежное, независимое от людей, автоматическое, неизменное, децентрализованное и неразрушимое? Вот тут-то и появляется блокчейн.

Блокчейн - это безопасная, надежная децентрализованная база данных и сеть - все в одном😎.

«Истину можно найти только в одном месте: в коде. ”

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

Затем та же цепочка распределяется по всем узлам (компьютерам или майнерам) в сети через P2P-сеть.

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

5 ключевых концепций, которые следует помнить в экосистеме блокчейн:

  1. Криптографический хэш и цифровая подпись
  2. Неизменяемая бухгалтерская книга
  3. P2P-сеть
  4. Алгоритм согласования (PoW, PoS, PBFT, ETc…)
  5. Проверка блока (горное дело, ковка и т. д.)

Я объясню эти концепции более подробно по ходу дела.

Преимущества использования блокчейна:

  1. Удалить организации-посредники
  2. Неизменяемый реестр
  3. Прозрачность
  4. Безопасность
  5. Надежность
  6. Больше преимуществ…

Когда использовать блокчейн?

Блокчейн - это не серебряная пуля, поэтому используйте его, когда:

  1. Сохраненные данные не могут быть изменены (доказательство существования)
  2. Данные не могут быть отклонены их владельцем (неотказуемость)
  3. Вы хотите децентрализации
  4. Вам нужен один источник правды
  5. Вам нужна высокая безопасность
  6. Вас не волнует скорость (например, биткойну в среднем требуется 10 минут для проверки блока транзакций). Но некоторые блокчейны быстрее, потому что они используют другие алгоритмы консенсуса, отличные от PoW. Об этом мы поговорим позже.

Примеры использования блокчейна

блокчейн выходит за рамки криптовалюты и биткойнов, блокчейн может использоваться в разных секторах:

  • Недвижимость: Земля в собственности
  • Здравоохранение: надежно записывайте данные пациента
  • Финансы: снижение налогов и посредников, борьба с отмыванием денег, трансграничные платежи
  • Цепочка поставок: отслеживание статей от поставщиков до клиентов (подлинность, создание оригинального контента)
  • Кибербезопасность: DDOS-атаки
  • Возвращение возможностей пользователю: владейте своими данными и делитесь ими безопасно, с кем хотите (DID)
  • Криптовалюта
  • Механизм голосования

Платформы и приложения Blockchain

  • Биткойн
  • Ethereum
  • Hyperledger Fabric
  • EOS
  • Звено цепи
  • Кардано
  • Dogecoin (мем-монета 😁)
  • И т.п.

Типы блокчейнов

Есть 3 вида:

  • Личное: используйте только для внутреннего использования и тогда, когда мы лучше знаем пользователей (например, Hyperledger Fabric).
  • Публично: все могут видеть, что происходит (Биткойн, Эфириум)
  • Гибрид: если вы хотите объединить первые два.

«Разговоры дешевы. Покажи мне код ». 😄

Есть два способа создать блокчейн

2. Как его создать? :

  • Более простой - использовать готовые открытые источники блокчейна, такие как Ethereum (создание распределенных приложений, альткойны, DEFI, NFT и т. Д.), Fabric (настройка частного блокчейна), EOS, Cardano и т. Д., Чтобы вы не приходится иметь дело с основным движком, который сложно реализовать.
  • Если ни один из них не соответствует вашим требованиям, создайте его с нуля или форк, измените и / или улучшите существующий код с открытым исходным кодом блокчейна. Например, лайткойн и биткойн кэш были разделены на биткойны. Этот последний метод более сложен, требует много времени и требует большой работы и сильной команды.

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

3. Как построить его с нуля?

Хорошо, давайте теперь создадим первую детскую цепочку блоков на трех разных языках программирования: Go, Python и Javascript. Эти прототипы могут помочь вам понять концепции, которые мы описали ранее.

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

Блок содержит информацию, упомянутую ранее, но для упрощения мы удалим некоторые из них. давайте углубимся в специфику!

In Go

Надеюсь, вы знакомы с программированием Go, как я упоминал ранее, если не попытаться изучить основы: функции, методы, типы данных, структуры, элементы управления потоком, итерации и т. Д.… Или если вам нравятся javascript и python, тогда вы можно пропустить и перейти к реализации javascript или python.

Начнем с создания папки с двумя файлами, main.go and block.go

Структура папки:

go // the folder
  main.go // file 1
  block.go // file 2

main.go

// use the main package
package main
//import the fmt package
import (
"fmt"
)
func main(){
fmt.Println("I am building my first blockchain") // print this
CreateBlock("The hearder will be shown here", "the body will be shown here") // call the function that will create the block and pass some parameters in it.
}

Если вы запустите эту программу, она покажет ошибку, потому что функция CreateBlock еще не определена, поэтому продолжайте и создайте ее в block.go

block.go

package main
import (
"fmt" // this will help us to print on the screen
)
func CreateBlock(Header, Body string){
fmt.Println(Header ,"\n", Body) // Show me the block content
}

Прелесть Go в том, что вам не нужно импортировать или экспортировать функции, просто объявляйте их заглавными буквами, и Go найдет их для вас😃. теперь откройте терминал и перейдите в созданную вами папку, а затем run go build запустите .\go в Windows, ./go в Linux и Macbook.

Мы только что создали простую программу Go, которая вызывает функцию и передает некоторые строковые данные. Давай, займемся еще приятными делами. давайте добавим еще 2 файла, blockchain.goи structures.go, так что теперь у нас есть 4 файла: main.go, block.go, structures.go, and blockchain.go

Я добавлю к каждой строке кода несколько комментариев, чтобы вы поняли, что я делаю.

структуры.go

block.go

blockchain.go

main.go

Давай запустим его сейчас, go build, затем .\go

Вуаля! Легко, правда?

К сожалению, наши блоки в цепочке блоков не имеют идентификаторов и временных меток, поэтому давайте добавим эту информацию, изменив файл main.go, добавив эти две строки в for loop:

fmt.Printf("Block ID : %d \n", i)                                        fmt.Printf("Timestamp : %d \n", block.Timestamp+int64(i))

Давайте сохраним код и запустим его снова, go build затем ./go

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

Все сделано! поздравляем, вы только что создали свой детский блокчейн в Go 😉

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

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

Нажмите здесь для версии Javascript и здесь для версии на Python.

«Blockchain Engineer - профессионал, который досконально разбирается в принципах блокчейна, безопасности и инженерии программного обеспечения для проектирования, разработки, обслуживания, тестирования и оценки основных механизмов и программного обеспечения блокчейна, тогда как Blockchain Developer - профессионал, создающий программное обеспечение на основе блокчейна, называемого децентрализованными приложениями. Большинство разработчиков блокчейнов используют открытые платформы и фреймворки блокчейнов, такие как Ethereum, Hyperledger Fabric, EOS и т. Д. »

Кем ты хочешь быть?

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

LinkedIn: Синай Ндай