这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过实践,这是了解区块链的一个好的方式.于是我将代码实现了下.并且通过这篇文章,说说我读这个代码的时候的思路.
在这串代码里我们主要使用了两个库.这两个库都是python里边自带的,一个是hashlib,这个库里边提供了主要的摘要算法.比如MD5和SHA等.另外一个库是datatime模块.这个模块是python里提供时间日期的模块.在区块链里边,每个区块都需要储存一个时间戳(也就是当前的时间)和一个索引.因此这个库为我们提供了使用的工具.
1:初始化函数
首先我们定义区块链的初始参数,我们这里因为是最基本的区块链,这里只包含我们需要的几个参数,但是这些参数是大部分区块链所需要的.比如每个链的索引位置,时间数据以及哈希值.
2:加密函数
区块链说到底就是产生一堆数值让大家去计算,看谁算的快,而计算的时候我们需要的一个算法就是在这个加密函数里产生.
这里我们使用的是hashlib里边的sha256加密,然后将其进行更新,为了确保整个区块链的完整性,每个区块都会有一个自我识别的散列。和比特币一样,每个块的散列将是块的索引,时间戳,数据和前一个块散列的散列的加密散列.然后我们去使用hexdigest返回一个16进制的加密结果.
3:初始化函数
这个创建一个起源块,起始的链的数目是0,这个应该要注意一下.其他就是你想给定的参数,具体传递的参数参照函数1.
4:后续函数
这个函数是为以后的区块链产生做准备,这里边的规则是可以我们认为给定的,所以我们现在看很多的山寨币或者空气币光凭发行方的一口说法是不可信的,因为他们既做裁判有做庄家,一旦改变了规则,散户被套牢的风险极大.
5:调用函数区块链本身就是一个简单的Python列表。列表的第一个元素是创世区块。当然,我们需要添加后续的块。由于这个例子是最小的区块链,我们只会添加100个新区块。我们可以用for循环来做到这一点。
接下来无非就是调用上边的参数,然后输入你想要产生的块链就可以.
6:运行结果
这就是这个小程序所提供的一切。如果想要让这个规模达到当今生产区块链的规模,我们必须添加更多功能,如服务器层来追踪多台机器上链块的变化,以及工作量验证算法,以限制添加到给定的时间段。
如果你想了解更多地关于区块链的技术,可以查看原始比特币白皮书。祝你好运!