火星链 火星链
Ctrl+D收藏火星链

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

作者:

时间:1900/1/1 0:00:00

作者|arjunaskykok

整理|Aholiab

出品|区块链大本营

根据IEEE此前的一项调查,Python已成为最受开发者欢迎的语言之一。由于其对于技术小白天然友好的特性,以及不断更新的新功能。Python越来越受到国内外开发者的喜爱。越来越多被用于独立、大型项目的开发开始使用Python。

20世纪90年代初荷兰人GuidovanRossum为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。

之所以选中Python作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》。

SWIFT探索如何支持代币化资产市场发展中的互操作性:金色财经报道,银行合作机构SWIFT将与 Clearstream、Northern Trust、SETL 和其他市场参与者合作,探索如何支持代币化资产市场发展中的互操作性。相对于加密货币和稳定币,目前代币化资产的市值很小,但预计到 2027 年,交易量可能会达到约 24 万亿美元。银行和证券公司正竞相通过开发数字资产服务能力来进入这个新兴市场,例如私钥保管和对数字证券全生命周期的支持。Swift 正在探索如何在代币化资产的交易生命周期中提高参与者和系统之间的互操作性。

Swift 首席创新官 Thomas Zschach 表示,这些实验将使用既定的支付形式和中央银行数字货币 (CBDC)。“作为一个中立的合作机构,覆盖 200 多个国家/地区的 11,000 家机构,并受到全球中央银行的监督,Swift 处于独特的位置,可以密切参与证券的未来”。(finextra)[2021/12/23 7:59:31]

对于区块链开发者来说,Python也是十分实用的语言之一。今天,我们就Python开发一个简单的区块链数据结构。

张春泉:区块链等如何与行业深度融合将是工业互联网发展关键要素:曙光云计算集团副总裁、中国科学院智慧城市产业联盟副秘书长张春泉表示,目前工业互联网发展呈现出新特征,一是在云计算技术架构支撑下,企业之间正从技术、产品和供应链的竞争逐步演进成为平台化的生态体系竞争。二是以工业互联网为支撑,助力企业迈向网络化、智能化的新阶段,构建数字化的工业生态和数字化的商业服务生态。三是新一轮的IT技术加速行业的深度融合,比如说标识解析、区块链等技术如何与行业深度融合,将是这一时期工业互联网发展的关键要素。(经济参考报)[2020/4/30]

在这篇文章中,一方面我们会对区块链数据结构的基本概念进行讲解,例如哈希的工作原理,另一方面,也会以实际代码来构建一个区块链基本的数据结构,让你对区块链和Python的基础有个基本的理解。

说不多说,下面就进入正题!

从哈希函数说起

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

分析 | 2018年美国用户搜索“如何购买Ripple”的次数高于“如何购买比特币”:据bitcoinexchangeguide消息,去年收集的一项数据显示,美国用户对于“如何购买Ripple”这一短语的搜索次数高于“如何购买比特币”。不过全球范围内,“比特币”词语本身仍然比“ XRP ”或“ Ripple ” 的搜索次数更多。但XRP社区粉丝依旧认为XRP距离成为领先的数字资产并不太远。[2019/4/3]

但在讲数字结构之前,我们还是先从哈希讲起,以比特币的SHA-256哈希函数为例,讲讲如何利用Python去实现哈希的运算。

哈希函数,又称散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。

对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。

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

欧链老狼:全球出块节点大致分为三个组,每个组都在预演如何启动EOS网络:EOS超级节点竞选团队欧链的老狼在《欧链·宁话区块链》第二季的节目中称 “全球出块节点大致分为三个组,每个组都在预演如何从无到有启动EOS网络。具体什么时候主网上线,需要大家一起协同来做。或许在某一个预定的时间点,大家觉得有些准备工作没有做好,希望把这个时间点再往后延一点,这种情况是有可能发生的。”[2018/6/2]

来看一个例子:

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

说回SHA-256,说白了,它就是一个哈希函数。那么我们如何用Python来实现呢?下面代码展示了用Python实现「helloworld」的过程:

看到这里你可能会问,SHA-256中的「256」究竟是什么意思?哈希算法是一个将任意文本转换为一个256位随机二进制字符串的过程。在上面的例子中,「helloworld」是一个11位的字符,经过哈希运算以后,变成了这样的一串字符:

b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

美国银行分析师解释比特币如何像常规货币:据CCN报道,美国圣路易斯联邦储备银行内容策略师Christine Smith认为,比特币不像人们想象的那样异乎寻常,比特币的两个用例是作为价值和货币存储的,史密斯论证比特币与普通货币没有区别的三大理由:

1.比特币和美元都没有实物资产支持;

2.“稀缺”是美联储货币体系稳定战略的核心,因为“为了保持其价值,货币必须供应有限”,而比特币的数量也是有限的。

3.比特币“纯粹的电子现金对等版本可以让在线支付从一方直接发送到另一方,而无需通过金融机构”,这与现金花费方式有相似性,即“不需要中间人处理交易”。[2018/5/1]

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

在上面例子中,「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是一门强大的语言,区块链是一个强大的信用工具,这两者结合,势必能创造出新的可能性。

标签:区块链SHA比特币区块链工程专业学什么区块链存证怎么弄区块链技术发展现状和趋势SHA价格SHA币比特币中国官网联系方式40亿比特币能提现吗比特币最新价格行情走势

以太坊价格今日行情热门资讯
区块链:比特币的创建者:谁是中本聪?

区块链101是一份重新系统性正确认识区块链技术的入门指引 比特币的创建者 谁是中本聪? 虽然我们不知道他是谁,但我们知道他做了什么.

1900/1/1 0:00:00
区块链:一个午宴而已 却搞得高潮迭起

6月4日,孙宇晨发微博称拍下巴菲特午宴,点燃了大众看热闹的热情。一个是币圈炒作高手,一个是价值投资的旗帜,越是不搭,越有看头.

1900/1/1 0:00:00
SDT:USDT在EOS主网增发500万枚 稳定币零手续费即将来临

近日关注到EOS主网上发行了500万枚USDT,这是不是暗示稳定币零手续费的时代即将来临,妈妈在也不用担心我转账途中大盘的震荡了,大家都知道大盘就像个不稳定的炸药包,不知道啥时候就会给你来一下.

1900/1/1 0:00:00
以太坊:丰田、特斯拉“专利开放”,能否促进氢能源汽车产业快速发展?

导读: 未来封闭的汽车行业将按照“专利开放——平台开放——技术开放“路径,逐步开始技术开放和数字化进程。全球汽车产业数字化是技术开放的前提.

1900/1/1 0:00:00
GUUT:《一千零一币》高举游戏链改的GUUT如何打破传统游戏的垄断?

区块链游戏链改,首先要解决几个问题。第一怎么给游戏带来价值。第二,游戏玩家能否共享生态收益。 欢迎大家来到米林财经《一千零一币》,今天除了邀请到我们专注游戏的项目方,还邀请了我们的专家组成员菜头.

1900/1/1 0:00:00
加密货币:惊天数字货币被盗案再现!比特币有史以来最大的牛市信号能否抵御黑天鹅?

数据来源:CoinMarketCap比特币重拾涨势,再现赚钱效应,也催生了交易所被盗事件的频发.

1900/1/1 0:00:00