Что такое блокчейн?
Реализация простого блокчейна на Python
Изучаем основы технологии блокчейн через практику
Что такое блокчейн?
Блокчейн — это цепочка блоков, хранящих данные в защищенной и неизменяемой форме. Каждый блок содержит:
- Данные (транзакции, контракты и т.д.).
- Хеш — уникальная цифровая подпись блока.
- Хеш предыдущего блока, что обеспечивает связность цепочки.
Эта технология лежит в основе Bitcoin и Ethereum, но её можно адаптировать для любых задач, требующих прозрачности и безопасности.
Создаем блок на Python
Реализуем класс Block:
import hashlib
import time
class Block:
def __init__(self, index, timestamp, data, previous_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.hash = self.calculate_hash()
def calculate_hash(self):
block_data = f"{self.index}{self.timestamp}{self.data}{self.previous_hash}".encode()
return hashlib.sha256(block_data).hexdigest()
Каждый блок хранит индекс, метку времени, данные, хеш предыдущего блока и собственный хеш, вычисленный через SHA-256.
Строим цепочку блоков
Класс Blockchain управляет созданием и валидацией блоков:
class Blockchain:
def __init__(self):
self.chain = [self.create_genesis_block()]
def create_genesis_block(self):
# Генезис-блок — первый блок в цепочке
return Block(0, time.time(), "Genesis Block", "0")
def get_latest_block(self):
return self.chain[-1]
def add_block(self, new_block):
new_block.previous_hash = self.get_latest_block().hash
new_block.hash = new_block.calculate_hash()
self.chain.append(new_block)
def is_chain_valid(self):
for i in range(1, len(self.chain)):
current = self.chain[i]
previous = self.chain[i-1]
if current.hash != current.calculate_hash():
return False
if current.previous_hash != previous.hash:
return False
return True
Пример использования
Создадим блокчейн и добавим блоки:
# Инициализация блокчейна
my_blockchain = Blockchain()
# Добавление блоков
my_blockchain.add_block(Block(1, time.time(), "Transaction 1", ""))
my_blockchain.add_block(Block(2, time.time(), "Transaction 2", ""))
# Вывод информации о блоках
for block in my_blockchain.chain:
print(f"Block {block.index}")
print(f"Hash: {block.hash}")
print(f"Previous Hash: {block.previous_hash}\n")
# Проверка валидности
print(f"Chain valid: {my_blockchain.is_chain_valid()}")
Упрощения и ограничения
Данный пример учебный. В реальных блокчейнах используются:
- Proof of Work/Proof of Stake для консенсуса.
- P2P-сеть для распределенного хранения.
- Мерклевы деревья для оптимизации хеширования.
Возможные улучшения
- Реализовать майнинг с проверкой сложности.
- Добавить обработку транзакций и кошельки.
- Создать API для взаимодействия с сетью.
Заключение
С помощью Python можно легко понять принципы работы блокчейна. Этот пример — отправная точка для изучения более сложных концепций, таких как смарт-контракты или децентрализованные приложения.