零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

栏目: Python · 发布时间: 5年前

内容简介:2018年最火的技术是什么,毫无疑问是区块链,今年年初区块链横空出世,其实对于我们码农来说,除了平时埋头苦干,对新技术需要保持一定敏感性!每一种新的技术的出现都和未来的产业发展非常相关,蕴含着巨大的机会,除了干活还要扩张自己的眼界,对自己大有裨益!那作为当下最火的语言Python,其实可以干很多事情,今天我们用Python来简单的实现一个区块链吧,想想都觉得很酷!

2018年最火的技术是什么,毫无疑问是区块链,今年年初区块链横空出世,其实对于我们 码农 来说,除了平时埋头苦干,对新技术需要保持一定敏感性!每一种新的技术的出现都和未来的产业发展非常相关,蕴含着巨大的机会,除了干活还要扩张自己的眼界,对自己大有裨益!

那作为当下最火的语言Python,其实可以干很多事情,今天我们用 Python 来简单的实现一个区块链吧,想想都觉得很酷!

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

01.

什么是区块

首先区块链就是一种去中心化的分布式账本数据库,简单说就是一组区块组合的链条。那么里面每一个单元就是区块:

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

区块上面有几个重要的属性:一个数据data,一个pre_hash和自身的hash:

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

1.我们用hashlib这个库函数来处理hash计算操作

2.新建一个Block类,来表示区块,里面有两个属性(一个pre_hash,一个data)

3.这个为了简便用了类属性@property装饰器来除了hash的值,即当我用block.hash=xxx的时候,会系统自动调用这个hash函数。

4.这个hash函数很关键,以为你区块链里面的都是用sha256来加密的,也是安全性比较搞的一种加密方式,我们最后会得到一个十六进制数据字符串值。

区块中有一个非常特殊,就是创世区块!它是所有区块里面的头,他是父区块,因此没有pre_hash

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

02.

定义一个区块链

我们上面已经定义了区块,下面来定义一个区块链,把一个一个区块连起来!

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

我们需要再写一个类,用一个列表把一个一个区块存起来,形成一个列表链!

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

1).我们声明一个BlockChain的类,然后里面设置一个blocks列表数据结果,用来存放区块,先把父区块链放进去

2).增加一个add_block函数,用来添加区块:

  •  先生成一个新的区块内存
  •  然后添加data和它的hash值
  •  最后把区块添加到区块链中

03.

实现区块链

我们的区块和区块链都已经准备好了,是不是有点小兴奋,大名鼎鼎的区块链,Python几十行代码就模拟出来了,Python确实快速开发的神奇,我们来看一下效果:

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

>>  
Prev Hash:  
Data:Genesis Block  
Hash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3  
--------------------------------------------------------------------------------  
PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3  
Data:Jack send 1 BTC to Sam  
Hash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524  
--------------------------------------------------------------------------------  
PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524  
Data:Sam send 2 BTC to lili  
Hash:f9ba725838192731e73b8f28b33c88be9798c314ea7a538fc77e80039413b872  
-------------------------------------------------------------------------------- 

看我们一共创建了3个区块:

第一个区块:是父区块,没有pre_hash,只有数据和一串hash码

第二个区块:是 "Jack发送1个比特币给Sam"它的区块的pre_hash指像前面的父区块hash码

第三个区块:是"Sam发送了2个比特币给lili"它的区块的pre_hash指像前面的Jack区块

04.

区块链的不可篡改

看完前面基本是不是对区块链有了一个感性的认识,那么区块链最牛逼的地方就是不可篡改,为啥这么说呢?

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

比如我们修改了中间的一个区块的内容,会到时它的hash改变,那么后面的区块的pre_hash就会和前面的区块的里面hash对应不起来!

我们用代码看一下:

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

我把第二个block里面的数据改一下,随便改一下里面的内容。然后我们看一下这个block里面的hash的变化:

Prev Hash:  
Data:Genesis Block  
Hash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3  
Valid Block  
--------------------------------------------------------------------------------  
PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3  
Data:Jack send 1.3 BTC to Alice  
Hash:ec7b877b3a47a74ababf298e047352e8805fed3fa99ad15ab788ec47a70776d0  
Valid Block  
--------------------------------------------------------------------------------  
PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524  
Data:Sam send 2 BTC to lili  
Hash:f9ba725838192731e73b8f28b33c88be9798c314ea7a538fc77e80039413b872  
Invalid Block  
-------------------------------------------------------------------------------- 

因为修改了第二个区块的内容,里面hash值也随着改变,这样的后面的区块就无法和前面的区块的hash对应起来,这就是区块链的不可篡改性!因为是用sha256加密的方法,那怕改动一点点都不行!

好了,上面就是用Python简单入门区块链,还没有加入挖矿(工作量证明)的环节,这次通过Python语言本身来理解区块链,不知道大家感觉如何,欢迎留言讨论!

文末知识点摘要:99% 会陷入的编程误区

前天一位读者在微信上问了我这样一个问题。

零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单

这样的问题可以衍生出,在学习编程的过程中,那些难以理解的编程概念,我们需要怎么样去学习。

每个编程语言都会有它自己的特性,比如 C++ 有指针操作,Java 有类的概念,Python 有字典数据结构。这些语言独有的特性,也正是它们魅力所在。在学习一门编程语言,起初大家都是从最基础的语法学起。比如 Python,很多教程在简单介绍了下 Python 的一些语言特点,就会开始固有的章节「编写你的第一个 XXX 代码」,即写个输出「hello world」。

随着进一步的学习,你会遇到更高级的语法。比如 Python 的多线程、正则表达式、匿名函数、装饰器等等。掌握这些高级语法,能让你的代码更加优雅。但对应的也就更加难以理解。大部分人在学习高级语法的时候,都是一头雾水。看了很多资料,始终还是无法掌握。

概念学习

这时候你已经陷入「概念学习」的误区。觉得我一定要先把概念学好,学懂,我才能使用的好。以至于到了最后,就像最开始的读者一样,越学越抽象,越学越不知所措。

编程原本就是注重实战的科目,用所学的知识,来解决实际项目。在项目中,磨练已学到的知识。但大部分人却本末倒置,心想我一定要把编程语法全学好,一个都不能落下。然而这样的学习效率是非常低下,并且只会越学越迷茫,越学越失去对编程的兴趣,最终放弃编程。

项目驱动学习

不要一味的陷入编程语法,要懂的项目驱动学习。你只要稍微把编程基础知识学习下,然后尽可能多的做项目。在做项目的过程中,肯定会遇到很多困难,也会遇到很多自己不懂的语法。但在项目中遇到的语法,会让你清楚知道这语法可以做什么。这就好比,你在打游戏的时候,买了一件装备,知道这件装备很厉害。这时候你在回去看下装备的介绍,就会明白装备为什么那么厉害。

在项目中学习也是如此,遇到难以理解的地方,这时候在回头查找相关资料,学习的效率会大幅度的提升。那些晦涩难懂的概念,也就很容易理解。

【责任编辑:庞桂玉 TEL:(010)68476606】


以上所述就是小编给大家介绍的《零基础如何实现Python来实现一个区块链?我来告诉你就是这么简单》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具