作者|丹尼尔范弗莱明
来源| Python学习与开发
你会不会和我一样,对加密数字货币的底层区块链技术非常感兴趣,特别想知道它们的运行机制?
但是学习区块链技术并不是一帆风顺的。看了很多视频教程和各种课程,最后的感觉就是实战课程太少了。
我喜欢通过实践来学习,尤其是理解基于代码的整个工作机制。如果你和我一样喜欢这种学习方式,当你读完这篇教程,你就会知道区块链技术是如何工作的。
写之前。
请记住,区块链是一个不可变的有序记录链,称为块。它们可以包含交易、文件或任何你喜欢的数据。但重要的是它们是用一个hash链接在一起的。
如果你不熟悉哈希,这里有一个解释。
本指南的目的是什么?你可以很舒服的读写基本的Python,因为我们会通过HTTP和区块链讨论,所以你也应该知道HTTP是怎么工作的。
我需要准备什么?安装Python 3.6(和pip)后,还需要安装Flask和Requests库:
` pip安装烧瓶==0.12.2请求==2.18.4 \'
对了,你还需要一个支持HTTP的客户端,比如Postman或者cURL,其他都可以。
00-1010打开您最喜欢的文本编辑器或IDE。个人比较喜欢PyCharm。创建一个名为blockchain.py的新文件,我们将只使用这一个文件。但如果还是不确定,也可以参考源代码。
描述区块链
我们想创建一个区块链类,它的构造函数创建一个初始化的空列表(存储我们的区块链),另一个存储事务。下面是我们3360班的一个例子。
区块链. py
类区块链(对象):
def __init__(self):
self.chain=[]
self.current_transactions=[]
def new_block(自身):
#创建一个新块并将其添加到链中
及格
def new_transaction(自身):
#将新事务添加到事务列表中
及格
@静态方法
定义哈希(块):
#散列一个块
及格
@属性
def last_block(自身):
#返回链中的最后一个块
及格
我们的区块链类负责管理链式数据。它存储事务,并有一个向链式数据添加新块的方法。让我们开始扩展更多的方法。
街区什么样?
每个块都有一个索引、一个时间戳(Unix时间戳)、一个事务列表、一个检查(稍后详述)和前一个块的散列。
以下是块的示例:
区块链. py
block={
索引\' : 1,
时间戳\' : 1506057125.900785,
交易\' : [
{
发件人\' : \' 8527147 fe1f 5426 f9dd 545 de 4b 27 ee 00 \',
收件人\' : \' a 77 F5 cdfa 2934 df 3954 a5 C7 c 7 da 5d f1f \':
金额\' : 5,
}
],
证明\' : 324984774000,
previous _ hash \' : \' 2 cf 24 DBA 5 FB 0 a 30 e 26 e 83 B2 AC 5b 9 e 29 E1 e 1b 161 E5 C1 fa 7425 e 73043362938 b 9824 \'
}
此时,区块链的概念应该是显而易见的——每个新块都包含前一个块的散列。这是至关重要的,因为这是区块链不变的原因:如果攻击者损坏了区块链的一个早期块,所有后续块将包含不正确的哈希值。
这有道理吗?如果你还没想通,花点时间仔细想想——这是区块链背后的核心思想。
将事务添加到块
我们需要一种方法来添加事务到块中。我们new_transaction()方法的职责就是这个,而且很简单3360
区块链. py
类区块链(对象):
.