用不到50行的Python代码构建最小的区块链

简介:


尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?


区块链


它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开。


在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去的数据。在比特币和其他加密货币的情况下,这些数据是一组交易记录。当然,数据可以是任何类型的。


区块链技术已经催生了新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。因此为那些认为今天的银行系统是骗局或终将失败的人带来了新的自由。区块链所包含的以太坊技术对分布式计算进行了变革创新,它引入了一些有趣的概念,比如智能合约。


在本文中,我将用不到50行的Python2代码来做一个简单的区块链。我称它为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()


这一步后有块结构,但现在是创建区块链,所以需要向实际的链中添加块。如前所述,每个块都需要上一个块的信息。但是按照这个说法就有一个问题,区块链的第一个区块是如何到达那里的呢?不得不说,第一个块,或者说是起源块,它是一个特殊的块。在很多情况下,它是手动添加的,或者有独特的逻辑允许添加。


下面将创建一个函数简单地返回一个起源块以便产生第一个区块。这个块是索引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规模达到今天生产区块链的规模,必须添加更多的功能,比如服务器层,以跟踪多台机器上的链变化,以及在给定的时间段内限制添加的块数量的工作算法。


原文发布时间为:2017-08-04

本文作者:Gerald Nash

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关文章
|
1月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
237 3
|
6月前
|
存储 JSON Java
酷阿鲸森林农场:使用 Java 构建的去中心化区块链电商系统
酷阿鲸森林农场推出基于Java的轻量级区块链电商系统,解决传统农产品电商信任问题。该系统无需以太坊或服务器,通过自研区块链引擎实现去中心化点对点交易,确保数据不可篡改。每个用户节点运行桌面软件参与数据共识,支持订单上链、链同步与验证。项目具备简单轻量、真实可控等优势,适用于农户合作社及小型有机电商,并可扩展签名认证、NFT凭证等功能,推动农业数字主权与数据可信发展。
酷阿鲸森林农场:使用 Java 构建的去中心化区块链电商系统
|
供应链 物联网 分布式数据库
使用Python实现简单的区块链
使用Python实现简单的区块链
299 8
|
存储 程序员 Python
小白也能用的代码!1行Python,把PPT转成1张长图
大家好,我是程序员晚枫。今天介绍`python-office`库的新功能:仅用1行Python代码将PPT转为单张长图。
205 11
 小白也能用的代码!1行Python,把PPT转成1张长图
|
数据可视化 物联网 区块链
探索Python中的数据可视化:使用Matplotlib和Seaborn绘制图表探索未来:区块链、物联网与虚拟现实的融合趋势与应用前景
【8月更文挑战第30天】本文旨在引导读者通过Python编程语言,利用Matplotlib和Seaborn库,轻松掌握数据可视化技术。文章以浅显易懂的语言,结合实用的代码示例,从基础的图表绘制到高级定制功能,逐步深入讲解如何在数据分析中运用这些工具。无论你是编程新手还是希望提升可视化技能的开发者,都能在这篇文章中找到有价值的信息,让你的数据“活”起来。
|
供应链 监控 安全
构建未来:区块链技术在供应链管理中的应用
【8月更文挑战第30天】 在数字化浪潮的推动下,供应链管理正经历着前所未有的转型。本文深入探讨了区块链技术如何成为这一变革的核心动力。通过分析区块链的不可篡改性、透明度以及去中心化特性,揭示了其在提高供应链效率、确保商品真实性和加强各方信任方面的潜力。不同于常规摘要,本文还将提供具体的行业案例,以展现区块链技术在实际供应链管理中的应用场景与成效。
1134 3
|
算法 分布式数据库 区块链
Python构建区块链
【7月更文挑战第10天】本文探讨了如何使用Python构建基本的区块链应用。区块链作为去中心化的分布式数据库,由包含交易数据的区块组成,通过哈希链接形成不可篡改的链。文中通过Python代码展示了如何创建`Block`类和`Blockchain`类,实现了区块的创建、哈希计算和链的构建。此外,还讨论了如何扩展区块链,包括添加智能合约、实现共识算法如Proof of Work、优化网络层以及引入隐私保护和跨链技术。
|
供应链 算法 Java
使用Java构建区块链应用
使用Java构建区块链应用
|
供应链 区块链 数据安全/隐私保护
构建未来的桥梁:区块链技术在现代金融中的应用
【8月更文挑战第16天】区块链技术,这一去中心化的数字账本技术,正逐渐渗透到金融领域的每一个角落。从提高交易透明度、降低操作成本到促进金融包容性,区块链正在重塑金融行业的未来。本文将探讨区块链技术如何在现代金融中发挥作用,以及它如何为金融服务的未来发展铺平道路。
|
供应链 安全 物联网
区块链跨链互操性:打破孤岛,构建互联互通的未来
**区块链跨链互操性摘要** - 跨链互操性是不同区块链间通信、交换数据和价值的能力,打破区块链“孤岛”现象。 - 提升扩展性、促进创新、增强安全性是其主要益处,通过侧链、原子交换、中继链等方式实现。 - 面临兼容性、安全性和性能挑战,未来将趋向标准化、提升安全隐私,并拓展多样化应用,促进区块链生态协同发展。

推荐镜像

更多