Новости экономики и финансов. Курсы валют, ситуация на биржах, акции, котировки, аналитика: 💫 💫 💫 💫 💫 💫 читайте на сайте

Как Сделать Свой Блокчейн Python

Строим собственный блокчейн на Python и разбираемся в его особенностях

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

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

Его главная особенность заключается в том, что хранение данных не происходит в одном центральном органе. Благодаря этому не получится сфальсифицировать данные, взломав только один главный пункт. Самое известное применение блокчейна — это Bitcoin, один из видов криптовалют.

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

Требования

Убедитесь, что у вас установлена самая последняя версия Python, а также две его библиотеки — Flask и Requests.
Для создания запросов рекомендуем скачать Postman.

Начало

Создадим новый файл в Python и назовем его app.py . Сначала нам нужно написать класс Blockchain :
После создания конструктора добавляем пустой список для хранения блокчейна:

Еще нам понадобится список для хранения транзакций, поэтому получаем вот такой класс Blockchain :
Для внесения данных в эти списки создадим два метода: addBlock() и addTransaction() .

Пока эти функции не будут выполнять никаких действий, но скоро мы к ним вернемся.
Далее хешируем данные, чтобы обезопасить их. Создадим метод hash() . Поскольку он статический, не забудьте добавить @staticmethod :

И наконец напишем метод lastBlock() :

Создание блока

Теперь подумаем над тем, как будет выглядеть блок. В первую очередь для него нужен индекс index и временной штамп timestamp . А как же Proof? Что это? К этому мы вернемся позже.

Также необходимо добавить список транзакций transactions и хеш предыдущего блока previous_hash .

Внесение новых транзакций

Новые транзакции создаем с помощью метода addTransaction() . Теперь заполним его кодом.
Сначала введем несколько аргументов: self, sender, recipient, amount .

Далее добавим новую транзакцию в список:
В конце этот метод должен возвращать индекс транзакции:

Что придает ему такой вид:

Создание нового блока

Прежде чем начать строить новые блоки, нужно создать в конструкторе один центральный блок:
Затем заполняем метод addBlock() :

Как вы могли заметить, нужно создать метод hash(), чтобы код заработал.
Использовать хеширование довольно легко. По сути, это шифрование строки.

Дальше нам нужно добавить еще один метод — lastBlock() :

Что такое Proof

Proof of Work (доказательство выполнения работы) — это алгоритм, основная цель которого препятствовать кибератакам, например DDoS-атаке. Впервые идея о Proof of Work (PoW) была опубликована Синтией Дворк и Мони Наором в 1993 году.

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

Чтобы подтвердить надежность таких транзакций, майнеры должны решить математическую задачу. И тот, кто решит первым, получает вознаграждение (в виде новой криптовалюты). С каждым новым блоком задачи становятся чуть сложнее. Поэтому майнерам приходится работать эффективнее. Подтвержденные же транзакции хранятся в публичном блокчейне.

Применение PoW

Теперь реализуем Proof of Work для нашего блокчейна со следующей задачей:

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

Чтобы ее внести, добавим следующие модули:
Напишем два новых методов:

Заполним их вот так:

Применение Flask для API

Конечно, строить блокчейн интересно, но теперь пришло время его использовать. И у Python есть прекрасный модуль Flask, чтобы создать API. Добавим немного базового кода Flask:

Подробнее о Flask можно узнать из его документации.

Новые транзакции

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

Конечная точка майнинга

Здесь нам нужно добавить немного кода перед тем как заработает точка майнинга. И должно произойти лишь:
новый блок + добавление его к блокчейну.

Запуск API блокчейна

Запустим API, открыв программу Python:
Для майнинга блока можно использовать Postman или Curl:

А узнать количество замайненных блоков можно на http://localhost:5000/chain. Появится цепь в формате JSON:

Полный код

Заключение

На этом все. Вот как вы можете создать простой блокчейн на Python!

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

Итак, писать блокчейн своими руками мы будем на Python. Для начала следует определиться, какими параметрами задается сам блок данных. Как правило, структура блока состоит из следующих компонентов:

Создаем блокчейн своими руками на Python

Как правило, структура блока состоит из следующих компонентов.

Блокчейн своими руками: структура блока (читать далее...)
  • Временная метка.
  • Индекс.
  • Данные.
  • Хеш предыдущего блока.

Блокчейн своими руками: первый блок

Все должно с чего-то начинаться. Так и блокчейн должен иметь первый блок. Но появляется проблема – в блоке должен содержаться хеш предыдущего блока, а откуда ему взяться, если мы говорим о первой ячейке цепи? Его необходимо вводить вручную, поэтому мы так и поступим. Первый блок будет иметь индекс 0, произвольные данные и произвольный хеш предыдущего блока. Блокчейн своими руками: генерация новых блоков

Блокчейн своими руками: генерация блочной цепи
На данном этапе мы уже имеем первый блок, но для нормального функционирования нашего простенького блокчейна нужно задать алгоритм построения последующих блоков. Он будет следующим:
Для пущей уверенности в собственном блокчейне мы будем использовать как временную метку, так и индекс. Кроме того, сами данные в блоке не подаются в исходном виде, они преображаются в хеш с помощью функции шифрования. Также хешируется еще и предыдущий блок. Получаем, что в состав последнего хеш-блока будут входить:

Хеш предыдущего блока.

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

Убедитесь в том, что у вас установлен Python 3.6+ (также как и pip). Вам также необходимо установить библиотеку Flask и прекрасную библиотеку Request:

Пишем свой блокчейн(Python)

также как и pip.

Шаг #: Создаем свой блокчейн (читать далее...)
Давайте реализуем простой алгоритм для того, чтобы реализовать свой блокчейн. Наше правило будет аналогично приведенному выше примеру:

Шаг #: Свой блокчейн в качестве API

Для всего этого нам необходимо модифицировать конструктор нашего Блокчейна, и предоставить метод по регистрации узлов: Шаг #: Взаимодействие с нашим Блокчейном

Шаг #: Консенсус
После чего я замайнил новые блоки на узел 2, для того чтобы цепочка стала длиннее. Потом, я вызвал GET /nodes/resolve на узел 1, где цепочка была заменена по алгоритму Консенсуса:
Наш endpoint майнинга – это то, где происходит магия, и в ней нет ничего сложного. Здесь совершаются три следующих вещи:

Итак, давайте взглянем на простой пример, которой поможет нам во всем разобраться.

Какой в этом смысл? Если это не так, то потребуется некоторое количество времени для того, чтобы понять, что вообще происходит – это и есть ключевая идея блокчейнов.

Как сделать свой блокчейн

Python Tutorial: Build A Blockchain In; 60 Lines of Code

Как построить блокчейн на Python

§ Затем нам нужно создать функцию new_block, которая будет использоваться для создания новых блоков, а затем добавить их в существующую цепочку. Код для функции new_block приведен ниже:
Последний шаг – взаимодействие с блокчейном. Мы собираемся использовать Postman для взаимодействия с сетью блокчейнов, используя только что созданный API..

Related posts