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

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

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

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

Вы также можете сохранить статью и пометить ее как «Как построить нашу цепочку блоков». Поверьте мне; статья поможет вам в долгосрочной перспективе.

Никогда не слышали о блокчейне? Тогда ознакомьтесь с бесплатным курсом 101Blockchain. Если вы хотите продвинуться по карьерной лестнице, посетите сертифицированный курс корпоративного блокчейна, где вы узнаете, как работает корпоративный блокчейн. Давайте начнем.

Вы новичок в блокчейне? Запишитесь на бесплатный курс Blockchain и начните свое путешествие по Blockchain прямо сейчас.

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

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

Требование

Основное требование для следования руководству – уметь программировать. Если вы никогда в жизни не программировали, то это руководство не для вас. Я рекомендую ознакомиться с различными онлайн-курсами для начинающих. Я рекомендую EdX, Udacity и Coursera для лучшего обучения.

Вы уже программист? Затем вы должны знать об основах Python. Кроме того, это поможет вам следовать руководству «Как создать блокчейн»..

Прочтите сейчас: полное руководство по блокчейну кворума

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


 Если вы не знаете Python, не волнуйтесь, его легко освоить. Проверьте Документация Python для начала.

Мы собираемся использовать Python 3.6+ в качестве учебника. Если вы решите использовать другие версии Python, возможно, вам придется провести дополнительные исследования, чтобы код заработал. В учебных целях я рекомендую установить версию, которую я использую.

Наконец, вы также должны знать о HTTP – протоколе, который используется для связи между двумя сторонами в Интернете..

Установка Python с помощью pip

Вам необходимо установить Python с помощью pip. Вам также необходимо установить замечательную библиотеку Requests и Flask. Для этого просто запустите команду ниже.

$ pip install Flask == 0.12.2 запросов == 2.18.4

Если вы используете среду Windows, вы можете напрямую перейти на python.org, чтобы загрузить последнюю версию Python..

Что касается меня, то я скачал Python 3.8.1 – последнюю сборку на момент написания учебника..

Для IDE я предпочитаю использовать PyCharm. В качестве учебного пособия я использую версию сообщества Python. Вы можете использовать любую IDE по своему выбору. Еще одна отличная альтернатива – Visual Studio Code – бесплатная интегрированная среда разработки с открытым исходным кодом..

Последний инструмент, который вам понадобится, – это Postman – HTTP-клиент. В качестве альтернативы вы также можете использовать cURL.

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

Возвращение к блокчейну

Прежде чем приступить к созданию блокчейна, нам нужно обновить наше представление о блокчейне. Это поможет нам оставаться на той же странице.

Блокчейн – это технология распределенного реестра, в которой одноранговые узлы могут участвовать, взаимодействовать и выполнять транзакции без необходимости в централизованном объекте. У каждого однорангового узла есть копия реестра, что делает невозможным мошенничество в системе для хакеров. Ключевые особенности блокчейна включают прозрачность, неизменность и безопасность. Он использует передовые алгоритмы криптовалюты для обеспечения безопасности данных. Кроме того, для достижения консенсуса сеть блокчейнов будет использовать консенсусные алгоритмы, такие как Proof-of-Work, Proof-of-Stake и т. Д..

Также читайте: Блокчейн для начинающих: руководство по началу работы

Начало работы с созданием блокчейна

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

Для начала вам нужно создать файл blockchain.py.

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

Первый шаг – создать функциональное блокчейн-решение. Сначала нам нужно создать класс Blockchain. Там мы создадим конструктор, который будет инициировать цепочку и список транзакций. Список цепочек будет хранить нашу цепочку блоков, а транзакции будут храниться в массиве current_transacations..

def __init __ (self): self.chain = [] self.current_transactions = []

Затем нам нужно создать функцию new_block, которая будет использоваться для создания новых блоков, а затем добавить их в существующую цепочку. Код для функции new_block приведен ниже:

def new_block (self): # Эта функция создает новые блоки, а затем добавляет их к существующему проходу цепочки

Метод new_transcaction создаст новую транзакцию, а затем добавит транзакцию в уже существующий список транзакций..

def new_transaction (self): # Эта функция добавляет новую транзакцию к уже существующим проходам транзакций. У нас также есть хеш-функция, которая используется для создания хеш-кода для блока. @staticmethod def hash (block): # Используется для хеширования блока

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

Мы также можем создать здесь еще три функции.

  • register_node () → Чтобы зарегистрировать новый узел и добавить его в сеть
  • valid_proof () → Гарантирует, что отправленный блок в цепочку решит проблему
  • valid_chain () → Это проверит, действительны ли последующие блоки в цепочке..

Чертеж для blockchain.py выглядит следующим образом.

class Blockchain (object): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): # Эта функция создает новые блоки, а затем добавляет к существующей цепочке pass def new_transaction (self): # Эта функция добавляет новую транзакцию к уже существующим транзакциям pass @staticmethod def hash (block): # Используется для хеширования блока @property def last_block (self): # Вызывает и возвращает последний блок прохода цепочки

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

Давайте рассмотрим каждый из приведенных ниже методов..

Прочтите сейчас: что такое шардинг блокчейна: введение в решение для масштабирования блокчейна

Структура блока

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

  • индекс
  • отметка времени в Unix времени
  • список транзакций
  • доказательство
  • Хеш предыдущего блока

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

Прочтите сейчас: почему блокчейн изменит мир?

Добавление транзакции в блок

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

def new_transaction (self): # Эта функция добавляет новую транзакцию к уже существующим транзакциям """Это создаст новую транзакцию, которая будет отправлена ​​в следующий блок. Он будет содержать три переменные, включая отправителя, получателя и сумму. """ self.current_transactions.append ({‘sender’: sender, ‘recipient’: recipient ‘amount’: amount,}) return self.last_block [‘index’] + 1 Как видите, он просто добавляет в список current_transaction объект, содержащий три переменные → отправитель, получатель, сумма.

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

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

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

self.new_block (previous_hash = 1, proof = 100)

Эта строка должна быть добавлена ​​в ваш класс Blockchain.

Для метода new_block () вам необходимо отправить две переменные в качестве его параметров. Он включает доказательство и previous_hash.

Теперь давайте посмотрим на метод new_block () ниже.

def new_block (self, proof, previous_hash = None): # Эта функция создает новые блоки, а затем добавляет их в существующую цепочку """Этот метод будет содержать доказательство двух параметров, предыдущий хеш""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash или self.hash (self.chain [-1]),}

# Установить текущий список транзакций пустым.

   self.current_transactions = [] self.chain.append (блок) блок возврата

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

Прочтите сейчас: руководство для начинающих: что такое Ethereum Classic?

Давайте также определим метод last_block ниже.

@свойство

def last_block (сам):

# Вызывает и возвращает последний блок цепочки

вернуть self.chain [-1]

Кроме того, код метода hash () выглядит следующим образом:

 

def hash (block): # Используется для хеширования блока """Следующий код создаст хэш блока SHA-256, а также гарантирует, что словарь упорядочен.""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () Если вы объедините весь код до сих пор, у нас будет следующий blockchain.py. Проверьте это ниже.

 

class Blockchain (объект): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def new_block (self, proof, previous_hash = None): #This функция создает новые блоки, а затем добавляет к существующей цепочке """Этот метод будет содержать доказательство двух параметров, предыдущий хеш""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash или self.hash (self.chain [-1]),} # Установить текущий список транзакций должен быть пустым. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): # Эта функция добавляет новую транзакцию к уже существующим транзакциям """Это создаст новую транзакцию, которая будет отправлена ​​в следующий блок. Он будет содержать три переменные, включая отправителя, получателя и сумму. """ self.current_transactions.append ({‘отправитель’: отправитель, ‘получатель’: получатель, ‘сумма’: сумма,}) return self.last_block [‘index’] + 1 @staticmethod def hash (block): # Используется для хеширования Блок """Следующий код создаст хэш блока SHA-256, а также гарантирует, что словарь упорядочен.""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self): # Вызывает и возвращает последний блок цепочки return self.chain [ -1]

Подтверждение выполнения работ

Наш следующий шаг в создании blockchain.py – реализация Proof-of-Work..

Итак, что такое Proof of Work? Это метод консенсуса, который используется для добавления новых блоков в цепочку. Это создает проблему для майнера, и как только майнер решает проблему, блок проверяется. В свою очередь, майнер получает вознаграждение в зависимости от сложности задачи..

Доказательство работы Биткойна известно как Hashcash. Это гарантирует, что консенсус сети биткойнов работает должным образом..

Также читайте: Консенсусные алгоритмы: корень технологии блокчейн

Давайте определим метод proof_of_work (). Метод будет частью класса Blockchain..

def proof_of_work (self, last_proof): """В этом методе реализуется алгоритм консенсуса. Требуется два параметра, включая self и last_proof.""" proof = 0, в то время как self.valid_proof (last_proof, proof) имеет значение False: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Этот метод проверяет блок""" guess = f ‘{last_proof} {доказательство}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000"

Первый метод proof_of_work прост; он просто устанавливает proof в 0, а затем запускает цикл while для запуска метода valid_proof. Если это ложь, добавьте единицу к доказательству..

Вы можете увеличить сложность хэша, добавив больше нулей.

Это подводит нас к концу нашего Blockchain.py. Наш код выглядит следующим образом.

class Blockchain (объект): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def proof_of_work (self, last_proof): """В этом методе реализуется алгоритм консенсуса. Требуется два параметра, включая self и last_proof.""" proof = 0, в то время как self.valid_proof (last_proof, proof) имеет значение False: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Этот метод проверяет блок""" guess = f ‘{last_proof} {доказательство}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000" def new_block (self, proof, previous_hash = None): # Эта функция создает новые блоки, а затем добавляет их в существующую цепочку """Этот метод будет содержать доказательство двух параметров, предыдущий хеш""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash или self.hash (self.chain [-1]),} # Установить текущий список транзакций должен быть пустым. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): # Эта функция добавляет новую транзакцию к уже существующим транзакциям """Это создаст новую транзакцию, которая будет отправлена ​​в следующий блок. Он будет содержать три переменные, включая отправителя, получателя и сумму. """ self.current_transactions.append ({‘отправитель’: отправитель, ‘получатель’: получатель, ‘сумма’: сумма,})

 

return self.last_block [‘index’] + 1

@staticmethod

def хэш (блок):

# Используется для хеширования блока

«» «Следующий код создаст хэш блока SHA-256, а также гарантирует, что словарь упорядочен» »

block_string = json.dumps (блок, sort_keys = True) .encode ()

вернуть hashlib.sha256 (block_string) .hexdigest ()

@свойство

def last_block (сам):

# Вызывает и возвращает последний блок цепочки

вернуть self.chain [-1]

2. Интеграция API

Отлично, мы создаем работающий блокчейн! Теперь, чтобы использовать его эффективно, нам нужно создать API (интерфейс прикладного программирования)..

Для этого мы воспользуемся популярным Python Framework: Flask..

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

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

Теперь мы изменим файл blockchain.py.

# Создание узла приложения app = Flask (__ name__) node_identifier = str (uuid4 ()). Replace (‘-‘, ”) # Инициализация цепочки блоков blockchain = Blockchain () @ app.route (‘/ mine’, methods = [ ‘GET’]) def mine (): return "Разработка нового блока" @ app.route (‘/ transaction / new’, methods = [‘POST’]) def new_transaction (): return "Добавление новой транзакции" @ app.router (‘/ chain’, methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (response) , 200, если __name__ == ‘__main__’: app.run (host ="0.0.0.0", порт = 5000)

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

  • / моя конечная точка
  • / транзакции / новая конечная точка
  • / конечная точка цепи

Наконец, мы запускаем сервер на 5000 порту..

Приложение почти создано. Все, что нам нужно сделать, это создать метод класса транзакций.

@ app.route (‘/ transaction / new’, methods = [‘POST’]) def new_transaction (): values ​​= request.get_json () # Проверка наличия необходимых данных = [‘отправитель’, ‘ recipient ‘,’ amount ‘], если не все (k в значениях для k в обязательном): return’ Missing values ​​’, 400 # создание нового индекса транзакции = blockchain.new_transaction (values ​​[‘ sender ‘], values ​​[‘ recipient ‘ , values ​​[‘amount’]]) response = {‘message’: f ‘Транзакция должна быть добавлена ​​в блок № {index}’} return jsonify (response), 201

Также читайте: Вот что вам нужно знать о доказательстве работы блокчейна

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

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

  • Расчет Proof of Work
  • Создайте новый блокчейн, а затем добавьте его в цепочку
  • Наградить майнера за его труд

@ app.route (‘/ mine’, methods = [‘GET’]) def mine (): """Здесь мы заставляем работать алгоритм доказательства работы""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # награждает майнера за его вклад. 0 указывает, что была добыта новая монета. Blockchain. New_transaction (sender ="0", recipient = node_identifier, amount = 1,) # теперь создайте новый блок и добавьте его в цепочку previous_hash = blockchain.hash (last_block) block = blockchain.new_block (proof, previous_hash) response = {‘message’: ‘Новый блок был подделан ‘,’ index ‘: block [‘ index ‘],’ transaction ‘: block [‘ transaction ‘],’ proof ‘: block [‘ proof ‘],’ previous_hash ‘: block [‘ previous_hash ‘]} return jsonify (ответ), 200

Прочтите сейчас: руководство для начинающих: что такое AION? Первая в мире блокчейн-сеть третьего поколения

3. Взаимодействие с блокчейном

Последний шаг – взаимодействие с блокчейном. Мы собираемся использовать Postman для взаимодействия с сетью блокчейнов, используя только что созданный API..

Запустите приведенный ниже код в консоли Python.

python blockchain.py

Вывод

Это подводит нас к концу нашей статьи о том, как построить блокчейн. Надеюсь, что приведенные выше шаги и коды помогут вам построить блокчейн на Python. Итак, если вы новичок и стремитесь построить карьеру в блокчейне, мы предлагаем вам начать карьеру в блокчейне с нашего бесплатного курса по основам блокчейна. Выберите нас в качестве партнера по обучению, и мы будем поддерживать вас, пока вы не получите работу своей мечты.

Итак, что вы думаете о блокчейне и его реализации? Прокомментируйте ниже и дайте нам знать.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map