如何用Python快速开发区块链数据结构?

如何用Python快速开发区块链数据结构?

作者|阿尔诸那天空角

整理| Aholiab

出品|区块链大本营(区块链_营地)

根据IEEE之前的调查,Python已经成为最受开发者欢迎的语言之一。因为它对技术自然友好的特性,以及它不断更新的新功能。Python越来越受到国内外开发者的青睐。越来越多的独立、大型项目开始使用Python。

20世纪90年代初,荷兰人吉多范罗苏姆决定开发一种新的脚本解释器,作为对ABC语言的继承,以消磨圣诞节的无聊时光。

Python(意为大蟒蛇)被选为编程语言的名称,取自20世纪70年代在英国首映的电视喜剧《蒙提.派森的飞行马戏团》(蒙蒂Python的飞行马戏团)。

Python也是区块链开发者最实用的语言之一。今天,我们为Python开发了一个简单的区块链数据结构

在本文中,我们一方面会讲解区块链数据结构的基本概念,比如hash的工作原理;另一方面,我们会用实际代码搭建一个区块链的基本数据结构,让你对区块链和Python的基础有一个基本的了解。

话不多说,言归正传!

从哈希函数开始。

在区块链,数据结构是非常重要的基础组成部分,尤其是比特币。虽然单一的数据结构不能被构建成加密的数字货币,但是理解数据结构对于理解区块链的基本原理是非常有益的。

是在讨论数字结构之前,我们先从哈希开始。以比特币的SHA-256哈希函数为例,来说说如何用Python实现哈希。

哈希函数,也称为哈希算法是一种从任何类型的数据创建小数字“指纹”的方法。哈希函数将一条消息或数据压缩成摘要,使得数据量变小,数据格式固定。这个函数混淆了数据,重新创建了一个指纹,称为哈希值(或哈希值)。哈希值通常由一串短的随机字母和数字表示。

对于任何长度的任何消息,SHA256将生成一个256位的哈希值,称为消息摘要。

这个抽象相当于一个长度为32字节数组,通常用长度为64的十六进制字符串表示。

看一个例子:

这句话中,哈希函数SHA256后得到的哈希值为:

回到SHA-256,说白了,就是一个哈希函数。那么我们如何用Python实现呢?下面的代码展示了用Python实现“hello world”的过程:

看到这里,你可能会问,“256”在SHA-256到底是什么意思?哈希算法是将任意文本转换为256位随机二进制字符串的过程。在上面的例子中,“hello world”是一个11位字符(只计算字母)。散列后,它变成如下字符串:

b 94d 27 b 9934d 3 e 08 a 52 e 52d 7 da 7 dab fac 484 EFE 37 a 5380 ee 9088 f 7 ace 2 EFC de 9

同样,即使我的文本不是11位长,生成的字符数也是一样的。例如:

在上面的例子中,“我是最好的总统。永远不会。”(意思:我是史上最好的总裁),哈希运算后的字符串是64位。即使输入文本是100位,哈希运算后的字符数也是64位。

这是因为字符是十六进制的。如果我们将这样的字符串转换成二进制,我们将得到一个256位的二进制字符串。如下图所示:

这就是SHA-256数字256的由来

接下来,我们来看看哈希算法的特点。哈希的特点之一是“无冲突原则”。这个原理意味着,要得到一个256位的二进制字符串,显然不止一个输入可以做到。

因为256位的输出长度是固定的,但输入长度不受限制,所以输入范围远大于输出。只要输入可以穷尽,就有可能得到两个相同的256位输出。

说到这里,要找到这样的两个输入是非常困难的。即使输入稍有改变,输出结果也会完全不同。如下图所示:

因此,在2中找到相同输出的唯一方法是穷尽所有字幕和数字组合,这几乎是不可能的。概率是2的256次方。

个数有多大?展开是酱婶儿:

115792089237316195423570985008687907853269984665640564039457584007913129639936

几乎等于10的77次方。这是什么概念?在460亿光年的宇宙中,可见原子的数量只有10的78次方。这个数字几乎等于宇宙中的原子数量!

计算这个数字需要多长时间?搭配NVIDIA Geforce 1080 Ti显卡,浮点运算的计算能力11.3。每个哈希需要计算3000次,需要以每秒376666666个哈希的速度计算。如果找到两个相同的哈希结果,就需要计算2的128次方。地球所有人一起算,需要的时间如下:

这比地球的真实时间还要长。

用Python创建第一个

知道了hash是什么,我们来说说block是什么。事实上,区块链是一个相互关联的序列。接下来,我们创建第一个块,也称为“创建块”。代码如下:

交易将包含在区块链中。交易很好理解,就是谁把多少钱转给了谁。我们对数据块进行排序,以便对其进行哈希处理:

这样,我们得到另一个块,姑且称之为“块2”:

散列块2:

得到了“第三块”。

然后散列块3得到“块4”。

这样,为了确保块上的数据没有被篡改,我只需要检查最后一个块的hash。而不是从创建块开始。该原则还消除了保存区块链上的数据的可能性。

通过上面的代码,可以得到以下结果:

这样,用Python进行简单区块链开发的演示就结束了。Python是一种强大的语言,区块链是一种强大的信用工具。两者结合必然会创造出新的可能性。

【结束】

版权声明:区块链骗局 发表于 2022-04-29 21:04:10。
转载请注明:如何用Python快速开发区块链数据结构? | 零零洞洞

暂无评论

暂无评论...