40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理。python开发区块链的源代码保存在Github。

尽管有人认为区块链目前还是不成熟的解决方案,但它无疑是计算机发展史上的一个奇迹。但是,到底区块链是什么呢?

我们将通过动手实现一个迷你的区块链来帮你真正理解区块链技术的核心原理。python源代码保存在Github。

区块链

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

更一般的讲,区块链是一个公共数据库,新的数据将存储在一个被称为”块“的容器中,然后块会被添加到一个不可篡改的链,因此被称为”区块链“。当我们谈到比特币或其他加密货币时,这些数据指的是交易记录。当然,你可以将任何类型的数据存入区块链。

区块链技术已经催生了全新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。这一技术给那些不认可当前银行系统人带来了新的自由。 区块链同时也为分布式计算带来了革命性的创新,例如,以太坊区块链引入了一些有趣的概念,比如智能合约。

在本文中,我将用不到50行的Python2代码来做一个简单的区块链。我称它为SnakeCoin

我们首先将定义“块”的数据结构。在区块链中,每个块都存储一个时间戳和一个可选地索引。在SnakeCoin中,我们将把两者都存储起来。为了确保整个区块链的完整性,每个块都有一个用于自我标识的哈希。 与比特币一样,每个块的哈希将是对块索引、时间戳、数据和前块哈希计算出的加密哈希值。其中你可以在数据中保存任何内容。

import hashlib as hasherclass Block:def __init__(self, index, timestamp, data, previous_hash):self.index = indexself.timestamp = timestampself.data = dataself.previous_hash = previous_hashself.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 datedef create_genesis_block():# Manually construct a block with# index zero and arbitrary previous hashreturn Block(0, date.datetime.now(), "Genesis Block", "0")
复制代码

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

def next_block(last_block):this_index = last_block.index + 1this_timestamp = date.datetime.now()this_data = "Hey! I'm block " + str(this_index)this_hash = last_block.hashreturn 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服务层,以及限制在一定时间内可以添加到链中的新块数量的工作量证明算法。

如果想了解更多的技术信息,可以在这里查看原始的比特币白皮书。

如果你希望高效的学习以太坊DApp开发,可以访问汇智网提供的最热门在线互动教程:

  • 适合区块链新手的以太坊DApp实战入门教程
  • 区块链+IPFS+Node.js+MongoDB+Express去中心化以太坊电商应用开发实战

其他更多内容也可以访问这个以太坊博客。

原文:Let’s Build the Tiniest Blockchain

python开发一个区块链只需40多行相关推荐

  1. 40行python开发一个区块链

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 尽管有人认为区块链目前还是个不成熟的解决方案,但它无疑称得上是计算机发展历史上的一个奇迹.但是,到底区块链是什么呢? 我 ...

  2. python做客户端适合吗_太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端...

    原标题:太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端 作者:Adil Moujahid 编译:kou.Eli 本文转自区块链大本营(ID:blockchai_camp),转载需授权 区 ...

  3. JavaScript开发区块链只需200行代码

    JavaScript开发区块链只需200行代码 用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表 ...

  4. java开发区块链只需150行代码

    本文目的是通过java实战开发教程理解区块链是什么.将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等.这个基本的java区块链也实现简单的工作量证明系统. ...

  5. JavaScript开发区块链只需200行代码 1

    使用JavaScript实现简单的开发一个区块链.通过javascript这一开发区块链的实现过程,你将会真正理解区块链是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表中包含着许 ...

  6. hash签名 java_java开发区块链只需150行代码

    原标题:java开发区块链只需150行代码 本文帮助你理解什么是区块链.将通过java开发区块链的实战学习方式,用 Java创建开发一个基本的区块链,实现简单的工作量证明系统.Java开发区块链的源代 ...

  7. 通过python构建一个区块链来学习区块链

    了解区块链Blockchains如何工作的最快方法就是构建一个区块链.你来到这里是因为,和我一样,你对加密钱币的崛起感到很兴奋.而且你想知道区块链是如何工作的,想了解它们背后的基本技术. 但理解区块链 ...

  8. 太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端

     区块链技术以其去中心化特性成为又一具有颠覆性特征的技术.Python作为一种面向对象的解释型计算机程序设计语言,因其具有丰富和强大的库,常被称为"胶水语言",简单.易上手,是区 ...

  9. 如何用 Python 快速开发一个区块链数据结构?

    作者 | arjuna sky kok 整理 | Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开发者欢迎的语言之一.由于 ...

最新文章

  1. golang 代码实现 修改配置文件
  2. 大数据中心周边辐射大吗_PETCT有辐射,PETCT对陪同人员的影响大吗?
  3. java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法
  4. 对java:comp/env的研究
  5. HDU5187 zhx#39;s contest(计数问题)
  6. php 中c函数重载,php函数重载的替代方法--伪重载详解
  7. 随机抽取学生姓名html,VB中随机抽取学生姓名的程序
  8. php奖学金系统,java/php/net/pythont奖助学金管理系统设计
  9. linux中mysql启动时遇到MySql server PID file cound not be found
  10. SQL语法INSERT INTO_大数据培训
  11. vue项目rem 大屏可视化适配
  12. [转贴]一位营销总监的辞职信(非常经典)
  13. 用计算机弹出微微,电脑显示器轻微闪烁怎么办
  14. 高效办公 1.2 用Python新建Excel文件
  15. 磁盘阵列RAID技术超详细解读
  16. 支持mp4的rtsp服务器,基于Windows服务器,从0开始搭建一个基于RTSP协议的直播平台...
  17. 清新卡通小女孩读书背景的全民阅读PPT模板
  18. 齐鲁云采入驻条件是什么
  19. Qt - 多功能画图板
  20. 卡西欧 casio prw-3100t-7 手表手动调时间

热门文章

  1. 目标文件中的几个重要的段
  2. java:UDP通信
  3. python四十五:归一化继承
  4. JavaScript 中对象的属性类型
  5. 物联网智能硬件设备身份验证机制
  6. Python数据可视化2.6 一些最好的可视化实践
  7. Matlab基本函数-conj函数
  8. Linux centos 下apache(httpd)编译安装
  9. php admin允许空密码登陆
  10. FFmpegInterop 库在 Windows 10 应用中的编译使用