区块链五层架构python_5分钟用Python打造区块链

大家好 我是西拉杰

今天我们要在五分钟里用Python打造一个区块链

准备好了吗 让我们开始吧

区块是一种包含数据和其他属性的数据结构

区块可以串联起来形成一个区块链条

所以被称为区块链

比特币协议用区块链数据结构存储交易数据

但我们可以在区块链中存储任意数据

为了了解它如何工作

让我们一起用谷歌的Code Labs环境

在浏览器中编写我们自己的区块链吧

我们将边写代码边在浏览器中看效果

以便更好地理解区块链

打造区块链需四步

导入依赖

创建一个区块

创建一个区块链

以及输出区块链的内容

首先导入datetime库

这样我们可以给每个区块生成时间戳

我们还需导入hashlib库

它包含一个定义区块时用到的重要算法

我们把区块定义为一个Python类

然后定义它的属性

每个区块都有七个属性

我们可以把它们分别列为不同的变量

首先 区块编号

用来对每个区块进行索引

接下来 存储在这个区块中的数据

比特币区块链在这里存储交易数据

为了简单起见 我们将只存储一个字符串

再定义一个指向下个区块的指针

还有当前这个区块的哈希值

Hash是一个把数据转换为固定长度数字的函数

哈希值被用来作为区块的唯一性标识

也用来验证这个区块的真实性

除此之外

定义一个只使用一次的nonce变量

后面我们会用它计算区块的唯一哈希值

接下来我们定义previous_hash变量

当我们建立区块链时

它将储存前一个区块的哈希值

最后 我们用datetime库生成这个区块的时间戳

定义好了这些属性以后

我们来实现这个类的初始函数

它定义了我们如何来初始化一个区块

唯一的参数是用户提供的数据

我们还需要为区块定义一个哈希函数

hashlib库包含了流行的sha256算法

用来生成代表一段文本的256位签名

把区块的五个属性串接起来 作为函数的输入

看到是如何用区块的独特属性创建哈西值的了吗?

一旦有人更改了区块链中某区块的哈希值

该区块后的每个区块都会改变

因为每一个区块的哈希值在生成时

都使用了前一个区块的哈希值

在完成Block类之前

让我们来写一个可以打印出区块的值的函数

定义好Block类以后

就可以开始定义Blockchain类了

我们先来定义Blockchain类的两个关键属性

创世区块和头指针

创世区块 也就是区块链的第一个区块

我们会在里面存储字符串”Genesis”

头指针则指示区块链最新加的区块

随着我们不断新加区块到区块链中

头指针会不断更新

说到添加区块 我们来写一个add函数

这个函数会添加一个区块到区块链中

被添加的区块是需要的唯一参数

区块链只是被美化了的链表

把新区块的previous_hash设为当前区块的哈希值

再把新区块的编号设为当前区块的编号+1

因为它是下一个区块

然后将当前区块的next指向新区块

区块链的头指针将指向新区块

现在我们还需要写一个mine函数

通过它可以让网络中彼此并不了解的节点

对唯一的区块链达成共识

构建一条不可更改的链

挖掘区块需要计算能力

这是一种防御性机制

在比特币区块链中

攻击者需要控制网络中的大部分计算能力

才能修改一个区块

以此来获得本不属于他们的钱

在比特币网络中

51%的计算能力

比世界上最快的500台超级计算机的算力之和还大

因为没有人可以控制那么大的算力

比特币网络已经平稳运行快十年了

我们还需要在Blockchain类里再定义三个属性

maxNonce 值为2的32次方

这是最大的32位数字

然后 挖掘难度系数 diff

我们使用挖掘难度系数来计算目标哈希

这会是2的256减去挖掘难度系数次方

在挖掘(mine)函数中

判断是否可以将某区块添加到区块链中

从0到2的32次方

也就是maxNonce的值

检查给定区块的哈希是否小于目标值

这跟比特币的挖矿函数完全一样

如果哈希值比目标值小

就把这个区块加入到区块链并退出循环

否则就递增nonce变量

重复刚才的过程一直到退出循环

挖掘难度决定了挖出一个区块需要多大的算力

难度越大 需要的挖掘时间就越长

从挖掘成功后nonce的值也能体现出来

定义好了两个类

就可以初始化一个区块链了

然后我们写一个循环来挖10个区块

用唯一的字符串来初始化每个区块

最后我们打印出区块链中的每一个区块

编译这段代码

我们可以看到区块链中每个区块

以及他们的关联属性

包括唯一哈希 数据 以及时间戳

希望这段教程对你有帮助

欢迎订阅 观看更多的编程视频

现在 我要去破解网络防火墙了

多谢观看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值