Создание криптовалюты с нуля технология python

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

Jan 13 · 5 min read

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

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

Его главная особенность заключается в том, что хранение данных не происходит в одном центральном органе. Благодаря этому не получится сфальсифицировать данные, взломав только один главный пункт. Самое известное применение блокчейна — это 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

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

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

Хм, на что же это похоже? На какую структуру данных? Точно! Это же связный список!

Итак, давайте возьмем класс связного списка, который мы создали ранее (см. статью «Связный список на Python: что это такое и как его реализовать», — прим. ред. Pythonist), и превратим его в простой блокчейн. Мы внесем в него несколько простых изменений, и вы увидите, что объектно-ориентированное программирование на Python позволяет создавать крутые вещи.

Внедряем ООП

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

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

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

В настоящий момент данные нашего узла хранятся просто как data. При помощи дот-нотации кто угодно может получить к ним доступ и изменить их: my_block.data = «One Million Dollarssss» . Нас это не устраивает. Мы можем сделать это поле приватным, добавив к имени data двойной символ подчеркивания ( __data ), а затем создав специальный метод, позволяющий пользователям читать данные (т. е. публичный доступ сохранится).

Теперь давайте напишем метод, позволяющий пользователям читать значения. В ООП мы называем это get -методом, с его помощью мы просто возвращаем значение желаемого поля.

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

Теперь, когда мы встроили в наш класс защитный механизм, давайте добавим то, что сделает его собственно блокчейном. Для начала нам нужно сохранить кое-что в переменной data. Мы превратим ее в словарь, хранящий хеш блока, предыдущий хеш и метку времени. В блокчейне Bitcoin-а, как вы видели, в одном блоке могут храниться несколько транзакций (в форме дерева хешей). Мы не станем так углубляться и будем хранить только одну «транзакцию». Обязательно передайте в качестве параметров предыдущий хеш, транзактора и сумму.

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

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

Итак, у нас есть функция хеширования, теперь нужно вызвать ее в конструкторе. Вызывать нужно непременно после определения __data .

Наконец, нужно обновить метод append() . Вместо data мы в качестве параметров будем передавать имя транзактора и сумму. Затем, прежде чем создать новый блок, мы получим последний хеш и передадим его в Block месте с другими данными. После этого добавим блок к концу цепочки.

Делаем цепочку неизменяемой

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

Читайте также:  Инвестиций виды инвестиций доклад

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

Но погодите, это еще не все. Нам нужно обновить хеши всех последующих блоков. Как это сделать? Конечно же путем обхода связного списка! (См. статью «Удаление дубликатов из связного списка в Python», — прим. ред. Pythonist). Как вы помните, мы начинаем со временного указателя и используем цикл while .

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

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

Вот и все! Мы создали базовый функционал нашего блокчейна.

Проверяем

Давайте построим блокчейн при помощи нашего метода Block . Следующий код вы можете просто скопировать (он позволит вывести нашу цепочку блоков).

Давайте создадим первый блок. Передадим в него имя и сумму. Предыдущий хеш для первого блока в цепочке — всегда 0.

Теперь добавим еще несколько блоков.

Вы увидите следующий вывод:

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

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

Все прошло по плану! Вы создали собственную криптовалюту! Ну ладно, нечто похожее на нее. Если вам интересно, можете сделать форк оригинального кода Bitcoin и на его основе создать что-то свое. Код доступен на GitHub.

Источник

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

Автор: Alfrick Opidi
Дата записи

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

В последнее время мы наблюдаем правительства, организации и физические лица, использующие технологии Blockchain, чтобы создать свои собственные криптовалюты – и избегать оставленных позади. Примечательно, когда Facebook предложил свою собственную криптовалюту, называемую Весы Объявление перемешивают много вод по всему миру.

Что, если вы также можете следовать костюме и создать свою собственную версию криптовалюта?

Я подумал об этом и решил разработать алгоритм, который создает крипто.

Я решил позвонить в криптовалюту FCCCOIN Отказ

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

Вот основной план алгоритма блокчан для создания FCCCOIN :

Теперь позвольте мне объяснить, что происходит …

1. Создание первого класса блоков

Блокчан состоит из нескольких блоков, которые присоединяются друг к другу (что звучит знакомо, верно?).

Сторирование блоков происходит так, что если один блок подделан, остальная часть цепи становится недействительной.

При применении вышеуказанной концепции я создал следующий первоначальный класс блока:

Как вы можете видеть из кода выше, я определил __init __ () Функция, которая будет выполнена, когда Блок Класс начинается, как и в любом другом классе Python.

Я предоставил следующие параметры к функции инициирования:

  • Я -Это относится к экземпляру Блок класс, позволяющий получить доступ к способам и атрибутам, связанным с классом;
  • индекс -Это отслеживает положение блока в блокчане;
  • Доказательство_но -Это число, произведенное во время создания нового блока (называемого добычами);
  • Prev_hash -Это относится к хэш предыдущего блока в цепочке;
  • данные -Это дает запись всех завершенных транзакций, таких как купленное количество;
  • Timestamp -Это помещает метку времени для транзакций.

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

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

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

Читайте также:  Rx 570 8gb или 1660 super для майнинга

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

В конечном итоге, блок будет выглядеть так:

2. Создание класса Blockchain

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

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

Блокчан Класс будет иметь различные помощники для заполнения различных задач в блокчане.

Позвольте мне объяснить роль каждого из методов в классе.

а. Метод конструктора

Этот метод обеспечивает создание блокчана.

Вот роли его атрибутов:

  • Self.Chain -Это переменная держит все блоки;
  • self.current_data -Это переменная сохраняет все заполненные транзакции в блоке;
  • self.construct_genesis () -Это метод позаботится о построении исходного блока.

б. Построение блока Бытия

Блокчан требует Construct_genesis Способ построить начальный блок в цепочке. В Конвенции Blockchain этот блок особенный, потому что он символизирует начало блокчана.

В этом случае давайте построим его, просто передавая значения по умолчанию для contruct_block метод.

Я дал оба Доказательство_но и Prev_hash Значение нуля, хотя вы можете предоставить любое значение, которое вы хотите.

с. Создание новых блоков

contruct_block Метод используется для создания новых блоков в блокчане.

Вот что происходит с различными атрибутами этого метода:

  • индекс -Это представляет длину блокчана;
  • vicket_nor & prev_hash – метод вызывающего абонента передает их;
  • данные -Это содержит запись всех транзакций, которые не включены в любой блок на узле;
  • self.current_data -Это используется для сброса списка транзакций на узле. Если блок был построен, и транзакции, выделенные ему, список сбрасывается, чтобы убедиться, что будущие транзакции добавлены в этот список. И этот процесс будет проходить постоянно;
  • Self.Chain.append () – Этот метод объединяет вновь построенные блоки к цепочке;
  • Возвращение – Возвращается построенный объект блока.

др. Проверка достоверности

check_valitelity Метод важен при оценке целостности блокчана и обеспечения отсутствия аномалий.

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

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

Он также проверяет, если каждый блок указывает на правильный предыдущий блок, посредством сравнения стоимости их хэшей. Если все правильно, он возвращает true; В противном случае он возвращает false.

добиваться Добавление данных транзакций

new_data Метод используется для добавления данных транзакций в блок. Это очень простой способ: он принимает три параметра (подробности отправителя, детали получателя и количество) и добавляют данные транзакции в self.current_data список.

В любое время новый блок создан, этот список выделяется на этот блок и сброс еще раз, как описано в contruct_block метод.

Как только данные транзакции были добавлены в список, возвращается индекс следующего блока, который будет создан.

Этот индекс рассчитывается путем добавления 1 к индексу текущего блока (который является последним в блокчане). Данные помогут пользователю представить транзакцию в будущем.

ф. Добавление доказательства работы

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

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

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

грамм. Получение последнего блока

Наконец, Neight_block Метод является методом помощника, который помогает получить последний блок в блокчане. Помните, что последний блок на самом деле является текущим блоком в цепочке.

Давайте суммируем все вместе

Вот весь код для создания FCCCOIN Криптовалюта.

Вы также можете получить код на Этот репозиторий Github.

Теперь давайте проверим наш код, чтобы посмотреть, работает ли он.

Вот вывод процесса добычи:

Заключение

Вот как вы можете создать свой собственный блокчан, используя Python.

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

Если Эта монета Были развернуты как есть, он не мог встретить нынешних рыночных требований к стабильной, безопасной и простой в использовании криптовалюту.

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

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

Если у вас есть какие-либо комментарии или вопросы, пожалуйста, опубликуйте их ниже.

Источник

Оцените статью