Рубрики
Без рубрики

Давайте построим крошечный блокчейн

Менее чем в 50 линиях питона. Tagged с блокчейном, Python, новичками.

Примечание: эта статья была первоначально опубликована в Крипто В настоящее время .

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

Блокчейн

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

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

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

В этой статье я сделаю простой блокчейн менее чем в 50 строках кода Python 2. Это будет называться Snakecoin.

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

import hashlib as hasher

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.hash_block()

  def hash_block(self):
    sha = hasher.sha256()
    sha.update(str(self.index) + 
               str(self.timestamp) + 
               str(self.data) + 
               str(self.previous_hash))
    return sha.hexdigest()

Потрясающий! У нас есть структура блоков, но мы создаем блок цепь . Нам нужно начать добавлять блоки в реальную цепочку. Как я упоминал ранее, каждый блок требует информации из предыдущего блока. Но с учетом сказанного возникает вопрос: Как попадает первый блок в блокчейне? Ну, первый блок, или Genesis Block , это специальный блок. Во многих случаях он добавляется вручную или имеет уникальную логику, позволяющую его добавлять.

Мы создадим функцию, которая просто возвращает блок Genesis, чтобы облегчить ситуацию. Этот блок имеет индекс 0 и имеет произвольное значение данных и произвольное значение в параметре «предыдущего хэша».

import datetime as date

def create_genesis_block():
  # Manually construct a block with
  # index zero and arbitrary previous hash
  return Block(0, date.datetime.now(), "Genesis Block", "0")

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

def next_block(last_block):
  this_index = last_block.index + 1
  this_timestamp = date.datetime.now()
  this_data = "Hey! I'm block " + str(this_index)
  this_hash = last_block.hash
  return Block(this_index, this_timestamp, this_data, this_hash)

Это большая часть тяжелой работы. Теперь мы можем создать наш блокчейн! В нашем случае сам блокчейн – это простой список Python. Первым элементом списка является блок Genesis. И, конечно, нам нужно добавить последующие блоки. Поскольку Snakecoin – самый крошечный блокчейн, мы добавим только 20 новых блоков. Мы можем сделать это с петлей.

# Create the blockchain and add the genesis block
blockchain = [create_genesis_block()]
previous_block = blockchain[0]

# How many blocks should we add to the chain
# after the genesis block
num_of_blocks_to_add = 20

# Add blocks to the chain
for i in range(0, num_of_blocks_to_add):
  block_to_add = next_block(previous_block)
  blockchain.append(block_to_add)
  previous_block = block_to_add
  # Tell everyone about it!
  print "Block #{} has been added to the blockchain!".format(block_to_add.index)
  print "Hash: {}\n".format(block_to_add.hash)

Давайте проверим, что мы сделали до сих пор.

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

Это все, что может предложить Snakecoin. Чтобы сделать Snakecoin Scale до размера сегодняшних производственных блокчейнов, мы должны были бы добавить больше функций, таких как уровень сервера, чтобы отслеживать изменения в цепочке на нескольких машинах и Алгоритм доказательства работы Ограничить количество блоков, добавленных в определенный период времени.

Если вы хотите получить больше технических, вы можете просмотреть оригинальный Bitcoin WhitePaper Здесь Анкет Удачи и счастливого взлома!

Большое спасибо за чтение! Twitter , GitHub В Snapchat , Средний , Instagram

Оригинал: “https://dev.to/aunyks/lets-build-the-tiniest-blockchain”