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