作者|arjunaskykok
整理|Aholiab
出品|区块链大本营
根据IEEE此前的一项调查,Python已成为最受开发者欢迎的语言之一。由于其对于技术小白天然友好的特性,以及不断更新的新功能。Python越来越受到国内外开发者的喜爱。越来越多被用于独立、大型项目的开发开始使用Python。
20世纪90年代初荷兰人GuidovanRossum为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
之所以选中Python作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》。
美联储威廉姆斯:加息的时机和速度将取决于通货膨胀和经济如何发展:美联储威廉姆斯:加息的时机和速度将取决于通货膨胀和经济如何发展。美联储在看到劳动力市场大幅改善和高通胀后,采取加息和取消宽松政策是有道理的。 (金十)[2022/1/15 8:50:19]
对于区块链开发者来说,Python也是十分实用的语言之一。今天,我们就Python开发一个简单的区块链数据结构。
在这篇文章中,一方面我们会对区块链数据结构的基本概念进行讲解,例如哈希的工作原理,另一方面,也会以实际代码来构建一个区块链基本的数据结构,让你对区块链和Python的基础有个基本的理解。
说不多说,下面就进入正题!
从哈希函数说起
在区块链中,数据结构是十分重要的基本组成部分,尤其是比特币。虽然单一的数据结构无法构建成加密数字货币,但理解数据结构对于理解区块链的基本原理是非常有益处的。
但在讲数字结构之前,我们还是先从哈希讲起,以比特币的SHA-256哈希函数为例,讲讲如何利用Python去实现哈希的运算。
经济日报:区块链的价值和前途取决于如何运用:4月20日,经济日报刊文“加密资产走热带来什么价值”。文章表示,加密资产市场正在见证投机与人性的疯狂。从技术进步的维度看,部分加密资产由于运用了区块链技术,的确为创作者乃至知识产权保护带来益处。事实上,无论如何炒作,区块链作为技术本身是中立的,其价值和前途取决于如何运用。目前,区块链技术还存在性能不足、普及尚浅、未获权威认可等问题。如果抛开加密资产市场的噱头与炒作,更多看到以NFT等为代表的确权体系对知识产权保护、重塑数字娱乐等产业的作用,进一步完善区块链建设,发挥出其更大的潜力,造福于人,可能会给这一轮热情烙印上更深远的意义。[2021/4/20 20:38:16]
哈希函数,又称散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。
对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。
声音 | 段新星:看到有价值的场景时思考如何用区块链去更好地打造才是正确的:Bytom创始人段新星在“区块链平昌论坛2019(Blockchain Pyeongchang Forum, BPF2019)”的圆桌论坛上表示,在投机和炒作层面区块链处于熊市,但是在区块链应用层面仍然在向前发展。同时,他指出,不能像拿着锤子砸钉子一样,把区块链强加于所有项目,而应该在看到有价值、有意义的场景时,思考如何用区块链去更好地打造才是正确的。只有做到这点,离区块链下一次爆发也就不远了。[2019/1/28]
这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。
来看一个例子:
这句话,经过哈希函数SHA256后得到的哈希值为:
说回SHA-256,说白了,它就是一个哈希函数。那么我们如何用Python来实现呢?下面代码展示了用Python实现「helloworld」的过程:
看到这里你可能会问,SHA-256中的「256」究竟是什么意思?哈希算法是一个将任意文本转换为一个256位随机二进制字符串的过程。在上面的例子中,「helloworld」是一个11位的字符,经过哈希运算以后,变成了这样的一串字符:
国际货币基金组织主席:最终幸存下来的加密资产可能会对人们如何储蓄产生重大影响:据bitcoinist消息,国际货币基金组织(IMF)主席拉加德(Christine Lagarde)在其新的博客文章中表示,最终幸存下来的加密资产可能会对我们如何储蓄,投资和支付账单产生重大影响。拉加德指出了加密货币能够进行快速和廉价的跨境金融交易的好处,并称比特币的基础技术——分布式账本技术可能会改变金融市场的运作方式。此外,拉加德指出,智能合约的革命性,可以移除中间商,而区块链技术能够安全地存储重要文件。最后,拉加德指出,在发展中的经济体,这种进步可以帮助确保产权,增加市场信心并促进投资。[2018/4/18]
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
同样,即使我的文本长度不是11位,生成的字符数也是一样的。例如:
阿拉斯加女学生如何依靠2014年的比特币课题支付大学学费:2014年,阿拉斯加的一位女学生以比特币作为竞赛项目课题,而在当时这一课题毫无疑问获得了评委的青睐。到现在,这一课题不仅为她带来了荣誉,还给她积累了一定的财富。而当时因为这一课题而了解到比特币的孩子们大多数仍旧保留着这些比特币,同时还保持着对加密货币的兴趣。正如这故事所表明的,向孩子传授有关金钱的知识并赋予他们一定的财务自由越早越好。[2017/12/29]
在上面例子中,「Iamthebestpresident.Ever.」,哈希运算之后的字符串一样为64位。就算输入的文本是100位,哈希运算后的字符位数也是64位。
之所以这样,是因为字符是16进制的,如果我们把这样的字符串转换为2进制,那么就会得到一个256位的2进制字符串。如下图所示:
这就是SHA-256中,256这个数字的由来。
接下来我们就来看看哈希算法有哪些特征。哈希的特征之一就是「无冲突原则」。这个原则是指要得到一个256位的2进制字符串,显然有不止一个输入可以做到。
因为256位的输出长度是固定的,但输入的长度却没有限制,所以输入的范围要远大于输出,只要能够穷尽输入,就有可能得到2个一样的256位的输出。
话虽如此,不过要找到这样两个输入的难度却很大。即使是输入上改动了一点,输出的结果都会完全不同。如下图所示:
所以,想要找到2中一样的输出的唯一方法,是穷尽所有的字幕、数字组合,这几乎无法做到。几率为2的256次方。
这是个多大的数字?展开来就是酱婶儿的:
115792089237316195423570985008687907853269984665640564039457584007913129639936
几乎相当于10的77次方。这是个什么概念?在460亿光年的宇宙内,可见的原子数量也只有10的78次方。这个数字几乎相当于宇宙内的原子数量!
要运算这个数字需要多长时间?以英伟达Geforce1080Ti显卡,浮点运算11.3的算力来运算,每个哈希需要运算3000次,以每秒钟3766666666个哈希的速度来运算,找到两个相同的哈希运算结果,需要计算2的128次方个哈希。地球上所有的人一起计算,需要的时间如下:
这比地球存在的实时间都要长。
用Python创建第一个区块
了解了什么是哈希,我们接着就来说说什么是区块。实际上,区块链就是一个互相连接的序列。我们接下来创建第一个区块,也称为「创世区块」。代码如下所示:
区块链中会包含交易,交易很好理解,就是谁转了多少钱给谁。我们把区块进行序列,这样它就可以进行哈希运算:
这样,我们就得到了另一个区块,我们姑且称它为「区块2」:
再对区块2进行哈希运算:
得到了「区块3」。
再对区块3进行哈希运算,得到了「区块4」。
这样一来,想要确定区块上的数据没有被篡改,我只需要检查最后一个区块的哈希就行了。而不是从创世区块开始检查。这一原理也杜绝了区块链上数据被攒该的可能。
通过以上代码,可以得到下面结果:
这样,用Python实现简单的区块链开发的演示就结束了。Python是一门强大的语言,区块链是一个强大的信用工具,这两者结合,势必能创造出新的可能性。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。