专栏名称: Python程序员
最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具。我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
目录
相关文章推荐
Python中文社区  ·  用 Python 解读股市情绪,让你从韭菜变镰刀 ·  5 天前  
Python爱好者社区  ·  王者归来!《大模型最佳实践》开源了。。。 ·  4 天前  
Python爱好者社区  ·  北大韦东奕上课照片走红,板书潇洒,新发型吸睛 ... ·  6 天前  
Python爱好者社区  ·  11月,终于跨过了5W这个坎!! ·  5 天前  
Python爱好者社区  ·  700篇大模型论文 ·  1 周前  
51好读  ›  专栏  ›  Python程序员

50行python代码构建一个最小的区块链(Blockchain)

Python程序员  · 公众号  · Python  · 2017-08-20 09:10

正文

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

虽然有些人认为区块链(blockchain)技术的应用场景还有待研究,但毫无疑问,这一新颖技术的出现是计算界的奇迹。那么,什么是区块链?

区块链:是一种分类账技术,使用区块链进行交易的比特币以及其他加密货币的交易记录会被按时间顺序存储,并且是公开存储。

通俗的说,它是一个公共数据库,其中新数据存储在称为块的容器中,并被添加到具有过去添加的数据的不可变链(因此是块链)。在比特币和其他加密货币的情况下,这些数据是一组交易记录,当然,数据可以是任何类型的。

Blockchain技术已经引起了新的,完全数字化的货币,如Bitcoin和Litecoin,它们不是由中央机构发行或管理的。这对那些认为现在的银行体系是骗局的个人带来了新的自由。 Blockchain也以像Ethereum这样的技术形式革新了分布式计算,它引入了有趣的概念,如智能合同。

在本文中,我将在不到50行的Python代码中制作一个简单的blockchain,这将被称为SnakeCoin。

我们首先定义我们的块将是什么样子。在块链中,每个块都有时间戳和可选的索引,在SnakeCoin中,将同时存储两者,并且为了帮助确保整个块链的完整性,每个块将具有自识别散列。像比特币一样,每个块的散列将是块的索引,时间戳,数据以及前一个块的哈希散列的加密散列。当然,这些数据可以是任何你想要的。

很好!现在我们有了块结构,但是我们正在创建一个块链,需要向实际的链条添加块。如前所述,每个块都需要上一个块的信息。也就是说,出现了一个问题:块区中的第一个块怎么到达那里?因此,第一个块,或起源块,是一个特殊的块。在许多情况下,它是手动添加的或具有允许添加的唯一逻辑值。

我们将创建一个函数返回一个起源块,使事情变得容易。该块的索引为0,它在“previous hash”参数中具有任意数据值和任意值。

现在我们可以创建一个起源块,我们需要一个函数来生成块链中的后续块。该函数将将链中的前一个块作为参数,创建要生成的块的数据,并返回具有其相应数据的新块。当新块得到先前块中的哈希信息时,块链的完整性随着每个新的块而增加。如果我们没有这样做,外界信息会更容易“改变过去”,并用自己的更新变化来替代我们的链条。这个哈希链作为加密证明,有助于确保一旦块被添加到块链中,它不能被替换或删除。

以上是必要的工作。现在我们可以创建我们的blockchain!在我们的例子中,blockchain本身就是一个简单的Python列表。列表的第一个元素是起源块。当然,我们需要添加后续的块。因为SnakeCoin是最小的块,所以我们只添加20个新的块。我们可以用for循环来做到这一点。

让我们来测试一下

完美运行,如果要在控制台中查看更多信息,可以编辑完整的源文件并打印每个块的时间戳记或数据。

那就是SnakeCoin所提供的一切。为了使SnakeCoin扩展到当今实际产品级别块链的规模,我们必须添加更多的功能,如服务器层,以跟踪多台机器上链的变化,并提供有效证明算法,以限制一定时间段内添加的区块数。


英文原文:https://ogmcsrgk5.qnssl.com/vcdn/1/优质文章长图/lets-build-the-tiniest-blockchain-e70965a248b.png
译者:咋家