主页 > 区块链 > 实现一个迷你的区块链来帮你理解技术的核心原理

实现一个迷你的区块链来帮你理解技术的核心原理

佚名 区块链 2021年12月15日

尽管有人认为区块链仍是一个不成熟的解决方案,但它无疑是计算机发展史上的一个奇迹。但是,究竟什么是区块链?我们将通过手工实现一个迷你区块链,帮助您真正理解区块链技术的核心原理。python 源代码存储在 Github 上。

区块链 区块链是一种开放的数字账本,按时间顺序记录比特币或其他加密货币的交易。

更通俗的说PC官方,区块链是一个公共数据库,新的数据会存储在一个叫做“区块”的容器中,然后

区块被添加到一条不可篡改的链中,因此被称为“区块链”。当我们谈论比特币或其他加密货币时,

这些数据是指交易记录。当然,您可以在区块链中存储任何类型的数据。

区块链公链开发教程_区块链应用开发入门_区块链开发讲义

区块链技术催生了新的全数字货币,例如比特币和莱特币,它们不是由中央政府发行或管理的。这项技术为那些不认识当前银行系统的人带来了新的自由。

区块链还为分布式计算带来了革命性的创新。例如PC28大群,以太坊区块链引入了一些有趣的概念全天加拿大28靠谱群!,例如智能合约。

在本文中,我将使用不到 50 行的 Python 2 代码来构建一个简单的区块链。我称之为蛇币。

我们将首先定义“块”的数据结构。在区块链中,每个区块存储一个时间戳和一个可选的索引。在 SnakeCoin 中,我们将存储两者。为了保证整个区块链的完整性,每个区块都有一个哈希值用于自我识别。

区块链开发讲义_区块链应用开发入门_区块链公链开发教程

与比特币一样PC蛋蛋群玩家群吧,每个区块的哈希值都是根据区块索引、时间戳、数据和上一个区块哈希计算得出的加密哈希值。其中你可以保存任何数据。

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

奇妙!现在我们有了区块的数据结构,但是我们的目的是实现一个区块链最新加拿大28实力群群,所以需要将区块加入链中。

如前所述区块链应用开发入门,每个块都需要来自前一个块的信息。但是按照这个说法,就会有一个问题,如何添加区块链的第一个区块?

区块链应用开发入门_区块链公链开发教程_区块链开发讲义

好吧区块链应用开发入门,链中的第一个块,或者说创世块,是一个特殊的块。在很多情况下,您需要手动添加或使用单独的处理逻辑。

接下来,我们将创建一个函数,其作用是简单地返回一个创世块。此块的索引为 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")

现在已经创建了创世块,需要一个函数来在区块链中生成后续块。该函数将链中的前一个区块作为参数,生成并返回一个新区块。当使用来自先前块的信息计算新块的哈希值时,区块链的完整性将随着每个新块而增加。如果不是这样,外部组织将更容易“改变过去”,用他们伪造的区块替换链中的区块。这一系列的区块哈希可以作为加密的证明,有助于确保区块一旦加入区块链,就不能被替换或删除。

区块链应用开发入门_区块链公链开发教程_区块链开发讲义

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 列表。列表的第一个元素是创世块。当然,我们还需要添加后续块。因为 SnakeCoin 可以说是世界上最小的区块链,我们在这里只添加了 20 个新区块。您可以使用 for 循环来生成新块:

# 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 达到生产级区块链的规模,

需要添加更多功能,例如用于跟踪多个节点上的区块链变化的 P2P 服务层,以及限制

在一定时间内可以添加到链中的新区块数量的工作量证明算法。

广告位
标签: 区块链