编译自:https://hacker noon.com/learn-区块链-by-building-one-117428612f46
丹尼尔范弗莱明
译者:qhwdw
你读这篇文章,是因为你和我一样,对加密货币的流行感到兴奋。并且想知道区块链是如何工作的——他们背后的技术基础是什么。
但是理解区块链并不容易。至少对我来说是——。我在各种高难度的视频中徘徊,因为例子太少而深感挫败。
我喜欢边做边学。这将允许我在代码级别处理主要问题,这将允许我坚持到底。如果你也这样做,在本指南结束时,你将拥有一个正常工作的区块链,并真正理解它是如何工作的。
00-1010记住,区块链是一串不可更改的有序记录(称为块)。它们可以包括事务、文件或您想要任何真实数据。最重要的是,它们通过使用哈希链接在一起。
如果你不知道hash是什么,这里有一个解释。
这本指南的目标读者是谁?您应该能够轻松地读写一些基本的Python代码,并理解HTTP请求是如何工作的,因为我们正在讨论的区块链将基于HTTP。
我要做什么呢?确保安装了Python 3.6(和pip),还需要安装Flask和非常易于使用的请求库:
pip安装烧瓶==0.12.2请求==2.18.4
当然,你还需要一个HTTP客户端,像Postman或者cURL。谁都行。
开始之前 …
打开您最喜欢的文本编辑器或IDE。我个人喜欢PyCharm。创建一个名为blockchain.py的新文件,我只使用一个文件。如果你有困惑,可以参考源代码。
00-1010我们将创建一个区块链类,它的构造函数将初始化一个空列表(用来存储我们的区块链)和另一个保存交易的列表。这是我们的课程计划:
类区块链(对象):
def __init__(self):
self.chain=[]
self.current_transactions=[]
def new_block(自身):
#创建一个新块并将其添加到链中
及格
def new_transaction(自身):
#将新事务添加到事务列表中
及格
@静态方法
定义哈希(块):
#散列一个块
及格
@属性
def last_block(自身):
#返回链中的最后一个块
及格
我们区块链类的原型
我们的区块链类负责管理链。它将存储事务,并有一些辅助方法来添加新的块到链中。现在让我们开始丰富一些类方法。
00-1010每个块都有一个索引、一个时间戳(Unix时间)、一个事务列表、一个证书(后面会详细解释)以及前一个块的散列。
单个块的示例应该如下所示:
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 \'
}
区块链街区的例子
这时,链条的概念应该非常明显了。3354每个新块包含它自己的信息和前一个区域的散列。这是非常重要的,因为这就是区块链不能被改变的原因:如果