虽然有些人认为区块链是等待问题的解决方案,但毫无疑问,这种新技术是计算的奇迹。 但是,区块链究竟是什么?
区块链按时间顺序记录以比特币或其他加密货币进行的交易并公开的数字账本。
更一般地说,它是一个公共数据库,其中新数据存储在称为区块的容器中,并且被添加到过去添加了数据的不可变链(因此是区块链)中。在比特币和其他加密货币的情况下,这些数据是交易组。但是,数据可以是任何类型。
区块链技术产生了新的不是由中央机构发行或管理的全数字货币,如比特币和莱特币。这为那些认为今天的银行系统是骗局或遭遇失败的个人带来了新的自由。区块链还以像以太坊这样的技术形式彻底改变了分布式计算,并引入了智能合约等有趣的概念。
在本文中,我将用不到 50 行的 Python 2 代码创建一个简单的区块链。它被称为 SnakeCoin。
我们首先要定义区块。在区块链中,每个区块都存储时间戳和可选的索引。在 SnakeCoin 中,我们要同时存储这两部分。为了帮助确保整个区块链的完整性,每个区块都具有自我识别哈希。和比特币一样,每个区块的哈希是区块索引,时间戳,数据的加密哈希,和先前区块的哈希散列。数据可以是想要的任何东西。
真棒!有了区块结构,接下来是创建区块链。我们需要开始向实际链添加区块。正如我之前提到的,每个区块都需要来自前一个区块的信息。但话虽如此,出现了一个问题:如何创造第一个区块?第一个区块,或称为创世区块,它是一个特殊块。在许多情况下,它是手动添加的,或者具有允许添加的独特逻辑。
我们将创建一个函数,它只返回一个生成区块以简化操作。此区块的索引为 0,并且它的参数为前一个哈希的任意值。
既然我们能够创建一个创世区块,我们需要一个能够在区块链中生成后续块的函数。此函数将链中的前一个块作为参数,为要生成的块创建数据,并使用适当的数据返回新区块。当新区块哈希来自前一区块的信息时,区块链的完整性随着每个新块而增加。如果我们不这样做,那么外界会更容易“改变过去”,并用他们自己的全新链替换我们的链。此哈希链充当加密证明,有助于确保一旦块添加到区块链中,就无法替换或删除。
这是主要的难点工作。现在,我们可以创建我们的区块链!在我们的例子中,区块链本身就是一个简单的 Python 列表。列表的第一个元素是创世块。当然,我们需要添加后续块。由于 SnakeCoin 是最小的区块链,我们将只增加 20 个新区块。我们可以用一个 for 循环做到这一点。
让我们来检验一下我们迄今所取得的工作成效!
别担心,它会上升到 20
漂亮!我们的区块链是成功的。如果你想在控制台中看到更多的信息,您可以编辑完整的源文件去打印每个块的时间戳或数据。