读完这篇文章 如果我不了解区块链 我会失去 用Python从头开始创建区块链

读完这篇文章 如果我不了解区块链 我会失去 用Python从头开始创建区块链

如果你没听说过3点区块链集团,说明你还不是连锁人;如果你还没有加入3点区块链集团,说明你不是连锁的大老板;如果你还没有被区块链集团三点刷屏,说明你还不知道什么是“币圈一日,天下一年”。

“三点区块链”无疑成为春节期间大家焦虑的根源,“区块链”注定是2018年持续被讨论和关注的行业热点话题

3月1日,朱啸虎再次向繁荣的区块链开火。在一张满是区块链应用朋友图片中,朱啸虎质疑:这些应用全部加在一起有多少日活用户?“2000年互联网泡沫的时候至少有眼球。今天的区块链除了炒币有什么

在此之前,朱啸虎在朋友圈转发了《来,喝了这碗区块链的毒鸡汤!》讽刺区块链投资热的文章,并声明:“不要把我拖进任何一个3点团,有些网点宁愿错过,有些钱宁愿不赚。晚上照顾好自己。”朱啸虎还表示,称ICO为庞氏骗局是对庞氏骗局的侮辱。

作为一个程序员,如果再不了解这个技术,2018可能就要被淘汰了!下面就让我们和边肖一起从十个幽默段子开始区块链吧!

笑喷!区块链十大细分市场亮点

1.如果你是女的,每次你男朋友跟你说了一句恶心的话,或者答应给你买东西,你都马上录下来,发给你和他所有的女朋友,同学,同事,还有各种群,朋友,让他再也无法否认。这叫做区块链。

2.麻将中国传统区块链项目:四名矿工为一组,最先撞对13个数字哈希值的矿工可以正确记账并获得奖励。它不能被篡改。因为说服另外三个人需要太多的计算和体力

3.玩夜店的小姐姐和玩虚拟币小哥哥有几个相似之处:

都是自以为聪明的优秀群体

不为自己赚钱的都是愚蠢的失败者。

我认识很多老板。

明白了很多道理。

都在等着自己涨价或者自己的虚拟货币涨价被别人接手。

4.区块链是个严肃的技术,你不知道各种币是不是严肃。

5.吴三桂怒攻山海关,本质上是为了权力睡在陈圆圆身上;区块链大佬们相互合作的实质是争夺割韭菜的权力。

6.新学期开始,儿子父亲,“父亲工作这一栏怎么填?它是一个硬币作家吗?”爸爸犹豫了一下,说:“就写多家上市公司股东吧。」

7.最近数字货币很火,很多假币都涨了几倍或者几十倍。很多金钱投机开始得意忘形,叫嚣着“一币一嫩模式”。一个朋友问我要不要跟着他。我的观点很简单:淘金热是有风险的。所以,就让他们称之为“一币一嫩模式”吧。不要跟风盲目炒币。我们应该赚他们——的钱去做嫩模!做一个温柔的模特!嫩模!

8.昨天遇到一个币友,问他:“最近币市暴跌。睡眠质量怎么样?」

他说:“还不错。像婴儿一样睡觉!」

我说:“我好羡慕。」

他说:“就是睡一个小时,醒了再哭一个小时,再睡一个小时,醒了再哭一个小时。」

9.老同志语重心长地对80后、90后说:“不要玩那些比特币,那些虚拟的东西,做点实事,在北京买房娶媳妇。多好啊!”90后回答“你们都做了一套几千块钱到101000平米的房子。如果不另谋出路,我们就卖给你一串数字,每串10万。我们怎样才能买得起房子?」

10.首先感谢公司员工发了价值100万的比特币。其次,能拿到95万的奖励,我觉得自己很幸运。然后我觉得应该规划一下86万的使用。毕竟70万不是小数目。打算给父母20万,剩下的36万还没想好怎么用。简而言之,我要感谢公司

说明:你知道区块链在白话里是什么吗?

什么是区块链

“区块链只是一种技术”,“比特币”只是区块链技术的一种应用。举个例子,一个人会做饭,但是运用他的厨艺,可以做出“宫保鸡丁”、“鱼香肉丝”等各种菜肴。

那么,什么是“区块链”?在这里,我们借助一个流行的网络段子,用图形形式展示给大家。

我们可以把“比特币”抽象为“某荣誉的照片”,如上图所示。如果很多网络用户想获得某个荣誉的照片,需要在固定的网站上搜索。

当然,你没有别的地方可去。嗯,这个榴莲网站每天都会给你弹出广告和小窗口。你必须忍受,因为这是你唯一能得到它的地方。

再者,这个网站突然被警察叔叔封了怎么办?还是停电了?断网?管他呢,反正服务器崩溃了,那么悲剧《某荣》粉丝心爱的2100张照片就都失去提供资源的地方了。

这就是网络上流传的新词中心化”。其缺点是资源集中在一起,抗风险和容错能力弱。资源很容易流失。

那么,如何解决这个问题呢?大家想象一下,是不是每个《某荣》的粉丝都能拥有这2100张照片?比如下面这张图:

在这种情况下,似乎就不用依赖那个“一个石榴”网站了。就算一个粉丝的电脑突然死机,他也可以随便找另一个粉丝来拿这2100张照片,不用担心。

后来一个叫“某本聪”的虚拟人物提供了某荣照片分享文件夹,并附有协议。用户可以从中获取照片,但必须遵守协议。

这样每个粉丝都可以从这个文件夹里拿到张蓉的2100张照片,但是所有拿到的粉丝都要遵循一个协议,这个协议当然是由某个本聪定义的。

“不允许您复制、修改或共享文件中的任何照片。粉丝在共享文件夹的任何行为都会被记录,而且是按照时间来记录的!”

粉丝那么爱某个荣誉,又不需要去某个石榴那里拿,当然也热情地加入了~

突然有一天,调皮的小家伙想打破常规,在2018年1月15日中午12点删除了某张编号为1-100的荣耀照片。

根据协议,这一行为将被记录下来,并向其他粉丝播放。

照片被删了吗?当然没有,因为卢晓手里也有照片。收到广播后,她可以立即恢复共享文件夹中已删除的照片。小不点永远不会试图修改或破坏“共享文件夹”,所有的动作都会被同步记录在其他用户的电脑里。

这就是区块链,分散的数据存储和分散化。所有的动作都被时间戳广播记录下来,不能被修改、破坏或篡改。

除非一百万用户的电脑同时被炸,或者互联网消失,或者世界毁灭.数据会一直存在~ ~

如何增加区块链的保护资源?《某本聪》又来了。他说你可以在文件上加一些光彩照人的照片,但一定要达成某种“共识”吗?什么是“共识”是我们都承认的规则。

这是什么样的共识?啊,小一和马上就明白了某本聪的意思,每年在规定时间内尽快拍下100张张荣的照片,这样就可以添加到“某荣的共享文件夹”里,我们的资源就扩大了。

然而好景不长。本聪找了一大堆照片,打到前100,马上就要达到了,所以拍照没有难度

而且照片质量还很差,好像谁都可以轻易添加照片资源,以至于某个荣誉的照片质量都无法保证。结果又来了某本聪,增加了拍照共识的难度。

作为忠实粉丝,小一和怎么能放弃呢?他们买了高端相机,做了各种姿势的某荣,花了大量的时间和汗水,完成了高质量的照片。当然,他们工作非常努力

这样就可以把高质量的照片添加到“阿荣的文件夹”里。

ICO是什么?

肖翔:每一张照片都是无法伪造销毁的,所以是唯一的,有单独的编号。如果每张照片都有价值,难道不是有价值吗?就像现实世界中一幅无法复制的名画!

一个从之前的荣誉照构造了对应的“某个荣誉币”。当然,这种行为类似于通过国库的黄金额度向我国政府发行等值人民币

估值当然是肖一个人说了算。人是照片的主人。

为了证明某荣币每枚5W,小不点先从2100枚中买了1100枚,剩下的分给吃瓜群众。我们已经买了一个5W的,说明他已经值这个价了。剩下的1000块一起买吧。

这样的话,2100枚全部认购的话,2100枚某荣币可以估值1.05亿元。这个通过发行数字货币来融资的过程就是ICO。

按照这张图的意思,如果小一和是值得信任的机构或者公众人物,还是可以信任的。当然,很多不法分子恶意发钱套现。

这也是我们国家禁止ICO发行的原因,因为目前还没有一部完善的ICO法规能够保证发行货币的机构的公信力和任性,并对其进行法律监管。所以吃瓜的人要冒险找一个可信的机构。

就这样,2100枚一定荣币全部认购成功,基金成立。这是ICO。当然,吃瓜的人可以继续拍照制造一定的荣誉币,只是有点难度。

现在你知道区块链和ICO是什么了吧~下面教你如何用Python创建区块链。

在Python中从0创建区块链

我们是数字货币兴起的新手,想知道它背后的技术——区块链是如何实现的。本文通过Python构建区块链,可以加深对区块链的理解。

准备工作/即将开始工作

本文要求读者对Python有基本的了解,能够读写基本的Python,对HTTP请求有基本的了解。

我们知道,区块链是由块记录组成的不可变的有序链结构。记录可以是交易、文件或任何你想要的数据。重要的是,它们是通过哈希链接在一起的。

如果你还不太了解哈希,可以查看这篇文章https://learning cryptography.com/hash-functions/what-are-hash-functions。

环境:

环境,并确保已经安装了Python3.6、pip、Flask、requests。

安装方法

pip Flask==0 . 12 . 2 Requests==2 . 18 . 4同时需要一个HTTP客户端,比如Postman、cURL或者其他客户端。

参考源码(我翻译原码的时候,不能运行。我复印了一份,修改了其中的错误,并添加了翻译。感谢明星)。

开始创建区块链

新建一个文件blockchain.py本文所有代码都写在这个文件里,可以随时参考源代码。

区块链类

首先,创建一个区块链类,在构造函数中创建两个列表,一个用于存储区块链,另一个用于存储交易。

以下是区块链类的框架

Blockchain类用于管理链。它可以存储事务、添加新块等。让我们进一步改进这些方法。

方块

每个块包含属性索引、Unix时间戳、事务列表、工作负载证书(稍后解释)和前一个块的哈希值。

以下是块的结构:

在这里,区块链的概念是清楚的。每个新块都包含前一个块的哈希,这是关键点。它保证了区块链的不变性。

如果攻击者破坏了前面的一个块,所有后续块的散列将变得不正确。不懂就慢慢消化。请参考{ % post _ link whatbc区块链技术原理%}。

加入交易

接下来,我们需要添加一个事务来改进new_transaction方法:

11

将事务记录添加到方法列表中,并返回它将被添加到的块(下一个要挖掘的块)的索引,这在用户提交事务时会很有用。

创建新块

当区块链被实例化时,我们需要构造一个创建块(没有前一个块的第一个块)并给它添加一个工作量证明。每个区块都需要用工作量来证明,俗称挖矿,后面会解释。

为了构造创建块,我们还需要改进new_block()、new_transaction()和hash()方法:

通过上面的代码和注释,我们可以对区块链有一个直观的了解。接下来,我们来看看积木是怎么挖出来的。

了解工作负载证明

新块由工作负载证明算法(PoW)构建。PoW的目标是找到满足特定条件的数字。这个数字很难计算,但很容易核实。这是工作量证明的核心思想

为了便于理解,举个例子:

假设一个整数x乘以另一个整数y的乘积的哈希值必须以0结尾,即hash(x * y)=ac23dc.0.设变量x=5,求y的值?

用Python实现,如下所示:

结果是:y=21,因为:

哈希(5 * 21)=1253E9373E.5E3600155E860在比特币中,使用了名为Hashcash的工作量证明算法,与上述问题类似。矿工争夺创建区块计算结果的权利。

通常情况下,计算的难度与目标字符串需要满足的特定字符数成正比。矿工计算结果后会获得比特币奖励。当然,在网络上验证这个结果是非常容易的。

实现工作量证书

让我们实现一个类似幂算法。规则是:找一个数p,使与前一个块的证明拼接的字符串的哈希值以4个零开始。

衡量算法复杂度的方法是修改零的个数。用四个零进行演示,你会发现多一个零会大大增加计算结果所需的时间。

现在区块链类基本完成了,我们就用HTTP请求来交互。

区块链作为API接口

我们将使用Python Flask框架,这是一个轻量级的Web应用程序框架。将网络请求映射到Python函数非常方便。现在让区块链在Flask Web上运行。

我们将创建三个接口:

/transactions/new创建一个事务并将其添加到块中。

/mine告诉服务器挖掘新的块。

/chain返回整个区块链

创建节点

我们的“烧瓶服务器”将作为区块链网络中的一个节点。让我们先添加一些框架代码:

简单解释一下上面的代码:

第15行:创建一个节点。

第18行:为节点创建一个随机名称。

第21行:实例区块链类。

第2426行:创建/mine GET接口。

第2830行:创建/transactions/new POST接口,它可以向接口发送事务数据。

第3238行:创建/chain接口并返回整个区块链。

第4041行:服务运行在端口5000上。

发送交易

发送到节点的交易数据结构如下:

以前有过添加事务的方法,所以基于接口添加事务非常简单:

挖矿

采矿是神奇的。很简单。它做以下三件事:

计算工作量证明能力。

通过添加新交易给矿工(他们自己)一枚硬币。

构造一个新的块并将其添加到链中

注意,事务的接收方是我们自己的服务器节点,我们做的大部分工作只是围绕区块链类方法进行交互。此时,即使我们的区块链已经完成,让我们实际运行它。

运行区块链

可以使用cURL或者Postman与API进行交互。

服务器启动:

让我们通过请求http://localhost:5000/mine来进行挖掘:

通过过帐请求,添加一个新交易:

如果不使用Postman,下面的cURL语句是一样的:

挖了两次矿,有3块。可以通过请求http://localhost:5000/chain获取所有的块信息

11

一致性(共识)

我们已经有一个基本的区块链,可以接受交易和采矿,但区块链系统应该是分布式的。

既然是分布式的,怎么做才能保证所有节点都有相同的链呢?这就是一致性问题。如果我们希望网络上有多个节点,我们必须实现一致的算法。

注册节点

在实现一致性算法之前,我们需要找到一种方法让一个节点知道它的邻居。

每个节点都需要记录网络中的其他节点,所以我们添加一些新的接口:

/nodes/register接收URL形式的新节点列表。

/nodes/resolve执行一致性算法来解决任何冲突,并确保节点具有正确的链。

我们修改区块链的init函数,提供注册节点方法:

我们使用set来存储节点,这是一种避免重复添加节点的简单方法。

实现一致性算法

如前所述,冲突意味着不同的节点有不同的链。为了解决这个问题,规定最长最有效的链是最终链。换句话说,网络中最长和最有效的链是实际链。

我们使用以下算法在网络中达成共识:

11

第一个方法valid_chain()用于检查是否是有效的链,遍历每个块验证hash和proof。

第二种方法resolve_conflicts()用于解决冲突,遍历所有邻居节点,用前面的方法检查链的有效性。如果发现链条更长,就会更换自己的链条。

让我们添加两条路由,一条用于注册节点,一条用于解决冲突。

您可以在不同的机器上运行节点,或者在一台机器上打开不同的网络端口来模拟多节点网络。

这里,在同一台机器上打开不同的端口演示,在不同的终端上运行以下命令来启动两个节点:

http://本地主机:5000

http://本地主机:5001

然后在节点2上挖两个块,确保是一个较长的链,然后在节点1上访问接口/nodes/resolve。此时,节点1的链将被共识算法替换为节点2的链。

嗯,你可以邀请朋友来测试你的区块链。

暂无评论

暂无评论...