不到五十行编写区块链~我仿佛看到比特币在向我招手了
虽然有人认为区块链本身仍有很多问题需要解决,但毫无疑问,这种新颖的技术是计算机界的奇迹。
但是,究竟什么是一个区块链?
这里小编科普一下,区块链一种数字记账本,其中以比特币或其他加密方式按时间顺序并公开记录地进行交易。通俗的讲,区块链是一个公共数据库,其中新产生的数据存储在称为块的容器中,并被添加到具有已经存在数据的区块构成的链中。在比特币和其他加密货币的情况下,这些数据是一组交易。数据也可以是任何类型的。区块链技术已经带来了全新的,完全数字化的货币,如比特币和莱特币,它们不由中央机构发行或管理的,这给相信今天的银行体系是骗局或失败的个人带来了新的自由。区块链也以像ETH这样的技术形式革新了分布式计算,它引入了有趣的概念,如智能合约。
在本文中,我将在Python 2中以不到五十行代码的情况下,制作一个简单的区块链。这将被称为SnakeCoin。我们首先定义我们的区块将是什么样子。
在区块链中,每个块都存储有时间戳和可选的索引。在SnakeCoin中,我们将同时存储两者。并且为了帮助确保整个块链的完整性,每个块将具有自识别哈希值的功能。像比特币一样,每个区块将包括作为区块的索引的哈希值,时间戳,数据以及前一个块的哈希值。哦,数据可以是任何你想要的。
真棒!我们已经有了块结构了,但是我们正在创建一个区块链。我们需要开始向实际的链条添加区块。如前所述,每个块都需要上一个块的信息。但是这就出现了一个问题:块区中的第一个区块怎么来的?那么,第一个区块,或起创世区块,是一个特殊的块。在许多情况下,它是手动添加的或具有允许添加的唯一逻辑。为了简化,我们将创建一个函数,只需返回一个创世区块,该区块的索引为0,它在“previous hash”参数中具有任意数据值和任意值。
现在我们创建了一个创世区块,我们需要一个函数来生成区块链中的后续区块。该函数将将链中的前一个区块作为参数,创建要生成的区块的数据,并返回具有其相应数据的新块。新产生的区块会存储先前区块中的哈希值,区块链的完整性随着每个新的区块而增加。如果我们没有这样做,其他人会很容易篡改历史记录,并用自己的全新数据替代我们的链条。这个哈希链作为加密证明,有助于确保一旦新区块被添加到区块链中,它不能被替换或删除。
这是本次任务的重心。现在我们可以创建我们的区块链!在我们的例子中,区块链本身就是一个简单的Python列表。列表的第一个元素是创世区块。当然,我们需要添加后续的区块。因为SnakeCoin是最小的区块链,所以我们只添加了20个新的块。我们可以用for循环来做到这一点。
我们来测试一下已有成果。
我去!我们的区块链生效了!如果要在控制台中查看更多信息,可以编辑完整的源文件并打印每个块的时间戳或数据。那就是SnakeCoin所提供的一切。为了使SnakeCoin缩小到当今生产块链的大小,我们必须添加更多的功能,如服务器层,以跟踪多台机器上链的变化,并提供工作证明算法,以在给定时间段限制块链数量。