python做区块链开发(20分钟,我用Python实现区块链架构!)python初学 / python在区块链技术中的应用...

wufei123 发布于 2024-06-10 阅读(9)

文章目录区块链到底多神奇一起动手创建一个极简的区块链为“瘦小的”区块链“增肥”添加POW共识算法开采新的区块测试零基础Python实现区块链架构视频观看地址区块链到底多神奇 这是篇技术文,我们会用Python一步步搭建一个完整的区块链。

不过,在此之前,咱们还是先说说你什么你该学习如何从零搭建一个区块链 我们可以把区块链看做一个公共数据库,其中新数据存储在一个称为区块的容器中,然后被添加到一条不可更改的链上(也就是区块链),同时,链上保存着之前的数据记录。

这些数据是比特币或其他加密货币之前的交易信息,被分门别类地添加到链上 区块链的诞生,引发了以比特币和莱特币为首的加密货币的崛起由于加密货币的去中心化属性对于那些本来就不信任银行系统的人来说,简直是带来了新世界。

此外,区块链还给分布式计算带来了革新,出现了很多诸如以太坊这样的新平台,也引入了智能合约的概念 俗话说实践出真知接下来,我将用不超过50行的 Python 代码创建一个简单的区块链,并给它取了一个名字 SmartCoin。

以此帮助大家理解区块链一起动手创建一个极简的区块链 首先,我们先对区块链进行定义在区块链中,每个区块上都有一个时间戳,有时还会有一个索引在SmartCoin中,我们两个都有同时,为了保证整个区块链的完整性,每一个区块都有一个唯一的哈希值,用于自我标识。

比如比特币,每一个区块的哈希值是由区块的索引、时间戳、数据以及前一个区块的哈希,经过加密后得到的其中,数据可以选取任意值下面来看看定义区块的代码:

完成了!区块链的基本框架就这样搭建出来了考虑到我们要做的是「区块链」,因此,我们还需要往链上加区块我之前提到过,其中每一个区块需要包含链上前一个区块的哈希值你可能会问,区块链的第一个区块是怎么出现的呢??当然,作为第一个区块(也叫创世区块),自然很特殊。

在多数情况下,它是手动地被添加到链上,或者通过独特的逻辑将它添加到链上下面,我们就简单一点,通过创建一个函数,让它返回一个创世区块这个区块的索引为0,此外,它所包含的数据以及前一个区块的哈希值都是一个任意的值。

创建创世区块的函数代码如下:

这样,创世区块已经创建好了,我们还需要一个函数来生成链上更多的区块该函数将链上前一个区块作为参数,为后面的区块生成数据,并返回具有带有数据的新区块当生成的新区块包含了前一个区块的哈希值,区块链的完整性就会随着每个区块的增加而增加这样的操作虽然看起来有点复杂,但如果不这么做,其他人就会很容易篡改链上的数据,甚至把整条链都给换了。

所以,链上区块的哈希值就充当了密码证明,确保区块一旦被添加到区块链上,就不能被替换或者删除下面是这个函数的代码:

到这里,一个简单的区块链就基本完成了!今天的的例子中我们通过Python列表来创建区块链,其中最重要的部分是创世区块(当然,还需要其他区块)因为我们要创建的SmartCoin是一个比较简单的区块链,所以我会通过循环的方式,只添加20个新的后续区块。

具体实现如下:

上面讲到的区块链是非常简洁的,区块的创造也相对简单但是如果要使SmartCoin成为一个真正的加密货币,我们需要控制每次产出的区块数量和币的数量为“瘦小的”区块链“增肥”SmartCoin上的数据从交易中产生,每个区块上的数据均由一系列交易组成。

我们将交易定义为:每笔交易均为一个JSON对象,这个JSON对象包括币的发送者、接受者和交易数量注意:下文我们会谈到为什么交易是以JSON格式保存的。

在了解了什么是交易之后,我们需要一个方法,将交易添加到之前的区块链网络节点中(这些节点由普通的电脑组成),为此,我们将创造一个简单的HTTP服务器,便于交易用户将交易信息上报节点一个节点能够接收一个带有交易信息的POST请求来作为请求主体。

这就是为什么交易是JSON格式的原因我们需要将它们传送到服务器的请求主体中

这样我们就完成了对用户间互相发送SmartCoin信息的保存这就是为什么大家将区块链称为公共账本和分布式账本的原因:所有交易存储在网络内的每个节点之中,重要的是,对所有用户是可见的添加POW共识算法但是,问题来了,我们从哪里获取SmartCoin呢?(目前)哪儿都不行!实际上SmartCoin是不存在的。

我们需要挖掘新的SmartCoin区块把它创造出来,一个新的区块被挖出后,一个SmartCoin就会产生出来,作为奖励给与挖矿者矿工将SmartCoin转给其他人之后,币就开始流通了我们不希望挖出SmartCoin的过程过于简单,因为会产生太多的SmartCoin,而且会变得越来越不值钱。

同时,我们也不希望这个过程特别难,因为这样的话,SmartCoin的数量不足,这会导致币价过高,同时流通缓慢我们通过工作量证明算法控制挖矿的难度工作证明算法本质上是生成一种难以创建但易于验证的算法就像字面意思一样,它就是证明一个节点(计算机)完成了多少工作量。

在SmartCoin中,我们要创建的是一个简单的PoW算法要创建一个新的区块,矿工的电脑需要增加一个数字当该数字可被9(“SmartCoin”中的字母数)和最后一个区块的证明编号整除时,一个新的SmartCoin区块就会被开采出来,矿工也会得到一个SmartCoin作为奖励。

现在,我们可以控制在一个特定时间段内可开采的区块数量,到这里,我们就可以自由掌握一定时间内多少个区块可以被开发出来了但是就像前面所说的,这一切操作只是在一个节点上进行的但区块链应该是去中心的,我们怎么保证这条链在其他节点上也是一样的呢?我们可以让每个节点对外广播自己链的版本,其他节点既可以接收广播,又可以自己对外广播同样的内容。

此后,每个节点需要去对其他节点所发出的信息进行验证,验证通过后,网络上的所有节点则可以达成一致这称为一致性算法在这个例子中,我们所采用的一致性算法相当简单:如果一个节点的链与其他节点的链不同(即有争议时),那么网络上最长的链会保留而较短的链将会被删除,如果所有节点都达成一致,那么则进行下一步:

开采新的区块测试在这一步中,我们会运行完整的SmartCoin服务器代码,到这里我们离大功告成就只差一步了运行完SmartCoin的代码后,在终端里运行以下命令(假设你用的是cURL)创建一个交易

2.开采新的区块

3.查看结果。我们通过客户端窗口看这个

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻21934