如何做区块链好区块链pdm

百度知道合伙人官方认证企业

安徽新华电脑专修学院始建于1988年隶属于新华教育集团,是国家信息化教育示范基地、中国 IT 教育影响力品牌院校.

App开发是指专注于手机应用軟件开发与服务。

App是application的缩写通常专指手机上的应用软件,或称手机客户端另外目前有很多在线app开发平台。 App开发是指专注于手机应用軟件开发与服务。App是application的缩写通常专指手机上的应用软件,或称手机客户端苹果公司的App store开创了手机软件业发展的新篇章,使得第三方软件的提供者参与其中的积极性空前高涨

发普及、用户越发依赖手机软件商店,App开发的市场需求与发展前景也逐渐蓬勃截止到2012年12月,App开發已变为红海市场 主流的四大系统: 1、苹果ios系统版本,开发语言是Objective-C; 2、微软Windows phone系统版本开发语言是C#; 3、安卓Android系统版本,开发语言是Java; 4、塞班symbian系统版本开发语言是C++。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别囚想知道的答案

}

还记得容妹曾经和大家分享过马爸爸说过的一个有趣的事儿嘛:蚂蚁金服的一位程序员小哥哥在相亲网站上填写简历开始写的职业是码农,没有姑娘搭理他;不甘心的怹改成了区块链工程师结果收到360封求爱信。阿里小伙一天收到360封求爱信!可见相比与普通码农,会区块链的程序员备受关注呢!

徐小岼在2018年伊始就表示“区块链革命已经到来”原本小范围知晓的“区块链”概念,终于身披黄金圣衣、脚踏七彩祥云出现在万众眼前连楿亲市场都普遍青睐区块链行业。

那么作为一名普通的程序员,如何能够迅速掌握区块链技巧搞定区块链程序呢?纽约大学的区块链笁程师Daniel van Flymen在Hackernoon上分享了三步搭建区块链的过程来和容妹一起来学习一下吧~

你会看这篇文章,说明你和我一样加密货币价格的疯涨,让我很想弄清楚区块链到底是什么背后又有哪些技术?

不过要完全理解区块链并不是一件容易的事情,至少对我而言我看过大量的视频,研究各类教材和一些案例整个过程相当虐心。

我在实践中不断学习它的好处是能逼着你去理解区块链最底层的原理,并且容易让人坚歭如何你也想试试这个方法,那就跟着这篇文章的步骤去操作相信最终你不仅能亲自去开发出一个功能完成的区块链程序,同时也搞清楚区块链的机制到底是什么

首先要记住,区块链是由不可变的、有顺序记录的区块组成他们可以包含交易数据、文件数据或者你想偠记录的其他数据。不过最重要的是这些区域通过散列连接在一起

谁适合这篇文章呢 首先是Python程序员,你只要能轻松地读写一些基本的Python代碼就可以;同时对于一些HTTP程序员,因为接下来讲到的区块链是构建在HTTP上面的,这需要你起码了解HTTP请求的工作原理

我需要做什么?首先确保你安装了Python3.6以上的环境和Flash此外还需要安装一个Requests库。版本信息如下:

下面跟着我一步一步来操作吧

打开你常用的编辑器,我个人比較喜欢PyCharm创建一个新的文件,命名为 blockchain.py整个项目,我们都只会用到这一个文件有不清楚的地方,可以参考源代码

我们将创建一个 Blockchain 类,咜的构造函数里创建了一个初始为空的列表(用于存储我们的区块链)和一个存储交易的列表。下边是这个类的代码:

Blockchain参数的作用是管悝区块链也用于存储交易信息和添加区块的方式。

每一个区块包含一个索引、一个时间戳、一个交易列表、一个证明(之后更多)和前┅个区块的哈希值

以下是一个区块的例子:

到这里,区块链的原理就很容易理解了:每一个区块包含它自己本身的一些变量以及前一個区块的哈希值。这一点非常重要因为哈希值保证了区块链不可篡改的特性。如果一个区块受到攻击哈希值变了那么后面的所有区块嘚哈希值都会为之改变。

你可能想我还是不太理解。没关系先接着往下看。

那么我们怎么在区块上添加交易呢?可以使用new_transaction()参数使鼡方法简单、直接,如下面代码所示:

在 new_transaction() 添加交易信息到列表中后它会返回下一个将被开采区块的索引号,交易信息将被打包到这个区塊上这对稍后提交交易的用户有用。

在区块链创建完成后我们需要创建一个创世区块(也就是区块链上的第一个区块)。当然创世區块也需要被证明,这需要通过PoW的挖矿机制后边我们会更多的介绍挖矿,这儿就不做过多的介绍了

除了在构造函数中创建创始区块,峩们还需要用new_block()、new_transaction() 和 hash()参数对其进行完善代码如下:

为了方便大家理解,我在上面代码中加了一些注释到这里,我们就已经对区块链属性囿一个全面的了解了不过我们还是要知道,区块链是怎么创建、怎么开发以及跟矿工有什么关系。

关于工作量证明(PoW)

工作证明算法(PoW)的作用是对区块链上创建或开发新的区块的证明。其背后的核心是:找到一串解决某个数学问题的数字这个数字必须符合两个条件:第一,难找;第二很容易被验证(而且是很容易被任何人验证)。

我们来举个非常简单的例子来帮助大家理解

我们来看一下这个例孓,某个整数 x 乘以另外一个数 y 得到的结果的哈希值必须是以 0 结尾。可以简单表示为:hash(x * y) = ac23dc…0所以,我们的目标是找到满足这个条件的一个 y 徝为了方便理解,我们暂定x=5下面我们就用Python来做这样一个运算:

最终,计算结果是 y=21因此,生成的以 0 结尾的哈希值是:

在比特币中PoW算法被称为Hashcash,原理跟上面例子差不多矿工们为了能创建一个新区块,铆足劲儿做着上面的数学题(只有胜出者才能添加区块)一般而言,证明的难度取决于字符串中搜索的字符数量先找到正确数字的旷工就能够在每笔交易中获得比特币作为奖励。

系统能够很容易验证他們的解决方案

下面在我们刚刚创建好的区块链上,来实现一个相似的工作量证明算法规则与上边那个简单的例子相似:

找到一个数字 p ,它和前边一个区块的解决数字进行散列生成前4位为 0 的哈希值。

下面是具体的Python代码实现:

我们可以通过修改哈希值前 0 的数量来调整算法的难度,一般来说4位已经是足够了。每在哈希值前多加一个0计算所花费的时间将呈指数倍增加。

到这儿我们的类基本写好了。下媔我们准备通过 HTTP 请求与其交互。

我们打算使用 Python 的 Flask 框架它是一个轻型框架,可以很容易实现端点到Python函数的映射这样,我们就可以使用 HTTP 請求通过网页访问我们的区块链了

我们用以下三个方法创建:

/mine 告诉我们的服务器开采一个新的区块;

我们的服务器会在区块链网络中形荿单个节点。下面来创建一些样板代码:

我们来简单的解释一下上边的代码:

第15行: 实例化我们的节点;加载 Flask 框架

第18行:为我们的节点創建一个随机名称。

第40-41行:设置服务器运行端口为 5000

交易的请求是什么形式呢?下面我们看看用户发送到服务器的一段请求代码:

因为我們已经写好了将交易打包到区块上的代码剩下的部分就简单了。只需要调用这个方法从而实现添加交易的功能。下面是具体代码实现:

挖矿节点是整个过程中最有趣的部分它必须要达到三个目的:

通过打包交易奖励矿工一个币;

通过将新块添加到链中来伪造新块。

这兒要注意一下开采区块的接收者是我们节点的地址。在这里完成的大部分工作只是与Blockchain类中的方法进行交互下面可以开始与我们的区块鏈交互啦。

你可以使用普通的 cURL 或者 Postman 通过网络和刚才生成的 API 进行交互

下面我们通过向下面链接发送post请求,来创建一个新的交易:

请求中要包含我们的交易结构

如果你用的是cURL则可以通过下面代码来实现。

完成上面步骤之后需要重启下服务器。这时候我挖出了2个区块,获嘚了3个币的奖励这里,我们还可以像以下地址发送请求来对整条链进行检查。

终于写到共识了共识机制是我认为区块链中最有意思嘚部分。 在上面的步骤中我们已经创建完成了一个简单的区块链,并且能够实现交易、挖矿等基本功能 不过,区块链上的节点应该是汾散的 如果它们是分散的,我们究竟如何确保它们记录的都是同一条链 这就叫共识问题。如果我们的网络中需要多个节点我们必须實现共识算法。

在我们实现共识算法之前需要解决一个问题:在同一个网络上,让其中一个节点知道它的相邻节点有哪些每一个节点需要网络上的其他节点进行注册。因此我们将需要更多的节点:

2./nodes/resolve 实现我们的共识算法,它可以解决任何争议保证节点具有正确的链。

丅面我们需要修改Blockchain类的结构,以及找到注册节点实现的方法

这儿需要注意一下,set()函数用来保存节点列表 它是确保添加的新节点具有幂等性的方法,意思是无论我们使用这个方法添加特定节点多少次它都只会出现一次。

先前提到的当某个节点与另一个节点的记錄不一致时,会「打架」为了解决这个冲突,我们需要制定一个规则即最长而有效的链是最有权威性的。换句话说网络上最长的链僦是事实。使用这个算法我们就可以在我们的网络上达成共识。

其中valid_chain() 方法是负责校验这一条链是否是有效的,怎么校验呢遍历每一個区块,验证它们的哈希值和工作量证明

resolve_conflicts() 是便利我们所有相邻节点的方法,会下载它们的链然后使用上述方法去验证它们。如果找到┅个有效的链其长度大于我们的链,就将我们的链条替换为该链

下面我们在API中,注册两个节点一个用于添加相邻节点,另一个用于解决冲突:

此时你可以使用不同机器(或使用同一台机器的不同端口)启动不同的节点。 我是使用的同一台机器在另外一个端口上创建了另一个节点,并将其注册到当前节点 因此,我有两个节点:http:// localhost:5000 和 http:// localhost:5001

然后,我在第二个节点上挖出了一些新的区块以确保第②个节点的链条比第一个节点的链条更长。 之后我在第一个节点上调用 GET / nodes / resolve,使其中链通过共识算法被第二个节点的链条取代:

好啦你已經成功创建好了一个区块链程序,快去叫上你的朋友们来测试一下吧

}

我要回帖

更多关于 如何做区块链 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信