用不到200行的Python代码实现一个区块链
来源:互联网 发布:会员卡管理系统源码 编辑:程序博客网 时间:2024/05/29 15:12
原文:A Python Implementation of a simple blockchain
翻译:无阻我飞扬
摘要:本文来自github,描述了如何用少量的Python代码实现一个简单的blockchain,以下是译文。
描述
pysimplechain的实现完全聚焦于哈希账本功能。它不包含任何高级功能,诸如分布式账本或者通过工作量证明的一致性协议。在这个项目中,还会发现“事务”的概念被抽象为一个更通用的“消息”概念,它可以包含任何类型的数据。
因此,这个项目的目标是解释和澄清什么是blockchain最核心的结构。项目的意图不是为了重写一个高级的blockchain,如比特币或以太坊。
这个blockchain通过包含三个类的simple_chain.py文件实现。Message()
类,Block()
类和Chain()
类。
message
是基本的数据容器。当增加一个块时,它被密封,块中具有标识它的2个哈希值:有效载荷哈希和块哈希。每个消息通过哈希指针(prev_hash
属性)链接到前一个消息。validate
消息的方法将确保每个消息的完整性,但不会检查哈希指针正确与否。这个工作留给在Block()类中的validate
方法去完成。
block
包含一个接一个地依次链接的1,…,n个消息。当一个block
添加到chain
时,它被密封和验证,以确保消息正确排序,并且哈希指针匹配。一旦块被密封和哈希,它将通过检查期望值与实际值进行验证。
chain
包含一个接一个依次链接的1,…,m个块。可以随时调用validate
方法来验证链的完整性,它将调用每个块的验证方法,一旦验证不通过,将抛出InvalidBlockchain
异常。
交互性:
manager()
函数,通过终端/控制台与blockchain交互。基本动作是:
- 添加消息到块:允许向当前块添加消息;
- 添加块到链:允许将当前块添加到链,如果它不为空;
- 显示块:请求一个索引,如果存在具有该索引的块,则返回一些块属性;
- 显示链:返回链中每个块的一些属性;
- 验证完整性:如果验证是完整的,则返回True,否则终止程序,抛出适当的异常;
- 退出:终止程序并删除区块链。
贡献
欢迎大家有新的想法:打开/关闭issues,fork repo,通过Pull请求分享你的代码。
将此项目克隆到您的计算机: git clone https://github.com/EricAlcaide/pysimplechain
- 用不到200行的Python代码实现一个区块链
- 用不到50行的Python代码构建最小的区块链
- 用不到 50 行的 Python 代码构建最小的区块链
- 200 行代码实现一个简单的区块链应用
- 200 行代码实现一个简单的区块链
- blockchain 区块链200行代码:在JavaScript实现的一个简单的例子
- 50 行 Python 代码构建一个区块链
- 不到100行代码实现一个简单的推荐系统
- 《一个操作系统的实现》(一):不到20行的操作系统代码的解释
- 不到100行代码实现一个推荐系统
- 一个代码不到60行的键值存储NoSQL数据库
- 代码笔记 | 一个用python实现的简单的文件服务器
- 5行Python代码实现一个简单的在线英汉词典
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- 一个 11 行 Python 代码实现的神经网络
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- 数据结构图小结
- 对象流读取发生java.io.EOFException错误
- TX2刷机jetpack3.1工具包安装,不识别IP
- 每日一练20171031
- 用不到200行的Python代码实现一个区块链
- 2.1 求二进制数中1的个数
- 标准模式与混杂模式
- Your MATLAB license will expire in 05 days
- PROFILE
- Shadowsocks使用教程
- 它们才是真正的数学家 寻找自然界中的数学
- 2018年即将到来,大牛们已经开始关注的那些新的语言、框架和工具
- python常见错误:IndentationError: unexpected indent